initial commit
authorAnthony Talarico <talarico@gaslightmedia.com>
Wed, 9 May 2018 12:12:23 +0000 (08:12 -0400)
committerAnthony Talarico <talarico@gaslightmedia.com>
Wed, 9 May 2018 12:12:23 +0000 (08:12 -0400)
583 files changed:
.gitignore
.nvmrc
404.php [deleted file]
Gruntfile.js [new file with mode: 0644]
README.md [new file with mode: 0644]
archive.php [deleted file]
assets/blue-down-tab.png [new file with mode: 0644]
assets/bottom.png [new file with mode: 0644]
assets/css/glm-dev.css [deleted file]
assets/css/glm-dev.css.map [deleted file]
assets/default-header.jpg [new file with mode: 0644]
assets/footer.jpg [new file with mode: 0644]
assets/js/glm-dev.js [deleted file]
assets/logo.gif [new file with mode: 0644]
assets/smartbanner/smartbanner.css [new file with mode: 0644]
assets/smartbanner/smartbanner.js [new file with mode: 0644]
assets/smartbanner/smartbanner.png [new file with mode: 0644]
assets/social-icons.png [new file with mode: 0644]
assets/weather-arrow-down.png [new file with mode: 0644]
assets/weather-badge.png [new file with mode: 0644]
bower.json [new file with mode: 0644]
comments.php
config [deleted file]
content-none.php [deleted file]
content-page.php [deleted file]
content-search.php [deleted file]
content-single.php [deleted file]
content.php [deleted file]
css/animate.css [deleted file]
css/app.css [new file with mode: 0644]
css/editor-style.css [deleted file]
css/fontawesome/css/font-awesome.css [deleted file]
css/fontawesome/css/font-awesome.min.css [deleted file]
css/fontawesome/fonts/FontAwesome.otf [deleted file]
css/fontawesome/fonts/fontawesome-webfont.eot [deleted file]
css/fontawesome/fonts/fontawesome-webfont.svg [deleted file]
css/fontawesome/fonts/fontawesome-webfont.ttf [deleted file]
css/fontawesome/fonts/fontawesome-webfont.woff [deleted file]
css/fontawesome/fonts/fontawesome-webfont.woff2 [deleted file]
css/fonts/slick.eot [deleted file]
css/fonts/slick.svg [deleted file]
css/fonts/slick.ttf [deleted file]
css/fonts/slick.woff [deleted file]
css/images/caption-bg.png [deleted file]
css/images/close.png [deleted file]
css/images/close@2x.png [deleted file]
css/images/controls.png [deleted file]
css/images/left-arrow.png [deleted file]
css/images/loading.gif [deleted file]
css/images/loading@2x.gif [deleted file]
css/images/next.png [deleted file]
css/images/next@2x.png [deleted file]
css/images/prev.png [deleted file]
css/images/prev@2x.png [deleted file]
css/images/right-arrow.png [deleted file]
css/nivo-lightbox.css [deleted file]
css/responsive.css [deleted file]
css/slick.css [deleted file]
demo.php [deleted file]
fancybox/README.md [new file with mode: 0644]
fancybox/bower.json [new file with mode: 0644]
fancybox/dist/jquery.fancybox.css [new file with mode: 0644]
fancybox/dist/jquery.fancybox.js [new file with mode: 0644]
fancybox/dist/jquery.fancybox.min.css [new file with mode: 0644]
fancybox/dist/jquery.fancybox.min.js [new file with mode: 0644]
fancybox/docs/index.html [new file with mode: 0644]
fancybox/gulpfile.js [new file with mode: 0644]
fancybox/package.json [new file with mode: 0644]
fancybox/src/css/core.css [new file with mode: 0644]
fancybox/src/css/fullscreen.css [new file with mode: 0644]
fancybox/src/css/slideshow.css [new file with mode: 0644]
fancybox/src/css/thumbs.css [new file with mode: 0644]
fancybox/src/js/core.js [new file with mode: 0644]
fancybox/src/js/fullscreen.js [new file with mode: 0644]
fancybox/src/js/guestures.js [new file with mode: 0644]
fancybox/src/js/hash.js [new file with mode: 0644]
fancybox/src/js/media.js [new file with mode: 0644]
fancybox/src/js/slideshow.js [new file with mode: 0644]
fancybox/src/js/thumbs.js [new file with mode: 0644]
favicon.ico [new file with mode: 0644]
footer.php [deleted file]
functions.php
glm-dev/js/glm-dev.js [deleted file]
glm-dev/scss/_body.scss [deleted file]
glm-dev/scss/_settings.scss [deleted file]
glm-dev/scss/glm-dev.scss [deleted file]
glm-member-db-events/views/front/events/eventsFeed.html [new file with mode: 0644]
gulpfile.js [deleted file]
header.php [deleted file]
home-page.php [deleted file]
images/bg.png [deleted file]
images/controls.png [deleted file]
images/demo/bg1.jpg [deleted file]
images/demo/bg2.jpg [deleted file]
images/demo/bg3.jpg [deleted file]
images/demo/bg4.jpg [deleted file]
images/demo/icon1.png [deleted file]
images/demo/icon2.png [deleted file]
images/demo/icon3.png [deleted file]
images/demo/icon4.png [deleted file]
images/demo/icon5.png [deleted file]
images/demo/icon6.png [deleted file]
images/demo/portfolio1.jpg [deleted file]
images/demo/portfolio2.jpg [deleted file]
images/demo/portfolio3.jpg [deleted file]
images/demo/portfolio4.jpg [deleted file]
images/demo/portfolio5.jpg [deleted file]
images/demo/portfolio6.jpg [deleted file]
images/demo/portfolio7.jpg [deleted file]
images/demo/portfolio8.jpg [deleted file]
images/demo/slider1.jpg [deleted file]
images/demo/slider2.jpg [deleted file]
images/demo/team1.jpg [deleted file]
images/demo/team2.jpg [deleted file]
images/demo/team3.jpg [deleted file]
images/demo/team4.jpg [deleted file]
images/demo/team5.jpg [deleted file]
images/demo/team6.jpg [deleted file]
images/demo/team7.jpg [deleted file]
images/demo/testimonial1.jpg [deleted file]
images/demo/testimonial2.jpg [deleted file]
images/demo/testimonial3.jpg [deleted file]
images/down-arrow.png [deleted file]
images/dummy.png [deleted file]
images/menu.png [deleted file]
images/no-image.jpg [deleted file]
images/overlay1.png [deleted file]
images/overlay2.png [deleted file]
images/overlay3.png [deleted file]
images/overlay4.png [deleted file]
images/portfolio-text-bg.png [deleted file]
images/zoom.png [deleted file]
inc/accesspress-functions.php [deleted file]
inc/accesspress-header.php [deleted file]
inc/accesspress-options.php [deleted file]
inc/ajax.php [deleted file]
inc/class-tgm-plugin-activation.php [deleted file]
inc/customizer.php [deleted file]
inc/jetpack.php [deleted file]
inc/options-framework/css/optionsframework.css [deleted file]
inc/options-framework/images/accesspressthemes.png [deleted file]
inc/options-framework/images/demo-btn.png [deleted file]
inc/options-framework/images/ico-delete.png [deleted file]
inc/options-framework/images/logo-side.jpg [deleted file]
inc/options-framework/images/logo-top.jpg [deleted file]
inc/options-framework/images/logo.png [deleted file]
inc/options-framework/images/tick.png [deleted file]
inc/options-framework/images/upgrade-bottom.jpg [deleted file]
inc/options-framework/images/upgrade-btn.png [deleted file]
inc/options-framework/images/upgrade-top.jpg [deleted file]
inc/options-framework/includes/class-options-framework-admin.php [deleted file]
inc/options-framework/includes/class-options-framework.php [deleted file]
inc/options-framework/includes/class-options-interface.php [deleted file]
inc/options-framework/includes/class-options-media-uploader.php [deleted file]
inc/options-framework/includes/class-options-sanitization.php [deleted file]
inc/options-framework/js/ajax.js [deleted file]
inc/options-framework/js/media-uploader.js [deleted file]
inc/options-framework/js/options-custom.js [deleted file]
inc/options-framework/options-framework.php [deleted file]
inc/template-tags.php [deleted file]
index-parallax.php [deleted file]
index.php
js/SmoothScroll.js [deleted file]
js/app.js [new file with mode: 0644]
js/custom.js [deleted file]
js/custom/pageSetup.js [new file with mode: 0644]
js/customizer.js [deleted file]
js/dollarsign.js [new file with mode: 0644]
js/fastclick/lib/fastclick.js [new file with mode: 0644]
js/foundation/css/foundation.css.map [new file with mode: 0644]
js/foundation/css/normalize.css.map [new file with mode: 0644]
js/foundation/js/foundation.js [new file with mode: 0644]
js/foundation/js/foundation.min.js [new file with mode: 0644]
js/foundation/js/foundation/foundation.abide.js [new file with mode: 0644]
js/foundation/js/foundation/foundation.accordion.js [new file with mode: 0644]
js/foundation/js/foundation/foundation.alert.js [new file with mode: 0644]
js/foundation/js/foundation/foundation.clearing.js [new file with mode: 0644]
js/foundation/js/foundation/foundation.dropdown.js [new file with mode: 0644]
js/foundation/js/foundation/foundation.equalizer.js [new file with mode: 0644]
js/foundation/js/foundation/foundation.interchange.js [new file with mode: 0644]
js/foundation/js/foundation/foundation.joyride.js [new file with mode: 0644]
js/foundation/js/foundation/foundation.js [new file with mode: 0644]
js/foundation/js/foundation/foundation.magellan.js [new file with mode: 0644]
js/foundation/js/foundation/foundation.offcanvas.js [new file with mode: 0644]
js/foundation/js/foundation/foundation.orbit.js [new file with mode: 0644]
js/foundation/js/foundation/foundation.reveal.js [new file with mode: 0644]
js/foundation/js/foundation/foundation.slider.js [new file with mode: 0644]
js/foundation/js/foundation/foundation.tab.js [new file with mode: 0644]
js/foundation/js/foundation/foundation.tooltip.js [new file with mode: 0644]
js/foundation/js/foundation/foundation.topbar.js [new file with mode: 0644]
js/foundation/js/vendor/fastclick.js [new file with mode: 0644]
js/foundation/js/vendor/jquery.cookie.js [new file with mode: 0644]
js/foundation/js/vendor/jquery.js [new file with mode: 0644]
js/foundation/js/vendor/modernizr.js [new file with mode: 0644]
js/foundation/js/vendor/placeholder.js [new file with mode: 0644]
js/html5shiv.js [deleted file]
js/jquery-placeholder/jquery.placeholder.js [new file with mode: 0644]
js/jquery.cookie/jquery.cookie.js [new file with mode: 0644]
js/jquery.easing.js [deleted file]
js/jquery.easing.min.js [deleted file]
js/jquery.fitvids.js [deleted file]
js/jquery.localScroll.js [deleted file]
js/jquery.localScroll.min.js [deleted file]
js/jquery.nav.js [deleted file]
js/jquery.scrollTo.js [deleted file]
js/jquery.scrollTo.min.js [deleted file]
js/jquery/dist/core.js [new file with mode: 0644]
js/jquery/dist/jquery.js [new file with mode: 0644]
js/jquery/dist/jquery.min.js [new file with mode: 0644]
js/jquery/dist/jquery.min.map [new file with mode: 0644]
js/jquery/dist/jquery.slim.js [new file with mode: 0644]
js/jquery/dist/jquery.slim.min.js [new file with mode: 0644]
js/jquery/dist/jquery.slim.min.map [new file with mode: 0644]
js/jquery/external/sizzle/dist/sizzle.js [new file with mode: 0644]
js/jquery/external/sizzle/dist/sizzle.min.js [new file with mode: 0644]
js/jquery/external/sizzle/dist/sizzle.min.map [new file with mode: 0644]
js/jquery/src/ajax.js [new file with mode: 0644]
js/jquery/src/ajax/jsonp.js [new file with mode: 0644]
js/jquery/src/ajax/load.js [new file with mode: 0644]
js/jquery/src/ajax/parseXML.js [new file with mode: 0644]
js/jquery/src/ajax/script.js [new file with mode: 0644]
js/jquery/src/ajax/var/location.js [new file with mode: 0644]
js/jquery/src/ajax/var/nonce.js [new file with mode: 0644]
js/jquery/src/ajax/var/rquery.js [new file with mode: 0644]
js/jquery/src/ajax/xhr.js [new file with mode: 0644]
js/jquery/src/attributes.js [new file with mode: 0644]
js/jquery/src/attributes/attr.js [new file with mode: 0644]
js/jquery/src/attributes/classes.js [new file with mode: 0644]
js/jquery/src/attributes/prop.js [new file with mode: 0644]
js/jquery/src/attributes/support.js [new file with mode: 0644]
js/jquery/src/attributes/val.js [new file with mode: 0644]
js/jquery/src/callbacks.js [new file with mode: 0644]
js/jquery/src/core.js [new file with mode: 0644]
js/jquery/src/core/DOMEval.js [new file with mode: 0644]
js/jquery/src/core/access.js [new file with mode: 0644]
js/jquery/src/core/init.js [new file with mode: 0644]
js/jquery/src/core/nodeName.js [new file with mode: 0644]
js/jquery/src/core/parseHTML.js [new file with mode: 0644]
js/jquery/src/core/ready-no-deferred.js [new file with mode: 0644]
js/jquery/src/core/ready.js [new file with mode: 0644]
js/jquery/src/core/readyException.js [new file with mode: 0644]
js/jquery/src/core/stripAndCollapse.js [new file with mode: 0644]
js/jquery/src/core/support.js [new file with mode: 0644]
js/jquery/src/core/var/rsingleTag.js [new file with mode: 0644]
js/jquery/src/css.js [new file with mode: 0644]
js/jquery/src/css/addGetHookIf.js [new file with mode: 0644]
js/jquery/src/css/adjustCSS.js [new file with mode: 0644]
js/jquery/src/css/curCSS.js [new file with mode: 0644]
js/jquery/src/css/hiddenVisibleSelectors.js [new file with mode: 0644]
js/jquery/src/css/showHide.js [new file with mode: 0644]
js/jquery/src/css/support.js [new file with mode: 0644]
js/jquery/src/css/var/cssExpand.js [new file with mode: 0644]
js/jquery/src/css/var/getStyles.js [new file with mode: 0644]
js/jquery/src/css/var/isHiddenWithinTree.js [new file with mode: 0644]
js/jquery/src/css/var/rmargin.js [new file with mode: 0644]
js/jquery/src/css/var/rnumnonpx.js [new file with mode: 0644]
js/jquery/src/css/var/swap.js [new file with mode: 0644]
js/jquery/src/data.js [new file with mode: 0644]
js/jquery/src/data/Data.js [new file with mode: 0644]
js/jquery/src/data/var/acceptData.js [new file with mode: 0644]
js/jquery/src/data/var/dataPriv.js [new file with mode: 0644]
js/jquery/src/data/var/dataUser.js [new file with mode: 0644]
js/jquery/src/deferred.js [new file with mode: 0644]
js/jquery/src/deferred/exceptionHook.js [new file with mode: 0644]
js/jquery/src/deprecated.js [new file with mode: 0644]
js/jquery/src/dimensions.js [new file with mode: 0644]
js/jquery/src/effects.js [new file with mode: 0644]
js/jquery/src/effects/Tween.js [new file with mode: 0644]
js/jquery/src/effects/animatedSelector.js [new file with mode: 0644]
js/jquery/src/event.js [new file with mode: 0644]
js/jquery/src/event/ajax.js [new file with mode: 0644]
js/jquery/src/event/alias.js [new file with mode: 0644]
js/jquery/src/event/focusin.js [new file with mode: 0644]
js/jquery/src/event/support.js [new file with mode: 0644]
js/jquery/src/event/trigger.js [new file with mode: 0644]
js/jquery/src/exports/amd.js [new file with mode: 0644]
js/jquery/src/exports/global.js [new file with mode: 0644]
js/jquery/src/jquery.js [new file with mode: 0644]
js/jquery/src/manipulation.js [new file with mode: 0644]
js/jquery/src/manipulation/_evalUrl.js [new file with mode: 0644]
js/jquery/src/manipulation/buildFragment.js [new file with mode: 0644]
js/jquery/src/manipulation/getAll.js [new file with mode: 0644]
js/jquery/src/manipulation/setGlobalEval.js [new file with mode: 0644]
js/jquery/src/manipulation/support.js [new file with mode: 0644]
js/jquery/src/manipulation/var/rcheckableType.js [new file with mode: 0644]
js/jquery/src/manipulation/var/rscriptType.js [new file with mode: 0644]
js/jquery/src/manipulation/var/rtagName.js [new file with mode: 0644]
js/jquery/src/manipulation/wrapMap.js [new file with mode: 0644]
js/jquery/src/offset.js [new file with mode: 0644]
js/jquery/src/queue.js [new file with mode: 0644]
js/jquery/src/queue/delay.js [new file with mode: 0644]
js/jquery/src/selector-native.js [new file with mode: 0644]
js/jquery/src/selector-sizzle.js [new file with mode: 0644]
js/jquery/src/selector.js [new file with mode: 0644]
js/jquery/src/serialize.js [new file with mode: 0644]
js/jquery/src/traversing.js [new file with mode: 0644]
js/jquery/src/traversing/findFilter.js [new file with mode: 0644]
js/jquery/src/traversing/var/dir.js [new file with mode: 0644]
js/jquery/src/traversing/var/rneedsContext.js [new file with mode: 0644]
js/jquery/src/traversing/var/siblings.js [new file with mode: 0644]
js/jquery/src/var/ObjectFunctionString.js [new file with mode: 0644]
js/jquery/src/var/arr.js [new file with mode: 0644]
js/jquery/src/var/class2type.js [new file with mode: 0644]
js/jquery/src/var/concat.js [new file with mode: 0644]
js/jquery/src/var/document.js [new file with mode: 0644]
js/jquery/src/var/documentElement.js [new file with mode: 0644]
js/jquery/src/var/fnToString.js [new file with mode: 0644]
js/jquery/src/var/getProto.js [new file with mode: 0644]
js/jquery/src/var/hasOwn.js [new file with mode: 0644]
js/jquery/src/var/indexOf.js [new file with mode: 0644]
js/jquery/src/var/pnum.js [new file with mode: 0644]
js/jquery/src/var/push.js [new file with mode: 0644]
js/jquery/src/var/rcssNum.js [new file with mode: 0644]
js/jquery/src/var/rnothtmlwhite.js [new file with mode: 0644]
js/jquery/src/var/slice.js [new file with mode: 0644]
js/jquery/src/var/support.js [new file with mode: 0644]
js/jquery/src/var/toString.js [new file with mode: 0644]
js/jquery/src/wrap.js [new file with mode: 0644]
js/modernizr/feature-detects/a-download.js [new file with mode: 0644]
js/modernizr/feature-detects/audio-audiodata-api.js [new file with mode: 0644]
js/modernizr/feature-detects/audio-webaudio-api.js [new file with mode: 0644]
js/modernizr/feature-detects/battery-api.js [new file with mode: 0644]
js/modernizr/feature-detects/battery-level.js [new file with mode: 0644]
js/modernizr/feature-detects/blob-constructor.js [new file with mode: 0644]
js/modernizr/feature-detects/canvas-todataurl-type.js [new file with mode: 0644]
js/modernizr/feature-detects/contenteditable.js [new file with mode: 0644]
js/modernizr/feature-detects/contentsecuritypolicy.js [new file with mode: 0644]
js/modernizr/feature-detects/contextmenu.js [new file with mode: 0644]
js/modernizr/feature-detects/cookies.js [new file with mode: 0644]
js/modernizr/feature-detects/cors.js [new file with mode: 0644]
js/modernizr/feature-detects/css-backgroundposition-shorthand.js [new file with mode: 0644]
js/modernizr/feature-detects/css-backgroundposition-xy.js [new file with mode: 0644]
js/modernizr/feature-detects/css-backgroundrepeat.js [new file with mode: 0644]
js/modernizr/feature-detects/css-backgroundsizecover.js [new file with mode: 0644]
js/modernizr/feature-detects/css-boxsizing.js [new file with mode: 0644]
js/modernizr/feature-detects/css-calc.js [new file with mode: 0644]
js/modernizr/feature-detects/css-cubicbezierrange.js [new file with mode: 0644]
js/modernizr/feature-detects/css-displayrunin.js [new file with mode: 0644]
js/modernizr/feature-detects/css-displaytable.js [new file with mode: 0644]
js/modernizr/feature-detects/css-filters.js [new file with mode: 0644]
js/modernizr/feature-detects/css-hyphens.js [new file with mode: 0644]
js/modernizr/feature-detects/css-lastchild.js [new file with mode: 0644]
js/modernizr/feature-detects/css-mask.js [new file with mode: 0644]
js/modernizr/feature-detects/css-mediaqueries.js [new file with mode: 0644]
js/modernizr/feature-detects/css-objectfit.js [new file with mode: 0644]
js/modernizr/feature-detects/css-overflow-scrolling.js [new file with mode: 0644]
js/modernizr/feature-detects/css-pointerevents.js [new file with mode: 0644]
js/modernizr/feature-detects/css-positionsticky.js [new file with mode: 0644]
js/modernizr/feature-detects/css-regions.js [new file with mode: 0644]
js/modernizr/feature-detects/css-remunit.js [new file with mode: 0644]
js/modernizr/feature-detects/css-resize.js [new file with mode: 0644]
js/modernizr/feature-detects/css-scrollbars.js [new file with mode: 0644]
js/modernizr/feature-detects/css-shapes.js [new file with mode: 0644]
js/modernizr/feature-detects/css-subpixelfont.js [new file with mode: 0644]
js/modernizr/feature-detects/css-supports.js [new file with mode: 0644]
js/modernizr/feature-detects/css-userselect.js [new file with mode: 0644]
js/modernizr/feature-detects/css-vhunit.js [new file with mode: 0644]
js/modernizr/feature-detects/css-vmaxunit.js [new file with mode: 0644]
js/modernizr/feature-detects/css-vminunit.js [new file with mode: 0644]
js/modernizr/feature-detects/css-vwunit.js [new file with mode: 0644]
js/modernizr/feature-detects/custom-protocol-handler.js [new file with mode: 0644]
js/modernizr/feature-detects/dart.js [new file with mode: 0644]
js/modernizr/feature-detects/dataview-api.js [new file with mode: 0644]
js/modernizr/feature-detects/dom-classlist.js [new file with mode: 0644]
js/modernizr/feature-detects/dom-createElement-attrs.js [new file with mode: 0644]
js/modernizr/feature-detects/dom-dataset.js [new file with mode: 0644]
js/modernizr/feature-detects/dom-microdata.js [new file with mode: 0644]
js/modernizr/feature-detects/elem-datalist.js [new file with mode: 0644]
js/modernizr/feature-detects/elem-details.js [new file with mode: 0644]
js/modernizr/feature-detects/elem-output.js [new file with mode: 0644]
js/modernizr/feature-detects/elem-progress-meter.js [new file with mode: 0644]
js/modernizr/feature-detects/elem-ruby.js [new file with mode: 0644]
js/modernizr/feature-detects/elem-time.js [new file with mode: 0644]
js/modernizr/feature-detects/elem-track.js [new file with mode: 0644]
js/modernizr/feature-detects/emoji.js [new file with mode: 0644]
js/modernizr/feature-detects/es5-strictmode.js [new file with mode: 0644]
js/modernizr/feature-detects/event-deviceorientation-motion.js [new file with mode: 0644]
js/modernizr/feature-detects/exif-orientation.js [new file with mode: 0644]
js/modernizr/feature-detects/file-api.js [new file with mode: 0644]
js/modernizr/feature-detects/file-filesystem.js [new file with mode: 0644]
js/modernizr/feature-detects/forms-fileinput.js [new file with mode: 0644]
js/modernizr/feature-detects/forms-formattribute.js [new file with mode: 0644]
js/modernizr/feature-detects/forms-inputnumber-l10n.js [new file with mode: 0644]
js/modernizr/feature-detects/forms-placeholder.js [new file with mode: 0644]
js/modernizr/feature-detects/forms-speechinput.js [new file with mode: 0644]
js/modernizr/feature-detects/forms-validation.js [new file with mode: 0644]
js/modernizr/feature-detects/fullscreen-api.js [new file with mode: 0644]
js/modernizr/feature-detects/gamepad.js [new file with mode: 0644]
js/modernizr/feature-detects/getusermedia.js [new file with mode: 0644]
js/modernizr/feature-detects/ie8compat.js [new file with mode: 0644]
js/modernizr/feature-detects/iframe-sandbox.js [new file with mode: 0644]
js/modernizr/feature-detects/iframe-seamless.js [new file with mode: 0644]
js/modernizr/feature-detects/iframe-srcdoc.js [new file with mode: 0644]
js/modernizr/feature-detects/img-apng.js [new file with mode: 0644]
js/modernizr/feature-detects/img-webp.js [new file with mode: 0644]
js/modernizr/feature-detects/json.js [new file with mode: 0644]
js/modernizr/feature-detects/lists-reversed.js [new file with mode: 0644]
js/modernizr/feature-detects/mathml.js [new file with mode: 0644]
js/modernizr/feature-detects/network-connection.js [new file with mode: 0644]
js/modernizr/feature-detects/network-eventsource.js [new file with mode: 0644]
js/modernizr/feature-detects/network-xhr2.js [new file with mode: 0644]
js/modernizr/feature-detects/notification.js [new file with mode: 0644]
js/modernizr/feature-detects/performance.js [new file with mode: 0644]
js/modernizr/feature-detects/pointerlock-api.js [new file with mode: 0644]
js/modernizr/feature-detects/quota-management-api.js [new file with mode: 0644]
js/modernizr/feature-detects/requestanimationframe.js [new file with mode: 0644]
js/modernizr/feature-detects/script-async.js [new file with mode: 0644]
js/modernizr/feature-detects/script-defer.js [new file with mode: 0644]
js/modernizr/feature-detects/style-scoped.js [new file with mode: 0644]
js/modernizr/feature-detects/svg-filters.js [new file with mode: 0644]
js/modernizr/feature-detects/unicode.js [new file with mode: 0644]
js/modernizr/feature-detects/url-data-uri.js [new file with mode: 0644]
js/modernizr/feature-detects/userdata.js [new file with mode: 0644]
js/modernizr/feature-detects/vibration.js [new file with mode: 0644]
js/modernizr/feature-detects/web-intents.js [new file with mode: 0644]
js/modernizr/feature-detects/webgl-extensions.js [new file with mode: 0644]
js/modernizr/feature-detects/websockets-binary.js [new file with mode: 0644]
js/modernizr/feature-detects/window-framed.js [new file with mode: 0644]
js/modernizr/feature-detects/workers-blobworkers.js [new file with mode: 0644]
js/modernizr/feature-detects/workers-dataworkers.js [new file with mode: 0644]
js/modernizr/feature-detects/workers-sharedworkers.js [new file with mode: 0644]
js/modernizr/grunt.js [new file with mode: 0644]
js/modernizr/modernizr.js [new file with mode: 0644]
js/modernizr/modernizr.min.js [new file with mode: 0644]
js/modernizr/test/caniuse_files/ga.js [new file with mode: 0644]
js/modernizr/test/caniuse_files/jquery.min.js [new file with mode: 0644]
js/modernizr/test/caniuse_files/modernizr-1.7.min.js [new file with mode: 0644]
js/modernizr/test/js/dumpdata.js [new file with mode: 0644]
js/modernizr/test/js/lib/detect-global.js [new file with mode: 0644]
js/modernizr/test/js/lib/jquery-1.7b2.js [new file with mode: 0644]
js/modernizr/test/js/lib/jsonselect.js [new file with mode: 0644]
js/modernizr/test/js/lib/polyfills.js [new file with mode: 0644]
js/modernizr/test/js/lib/uaparser.js [new file with mode: 0644]
js/modernizr/test/js/setup.js [new file with mode: 0644]
js/modernizr/test/js/unit-caniuse.js [new file with mode: 0644]
js/modernizr/test/js/unit.js [new file with mode: 0644]
js/modernizr/test/qunit/qunit.js [new file with mode: 0644]
js/modernizr/test/qunit/run-qunit.js [new file with mode: 0644]
js/nivo-lightbox.js [deleted file]
js/nivo-lightbox.min.js [deleted file]
js/parallax.js [deleted file]
js/slick.js [deleted file]
js/wow.js [deleted file]
landingpage-template.php [new file with mode: 0644]
languages/accesspress-parallax.pot [deleted file]
languages/id_ID.mo [deleted file]
languages/id_ID.po [deleted file]
languages/readme.txt [deleted file]
languages/ru_RU.mo [deleted file]
languages/ru_RU.po [deleted file]
layouts/action-section.php [deleted file]
layouts/blank-section.php [deleted file]
layouts/blog-section.php [deleted file]
layouts/default-section.php [deleted file]
layouts/googlemap-section.php [deleted file]
layouts/portfolio-section.php [deleted file]
layouts/service-section.php [deleted file]
layouts/team-section.php [deleted file]
layouts/testimonial-section.php [deleted file]
lib/defines.php [new file with mode: 0644]
lib/menu-walker.php [new file with mode: 0644]
lib/navigation.php [new file with mode: 0644]
lib/plugins.php [new file with mode: 0644]
lib/plugins/member-db.php [new file with mode: 0644]
license.txt [deleted file]
nggallery/album-glmalbums.php [new file with mode: 0644]
nggallery/gallery-glmphotos-8.php [new file with mode: 0644]
nggallery/gallery-glmphotos-narrow.php [new file with mode: 0644]
nggallery/gallery-glmphotos.php [new file with mode: 0644]
nggallery/gallery-glmvideos.php [new file with mode: 0644]
package-lock.json [deleted file]
package.json
page.php [deleted file]
parts/blog-content-area.php [new file with mode: 0644]
parts/blog-feed-front.php [new file with mode: 0644]
parts/blog-sidebar-r.php [new file with mode: 0644]
parts/blog-text-single.php [new file with mode: 0644]
parts/blog-text.php [new file with mode: 0644]
parts/city-map.php [new file with mode: 0644]
parts/client-info-offcanvas.php [new file with mode: 0644]
parts/event-feed.php [new file with mode: 0644]
parts/footer-svg-section.php [new file with mode: 0644]
parts/glm-blocks.php [new file with mode: 0644]
parts/glm-client-info.php [deleted file]
parts/glm-members-only-login-form.php [new file with mode: 0644]
parts/glm-members-only-lostpass-form.php [new file with mode: 0644]
parts/glm-members-only-top-bar.php [new file with mode: 0644]
parts/header-meta.php [new file with mode: 0644]
parts/main-content.php [new file with mode: 0644]
parts/map-section.php [new file with mode: 0644]
parts/members-sidebar.php [new file with mode: 0644]
parts/search-form.php [new file with mode: 0644]
parts/share-this.php [new file with mode: 0644]
parts/slide-show.php [new file with mode: 0644]
readme.txt [deleted file]
robots.txt [new file with mode: 0644]
screenshot.png
scss/_blog.scss [new file with mode: 0644]
scss/_body.scss [new file with mode: 0644]
scss/_content.scss [new file with mode: 0644]
scss/_copyright.scss [new file with mode: 0644]
scss/_defaults.scss [new file with mode: 0644]
scss/_left-off-canvas.scss [new file with mode: 0644]
scss/_main.scss [new file with mode: 0644]
scss/_mixins.scss [new file with mode: 0644]
scss/_page.footer.scss [new file with mode: 0644]
scss/_page.header.scss [new file with mode: 0644]
scss/_page.wrapper.scss [new file with mode: 0644]
scss/_plugins.scss [new file with mode: 0644]
scss/_right-off-canvas.scss [new file with mode: 0644]
scss/_search.scss [new file with mode: 0644]
scss/_settings.scss [new file with mode: 0644]
scss/_shadow.wrapper.scss [new file with mode: 0644]
scss/_sidebar.scss [new file with mode: 0644]
scss/_slideshow.scss [new file with mode: 0644]
scss/_structure.scss [new file with mode: 0644]
scss/_topbar.scss [new file with mode: 0644]
scss/_wordpress.scss [new file with mode: 0644]
scss/admin/tinymce.css [new file with mode: 0644]
scss/app.scss [new file with mode: 0644]
scss/mixins/_gradient.scss [new file with mode: 0644]
scss/mixins/_off-canvas-arrow.scss [new file with mode: 0644]
scss/plugins/_fullCalendar.scss [new file with mode: 0644]
scss/plugins/_glm-blocks.scss [new file with mode: 0644]
scss/plugins/_glm-member-db-events.scss [new file with mode: 0644]
scss/plugins/_glm-member-db-packaging.scss [new file with mode: 0644]
scss/plugins/_glm-member-db.scss [new file with mode: 0644]
scss/plugins/_gravityForms.scss [new file with mode: 0644]
scss/plugins/_nextgen.scss [new file with mode: 0644]
scss/plugins/_slick.scss [new file with mode: 0644]
search.php [deleted file]
sections/blog-archive.php [new file with mode: 0644]
sections/blog-home.php [new file with mode: 0644]
sections/blog-single.php [new file with mode: 0644]
sections/copyright.php [new file with mode: 0644]
sections/footer.php [new file with mode: 0644]
sections/front-page.php [new file with mode: 0644]
sections/glm-members-only.php [new file with mode: 0644]
sections/header.php [new file with mode: 0644]
sections/interior-page.php [new file with mode: 0644]
sections/landing-page.php [new file with mode: 0644]
sections/off-canvas.php [new file with mode: 0644]
sections/search.php [new file with mode: 0644]
sections/top-bar.php [new file with mode: 0644]
sidebar.php
single.php [deleted file]
slick/CONTRIBUTING.markdown [new file with mode: 0644]
slick/ISSUE_TEMPLATE.md [new file with mode: 0644]
slick/LICENSE [new file with mode: 0644]
slick/Makefile [new file with mode: 0644]
slick/README.markdown [new file with mode: 0644]
slick/bower.json [new file with mode: 0644]
slick/component.json [new file with mode: 0644]
slick/index.html [new file with mode: 0644]
slick/package.json [new file with mode: 0644]
slick/slick.jquery.json [new file with mode: 0644]
slick/slick/ajax-loader.gif [new file with mode: 0644]
slick/slick/config.rb [new file with mode: 0644]
slick/slick/fonts/slick.eot [new file with mode: 0644]
slick/slick/fonts/slick.svg [new file with mode: 0644]
slick/slick/fonts/slick.ttf [new file with mode: 0644]
slick/slick/fonts/slick.woff [new file with mode: 0644]
slick/slick/slick-theme.css [new file with mode: 0644]
slick/slick/slick-theme.less [new file with mode: 0644]
slick/slick/slick-theme.scss [new file with mode: 0644]
slick/slick/slick.css [new file with mode: 0644]
slick/slick/slick.js [new file with mode: 0644]
slick/slick/slick.less [new file with mode: 0644]
slick/slick/slick.min.js [new file with mode: 0644]
slick/slick/slick.scss [new file with mode: 0644]
style.css
welcome/css/no.png [deleted file]
welcome/css/welcome.css [deleted file]
welcome/css/wlogo.png [deleted file]
welcome/css/yes.png [deleted file]
welcome/js/welcome.js [deleted file]
welcome/sections/free_vs_pro.php [deleted file]
welcome/sections/getting_started.php [deleted file]
welcome/sections/recommended_plugins.php [deleted file]
welcome/sections/support.php [deleted file]
welcome/welcome.php [deleted file]
woocommerce/ap-parallax-style.css [deleted file]
woocommerce/ap-parallax-woocommerce-function.php [deleted file]

index bc1733d..a088b6f 100644 (file)
@@ -1,4 +1,2 @@
 node_modules
-release-builds
-dist
 bower_components
diff --git a/.nvmrc b/.nvmrc
index b009dfb..dbca4f3 100644 (file)
--- a/.nvmrc
+++ b/.nvmrc
@@ -1 +1 @@
-lts/*
+0.10.25
diff --git a/404.php b/404.php
deleted file mode 100644 (file)
index 1169577..0000000
--- a/404.php
+++ /dev/null
@@ -1,25 +0,0 @@
-<?php
-/**
- * The template for displaying 404 pages (not found).
- *
- * @package accesspress_parallax
- */
-
-get_header(); ?>
-<div class="mid-content">
-       <div id="primary" class="content-area">
-               <main id="main" class="site-main" role="main">
-
-                       <section class="error-404 not-found">
-                               <header class="page-header">
-                                       <h1 class="page-title"><?php _e( 'Oops! That page can&rsquo;t be found.', 'accesspress-parallax' ); ?></h1>
-                               </header><!-- .page-header -->
-
-                               
-                       </section><!-- .error-404 -->
-
-               </main><!-- #main -->
-       </div><!-- #primary -->
-<?php get_sidebar(); ?>
-</div>
-<?php get_footer();
diff --git a/Gruntfile.js b/Gruntfile.js
new file mode 100644 (file)
index 0000000..81e263b
--- /dev/null
@@ -0,0 +1,85 @@
+module.exports = function(grunt) {
+  grunt.initConfig({
+    pkg: grunt.file.readJSON('package.json'),
+
+    sass: {
+      options: {
+        includePaths: ['bower_components/foundation/scss'],
+        sourceMap: false
+      },
+      dist: {
+        options: {
+          outputStyle: 'compressed'
+        },
+        files: {
+          'css/app.css': 'scss/app.scss'
+        }
+      }
+    },
+
+    copy: {
+      scripts: {
+        expand: true,
+        cwd: 'bower_components/',
+        src: '**/*.js',
+        dest: 'js'
+      },
+
+      maps: {
+        expand: true,
+        cwd: 'bower_components/',
+        src: '**/*.map',
+        dest: 'js'
+      }
+    },
+
+    uglify: {
+      dist: {
+        files: {
+          'js/modernizr/modernizr.min.js': ['js/modernizr/modernizr.js']
+        }
+      }
+    },
+
+    concat: {
+      options: {
+        separator: ';'
+      },
+      dist: {
+        src: [
+          'js/dollarsign.js',
+          'js/foundation/js/foundation.min.js',
+          'js/custom/*.js',
+        ],
+
+        dest: 'js/app.js'
+      }
+
+    },
+
+    watch: {
+      grunt: { files: ['Gruntfile.js'] },
+
+      sass: {
+        files: 'scss/**/*.{scss,sass}',
+        tasks: ['sass']
+      },
+
+      scripts: {
+          files: ['js/custom/*.js'],
+          tasks: ['concat', 'uglify']
+      }
+
+    }
+  });
+
+  grunt.loadNpmTasks('grunt-sass');
+  grunt.loadNpmTasks('grunt-contrib-watch');
+  grunt.loadNpmTasks('grunt-contrib-concat');
+  grunt.loadNpmTasks('grunt-contrib-copy');
+  grunt.loadNpmTasks('grunt-contrib-uglify');
+
+  grunt.registerTask('build', ['sass', 'copy', 'uglify', 'concat']);
+  grunt.registerTask('runwatch', ['sass','uglify', 'concat']);
+  grunt.registerTask('default', ['runwatch','watch']);
+}
diff --git a/README.md b/README.md
new file mode 100644 (file)
index 0000000..bec84c1
--- /dev/null
+++ b/README.md
@@ -0,0 +1,28 @@
+# Gaslight Media Foundation Template
+
+This is a template to start your own project that uses Grunt and libsass!
+
+## Requirements
+
+You'll need to have the following items installed before continuing.
+
+  * [Node.js](http://nodejs.org): Use the installer provided on the NodeJS website.
+  * [Grunt](http://gruntjs.com/): Run `[sudo] npm install -g grunt-cli`
+  * [Bower](http://bower.io): Run `[sudo] npm install -g bower`
+
+## Quickstart
+
+```bash
+npm install && bower install
+```
+
+While you're working on your project, run:
+
+`grunt`
+
+And you're set!
+
+## Directory Structure
+
+  * `scss/_settings.scss`: Foundation configuration settings go in here
+  * `scss/app.scss`: Application styles go here
diff --git a/archive.php b/archive.php
deleted file mode 100644 (file)
index f1f5be2..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-<?php
-/**
- * The template for displaying archive pages.
- *
- * Learn more: http://codex.wordpress.org/Template_Hierarchy
- *
- * @package accesspress_parallax
- */
-
-get_header(); ?>
-<div class="mid-content clearfix">
-       <section id="primary" class="content-area">
-               <main id="main" class="site-main" role="main">
-
-               <?php if ( have_posts() ) : ?>
-
-                       <header class="page-header">
-                               <?php
-                                       the_archive_title( '<h1 class="page-title">', '</h1>' );
-                                       the_archive_description( '<div class="taxonomy-description">', '</div>' );
-                               ?>
-                       </header><!-- .page-header -->
-
-                       <?php /* Start the Loop */ ?>
-                       <?php while ( have_posts() ) : the_post(); ?>
-
-                               <?php
-                                       /* Include the Post-Format-specific template for the content.
-                                        * If you want to override this in a child theme, then include a file
-                                        * called content-___.php (where ___ is the Post Format name) and that will be used instead.
-                                        */
-                                       get_template_part( 'content', get_post_format() );
-                               ?>
-
-                       <?php endwhile; ?>
-
-                       <?php the_posts_pagination(); ?>
-
-               <?php else : ?>
-
-                       <?php get_template_part( 'content', 'none' ); ?>
-
-               <?php endif; ?>
-
-               </main><!-- #main -->
-       </section><!-- #primary -->
-
-<?php get_sidebar(); ?>
-</div>
-<?php get_footer();
diff --git a/assets/blue-down-tab.png b/assets/blue-down-tab.png
new file mode 100644 (file)
index 0000000..fdb1da9
Binary files /dev/null and b/assets/blue-down-tab.png differ
diff --git a/assets/bottom.png b/assets/bottom.png
new file mode 100644 (file)
index 0000000..a7f4fbc
Binary files /dev/null and b/assets/bottom.png differ
diff --git a/assets/css/glm-dev.css b/assets/css/glm-dev.css
deleted file mode 100644 (file)
index a3cade2..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-body footer#colophon.site-footer{position:relative}body footer#colophon.site-footer #footer-overlay{position:absolute;height:100%;width:100%;background:rgba(27,38,80,0.8)}body footer#colophon.site-footer .bottom-footer{background:#1B2650;background:url(../../assets/footer.jpg) no-repeat center center;background-size:cover;padding:2% 0 20px}body footer#colophon.site-footer .bottom-footer .footer-content{position:relative;max-width:325px;margin:0 auto;text-align:center}@media (min-width: 1000px){body .main-navigation{margin-left:200px}}body .main-navigation ul#menu-main li:first-child{background:#1B2650;transition:background 300ms ease-in-out}body .main-navigation ul#menu-main li:first-child a{color:white}body .main-navigation ul#menu-main li:first-child:hover{background:#00D3D1}@media (min-width: 770px){body.page #page #content{padding-top:150px !important}}@media (max-width: 774px){body.page #page #content{padding-top:50px !important}}body.page #page #content .mid-content{background-color:white;box-shadow:5px 5px 25px 0 rgba(46,61,73,0.2);margin-bottom:25px}body.page #page #content .mid-content #primary{width:100%}
-
-/*# sourceMappingURL=glm-dev.css.map */
diff --git a/assets/css/glm-dev.css.map b/assets/css/glm-dev.css.map
deleted file mode 100644 (file)
index 7bdc9bb..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"glm-dev.css","sources":["glm-dev.scss","_settings.scss","_body.scss"],"sourcesContent":["@import 'settings';\n@import 'body';","$navy : #1B2650;\n$grey : #231F20;\n$blue : #00D3D1;\n$peach: #F28B59;","body{\n    footer#colophon.site-footer{\n        position: relative;\n        #footer-overlay{\n            position: absolute;\n            height: 100%;\n            width: 100%;\n            background: rgba($navy, 0.80);\n        }\n        .bottom-footer{\n            background: $navy;\n            background: url(../../assets/footer.jpg) no-repeat center center;\n            background-size: cover;\n            // backround\n            padding: 2% 0 20px;\n            .footer-content{\n                position: relative;\n                max-width: 325px;\n                margin: 0 auto;\n                text-align: center;\n            }\n        }\n    }\n    .main-navigation{\n        // margin-right: 75px;\n        @media (min-width: 1000px){\n            margin-left: 200px;\n        }\n        \n        ul#menu-main{\n            li:first-child{\n                background: $navy;\n                transition: background 300ms ease-in-out;\n                a {\n                    color: white;\n                }\n                &:hover{\n                    background: $blue;\n                }\n            }\n        }\n    }\n}\nbody.page{\n    #page{\n        #content{\n            @media (min-width: 770px){\n                padding-top: 150px !important;\n            }\n            @media (max-width: 774px){\n                padding-top: 50px !important;\n            }\n            .mid-content{\n                background-color: white;\n                box-shadow: 5px 5px 25px 0 rgba(46,61,73,.2);\n                margin-bottom: 25px ;\n                #primary{\n                    width: 100%;\n                }\n            }\n        }\n    }\n}"],"mappings":"AEAA,AACmB,IADf,CACA,MAAM,AAAA,SAAS,AAAA,YAAY,AAAA,CACvB,QAAQ,CAAE,QAAS,CAoBtB,AAtBL,AAGQ,IAHJ,CACA,MAAM,AAAA,SAAS,AAAA,YAAY,CAEvB,eAAe,AAAA,CACX,QAAQ,CAAE,QAAS,CACnB,MAAM,CAAE,IAAK,CACb,KAAK,CAAE,IAAK,CACZ,UAAU,CDPd,kBAAO,CCQN,AART,AASQ,IATJ,CACA,MAAM,AAAA,SAAS,AAAA,YAAY,CAQvB,cAAc,AAAA,CACV,UAAU,CDVd,OAAO,CCWH,UAAU,CAA6B,4BAAC,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAChE,eAAe,CAAE,KAAM,CAEvB,OAAO,CAAE,SAAU,CAOtB,AArBT,AAeY,IAfR,CACA,MAAM,AAAA,SAAS,AAAA,YAAY,CAQvB,cAAc,CAMV,eAAe,AAAA,CACX,QAAQ,CAAE,QAAS,CACnB,SAAS,CAAE,KAAM,CACjB,MAAM,CAAE,MAAO,CACf,UAAU,CAAE,MAAO,CACtB,AAKL,MAAM,EAAL,SAAS,EAAE,MAAM,EAzB1B,AAuBI,IAvBA,CAuBA,gBAAgB,AAAA,CAGR,WAAW,CAAE,KAAM,CAe1B,CAzCL,AA8Bc,IA9BV,CAuBA,gBAAgB,CAMZ,EAAE,AAAA,UAAU,CACR,EAAE,AAAA,YAAY,AAAA,CACV,UAAU,CD/BlB,OAAO,CCgCC,UAAU,CAAE,4BAA6B,CAO5C,AAvCb,AAiCgB,IAjCZ,CAuBA,gBAAgB,CAMZ,EAAE,AAAA,UAAU,CACR,EAAE,AAAA,YAAY,CAGV,CAAC,AAAC,CACE,KAAK,CAAE,KAAM,CAChB,AAnCjB,AA8Bc,IA9BV,CAuBA,gBAAgB,CAMZ,EAAE,AAAA,UAAU,CACR,EAAE,AAAA,YAAY,AAMT,MAAM,AAAA,CACH,UAAU,CDnCtB,OAAO,CCoCE,AAQL,MAAM,EAAL,SAAS,EAAE,KAAK,EAH7B,AAEQ,IAFJ,AAAA,KAAK,CACL,KAAK,CACD,QAAQ,AAAA,CAEA,WAAW,CAAE,gBAAiB,CAarC,CAXG,MAAM,EAAL,SAAS,EAAE,KAAK,EAN7B,AAEQ,IAFJ,AAAA,KAAK,CACL,KAAK,CACD,QAAQ,AAAA,CAKA,WAAW,CAAE,eAAgB,CAUpC,CAjBT,AASY,IATR,AAAA,KAAK,CACL,KAAK,CACD,QAAQ,CAOJ,YAAY,AAAA,CACR,gBAAgB,CAAE,KAAM,CACxB,UAAU,CAAE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,kBAAI,CAC/B,aAAa,CAAE,IAAM,CAIxB,AAhBb,AAagB,IAbZ,AAAA,KAAK,CACL,KAAK,CACD,QAAQ,CAOJ,YAAY,CAIR,QAAQ,AAAA,CACJ,KAAK,CAAE,IAAK,CACf","names":[]}
\ No newline at end of file
diff --git a/assets/default-header.jpg b/assets/default-header.jpg
new file mode 100644 (file)
index 0000000..184f9d5
Binary files /dev/null and b/assets/default-header.jpg differ
diff --git a/assets/footer.jpg b/assets/footer.jpg
new file mode 100644 (file)
index 0000000..0f2caca
Binary files /dev/null and b/assets/footer.jpg differ
diff --git a/assets/js/glm-dev.js b/assets/js/glm-dev.js
deleted file mode 100644 (file)
index 1da16fe..0000000
+++ /dev/null
@@ -1 +0,0 @@
-jQuery(function(n){});
\ No newline at end of file
diff --git a/assets/logo.gif b/assets/logo.gif
new file mode 100644 (file)
index 0000000..16ef463
Binary files /dev/null and b/assets/logo.gif differ
diff --git a/assets/smartbanner/smartbanner.css b/assets/smartbanner/smartbanner.css
new file mode 100644 (file)
index 0000000..5afbaf8
--- /dev/null
@@ -0,0 +1,76 @@
+/*!
+ * smartbanner.js v1.5.0 <https://github.com/ain/smartbanner.js>
+ * Copyright © 2017 Ain Tohvri, contributors. Licensed under GPL-3.0.
+ */
+.smartbanner {
+  position: absolute;
+  top: -84px;
+  left: 0;
+  overflow-x: hidden;
+  width: 100%;
+  height: 84px;
+  background: #f3f3f3;
+  font-family: Helvetica, sans, sans-serif; }
+  .smartbanner__exit {
+    position: absolute;
+    top: calc(50% - 6px);
+    left: 9px;
+    display: block;
+    margin: 0;
+    width: 12px;
+    height: 12px;
+    border: 0;
+    text-align: center; }
+    .smartbanner__exit::before, .smartbanner__exit::after {
+      position: absolute;
+      width: 1px;
+      height: 12px;
+      background: #767676;
+      content: ' '; }
+    .smartbanner__exit::before {
+      -webkit-transform: rotate(45deg);
+              transform: rotate(45deg); }
+    .smartbanner__exit::after {
+      -webkit-transform: rotate(-45deg);
+              transform: rotate(-45deg); }
+  .smartbanner__icon {
+    position: absolute;
+    top: 10px;
+    left: 30px;
+    width: 64px;
+    height: 64px;
+    border-radius: 15px;
+    background-size: 64px 64px; }
+  .smartbanner__info {
+    position: absolute;
+    top: 10px;
+    left: 104px;
+    display: -webkit-box;
+    display: -ms-flexbox;
+    display: flex;
+    overflow-y: hidden;
+    width: 60%;
+    height: 64px;
+    -webkit-box-align: center;
+        -ms-flex-align: center;
+            align-items: center; }
+    .smartbanner__info__title {
+      font-size: 14px; }
+    .smartbanner__info__author, .smartbanner__info__price {
+      font-size: 12px; }
+  .smartbanner__button {
+    position: absolute;
+    top: 32px;
+    right: 10px;
+    z-index: 1;
+    display: block;
+    padding: 0 10px;
+    min-width: 10%;
+    border-radius: 5px;
+    background: #f3f3f3;
+    color: #1474fc;
+    font-size: 18px;
+    text-align: center;
+    text-decoration: none; }
+    .smartbanner__button__label {
+      text-align: center; }
diff --git a/assets/smartbanner/smartbanner.js b/assets/smartbanner/smartbanner.js
new file mode 100644 (file)
index 0000000..5733d44
--- /dev/null
@@ -0,0 +1,544 @@
+/*!
+ * smartbanner.js v1.8.0 <https://github.com/ain/smartbanner.js>
+ * Copyright © 2017 Ain Tohvri, contributors. Licensed under GPL-3.0.
+ */
+(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var Bakery = function () {
+  function Bakery() {
+    _classCallCheck(this, Bakery);
+  }
+
+  _createClass(Bakery, null, [{
+    key: 'getCookieExpiresString',
+    value: function getCookieExpiresString(hideTtl) {
+      var now = new Date();
+      var expireTime = new Date(now.getTime() + hideTtl);
+      return 'expires=' + expireTime.toGMTString() + ';';
+    }
+  }, {
+    key: 'bake',
+    value: function bake(hideTtl) {
+      document.cookie = 'smartbanner_exited=1; ' + (hideTtl ? Bakery.getCookieExpiresString(hideTtl) : '');
+    }
+  }, {
+    key: 'unbake',
+    value: function unbake() {
+      document.cookie = 'smartbanner_exited=; expires=Thu, 01 Jan 1970 00:00:01 GMT;';
+    }
+  }, {
+    key: 'baked',
+    get: function get() {
+      var value = document.cookie.replace(/(?:(?:^|.*;\s*)smartbanner_exited\s*\=\s*([^;]*).*$)|^.*$/, '$1');
+      return value === '1';
+    }
+  }]);
+
+  return Bakery;
+}();
+
+exports.default = Bakery;
+
+},{}],2:[function(require,module,exports){
+(function (global){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var Detector = function () {
+  function Detector() {
+    _classCallCheck(this, Detector);
+  }
+
+  _createClass(Detector, null, [{
+    key: 'platform',
+    value: function platform() {
+      if (/iPhone|iPad|iPod/i.test(window.navigator.userAgent)) {
+        return 'ios';
+      } else if (/Android/i.test(window.navigator.userAgent)) {
+        return 'android';
+      }
+    }
+  }, {
+    key: 'userAgentMatchesRegex',
+    value: function userAgentMatchesRegex(regexString) {
+      return new RegExp(regexString).test(window.navigator.userAgent);
+    }
+  }, {
+    key: 'jQueryMobilePage',
+    value: function jQueryMobilePage() {
+      return typeof global.$ !== 'undefined' && global.$.mobile !== 'undefined' && document.querySelector('.ui-page') !== null;
+    }
+  }, {
+    key: 'wrapperElement',
+    value: function wrapperElement() {
+      var selector = Detector.jQueryMobilePage() ? '.ui-page' : 'html';
+      return document.querySelectorAll(selector);
+    }
+  }]);
+
+  return Detector;
+}();
+
+exports.default = Detector;
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+},{}],3:[function(require,module,exports){
+'use strict';
+
+var _smartbanner = require('./smartbanner.js');
+
+var _smartbanner2 = _interopRequireDefault(_smartbanner);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+var smartbanner = void 0;
+
+window.addEventListener('load', function () {
+  smartbanner = new _smartbanner2.default();
+  smartbanner.publish();
+});
+
+},{"./smartbanner.js":7}],4:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+require('./polyfills/array/from.js');
+
+require('./polyfills/array/includes.js');
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function valid(name) {
+  // TODO: validate against options dictionary
+  return name.indexOf('smartbanner:') !== -1 && name.split(':')[1].length > 0;
+}
+
+function convertToCamelCase(name) {
+  var parts = name.split('-');
+  parts.map(function (part, index) {
+    if (index > 0) {
+      parts[index] = part.charAt(0).toUpperCase() + part.substring(1);
+    }
+  });
+  return parts.join('');
+}
+
+var OptionParser = function () {
+  function OptionParser() {
+    _classCallCheck(this, OptionParser);
+  }
+
+  _createClass(OptionParser, [{
+    key: 'parse',
+    value: function parse() {
+      var metas = document.getElementsByTagName('meta');
+      var options = {};
+      var optionName = null;
+      Array.from(metas).forEach(function (meta) {
+        var name = meta.getAttribute('name');
+        var content = meta.getAttribute('content');
+        if (name && content && valid(name) && content.length > 0) {
+          optionName = name.split(':')[1];
+          if (Array.from(optionName).includes('-')) {
+            optionName = convertToCamelCase(optionName);
+          }
+          options[optionName] = content;
+        }
+      });
+      return options;
+    }
+  }]);
+
+  return OptionParser;
+}();
+
+exports.default = OptionParser;
+
+},{"./polyfills/array/from.js":5,"./polyfills/array/includes.js":6}],5:[function(require,module,exports){
+'use strict';
+
+// Production steps of ECMA-262, Edition 6, 22.1.2.1
+// Reference: https://people.mozilla.org/~jorendorff/es6-draft.html#sec-array.from
+if (!Array.from) {
+  Array.from = function () {
+    var toStr = Object.prototype.toString;
+    var isCallable = function isCallable(fn) {
+      return typeof fn === 'function' || toStr.call(fn) === '[object Function]';
+    };
+    var toInteger = function toInteger(value) {
+      var number = Number(value);
+      if (isNaN(number)) {
+        return 0;
+      }
+      if (number === 0 || !isFinite(number)) {
+        return number;
+      }
+      return (number > 0 ? 1 : -1) * Math.floor(Math.abs(number));
+    };
+    var maxSafeInteger = Math.pow(2, 53) - 1;
+    var toLength = function toLength(value) {
+      var len = toInteger(value);
+      return Math.min(Math.max(len, 0), maxSafeInteger);
+    };
+
+    // The length property of the from method is 1.
+    return function from(arrayLike /*, mapFn, thisArg */) {
+      // 1. Let C be the this value.
+      var C = this;
+
+      // 2. Let items be ToObject(arrayLike).
+      var items = Object(arrayLike);
+
+      // 3. ReturnIfAbrupt(items).
+      if (arrayLike == null) {
+        throw new TypeError("Array.from requires an array-like object - not null or undefined");
+      }
+
+      // 4. If mapfn is undefined, then let mapping be false.
+      var mapFn = arguments.length > 1 ? arguments[1] : void undefined;
+      var T;
+      if (typeof mapFn !== 'undefined') {
+        // 5. else
+        // 5. a If IsCallable(mapfn) is false, throw a TypeError exception.
+        if (!isCallable(mapFn)) {
+          throw new TypeError('Array.from: when provided, the second argument must be a function');
+        }
+
+        // 5. b. If thisArg was supplied, let T be thisArg; else let T be undefined.
+        if (arguments.length > 2) {
+          T = arguments[2];
+        }
+      }
+
+      // 10. Let lenValue be Get(items, "length").
+      // 11. Let len be ToLength(lenValue).
+      var len = toLength(items.length);
+
+      // 13. If IsConstructor(C) is true, then
+      // 13. a. Let A be the result of calling the [[Construct]] internal method of C with an argument list containing the single item len.
+      // 14. a. Else, Let A be ArrayCreate(len).
+      var A = isCallable(C) ? Object(new C(len)) : new Array(len);
+
+      // 16. Let k be 0.
+      var k = 0;
+      // 17. Repeat, while k < len… (also steps a - h)
+      var kValue;
+      while (k < len) {
+        kValue = items[k];
+        if (mapFn) {
+          A[k] = typeof T === 'undefined' ? mapFn(kValue, k) : mapFn.call(T, kValue, k);
+        } else {
+          A[k] = kValue;
+        }
+        k += 1;
+      }
+      // 18. Let putStatus be Put(A, "length", len, true).
+      A.length = len;
+      // 20. Return A.
+      return A;
+    };
+  }();
+}
+
+},{}],6:[function(require,module,exports){
+'use strict';
+
+if (!Array.prototype.includes) {
+  Array.prototype.includes = function (searchElement /*, fromIndex*/) {
+    'use strict';
+
+    if (this == null) {
+      throw new TypeError('Array.prototype.includes called on null or undefined');
+    }
+
+    var O = Object(this);
+    var len = parseInt(O.length, 10) || 0;
+    if (len === 0) {
+      return false;
+    }
+    var n = parseInt(arguments[1], 10) || 0;
+    var k;
+    if (n >= 0) {
+      k = n;
+    } else {
+      k = len + n;
+      if (k < 0) {
+        k = 0;
+      }
+    }
+    var currentElement;
+    while (k < len) {
+      currentElement = O[k];
+      if (searchElement === currentElement || searchElement !== searchElement && currentElement !== currentElement) {
+        // NaN !== NaN
+        return true;
+      }
+      k++;
+    }
+    return false;
+  };
+}
+
+},{}],7:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+var _optionparser = require('./optionparser.js');
+
+var _optionparser2 = _interopRequireDefault(_optionparser);
+
+var _detector = require('./detector.js');
+
+var _detector2 = _interopRequireDefault(_detector);
+
+var _bakery = require('./bakery.js');
+
+var _bakery2 = _interopRequireDefault(_bakery);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var DEFAULT_PLATFORMS = 'android,ios';
+
+var datas = {
+  originalTop: 'data-smartbanner-original-top',
+  originalMarginTop: 'data-smartbanner-original-margin-top'
+};
+
+function handleExitClick(event, self) {
+  self.exit();
+  event.preventDefault();
+}
+
+function handleJQueryMobilePageLoad(event) {
+  if (!this.positioningDisabled) {
+    setContentPosition(event.data.height);
+  }
+}
+
+function addEventListeners(self) {
+  var closeIcon = document.querySelector('.js_smartbanner__exit');
+  closeIcon.addEventListener('click', function (event) {
+    return handleExitClick(event, self);
+  });
+  if (_detector2.default.jQueryMobilePage()) {
+    $(document).on('pagebeforeshow', self, handleJQueryMobilePageLoad);
+  }
+}
+
+function removeEventListeners() {
+  if (_detector2.default.jQueryMobilePage()) {
+    $(document).off('pagebeforeshow', handleJQueryMobilePageLoad);
+  }
+}
+
+function setContentPosition(value) {
+  var wrappers = _detector2.default.wrapperElement();
+  for (var i = 0, l = wrappers.length, wrapper; i < l; i++) {
+    wrapper = wrappers[i];
+    if (_detector2.default.jQueryMobilePage()) {
+      if (wrapper.getAttribute(datas.originalTop)) {
+        continue;
+      }
+      var top = parseFloat(getComputedStyle(wrapper).top);
+      wrapper.setAttribute(datas.originalTop, isNaN(top) ? 0 : top);
+      wrapper.style.top = value + 'px';
+    } else {
+      if (wrapper.getAttribute(datas.originalMarginTop)) {
+        continue;
+      }
+      var margin = parseFloat(getComputedStyle(wrapper).marginTop);
+      wrapper.setAttribute(datas.originalMarginTop, isNaN(margin) ? 0 : margin);
+      wrapper.style.marginTop = value + 'px';
+    }
+  }
+}
+
+function restoreContentPosition() {
+  var wrappers = _detector2.default.wrapperElement();
+  for (var i = 0, l = wrappers.length, wrapper; i < l; i++) {
+    wrapper = wrappers[i];
+    if (_detector2.default.jQueryMobilePage() && wrapper.getAttribute(datas.originalTop)) {
+      wrapper.style.top = wrapper.getAttribute(datas.originalTop) + 'px';
+    } else if (wrapper.getAttribute(datas.originalMarginTop)) {
+      wrapper.style.marginTop = wrapper.getAttribute(datas.originalMarginTop) + 'px';
+    }
+  }
+}
+
+var SmartBanner = function () {
+  function SmartBanner() {
+    _classCallCheck(this, SmartBanner);
+
+    var parser = new _optionparser2.default();
+    this.options = parser.parse();
+    this.platform = _detector2.default.platform();
+  }
+
+  // DEPRECATED. Will be removed.
+
+
+  _createClass(SmartBanner, [{
+    key: 'publish',
+    value: function publish() {
+      if (Object.keys(this.options).length === 0) {
+        throw new Error('No options detected. Please consult documentation.');
+      }
+
+      if (_bakery2.default.baked) {
+        return false;
+      }
+
+      // User Agent was explicetely excluded by defined excludeUserAgentRegex
+      if (this.userAgentExcluded) {
+        return false;
+      }
+
+      // User agent was neither included by platformEnabled,
+      // nor by defined includeUserAgentRegex
+      if (!(this.platformEnabled || this.userAgentIncluded)) {
+        return false;
+      }
+
+      var bannerDiv = document.createElement('div');
+      document.querySelector('body').appendChild(bannerDiv);
+      bannerDiv.outerHTML = this.html;
+      if (!this.positioningDisabled) {
+        setContentPosition(this.height);
+      }
+      addEventListeners(this);
+    }
+  }, {
+    key: 'exit',
+    value: function exit() {
+      removeEventListeners();
+      if (!this.positioningDisabled) {
+        restoreContentPosition();
+      }
+      var banner = document.querySelector('.js_smartbanner');
+      document.querySelector('body').removeChild(banner);
+      _bakery2.default.bake(this.hideTtl);
+    }
+  }, {
+    key: 'originalTop',
+    get: function get() {
+      var wrapper = _detector2.default.wrapperElement()[0];
+      return parseFloat(wrapper.getAttribute(datas.originalTop));
+    }
+
+    // DEPRECATED. Will be removed.
+
+  }, {
+    key: 'originalTopMargin',
+    get: function get() {
+      var wrapper = _detector2.default.wrapperElement()[0];
+      return parseFloat(wrapper.getAttribute(datas.originalMarginTop));
+    }
+  }, {
+    key: 'priceSuffix',
+    get: function get() {
+      if (this.platform === 'ios') {
+        return this.options.priceSuffixApple;
+      } else if (this.platform === 'android') {
+        return this.options.priceSuffixGoogle;
+      }
+      return '';
+    }
+  }, {
+    key: 'icon',
+    get: function get() {
+      if (this.platform === 'android') {
+        return this.options.iconGoogle;
+      } else {
+        return this.options.iconApple;
+      }
+    }
+  }, {
+    key: 'buttonUrl',
+    get: function get() {
+      if (this.platform === 'android') {
+        return this.options.buttonUrlGoogle;
+      } else if (this.platform === 'ios') {
+        return this.options.buttonUrlApple;
+      }
+      return '#';
+    }
+  }, {
+    key: 'html',
+    get: function get() {
+      var modifier = !this.options.customDesignModifier ? this.platform : this.options.customDesignModifier;
+      return '<div class="smartbanner smartbanner--' + modifier + ' js_smartbanner">\n      <a href="javascript:void();" class="smartbanner__exit js_smartbanner__exit"></a>\n      <div class="smartbanner__icon" style="background-image: url(' + this.icon + ');"></div>\n      <div class="smartbanner__info">\n        <div>\n          <div class="smartbanner__info__title">' + this.options.title + '</div>\n          <div class="smartbanner__info__author">' + this.options.author + '</div>\n          <div class="smartbanner__info__price">' + this.options.price + this.priceSuffix + '</div>\n        </div>\n      </div>\n      <a href="' + this.buttonUrl + '" target="_blank" class="smartbanner__button"><span class="smartbanner__button__label">' + this.options.button + '</span></a>\n    </div>';
+    }
+  }, {
+    key: 'height',
+    get: function get() {
+      var height = document.querySelector('.js_smartbanner').offsetHeight;
+      return height !== undefined ? height : 0;
+    }
+  }, {
+    key: 'platformEnabled',
+    get: function get() {
+      var enabledPlatforms = this.options.enabledPlatforms || DEFAULT_PLATFORMS;
+      return enabledPlatforms && enabledPlatforms.replace(/\s+/g, '').split(',').indexOf(this.platform) !== -1;
+    }
+  }, {
+    key: 'positioningDisabled',
+    get: function get() {
+      return this.options.disablePositioning === 'true';
+    }
+  }, {
+    key: 'userAgentExcluded',
+    get: function get() {
+      if (!this.options.excludeUserAgentRegex) {
+        return false;
+      }
+      return _detector2.default.userAgentMatchesRegex(this.options.excludeUserAgentRegex);
+    }
+  }, {
+    key: 'userAgentIncluded',
+    get: function get() {
+      if (!this.options.includeUserAgentRegex) {
+        return false;
+      }
+      return _detector2.default.userAgentMatchesRegex(this.options.includeUserAgentRegex);
+    }
+  }, {
+    key: 'hideTtl',
+    get: function get() {
+      return this.options.hideTtl ? parseInt(this.options.hideTtl) : false;
+    }
+  }]);
+
+  return SmartBanner;
+}();
+
+exports.default = SmartBanner;
+
+},{"./bakery.js":1,"./detector.js":2,"./optionparser.js":4}]},{},[3]);
diff --git a/assets/smartbanner/smartbanner.png b/assets/smartbanner/smartbanner.png
new file mode 100644 (file)
index 0000000..cabccd0
Binary files /dev/null and b/assets/smartbanner/smartbanner.png differ
diff --git a/assets/social-icons.png b/assets/social-icons.png
new file mode 100644 (file)
index 0000000..db75dc7
Binary files /dev/null and b/assets/social-icons.png differ
diff --git a/assets/weather-arrow-down.png b/assets/weather-arrow-down.png
new file mode 100644 (file)
index 0000000..ca2e1c3
Binary files /dev/null and b/assets/weather-arrow-down.png differ
diff --git a/assets/weather-badge.png b/assets/weather-badge.png
new file mode 100644 (file)
index 0000000..48de257
Binary files /dev/null and b/assets/weather-badge.png differ
diff --git a/bower.json b/bower.json
new file mode 100644 (file)
index 0000000..028481f
--- /dev/null
@@ -0,0 +1,6 @@
+{
+  "name": "foundation-libsass-template",
+  "dependencies": {
+    "foundation": "zurb/bower-foundation"
+  }
+}
index a88ff9b..353cd14 100644 (file)
@@ -1,69 +1,89 @@
 <?php
 /**
- * The template for displaying comments.
+ * The template for displaying comments
  *
  * The area of the page that contains both current comments
  * and the comment form.
  *
- * @package accesspress_parallax
+ * @package WordPress
+ * @subpackage Twenty_Fifteen
+ * @since Twenty Fifteen 1.0
  */
+if ( ! function_exists( 'twentyfifteen_comment_nav' ) ) :
+/**
+ * Display navigation to next/previous comments when applicable.
+ *
+ * @since Twenty Fifteen 1.0
+ */
+function twentyfifteen_comment_nav() {
+    // Are there comments to navigate through?
+    if ( get_comment_pages_count() > 1 && get_option( 'page_comments' ) ) :
+?>
+<nav class="navigation comment-navigation" role="navigation">
+    <h2 class="screen-reader-text"><?php _e( 'Comment navigation', 'twentyfifteen' ); ?></h2>
+    <div class="nav-links">
+        <?php
+    if ( $prev_link = get_previous_comments_link( __( 'Older Comments', 'twentyfifteen' ) ) ) :
+    printf( '<div class="nav-previous">%s</div>', $prev_link );
+    endif;
 
+    if ( $next_link = get_next_comments_link( __( 'Newer Comments', 'twentyfifteen' ) ) ) :
+    printf( '<div class="nav-next">%s</div>', $next_link );
+    endif;
+        ?>
+    </div><!-- .nav-links -->
+</nav><!-- .comment-navigation -->
+<?php
+    endif;
+}
+endif;
 /*
  * If the current post is protected by a password and
  * the visitor has not yet entered the password we will
  * return early without loading the comments.
  */
 if ( post_password_required() ) {
-       return;
+    return;
 }
 ?>
 
 <div id="comments" class="comments-area">
 
-       <?php // You can start editing here -- including this comment! ?>
-
-       <?php if ( have_comments() ) : ?>
-               <h2 class="comments-title">
-                       <?php
-                               printf( _nx( 'One thought on &ldquo;%2$s&rdquo;', '%1$s thoughts on &ldquo;%2$s&rdquo;', get_comments_number(), 'comments title', 'accesspress-parallax' ),
-                                       number_format_i18n( get_comments_number() ), '<span>' . get_the_title() . '</span>' );
-                       ?>
-               </h2>
+    <?php if ( have_comments() ) : ?>
+    <h2 class="comments-title">
+        <?php
+        printf( _nx( 'One thought on &ldquo;%2$s&rdquo;', '%1$s thoughts on &ldquo;%2$s&rdquo;', get_comments_number(), 'comments title', 'twentyfifteen' ),
+               number_format_i18n( get_comments_number() ), get_the_title() );
+        ?>
+    </h2>
 
-               <?php if ( get_comment_pages_count() > 1 && get_option( 'page_comments' ) ) : // are there comments to navigate through ?>
-               <nav id="comment-nav-above" class="comment-navigation" role="navigation">
-                       <h1 class="screen-reader-text"><?php _e( 'Comment navigation', 'accesspress-parallax' ); ?></h1>
-                       <div class="nav-previous"><?php previous_comments_link( __( '&larr; Older Comments', 'accesspress-parallax' ) ); ?></div>
-                       <div class="nav-next"><?php next_comments_link( __( 'Newer Comments &rarr;', 'accesspress-parallax' ) ); ?></div>
-               </nav><!-- #comment-nav-above -->
-               <?php endif; // check for comment navigation ?>
+    <?php twentyfifteen_comment_nav(); ?>
 
-               <ol class="comment-list">
-                       <?php
-                               wp_list_comments( array(
-                                       'style'      => 'ol',
-                                       'short_ping' => true,
-                               ) );
-                       ?>
-               </ol><!-- .comment-list -->
+    <ol class="comment-list">
+        <?php
+        wp_list_comments( array(
+            'style'       => 'ol',
+            'short_ping'  => true,
+            'avatar_size' => 56,
+        ) );
+        ?>
+    </ol><!-- .comment-list -->
 
-               <?php if ( get_comment_pages_count() > 1 && get_option( 'page_comments' ) ) : // are there comments to navigate through ?>
-               <nav id="comment-nav-below" class="comment-navigation" role="navigation">
-                       <h1 class="screen-reader-text"><?php _e( 'Comment navigation', 'accesspress-parallax' ); ?></h1>
-                       <div class="nav-previous"><?php previous_comments_link( __( '&larr; Older Comments', 'accesspress-parallax' ) ); ?></div>
-                       <div class="nav-next"><?php next_comments_link( __( 'Newer Comments &rarr;', 'accesspress-parallax' ) ); ?></div>
-               </nav><!-- #comment-nav-below -->
-               <?php endif; // check for comment navigation ?>
+    <?php twentyfifteen_comment_nav(); ?>
 
-       <?php endif; // have_comments() ?>
+    <?php endif; // have_comments() ?>
 
-       <?php
-               // If comments are closed and there are comments, let's leave a little note, shall we?
-               if ( ! comments_open() && '0' != get_comments_number() && post_type_supports( get_post_type(), 'comments' ) ) :
-       ?>
-               <p class="no-comments"><?php _e( 'Comments are closed.', 'accesspress-parallax' ); ?></p>
-       <?php endif; ?>
+    <?php
+    // If comments are closed and there are comments, let's leave a little note, shall we?
+    if ( ! comments_open() && get_comments_number() && post_type_supports( get_post_type(), 'comments' ) ) :
+    ?>
+    <p class="no-comments"><?php _e( 'Comments are closed.', 'twentyfifteen' ); ?></p>
+    <?php endif; ?>
 
-       <?php comment_form(); ?>
+    <?php comment_form(
+    array(
+        'class_submit' => 'button'
+    )
+); ?>
 
-</div><!-- #comments -->
+</div><!-- .comments-area -->
diff --git a/config b/config
deleted file mode 100644 (file)
index 65df216..0000000
--- a/config
+++ /dev/null
@@ -1,15 +0,0 @@
-[core]
-       repositoryformatversion = 0
-       filemode = true
-       bare = false
-       logallrefupdates = true
-       sharedrepository = 0664
-[receive]
-       denyNonFastforwards = true
-[remote "origin"]
-       url = git@cvs2:WP-Themes/npoint
-       fetch = +refs/heads/*:refs/remotes/origin/*
-[branch "master"]
-       remote = origin
-       merge = refs/heads/master
-       rebase = true
diff --git a/content-none.php b/content-none.php
deleted file mode 100644 (file)
index d5f46f2..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-<?php
-/**
- * The template part for displaying a message that posts cannot be found.
- *
- * Learn more: http://codex.wordpress.org/Template_Hierarchy
- *
- * @package accesspress_parallax
- */
-?>
-
-<section class="no-results not-found">
-       <header class="page-header">
-               <h1 class="page-title"><?php _e( 'Nothing Found', 'accesspress-parallax' ); ?></h1>
-       </header><!-- .page-header -->
-
-       <div class="page-content">
-               <?php if ( is_home() && current_user_can( 'publish_posts' ) ) : ?>
-
-                       <p><?php printf( __( 'Ready to publish your first post? <a href="%1$s">Get started here</a>.', 'accesspress-parallax' ), esc_url( admin_url( 'post-new.php' ) ) ); ?></p>
-
-               <?php elseif ( is_search() ) : ?>
-
-                       <p><?php _e( 'Sorry, but nothing matched your search terms. Please try again with some different keywords.', 'accesspress-parallax' ); ?></p>
-                       <?php get_search_form(); ?>
-
-               <?php else : ?>
-
-                       <p><?php _e( 'It seems we can&rsquo;t find what you&rsquo;re looking for. Perhaps searching can help.', 'accesspress-parallax' ); ?></p>
-                       <?php get_search_form(); ?>
-
-               <?php endif; ?>
-       </div><!-- .page-content -->
-</section><!-- .no-results -->
diff --git a/content-page.php b/content-page.php
deleted file mode 100644 (file)
index 5ead1ec..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-/**
- * The template used for displaying page content in page.php
- *
- * @package accesspress_parallax
- */
-?>
-
-<article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
-       <header class="entry-header">
-               <?php the_title( '<h1 class="entry-title">', '</h1>' ); ?>
-       </header><!-- .entry-header -->
-
-       <div class="entry-content">
-               <?php the_content(); ?>
-               <?php
-                       wp_link_pages( array(
-                               'before' => '<div class="page-links">' . __( 'Pages:', 'accesspress-parallax' ),
-                               'after'  => '</div>',
-                       ) );
-               ?>
-       </div><!-- .entry-content -->
-       <footer class="entry-footer">
-               <?php edit_post_link( '<i class="fa fa-pencil-square-o"></i>'. __( 'Edit', 'accesspress-parallax' ), '<span class="edit-link">', '</span>' ); ?>
-       </footer><!-- .entry-footer -->
-</article><!-- #post-## -->
\ No newline at end of file
diff --git a/content-search.php b/content-search.php
deleted file mode 100644 (file)
index 1ba7228..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-<?php
-/**
- * The template part for displaying results in search pages.
- *
- * Learn more: http://codex.wordpress.org/Template_Hierarchy
- *
- * @package accesspress_parallax
- */
-?>
-
-<article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
-       <header class="entry-header">
-               <?php the_title( sprintf( '<h1 class="entry-title"><a href="%s" rel="bookmark">', esc_url( get_permalink() ) ), '</a></h1>' ); ?>
-
-               <?php if ( 'post' == get_post_type() ) : ?>
-               <div class="entry-meta">
-                       <?php accesspress_parallax_posted_on(); ?>
-               </div><!-- .entry-meta -->
-               <?php endif; ?>
-       </header><!-- .entry-header -->
-
-       <div class="entry-summary">
-               <?php the_excerpt(); ?>
-       </div><!-- .entry-summary -->
-
-       <footer class="entry-footer">
-               <?php if ( 'post' == get_post_type() ) : // Hide category and tag text for pages on Search ?>
-                       <?php
-                               /* translators: used between list items, there is a space after the comma */
-                               $categories_list = get_the_category_list( ', ' );
-                               if ( $categories_list && accesspress_parallax_categorized_blog() ) :
-                       ?>
-                       <span class="cat-links">
-                               <?php printf( __( 'Posted in %1$s', 'accesspress-parallax' ), $categories_list ); ?>
-                       </span>
-                       <?php endif; // End if categories ?>
-
-                       <?php
-                               /* translators: used between list items, there is a space after the comma */
-                               $tags_list = get_the_tag_list( '', ', ' );
-                               if ( $tags_list ) :
-                       ?>
-                       <span class="tags-links">
-                               <?php printf( __( 'Tagged %1$s', 'accesspress-parallax' ), $tags_list ); ?>
-                       </span>
-                       <?php endif; // End if $tags_list ?>
-               <?php endif; // End if 'post' == get_post_type() ?>
-
-               <?php if ( ! post_password_required() && ( comments_open() || '0' != get_comments_number() ) ) : ?>
-                       <span class="comments-link"><?php comments_popup_link( __( 'Leave a comment', 'accesspress-parallax' ), __( '1 Comment', 'accesspress-parallax' ), __( '% Comments', 'accesspress-parallax' ) ); ?></span>
-               <?php endif; ?>
-
-               <?php edit_post_link( '<i class="fa fa-pencil-square-o"></i>'. __( 'Edit', 'accesspress-parallax' ), '<span class="edit-link">', '</span>' ); ?>
-       </footer><!-- .entry-footer -->
-</article><!-- #post-## -->
\ No newline at end of file
diff --git a/content-single.php b/content-single.php
deleted file mode 100644 (file)
index f0c4d6f..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-<?php
-/**
- * @package accesspress_parallax
- */
-
-$post_date = of_get_option('post_date');
-$post_footer = of_get_option('post_footer');
-$post_date_class = ((!empty($post_date) && $post_date == ' ') || has_post_thumbnail()) ? " no-date" : "";
-?>
-
-<article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
-       <header class="entry-header">
-               <?php if(has_post_thumbnail()) : ?>
-               <div class="entry-thumb">
-                       <?php $image = wp_get_attachment_image_src( get_post_thumbnail_id(get_the_ID()), 'blog-header' ); ?>
-                       <img src="<?php echo esc_url($image[0]); ?>" alt="<?php echo esc_attr(get_the_title()); ?>"> 
-               </div>
-               <?php endif; ?>
-               
-               <h1 class="entry-title<?php echo esc_attr($post_date_class); ?>"><?php the_title(); ?></h1>
-
-               <div class="entry-meta">
-                       <?php accesspress_parallax_posted_on(); ?>
-               </div><!-- .entry-meta -->
-       </header><!-- .entry-header -->
-
-       <div class="entry-content">
-               <?php the_content(); ?>
-               <?php
-                       wp_link_pages( array(
-                               'before' => '<div class="page-links">' . __( 'Pages:', 'accesspress-parallax' ),
-                               'after'  => '</div>',
-                       ) );
-               ?>
-       </div><!-- .entry-content -->
-
-       <?php if( $post_footer == 1 ) : ?>
-       <footer class="entry-footer">
-               <?php
-                       /* translators: used between list items, there is a space after the comma */
-                       $category_list = get_the_category_list( ', ' );
-
-                       /* translators: used between list items, there is a space after the comma */
-                       $tag_list = get_the_tag_list( '', ', ' );
-
-
-                       if( '' != $category_list ){
-                            echo '<i class="fa fa-folder-open" aria-hidden="true"></i>'.$category_list;
-                       }
-            
-            if( '' != $tag_list ){
-                echo '<i class="fa fa-tags" aria-hidden="true"></i>'.$tag_list;
-            }
-               ?>
-       </footer><!-- .entry-footer -->
-<?php endif; ?>
-<?php edit_post_link( '<i class="fa fa-pencil-square-o"></i>'. __( 'Edit', 'accesspress-parallax' ), '<span class="edit-link">', '</span>' ); ?>
-</article><!-- #post-## -->
diff --git a/content.php b/content.php
deleted file mode 100644 (file)
index 5e60017..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-<?php
-/**
- * @package accesspress_parallax
- */
-?>
-<?php 
-$post_date = of_get_option('post_date');
-$post_footer = of_get_option('post_footer');
-$post_date_class = ($post_date != 1 || has_post_thumbnail()) ? " no-date" : "";
-?>
-
-<article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
-       <?php if(has_post_thumbnail()) : ?>
-       <div class="entry-thumb">
-               <?php $image = wp_get_attachment_image_src( get_post_thumbnail_id(get_the_ID()), 'blog-header' ); ?>
-               <a href="<?php echo esc_url(get_permalink()); ?>"><img src="<?php echo esc_url($image[0]); ?>" alt="<?php echo esc_attr( get_the_title() ); ?>"></a> 
-       </div>
-       <?php endif; ?>
-
-       <header class="entry-header">
-               <h1 class="entry-title<?php echo esc_attr($post_date_class); ?>"><a href="<?php echo esc_url(get_permalink()); ?>"><?php the_title(); ?></a></h1>
-
-
-               <?php if ( 'post' == get_post_type() ) : ?>
-               <div class="entry-meta">
-                       <?php accesspress_parallax_posted_on(); ?>
-               </div><!-- .entry-meta -->
-               <?php endif; ?>
-       </header><!-- .entry-header -->
-
-       <div class="entry-content">
-               <?php the_content( __( 'Continue reading <span class="meta-nav">&rarr;</span>', 'accesspress-parallax' ) ); ?>
-               <?php
-                       wp_link_pages( array(
-                               'before' => '<div class="page-links">' . __( 'Pages:', 'accesspress-parallax' ),
-                               'after'  => '</div>',
-                       ) );
-               ?>
-       </div><!-- .entry-content -->
-
-       <footer class="entry-footer">
-               <?php if ( 'post' == get_post_type() ) : // Hide category and tag text for pages on Search ?>
-                       <?php
-                               /* translators: used between list items, there is a space after the comma */
-                               $categories_list = get_the_category_list( ', ' );
-                               if ( $categories_list && accesspress_parallax_categorized_blog() ) :
-                       ?>
-                               <span class="cat-links">
-                                       <?php printf( __( '<i class="fa fa-folder-open"></i>Posted in %1$s', 'accesspress-parallax' ), $categories_list ); ?>
-                               </span>
-                       <?php endif; // End if categories ?>
-
-                       <?php
-                               /* translators: used between list items, there is a space after the comma */
-                               $tags_list = get_the_tag_list( '', __( ', ', 'accesspress-parallax' ) );
-                               if ( $tags_list ) :
-                       ?>
-                               <span class="tags-links">
-                                       <?php printf( __( '<i class="fa fa-tags"></i>Tagged %1$s', 'accesspress-parallax' ), $tags_list ); ?>
-                               </span>
-                       <?php endif; // End if $tags_list ?>
-               <?php endif; // End if 'post' == get_post_type() ?>
-
-               <?php if ( ! post_password_required() && ( comments_open() || '0' != get_comments_number() ) ) : ?>
-                       <span class="comments-link"><?php comments_popup_link( __( '<i class="fa fa-comments"></i>Leave a comment', 'accesspress-parallax' ), __( '<i class="fa fa-comments"></i>1 Comment', 'accesspress-parallax' ), __( '<i class="fa fa-comments"></i>% Comments', 'accesspress-parallax' ) ); ?></span>
-               <?php endif; ?>
-       </footer><!-- .entry-footer -->
-       <?php edit_post_link( '<i class="fa fa-pencil-square-o"></i>'. __( 'Edit', 'accesspress-parallax' ), '<span class="edit-link">', '</span>' ); ?>
-</article><!-- #post-## -->
\ No newline at end of file
diff --git a/css/animate.css b/css/animate.css
deleted file mode 100644 (file)
index ac82abb..0000000
+++ /dev/null
@@ -1,2741 +0,0 @@
-/*!
-Animate.css - http://daneden.me/animate
-Licensed under the MIT license
-
-Copyright (c) 2013 Daniel Eden
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-.animated {
-  -webkit-animation-duration: 1s;
-  animation-duration: 1s;
-  -webkit-animation-fill-mode: both;
-  animation-fill-mode: both;
-}
-
-.animated.hinge {
-  -webkit-animation-duration: 2s;
-  animation-duration: 2s;
-}
-
-@-webkit-keyframes bounce {
-  0%, 20%, 50%, 80%, 100% {
-    -webkit-transform: translateY(0);
-    transform: translateY(0);
-  }
-
-  40% {
-    -webkit-transform: translateY(-30px);
-    transform: translateY(-30px);
-  }
-
-  60% {
-    -webkit-transform: translateY(-15px);
-    transform: translateY(-15px);
-  }
-}
-
-@keyframes bounce {
-  0%, 20%, 50%, 80%, 100% {
-    -webkit-transform: translateY(0);
-    -ms-transform: translateY(0);
-    transform: translateY(0);
-  }
-
-  40% {
-    -webkit-transform: translateY(-30px);
-    -ms-transform: translateY(-30px);
-    transform: translateY(-30px);
-  }
-
-  60% {
-    -webkit-transform: translateY(-15px);
-    -ms-transform: translateY(-15px);
-    transform: translateY(-15px);
-  }
-}
-
-.bounce {
-  -webkit-animation-name: bounce;
-  animation-name: bounce;
-}
-
-@-webkit-keyframes flash {
-  0%, 50%, 100% {
-    opacity: 1;
-  }
-
-  25%, 75% {
-    opacity: 0;
-  }
-}
-
-@keyframes flash {
-  0%, 50%, 100% {
-    opacity: 1;
-  }
-
-  25%, 75% {
-    opacity: 0;
-  }
-}
-
-.flash {
-  -webkit-animation-name: flash;
-  animation-name: flash;
-}
-
-/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */
-
-@-webkit-keyframes pulse {
-  0% {
-    -webkit-transform: scale(1);
-    transform: scale(1);
-  }
-
-  50% {
-    -webkit-transform: scale(1.1);
-    transform: scale(1.1);
-  }
-
-  100% {
-    -webkit-transform: scale(1);
-    transform: scale(1);
-  }
-}
-
-@keyframes pulse {
-  0% {
-    -webkit-transform: scale(1);
-    -ms-transform: scale(1);
-    transform: scale(1);
-  }
-
-  50% {
-    -webkit-transform: scale(1.1);
-    -ms-transform: scale(1.1);
-    transform: scale(1.1);
-  }
-
-  100% {
-    -webkit-transform: scale(1);
-    -ms-transform: scale(1);
-    transform: scale(1);
-  }
-}
-
-.pulse {
-  -webkit-animation-name: pulse;
-  animation-name: pulse;
-}
-
-@-webkit-keyframes shake {
-  0%, 100% {
-    -webkit-transform: translateX(0);
-    transform: translateX(0);
-  }
-
-  10%, 30%, 50%, 70%, 90% {
-    -webkit-transform: translateX(-10px);
-    transform: translateX(-10px);
-  }
-
-  20%, 40%, 60%, 80% {
-    -webkit-transform: translateX(10px);
-    transform: translateX(10px);
-  }
-}
-
-@keyframes shake {
-  0%, 100% {
-    -webkit-transform: translateX(0);
-    -ms-transform: translateX(0);
-    transform: translateX(0);
-  }
-
-  10%, 30%, 50%, 70%, 90% {
-    -webkit-transform: translateX(-10px);
-    -ms-transform: translateX(-10px);
-    transform: translateX(-10px);
-  }
-
-  20%, 40%, 60%, 80% {
-    -webkit-transform: translateX(10px);
-    -ms-transform: translateX(10px);
-    transform: translateX(10px);
-  }
-}
-
-.shake {
-  -webkit-animation-name: shake;
-  animation-name: shake;
-}
-
-@-webkit-keyframes swing {
-  20% {
-    -webkit-transform: rotate(15deg);
-    transform: rotate(15deg);
-  }
-
-  40% {
-    -webkit-transform: rotate(-10deg);
-    transform: rotate(-10deg);
-  }
-
-  60% {
-    -webkit-transform: rotate(5deg);
-    transform: rotate(5deg);
-  }
-
-  80% {
-    -webkit-transform: rotate(-5deg);
-    transform: rotate(-5deg);
-  }
-
-  100% {
-    -webkit-transform: rotate(0deg);
-    transform: rotate(0deg);
-  }
-}
-
-@keyframes swing {
-  20% {
-    -webkit-transform: rotate(15deg);
-    -ms-transform: rotate(15deg);
-    transform: rotate(15deg);
-  }
-
-  40% {
-    -webkit-transform: rotate(-10deg);
-    -ms-transform: rotate(-10deg);
-    transform: rotate(-10deg);
-  }
-
-  60% {
-    -webkit-transform: rotate(5deg);
-    -ms-transform: rotate(5deg);
-    transform: rotate(5deg);
-  }
-
-  80% {
-    -webkit-transform: rotate(-5deg);
-    -ms-transform: rotate(-5deg);
-    transform: rotate(-5deg);
-  }
-
-  100% {
-    -webkit-transform: rotate(0deg);
-    -ms-transform: rotate(0deg);
-    transform: rotate(0deg);
-  }
-}
-
-.swing {
-  -webkit-transform-origin: top center;
-  -ms-transform-origin: top center;
-  transform-origin: top center;
-  -webkit-animation-name: swing;
-  animation-name: swing;
-}
-
-@-webkit-keyframes tada {
-  0% {
-    -webkit-transform: scale(1);
-    transform: scale(1);
-  }
-
-  10%, 20% {
-    -webkit-transform: scale(0.9) rotate(-3deg);
-    transform: scale(0.9) rotate(-3deg);
-  }
-
-  30%, 50%, 70%, 90% {
-    -webkit-transform: scale(1.1) rotate(3deg);
-    transform: scale(1.1) rotate(3deg);
-  }
-
-  40%, 60%, 80% {
-    -webkit-transform: scale(1.1) rotate(-3deg);
-    transform: scale(1.1) rotate(-3deg);
-  }
-
-  100% {
-    -webkit-transform: scale(1) rotate(0);
-    transform: scale(1) rotate(0);
-  }
-}
-
-@keyframes tada {
-  0% {
-    -webkit-transform: scale(1);
-    -ms-transform: scale(1);
-    transform: scale(1);
-  }
-
-  10%, 20% {
-    -webkit-transform: scale(0.9) rotate(-3deg);
-    -ms-transform: scale(0.9) rotate(-3deg);
-    transform: scale(0.9) rotate(-3deg);
-  }
-
-  30%, 50%, 70%, 90% {
-    -webkit-transform: scale(1.1) rotate(3deg);
-    -ms-transform: scale(1.1) rotate(3deg);
-    transform: scale(1.1) rotate(3deg);
-  }
-
-  40%, 60%, 80% {
-    -webkit-transform: scale(1.1) rotate(-3deg);
-    -ms-transform: scale(1.1) rotate(-3deg);
-    transform: scale(1.1) rotate(-3deg);
-  }
-
-  100% {
-    -webkit-transform: scale(1) rotate(0);
-    -ms-transform: scale(1) rotate(0);
-    transform: scale(1) rotate(0);
-  }
-}
-
-.tada {
-  -webkit-animation-name: tada;
-  animation-name: tada;
-}
-
-/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */
-
-@-webkit-keyframes wobble {
-  0% {
-    -webkit-transform: translateX(0%);
-    transform: translateX(0%);
-  }
-
-  15% {
-    -webkit-transform: translateX(-25%) rotate(-5deg);
-    transform: translateX(-25%) rotate(-5deg);
-  }
-
-  30% {
-    -webkit-transform: translateX(20%) rotate(3deg);
-    transform: translateX(20%) rotate(3deg);
-  }
-
-  45% {
-    -webkit-transform: translateX(-15%) rotate(-3deg);
-    transform: translateX(-15%) rotate(-3deg);
-  }
-
-  60% {
-    -webkit-transform: translateX(10%) rotate(2deg);
-    transform: translateX(10%) rotate(2deg);
-  }
-
-  75% {
-    -webkit-transform: translateX(-5%) rotate(-1deg);
-    transform: translateX(-5%) rotate(-1deg);
-  }
-
-  100% {
-    -webkit-transform: translateX(0%);
-    transform: translateX(0%);
-  }
-}
-
-@keyframes wobble {
-  0% {
-    -webkit-transform: translateX(0%);
-    -ms-transform: translateX(0%);
-    transform: translateX(0%);
-  }
-
-  15% {
-    -webkit-transform: translateX(-25%) rotate(-5deg);
-    -ms-transform: translateX(-25%) rotate(-5deg);
-    transform: translateX(-25%) rotate(-5deg);
-  }
-
-  30% {
-    -webkit-transform: translateX(20%) rotate(3deg);
-    -ms-transform: translateX(20%) rotate(3deg);
-    transform: translateX(20%) rotate(3deg);
-  }
-
-  45% {
-    -webkit-transform: translateX(-15%) rotate(-3deg);
-    -ms-transform: translateX(-15%) rotate(-3deg);
-    transform: translateX(-15%) rotate(-3deg);
-  }
-
-  60% {
-    -webkit-transform: translateX(10%) rotate(2deg);
-    -ms-transform: translateX(10%) rotate(2deg);
-    transform: translateX(10%) rotate(2deg);
-  }
-
-  75% {
-    -webkit-transform: translateX(-5%) rotate(-1deg);
-    -ms-transform: translateX(-5%) rotate(-1deg);
-    transform: translateX(-5%) rotate(-1deg);
-  }
-
-  100% {
-    -webkit-transform: translateX(0%);
-    -ms-transform: translateX(0%);
-    transform: translateX(0%);
-  }
-}
-
-.wobble {
-  -webkit-animation-name: wobble;
-  animation-name: wobble;
-}
-
-@-webkit-keyframes bounceIn {
-  0% {
-    opacity: 0;
-    -webkit-transform: scale(.3);
-    transform: scale(.3);
-  }
-
-  50% {
-    opacity: 1;
-    -webkit-transform: scale(1.05);
-    transform: scale(1.05);
-  }
-
-  70% {
-    -webkit-transform: scale(.9);
-    transform: scale(.9);
-  }
-
-  100% {
-    -webkit-transform: scale(1);
-    transform: scale(1);
-  }
-}
-
-@keyframes bounceIn {
-  0% {
-    opacity: 0;
-    -webkit-transform: scale(.3);
-    -ms-transform: scale(.3);
-    transform: scale(.3);
-  }
-
-  50% {
-    opacity: 1;
-    -webkit-transform: scale(1.05);
-    -ms-transform: scale(1.05);
-    transform: scale(1.05);
-  }
-
-  70% {
-    -webkit-transform: scale(.9);
-    -ms-transform: scale(.9);
-    transform: scale(.9);
-  }
-
-  100% {
-    -webkit-transform: scale(1);
-    -ms-transform: scale(1);
-    transform: scale(1);
-  }
-}
-
-.bounceIn {
-  -webkit-animation-name: bounceIn;
-  animation-name: bounceIn;
-}
-
-@-webkit-keyframes bounceInDown {
-  0% {
-    opacity: 0;
-    -webkit-transform: translateY(-2000px);
-    transform: translateY(-2000px);
-  }
-
-  60% {
-    opacity: 1;
-    -webkit-transform: translateY(30px);
-    transform: translateY(30px);
-  }
-
-  80% {
-    -webkit-transform: translateY(-10px);
-    transform: translateY(-10px);
-  }
-
-  100% {
-    -webkit-transform: translateY(0);
-    transform: translateY(0);
-  }
-}
-
-@keyframes bounceInDown {
-  0% {
-    opacity: 0;
-    -webkit-transform: translateY(-2000px);
-    -ms-transform: translateY(-2000px);
-    transform: translateY(-2000px);
-  }
-
-  60% {
-    opacity: 1;
-    -webkit-transform: translateY(30px);
-    -ms-transform: translateY(30px);
-    transform: translateY(30px);
-  }
-
-  80% {
-    -webkit-transform: translateY(-10px);
-    -ms-transform: translateY(-10px);
-    transform: translateY(-10px);
-  }
-
-  100% {
-    -webkit-transform: translateY(0);
-    -ms-transform: translateY(0);
-    transform: translateY(0);
-  }
-}
-
-.bounceInDown {
-  -webkit-animation-name: bounceInDown;
-  animation-name: bounceInDown;
-}
-
-@-webkit-keyframes bounceInLeft {
-  0% {
-    opacity: 0;
-    -webkit-transform: translateX(-2000px);
-    transform: translateX(-2000px);
-  }
-
-  60% {
-    opacity: 1;
-    -webkit-transform: translateX(30px);
-    transform: translateX(30px);
-  }
-
-  80% {
-    -webkit-transform: translateX(-10px);
-    transform: translateX(-10px);
-  }
-
-  100% {
-    -webkit-transform: translateX(0);
-    transform: translateX(0);
-  }
-}
-
-@keyframes bounceInLeft {
-  0% {
-    opacity: 0;
-    -webkit-transform: translateX(-2000px);
-    -ms-transform: translateX(-2000px);
-    transform: translateX(-2000px);
-  }
-
-  60% {
-    opacity: 1;
-    -webkit-transform: translateX(30px);
-    -ms-transform: translateX(30px);
-    transform: translateX(30px);
-  }
-
-  80% {
-    -webkit-transform: translateX(-10px);
-    -ms-transform: translateX(-10px);
-    transform: translateX(-10px);
-  }
-
-  100% {
-    -webkit-transform: translateX(0);
-    -ms-transform: translateX(0);
-    transform: translateX(0);
-  }
-}
-
-.bounceInLeft {
-  -webkit-animation-name: bounceInLeft;
-  animation-name: bounceInLeft;
-}
-
-@-webkit-keyframes bounceInRight {
-  0% {
-    opacity: 0;
-    -webkit-transform: translateX(2000px);
-    transform: translateX(2000px);
-  }
-
-  60% {
-    opacity: 1;
-    -webkit-transform: translateX(-30px);
-    transform: translateX(-30px);
-  }
-
-  80% {
-    -webkit-transform: translateX(10px);
-    transform: translateX(10px);
-  }
-
-  100% {
-    -webkit-transform: translateX(0);
-    transform: translateX(0);
-  }
-}
-
-@keyframes bounceInRight {
-  0% {
-    opacity: 0;
-    -webkit-transform: translateX(2000px);
-    -ms-transform: translateX(2000px);
-    transform: translateX(2000px);
-  }
-
-  60% {
-    opacity: 1;
-    -webkit-transform: translateX(-30px);
-    -ms-transform: translateX(-30px);
-    transform: translateX(-30px);
-  }
-
-  80% {
-    -webkit-transform: translateX(10px);
-    -ms-transform: translateX(10px);
-    transform: translateX(10px);
-  }
-
-  100% {
-    -webkit-transform: translateX(0);
-    -ms-transform: translateX(0);
-    transform: translateX(0);
-  }
-}
-
-.bounceInRight {
-  -webkit-animation-name: bounceInRight;
-  animation-name: bounceInRight;
-}
-
-@-webkit-keyframes bounceInUp {
-  0% {
-    opacity: 0;
-    -webkit-transform: translateY(2000px);
-    transform: translateY(2000px);
-  }
-
-  60% {
-    opacity: 1;
-    -webkit-transform: translateY(-30px);
-    transform: translateY(-30px);
-  }
-
-  80% {
-    -webkit-transform: translateY(10px);
-    transform: translateY(10px);
-  }
-
-  100% {
-    -webkit-transform: translateY(0);
-    transform: translateY(0);
-  }
-}
-
-@keyframes bounceInUp {
-  0% {
-    opacity: 0;
-    -webkit-transform: translateY(2000px);
-    -ms-transform: translateY(2000px);
-    transform: translateY(2000px);
-  }
-
-  60% {
-    opacity: 1;
-    -webkit-transform: translateY(-30px);
-    -ms-transform: translateY(-30px);
-    transform: translateY(-30px);
-  }
-
-  80% {
-    -webkit-transform: translateY(10px);
-    -ms-transform: translateY(10px);
-    transform: translateY(10px);
-  }
-
-  100% {
-    -webkit-transform: translateY(0);
-    -ms-transform: translateY(0);
-    transform: translateY(0);
-  }
-}
-
-.bounceInUp {
-  -webkit-animation-name: bounceInUp;
-  animation-name: bounceInUp;
-}
-
-@-webkit-keyframes bounceOut {
-  0% {
-    -webkit-transform: scale(1);
-    transform: scale(1);
-  }
-
-  25% {
-    -webkit-transform: scale(.95);
-    transform: scale(.95);
-  }
-
-  50% {
-    opacity: 1;
-    -webkit-transform: scale(1.1);
-    transform: scale(1.1);
-  }
-
-  100% {
-    opacity: 0;
-    -webkit-transform: scale(.3);
-    transform: scale(.3);
-  }
-}
-
-@keyframes bounceOut {
-  0% {
-    -webkit-transform: scale(1);
-    -ms-transform: scale(1);
-    transform: scale(1);
-  }
-
-  25% {
-    -webkit-transform: scale(.95);
-    -ms-transform: scale(.95);
-    transform: scale(.95);
-  }
-
-  50% {
-    opacity: 1;
-    -webkit-transform: scale(1.1);
-    -ms-transform: scale(1.1);
-    transform: scale(1.1);
-  }
-
-  100% {
-    opacity: 0;
-    -webkit-transform: scale(.3);
-    -ms-transform: scale(.3);
-    transform: scale(.3);
-  }
-}
-
-.bounceOut {
-  -webkit-animation-name: bounceOut;
-  animation-name: bounceOut;
-}
-
-@-webkit-keyframes bounceOutDown {
-  0% {
-    -webkit-transform: translateY(0);
-    transform: translateY(0);
-  }
-
-  20% {
-    opacity: 1;
-    -webkit-transform: translateY(-20px);
-    transform: translateY(-20px);
-  }
-
-  100% {
-    opacity: 0;
-    -webkit-transform: translateY(2000px);
-    transform: translateY(2000px);
-  }
-}
-
-@keyframes bounceOutDown {
-  0% {
-    -webkit-transform: translateY(0);
-    -ms-transform: translateY(0);
-    transform: translateY(0);
-  }
-
-  20% {
-    opacity: 1;
-    -webkit-transform: translateY(-20px);
-    -ms-transform: translateY(-20px);
-    transform: translateY(-20px);
-  }
-
-  100% {
-    opacity: 0;
-    -webkit-transform: translateY(2000px);
-    -ms-transform: translateY(2000px);
-    transform: translateY(2000px);
-  }
-}
-
-.bounceOutDown {
-  -webkit-animation-name: bounceOutDown;
-  animation-name: bounceOutDown;
-}
-
-@-webkit-keyframes bounceOutLeft {
-  0% {
-    -webkit-transform: translateX(0);
-    transform: translateX(0);
-  }
-
-  20% {
-    opacity: 1;
-    -webkit-transform: translateX(20px);
-    transform: translateX(20px);
-  }
-
-  100% {
-    opacity: 0;
-    -webkit-transform: translateX(-2000px);
-    transform: translateX(-2000px);
-  }
-}
-
-@keyframes bounceOutLeft {
-  0% {
-    -webkit-transform: translateX(0);
-    -ms-transform: translateX(0);
-    transform: translateX(0);
-  }
-
-  20% {
-    opacity: 1;
-    -webkit-transform: translateX(20px);
-    -ms-transform: translateX(20px);
-    transform: translateX(20px);
-  }
-
-  100% {
-    opacity: 0;
-    -webkit-transform: translateX(-2000px);
-    -ms-transform: translateX(-2000px);
-    transform: translateX(-2000px);
-  }
-}
-
-.bounceOutLeft {
-  -webkit-animation-name: bounceOutLeft;
-  animation-name: bounceOutLeft;
-}
-
-@-webkit-keyframes bounceOutRight {
-  0% {
-    -webkit-transform: translateX(0);
-    transform: translateX(0);
-  }
-
-  20% {
-    opacity: 1;
-    -webkit-transform: translateX(-20px);
-    transform: translateX(-20px);
-  }
-
-  100% {
-    opacity: 0;
-    -webkit-transform: translateX(2000px);
-    transform: translateX(2000px);
-  }
-}
-
-@keyframes bounceOutRight {
-  0% {
-    -webkit-transform: translateX(0);
-    -ms-transform: translateX(0);
-    transform: translateX(0);
-  }
-
-  20% {
-    opacity: 1;
-    -webkit-transform: translateX(-20px);
-    -ms-transform: translateX(-20px);
-    transform: translateX(-20px);
-  }
-
-  100% {
-    opacity: 0;
-    -webkit-transform: translateX(2000px);
-    -ms-transform: translateX(2000px);
-    transform: translateX(2000px);
-  }
-}
-
-.bounceOutRight {
-  -webkit-animation-name: bounceOutRight;
-  animation-name: bounceOutRight;
-}
-
-@-webkit-keyframes bounceOutUp {
-  0% {
-    -webkit-transform: translateY(0);
-    transform: translateY(0);
-  }
-
-  20% {
-    opacity: 1;
-    -webkit-transform: translateY(20px);
-    transform: translateY(20px);
-  }
-
-  100% {
-    opacity: 0;
-    -webkit-transform: translateY(-2000px);
-    transform: translateY(-2000px);
-  }
-}
-
-@keyframes bounceOutUp {
-  0% {
-    -webkit-transform: translateY(0);
-    -ms-transform: translateY(0);
-    transform: translateY(0);
-  }
-
-  20% {
-    opacity: 1;
-    -webkit-transform: translateY(20px);
-    -ms-transform: translateY(20px);
-    transform: translateY(20px);
-  }
-
-  100% {
-    opacity: 0;
-    -webkit-transform: translateY(-2000px);
-    -ms-transform: translateY(-2000px);
-    transform: translateY(-2000px);
-  }
-}
-
-.bounceOutUp {
-  -webkit-animation-name: bounceOutUp;
-  animation-name: bounceOutUp;
-}
-
-@-webkit-keyframes fadeIn {
-  0% {
-    opacity: 0;
-  }
-
-  100% {
-    opacity: 1;
-  }
-}
-
-@keyframes fadeIn {
-  0% {
-    opacity: 0;
-  }
-
-  100% {
-    opacity: 1;
-  }
-}
-
-.fadeIn {
-  -webkit-animation-name: fadeIn;
-  animation-name: fadeIn;
-}
-
-@-webkit-keyframes fadeInDown {
-  0% {
-    opacity: 0;
-    -webkit-transform: translateY(-20px);
-    transform: translateY(-20px);
-  }
-
-  100% {
-    opacity: 1;
-    -webkit-transform: translateY(0);
-    transform: translateY(0);
-  }
-}
-
-@keyframes fadeInDown {
-  0% {
-    opacity: 0;
-    -webkit-transform: translateY(-20px);
-    -ms-transform: translateY(-20px);
-    transform: translateY(-20px);
-  }
-
-  100% {
-    opacity: 1;
-    -webkit-transform: translateY(0);
-    -ms-transform: translateY(0);
-    transform: translateY(0);
-  }
-}
-
-.fadeInDown {
-  -webkit-animation-name: fadeInDown;
-  animation-name: fadeInDown;
-}
-
-@-webkit-keyframes fadeInDownBig {
-  0% {
-    opacity: 0;
-    -webkit-transform: translateY(-2000px);
-    transform: translateY(-2000px);
-  }
-
-  100% {
-    opacity: 1;
-    -webkit-transform: translateY(0);
-    transform: translateY(0);
-  }
-}
-
-@keyframes fadeInDownBig {
-  0% {
-    opacity: 0;
-    -webkit-transform: translateY(-2000px);
-    -ms-transform: translateY(-2000px);
-    transform: translateY(-2000px);
-  }
-
-  100% {
-    opacity: 1;
-    -webkit-transform: translateY(0);
-    -ms-transform: translateY(0);
-    transform: translateY(0);
-  }
-}
-
-.fadeInDownBig {
-  -webkit-animation-name: fadeInDownBig;
-  animation-name: fadeInDownBig;
-}
-
-@-webkit-keyframes fadeInLeft {
-  0% {
-    opacity: 0;
-    -webkit-transform: translateX(-20px);
-    transform: translateX(-20px);
-  }
-
-  100% {
-    opacity: 1;
-    -webkit-transform: translateX(0);
-    transform: translateX(0);
-  }
-}
-
-@keyframes fadeInLeft {
-  0% {
-    opacity: 0;
-    -webkit-transform: translateX(-20px);
-    -ms-transform: translateX(-20px);
-    transform: translateX(-20px);
-  }
-
-  100% {
-    opacity: 1;
-    -webkit-transform: translateX(0);
-    -ms-transform: translateX(0);
-    transform: translateX(0);
-  }
-}
-
-.fadeInLeft {
-  -webkit-animation-name: fadeInLeft;
-  animation-name: fadeInLeft;
-}
-
-@-webkit-keyframes fadeInLeftBig {
-  0% {
-    opacity: 0;
-    -webkit-transform: translateX(-2000px);
-    transform: translateX(-2000px);
-  }
-
-  100% {
-    opacity: 1;
-    -webkit-transform: translateX(0);
-    transform: translateX(0);
-  }
-}
-
-@keyframes fadeInLeftBig {
-  0% {
-    opacity: 0;
-    -webkit-transform: translateX(-2000px);
-    -ms-transform: translateX(-2000px);
-    transform: translateX(-2000px);
-  }
-
-  100% {
-    opacity: 1;
-    -webkit-transform: translateX(0);
-    -ms-transform: translateX(0);
-    transform: translateX(0);
-  }
-}
-
-.fadeInLeftBig {
-  -webkit-animation-name: fadeInLeftBig;
-  animation-name: fadeInLeftBig;
-}
-
-@-webkit-keyframes fadeInRight {
-  0% {
-    opacity: 0;
-    -webkit-transform: translateX(20px);
-    transform: translateX(20px);
-  }
-
-  100% {
-    opacity: 1;
-    -webkit-transform: translateX(0);
-    transform: translateX(0);
-  }
-}
-
-@keyframes fadeInRight {
-  0% {
-    opacity: 0;
-    -webkit-transform: translateX(20px);
-    -ms-transform: translateX(20px);
-    transform: translateX(20px);
-  }
-
-  100% {
-    opacity: 1;
-    -webkit-transform: translateX(0);
-    -ms-transform: translateX(0);
-    transform: translateX(0);
-  }
-}
-
-.fadeInRight {
-  -webkit-animation-name: fadeInRight;
-  animation-name: fadeInRight;
-}
-
-@-webkit-keyframes fadeInRightBig {
-  0% {
-    opacity: 0;
-    -webkit-transform: translateX(2000px);
-    transform: translateX(2000px);
-  }
-
-  100% {
-    opacity: 1;
-    -webkit-transform: translateX(0);
-    transform: translateX(0);
-  }
-}
-
-@keyframes fadeInRightBig {
-  0% {
-    opacity: 0;
-    -webkit-transform: translateX(2000px);
-    -ms-transform: translateX(2000px);
-    transform: translateX(2000px);
-  }
-
-  100% {
-    opacity: 1;
-    -webkit-transform: translateX(0);
-    -ms-transform: translateX(0);
-    transform: translateX(0);
-  }
-}
-
-.fadeInRightBig {
-  -webkit-animation-name: fadeInRightBig;
-  animation-name: fadeInRightBig;
-}
-
-@-webkit-keyframes fadeInUp {
-  0% {
-    opacity: 0;
-    -webkit-transform: translateY(20px);
-    transform: translateY(20px);
-  }
-
-  100% {
-    opacity: 1;
-    -webkit-transform: translateY(0);
-    transform: translateY(0);
-  }
-}
-
-@keyframes fadeInUp {
-  0% {
-    opacity: 0;
-    -webkit-transform: translateY(20px);
-    -ms-transform: translateY(20px);
-    transform: translateY(20px);
-  }
-
-  100% {
-    opacity: 1;
-    -webkit-transform: translateY(0);
-    -ms-transform: translateY(0);
-    transform: translateY(0);
-  }
-}
-
-.fadeInUp {
-  -webkit-animation-name: fadeInUp;
-  animation-name: fadeInUp;
-}
-
-@-webkit-keyframes fadeInUpBig {
-  0% {
-    opacity: 0;
-    -webkit-transform: translateY(2000px);
-    transform: translateY(2000px);
-  }
-
-  100% {
-    opacity: 1;
-    -webkit-transform: translateY(0);
-    transform: translateY(0);
-  }
-}
-
-@keyframes fadeInUpBig {
-  0% {
-    opacity: 0;
-    -webkit-transform: translateY(2000px);
-    -ms-transform: translateY(2000px);
-    transform: translateY(2000px);
-  }
-
-  100% {
-    opacity: 1;
-    -webkit-transform: translateY(0);
-    -ms-transform: translateY(0);
-    transform: translateY(0);
-  }
-}
-
-.fadeInUpBig {
-  -webkit-animation-name: fadeInUpBig;
-  animation-name: fadeInUpBig;
-}
-
-@-webkit-keyframes fadeOut {
-  0% {
-    opacity: 1;
-  }
-
-  100% {
-    opacity: 0;
-  }
-}
-
-@keyframes fadeOut {
-  0% {
-    opacity: 1;
-  }
-
-  100% {
-    opacity: 0;
-  }
-}
-
-.fadeOut {
-  -webkit-animation-name: fadeOut;
-  animation-name: fadeOut;
-}
-
-@-webkit-keyframes fadeOutDown {
-  0% {
-    opacity: 1;
-    -webkit-transform: translateY(0);
-    transform: translateY(0);
-  }
-
-  100% {
-    opacity: 0;
-    -webkit-transform: translateY(20px);
-    transform: translateY(20px);
-  }
-}
-
-@keyframes fadeOutDown {
-  0% {
-    opacity: 1;
-    -webkit-transform: translateY(0);
-    -ms-transform: translateY(0);
-    transform: translateY(0);
-  }
-
-  100% {
-    opacity: 0;
-    -webkit-transform: translateY(20px);
-    -ms-transform: translateY(20px);
-    transform: translateY(20px);
-  }
-}
-
-.fadeOutDown {
-  -webkit-animation-name: fadeOutDown;
-  animation-name: fadeOutDown;
-}
-
-@-webkit-keyframes fadeOutDownBig {
-  0% {
-    opacity: 1;
-    -webkit-transform: translateY(0);
-    transform: translateY(0);
-  }
-
-  100% {
-    opacity: 0;
-    -webkit-transform: translateY(2000px);
-    transform: translateY(2000px);
-  }
-}
-
-@keyframes fadeOutDownBig {
-  0% {
-    opacity: 1;
-    -webkit-transform: translateY(0);
-    -ms-transform: translateY(0);
-    transform: translateY(0);
-  }
-
-  100% {
-    opacity: 0;
-    -webkit-transform: translateY(2000px);
-    -ms-transform: translateY(2000px);
-    transform: translateY(2000px);
-  }
-}
-
-.fadeOutDownBig {
-  -webkit-animation-name: fadeOutDownBig;
-  animation-name: fadeOutDownBig;
-}
-
-@-webkit-keyframes fadeOutLeft {
-  0% {
-    opacity: 1;
-    -webkit-transform: translateX(0);
-    transform: translateX(0);
-  }
-
-  100% {
-    opacity: 0;
-    -webkit-transform: translateX(-20px);
-    transform: translateX(-20px);
-  }
-}
-
-@keyframes fadeOutLeft {
-  0% {
-    opacity: 1;
-    -webkit-transform: translateX(0);
-    -ms-transform: translateX(0);
-    transform: translateX(0);
-  }
-
-  100% {
-    opacity: 0;
-    -webkit-transform: translateX(-20px);
-    -ms-transform: translateX(-20px);
-    transform: translateX(-20px);
-  }
-}
-
-.fadeOutLeft {
-  -webkit-animation-name: fadeOutLeft;
-  animation-name: fadeOutLeft;
-}
-
-@-webkit-keyframes fadeOutLeftBig {
-  0% {
-    opacity: 1;
-    -webkit-transform: translateX(0);
-    transform: translateX(0);
-  }
-
-  100% {
-    opacity: 0;
-    -webkit-transform: translateX(-2000px);
-    transform: translateX(-2000px);
-  }
-}
-
-@keyframes fadeOutLeftBig {
-  0% {
-    opacity: 1;
-    -webkit-transform: translateX(0);
-    -ms-transform: translateX(0);
-    transform: translateX(0);
-  }
-
-  100% {
-    opacity: 0;
-    -webkit-transform: translateX(-2000px);
-    -ms-transform: translateX(-2000px);
-    transform: translateX(-2000px);
-  }
-}
-
-.fadeOutLeftBig {
-  -webkit-animation-name: fadeOutLeftBig;
-  animation-name: fadeOutLeftBig;
-}
-
-@-webkit-keyframes fadeOutRight {
-  0% {
-    opacity: 1;
-    -webkit-transform: translateX(0);
-    transform: translateX(0);
-  }
-
-  100% {
-    opacity: 0;
-    -webkit-transform: translateX(20px);
-    transform: translateX(20px);
-  }
-}
-
-@keyframes fadeOutRight {
-  0% {
-    opacity: 1;
-    -webkit-transform: translateX(0);
-    -ms-transform: translateX(0);
-    transform: translateX(0);
-  }
-
-  100% {
-    opacity: 0;
-    -webkit-transform: translateX(20px);
-    -ms-transform: translateX(20px);
-    transform: translateX(20px);
-  }
-}
-
-.fadeOutRight {
-  -webkit-animation-name: fadeOutRight;
-  animation-name: fadeOutRight;
-}
-
-@-webkit-keyframes fadeOutRightBig {
-  0% {
-    opacity: 1;
-    -webkit-transform: translateX(0);
-    transform: translateX(0);
-  }
-
-  100% {
-    opacity: 0;
-    -webkit-transform: translateX(2000px);
-    transform: translateX(2000px);
-  }
-}
-
-@keyframes fadeOutRightBig {
-  0% {
-    opacity: 1;
-    -webkit-transform: translateX(0);
-    -ms-transform: translateX(0);
-    transform: translateX(0);
-  }
-
-  100% {
-    opacity: 0;
-    -webkit-transform: translateX(2000px);
-    -ms-transform: translateX(2000px);
-    transform: translateX(2000px);
-  }
-}
-
-.fadeOutRightBig {
-  -webkit-animation-name: fadeOutRightBig;
-  animation-name: fadeOutRightBig;
-}
-
-@-webkit-keyframes fadeOutUp {
-  0% {
-    opacity: 1;
-    -webkit-transform: translateY(0);
-    transform: translateY(0);
-  }
-
-  100% {
-    opacity: 0;
-    -webkit-transform: translateY(-20px);
-    transform: translateY(-20px);
-  }
-}
-
-@keyframes fadeOutUp {
-  0% {
-    opacity: 1;
-    -webkit-transform: translateY(0);
-    -ms-transform: translateY(0);
-    transform: translateY(0);
-  }
-
-  100% {
-    opacity: 0;
-    -webkit-transform: translateY(-20px);
-    -ms-transform: translateY(-20px);
-    transform: translateY(-20px);
-  }
-}
-
-.fadeOutUp {
-  -webkit-animation-name: fadeOutUp;
-  animation-name: fadeOutUp;
-}
-
-@-webkit-keyframes fadeOutUpBig {
-  0% {
-    opacity: 1;
-    -webkit-transform: translateY(0);
-    transform: translateY(0);
-  }
-
-  100% {
-    opacity: 0;
-    -webkit-transform: translateY(-2000px);
-    transform: translateY(-2000px);
-  }
-}
-
-@keyframes fadeOutUpBig {
-  0% {
-    opacity: 1;
-    -webkit-transform: translateY(0);
-    -ms-transform: translateY(0);
-    transform: translateY(0);
-  }
-
-  100% {
-    opacity: 0;
-    -webkit-transform: translateY(-2000px);
-    -ms-transform: translateY(-2000px);
-    transform: translateY(-2000px);
-  }
-}
-
-.fadeOutUpBig {
-  -webkit-animation-name: fadeOutUpBig;
-  animation-name: fadeOutUpBig;
-}
-
-@-webkit-keyframes flip {
-  0% {
-    -webkit-transform: perspective(400px) translateZ(0) rotateY(0) scale(1);
-    transform: perspective(400px) translateZ(0) rotateY(0) scale(1);
-    -webkit-animation-timing-function: ease-out;
-    animation-timing-function: ease-out;
-  }
-
-  40% {
-    -webkit-transform: perspective(400px) translateZ(150px) rotateY(170deg) scale(1);
-    transform: perspective(400px) translateZ(150px) rotateY(170deg) scale(1);
-    -webkit-animation-timing-function: ease-out;
-    animation-timing-function: ease-out;
-  }
-
-  50% {
-    -webkit-transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1);
-    transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1);
-    -webkit-animation-timing-function: ease-in;
-    animation-timing-function: ease-in;
-  }
-
-  80% {
-    -webkit-transform: perspective(400px) translateZ(0) rotateY(360deg) scale(.95);
-    transform: perspective(400px) translateZ(0) rotateY(360deg) scale(.95);
-    -webkit-animation-timing-function: ease-in;
-    animation-timing-function: ease-in;
-  }
-
-  100% {
-    -webkit-transform: perspective(400px) translateZ(0) rotateY(360deg) scale(1);
-    transform: perspective(400px) translateZ(0) rotateY(360deg) scale(1);
-    -webkit-animation-timing-function: ease-in;
-    animation-timing-function: ease-in;
-  }
-}
-
-@keyframes flip {
-  0% {
-    -webkit-transform: perspective(400px) translateZ(0) rotateY(0) scale(1);
-    -ms-transform: perspective(400px) translateZ(0) rotateY(0) scale(1);
-    transform: perspective(400px) translateZ(0) rotateY(0) scale(1);
-    -webkit-animation-timing-function: ease-out;
-    animation-timing-function: ease-out;
-  }
-
-  40% {
-    -webkit-transform: perspective(400px) translateZ(150px) rotateY(170deg) scale(1);
-    -ms-transform: perspective(400px) translateZ(150px) rotateY(170deg) scale(1);
-    transform: perspective(400px) translateZ(150px) rotateY(170deg) scale(1);
-    -webkit-animation-timing-function: ease-out;
-    animation-timing-function: ease-out;
-  }
-
-  50% {
-    -webkit-transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1);
-    -ms-transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1);
-    transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1);
-    -webkit-animation-timing-function: ease-in;
-    animation-timing-function: ease-in;
-  }
-
-  80% {
-    -webkit-transform: perspective(400px) translateZ(0) rotateY(360deg) scale(.95);
-    -ms-transform: perspective(400px) translateZ(0) rotateY(360deg) scale(.95);
-    transform: perspective(400px) translateZ(0) rotateY(360deg) scale(.95);
-    -webkit-animation-timing-function: ease-in;
-    animation-timing-function: ease-in;
-  }
-
-  100% {
-    -webkit-transform: perspective(400px) translateZ(0) rotateY(360deg) scale(1);
-    -ms-transform: perspective(400px) translateZ(0) rotateY(360deg) scale(1);
-    transform: perspective(400px) translateZ(0) rotateY(360deg) scale(1);
-    -webkit-animation-timing-function: ease-in;
-    animation-timing-function: ease-in;
-  }
-}
-
-.animated.flip {
-  -webkit-backface-visibility: visible;
-  -ms-backface-visibility: visible;
-  backface-visibility: visible;
-  -webkit-animation-name: flip;
-  animation-name: flip;
-}
-
-@-webkit-keyframes flipInX {
-  0% {
-    -webkit-transform: perspective(400px) rotateX(90deg);
-    transform: perspective(400px) rotateX(90deg);
-    opacity: 0;
-  }
-
-  40% {
-    -webkit-transform: perspective(400px) rotateX(-10deg);
-    transform: perspective(400px) rotateX(-10deg);
-  }
-
-  70% {
-    -webkit-transform: perspective(400px) rotateX(10deg);
-    transform: perspective(400px) rotateX(10deg);
-  }
-
-  100% {
-    -webkit-transform: perspective(400px) rotateX(0deg);
-    transform: perspective(400px) rotateX(0deg);
-    opacity: 1;
-  }
-}
-
-@keyframes flipInX {
-  0% {
-    -webkit-transform: perspective(400px) rotateX(90deg);
-    -ms-transform: perspective(400px) rotateX(90deg);
-    transform: perspective(400px) rotateX(90deg);
-    opacity: 0;
-  }
-
-  40% {
-    -webkit-transform: perspective(400px) rotateX(-10deg);
-    -ms-transform: perspective(400px) rotateX(-10deg);
-    transform: perspective(400px) rotateX(-10deg);
-  }
-
-  70% {
-    -webkit-transform: perspective(400px) rotateX(10deg);
-    -ms-transform: perspective(400px) rotateX(10deg);
-    transform: perspective(400px) rotateX(10deg);
-  }
-
-  100% {
-    -webkit-transform: perspective(400px) rotateX(0deg);
-    -ms-transform: perspective(400px) rotateX(0deg);
-    transform: perspective(400px) rotateX(0deg);
-    opacity: 1;
-  }
-}
-
-.flipInX {
-  -webkit-backface-visibility: visible !important;
-  -ms-backface-visibility: visible !important;
-  backface-visibility: visible !important;
-  -webkit-animation-name: flipInX;
-  animation-name: flipInX;
-}
-
-@-webkit-keyframes flipInY {
-  0% {
-    -webkit-transform: perspective(400px) rotateY(90deg);
-    transform: perspective(400px) rotateY(90deg);
-    opacity: 0;
-  }
-
-  40% {
-    -webkit-transform: perspective(400px) rotateY(-10deg);
-    transform: perspective(400px) rotateY(-10deg);
-  }
-
-  70% {
-    -webkit-transform: perspective(400px) rotateY(10deg);
-    transform: perspective(400px) rotateY(10deg);
-  }
-
-  100% {
-    -webkit-transform: perspective(400px) rotateY(0deg);
-    transform: perspective(400px) rotateY(0deg);
-    opacity: 1;
-  }
-}
-
-@keyframes flipInY {
-  0% {
-    -webkit-transform: perspective(400px) rotateY(90deg);
-    -ms-transform: perspective(400px) rotateY(90deg);
-    transform: perspective(400px) rotateY(90deg);
-    opacity: 0;
-  }
-
-  40% {
-    -webkit-transform: perspective(400px) rotateY(-10deg);
-    -ms-transform: perspective(400px) rotateY(-10deg);
-    transform: perspective(400px) rotateY(-10deg);
-  }
-
-  70% {
-    -webkit-transform: perspective(400px) rotateY(10deg);
-    -ms-transform: perspective(400px) rotateY(10deg);
-    transform: perspective(400px) rotateY(10deg);
-  }
-
-  100% {
-    -webkit-transform: perspective(400px) rotateY(0deg);
-    -ms-transform: perspective(400px) rotateY(0deg);
-    transform: perspective(400px) rotateY(0deg);
-    opacity: 1;
-  }
-}
-
-.flipInY {
-  -webkit-backface-visibility: visible !important;
-  -ms-backface-visibility: visible !important;
-  backface-visibility: visible !important;
-  -webkit-animation-name: flipInY;
-  animation-name: flipInY;
-}
-
-@-webkit-keyframes flipOutX {
-  0% {
-    -webkit-transform: perspective(400px) rotateX(0deg);
-    transform: perspective(400px) rotateX(0deg);
-    opacity: 1;
-  }
-
-  100% {
-    -webkit-transform: perspective(400px) rotateX(90deg);
-    transform: perspective(400px) rotateX(90deg);
-    opacity: 0;
-  }
-}
-
-@keyframes flipOutX {
-  0% {
-    -webkit-transform: perspective(400px) rotateX(0deg);
-    -ms-transform: perspective(400px) rotateX(0deg);
-    transform: perspective(400px) rotateX(0deg);
-    opacity: 1;
-  }
-
-  100% {
-    -webkit-transform: perspective(400px) rotateX(90deg);
-    -ms-transform: perspective(400px) rotateX(90deg);
-    transform: perspective(400px) rotateX(90deg);
-    opacity: 0;
-  }
-}
-
-.flipOutX {
-  -webkit-animation-name: flipOutX;
-  animation-name: flipOutX;
-  -webkit-backface-visibility: visible !important;
-  -ms-backface-visibility: visible !important;
-  backface-visibility: visible !important;
-}
-
-@-webkit-keyframes flipOutY {
-  0% {
-    -webkit-transform: perspective(400px) rotateY(0deg);
-    transform: perspective(400px) rotateY(0deg);
-    opacity: 1;
-  }
-
-  100% {
-    -webkit-transform: perspective(400px) rotateY(90deg);
-    transform: perspective(400px) rotateY(90deg);
-    opacity: 0;
-  }
-}
-
-@keyframes flipOutY {
-  0% {
-    -webkit-transform: perspective(400px) rotateY(0deg);
-    -ms-transform: perspective(400px) rotateY(0deg);
-    transform: perspective(400px) rotateY(0deg);
-    opacity: 1;
-  }
-
-  100% {
-    -webkit-transform: perspective(400px) rotateY(90deg);
-    -ms-transform: perspective(400px) rotateY(90deg);
-    transform: perspective(400px) rotateY(90deg);
-    opacity: 0;
-  }
-}
-
-.flipOutY {
-  -webkit-backface-visibility: visible !important;
-  -ms-backface-visibility: visible !important;
-  backface-visibility: visible !important;
-  -webkit-animation-name: flipOutY;
-  animation-name: flipOutY;
-}
-
-@-webkit-keyframes lightSpeedIn {
-  0% {
-    -webkit-transform: translateX(100%) skewX(-30deg);
-    transform: translateX(100%) skewX(-30deg);
-    opacity: 0;
-  }
-
-  60% {
-    -webkit-transform: translateX(-20%) skewX(30deg);
-    transform: translateX(-20%) skewX(30deg);
-    opacity: 1;
-  }
-
-  80% {
-    -webkit-transform: translateX(0%) skewX(-15deg);
-    transform: translateX(0%) skewX(-15deg);
-    opacity: 1;
-  }
-
-  100% {
-    -webkit-transform: translateX(0%) skewX(0deg);
-    transform: translateX(0%) skewX(0deg);
-    opacity: 1;
-  }
-}
-
-@keyframes lightSpeedIn {
-  0% {
-    -webkit-transform: translateX(100%) skewX(-30deg);
-    -ms-transform: translateX(100%) skewX(-30deg);
-    transform: translateX(100%) skewX(-30deg);
-    opacity: 0;
-  }
-
-  60% {
-    -webkit-transform: translateX(-20%) skewX(30deg);
-    -ms-transform: translateX(-20%) skewX(30deg);
-    transform: translateX(-20%) skewX(30deg);
-    opacity: 1;
-  }
-
-  80% {
-    -webkit-transform: translateX(0%) skewX(-15deg);
-    -ms-transform: translateX(0%) skewX(-15deg);
-    transform: translateX(0%) skewX(-15deg);
-    opacity: 1;
-  }
-
-  100% {
-    -webkit-transform: translateX(0%) skewX(0deg);
-    -ms-transform: translateX(0%) skewX(0deg);
-    transform: translateX(0%) skewX(0deg);
-    opacity: 1;
-  }
-}
-
-.lightSpeedIn {
-  -webkit-animation-name: lightSpeedIn;
-  animation-name: lightSpeedIn;
-  -webkit-animation-timing-function: ease-out;
-  animation-timing-function: ease-out;
-}
-
-@-webkit-keyframes lightSpeedOut {
-  0% {
-    -webkit-transform: translateX(0%) skewX(0deg);
-    transform: translateX(0%) skewX(0deg);
-    opacity: 1;
-  }
-
-  100% {
-    -webkit-transform: translateX(100%) skewX(-30deg);
-    transform: translateX(100%) skewX(-30deg);
-    opacity: 0;
-  }
-}
-
-@keyframes lightSpeedOut {
-  0% {
-    -webkit-transform: translateX(0%) skewX(0deg);
-    -ms-transform: translateX(0%) skewX(0deg);
-    transform: translateX(0%) skewX(0deg);
-    opacity: 1;
-  }
-
-  100% {
-    -webkit-transform: translateX(100%) skewX(-30deg);
-    -ms-transform: translateX(100%) skewX(-30deg);
-    transform: translateX(100%) skewX(-30deg);
-    opacity: 0;
-  }
-}
-
-.lightSpeedOut {
-  -webkit-animation-name: lightSpeedOut;
-  animation-name: lightSpeedOut;
-  -webkit-animation-timing-function: ease-in;
-  animation-timing-function: ease-in;
-}
-
-@-webkit-keyframes rotateIn {
-  0% {
-    -webkit-transform-origin: center center;
-    transform-origin: center center;
-    -webkit-transform: rotate(-200deg);
-    transform: rotate(-200deg);
-    opacity: 0;
-  }
-
-  100% {
-    -webkit-transform-origin: center center;
-    transform-origin: center center;
-    -webkit-transform: rotate(0);
-    transform: rotate(0);
-    opacity: 1;
-  }
-}
-
-@keyframes rotateIn {
-  0% {
-    -webkit-transform-origin: center center;
-    -ms-transform-origin: center center;
-    transform-origin: center center;
-    -webkit-transform: rotate(-200deg);
-    -ms-transform: rotate(-200deg);
-    transform: rotate(-200deg);
-    opacity: 0;
-  }
-
-  100% {
-    -webkit-transform-origin: center center;
-    -ms-transform-origin: center center;
-    transform-origin: center center;
-    -webkit-transform: rotate(0);
-    -ms-transform: rotate(0);
-    transform: rotate(0);
-    opacity: 1;
-  }
-}
-
-.rotateIn {
-  -webkit-animation-name: rotateIn;
-  animation-name: rotateIn;
-}
-
-@-webkit-keyframes rotateInDownLeft {
-  0% {
-    -webkit-transform-origin: left bottom;
-    transform-origin: left bottom;
-    -webkit-transform: rotate(-90deg);
-    transform: rotate(-90deg);
-    opacity: 0;
-  }
-
-  100% {
-    -webkit-transform-origin: left bottom;
-    transform-origin: left bottom;
-    -webkit-transform: rotate(0);
-    transform: rotate(0);
-    opacity: 1;
-  }
-}
-
-@keyframes rotateInDownLeft {
-  0% {
-    -webkit-transform-origin: left bottom;
-    -ms-transform-origin: left bottom;
-    transform-origin: left bottom;
-    -webkit-transform: rotate(-90deg);
-    -ms-transform: rotate(-90deg);
-    transform: rotate(-90deg);
-    opacity: 0;
-  }
-
-  100% {
-    -webkit-transform-origin: left bottom;
-    -ms-transform-origin: left bottom;
-    transform-origin: left bottom;
-    -webkit-transform: rotate(0);
-    -ms-transform: rotate(0);
-    transform: rotate(0);
-    opacity: 1;
-  }
-}
-
-.rotateInDownLeft {
-  -webkit-animation-name: rotateInDownLeft;
-  animation-name: rotateInDownLeft;
-}
-
-@-webkit-keyframes rotateInDownRight {
-  0% {
-    -webkit-transform-origin: right bottom;
-    transform-origin: right bottom;
-    -webkit-transform: rotate(90deg);
-    transform: rotate(90deg);
-    opacity: 0;
-  }
-
-  100% {
-    -webkit-transform-origin: right bottom;
-    transform-origin: right bottom;
-    -webkit-transform: rotate(0);
-    transform: rotate(0);
-    opacity: 1;
-  }
-}
-
-@keyframes rotateInDownRight {
-  0% {
-    -webkit-transform-origin: right bottom;
-    -ms-transform-origin: right bottom;
-    transform-origin: right bottom;
-    -webkit-transform: rotate(90deg);
-    -ms-transform: rotate(90deg);
-    transform: rotate(90deg);
-    opacity: 0;
-  }
-
-  100% {
-    -webkit-transform-origin: right bottom;
-    -ms-transform-origin: right bottom;
-    transform-origin: right bottom;
-    -webkit-transform: rotate(0);
-    -ms-transform: rotate(0);
-    transform: rotate(0);
-    opacity: 1;
-  }
-}
-
-.rotateInDownRight {
-  -webkit-animation-name: rotateInDownRight;
-  animation-name: rotateInDownRight;
-}
-
-@-webkit-keyframes rotateInUpLeft {
-  0% {
-    -webkit-transform-origin: left bottom;
-    transform-origin: left bottom;
-    -webkit-transform: rotate(90deg);
-    transform: rotate(90deg);
-    opacity: 0;
-  }
-
-  100% {
-    -webkit-transform-origin: left bottom;
-    transform-origin: left bottom;
-    -webkit-transform: rotate(0);
-    transform: rotate(0);
-    opacity: 1;
-  }
-}
-
-@keyframes rotateInUpLeft {
-  0% {
-    -webkit-transform-origin: left bottom;
-    -ms-transform-origin: left bottom;
-    transform-origin: left bottom;
-    -webkit-transform: rotate(90deg);
-    -ms-transform: rotate(90deg);
-    transform: rotate(90deg);
-    opacity: 0;
-  }
-
-  100% {
-    -webkit-transform-origin: left bottom;
-    -ms-transform-origin: left bottom;
-    transform-origin: left bottom;
-    -webkit-transform: rotate(0);
-    -ms-transform: rotate(0);
-    transform: rotate(0);
-    opacity: 1;
-  }
-}
-
-.rotateInUpLeft {
-  -webkit-animation-name: rotateInUpLeft;
-  animation-name: rotateInUpLeft;
-}
-
-@-webkit-keyframes rotateInUpRight {
-  0% {
-    -webkit-transform-origin: right bottom;
-    transform-origin: right bottom;
-    -webkit-transform: rotate(-90deg);
-    transform: rotate(-90deg);
-    opacity: 0;
-  }
-
-  100% {
-    -webkit-transform-origin: right bottom;
-    transform-origin: right bottom;
-    -webkit-transform: rotate(0);
-    transform: rotate(0);
-    opacity: 1;
-  }
-}
-
-@keyframes rotateInUpRight {
-  0% {
-    -webkit-transform-origin: right bottom;
-    -ms-transform-origin: right bottom;
-    transform-origin: right bottom;
-    -webkit-transform: rotate(-90deg);
-    -ms-transform: rotate(-90deg);
-    transform: rotate(-90deg);
-    opacity: 0;
-  }
-
-  100% {
-    -webkit-transform-origin: right bottom;
-    -ms-transform-origin: right bottom;
-    transform-origin: right bottom;
-    -webkit-transform: rotate(0);
-    -ms-transform: rotate(0);
-    transform: rotate(0);
-    opacity: 1;
-  }
-}
-
-.rotateInUpRight {
-  -webkit-animation-name: rotateInUpRight;
-  animation-name: rotateInUpRight;
-}
-
-@-webkit-keyframes rotateOut {
-  0% {
-    -webkit-transform-origin: center center;
-    transform-origin: center center;
-    -webkit-transform: rotate(0);
-    transform: rotate(0);
-    opacity: 1;
-  }
-
-  100% {
-    -webkit-transform-origin: center center;
-    transform-origin: center center;
-    -webkit-transform: rotate(200deg);
-    transform: rotate(200deg);
-    opacity: 0;
-  }
-}
-
-@keyframes rotateOut {
-  0% {
-    -webkit-transform-origin: center center;
-    -ms-transform-origin: center center;
-    transform-origin: center center;
-    -webkit-transform: rotate(0);
-    -ms-transform: rotate(0);
-    transform: rotate(0);
-    opacity: 1;
-  }
-
-  100% {
-    -webkit-transform-origin: center center;
-    -ms-transform-origin: center center;
-    transform-origin: center center;
-    -webkit-transform: rotate(200deg);
-    -ms-transform: rotate(200deg);
-    transform: rotate(200deg);
-    opacity: 0;
-  }
-}
-
-.rotateOut {
-  -webkit-animation-name: rotateOut;
-  animation-name: rotateOut;
-}
-
-@-webkit-keyframes rotateOutDownLeft {
-  0% {
-    -webkit-transform-origin: left bottom;
-    transform-origin: left bottom;
-    -webkit-transform: rotate(0);
-    transform: rotate(0);
-    opacity: 1;
-  }
-
-  100% {
-    -webkit-transform-origin: left bottom;
-    transform-origin: left bottom;
-    -webkit-transform: rotate(90deg);
-    transform: rotate(90deg);
-    opacity: 0;
-  }
-}
-
-@keyframes rotateOutDownLeft {
-  0% {
-    -webkit-transform-origin: left bottom;
-    -ms-transform-origin: left bottom;
-    transform-origin: left bottom;
-    -webkit-transform: rotate(0);
-    -ms-transform: rotate(0);
-    transform: rotate(0);
-    opacity: 1;
-  }
-
-  100% {
-    -webkit-transform-origin: left bottom;
-    -ms-transform-origin: left bottom;
-    transform-origin: left bottom;
-    -webkit-transform: rotate(90deg);
-    -ms-transform: rotate(90deg);
-    transform: rotate(90deg);
-    opacity: 0;
-  }
-}
-
-.rotateOutDownLeft {
-  -webkit-animation-name: rotateOutDownLeft;
-  animation-name: rotateOutDownLeft;
-}
-
-@-webkit-keyframes rotateOutDownRight {
-  0% {
-    -webkit-transform-origin: right bottom;
-    transform-origin: right bottom;
-    -webkit-transform: rotate(0);
-    transform: rotate(0);
-    opacity: 1;
-  }
-
-  100% {
-    -webkit-transform-origin: right bottom;
-    transform-origin: right bottom;
-    -webkit-transform: rotate(-90deg);
-    transform: rotate(-90deg);
-    opacity: 0;
-  }
-}
-
-@keyframes rotateOutDownRight {
-  0% {
-    -webkit-transform-origin: right bottom;
-    -ms-transform-origin: right bottom;
-    transform-origin: right bottom;
-    -webkit-transform: rotate(0);
-    -ms-transform: rotate(0);
-    transform: rotate(0);
-    opacity: 1;
-  }
-
-  100% {
-    -webkit-transform-origin: right bottom;
-    -ms-transform-origin: right bottom;
-    transform-origin: right bottom;
-    -webkit-transform: rotate(-90deg);
-    -ms-transform: rotate(-90deg);
-    transform: rotate(-90deg);
-    opacity: 0;
-  }
-}
-
-.rotateOutDownRight {
-  -webkit-animation-name: rotateOutDownRight;
-  animation-name: rotateOutDownRight;
-}
-
-@-webkit-keyframes rotateOutUpLeft {
-  0% {
-    -webkit-transform-origin: left bottom;
-    transform-origin: left bottom;
-    -webkit-transform: rotate(0);
-    transform: rotate(0);
-    opacity: 1;
-  }
-
-  100% {
-    -webkit-transform-origin: left bottom;
-    transform-origin: left bottom;
-    -webkit-transform: rotate(-90deg);
-    transform: rotate(-90deg);
-    opacity: 0;
-  }
-}
-
-@keyframes rotateOutUpLeft {
-  0% {
-    -webkit-transform-origin: left bottom;
-    -ms-transform-origin: left bottom;
-    transform-origin: left bottom;
-    -webkit-transform: rotate(0);
-    -ms-transform: rotate(0);
-    transform: rotate(0);
-    opacity: 1;
-  }
-
-  100% {
-    -webkit-transform-origin: left bottom;
-    -ms-transform-origin: left bottom;
-    transform-origin: left bottom;
-    -webkit-transform: rotate(-90deg);
-    -ms-transform: rotate(-90deg);
-    transform: rotate(-90deg);
-    opacity: 0;
-  }
-}
-
-.rotateOutUpLeft {
-  -webkit-animation-name: rotateOutUpLeft;
-  animation-name: rotateOutUpLeft;
-}
-
-@-webkit-keyframes rotateOutUpRight {
-  0% {
-    -webkit-transform-origin: right bottom;
-    transform-origin: right bottom;
-    -webkit-transform: rotate(0);
-    transform: rotate(0);
-    opacity: 1;
-  }
-
-  100% {
-    -webkit-transform-origin: right bottom;
-    transform-origin: right bottom;
-    -webkit-transform: rotate(90deg);
-    transform: rotate(90deg);
-    opacity: 0;
-  }
-}
-
-@keyframes rotateOutUpRight {
-  0% {
-    -webkit-transform-origin: right bottom;
-    -ms-transform-origin: right bottom;
-    transform-origin: right bottom;
-    -webkit-transform: rotate(0);
-    -ms-transform: rotate(0);
-    transform: rotate(0);
-    opacity: 1;
-  }
-
-  100% {
-    -webkit-transform-origin: right bottom;
-    -ms-transform-origin: right bottom;
-    transform-origin: right bottom;
-    -webkit-transform: rotate(90deg);
-    -ms-transform: rotate(90deg);
-    transform: rotate(90deg);
-    opacity: 0;
-  }
-}
-
-.rotateOutUpRight {
-  -webkit-animation-name: rotateOutUpRight;
-  animation-name: rotateOutUpRight;
-}
-
-@-webkit-keyframes slideInDown {
-  0% {
-    opacity: 0;
-    -webkit-transform: translateY(-2000px);
-    transform: translateY(-2000px);
-  }
-
-  100% {
-    -webkit-transform: translateY(0);
-    transform: translateY(0);
-  }
-}
-
-@keyframes slideInDown {
-  0% {
-    opacity: 0;
-    -webkit-transform: translateY(-2000px);
-    -ms-transform: translateY(-2000px);
-    transform: translateY(-2000px);
-  }
-
-  100% {
-    -webkit-transform: translateY(0);
-    -ms-transform: translateY(0);
-    transform: translateY(0);
-  }
-}
-
-.slideInDown {
-  -webkit-animation-name: slideInDown;
-  animation-name: slideInDown;
-}
-
-@-webkit-keyframes slideInLeft {
-  0% {
-    opacity: 0;
-    -webkit-transform: translateX(-2000px);
-    transform: translateX(-2000px);
-  }
-
-  100% {
-    -webkit-transform: translateX(0);
-    transform: translateX(0);
-  }
-}
-
-@keyframes slideInLeft {
-  0% {
-    opacity: 0;
-    -webkit-transform: translateX(-2000px);
-    -ms-transform: translateX(-2000px);
-    transform: translateX(-2000px);
-  }
-
-  100% {
-    -webkit-transform: translateX(0);
-    -ms-transform: translateX(0);
-    transform: translateX(0);
-  }
-}
-
-.slideInLeft {
-  -webkit-animation-name: slideInLeft;
-  animation-name: slideInLeft;
-}
-
-@-webkit-keyframes slideInRight {
-  0% {
-    opacity: 0;
-    -webkit-transform: translateX(2000px);
-    transform: translateX(2000px);
-  }
-
-  100% {
-    -webkit-transform: translateX(0);
-    transform: translateX(0);
-  }
-}
-
-@keyframes slideInRight {
-  0% {
-    opacity: 0;
-    -webkit-transform: translateX(2000px);
-    -ms-transform: translateX(2000px);
-    transform: translateX(2000px);
-  }
-
-  100% {
-    -webkit-transform: translateX(0);
-    -ms-transform: translateX(0);
-    transform: translateX(0);
-  }
-}
-
-.slideInRight {
-  -webkit-animation-name: slideInRight;
-  animation-name: slideInRight;
-}
-
-@-webkit-keyframes slideOutLeft {
-  0% {
-    -webkit-transform: translateX(0);
-    transform: translateX(0);
-  }
-
-  100% {
-    opacity: 0;
-    -webkit-transform: translateX(-2000px);
-    transform: translateX(-2000px);
-  }
-}
-
-@keyframes slideOutLeft {
-  0% {
-    -webkit-transform: translateX(0);
-    -ms-transform: translateX(0);
-    transform: translateX(0);
-  }
-
-  100% {
-    opacity: 0;
-    -webkit-transform: translateX(-2000px);
-    -ms-transform: translateX(-2000px);
-    transform: translateX(-2000px);
-  }
-}
-
-.slideOutLeft {
-  -webkit-animation-name: slideOutLeft;
-  animation-name: slideOutLeft;
-}
-
-@-webkit-keyframes slideOutRight {
-  0% {
-    -webkit-transform: translateX(0);
-    transform: translateX(0);
-  }
-
-  100% {
-    opacity: 0;
-    -webkit-transform: translateX(2000px);
-    transform: translateX(2000px);
-  }
-}
-
-@keyframes slideOutRight {
-  0% {
-    -webkit-transform: translateX(0);
-    -ms-transform: translateX(0);
-    transform: translateX(0);
-  }
-
-  100% {
-    opacity: 0;
-    -webkit-transform: translateX(2000px);
-    -ms-transform: translateX(2000px);
-    transform: translateX(2000px);
-  }
-}
-
-.slideOutRight {
-  -webkit-animation-name: slideOutRight;
-  animation-name: slideOutRight;
-}
-
-@-webkit-keyframes slideOutUp {
-  0% {
-    -webkit-transform: translateY(0);
-    transform: translateY(0);
-  }
-
-  100% {
-    opacity: 0;
-    -webkit-transform: translateY(-2000px);
-    transform: translateY(-2000px);
-  }
-}
-
-@keyframes slideOutUp {
-  0% {
-    -webkit-transform: translateY(0);
-    -ms-transform: translateY(0);
-    transform: translateY(0);
-  }
-
-  100% {
-    opacity: 0;
-    -webkit-transform: translateY(-2000px);
-    -ms-transform: translateY(-2000px);
-    transform: translateY(-2000px);
-  }
-}
-
-.slideOutUp {
-  -webkit-animation-name: slideOutUp;
-  animation-name: slideOutUp;
-}
-
-@-webkit-keyframes hinge {
-  0% {
-    -webkit-transform: rotate(0);
-    transform: rotate(0);
-    -webkit-transform-origin: top left;
-    transform-origin: top left;
-    -webkit-animation-timing-function: ease-in-out;
-    animation-timing-function: ease-in-out;
-  }
-
-  20%, 60% {
-    -webkit-transform: rotate(80deg);
-    transform: rotate(80deg);
-    -webkit-transform-origin: top left;
-    transform-origin: top left;
-    -webkit-animation-timing-function: ease-in-out;
-    animation-timing-function: ease-in-out;
-  }
-
-  40% {
-    -webkit-transform: rotate(60deg);
-    transform: rotate(60deg);
-    -webkit-transform-origin: top left;
-    transform-origin: top left;
-    -webkit-animation-timing-function: ease-in-out;
-    animation-timing-function: ease-in-out;
-  }
-
-  80% {
-    -webkit-transform: rotate(60deg) translateY(0);
-    transform: rotate(60deg) translateY(0);
-    opacity: 1;
-    -webkit-transform-origin: top left;
-    transform-origin: top left;
-    -webkit-animation-timing-function: ease-in-out;
-    animation-timing-function: ease-in-out;
-  }
-
-  100% {
-    -webkit-transform: translateY(700px);
-    transform: translateY(700px);
-    opacity: 0;
-  }
-}
-
-@keyframes hinge {
-  0% {
-    -webkit-transform: rotate(0);
-    -ms-transform: rotate(0);
-    transform: rotate(0);
-    -webkit-transform-origin: top left;
-    -ms-transform-origin: top left;
-    transform-origin: top left;
-    -webkit-animation-timing-function: ease-in-out;
-    animation-timing-function: ease-in-out;
-  }
-
-  20%, 60% {
-    -webkit-transform: rotate(80deg);
-    -ms-transform: rotate(80deg);
-    transform: rotate(80deg);
-    -webkit-transform-origin: top left;
-    -ms-transform-origin: top left;
-    transform-origin: top left;
-    -webkit-animation-timing-function: ease-in-out;
-    animation-timing-function: ease-in-out;
-  }
-
-  40% {
-    -webkit-transform: rotate(60deg);
-    -ms-transform: rotate(60deg);
-    transform: rotate(60deg);
-    -webkit-transform-origin: top left;
-    -ms-transform-origin: top left;
-    transform-origin: top left;
-    -webkit-animation-timing-function: ease-in-out;
-    animation-timing-function: ease-in-out;
-  }
-
-  80% {
-    -webkit-transform: rotate(60deg) translateY(0);
-    -ms-transform: rotate(60deg) translateY(0);
-    transform: rotate(60deg) translateY(0);
-    opacity: 1;
-    -webkit-transform-origin: top left;
-    -ms-transform-origin: top left;
-    transform-origin: top left;
-    -webkit-animation-timing-function: ease-in-out;
-    animation-timing-function: ease-in-out;
-  }
-
-  100% {
-    -webkit-transform: translateY(700px);
-    -ms-transform: translateY(700px);
-    transform: translateY(700px);
-    opacity: 0;
-  }
-}
-
-.hinge {
-  -webkit-animation-name: hinge;
-  animation-name: hinge;
-}
-
-/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */
-
-@-webkit-keyframes rollIn {
-  0% {
-    opacity: 0;
-    -webkit-transform: translateX(-100%) rotate(-120deg);
-    transform: translateX(-100%) rotate(-120deg);
-  }
-
-  100% {
-    opacity: 1;
-    -webkit-transform: translateX(0px) rotate(0deg);
-    transform: translateX(0px) rotate(0deg);
-  }
-}
-
-@keyframes rollIn {
-  0% {
-    opacity: 0;
-    -webkit-transform: translateX(-100%) rotate(-120deg);
-    -ms-transform: translateX(-100%) rotate(-120deg);
-    transform: translateX(-100%) rotate(-120deg);
-  }
-
-  100% {
-    opacity: 1;
-    -webkit-transform: translateX(0px) rotate(0deg);
-    -ms-transform: translateX(0px) rotate(0deg);
-    transform: translateX(0px) rotate(0deg);
-  }
-}
-
-.rollIn {
-  -webkit-animation-name: rollIn;
-  animation-name: rollIn;
-}
-
-/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */
-
-@-webkit-keyframes rollOut {
-  0% {
-    opacity: 1;
-    -webkit-transform: translateX(0px) rotate(0deg);
-    transform: translateX(0px) rotate(0deg);
-  }
-
-  100% {
-    opacity: 0;
-    -webkit-transform: translateX(100%) rotate(120deg);
-    transform: translateX(100%) rotate(120deg);
-  }
-}
-
-@keyframes rollOut {
-  0% {
-    opacity: 1;
-    -webkit-transform: translateX(0px) rotate(0deg);
-    -ms-transform: translateX(0px) rotate(0deg);
-    transform: translateX(0px) rotate(0deg);
-  }
-
-  100% {
-    opacity: 0;
-    -webkit-transform: translateX(100%) rotate(120deg);
-    -ms-transform: translateX(100%) rotate(120deg);
-    transform: translateX(100%) rotate(120deg);
-  }
-}
-
-.rollOut {
-  -webkit-animation-name: rollOut;
-  animation-name: rollOut;
-}
diff --git a/css/app.css b/css/app.css
new file mode 100644 (file)
index 0000000..205a45f
--- /dev/null
@@ -0,0 +1 @@
+meta.foundation-version{font-family:"/5.5.3/"}meta.foundation-mq-small{font-family:"/only screen/";width:0em}meta.foundation-mq-small-only{font-family:"/only screen and (max-width: 40em)/";width:0em}meta.foundation-mq-medium{font-family:"/only screen and (min-width:40.063em)/";width:40.063em}meta.foundation-mq-medium-only{font-family:"/only screen and (min-width:40.063em) and (max-width:64em)/";width:40.063em}meta.foundation-mq-large{font-family:"/only screen and (min-width:64.063em)/";width:64.063em}meta.foundation-mq-large-only{font-family:"/only screen and (min-width:64.063em) and (max-width:90em)/";width:64.063em}meta.foundation-mq-xlarge{font-family:"/only screen and (min-width:90.063em)/";width:90.063em}meta.foundation-mq-xlarge-only{font-family:"/only screen and (min-width:90.063em) and (max-width:120em)/";width:90.063em}meta.foundation-mq-xxlarge{font-family:"/only screen and (min-width:120.063em)/";width:120.063em}meta.foundation-data-attribute-namespace{font-family:false}html,body{height:100%}*,*:before,*:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html,body{font-size:100%}body{background:#fff;color:#000000;cursor:auto;font-family:"Open Sans",sans-serif;font-style:normal;font-weight:normal;line-height:150%;margin:0;padding:0;position:relative}a:hover{cursor:pointer}img{max-width:100%;height:auto}img{-ms-interpolation-mode:bicubic}#map_canvas img,#map_canvas embed,#map_canvas object,.map_canvas img,.map_canvas embed,.map_canvas object,.mqa-display img,.mqa-display embed,.mqa-display object{max-width:none !important}.left{float:left !important}.right{float:right !important}.clearfix:before,.clearfix:after{content:" ";display:table}.clearfix:after{clear:both}.hide{display:none}.invisible{visibility:hidden}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}img{display:inline-block;vertical-align:middle}textarea{height:auto;min-height:50px}select{width:100%}.row{margin:0 auto;max-width:62.5rem;width:100%}.row:before,.row:after{content:" ";display:table}.row:after{clear:both}.row.collapse>.column,.row.collapse>.columns{padding-left:0;padding-right:0}.row.collapse .row{margin-left:0;margin-right:0}.row .row{margin:0 -0.9375rem;max-width:none;width:auto}.row .row:before,.row .row:after{content:" ";display:table}.row .row:after{clear:both}.row .row.collapse{margin:0;max-width:none;width:auto}.row .row.collapse:before,.row .row.collapse:after{content:" ";display:table}.row .row.collapse:after{clear:both}.column,.columns{padding-left:0.9375rem;padding-right:0.9375rem;width:100%;float:left}.column+.column:last-child,.columns+.columns:last-child{float:right}.column+.column.end,.columns+.columns.end{float:left}@media only screen{.small-push-0{position:relative;left:0;right:auto}.small-pull-0{position:relative;right:0;left:auto}.small-push-1{position:relative;left:8.3333333333%;right:auto}.small-pull-1{position:relative;right:8.3333333333%;left:auto}.small-push-2{position:relative;left:16.6666666667%;right:auto}.small-pull-2{position:relative;right:16.6666666667%;left:auto}.small-push-3{position:relative;left:25%;right:auto}.small-pull-3{position:relative;right:25%;left:auto}.small-push-4{position:relative;left:33.3333333333%;right:auto}.small-pull-4{position:relative;right:33.3333333333%;left:auto}.small-push-5{position:relative;left:41.6666666667%;right:auto}.small-pull-5{position:relative;right:41.6666666667%;left:auto}.small-push-6{position:relative;left:50%;right:auto}.small-pull-6{position:relative;right:50%;left:auto}.small-push-7{position:relative;left:58.3333333333%;right:auto}.small-pull-7{position:relative;right:58.3333333333%;left:auto}.small-push-8{position:relative;left:66.6666666667%;right:auto}.small-pull-8{position:relative;right:66.6666666667%;left:auto}.small-push-9{position:relative;left:75%;right:auto}.small-pull-9{position:relative;right:75%;left:auto}.small-push-10{position:relative;left:83.3333333333%;right:auto}.small-pull-10{position:relative;right:83.3333333333%;left:auto}.small-push-11{position:relative;left:91.6666666667%;right:auto}.small-pull-11{position:relative;right:91.6666666667%;left:auto}.column,.columns{position:relative;padding-left:0.9375rem;padding-right:0.9375rem;float:left}.small-1{width:8.3333333333%}.small-2{width:16.6666666667%}.small-3{width:25%}.small-4{width:33.3333333333%}.small-5{width:41.6666666667%}.small-6{width:50%}.small-7{width:58.3333333333%}.small-8{width:66.6666666667%}.small-9{width:75%}.small-10{width:83.3333333333%}.small-11{width:91.6666666667%}.small-12{width:100%}.small-offset-0{margin-left:0 !important}.small-offset-1{margin-left:8.3333333333% !important}.small-offset-2{margin-left:16.6666666667% !important}.small-offset-3{margin-left:25% !important}.small-offset-4{margin-left:33.3333333333% !important}.small-offset-5{margin-left:41.6666666667% !important}.small-offset-6{margin-left:50% !important}.small-offset-7{margin-left:58.3333333333% !important}.small-offset-8{margin-left:66.6666666667% !important}.small-offset-9{margin-left:75% !important}.small-offset-10{margin-left:83.3333333333% !important}.small-offset-11{margin-left:91.6666666667% !important}.small-reset-order{float:left;left:auto;margin-left:0;margin-right:0;right:auto}.column.small-centered,.columns.small-centered{margin-left:auto;margin-right:auto;float:none}.column.small-uncentered,.columns.small-uncentered{float:left;margin-left:0;margin-right:0}.column.small-centered:last-child,.columns.small-centered:last-child{float:none}.column.small-uncentered:last-child,.columns.small-uncentered:last-child{float:left}.column.small-uncentered.opposite,.columns.small-uncentered.opposite{float:right}.row.small-collapse>.column,.row.small-collapse>.columns{padding-left:0;padding-right:0}.row.small-collapse .row{margin-left:0;margin-right:0}.row.small-uncollapse>.column,.row.small-uncollapse>.columns{padding-left:0.9375rem;padding-right:0.9375rem;float:left}}@media only screen and (min-width:40.063em){.medium-push-0{position:relative;left:0;right:auto}.medium-pull-0{position:relative;right:0;left:auto}.medium-push-1{position:relative;left:8.3333333333%;right:auto}.medium-pull-1{position:relative;right:8.3333333333%;left:auto}.medium-push-2{position:relative;left:16.6666666667%;right:auto}.medium-pull-2{position:relative;right:16.6666666667%;left:auto}.medium-push-3{position:relative;left:25%;right:auto}.medium-pull-3{position:relative;right:25%;left:auto}.medium-push-4{position:relative;left:33.3333333333%;right:auto}.medium-pull-4{position:relative;right:33.3333333333%;left:auto}.medium-push-5{position:relative;left:41.6666666667%;right:auto}.medium-pull-5{position:relative;right:41.6666666667%;left:auto}.medium-push-6{position:relative;left:50%;right:auto}.medium-pull-6{position:relative;right:50%;left:auto}.medium-push-7{position:relative;left:58.3333333333%;right:auto}.medium-pull-7{position:relative;right:58.3333333333%;left:auto}.medium-push-8{position:relative;left:66.6666666667%;right:auto}.medium-pull-8{position:relative;right:66.6666666667%;left:auto}.medium-push-9{position:relative;left:75%;right:auto}.medium-pull-9{position:relative;right:75%;left:auto}.medium-push-10{position:relative;left:83.3333333333%;right:auto}.medium-pull-10{position:relative;right:83.3333333333%;left:auto}.medium-push-11{position:relative;left:91.6666666667%;right:auto}.medium-pull-11{position:relative;right:91.6666666667%;left:auto}.column,.columns{position:relative;padding-left:0.9375rem;padding-right:0.9375rem;float:left}.medium-1{width:8.3333333333%}.medium-2{width:16.6666666667%}.medium-3{width:25%}.medium-4{width:33.3333333333%}.medium-5{width:41.6666666667%}.medium-6{width:50%}.medium-7{width:58.3333333333%}.medium-8{width:66.6666666667%}.medium-9{width:75%}.medium-10{width:83.3333333333%}.medium-11{width:91.6666666667%}.medium-12{width:100%}.medium-offset-0{margin-left:0 !important}.medium-offset-1{margin-left:8.3333333333% !important}.medium-offset-2{margin-left:16.6666666667% !important}.medium-offset-3{margin-left:25% !important}.medium-offset-4{margin-left:33.3333333333% !important}.medium-offset-5{margin-left:41.6666666667% !important}.medium-offset-6{margin-left:50% !important}.medium-offset-7{margin-left:58.3333333333% !important}.medium-offset-8{margin-left:66.6666666667% !important}.medium-offset-9{margin-left:75% !important}.medium-offset-10{margin-left:83.3333333333% !important}.medium-offset-11{margin-left:91.6666666667% !important}.medium-reset-order{float:left;left:auto;margin-left:0;margin-right:0;right:auto}.column.medium-centered,.columns.medium-centered{margin-left:auto;margin-right:auto;float:none}.column.medium-uncentered,.columns.medium-uncentered{float:left;margin-left:0;margin-right:0}.column.medium-centered:last-child,.columns.medium-centered:last-child{float:none}.column.medium-uncentered:last-child,.columns.medium-uncentered:last-child{float:left}.column.medium-uncentered.opposite,.columns.medium-uncentered.opposite{float:right}.row.medium-collapse>.column,.row.medium-collapse>.columns{padding-left:0;padding-right:0}.row.medium-collapse .row{margin-left:0;margin-right:0}.row.medium-uncollapse>.column,.row.medium-uncollapse>.columns{padding-left:0.9375rem;padding-right:0.9375rem;float:left}.push-0{position:relative;left:0;right:auto}.pull-0{position:relative;right:0;left:auto}.push-1{position:relative;left:8.3333333333%;right:auto}.pull-1{position:relative;right:8.3333333333%;left:auto}.push-2{position:relative;left:16.6666666667%;right:auto}.pull-2{position:relative;right:16.6666666667%;left:auto}.push-3{position:relative;left:25%;right:auto}.pull-3{position:relative;right:25%;left:auto}.push-4{position:relative;left:33.3333333333%;right:auto}.pull-4{position:relative;right:33.3333333333%;left:auto}.push-5{position:relative;left:41.6666666667%;right:auto}.pull-5{position:relative;right:41.6666666667%;left:auto}.push-6{position:relative;left:50%;right:auto}.pull-6{position:relative;right:50%;left:auto}.push-7{position:relative;left:58.3333333333%;right:auto}.pull-7{position:relative;right:58.3333333333%;left:auto}.push-8{position:relative;left:66.6666666667%;right:auto}.pull-8{position:relative;right:66.6666666667%;left:auto}.push-9{position:relative;left:75%;right:auto}.pull-9{position:relative;right:75%;left:auto}.push-10{position:relative;left:83.3333333333%;right:auto}.pull-10{position:relative;right:83.3333333333%;left:auto}.push-11{position:relative;left:91.6666666667%;right:auto}.pull-11{position:relative;right:91.6666666667%;left:auto}}@media only screen and (min-width:64.063em){.large-push-0{position:relative;left:0;right:auto}.large-pull-0{position:relative;right:0;left:auto}.large-push-1{position:relative;left:8.3333333333%;right:auto}.large-pull-1{position:relative;right:8.3333333333%;left:auto}.large-push-2{position:relative;left:16.6666666667%;right:auto}.large-pull-2{position:relative;right:16.6666666667%;left:auto}.large-push-3{position:relative;left:25%;right:auto}.large-pull-3{position:relative;right:25%;left:auto}.large-push-4{position:relative;left:33.3333333333%;right:auto}.large-pull-4{position:relative;right:33.3333333333%;left:auto}.large-push-5{position:relative;left:41.6666666667%;right:auto}.large-pull-5{position:relative;right:41.6666666667%;left:auto}.large-push-6{position:relative;left:50%;right:auto}.large-pull-6{position:relative;right:50%;left:auto}.large-push-7{position:relative;left:58.3333333333%;right:auto}.large-pull-7{position:relative;right:58.3333333333%;left:auto}.large-push-8{position:relative;left:66.6666666667%;right:auto}.large-pull-8{position:relative;right:66.6666666667%;left:auto}.large-push-9{position:relative;left:75%;right:auto}.large-pull-9{position:relative;right:75%;left:auto}.large-push-10{position:relative;left:83.3333333333%;right:auto}.large-pull-10{position:relative;right:83.3333333333%;left:auto}.large-push-11{position:relative;left:91.6666666667%;right:auto}.large-pull-11{position:relative;right:91.6666666667%;left:auto}.column,.columns{position:relative;padding-left:0.9375rem;padding-right:0.9375rem;float:left}.large-1{width:8.3333333333%}.large-2{width:16.6666666667%}.large-3{width:25%}.large-4{width:33.3333333333%}.large-5{width:41.6666666667%}.large-6{width:50%}.large-7{width:58.3333333333%}.large-8{width:66.6666666667%}.large-9{width:75%}.large-10{width:83.3333333333%}.large-11{width:91.6666666667%}.large-12{width:100%}.large-offset-0{margin-left:0 !important}.large-offset-1{margin-left:8.3333333333% !important}.large-offset-2{margin-left:16.6666666667% !important}.large-offset-3{margin-left:25% !important}.large-offset-4{margin-left:33.3333333333% !important}.large-offset-5{margin-left:41.6666666667% !important}.large-offset-6{margin-left:50% !important}.large-offset-7{margin-left:58.3333333333% !important}.large-offset-8{margin-left:66.6666666667% !important}.large-offset-9{margin-left:75% !important}.large-offset-10{margin-left:83.3333333333% !important}.large-offset-11{margin-left:91.6666666667% !important}.large-reset-order{float:left;left:auto;margin-left:0;margin-right:0;right:auto}.column.large-centered,.columns.large-centered{margin-left:auto;margin-right:auto;float:none}.column.large-uncentered,.columns.large-uncentered{float:left;margin-left:0;margin-right:0}.column.large-centered:last-child,.columns.large-centered:last-child{float:none}.column.large-uncentered:last-child,.columns.large-uncentered:last-child{float:left}.column.large-uncentered.opposite,.columns.large-uncentered.opposite{float:right}.row.large-collapse>.column,.row.large-collapse>.columns{padding-left:0;padding-right:0}.row.large-collapse .row{margin-left:0;margin-right:0}.row.large-uncollapse>.column,.row.large-uncollapse>.columns{padding-left:0.9375rem;padding-right:0.9375rem;float:left}.push-0{position:relative;left:0;right:auto}.pull-0{position:relative;right:0;left:auto}.push-1{position:relative;left:8.3333333333%;right:auto}.pull-1{position:relative;right:8.3333333333%;left:auto}.push-2{position:relative;left:16.6666666667%;right:auto}.pull-2{position:relative;right:16.6666666667%;left:auto}.push-3{position:relative;left:25%;right:auto}.pull-3{position:relative;right:25%;left:auto}.push-4{position:relative;left:33.3333333333%;right:auto}.pull-4{position:relative;right:33.3333333333%;left:auto}.push-5{position:relative;left:41.6666666667%;right:auto}.pull-5{position:relative;right:41.6666666667%;left:auto}.push-6{position:relative;left:50%;right:auto}.pull-6{position:relative;right:50%;left:auto}.push-7{position:relative;left:58.3333333333%;right:auto}.pull-7{position:relative;right:58.3333333333%;left:auto}.push-8{position:relative;left:66.6666666667%;right:auto}.pull-8{position:relative;right:66.6666666667%;left:auto}.push-9{position:relative;left:75%;right:auto}.pull-9{position:relative;right:75%;left:auto}.push-10{position:relative;left:83.3333333333%;right:auto}.pull-10{position:relative;right:83.3333333333%;left:auto}.push-11{position:relative;left:91.6666666667%;right:auto}.pull-11{position:relative;right:91.6666666667%;left:auto}}.accordion{margin-bottom:0;margin-left:0}.accordion:before,.accordion:after{content:" ";display:table}.accordion:after{clear:both}.accordion .accordion-navigation,.accordion dd{display:block;margin-bottom:0 !important}.accordion .accordion-navigation.active>a,.accordion dd.active>a{background:#e8e8e8;color:#222222}.accordion .accordion-navigation>a,.accordion dd>a{background:#EFEFEF;color:#222222;display:block;font-family:"Open Sans",sans-serif;font-size:1rem;padding:1rem}.accordion .accordion-navigation>a:hover,.accordion dd>a:hover{background:#e3e3e3}.accordion .accordion-navigation>.content,.accordion dd>.content{display:none;padding:0.9375rem}.accordion .accordion-navigation>.content.active,.accordion dd>.content.active{background:#FFFFFF;display:block}.alert-box{border-style:solid;border-width:1px;display:block;font-size:0.8125rem;font-weight:normal;margin-bottom:1.25rem;padding:0.875rem 1.5rem 0.875rem 0.875rem;position:relative;transition:opacity 300ms ease-out;background-color:#486b71;border-color:#3e5c61;color:#FFFFFF}.alert-box .close{right:0.25rem;background:inherit;color:#333333;font-size:1.375rem;line-height:.9;margin-top:-0.6875rem;opacity:0.3;padding:0 6px 4px;position:absolute;top:50%}.alert-box .close:hover,.alert-box .close:focus{opacity:0.5}.alert-box.radius{border-radius:3px}.alert-box.round{border-radius:1000px}.alert-box.success{background-color:#43AC6A;border-color:#3a945b;color:#FFFFFF}.alert-box.alert{background-color:#f04124;border-color:#de2d0f;color:#FFFFFF}.alert-box.secondary{background-color:#e7e7e7;border-color:#c7c7c7;color:#4f4f4f}.alert-box.warning{background-color:#f08a24;border-color:#de770f;color:#FFFFFF}.alert-box.info{background-color:#a0d3e8;border-color:#74bfdd;color:#4f4f4f}.alert-box.alert-close{opacity:0}[class*="block-grid-"]{display:block;padding:0;margin:0 -0.625rem}[class*="block-grid-"]:before,[class*="block-grid-"]:after{content:" ";display:table}[class*="block-grid-"]:after{clear:both}[class*="block-grid-"]>li{display:block;float:left;height:auto;padding:0 0.625rem 1.25rem}@media only screen{.small-block-grid-1>li{list-style:none;width:100%}.small-block-grid-1>li:nth-of-type(1n){clear:none}.small-block-grid-1>li:nth-of-type(1n+1){clear:both}.small-block-grid-2>li{list-style:none;width:50%}.small-block-grid-2>li:nth-of-type(1n){clear:none}.small-block-grid-2>li:nth-of-type(2n+1){clear:both}.small-block-grid-3>li{list-style:none;width:33.3333333333%}.small-block-grid-3>li:nth-of-type(1n){clear:none}.small-block-grid-3>li:nth-of-type(3n+1){clear:both}.small-block-grid-4>li{list-style:none;width:25%}.small-block-grid-4>li:nth-of-type(1n){clear:none}.small-block-grid-4>li:nth-of-type(4n+1){clear:both}.small-block-grid-5>li{list-style:none;width:20%}.small-block-grid-5>li:nth-of-type(1n){clear:none}.small-block-grid-5>li:nth-of-type(5n+1){clear:both}.small-block-grid-6>li{list-style:none;width:16.6666666667%}.small-block-grid-6>li:nth-of-type(1n){clear:none}.small-block-grid-6>li:nth-of-type(6n+1){clear:both}.small-block-grid-7>li{list-style:none;width:14.2857142857%}.small-block-grid-7>li:nth-of-type(1n){clear:none}.small-block-grid-7>li:nth-of-type(7n+1){clear:both}.small-block-grid-8>li{list-style:none;width:12.5%}.small-block-grid-8>li:nth-of-type(1n){clear:none}.small-block-grid-8>li:nth-of-type(8n+1){clear:both}.small-block-grid-9>li{list-style:none;width:11.1111111111%}.small-block-grid-9>li:nth-of-type(1n){clear:none}.small-block-grid-9>li:nth-of-type(9n+1){clear:both}.small-block-grid-10>li{list-style:none;width:10%}.small-block-grid-10>li:nth-of-type(1n){clear:none}.small-block-grid-10>li:nth-of-type(10n+1){clear:both}.small-block-grid-11>li{list-style:none;width:9.0909090909%}.small-block-grid-11>li:nth-of-type(1n){clear:none}.small-block-grid-11>li:nth-of-type(11n+1){clear:both}.small-block-grid-12>li{list-style:none;width:8.3333333333%}.small-block-grid-12>li:nth-of-type(1n){clear:none}.small-block-grid-12>li:nth-of-type(12n+1){clear:both}}@media only screen and (min-width:40.063em){.medium-block-grid-1>li{list-style:none;width:100%}.medium-block-grid-1>li:nth-of-type(1n){clear:none}.medium-block-grid-1>li:nth-of-type(1n+1){clear:both}.medium-block-grid-2>li{list-style:none;width:50%}.medium-block-grid-2>li:nth-of-type(1n){clear:none}.medium-block-grid-2>li:nth-of-type(2n+1){clear:both}.medium-block-grid-3>li{list-style:none;width:33.3333333333%}.medium-block-grid-3>li:nth-of-type(1n){clear:none}.medium-block-grid-3>li:nth-of-type(3n+1){clear:both}.medium-block-grid-4>li{list-style:none;width:25%}.medium-block-grid-4>li:nth-of-type(1n){clear:none}.medium-block-grid-4>li:nth-of-type(4n+1){clear:both}.medium-block-grid-5>li{list-style:none;width:20%}.medium-block-grid-5>li:nth-of-type(1n){clear:none}.medium-block-grid-5>li:nth-of-type(5n+1){clear:both}.medium-block-grid-6>li{list-style:none;width:16.6666666667%}.medium-block-grid-6>li:nth-of-type(1n){clear:none}.medium-block-grid-6>li:nth-of-type(6n+1){clear:both}.medium-block-grid-7>li{list-style:none;width:14.2857142857%}.medium-block-grid-7>li:nth-of-type(1n){clear:none}.medium-block-grid-7>li:nth-of-type(7n+1){clear:both}.medium-block-grid-8>li{list-style:none;width:12.5%}.medium-block-grid-8>li:nth-of-type(1n){clear:none}.medium-block-grid-8>li:nth-of-type(8n+1){clear:both}.medium-block-grid-9>li{list-style:none;width:11.1111111111%}.medium-block-grid-9>li:nth-of-type(1n){clear:none}.medium-block-grid-9>li:nth-of-type(9n+1){clear:both}.medium-block-grid-10>li{list-style:none;width:10%}.medium-block-grid-10>li:nth-of-type(1n){clear:none}.medium-block-grid-10>li:nth-of-type(10n+1){clear:both}.medium-block-grid-11>li{list-style:none;width:9.0909090909%}.medium-block-grid-11>li:nth-of-type(1n){clear:none}.medium-block-grid-11>li:nth-of-type(11n+1){clear:both}.medium-block-grid-12>li{list-style:none;width:8.3333333333%}.medium-block-grid-12>li:nth-of-type(1n){clear:none}.medium-block-grid-12>li:nth-of-type(12n+1){clear:both}}@media only screen and (min-width:64.063em){.large-block-grid-1>li{list-style:none;width:100%}.large-block-grid-1>li:nth-of-type(1n){clear:none}.large-block-grid-1>li:nth-of-type(1n+1){clear:both}.large-block-grid-2>li{list-style:none;width:50%}.large-block-grid-2>li:nth-of-type(1n){clear:none}.large-block-grid-2>li:nth-of-type(2n+1){clear:both}.large-block-grid-3>li{list-style:none;width:33.3333333333%}.large-block-grid-3>li:nth-of-type(1n){clear:none}.large-block-grid-3>li:nth-of-type(3n+1){clear:both}.large-block-grid-4>li{list-style:none;width:25%}.large-block-grid-4>li:nth-of-type(1n){clear:none}.large-block-grid-4>li:nth-of-type(4n+1){clear:both}.large-block-grid-5>li{list-style:none;width:20%}.large-block-grid-5>li:nth-of-type(1n){clear:none}.large-block-grid-5>li:nth-of-type(5n+1){clear:both}.large-block-grid-6>li{list-style:none;width:16.6666666667%}.large-block-grid-6>li:nth-of-type(1n){clear:none}.large-block-grid-6>li:nth-of-type(6n+1){clear:both}.large-block-grid-7>li{list-style:none;width:14.2857142857%}.large-block-grid-7>li:nth-of-type(1n){clear:none}.large-block-grid-7>li:nth-of-type(7n+1){clear:both}.large-block-grid-8>li{list-style:none;width:12.5%}.large-block-grid-8>li:nth-of-type(1n){clear:none}.large-block-grid-8>li:nth-of-type(8n+1){clear:both}.large-block-grid-9>li{list-style:none;width:11.1111111111%}.large-block-grid-9>li:nth-of-type(1n){clear:none}.large-block-grid-9>li:nth-of-type(9n+1){clear:both}.large-block-grid-10>li{list-style:none;width:10%}.large-block-grid-10>li:nth-of-type(1n){clear:none}.large-block-grid-10>li:nth-of-type(10n+1){clear:both}.large-block-grid-11>li{list-style:none;width:9.0909090909%}.large-block-grid-11>li:nth-of-type(1n){clear:none}.large-block-grid-11>li:nth-of-type(11n+1){clear:both}.large-block-grid-12>li{list-style:none;width:8.3333333333%}.large-block-grid-12>li:nth-of-type(1n){clear:none}.large-block-grid-12>li:nth-of-type(12n+1){clear:both}}.breadcrumbs{border-style:solid;border-width:1px;display:block;list-style:none;margin-left:0;overflow:hidden;padding:0.5625rem 0.875rem 0.5625rem;background-color:#f4f4f4;border-color:gainsboro;border-radius:3px}.breadcrumbs>*{color:#486b71;float:left;font-size:0.6875rem;line-height:0.6875rem;margin:0;text-transform:uppercase}.breadcrumbs>*:hover a,.breadcrumbs>*:focus a{text-decoration:underline}.breadcrumbs>* a{color:#486b71}.breadcrumbs>*.current{color:#333333;cursor:default}.breadcrumbs>*.current a{color:#333333;cursor:default}.breadcrumbs>*.current:hover,.breadcrumbs>*.current:hover a,.breadcrumbs>*.current:focus,.breadcrumbs>*.current:focus a{text-decoration:none}.breadcrumbs>*.unavailable{color:#999999}.breadcrumbs>*.unavailable a{color:#999999}.breadcrumbs>*.unavailable:hover,.breadcrumbs>*.unavailable:hover a,.breadcrumbs>*.unavailable:focus,.breadcrumbs>*.unavailable a:focus{color:#999999;cursor:false;text-decoration:none}.breadcrumbs>*:before{color:#AAAAAA;content:"/";margin:0 0.75rem;position:relative;top:1px}.breadcrumbs>*:first-child:before{content:" ";margin:0}[aria-label="breadcrumbs"] [aria-hidden="true"]:after{content:"/"}button,.button{-webkit-appearance:none;-moz-appearance:none;border-radius:0;border-style:solid;border-width:0;cursor:pointer;font-family:"Open Sans",sans-serif;font-weight:normal;line-height:normal;margin:0 0 1.25rem;position:relative;text-align:center;text-decoration:none;display:inline-block;padding:1rem 2rem 1.0625rem 2rem;font-size:1rem;background-color:#486b71;border-color:#3a565a;color:#FFFFFF;transition:background-color 300ms ease-out}button:hover,button:focus,.button:hover,.button:focus{background-color:#3a565a}button:hover,button:focus,.button:hover,.button:focus{color:#FFFFFF}button.secondary,.button.secondary{background-color:#e7e7e7;border-color:#b9b9b9;color:#333333}button.secondary:hover,button.secondary:focus,.button.secondary:hover,.button.secondary:focus{background-color:#b9b9b9}button.secondary:hover,button.secondary:focus,.button.secondary:hover,.button.secondary:focus{color:#333333}button.success,.button.success{background-color:#43AC6A;border-color:#368a55;color:#FFFFFF}button.success:hover,button.success:focus,.button.success:hover,.button.success:focus{background-color:#368a55}button.success:hover,button.success:focus,.button.success:hover,.button.success:focus{color:#FFFFFF}button.alert,.button.alert{background-color:#f04124;border-color:#cf2a0e;color:#FFFFFF}button.alert:hover,button.alert:focus,.button.alert:hover,.button.alert:focus{background-color:#cf2a0e}button.alert:hover,button.alert:focus,.button.alert:hover,.button.alert:focus{color:#FFFFFF}button.warning,.button.warning{background-color:#f08a24;border-color:#cf6e0e;color:#FFFFFF}button.warning:hover,button.warning:focus,.button.warning:hover,.button.warning:focus{background-color:#cf6e0e}button.warning:hover,button.warning:focus,.button.warning:hover,.button.warning:focus{color:#FFFFFF}button.info,.button.info{background-color:#a0d3e8;border-color:#61b6d9;color:#333333}button.info:hover,button.info:focus,.button.info:hover,.button.info:focus{background-color:#61b6d9}button.info:hover,button.info:focus,.button.info:hover,.button.info:focus{color:#FFFFFF}button.large,.button.large{padding:1.125rem 2.25rem 1.1875rem 2.25rem;font-size:1.25rem}button.small,.button.small{padding:0.875rem 1.75rem 0.9375rem 1.75rem;font-size:0.8125rem}button.tiny,.button.tiny{padding:0.625rem 1.25rem 0.6875rem 1.25rem;font-size:0.6875rem}button.expand,.button.expand{padding:1rem 2rem 1.0625rem 2rem;font-size:1rem;padding-bottom:1.0625rem;padding-top:1rem;padding-left:1rem;padding-right:1rem;width:100%}button.left-align,.button.left-align{text-align:left;text-indent:0.75rem}button.right-align,.button.right-align{text-align:right;padding-right:0.75rem}button.radius,.button.radius{border-radius:3px}button.round,.button.round{border-radius:1000px}button.disabled,button[disabled],.button.disabled,.button[disabled]{background-color:#486b71;border-color:#3a565a;color:#FFFFFF;box-shadow:none;cursor:default;opacity:0.7}button.disabled:hover,button.disabled:focus,button[disabled]:hover,button[disabled]:focus,.button.disabled:hover,.button.disabled:focus,.button[disabled]:hover,.button[disabled]:focus{background-color:#3a565a}button.disabled:hover,button.disabled:focus,button[disabled]:hover,button[disabled]:focus,.button.disabled:hover,.button.disabled:focus,.button[disabled]:hover,.button[disabled]:focus{color:#FFFFFF}button.disabled:hover,button.disabled:focus,button[disabled]:hover,button[disabled]:focus,.button.disabled:hover,.button.disabled:focus,.button[disabled]:hover,.button[disabled]:focus{background-color:#486b71}button.disabled.secondary,button[disabled].secondary,.button.disabled.secondary,.button[disabled].secondary{background-color:#e7e7e7;border-color:#b9b9b9;color:#333333;box-shadow:none;cursor:default;opacity:0.7}button.disabled.secondary:hover,button.disabled.secondary:focus,button[disabled].secondary:hover,button[disabled].secondary:focus,.button.disabled.secondary:hover,.button.disabled.secondary:focus,.button[disabled].secondary:hover,.button[disabled].secondary:focus{background-color:#b9b9b9}button.disabled.secondary:hover,button.disabled.secondary:focus,button[disabled].secondary:hover,button[disabled].secondary:focus,.button.disabled.secondary:hover,.button.disabled.secondary:focus,.button[disabled].secondary:hover,.button[disabled].secondary:focus{color:#333333}button.disabled.secondary:hover,button.disabled.secondary:focus,button[disabled].secondary:hover,button[disabled].secondary:focus,.button.disabled.secondary:hover,.button.disabled.secondary:focus,.button[disabled].secondary:hover,.button[disabled].secondary:focus{background-color:#e7e7e7}button.disabled.success,button[disabled].success,.button.disabled.success,.button[disabled].success{background-color:#43AC6A;border-color:#368a55;color:#FFFFFF;box-shadow:none;cursor:default;opacity:0.7}button.disabled.success:hover,button.disabled.success:focus,button[disabled].success:hover,button[disabled].success:focus,.button.disabled.success:hover,.button.disabled.success:focus,.button[disabled].success:hover,.button[disabled].success:focus{background-color:#368a55}button.disabled.success:hover,button.disabled.success:focus,button[disabled].success:hover,button[disabled].success:focus,.button.disabled.success:hover,.button.disabled.success:focus,.button[disabled].success:hover,.button[disabled].success:focus{color:#FFFFFF}button.disabled.success:hover,button.disabled.success:focus,button[disabled].success:hover,button[disabled].success:focus,.button.disabled.success:hover,.button.disabled.success:focus,.button[disabled].success:hover,.button[disabled].success:focus{background-color:#43AC6A}button.disabled.alert,button[disabled].alert,.button.disabled.alert,.button[disabled].alert{background-color:#f04124;border-color:#cf2a0e;color:#FFFFFF;box-shadow:none;cursor:default;opacity:0.7}button.disabled.alert:hover,button.disabled.alert:focus,button[disabled].alert:hover,button[disabled].alert:focus,.button.disabled.alert:hover,.button.disabled.alert:focus,.button[disabled].alert:hover,.button[disabled].alert:focus{background-color:#cf2a0e}button.disabled.alert:hover,button.disabled.alert:focus,button[disabled].alert:hover,button[disabled].alert:focus,.button.disabled.alert:hover,.button.disabled.alert:focus,.button[disabled].alert:hover,.button[disabled].alert:focus{color:#FFFFFF}button.disabled.alert:hover,button.disabled.alert:focus,button[disabled].alert:hover,button[disabled].alert:focus,.button.disabled.alert:hover,.button.disabled.alert:focus,.button[disabled].alert:hover,.button[disabled].alert:focus{background-color:#f04124}button.disabled.warning,button[disabled].warning,.button.disabled.warning,.button[disabled].warning{background-color:#f08a24;border-color:#cf6e0e;color:#FFFFFF;box-shadow:none;cursor:default;opacity:0.7}button.disabled.warning:hover,button.disabled.warning:focus,button[disabled].warning:hover,button[disabled].warning:focus,.button.disabled.warning:hover,.button.disabled.warning:focus,.button[disabled].warning:hover,.button[disabled].warning:focus{background-color:#cf6e0e}button.disabled.warning:hover,button.disabled.warning:focus,button[disabled].warning:hover,button[disabled].warning:focus,.button.disabled.warning:hover,.button.disabled.warning:focus,.button[disabled].warning:hover,.button[disabled].warning:focus{color:#FFFFFF}button.disabled.warning:hover,button.disabled.warning:focus,button[disabled].warning:hover,button[disabled].warning:focus,.button.disabled.warning:hover,.button.disabled.warning:focus,.button[disabled].warning:hover,.button[disabled].warning:focus{background-color:#f08a24}button.disabled.info,button[disabled].info,.button.disabled.info,.button[disabled].info{background-color:#a0d3e8;border-color:#61b6d9;color:#333333;box-shadow:none;cursor:default;opacity:0.7}button.disabled.info:hover,button.disabled.info:focus,button[disabled].info:hover,button[disabled].info:focus,.button.disabled.info:hover,.button.disabled.info:focus,.button[disabled].info:hover,.button[disabled].info:focus{background-color:#61b6d9}button.disabled.info:hover,button.disabled.info:focus,button[disabled].info:hover,button[disabled].info:focus,.button.disabled.info:hover,.button.disabled.info:focus,.button[disabled].info:hover,.button[disabled].info:focus{color:#FFFFFF}button.disabled.info:hover,button.disabled.info:focus,button[disabled].info:hover,button[disabled].info:focus,.button.disabled.info:hover,.button.disabled.info:focus,.button[disabled].info:hover,.button[disabled].info:focus{background-color:#a0d3e8}button::-moz-focus-inner{border:0;padding:0}@media only screen and (min-width:40.063em){button,.button{display:inline-block}}.button-group{list-style:none;margin:0;left:0}.button-group:before,.button-group:after{content:" ";display:table}.button-group:after{clear:both}.button-group.even-2 li{display:inline-block;margin:0 -2px;width:50%}.button-group.even-2 li>button,.button-group.even-2 li .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.even-2 li:first-child button,.button-group.even-2 li:first-child .button{border-left:0}.button-group.even-2 li button,.button-group.even-2 li .button{width:100%}.button-group.even-3 li{display:inline-block;margin:0 -2px;width:33.3333333333%}.button-group.even-3 li>button,.button-group.even-3 li .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.even-3 li:first-child button,.button-group.even-3 li:first-child .button{border-left:0}.button-group.even-3 li button,.button-group.even-3 li .button{width:100%}.button-group.even-4 li{display:inline-block;margin:0 -2px;width:25%}.button-group.even-4 li>button,.button-group.even-4 li .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.even-4 li:first-child button,.button-group.even-4 li:first-child .button{border-left:0}.button-group.even-4 li button,.button-group.even-4 li .button{width:100%}.button-group.even-5 li{display:inline-block;margin:0 -2px;width:20%}.button-group.even-5 li>button,.button-group.even-5 li .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.even-5 li:first-child button,.button-group.even-5 li:first-child .button{border-left:0}.button-group.even-5 li button,.button-group.even-5 li .button{width:100%}.button-group.even-6 li{display:inline-block;margin:0 -2px;width:16.6666666667%}.button-group.even-6 li>button,.button-group.even-6 li .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.even-6 li:first-child button,.button-group.even-6 li:first-child .button{border-left:0}.button-group.even-6 li button,.button-group.even-6 li .button{width:100%}.button-group.even-7 li{display:inline-block;margin:0 -2px;width:14.2857142857%}.button-group.even-7 li>button,.button-group.even-7 li .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.even-7 li:first-child button,.button-group.even-7 li:first-child .button{border-left:0}.button-group.even-7 li button,.button-group.even-7 li .button{width:100%}.button-group.even-8 li{display:inline-block;margin:0 -2px;width:12.5%}.button-group.even-8 li>button,.button-group.even-8 li .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.even-8 li:first-child button,.button-group.even-8 li:first-child .button{border-left:0}.button-group.even-8 li button,.button-group.even-8 li .button{width:100%}.button-group>li{display:inline-block;margin:0 -2px}.button-group>li>button,.button-group>li .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group>li:first-child button,.button-group>li:first-child .button{border-left:0}.button-group.stack>li{display:block;margin:0;float:none}.button-group.stack>li>button,.button-group.stack>li .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.stack>li:first-child button,.button-group.stack>li:first-child .button{border-left:0}.button-group.stack>li>button,.button-group.stack>li .button{border-color:rgba(255,255,255,0.5);border-left-width:0;border-top:1px solid;display:block;margin:0}.button-group.stack>li>button{width:100%}.button-group.stack>li:first-child button,.button-group.stack>li:first-child .button{border-top:0}.button-group.stack-for-small>li{display:inline-block;margin:0 -2px}.button-group.stack-for-small>li>button,.button-group.stack-for-small>li .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.stack-for-small>li:first-child button,.button-group.stack-for-small>li:first-child .button{border-left:0}@media only screen and (max-width: 40em){.button-group.stack-for-small>li{display:block;margin:0;width:100%;}.button-group.stack-for-small>li>button,.button-group.stack-for-small>li .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.stack-for-small>li:first-child button,.button-group.stack-for-small>li:first-child .button{border-left:0}.button-group.stack-for-small>li>button,.button-group.stack-for-small>li .button{border-color:rgba(255,255,255,0.5);border-left-width:0;border-top:1px solid;display:block;margin:0}.button-group.stack-for-small>li>button{width:100%}.button-group.stack-for-small>li:first-child button,.button-group.stack-for-small>li:first-child .button{border-top:0}}.button-group.radius>*{display:inline-block;margin:0 -2px}.button-group.radius>*>button,.button-group.radius>* .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.radius>*:first-child button,.button-group.radius>*:first-child .button{border-left:0}.button-group.radius>*,.button-group.radius>*>a,.button-group.radius>*>button,.button-group.radius>*>.button{border-radius:0}.button-group.radius>*:first-child,.button-group.radius>*:first-child>a,.button-group.radius>*:first-child>button,.button-group.radius>*:first-child>.button{-webkit-border-bottom-left-radius:3px;-webkit-border-top-left-radius:3px;border-bottom-left-radius:3px;border-top-left-radius:3px}.button-group.radius>*:last-child,.button-group.radius>*:last-child>a,.button-group.radius>*:last-child>button,.button-group.radius>*:last-child>.button{-webkit-border-bottom-right-radius:3px;-webkit-border-top-right-radius:3px;border-bottom-right-radius:3px;border-top-right-radius:3px}.button-group.radius.stack>*{display:block;margin:0}.button-group.radius.stack>*>button,.button-group.radius.stack>* .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.radius.stack>*:first-child button,.button-group.radius.stack>*:first-child .button{border-left:0}.button-group.radius.stack>*>button,.button-group.radius.stack>* .button{border-color:rgba(255,255,255,0.5);border-left-width:0;border-top:1px solid;display:block;margin:0}.button-group.radius.stack>*>button{width:100%}.button-group.radius.stack>*:first-child button,.button-group.radius.stack>*:first-child .button{border-top:0}.button-group.radius.stack>*,.button-group.radius.stack>*>a,.button-group.radius.stack>*>button,.button-group.radius.stack>*>.button{border-radius:0}.button-group.radius.stack>*:first-child,.button-group.radius.stack>*:first-child>a,.button-group.radius.stack>*:first-child>button,.button-group.radius.stack>*:first-child>.button{-webkit-top-left-radius:3px;-webkit-top-right-radius:3px;border-top-left-radius:3px;border-top-right-radius:3px}.button-group.radius.stack>*:last-child,.button-group.radius.stack>*:last-child>a,.button-group.radius.stack>*:last-child>button,.button-group.radius.stack>*:last-child>.button{-webkit-bottom-left-radius:3px;-webkit-bottom-right-radius:3px;border-bottom-left-radius:3px;border-bottom-right-radius:3px}@media only screen and (min-width:40.063em){.button-group.radius.stack-for-small>*{display:inline-block;margin:0 -2px;}.button-group.radius.stack-for-small>*>button,.button-group.radius.stack-for-small>* .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.radius.stack-for-small>*:first-child button,.button-group.radius.stack-for-small>*:first-child .button{border-left:0}.button-group.radius.stack-for-small>*,.button-group.radius.stack-for-small>*>a,.button-group.radius.stack-for-small>*>button,.button-group.radius.stack-for-small>*>.button{border-radius:0}.button-group.radius.stack-for-small>*:first-child,.button-group.radius.stack-for-small>*:first-child>a,.button-group.radius.stack-for-small>*:first-child>button,.button-group.radius.stack-for-small>*:first-child>.button{-webkit-border-bottom-left-radius:3px;-webkit-border-top-left-radius:3px;border-bottom-left-radius:3px;border-top-left-radius:3px}.button-group.radius.stack-for-small>*:last-child,.button-group.radius.stack-for-small>*:last-child>a,.button-group.radius.stack-for-small>*:last-child>button,.button-group.radius.stack-for-small>*:last-child>.button{-webkit-border-bottom-right-radius:3px;-webkit-border-top-right-radius:3px;border-bottom-right-radius:3px;border-top-right-radius:3px}}@media only screen and (max-width: 40em){.button-group.radius.stack-for-small>*{display:block;margin:0;}.button-group.radius.stack-for-small>*>button,.button-group.radius.stack-for-small>* .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.radius.stack-for-small>*:first-child button,.button-group.radius.stack-for-small>*:first-child .button{border-left:0}.button-group.radius.stack-for-small>*>button,.button-group.radius.stack-for-small>* .button{border-color:rgba(255,255,255,0.5);border-left-width:0;border-top:1px solid;display:block;margin:0}.button-group.radius.stack-for-small>*>button{width:100%}.button-group.radius.stack-for-small>*:first-child button,.button-group.radius.stack-for-small>*:first-child .button{border-top:0}.button-group.radius.stack-for-small>*,.button-group.radius.stack-for-small>*>a,.button-group.radius.stack-for-small>*>button,.button-group.radius.stack-for-small>*>.button{border-radius:0}.button-group.radius.stack-for-small>*:first-child,.button-group.radius.stack-for-small>*:first-child>a,.button-group.radius.stack-for-small>*:first-child>button,.button-group.radius.stack-for-small>*:first-child>.button{-webkit-top-left-radius:3px;-webkit-top-right-radius:3px;border-top-left-radius:3px;border-top-right-radius:3px}.button-group.radius.stack-for-small>*:last-child,.button-group.radius.stack-for-small>*:last-child>a,.button-group.radius.stack-for-small>*:last-child>button,.button-group.radius.stack-for-small>*:last-child>.button{-webkit-bottom-left-radius:3px;-webkit-bottom-right-radius:3px;border-bottom-left-radius:3px;border-bottom-right-radius:3px}}.button-group.round>*{display:inline-block;margin:0 -2px}.button-group.round>*>button,.button-group.round>* .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.round>*:first-child button,.button-group.round>*:first-child .button{border-left:0}.button-group.round>*,.button-group.round>*>a,.button-group.round>*>button,.button-group.round>*>.button{border-radius:0}.button-group.round>*:first-child,.button-group.round>*:first-child>a,.button-group.round>*:first-child>button,.button-group.round>*:first-child>.button{-webkit-border-bottom-left-radius:1000px;-webkit-border-top-left-radius:1000px;border-bottom-left-radius:1000px;border-top-left-radius:1000px}.button-group.round>*:last-child,.button-group.round>*:last-child>a,.button-group.round>*:last-child>button,.button-group.round>*:last-child>.button{-webkit-border-bottom-right-radius:1000px;-webkit-border-top-right-radius:1000px;border-bottom-right-radius:1000px;border-top-right-radius:1000px}.button-group.round.stack>*{display:block;margin:0}.button-group.round.stack>*>button,.button-group.round.stack>* .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.round.stack>*:first-child button,.button-group.round.stack>*:first-child .button{border-left:0}.button-group.round.stack>*>button,.button-group.round.stack>* .button{border-color:rgba(255,255,255,0.5);border-left-width:0;border-top:1px solid;display:block;margin:0}.button-group.round.stack>*>button{width:100%}.button-group.round.stack>*:first-child button,.button-group.round.stack>*:first-child .button{border-top:0}.button-group.round.stack>*,.button-group.round.stack>*>a,.button-group.round.stack>*>button,.button-group.round.stack>*>.button{border-radius:0}.button-group.round.stack>*:first-child,.button-group.round.stack>*:first-child>a,.button-group.round.stack>*:first-child>button,.button-group.round.stack>*:first-child>.button{-webkit-top-left-radius:1rem;-webkit-top-right-radius:1rem;border-top-left-radius:1rem;border-top-right-radius:1rem}.button-group.round.stack>*:last-child,.button-group.round.stack>*:last-child>a,.button-group.round.stack>*:last-child>button,.button-group.round.stack>*:last-child>.button{-webkit-bottom-left-radius:1rem;-webkit-bottom-right-radius:1rem;border-bottom-left-radius:1rem;border-bottom-right-radius:1rem}@media only screen and (min-width:40.063em){.button-group.round.stack-for-small>*{display:inline-block;margin:0 -2px;}.button-group.round.stack-for-small>*>button,.button-group.round.stack-for-small>* .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.round.stack-for-small>*:first-child button,.button-group.round.stack-for-small>*:first-child .button{border-left:0}.button-group.round.stack-for-small>*,.button-group.round.stack-for-small>*>a,.button-group.round.stack-for-small>*>button,.button-group.round.stack-for-small>*>.button{border-radius:0}.button-group.round.stack-for-small>*:first-child,.button-group.round.stack-for-small>*:first-child>a,.button-group.round.stack-for-small>*:first-child>button,.button-group.round.stack-for-small>*:first-child>.button{-webkit-border-bottom-left-radius:1000px;-webkit-border-top-left-radius:1000px;border-bottom-left-radius:1000px;border-top-left-radius:1000px}.button-group.round.stack-for-small>*:last-child,.button-group.round.stack-for-small>*:last-child>a,.button-group.round.stack-for-small>*:last-child>button,.button-group.round.stack-for-small>*:last-child>.button{-webkit-border-bottom-right-radius:1000px;-webkit-border-top-right-radius:1000px;border-bottom-right-radius:1000px;border-top-right-radius:1000px}}@media only screen and (max-width: 40em){.button-group.round.stack-for-small>*{display:block;margin:0;}.button-group.round.stack-for-small>*>button,.button-group.round.stack-for-small>* .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.round.stack-for-small>*:first-child button,.button-group.round.stack-for-small>*:first-child .button{border-left:0}.button-group.round.stack-for-small>*>button,.button-group.round.stack-for-small>* .button{border-color:rgba(255,255,255,0.5);border-left-width:0;border-top:1px solid;display:block;margin:0}.button-group.round.stack-for-small>*>button{width:100%}.button-group.round.stack-for-small>*:first-child button,.button-group.round.stack-for-small>*:first-child .button{border-top:0}.button-group.round.stack-for-small>*,.button-group.round.stack-for-small>*>a,.button-group.round.stack-for-small>*>button,.button-group.round.stack-for-small>*>.button{border-radius:0}.button-group.round.stack-for-small>*:first-child,.button-group.round.stack-for-small>*:first-child>a,.button-group.round.stack-for-small>*:first-child>button,.button-group.round.stack-for-small>*:first-child>.button{-webkit-top-left-radius:1rem;-webkit-top-right-radius:1rem;border-top-left-radius:1rem;border-top-right-radius:1rem}.button-group.round.stack-for-small>*:last-child,.button-group.round.stack-for-small>*:last-child>a,.button-group.round.stack-for-small>*:last-child>button,.button-group.round.stack-for-small>*:last-child>.button{-webkit-bottom-left-radius:1rem;-webkit-bottom-right-radius:1rem;border-bottom-left-radius:1rem;border-bottom-right-radius:1rem}}.button-bar:before,.button-bar:after{content:" ";display:table}.button-bar:after{clear:both}.button-bar .button-group{float:left;margin-right:0.625rem}.button-bar .button-group div{overflow:hidden}.clearing-thumbs,[data-clearing]{list-style:none;margin-left:0;margin-bottom:0}.clearing-thumbs:before,.clearing-thumbs:after,[data-clearing]:before,[data-clearing]:after{content:" ";display:table}.clearing-thumbs:after,[data-clearing]:after{clear:both}.clearing-thumbs li,[data-clearing] li{float:left;margin-right:10px}.clearing-thumbs[class*="block-grid-"] li,[data-clearing][class*="block-grid-"] li{margin-right:0}.clearing-blackout{background:#333333;height:100%;position:fixed;top:0;width:100%;z-index:998;left:0}.clearing-blackout .clearing-close{display:block}.clearing-container{height:100%;margin:0;overflow:hidden;position:relative;z-index:998}.clearing-touch-label{color:#AAAAAA;font-size:.6em;left:50%;position:absolute;top:50%}.visible-img{height:95%;position:relative}.visible-img img{position:absolute;left:50%;top:50%;-webkit-transform:translateY(-50%) translateX(-50%);-moz-transform:translateY(-50%) translateX(-50%);-ms-transform:translateY(-50%) translateX(-50%);-o-transform:translateY(-50%) translateX(-50%);transform:translateY(-50%) translateX(-50%);max-height:100%;max-width:100%}.clearing-caption{background:#333333;bottom:0;color:#CCCCCC;font-size:0.875em;line-height:1.3;margin-bottom:0;padding:10px 30px 20px;position:absolute;text-align:center;width:100%;left:0}.clearing-close{color:#CCCCCC;display:none;font-size:30px;line-height:1;padding-left:20px;padding-top:10px;z-index:999}.clearing-close:hover,.clearing-close:focus{color:#CCCCCC}.clearing-assembled .clearing-container{height:100%}.clearing-assembled .clearing-container .carousel>ul{display:none}.clearing-feature li{display:none}.clearing-feature li.clearing-featured-img{display:block}@media only screen and (min-width:40.063em){.clearing-main-prev,.clearing-main-next{height:100%;position:absolute;top:0;width:40px}.clearing-main-prev>span,.clearing-main-next>span{border:solid 12px;display:block;height:0;position:absolute;top:50%;width:0}.clearing-main-prev>span:hover,.clearing-main-next>span:hover{opacity:.8}.clearing-main-prev{left:0}.clearing-main-prev>span{left:5px;border-color:transparent;border-right-color:#CCCCCC}.clearing-main-next{right:0}.clearing-main-next>span{border-color:transparent;border-left-color:#CCCCCC}.clearing-main-prev.disabled,.clearing-main-next.disabled{opacity:.3}.clearing-assembled .clearing-container .carousel{background:rgba(51,51,51,0.8);height:120px;margin-top:10px;text-align:center}.clearing-assembled .clearing-container .carousel>ul{display:inline-block;z-index:999;height:100%;position:relative;float:none}.clearing-assembled .clearing-container .carousel>ul li{clear:none;cursor:pointer;display:block;float:left;margin-right:0;min-height:inherit;opacity:.4;overflow:hidden;padding:0;position:relative;width:120px}.clearing-assembled .clearing-container .carousel>ul li.fix-height img{height:100%;max-width:none}.clearing-assembled .clearing-container .carousel>ul li a.th{border:none;box-shadow:none;display:block}.clearing-assembled .clearing-container .carousel>ul li img{cursor:pointer !important;width:100% !important}.clearing-assembled .clearing-container .carousel>ul li.visible{opacity:1}.clearing-assembled .clearing-container .carousel>ul li:hover{opacity:.8}.clearing-assembled .clearing-container .visible-img{background:#333333;height:85%;overflow:hidden}.clearing-close{padding-left:0;padding-top:0;position:absolute;top:10px;right:20px}}.f-dropdown{display:none;left:-9999px;list-style:none;margin-left:0;position:absolute;background:#FFFFFF;border:solid 1px #cccccc;font-size:0.875rem;height:auto;max-height:none;width:100%;z-index:89;margin-top:2px;max-width:200px}.f-dropdown.open{display:block}.f-dropdown>*:first-child{margin-top:0}.f-dropdown>*:last-child{margin-bottom:0}.f-dropdown:before{border:inset 6px;content:"";display:block;height:0;width:0;border-color:transparent transparent #FFFFFF transparent;border-bottom-style:solid;position:absolute;top:-12px;left:10px;z-index:89}.f-dropdown:after{border:inset 7px;content:"";display:block;height:0;width:0;border-color:transparent transparent #cccccc transparent;border-bottom-style:solid;position:absolute;top:-14px;left:9px;z-index:88}.f-dropdown.right:before{left:auto;right:10px}.f-dropdown.right:after{left:auto;right:9px}.f-dropdown.drop-right{display:none;left:-9999px;list-style:none;margin-left:0;position:absolute;background:#FFFFFF;border:solid 1px #cccccc;font-size:0.875rem;height:auto;max-height:none;width:100%;z-index:89;margin-top:0;margin-left:2px;max-width:200px}.f-dropdown.drop-right.open{display:block}.f-dropdown.drop-right>*:first-child{margin-top:0}.f-dropdown.drop-right>*:last-child{margin-bottom:0}.f-dropdown.drop-right:before{border:inset 6px;content:"";display:block;height:0;width:0;border-color:transparent #FFFFFF transparent transparent;border-right-style:solid;position:absolute;top:10px;left:-12px;z-index:89}.f-dropdown.drop-right:after{border:inset 7px;content:"";display:block;height:0;width:0;border-color:transparent #cccccc transparent transparent;border-right-style:solid;position:absolute;top:9px;left:-14px;z-index:88}.f-dropdown.drop-left{display:none;left:-9999px;list-style:none;margin-left:0;position:absolute;background:#FFFFFF;border:solid 1px #cccccc;font-size:0.875rem;height:auto;max-height:none;width:100%;z-index:89;margin-top:0;margin-left:-2px;max-width:200px}.f-dropdown.drop-left.open{display:block}.f-dropdown.drop-left>*:first-child{margin-top:0}.f-dropdown.drop-left>*:last-child{margin-bottom:0}.f-dropdown.drop-left:before{border:inset 6px;content:"";display:block;height:0;width:0;border-color:transparent transparent transparent #FFFFFF;border-left-style:solid;position:absolute;top:10px;right:-12px;left:auto;z-index:89}.f-dropdown.drop-left:after{border:inset 7px;content:"";display:block;height:0;width:0;border-color:transparent transparent transparent #cccccc;border-left-style:solid;position:absolute;top:9px;right:-14px;left:auto;z-index:88}.f-dropdown.drop-top{display:none;left:-9999px;list-style:none;margin-left:0;position:absolute;background:#FFFFFF;border:solid 1px #cccccc;font-size:0.875rem;height:auto;max-height:none;width:100%;z-index:89;margin-left:0;margin-top:-2px;max-width:200px}.f-dropdown.drop-top.open{display:block}.f-dropdown.drop-top>*:first-child{margin-top:0}.f-dropdown.drop-top>*:last-child{margin-bottom:0}.f-dropdown.drop-top:before{border:inset 6px;content:"";display:block;height:0;width:0;border-color:#FFFFFF transparent transparent transparent;border-top-style:solid;bottom:-12px;position:absolute;top:auto;left:10px;right:auto;z-index:89}.f-dropdown.drop-top:after{border:inset 7px;content:"";display:block;height:0;width:0;border-color:#cccccc transparent transparent transparent;border-top-style:solid;bottom:-14px;position:absolute;top:auto;left:9px;right:auto;z-index:88}.f-dropdown li{cursor:pointer;font-size:0.875rem;line-height:1.125rem;margin:0}.f-dropdown li:hover,.f-dropdown li:focus{background:#EEEEEE}.f-dropdown li a{display:block;padding:0.5rem;color:#555555}.f-dropdown.content{display:none;left:-9999px;list-style:none;margin-left:0;position:absolute;background:#FFFFFF;border:solid 1px #cccccc;font-size:0.875rem;height:auto;max-height:none;padding:1rem;width:100%;z-index:89;max-width:200px}.f-dropdown.content.open{display:block}.f-dropdown.content>*:first-child{margin-top:0}.f-dropdown.content>*:last-child{margin-bottom:0}.f-dropdown.radius{border-radius:3px}.f-dropdown.tiny{max-width:200px}.f-dropdown.small{max-width:300px}.f-dropdown.medium{max-width:500px}.f-dropdown.large{max-width:800px}.f-dropdown.mega{width:100% !important;max-width:100% !important}.f-dropdown.mega.open{left:0 !important}.dropdown.button,button.dropdown{position:relative;padding-right:3.5625rem}.dropdown.button::after,button.dropdown::after{border-color:#FFFFFF transparent transparent transparent;border-style:solid;content:"";display:block;height:0;position:absolute;top:50%;width:0}.dropdown.button::after,button.dropdown::after{border-width:0.375rem;right:1.40625rem;margin-top:-0.15625rem}.dropdown.button::after,button.dropdown::after{border-color:#FFFFFF transparent transparent transparent}.dropdown.button.tiny,button.dropdown.tiny{padding-right:2.625rem}.dropdown.button.tiny:after,button.dropdown.tiny:after{border-width:0.375rem;right:1.125rem;margin-top:-0.125rem}.dropdown.button.tiny::after,button.dropdown.tiny::after{border-color:#FFFFFF transparent transparent transparent}.dropdown.button.small,button.dropdown.small{padding-right:3.0625rem}.dropdown.button.small::after,button.dropdown.small::after{border-width:0.4375rem;right:1.3125rem;margin-top:-0.15625rem}.dropdown.button.small::after,button.dropdown.small::after{border-color:#FFFFFF transparent transparent transparent}.dropdown.button.large,button.dropdown.large{padding-right:3.625rem}.dropdown.button.large::after,button.dropdown.large::after{border-width:0.3125rem;right:1.71875rem;margin-top:-0.15625rem}.dropdown.button.large::after,button.dropdown.large::after{border-color:#FFFFFF transparent transparent transparent}.dropdown.button.secondary:after,button.dropdown.secondary:after{border-color:#333333 transparent transparent transparent}.flex-video{height:0;margin-bottom:1rem;overflow:hidden;padding-bottom:67.5%;padding-top:1.5625rem;position:relative}.flex-video.widescreen{padding-bottom:56.34%}.flex-video.vimeo{padding-top:0}.flex-video iframe,.flex-video object,.flex-video embed,.flex-video video{height:100%;position:absolute;top:0;width:100%;left:0}form{margin:0 0 1rem}form .row .row{margin:0 -0.5rem}form .row .row .column,form .row .row .columns{padding:0 0.5rem}form .row .row.collapse{margin:0}form .row .row.collapse .column,form .row .row.collapse .columns{padding:0}form .row .row.collapse input{-webkit-border-bottom-right-radius:0;-webkit-border-top-right-radius:0;border-bottom-right-radius:0;border-top-right-radius:0}form .row input.column,form .row input.columns,form .row textarea.column,form .row textarea.columns{padding-left:0.5rem}label{color:#4d4d4d;cursor:pointer;display:block;font-size:0.875rem;font-weight:normal;line-height:1.5;margin-bottom:0}label.right{float:none !important;text-align:right}label.inline{margin:0 0 1rem 0;padding:0.5625rem 0}label small{text-transform:capitalize;color:#676767}.prefix,.postfix{border-style:solid;border-width:1px;display:block;font-size:0.875rem;height:2.3125rem;line-height:2.3125rem;overflow:visible;padding-bottom:0;padding-top:0;position:relative;text-align:center;width:100%;z-index:2}.postfix.button{border:none;padding-left:0;padding-right:0;padding-bottom:0;padding-top:0;text-align:center}.prefix.button{border:none;padding-left:0;padding-right:0;padding-bottom:0;padding-top:0;text-align:center}.prefix.button.radius{border-radius:0;-webkit-border-bottom-left-radius:3px;-webkit-border-top-left-radius:3px;border-bottom-left-radius:3px;border-top-left-radius:3px}.postfix.button.radius{border-radius:0;-webkit-border-bottom-right-radius:3px;-webkit-border-top-right-radius:3px;border-bottom-right-radius:3px;border-top-right-radius:3px}.prefix.button.round{border-radius:0;-webkit-border-bottom-left-radius:1000px;-webkit-border-top-left-radius:1000px;border-bottom-left-radius:1000px;border-top-left-radius:1000px}.postfix.button.round{border-radius:0;-webkit-border-bottom-right-radius:1000px;-webkit-border-top-right-radius:1000px;border-bottom-right-radius:1000px;border-top-right-radius:1000px}span.prefix,label.prefix{background:#f2f2f2;border-right:none;color:#333333;border-color:#cccccc}span.postfix,label.postfix{background:#f2f2f2;border-left:none;color:#333333;border-color:#cccccc}input:not([type]),input[type="text"],input[type="password"],input[type="date"],input[type="datetime"],input[type="datetime-local"],input[type="month"],input[type="week"],input[type="email"],input[type="number"],input[type="search"],input[type="tel"],input[type="time"],input[type="url"],input[type="color"],textarea{-webkit-appearance:none;-moz-appearance:none;border-radius:0;background-color:#FFFFFF;border-style:solid;border-width:1px;border-color:#cccccc;box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);color:rgba(0,0,0,0.75);display:block;font-family:inherit;font-size:0.875rem;height:2.3125rem;margin:0 0 1rem 0;padding:0.5rem;width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:border-color 0.15s linear,background 0.15s linear;-moz-transition:border-color 0.15s linear,background 0.15s linear;-ms-transition:border-color 0.15s linear,background 0.15s linear;-o-transition:border-color 0.15s linear,background 0.15s linear;transition:border-color 0.15s linear,background 0.15s linear}input:not([type]):focus,input[type="text"]:focus,input[type="password"]:focus,input[type="date"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="month"]:focus,input[type="week"]:focus,input[type="email"]:focus,input[type="number"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="time"]:focus,input[type="url"]:focus,input[type="color"]:focus,textarea:focus{background:#fafafa;border-color:#999999;outline:none}input:not([type]):disabled,input[type="text"]:disabled,input[type="password"]:disabled,input[type="date"]:disabled,input[type="datetime"]:disabled,input[type="datetime-local"]:disabled,input[type="month"]:disabled,input[type="week"]:disabled,input[type="email"]:disabled,input[type="number"]:disabled,input[type="search"]:disabled,input[type="tel"]:disabled,input[type="time"]:disabled,input[type="url"]:disabled,input[type="color"]:disabled,textarea:disabled{background-color:#DDDDDD;cursor:default}input:not([type])[disabled],input:not([type])[readonly],fieldset[disabled] input:not([type]),input[type="text"][disabled],input[type="text"][readonly],fieldset[disabled] input[type="text"],input[type="password"][disabled],input[type="password"][readonly],fieldset[disabled] input[type="password"],input[type="date"][disabled],input[type="date"][readonly],fieldset[disabled] input[type="date"],input[type="datetime"][disabled],input[type="datetime"][readonly],fieldset[disabled] input[type="datetime"],input[type="datetime-local"][disabled],input[type="datetime-local"][readonly],fieldset[disabled] input[type="datetime-local"],input[type="month"][disabled],input[type="month"][readonly],fieldset[disabled] input[type="month"],input[type="week"][disabled],input[type="week"][readonly],fieldset[disabled] input[type="week"],input[type="email"][disabled],input[type="email"][readonly],fieldset[disabled] input[type="email"],input[type="number"][disabled],input[type="number"][readonly],fieldset[disabled] input[type="number"],input[type="search"][disabled],input[type="search"][readonly],fieldset[disabled] input[type="search"],input[type="tel"][disabled],input[type="tel"][readonly],fieldset[disabled] input[type="tel"],input[type="time"][disabled],input[type="time"][readonly],fieldset[disabled] input[type="time"],input[type="url"][disabled],input[type="url"][readonly],fieldset[disabled] input[type="url"],input[type="color"][disabled],input[type="color"][readonly],fieldset[disabled] input[type="color"],textarea[disabled],textarea[readonly],fieldset[disabled] textarea{background-color:#DDDDDD;cursor:default}input:not([type]).radius,input[type="text"].radius,input[type="password"].radius,input[type="date"].radius,input[type="datetime"].radius,input[type="datetime-local"].radius,input[type="month"].radius,input[type="week"].radius,input[type="email"].radius,input[type="number"].radius,input[type="search"].radius,input[type="tel"].radius,input[type="time"].radius,input[type="url"].radius,input[type="color"].radius,textarea.radius{border-radius:3px}form .row .prefix-radius.row.collapse input,form .row .prefix-radius.row.collapse textarea,form .row .prefix-radius.row.collapse select,form .row .prefix-radius.row.collapse button{border-radius:0;-webkit-border-bottom-right-radius:3px;-webkit-border-top-right-radius:3px;border-bottom-right-radius:3px;border-top-right-radius:3px}form .row .prefix-radius.row.collapse .prefix{border-radius:0;-webkit-border-bottom-left-radius:3px;-webkit-border-top-left-radius:3px;border-bottom-left-radius:3px;border-top-left-radius:3px}form .row .postfix-radius.row.collapse input,form .row .postfix-radius.row.collapse textarea,form .row .postfix-radius.row.collapse select,form .row .postfix-radius.row.collapse button{border-radius:0;-webkit-border-bottom-left-radius:3px;-webkit-border-top-left-radius:3px;border-bottom-left-radius:3px;border-top-left-radius:3px}form .row .postfix-radius.row.collapse .postfix{border-radius:0;-webkit-border-bottom-right-radius:3px;-webkit-border-top-right-radius:3px;border-bottom-right-radius:3px;border-top-right-radius:3px}form .row .prefix-round.row.collapse input,form .row .prefix-round.row.collapse textarea,form .row .prefix-round.row.collapse select,form .row .prefix-round.row.collapse button{border-radius:0;-webkit-border-bottom-right-radius:1000px;-webkit-border-top-right-radius:1000px;border-bottom-right-radius:1000px;border-top-right-radius:1000px}form .row .prefix-round.row.collapse .prefix{border-radius:0;-webkit-border-bottom-left-radius:1000px;-webkit-border-top-left-radius:1000px;border-bottom-left-radius:1000px;border-top-left-radius:1000px}form .row .postfix-round.row.collapse input,form .row .postfix-round.row.collapse textarea,form .row .postfix-round.row.collapse select,form .row .postfix-round.row.collapse button{border-radius:0;-webkit-border-bottom-left-radius:1000px;-webkit-border-top-left-radius:1000px;border-bottom-left-radius:1000px;border-top-left-radius:1000px}form .row .postfix-round.row.collapse .postfix{border-radius:0;-webkit-border-bottom-right-radius:1000px;-webkit-border-top-right-radius:1000px;border-bottom-right-radius:1000px;border-top-right-radius:1000px}input[type="submit"]{-webkit-appearance:none;-moz-appearance:none;border-radius:0}textarea[rows]{height:auto}textarea{max-width:100%}::-webkit-input-placeholder{color:#666666}:-moz-placeholder{color:#666666}::-moz-placeholder{color:#666666}:-ms-input-placeholder{color:#666666}select{-webkit-appearance:none !important;-moz-appearance:none !important;background-color:#FAFAFA;border-radius:0;background-image:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgeD0iMTJweCIgeT0iMHB4IiB3aWR0aD0iMjRweCIgaGVpZ2h0PSIzcHgiIHZpZXdCb3g9IjAgMCA2IDMiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDYgMyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PHBvbHlnb24gcG9pbnRzPSI1Ljk5MiwwIDIuOTkyLDMgLTAuMDA4LDAgIi8+PC9zdmc+');background-position:100% center;background-repeat:no-repeat;border-style:solid;border-width:1px;border-color:#cccccc;color:rgba(0,0,0,0.75);font-family:inherit;font-size:0.875rem;line-height:normal;padding:0.5rem;border-radius:0;height:2.3125rem}select::-ms-expand{display:none}select.radius{border-radius:3px}select:focus{background-color:#f3f3f3;border-color:#999999}select:disabled{background-color:#DDDDDD;cursor:default}select[multiple]{height:auto}input[type="file"],input[type="checkbox"],input[type="radio"],select{margin:0 0 1rem 0}input[type="checkbox"]+label,input[type="radio"]+label{display:inline-block;margin-left:0.5rem;margin-right:1rem;margin-bottom:0;vertical-align:baseline}input[type="file"]{width:100%}fieldset{border:1px solid #DDDDDD;margin:1.125rem 0;padding:1.25rem}fieldset legend{font-weight:bold;margin:0;margin-left:-0.1875rem;padding:0 0.1875rem}[data-abide] .error small.error,[data-abide] .error span.error,[data-abide] span.error,[data-abide] small.error{display:block;font-size:0.75rem;font-style:italic;font-weight:normal;margin-bottom:1rem;margin-top:-1px;padding:0.375rem 0.5625rem 0.5625rem;background:#f04124;color:#FFFFFF}[data-abide] span.error,[data-abide] small.error{display:none}span.error,small.error{display:block;font-size:0.75rem;font-style:italic;font-weight:normal;margin-bottom:1rem;margin-top:-1px;padding:0.375rem 0.5625rem 0.5625rem;background:#f04124;color:#FFFFFF}.error input,.error textarea,.error select{margin-bottom:0}.error input[type="checkbox"],.error input[type="radio"]{margin-bottom:1rem}.error label,.error label.error{color:#f04124}.error small.error{display:block;font-size:0.75rem;font-style:italic;font-weight:normal;margin-bottom:1rem;margin-top:-1px;padding:0.375rem 0.5625rem 0.5625rem;background:#f04124;color:#FFFFFF}.error>label>small{background:transparent;color:#676767;display:inline;font-size:60%;font-style:normal;margin:0;padding:0;text-transform:capitalize}.error span.error-message{display:block}input.error,textarea.error,select.error{margin-bottom:0}label.error{color:#f04124}.icon-bar{display:inline-block;font-size:0;width:100%;background:#333333}.icon-bar>*{display:block;float:left;font-size:1rem;margin:0 auto;padding:1.25rem;text-align:center;width:25%}.icon-bar>* i,.icon-bar>* img{display:block;margin:0 auto}.icon-bar>* i+label,.icon-bar>* img+label{margin-top:.0625rem}.icon-bar>* i{font-size:1.875rem;vertical-align:middle}.icon-bar>* img{height:1.875rem;width:1.875rem}.icon-bar.label-right>* i,.icon-bar.label-right>* img{display:inline-block;margin:0 .0625rem 0 0}.icon-bar.label-right>* i+label,.icon-bar.label-right>* img+label{margin-top:0}.icon-bar.label-right>* label{display:inline-block}.icon-bar.vertical.label-right>*{text-align:left}.icon-bar.vertical,.icon-bar.small-vertical{height:100%;width:auto}.icon-bar.vertical .item,.icon-bar.small-vertical .item{float:none;margin:auto;width:auto}@media only screen and (min-width:40.063em){.icon-bar.medium-vertical{height:100%;width:auto;}.icon-bar.medium-vertical .item{float:none;margin:auto;width:auto}}@media only screen and (min-width:64.063em){.icon-bar.large-vertical{height:100%;width:auto;}.icon-bar.large-vertical .item{float:none;margin:auto;width:auto}}.icon-bar>*{font-size:1rem;padding:1.25rem}.icon-bar>* i+label,.icon-bar>* img+label{margin-top:.0625rem;font-size:1rem}.icon-bar>* i{font-size:1.875rem}.icon-bar>* img{height:1.875rem;width:1.875rem}.icon-bar>* label{color:#FFFFFF}.icon-bar>* i{color:#FFFFFF}.icon-bar>a:hover{background:#486b71}.icon-bar>a:hover label{color:#FFFFFF}.icon-bar>a:hover i{color:#FFFFFF}.icon-bar>a.active{background:#486b71}.icon-bar>a.active label{color:#FFFFFF}.icon-bar>a.active i{color:#FFFFFF}.icon-bar .item.disabled{cursor:false;opacity:0.7;pointer-events:none}.icon-bar .item.disabled>*{opacity:0.7;cursor:false}.icon-bar.two-up .item{width:50%}.icon-bar.two-up.vertical .item,.icon-bar.two-up.small-vertical .item{width:auto}@media only screen and (min-width:40.063em){.icon-bar.two-up.medium-vertical .item{width:auto;}}@media only screen and (min-width:64.063em){.icon-bar.two-up.large-vertical .item{width:auto;}}.icon-bar.three-up .item{width:33.3333%}.icon-bar.three-up.vertical .item,.icon-bar.three-up.small-vertical .item{width:auto}@media only screen and (min-width:40.063em){.icon-bar.three-up.medium-vertical .item{width:auto;}}@media only screen and (min-width:64.063em){.icon-bar.three-up.large-vertical .item{width:auto;}}.icon-bar.four-up .item{width:25%}.icon-bar.four-up.vertical .item,.icon-bar.four-up.small-vertical .item{width:auto}@media only screen and (min-width:40.063em){.icon-bar.four-up.medium-vertical .item{width:auto;}}@media only screen and (min-width:64.063em){.icon-bar.four-up.large-vertical .item{width:auto;}}.icon-bar.five-up .item{width:20%}.icon-bar.five-up.vertical .item,.icon-bar.five-up.small-vertical .item{width:auto}@media only screen and (min-width:40.063em){.icon-bar.five-up.medium-vertical .item{width:auto;}}@media only screen and (min-width:64.063em){.icon-bar.five-up.large-vertical .item{width:auto;}}.icon-bar.six-up .item{width:16.66667%}.icon-bar.six-up.vertical .item,.icon-bar.six-up.small-vertical .item{width:auto}@media only screen and (min-width:40.063em){.icon-bar.six-up.medium-vertical .item{width:auto;}}@media only screen and (min-width:64.063em){.icon-bar.six-up.large-vertical .item{width:auto;}}.icon-bar.seven-up .item{width:14.28571%}.icon-bar.seven-up.vertical .item,.icon-bar.seven-up.small-vertical .item{width:auto}@media only screen and (min-width:40.063em){.icon-bar.seven-up.medium-vertical .item{width:auto;}}@media only screen and (min-width:64.063em){.icon-bar.seven-up.large-vertical .item{width:auto;}}.icon-bar.eight-up .item{width:12.5%}.icon-bar.eight-up.vertical .item,.icon-bar.eight-up.small-vertical .item{width:auto}@media only screen and (min-width:40.063em){.icon-bar.eight-up.medium-vertical .item{width:auto;}}@media only screen and (min-width:64.063em){.icon-bar.eight-up.large-vertical .item{width:auto;}}.icon-bar.two-up .item{width:50%}.icon-bar.two-up.vertical .item,.icon-bar.two-up.small-vertical .item{width:auto}@media only screen and (min-width:40.063em){.icon-bar.two-up.medium-vertical .item{width:auto;}}@media only screen and (min-width:64.063em){.icon-bar.two-up.large-vertical .item{width:auto;}}.icon-bar.three-up .item{width:33.3333%}.icon-bar.three-up.vertical .item,.icon-bar.three-up.small-vertical .item{width:auto}@media only screen and (min-width:40.063em){.icon-bar.three-up.medium-vertical .item{width:auto;}}@media only screen and (min-width:64.063em){.icon-bar.three-up.large-vertical .item{width:auto;}}.icon-bar.four-up .item{width:25%}.icon-bar.four-up.vertical .item,.icon-bar.four-up.small-vertical .item{width:auto}@media only screen and (min-width:40.063em){.icon-bar.four-up.medium-vertical .item{width:auto;}}@media only screen and (min-width:64.063em){.icon-bar.four-up.large-vertical .item{width:auto;}}.icon-bar.five-up .item{width:20%}.icon-bar.five-up.vertical .item,.icon-bar.five-up.small-vertical .item{width:auto}@media only screen and (min-width:40.063em){.icon-bar.five-up.medium-vertical .item{width:auto;}}@media only screen and (min-width:64.063em){.icon-bar.five-up.large-vertical .item{width:auto;}}.icon-bar.six-up .item{width:16.66667%}.icon-bar.six-up.vertical .item,.icon-bar.six-up.small-vertical .item{width:auto}@media only screen and (min-width:40.063em){.icon-bar.six-up.medium-vertical .item{width:auto;}}@media only screen and (min-width:64.063em){.icon-bar.six-up.large-vertical .item{width:auto;}}.icon-bar.seven-up .item{width:14.28571%}.icon-bar.seven-up.vertical .item,.icon-bar.seven-up.small-vertical .item{width:auto}@media only screen and (min-width:40.063em){.icon-bar.seven-up.medium-vertical .item{width:auto;}}@media only screen and (min-width:64.063em){.icon-bar.seven-up.large-vertical .item{width:auto;}}.icon-bar.eight-up .item{width:12.5%}.icon-bar.eight-up.vertical .item,.icon-bar.eight-up.small-vertical .item{width:auto}@media only screen and (min-width:40.063em){.icon-bar.eight-up.medium-vertical .item{width:auto;}}@media only screen and (min-width:64.063em){.icon-bar.eight-up.large-vertical .item{width:auto;}}.inline-list{list-style:none;margin-top:0;margin-bottom:1.0625rem;margin-left:-1.375rem;margin-right:0;overflow:hidden;padding:0}.inline-list>li{display:block;float:left;list-style:none;margin-left:1.375rem}.inline-list>li>*{display:block}.joyride-list{display:none}.joyride-tip-guide{background:#333333;color:#FFFFFF;display:none;font-family:inherit;font-weight:normal;position:absolute;top:0;width:95%;z-index:103;left:2.5%}.lt-ie9 .joyride-tip-guide{margin-left:-400px;max-width:800px;left:50%}.joyride-content-wrapper{padding:1.125rem 1.25rem 1.5rem;width:100%}.joyride-content-wrapper .button{margin-bottom:0 !important}.joyride-content-wrapper .joyride-prev-tip{margin-right:10px}.joyride-tip-guide .joyride-nub{border:10px solid #333333;display:block;height:0;position:absolute;width:0;left:22px}.joyride-tip-guide .joyride-nub.top{border-color:#333333;border-top-color:transparent !important;border-top-style:solid;border-left-color:transparent !important;border-right-color:transparent !important;top:-20px}.joyride-tip-guide .joyride-nub.bottom{border-color:#333333 !important;border-bottom-color:transparent !important;border-bottom-style:solid;border-left-color:transparent !important;border-right-color:transparent !important;bottom:-20px}.joyride-tip-guide .joyride-nub.right{right:-20px}.joyride-tip-guide .joyride-nub.left{left:-20px}.joyride-tip-guide h1,.joyride-tip-guide h2,.joyride-tip-guide h3,.joyride-tip-guide h4,.joyride-tip-guide h5,.joyride-tip-guide h6{color:#FFFFFF;font-weight:bold;line-height:1.25;margin:0}.joyride-tip-guide p{font-size:0.875rem;line-height:1.3;margin:0 0 1.125rem 0}.joyride-timer-indicator-wrap{border:solid 1px #555555;bottom:1rem;height:3px;position:absolute;width:50px;right:1.0625rem}.joyride-timer-indicator{background:#666666;display:block;height:inherit;width:0}.joyride-close-tip{color:#777777 !important;font-size:24px;font-weight:normal;line-height:.5 !important;position:absolute;text-decoration:none;top:10px;right:12px}.joyride-close-tip:hover,.joyride-close-tip:focus{color:#EEEEEE !important}.joyride-modal-bg{background:rgba(0,0,0,0.5);cursor:pointer;display:none;height:100%;position:fixed;top:0;width:100%;z-index:100;left:0}.joyride-expose-wrapper{background-color:#FFFFFF;border-radius:3px;box-shadow:0 0 15px #FFFFFF;position:absolute;z-index:102}.joyride-expose-cover{background:transparent;border-radius:3px;left:0;position:absolute;top:0;z-index:9999}@media only screen{.joyride-tip-guide{width:300px;left:inherit}.joyride-tip-guide .joyride-nub.bottom{border-color:#333333 !important;border-bottom-color:transparent !important;border-left-color:transparent !important;border-right-color:transparent !important;bottom:-20px}.joyride-tip-guide .joyride-nub.right{border-color:#333333 !important;border-right-color:transparent !important;border-bottom-color:transparent !important;border-top-color:transparent !important;left:auto;right:-20px;top:22px}.joyride-tip-guide .joyride-nub.left{border-color:#333333 !important;border-bottom-color:transparent !important;border-left-color:transparent !important;border-top-color:transparent !important;left:-20px;right:auto;top:22px}}.keystroke,kbd{background-color:#ededed;border-color:#dddddd;color:#222222;border-style:solid;border-width:1px;font-family:"Consolas","Menlo","Courier",monospace;font-size:inherit;margin:0;padding:0.125rem 0.25rem 0;border-radius:3px}.label{display:inline-block;font-family:"Open Sans",sans-serif;font-weight:normal;line-height:1;margin-bottom:auto;position:relative;text-align:center;text-decoration:none;white-space:nowrap;padding:0.25rem 0.5rem 0.25rem;font-size:0.6875rem;background-color:#486b71;color:#FFFFFF}.label.radius{border-radius:3px}.label.round{border-radius:1000px}.label.alert{background-color:#f04124;color:#FFFFFF}.label.warning{background-color:#f08a24;color:#FFFFFF}.label.success{background-color:#43AC6A;color:#FFFFFF}.label.secondary{background-color:#e7e7e7;color:#333333}.label.info{background-color:#a0d3e8;color:#333333}[data-magellan-expedition],[data-magellan-expedition-clone]{background:#FFFFFF;min-width:100%;padding:10px;z-index:50}[data-magellan-expedition] .sub-nav,[data-magellan-expedition-clone] .sub-nav{margin-bottom:0}[data-magellan-expedition] .sub-nav dd,[data-magellan-expedition-clone] .sub-nav dd{margin-bottom:0}[data-magellan-expedition] .sub-nav a,[data-magellan-expedition-clone] .sub-nav a{line-height:1.8em}@-webkit-keyframes rotate{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes rotate{from{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg)}}.slideshow-wrapper{position:relative}.slideshow-wrapper ul{list-style-type:none;margin:0}.slideshow-wrapper ul li,.slideshow-wrapper ul li .orbit-caption{display:none}.slideshow-wrapper ul li:first-child{display:block}.slideshow-wrapper .orbit-container{background-color:transparent}.slideshow-wrapper .orbit-container li{display:block}.slideshow-wrapper .orbit-container li .orbit-caption{display:block}.slideshow-wrapper .orbit-container .orbit-bullets li{display:inline-block}.slideshow-wrapper .preloader{border-radius:1000px;animation-duration:1.5s;animation-iteration-count:infinite;animation-name:rotate;animation-timing-function:linear;border-color:#555555 #FFFFFF;border:solid 3px;display:block;height:40px;left:50%;margin-left:-20px;margin-top:-20px;position:absolute;top:50%;width:40px}.orbit-container{background:none;overflow:hidden;position:relative;width:100%}.orbit-container .orbit-slides-container{list-style:none;margin:0;padding:0;position:relative;-webkit-transform:translateZ(0);-moz-transform:translateZ(0);-ms-transform:translateZ(0);-o-transform:translateZ(0);transform:translateZ(0)}.orbit-container .orbit-slides-container img{display:block;max-width:100%}.orbit-container .orbit-slides-container>*{position:absolute;top:0;width:100%;margin-left:100%}.orbit-container .orbit-slides-container>*:first-child{margin-left:0}.orbit-container .orbit-slides-container>* .orbit-caption{bottom:0;position:absolute;background-color:rgba(51,51,51,0.8);color:#FFFFFF;font-size:0.875rem;padding:0.625rem 0.875rem;width:100%}.orbit-container .orbit-slide-number{left:10px;background:transparent;color:#FFFFFF;font-size:12px;position:absolute;top:10px;z-index:10}.orbit-container .orbit-slide-number span{font-weight:700;padding:0.3125rem}.orbit-container .orbit-timer{position:absolute;top:12px;right:10px;height:6px;width:100px;z-index:10}.orbit-container .orbit-timer .orbit-progress{height:3px;background-color:rgba(255,255,255,0.3);display:block;width:0;position:relative;right:20px;top:5px}.orbit-container .orbit-timer>span{border:solid 4px #FFFFFF;border-bottom:none;border-top:none;display:none;height:14px;position:absolute;top:0;width:11px;right:0}.orbit-container .orbit-timer.paused>span{top:0;width:11px;height:14px;border:inset 8px;border-left-style:solid;border-color:transparent;border-left-color:#FFFFFF;right:-4px}.orbit-container .orbit-timer.paused>span.dark{border-left-color:#333333}.orbit-container:hover .orbit-timer>span{display:block}.orbit-container .orbit-prev,.orbit-container .orbit-next{background-color:transparent;color:white;height:60px;line-height:50px;margin-top:-25px;position:absolute;text-indent:-9999px !important;top:45%;width:36px;z-index:10}.orbit-container .orbit-prev:hover,.orbit-container .orbit-next:hover{background-color:rgba(0,0,0,0.3)}.orbit-container .orbit-prev>span,.orbit-container .orbit-next>span{border:inset 10px;display:block;height:0;margin-top:-10px;position:absolute;top:50%;width:0}.orbit-container .orbit-prev{left:0}.orbit-container .orbit-prev>span{border-right-style:solid;border-color:transparent;border-right-color:#FFFFFF}.orbit-container .orbit-prev:hover>span{border-right-color:#FFFFFF}.orbit-container .orbit-next{right:0}.orbit-container .orbit-next>span{border-color:transparent;border-left-style:solid;border-left-color:#FFFFFF;left:50%;margin-left:-4px}.orbit-container .orbit-next:hover>span{border-left-color:#FFFFFF}.orbit-bullets-container{text-align:center}.orbit-bullets{display:block;float:none;margin:0 auto 30px auto;overflow:hidden;position:relative;text-align:center;top:10px}.orbit-bullets li{background:#CCCCCC;cursor:pointer;display:inline-block;float:none;height:0.5625rem;margin-right:6px;width:0.5625rem;border-radius:1000px}.orbit-bullets li.active{background:#999999}.orbit-bullets li:last-child{margin-right:0}.touch .orbit-container .orbit-prev,.touch .orbit-container .orbit-next{display:none}.touch .orbit-bullets{display:none}@media only screen and (min-width:40.063em){.touch .orbit-container .orbit-prev,.touch .orbit-container .orbit-next{display:inherit}.touch .orbit-bullets{display:block}}@media only screen and (max-width: 40em){.orbit-stack-on-small .orbit-slides-container{height:auto !important}.orbit-stack-on-small .orbit-slides-container>*{margin:0  !important;opacity:1 !important;position:relative}.orbit-stack-on-small .orbit-slide-number{display:none}.orbit-timer{display:none}.orbit-next,.orbit-prev{display:none}.orbit-bullets{display:none}}ul.pagination{display:block;margin-left:-0.3125rem;min-height:1.5rem}ul.pagination li{color:#222222;font-size:0.875rem;height:1.5rem;margin-left:0.3125rem}ul.pagination li a,ul.pagination li button{border-radius:3px;transition:background-color 300ms ease-out;background:none;color:#999999;display:block;font-size:1em;font-weight:normal;line-height:inherit;padding:0.0625rem 0.625rem 0.0625rem}ul.pagination li:hover a,ul.pagination li a:focus,ul.pagination li:hover button,ul.pagination li button:focus{background:#e6e6e6}ul.pagination li.unavailable a,ul.pagination li.unavailable button{cursor:default;color:#999999;pointer-events:none}ul.pagination li.unavailable:hover a,ul.pagination li.unavailable a:focus,ul.pagination li.unavailable:hover button,ul.pagination li.unavailable button:focus{background:transparent}ul.pagination li.current a,ul.pagination li.current button{background:#486b71;color:#FFFFFF;cursor:default;font-weight:bold}ul.pagination li.current a:hover,ul.pagination li.current a:focus,ul.pagination li.current button:hover,ul.pagination li.current button:focus{background:#486b71}ul.pagination li{display:block;float:left}.pagination-centered{text-align:center}.pagination-centered ul.pagination li{display:inline-block;float:none}.panel{border-style:solid;border-width:1px;border-color:#d8d8d8;margin-bottom:1.25rem;padding:1.25rem;background:#f2f2f2;color:#333333}.panel>:first-child{margin-top:0}.panel>:last-child{margin-bottom:0}.panel h1,.panel h2,.panel h3,.panel h4,.panel h5,.panel h6,.panel p,.panel li,.panel dl{color:#333333}.panel h1,.panel h2,.panel h3,.panel h4,.panel h5,.panel h6{line-height:1;margin-bottom:0.625rem}.panel h1.subheader,.panel h2.subheader,.panel h3.subheader,.panel h4.subheader,.panel h5.subheader,.panel h6.subheader{line-height:1.4}.panel.callout{border-style:solid;border-width:1px;border-color:#d8d8d8;margin-bottom:1.25rem;padding:1.25rem;background:#f3f7f7;color:#333333}.panel.callout>:first-child{margin-top:0}.panel.callout>:last-child{margin-bottom:0}.panel.callout h1,.panel.callout h2,.panel.callout h3,.panel.callout h4,.panel.callout h5,.panel.callout h6,.panel.callout p,.panel.callout li,.panel.callout dl{color:#333333}.panel.callout h1,.panel.callout h2,.panel.callout h3,.panel.callout h4,.panel.callout h5,.panel.callout h6{line-height:1;margin-bottom:0.625rem}.panel.callout h1.subheader,.panel.callout h2.subheader,.panel.callout h3.subheader,.panel.callout h4.subheader,.panel.callout h5.subheader,.panel.callout h6.subheader{line-height:1.4}.panel.callout a:not(.button){color:#486b71}.panel.callout a:not(.button):hover,.panel.callout a:not(.button):focus{color:#3e5c61}.panel.radius{border-radius:3px}.pricing-table{border:solid 1px #DDDDDD;margin-left:0;margin-bottom:1.25rem}.pricing-table *{list-style:none;line-height:1}.pricing-table .title{background-color:#333333;color:#EEEEEE;font-family:"Open Sans",sans-serif;font-size:1rem;font-weight:normal;padding:0.9375rem 1.25rem;text-align:center}.pricing-table .price{background-color:#F6F6F6;color:#333333;font-family:"Open Sans",sans-serif;font-size:2rem;font-weight:normal;padding:0.9375rem 1.25rem;text-align:center}.pricing-table .description{background-color:#FFFFFF;border-bottom:dotted 1px #DDDDDD;color:#777777;font-size:0.75rem;font-weight:normal;line-height:1.4;padding:0.9375rem;text-align:center}.pricing-table .bullet-item{background-color:#FFFFFF;border-bottom:dotted 1px #DDDDDD;color:#333333;font-size:0.875rem;font-weight:normal;padding:0.9375rem;text-align:center}.pricing-table .cta-button{background-color:#FFFFFF;padding:1.25rem 1.25rem 0;text-align:center}.progress{background-color:#F6F6F6;border:1px solid white;height:1.5625rem;margin-bottom:0.625rem;padding:0.125rem}.progress .meter{background:#486b71;display:block;height:100%;float:left;width:0%}.progress .meter.secondary{background:#e7e7e7;display:block;height:100%;float:left;width:0%}.progress .meter.success{background:#43AC6A;display:block;height:100%;float:left;width:0%}.progress .meter.alert{background:#f04124;display:block;height:100%;float:left;width:0%}.progress.secondary .meter{background:#e7e7e7;display:block;height:100%;float:left;width:0%}.progress.success .meter{background:#43AC6A;display:block;height:100%;float:left;width:0%}.progress.alert .meter{background:#f04124;display:block;height:100%;float:left;width:0%}.progress.radius{border-radius:3px}.progress.radius .meter{border-radius:2px}.progress.round{border-radius:1000px}.progress.round .meter{border-radius:999px}.range-slider{border:1px solid #DDDDDD;margin:1.25rem 0;position:relative;-ms-touch-action:none;touch-action:none;display:block;height:1rem;width:100%;background:#FAFAFA}.range-slider.vertical-range{border:1px solid #DDDDDD;margin:1.25rem 0;position:relative;-ms-touch-action:none;touch-action:none;display:inline-block;height:12.5rem;width:1rem}.range-slider.vertical-range .range-slider-handle{bottom:-10.5rem;margin-left:-0.5rem;margin-top:0;position:absolute}.range-slider.vertical-range .range-slider-active-segment{border-bottom-left-radius:inherit;border-bottom-right-radius:inherit;border-top-left-radius:initial;bottom:0;height:auto;width:0.875rem}.range-slider.radius{background:#FAFAFA;border-radius:3px}.range-slider.radius .range-slider-handle{background:#486b71;border-radius:3px}.range-slider.radius .range-slider-handle:hover{background:#3f5e63}.range-slider.round{background:#FAFAFA;border-radius:1000px}.range-slider.round .range-slider-handle{background:#486b71;border-radius:1000px}.range-slider.round .range-slider-handle:hover{background:#3f5e63}.range-slider.disabled,.range-slider[disabled]{background:#FAFAFA;cursor:false;opacity:0.7}.range-slider.disabled .range-slider-handle,.range-slider[disabled] .range-slider-handle{background:#486b71;cursor:default;opacity:0.7}.range-slider.disabled .range-slider-handle:hover,.range-slider[disabled] .range-slider-handle:hover{background:#3f5e63}.range-slider-active-segment{background:#e5e5e5;border-bottom-left-radius:inherit;border-top-left-radius:inherit;display:inline-block;height:0.875rem;position:absolute}.range-slider-handle{border:1px solid none;cursor:pointer;display:inline-block;height:1.375rem;position:absolute;top:-0.3125rem;width:2rem;z-index:1;-ms-touch-action:manipulation;touch-action:manipulation;background:#486b71}.range-slider-handle:hover{background:#3f5e63}.reveal-modal-bg{background:#000000;background:rgba(0,0,0,0.45);bottom:0;display:none;left:0;position:fixed;right:0;top:0;z-index:1004;left:0}.reveal-modal{border-radius:3px;display:none;position:absolute;top:0;visibility:hidden;width:100%;z-index:1005;left:0;background-color:#FFFFFF;padding:1.875rem;border:solid 1px #666666;box-shadow:0 0 10px rgba(0,0,0,0.4)}@media only screen and (max-width: 40em){.reveal-modal{min-height:100vh;}}.reveal-modal .column,.reveal-modal .columns{min-width:0}.reveal-modal>:first-child{margin-top:0}.reveal-modal>:last-child{margin-bottom:0}@media only screen and (min-width:40.063em){.reveal-modal{left:0;margin:0 auto;max-width:62.5rem;right:0;width:80%;}}@media only screen and (min-width:40.063em){.reveal-modal{top:6.25rem;}}.reveal-modal.radius{box-shadow:none;border-radius:3px}.reveal-modal.round{box-shadow:none;border-radius:1000px}.reveal-modal.collapse{padding:0;box-shadow:none}@media only screen and (min-width:40.063em){.reveal-modal.tiny{left:0;margin:0 auto;max-width:62.5rem;right:0;width:30%;}}@media only screen and (min-width:40.063em){.reveal-modal.small{left:0;margin:0 auto;max-width:62.5rem;right:0;width:40%;}}@media only screen and (min-width:40.063em){.reveal-modal.medium{left:0;margin:0 auto;max-width:62.5rem;right:0;width:60%;}}@media only screen and (min-width:40.063em){.reveal-modal.large{left:0;margin:0 auto;max-width:62.5rem;right:0;width:70%;}}@media only screen and (min-width:40.063em){.reveal-modal.xlarge{left:0;margin:0 auto;max-width:62.5rem;right:0;width:95%;}}.reveal-modal.full{height:100vh;height:100%;left:0;margin-left:0 !important;max-width:none !important;min-height:100vh;top:0}@media only screen and (min-width:40.063em){.reveal-modal.full{left:0;margin:0 auto;max-width:62.5rem;right:0;width:100%;}}.reveal-modal.toback{z-index:1003}.reveal-modal .close-reveal-modal{color:#AAAAAA;cursor:pointer;font-size:2.5rem;font-weight:bold;line-height:1;position:absolute;top:0.625rem;right:1.375rem}.side-nav{display:block;font-family:"Open Sans",sans-serif;list-style-position:outside;list-style-type:none;margin:0;padding:0.875rem 0}.side-nav li{font-size:0.875rem;font-weight:normal;margin:0 0 0.4375rem 0}.side-nav li a:not(.button){color:#486b71;display:block;margin:0;padding:0.4375rem 0.875rem}.side-nav li a:not(.button):hover,.side-nav li a:not(.button):focus{background:rgba(0,0,0,0.025);color:#749fa6}.side-nav li a:not(.button):active{color:#749fa6}.side-nav li.active>a:first-child:not(.button){color:#749fa6;font-family:"Open Sans",sans-serif;font-weight:normal}.side-nav li.divider{border-top:1px solid;height:0;list-style:none;padding:0;border-top-color:#e6e6e6}.side-nav li.heading{color:#486b71;font-size:0.875rem;font-weight:bold;text-transform:uppercase}.split.button{position:relative;padding-right:5.0625rem}.split.button span{display:block;height:100%;position:absolute;right:0;top:0;border-left:solid 1px}.split.button span:after{position:absolute;content:"";width:0;height:0;display:block;border-style:inset;top:50%;left:50%}.split.button span:active{background-color:rgba(0,0,0,0.1)}.split.button span{border-left-color:rgba(255,255,255,0.5)}.split.button span{width:3.09375rem}.split.button span:after{border-top-style:solid;border-width:0.375rem;margin-left:-0.375rem;top:48%}.split.button span:after{border-color:#FFFFFF transparent transparent transparent}.split.button.secondary span{border-left-color:rgba(255,255,255,0.5)}.split.button.secondary span:after{border-color:#FFFFFF transparent transparent transparent}.split.button.alert span{border-left-color:rgba(255,255,255,0.5)}.split.button.success span{border-left-color:rgba(255,255,255,0.5)}.split.button.tiny{padding-right:3.75rem}.split.button.tiny span{width:2.25rem}.split.button.tiny span:after{border-top-style:solid;border-width:0.375rem;margin-left:-0.375rem;top:48%}.split.button.small{padding-right:4.375rem}.split.button.small span{width:2.625rem}.split.button.small span:after{border-top-style:solid;border-width:0.4375rem;margin-left:-0.375rem;top:48%}.split.button.large{padding-right:5.5rem}.split.button.large span{width:3.4375rem}.split.button.large span:after{border-top-style:solid;border-width:0.3125rem;margin-left:-0.375rem;top:48%}.split.button.expand{padding-left:2rem}.split.button.secondary span:after{border-color:#333333 transparent transparent transparent}.split.button.radius span{-webkit-border-bottom-right-radius:3px;-webkit-border-top-right-radius:3px;border-bottom-right-radius:3px;border-top-right-radius:3px}.split.button.round span{-webkit-border-bottom-right-radius:1000px;-webkit-border-top-right-radius:1000px;border-bottom-right-radius:1000px;border-top-right-radius:1000px}.split.button.no-pip span:before{border-style:none}.split.button.no-pip span:after{border-style:none}.split.button.no-pip span>i{display:block;left:50%;margin-left:-0.28889em;margin-top:-0.48889em;position:absolute;top:50%}.sub-nav{display:block;margin:-0.25rem 0 1.125rem;overflow:hidden;padding-top:0.25rem;width:auto}.sub-nav dt{text-transform:uppercase}.sub-nav dt,.sub-nav dd,.sub-nav li{color:#999999;float:left;font-family:"Open Sans",sans-serif;font-size:0.875rem;font-weight:normal;margin-left:1rem;margin-bottom:0}.sub-nav dt a,.sub-nav dd a,.sub-nav li a{color:#999999;padding:0.1875rem 1rem;text-decoration:none}.sub-nav dt a:hover,.sub-nav dd a:hover,.sub-nav li a:hover{color:#737373}.sub-nav dt.active a,.sub-nav dd.active a,.sub-nav li.active a{border-radius:3px;background:#486b71;color:#FFFFFF;cursor:default;font-weight:normal;padding:0.1875rem 1rem}.sub-nav dt.active a:hover,.sub-nav dd.active a:hover,.sub-nav li.active a:hover{background:#3e5c61}.switch{border:none;margin-bottom:1.5rem;outline:0;padding:0;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.switch label{background:#DDDDDD;color:transparent;cursor:pointer;display:block;margin-bottom:1rem;position:relative;text-indent:100%;width:4rem;height:2rem;transition:left 0.15s ease-out}.switch input{left:10px;opacity:0;padding:0;position:absolute;top:9px}.switch input+label{margin-left:0;margin-right:0}.switch label:after{background:#FFFFFF;content:"";display:block;height:1.5rem;left:.25rem;position:absolute;top:.25rem;width:1.5rem;-webkit-transition:left 0.15s ease-out;-moz-transition:left 0.15s ease-out;-o-transition:translate3d(0, 0, 0);transition:left 0.15s ease-out;-webkit-transform:translate3d(0, 0, 0);-moz-transform:translate3d(0, 0, 0);-ms-transform:translate3d(0, 0, 0);-o-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0)}.switch input:checked+label{background:#486b71}.switch input:checked+label:after{left:2.25rem}.switch label{height:2rem;width:4rem}.switch label:after{height:1.5rem;width:1.5rem}.switch input:checked+label:after{left:2.25rem}.switch label{color:transparent;background:#DDDDDD}.switch label:after{background:#FFFFFF}.switch input:checked+label{background:#486b71}.switch.large label{height:2.5rem;width:5rem}.switch.large label:after{height:2rem;width:2rem}.switch.large input:checked+label:after{left:2.75rem}.switch.small label{height:1.75rem;width:3.5rem}.switch.small label:after{height:1.25rem;width:1.25rem}.switch.small input:checked+label:after{left:2rem}.switch.tiny label{height:1.5rem;width:3rem}.switch.tiny label:after{height:1rem;width:1rem}.switch.tiny input:checked+label:after{left:1.75rem}.switch.radius label{border-radius:4px}.switch.radius label:after{border-radius:3px}.switch.round{border-radius:1000px}.switch.round label{border-radius:2rem}.switch.round label:after{border-radius:2rem}table{background:#FFFFFF;border:solid 1px #DDDDDD;margin-bottom:1.25rem;table-layout:auto}table caption{background:transparent;color:#222222;font-size:1rem;font-weight:bold}table thead{background:#F5F5F5}table thead tr th,table thead tr td{color:#222222;font-size:0.875rem;font-weight:bold;padding:0.5rem 0.625rem 0.625rem}table tfoot{background:#F5F5F5}table tfoot tr th,table tfoot tr td{color:#222222;font-size:0.875rem;font-weight:bold;padding:0.5rem 0.625rem 0.625rem}table tr th,table tr td{color:#222222;font-size:0.875rem;padding:0.5625rem 0.625rem;text-align:left}table tr.even,table tr.alt,table tr:nth-of-type(even){background:#F9F9F9}table thead tr th,table tfoot tr th,table tfoot tr td,table tbody tr th,table tbody tr td,table tr td{display:table-cell;line-height:1.125rem}.tabs{margin-bottom:0 !important;margin-left:0}.tabs:before,.tabs:after{content:" ";display:table}.tabs:after{clear:both}.tabs dd,.tabs .tab-title{float:left;list-style:none;margin-bottom:0 !important;position:relative}.tabs dd>a,.tabs .tab-title>a{display:block;background-color:#EFEFEF;color:#222222;font-family:"Open Sans",sans-serif;font-size:1rem;padding:1rem 2rem}.tabs dd>a:hover,.tabs .tab-title>a:hover{background-color:#e1e1e1}.tabs dd.active>a,.tabs .tab-title.active>a{background-color:#FFFFFF;color:#222222}.tabs.radius dd:first-child a,.tabs.radius .tab:first-child a{-webkit-border-bottom-left-radius:3px;-webkit-border-top-left-radius:3px;border-bottom-left-radius:3px;border-top-left-radius:3px}.tabs.radius dd:last-child a,.tabs.radius .tab:last-child a{-webkit-border-bottom-right-radius:3px;-webkit-border-top-right-radius:3px;border-bottom-right-radius:3px;border-top-right-radius:3px}.tabs.vertical dd,.tabs.vertical .tab-title{position:inherit;float:none;display:block;top:auto}.tabs-content{margin-bottom:1.5rem;width:100%}.tabs-content:before,.tabs-content:after{content:" ";display:table}.tabs-content:after{clear:both}.tabs-content>.content{display:none;float:left;padding:0.9375rem 0;width:100%}.tabs-content>.content.active{display:block;float:none}.tabs-content>.content.contained{padding:0.9375rem}.tabs-content.vertical{display:block}.tabs-content.vertical>.content{padding:0 0.9375rem}@media only screen and (min-width:40.063em){.tabs.vertical{float:left;margin:0;margin-bottom:1.25rem !important;max-width:20%;width:20%}.tabs-content.vertical{float:left;margin-left:-1px;max-width:80%;padding-left:1rem;width:80%}}.no-js .tabs-content>.content{display:block;float:none}.th{border:solid 4px #FFFFFF;box-shadow:0 0 0 1px rgba(0,0,0,0.2);display:inline-block;line-height:0;max-width:100%;transition:all 200ms ease-out}.th:hover,.th:focus{box-shadow:0 0 6px 1px rgba(72,107,113,0.5)}.th.radius{border-radius:3px}.has-tip{border-bottom:dotted 1px #CCCCCC;color:#333333;cursor:help;font-weight:bold}.has-tip:hover,.has-tip:focus{border-bottom:dotted 1px #203033;color:#486b71}.has-tip.tip-left,.has-tip.tip-right{float:none !important}.tooltip{background:#333333;color:#FFFFFF;display:none;font-size:0.875rem;font-weight:normal;line-height:1.3;max-width:300px;padding:0.75rem;position:absolute;width:100%;z-index:1006;left:50%}.tooltip>.nub{border:solid 5px;border-color:transparent transparent #333333 transparent;display:block;height:0;pointer-events:none;position:absolute;top:-10px;width:0;left:5px}.tooltip>.nub.rtl{left:auto;right:5px}.tooltip.radius{border-radius:3px}.tooltip.round{border-radius:1000px}.tooltip.round>.nub{left:2rem}.tooltip.opened{border-bottom:dotted 1px #203033 !important;color:#486b71 !important}.tap-to-close{color:#777777;display:block;font-size:0.625rem;font-weight:normal}@media only screen{.tooltip>.nub{border-color:transparent transparent #333333 transparent;top:-10px}.tooltip.tip-top>.nub{border-color:#333333 transparent transparent transparent;bottom:-10px;top:auto}.tooltip.tip-left,.tooltip.tip-right{float:none !important}.tooltip.tip-left>.nub{border-color:transparent transparent transparent #333333;left:auto;margin-top:-5px;right:-10px;top:50%}.tooltip.tip-right>.nub{border-color:transparent #333333 transparent transparent;left:-10px;margin-top:-5px;right:auto;top:50%}}meta.foundation-mq-topbar{font-family:"/only screen and (min-width:40.063em)/";width:40.063em}.contain-to-grid{width:100%;background:#333333}.contain-to-grid .top-bar{margin-bottom:0}.fixed{position:fixed;top:0;width:100%;z-index:99;left:0}.fixed.expanded:not(.top-bar){height:auto;max-height:100%;overflow-y:auto;width:100%}.fixed.expanded:not(.top-bar) .title-area{position:fixed;width:100%;z-index:99}.fixed.expanded:not(.top-bar) .top-bar-section{margin-top:2.8125rem;z-index:98}.top-bar{background:#333333;height:2.8125rem;line-height:2.8125rem;margin-bottom:0;overflow:hidden;position:relative}.top-bar ul{list-style:none;margin-bottom:0}.top-bar .row{max-width:none}.top-bar form,.top-bar input,.top-bar select{margin-bottom:0}.top-bar input,.top-bar select{font-size:0.75rem;height:1.75rem;padding-bottom:.35rem;padding-top:.35rem}.top-bar .button,.top-bar button{font-size:0.75rem;margin-bottom:0;padding-bottom:.4125rem;padding-top:.4125rem}@media only screen and (max-width: 40em){.top-bar .button,.top-bar button{position:relative;top:-1px;}}.top-bar .title-area{margin:0;position:relative}.top-bar .name{font-size:16px;height:2.8125rem;margin:0}.top-bar .name h1,.top-bar .name h2,.top-bar .name h3,.top-bar .name h4,.top-bar .name p,.top-bar .name span{font-size:1.0625rem;line-height:2.8125rem;margin:0}.top-bar .name h1 a,.top-bar .name h2 a,.top-bar .name h3 a,.top-bar .name h4 a,.top-bar .name p a,.top-bar .name span a{color:#FFFFFF;display:block;font-weight:normal;padding:0 0.9375rem;width:75%}.top-bar .toggle-topbar{position:absolute;right:0;top:0}.top-bar .toggle-topbar a{color:#FFFFFF;display:block;font-size:0.8125rem;font-weight:bold;height:2.8125rem;line-height:2.8125rem;padding:0 0.9375rem;position:relative;text-transform:uppercase}.top-bar .toggle-topbar.menu-icon{margin-top:-16px;top:50%}.top-bar .toggle-topbar.menu-icon a{color:#FFFFFF;height:34px;line-height:33px;padding:0 2.5rem 0 0.9375rem;position:relative}.top-bar .toggle-topbar.menu-icon a span::after{content:"";display:block;height:0;position:absolute;margin-top:-8px;top:50%;right:0.9375rem;box-shadow:0 0 0 1px #FFFFFF,0 7px 0 1px #FFFFFF,0 14px 0 1px #FFFFFF;width:16px}.top-bar .toggle-topbar.menu-icon a span:hover:after{box-shadow:0 0 0 1px "",0 7px 0 1px "",0 14px 0 1px ""}.top-bar.expanded{background:transparent;height:auto}.top-bar.expanded .title-area{background:#333333}.top-bar.expanded .toggle-topbar a{color:#888888}.top-bar.expanded .toggle-topbar a span::after{box-shadow:0 0 0 1px #888888,0 7px 0 1px #888888,0 14px 0 1px #888888}@media screen and (-webkit-min-device-pixel-ratio: 0){.top-bar.expanded .top-bar-section .has-dropdown.moved>.dropdown,.top-bar.expanded .top-bar-section .dropdown{clip:initial}.top-bar.expanded .top-bar-section .has-dropdown:not(.moved)>ul{padding:0}}.top-bar-section{left:0;position:relative;width:auto;transition:left 300ms ease-out}.top-bar-section ul{display:block;font-size:16px;height:auto;margin:0;padding:0;width:100%}.top-bar-section .divider,.top-bar-section [role="separator"]{border-top:solid 1px #1a1a1a;clear:both;height:1px;width:100%}.top-bar-section ul li{background:#333333}.top-bar-section ul li>a{color:#FFFFFF;display:block;font-family:"Open Sans",sans-serif;font-size:0.8125rem;font-weight:normal;padding-left:0.9375rem;padding:12px 0 12px 0.9375rem;text-transform:none;width:100%}.top-bar-section ul li>a.button{font-size:0.8125rem;padding-left:0.9375rem;padding-right:0.9375rem;background-color:#486b71;border-color:#3a565a;color:#FFFFFF}.top-bar-section ul li>a.button:hover,.top-bar-section ul li>a.button:focus{background-color:#3a565a}.top-bar-section ul li>a.button:hover,.top-bar-section ul li>a.button:focus{color:#FFFFFF}.top-bar-section ul li>a.button.secondary{background-color:#e7e7e7;border-color:#b9b9b9;color:#333333}.top-bar-section ul li>a.button.secondary:hover,.top-bar-section ul li>a.button.secondary:focus{background-color:#b9b9b9}.top-bar-section ul li>a.button.secondary:hover,.top-bar-section ul li>a.button.secondary:focus{color:#333333}.top-bar-section ul li>a.button.success{background-color:#43AC6A;border-color:#368a55;color:#FFFFFF}.top-bar-section ul li>a.button.success:hover,.top-bar-section ul li>a.button.success:focus{background-color:#368a55}.top-bar-section ul li>a.button.success:hover,.top-bar-section ul li>a.button.success:focus{color:#FFFFFF}.top-bar-section ul li>a.button.alert{background-color:#f04124;border-color:#cf2a0e;color:#FFFFFF}.top-bar-section ul li>a.button.alert:hover,.top-bar-section ul li>a.button.alert:focus{background-color:#cf2a0e}.top-bar-section ul li>a.button.alert:hover,.top-bar-section ul li>a.button.alert:focus{color:#FFFFFF}.top-bar-section ul li>a.button.warning{background-color:#f08a24;border-color:#cf6e0e;color:#FFFFFF}.top-bar-section ul li>a.button.warning:hover,.top-bar-section ul li>a.button.warning:focus{background-color:#cf6e0e}.top-bar-section ul li>a.button.warning:hover,.top-bar-section ul li>a.button.warning:focus{color:#FFFFFF}.top-bar-section ul li>a.button.info{background-color:#a0d3e8;border-color:#61b6d9;color:#333333}.top-bar-section ul li>a.button.info:hover,.top-bar-section ul li>a.button.info:focus{background-color:#61b6d9}.top-bar-section ul li>a.button.info:hover,.top-bar-section ul li>a.button.info:focus{color:#FFFFFF}.top-bar-section ul li>button{font-size:0.8125rem;padding-left:0.9375rem;padding-right:0.9375rem;background-color:#486b71;border-color:#3a565a;color:#FFFFFF}.top-bar-section ul li>button:hover,.top-bar-section ul li>button:focus{background-color:#3a565a}.top-bar-section ul li>button:hover,.top-bar-section ul li>button:focus{color:#FFFFFF}.top-bar-section ul li>button.secondary{background-color:#e7e7e7;border-color:#b9b9b9;color:#333333}.top-bar-section ul li>button.secondary:hover,.top-bar-section ul li>button.secondary:focus{background-color:#b9b9b9}.top-bar-section ul li>button.secondary:hover,.top-bar-section ul li>button.secondary:focus{color:#333333}.top-bar-section ul li>button.success{background-color:#43AC6A;border-color:#368a55;color:#FFFFFF}.top-bar-section ul li>button.success:hover,.top-bar-section ul li>button.success:focus{background-color:#368a55}.top-bar-section ul li>button.success:hover,.top-bar-section ul li>button.success:focus{color:#FFFFFF}.top-bar-section ul li>button.alert{background-color:#f04124;border-color:#cf2a0e;color:#FFFFFF}.top-bar-section ul li>button.alert:hover,.top-bar-section ul li>button.alert:focus{background-color:#cf2a0e}.top-bar-section ul li>button.alert:hover,.top-bar-section ul li>button.alert:focus{color:#FFFFFF}.top-bar-section ul li>button.warning{background-color:#f08a24;border-color:#cf6e0e;color:#FFFFFF}.top-bar-section ul li>button.warning:hover,.top-bar-section ul li>button.warning:focus{background-color:#cf6e0e}.top-bar-section ul li>button.warning:hover,.top-bar-section ul li>button.warning:focus{color:#FFFFFF}.top-bar-section ul li>button.info{background-color:#a0d3e8;border-color:#61b6d9;color:#333333}.top-bar-section ul li>button.info:hover,.top-bar-section ul li>button.info:focus{background-color:#61b6d9}.top-bar-section ul li>button.info:hover,.top-bar-section ul li>button.info:focus{color:#FFFFFF}.top-bar-section ul li:hover:not(.has-form)>a{background-color:#555555;color:#FFFFFF;background:#222222}.top-bar-section ul li.active>a{background:#486b71;color:#FFFFFF}.top-bar-section ul li.active>a:hover{background:#3e5c61;color:#FFFFFF}.top-bar-section .has-form{padding:0.9375rem}.top-bar-section .has-dropdown{position:relative}.top-bar-section .has-dropdown>a:after{margin-right:0.9375rem;margin-top:-4.5px;position:absolute;top:50%;right:0}.top-bar-section .has-dropdown.moved{position:static}.top-bar-section .has-dropdown.moved>.dropdown{position:static !important;height:auto;width:auto;overflow:visible;clip:auto;display:block;position:absolute !important;width:100%}.top-bar-section .has-dropdown.moved>a:after{display:none}.top-bar-section .dropdown{clip:rect(1px, 1px, 1px, 1px);height:1px;overflow:hidden;position:absolute !important;width:1px;display:block;padding:0;position:absolute;top:0;z-index:99;left:100%}.top-bar-section .dropdown li{height:auto;width:100%}.top-bar-section .dropdown li a{font-weight:normal;padding:8px 0.9375rem}.top-bar-section .dropdown li a.parent-link{font-weight:normal}.top-bar-section .dropdown li.title h5,.top-bar-section .dropdown li.parent-link{margin-bottom:0;margin-top:0;font-size:1.125rem}.top-bar-section .dropdown li.title h5 a,.top-bar-section .dropdown li.parent-link a{color:#FFFFFF;display:block}.top-bar-section .dropdown li.title h5 a:hover,.top-bar-section .dropdown li.parent-link a:hover{background:none}.top-bar-section .dropdown li.has-form{padding:8px 0.9375rem}.top-bar-section .dropdown li .button,.top-bar-section .dropdown li button{top:auto}.top-bar-section .dropdown label{color:#777777;font-size:0.625rem;font-weight:bold;margin-bottom:0;padding:8px 0.9375rem 2px;text-transform:uppercase}.js-generated{display:block}@media only screen and (min-width:40.063em){.top-bar{background:#333333;overflow:visible}.top-bar:before,.top-bar:after{content:" ";display:table}.top-bar:after{clear:both}.top-bar .toggle-topbar{display:none}.top-bar .title-area{float:left}.top-bar .name h1 a,.top-bar .name h2 a,.top-bar .name h3 a,.top-bar .name h4 a,.top-bar .name h5 a,.top-bar .name h6 a{width:auto}.top-bar input,.top-bar select,.top-bar .button,.top-bar button{font-size:0.875rem;height:1.75rem;position:relative;top:0.53125rem}.top-bar .has-form>.button,.top-bar .has-form>button{font-size:0.875rem;height:1.75rem;position:relative;top:0.53125rem}.top-bar.expanded{background:#333333}.contain-to-grid .top-bar{margin:0 auto;margin-bottom:0;max-width:62.5rem}.top-bar-section{transition:none 0 0;left:0 !important}.top-bar-section ul{display:inline;height:auto !important;width:auto}.top-bar-section ul li{float:left}.top-bar-section ul li .js-generated{display:none}.top-bar-section li.hover>a:not(.button){background-color:#555555;background:#222222;color:#FFFFFF}.top-bar-section li:not(.has-form) a:not(.button){background:#333333;line-height:2.8125rem;padding:0 0.9375rem}.top-bar-section li:not(.has-form) a:not(.button):hover{background-color:#555555;background:#222222}.top-bar-section li.active:not(.has-form) a:not(.button){background:#486b71;color:#FFFFFF;line-height:2.8125rem;padding:0 0.9375rem}.top-bar-section li.active:not(.has-form) a:not(.button):hover{background:#3e5c61;color:#FFFFFF}.top-bar-section .has-dropdown.moved{position:relative}.top-bar-section .has-dropdown.moved>.dropdown{clip:rect(1px, 1px, 1px, 1px);height:1px;overflow:hidden;position:absolute !important;width:1px;display:block}.top-bar-section .has-dropdown.hover>.dropdown,.top-bar-section .has-dropdown.not-click:hover>.dropdown{position:static !important;height:auto;width:auto;overflow:visible;clip:auto;display:block;position:absolute !important}.top-bar-section .has-dropdown>a:focus+.dropdown{position:static !important;height:auto;width:auto;overflow:visible;clip:auto;display:block;position:absolute !important}.top-bar-section .has-dropdown .dropdown li.has-dropdown>a:after{border:none;content:"\00bb";top:0.1875rem;right:5px}.top-bar-section .dropdown{left:0;background:transparent;min-width:100%;top:auto}.top-bar-section .dropdown li a{background:#333333;color:#FFFFFF;line-height:2.8125rem;padding:12px 0.9375rem;white-space:nowrap}.top-bar-section .dropdown li:not(.has-form):not(.active)>a:not(.button){background:#333333;color:#FFFFFF}.top-bar-section .dropdown li:not(.has-form):not(.active):hover>a:not(.button){background-color:#555555;color:#FFFFFF;background:#222222}.top-bar-section .dropdown li label{background:#333333;white-space:nowrap}.top-bar-section .dropdown li .dropdown{left:100%;top:0}.top-bar-section>ul>.divider,.top-bar-section>ul>[role="separator"]{border-right:solid 1px #4e4e4e;border-bottom:none;border-top:none;clear:none;height:2.8125rem;width:0}.top-bar-section .has-form{background:#333333;height:2.8125rem;padding:0 0.9375rem}.top-bar-section .right li .dropdown{left:auto;right:0}.top-bar-section .right li .dropdown li .dropdown{right:100%}.top-bar-section .left li .dropdown{right:auto;left:0}.top-bar-section .left li .dropdown li .dropdown{left:100%}.no-js .top-bar-section ul li:hover>a{background-color:#555555;background:#222222;color:#FFFFFF}.no-js .top-bar-section ul li:active>a{background:#486b71;color:#FFFFFF}.no-js .top-bar-section .has-dropdown:hover>.dropdown{position:static !important;height:auto;width:auto;overflow:visible;clip:auto;display:block;position:absolute !important}.no-js .top-bar-section .has-dropdown>a:focus+.dropdown{position:static !important;height:auto;width:auto;overflow:visible;clip:auto;display:block;position:absolute !important}}.text-left{text-align:left !important}.text-right{text-align:right !important}.text-center{text-align:center !important}.text-justify{text-align:justify !important}@media only screen and (max-width: 40em){.small-only-text-left{text-align:left !important}.small-only-text-right{text-align:right !important}.small-only-text-center{text-align:center !important}.small-only-text-justify{text-align:justify !important}}@media only screen{.small-text-left{text-align:left !important}.small-text-right{text-align:right !important}.small-text-center{text-align:center !important}.small-text-justify{text-align:justify !important}}@media only screen and (min-width:40.063em) and (max-width:64em){.medium-only-text-left{text-align:left !important}.medium-only-text-right{text-align:right !important}.medium-only-text-center{text-align:center !important}.medium-only-text-justify{text-align:justify !important}}@media only screen and (min-width:40.063em){.medium-text-left{text-align:left !important}.medium-text-right{text-align:right !important}.medium-text-center{text-align:center !important}.medium-text-justify{text-align:justify !important}}@media only screen and (min-width:64.063em) and (max-width:90em){.large-only-text-left{text-align:left !important}.large-only-text-right{text-align:right !important}.large-only-text-center{text-align:center !important}.large-only-text-justify{text-align:justify !important}}@media only screen and (min-width:64.063em){.large-text-left{text-align:left !important}.large-text-right{text-align:right !important}.large-text-center{text-align:center !important}.large-text-justify{text-align:justify !important}}@media only screen and (min-width:90.063em) and (max-width:120em){.xlarge-only-text-left{text-align:left !important}.xlarge-only-text-right{text-align:right !important}.xlarge-only-text-center{text-align:center !important}.xlarge-only-text-justify{text-align:justify !important}}@media only screen and (min-width:90.063em){.xlarge-text-left{text-align:left !important}.xlarge-text-right{text-align:right !important}.xlarge-text-center{text-align:center !important}.xlarge-text-justify{text-align:justify !important}}@media only screen and (min-width:120.063em) and (max-width:99999999em){.xxlarge-only-text-left{text-align:left !important}.xxlarge-only-text-right{text-align:right !important}.xxlarge-only-text-center{text-align:center !important}.xxlarge-only-text-justify{text-align:justify !important}}@media only screen and (min-width:120.063em){.xxlarge-text-left{text-align:left !important}.xxlarge-text-right{text-align:right !important}.xxlarge-text-center{text-align:center !important}.xxlarge-text-justify{text-align:justify !important}}div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,p,blockquote,th,td{margin:0;padding:0}a{color:#486b71;line-height:inherit;text-decoration:none}a:hover,a:focus{color:#3e5c61}a img{border:none}p{font-family:inherit;font-size:0.875rem;font-weight:normal;line-height:1.6;margin-bottom:1.25rem;text-rendering:optimizeLegibility}p.lead{font-size:1.09375rem;line-height:1.6}p aside{font-size:0.875rem;font-style:italic;line-height:1.35}h1,h2,h3,h4,h5,h6{color:#222222;font-family:"Open Sans",sans-serif;font-style:normal;font-weight:normal;line-height:1.4;margin-bottom:0.5rem;margin-top:0.2rem;text-rendering:optimizeLegibility}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{color:#6f6f6f;font-size:60%;line-height:0}h1{font-size:1.9375rem}h2{font-size:2.25rem}h3{font-size:1.875rem}h4{font-size:1.5rem}h5{font-size:1.125rem}h6{font-size:1rem}.subheader{line-height:1.4;color:#6f6f6f;font-weight:normal;margin-top:0.2rem;margin-bottom:0.5rem}hr{border:solid #DDDDDD;border-width:1px 0 0;clear:both;height:0;margin:1.25rem 0 1.1875rem}em,i{font-style:italic;line-height:inherit}strong,b{font-weight:bold;line-height:inherit}small{font-size:60%;line-height:inherit}code{background-color:#f8f8f8;border-color:#dfdfdf;border-style:solid;border-width:1px;color:#333333;font-family:Consolas,"Liberation Mono",Courier,monospace;font-weight:normal;padding:0.125rem 0.3125rem 0.0625rem}ul,ol,dl{font-family:inherit;font-size:0.875rem;line-height:1.6;list-style-position:outside;margin-bottom:1.25rem}ul{margin-left:1.1rem}ul li ul,ul li ol{margin-left:1.25rem;margin-bottom:0}ul.square li ul,ul.circle li ul,ul.disc li ul{list-style:inherit}ul.square{list-style-type:square;margin-left:1.1rem}ul.circle{list-style-type:circle;margin-left:1.1rem}ul.disc{list-style-type:disc;margin-left:1.1rem}ol{margin-left:1.4rem}ol li ul,ol li ol{margin-left:1.25rem;margin-bottom:0}.no-bullet{list-style-type:none;margin-left:0}.no-bullet li ul,.no-bullet li ol{margin-left:1.25rem;margin-bottom:0;list-style:none}dl dt{margin-bottom:0.3rem;font-weight:bold}dl dd{margin-bottom:0.75rem}abbr,acronym{text-transform:uppercase;font-size:90%;color:#000000;cursor:help}abbr{text-transform:none}abbr[title]{border-bottom:1px dotted #DDDDDD}blockquote{margin:0 0 1.25rem;padding:0.5625rem 1.25rem 0 1.1875rem;border-left:1px solid #DDDDDD}blockquote cite{display:block;font-size:0.8125rem;color:#555555}blockquote cite:before{content:"\2014 \0020"}blockquote cite a,blockquote cite a:visited{color:#555555}blockquote,blockquote p{line-height:1.6;color:#6f6f6f}.vcard{display:inline-block;margin:0 0 1.25rem 0;border:1px solid #DDDDDD;padding:0.625rem 0.75rem}.vcard li{margin:0;display:block}.vcard .fn{font-weight:bold;font-size:0.9375rem}.vevent .summary{font-weight:bold}.vevent abbr{cursor:default;text-decoration:none;font-weight:bold;border:none;padding:0 0.0625rem}@media only screen and (min-width:40.063em){h1,h2,h3,h4,h5,h6{line-height:1.4}h1{font-size:2.25rem}h2{font-size:2.25rem}h3{font-size:1.875rem}h4{font-size:1.5rem}h5{font-size:1.125rem}h6{font-size:1rem}}@media print{*{background:transparent !important;color:#000000 !important;box-shadow:none !important;text-shadow:none !important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}@page{margin:0.34in;}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}}.off-canvas-wrap{-webkit-backface-visibility:hidden;position:relative;width:100%;overflow:hidden}.off-canvas-wrap.move-right,.off-canvas-wrap.move-left,.off-canvas-wrap.move-bottom,.off-canvas-wrap.move-top{min-height:100%;-webkit-overflow-scrolling:touch}.inner-wrap{position:relative;width:100%;-webkit-transition:-webkit-transform 500ms ease;-moz-transition:-moz-transform 500ms ease;-ms-transition:-ms-transform 500ms ease;-o-transition:-o-transform 500ms ease;transition:transform 500ms ease}.inner-wrap:before,.inner-wrap:after{content:" ";display:table}.inner-wrap:after{clear:both}.tab-bar{-webkit-backface-visibility:hidden;background:#0093d1;color:#FFFFFF;height:2.8125rem;line-height:2.8125rem;position:relative}.tab-bar h1,.tab-bar h2,.tab-bar h3,.tab-bar h4,.tab-bar h5,.tab-bar h6{color:#FFFFFF;font-weight:bold;line-height:2.8125rem;margin:0}.tab-bar h1,.tab-bar h2,.tab-bar h3,.tab-bar h4{font-size:1.125rem}.left-small{height:2.8125rem;position:absolute;top:0;width:2.8125rem;border-right:solid 1px #004a69;left:0}.right-small{height:2.8125rem;position:absolute;top:0;width:2.8125rem;border-left:solid 1px #004a69;right:0}.tab-bar-section{height:2.8125rem;padding:0 0.625rem;position:absolute;text-align:center;top:0}.tab-bar-section.left{text-align:left}.tab-bar-section.right{text-align:right}.tab-bar-section.left{left:0;right:2.8125rem}.tab-bar-section.right{left:2.8125rem;right:0}.tab-bar-section.middle{left:2.8125rem;right:2.8125rem}.tab-bar .menu-icon{color:#FFFFFF;display:block;height:2.8125rem;padding:0;position:relative;text-indent:2.1875rem;transform:translate3d(0, 0, 0);width:2.8125rem}.tab-bar .menu-icon span::after{content:"";display:block;height:0;position:absolute;top:50%;margin-top:-0.5rem;left:0.90625rem;box-shadow:0 0 0 1px #FFFFFF,0 7px 0 1px #FFFFFF,0 14px 0 1px #FFFFFF;width:1rem}.tab-bar .menu-icon span:hover:after{box-shadow:0 0 0 1px #b3b3b3,0 7px 0 1px #b3b3b3,0 14px 0 1px #b3b3b3}.left-off-canvas-menu{-webkit-backface-visibility:hidden;background:#0093d1;bottom:0;box-sizing:content-box;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar;overflow-x:hidden;overflow-y:auto;position:absolute;transition:transform 500ms ease 0s;width:15.625rem;z-index:1001;-webkit-transform:translate3d(-100%, 0, 0);-moz-transform:translate3d(-100%, 0, 0);-ms-transform:translate(-100%, 0);-o-transform:translate3d(-100%, 0, 0);transform:translate3d(-100%, 0, 0);left:0;top:0}.left-off-canvas-menu *{-webkit-backface-visibility:hidden}.right-off-canvas-menu{-webkit-backface-visibility:hidden;background:#0093d1;bottom:0;box-sizing:content-box;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar;overflow-x:hidden;overflow-y:auto;position:absolute;transition:transform 500ms ease 0s;width:15.625rem;z-index:1001;-webkit-transform:translate3d(100%, 0, 0);-moz-transform:translate3d(100%, 0, 0);-ms-transform:translate(100%, 0);-o-transform:translate3d(100%, 0, 0);transform:translate3d(100%, 0, 0);right:0;top:0}.right-off-canvas-menu *{-webkit-backface-visibility:hidden}.top-off-canvas-menu{-webkit-backface-visibility:hidden;background:#0093d1;bottom:0;box-sizing:content-box;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar;overflow-x:hidden;overflow-y:auto;position:absolute;transition:transform 500ms ease 0s;width:15.625rem;z-index:1001;-webkit-transform:translate3d(0, -100%, 0);-moz-transform:translate3d(0, -100%, 0);-ms-transform:translate(0, -100%);-o-transform:translate3d(0, -100%, 0);transform:translate3d(0, -100%, 0);top:0;width:100%;height:18.75rem}.top-off-canvas-menu *{-webkit-backface-visibility:hidden}.bottom-off-canvas-menu{-webkit-backface-visibility:hidden;background:#0093d1;bottom:0;box-sizing:content-box;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar;overflow-x:hidden;overflow-y:auto;position:absolute;transition:transform 500ms ease 0s;width:15.625rem;z-index:1001;-webkit-transform:translate3d(0, 100%, 0);-moz-transform:translate3d(0, 100%, 0);-ms-transform:translate(0, 100%);-o-transform:translate3d(0, 100%, 0);transform:translate3d(0, 100%, 0);bottom:0;width:100%;height:18.75rem}.bottom-off-canvas-menu *{-webkit-backface-visibility:hidden}ul.off-canvas-list{list-style-type:none;margin:0;padding:0}ul.off-canvas-list li label{background:#444444;border-bottom:none;border-top:1px solid #5e5e5e;color:#999999;display:block;font-size:0.75rem;font-weight:bold;margin:0;padding:.3rem 0.9375rem;text-transform:uppercase}ul.off-canvas-list li a{border-bottom:1px solid #006e9d;color:rgba(255,255,255,0.7);display:block;padding:0.6666666667rem;transition:background 300ms ease}ul.off-canvas-list li a:hover{background:#006792}ul.off-canvas-list li a:active{background:#006792}.move-right>.inner-wrap{-webkit-transform:translate3d(15.625rem, 0, 0);-moz-transform:translate3d(15.625rem, 0, 0);-ms-transform:translate(15.625rem, 0);-o-transform:translate3d(15.625rem, 0, 0);transform:translate3d(15.625rem, 0, 0)}.move-right .exit-off-canvas{-webkit-backface-visibility:hidden;box-shadow:-4px 0 4px rgba(0,0,0,0.5),4px 0 4px rgba(0,0,0,0.5);cursor:pointer;transition:background 300ms ease;-webkit-tap-highlight-color:transparent;background:rgba(255,255,255,0.2);bottom:0;display:block;left:0;position:absolute;right:0;top:0;z-index:1002}@media only screen and (min-width:40.063em){.move-right .exit-off-canvas:hover{background:rgba(255,255,255,0.05)}}.move-left>.inner-wrap{-webkit-transform:translate3d(-15.625rem, 0, 0);-moz-transform:translate3d(-15.625rem, 0, 0);-ms-transform:translate(-15.625rem, 0);-o-transform:translate3d(-15.625rem, 0, 0);transform:translate3d(-15.625rem, 0, 0)}.move-left .exit-off-canvas{-webkit-backface-visibility:hidden;box-shadow:-4px 0 4px rgba(0,0,0,0.5),4px 0 4px rgba(0,0,0,0.5);cursor:pointer;transition:background 300ms ease;-webkit-tap-highlight-color:transparent;background:rgba(255,255,255,0.2);bottom:0;display:block;left:0;position:absolute;right:0;top:0;z-index:1002}@media only screen and (min-width:40.063em){.move-left .exit-off-canvas:hover{background:rgba(255,255,255,0.05)}}.move-top>.inner-wrap{-webkit-transform:translate3d(0, -18.75rem, 0);-moz-transform:translate3d(0, -18.75rem, 0);-ms-transform:translate(0, -18.75rem);-o-transform:translate3d(0, -18.75rem, 0);transform:translate3d(0, -18.75rem, 0)}.move-top .exit-off-canvas{-webkit-backface-visibility:hidden;box-shadow:-4px 0 4px rgba(0,0,0,0.5),4px 0 4px rgba(0,0,0,0.5);cursor:pointer;transition:background 300ms ease;-webkit-tap-highlight-color:transparent;background:rgba(255,255,255,0.2);bottom:0;display:block;left:0;position:absolute;right:0;top:0;z-index:1002}@media only screen and (min-width:40.063em){.move-top .exit-off-canvas:hover{background:rgba(255,255,255,0.05)}}.move-bottom>.inner-wrap{-webkit-transform:translate3d(0, 18.75rem, 0);-moz-transform:translate3d(0, 18.75rem, 0);-ms-transform:translate(0, 18.75rem);-o-transform:translate3d(0, 18.75rem, 0);transform:translate3d(0, 18.75rem, 0)}.move-bottom .exit-off-canvas{-webkit-backface-visibility:hidden;box-shadow:-4px 0 4px rgba(0,0,0,0.5),4px 0 4px rgba(0,0,0,0.5);cursor:pointer;transition:background 300ms ease;-webkit-tap-highlight-color:transparent;background:rgba(255,255,255,0.2);bottom:0;display:block;left:0;position:absolute;right:0;top:0;z-index:1002}@media only screen and (min-width:40.063em){.move-bottom .exit-off-canvas:hover{background:rgba(255,255,255,0.05)}}.offcanvas-overlap .left-off-canvas-menu,.offcanvas-overlap .right-off-canvas-menu,.offcanvas-overlap .top-off-canvas-menu,.offcanvas-overlap .bottom-off-canvas-menu{-ms-transform:none;-webkit-transform:none;-moz-transform:none;-o-transform:none;transform:none;z-index:1003}.offcanvas-overlap .exit-off-canvas{-webkit-backface-visibility:hidden;box-shadow:-4px 0 4px rgba(0,0,0,0.5),4px 0 4px rgba(0,0,0,0.5);cursor:pointer;transition:background 300ms ease;-webkit-tap-highlight-color:transparent;background:rgba(255,255,255,0.2);bottom:0;display:block;left:0;position:absolute;right:0;top:0;z-index:1002}@media only screen and (min-width:40.063em){.offcanvas-overlap .exit-off-canvas:hover{background:rgba(255,255,255,0.05)}}.offcanvas-overlap-left .right-off-canvas-menu{-ms-transform:none;-webkit-transform:none;-moz-transform:none;-o-transform:none;transform:none;z-index:1003}.offcanvas-overlap-left .exit-off-canvas{-webkit-backface-visibility:hidden;box-shadow:-4px 0 4px rgba(0,0,0,0.5),4px 0 4px rgba(0,0,0,0.5);cursor:pointer;transition:background 300ms ease;-webkit-tap-highlight-color:transparent;background:rgba(255,255,255,0.2);bottom:0;display:block;left:0;position:absolute;right:0;top:0;z-index:1002}@media only screen and (min-width:40.063em){.offcanvas-overlap-left .exit-off-canvas:hover{background:rgba(255,255,255,0.05)}}.offcanvas-overlap-right .left-off-canvas-menu{-ms-transform:none;-webkit-transform:none;-moz-transform:none;-o-transform:none;transform:none;z-index:1003}.offcanvas-overlap-right .exit-off-canvas{-webkit-backface-visibility:hidden;box-shadow:-4px 0 4px rgba(0,0,0,0.5),4px 0 4px rgba(0,0,0,0.5);cursor:pointer;transition:background 300ms ease;-webkit-tap-highlight-color:transparent;background:rgba(255,255,255,0.2);bottom:0;display:block;left:0;position:absolute;right:0;top:0;z-index:1002}@media only screen and (min-width:40.063em){.offcanvas-overlap-right .exit-off-canvas:hover{background:rgba(255,255,255,0.05)}}.offcanvas-overlap-top .bottom-off-canvas-menu{-ms-transform:none;-webkit-transform:none;-moz-transform:none;-o-transform:none;transform:none;z-index:1003}.offcanvas-overlap-top .exit-off-canvas{-webkit-backface-visibility:hidden;box-shadow:-4px 0 4px rgba(0,0,0,0.5),4px 0 4px rgba(0,0,0,0.5);cursor:pointer;transition:background 300ms ease;-webkit-tap-highlight-color:transparent;background:rgba(255,255,255,0.2);bottom:0;display:block;left:0;position:absolute;right:0;top:0;z-index:1002}@media only screen and (min-width:40.063em){.offcanvas-overlap-top .exit-off-canvas:hover{background:rgba(255,255,255,0.05)}}.offcanvas-overlap-bottom .top-off-canvas-menu{-ms-transform:none;-webkit-transform:none;-moz-transform:none;-o-transform:none;transform:none;z-index:1003}.offcanvas-overlap-bottom .exit-off-canvas{-webkit-backface-visibility:hidden;box-shadow:-4px 0 4px rgba(0,0,0,0.5),4px 0 4px rgba(0,0,0,0.5);cursor:pointer;transition:background 300ms ease;-webkit-tap-highlight-color:transparent;background:rgba(255,255,255,0.2);bottom:0;display:block;left:0;position:absolute;right:0;top:0;z-index:1002}@media only screen and (min-width:40.063em){.offcanvas-overlap-bottom .exit-off-canvas:hover{background:rgba(255,255,255,0.05)}}.no-csstransforms .left-off-canvas-menu{left:-15.625rem}.no-csstransforms .right-off-canvas-menu{right:-15.625rem}.no-csstransforms .top-off-canvas-menu{top:-18.75rem}.no-csstransforms .bottom-off-canvas-menu{bottom:-18.75rem}.no-csstransforms .move-left>.inner-wrap{right:15.625rem}.no-csstransforms .move-right>.inner-wrap{left:15.625rem}.no-csstransforms .move-top>.inner-wrap{right:18.75rem}.no-csstransforms .move-bottom>.inner-wrap{left:18.75rem}.left-submenu{-webkit-backface-visibility:hidden;-webkit-overflow-scrolling:touch;background:#0093d1;bottom:0;box-sizing:content-box;margin:0;overflow-x:hidden;overflow-y:auto;position:absolute;top:0;width:15.625rem;height:18.75rem;z-index:1002;-webkit-transform:translate3d(-100%, 0, 0);-moz-transform:translate3d(-100%, 0, 0);-ms-transform:translate(-100%, 0);-o-transform:translate3d(-100%, 0, 0);transform:translate3d(-100%, 0, 0);left:0;-webkit-transition:-webkit-transform 500ms ease;-moz-transition:-moz-transform 500ms ease;-ms-transition:-ms-transform 500ms ease;-o-transition:-o-transform 500ms ease;transition:transform 500ms ease}.left-submenu *{-webkit-backface-visibility:hidden}.left-submenu .back>a{background:#444;border-bottom:none;border-top:1px solid #5e5e5e;color:#999999;font-weight:bold;padding:.3rem 0.9375rem;text-transform:uppercase;margin:0}.left-submenu .back>a:hover{background:#303030;border-bottom:none;border-top:1px solid #5e5e5e}.left-submenu .back>a:before{content:"\AB";margin-right:.5rem;display:inline}.left-submenu.move-right,.left-submenu.offcanvas-overlap-right,.left-submenu.offcanvas-overlap{-webkit-transform:translate3d(0%, 0, 0);-moz-transform:translate3d(0%, 0, 0);-ms-transform:translate(0%, 0);-o-transform:translate3d(0%, 0, 0);transform:translate3d(0%, 0, 0)}.right-submenu{-webkit-backface-visibility:hidden;-webkit-overflow-scrolling:touch;background:#0093d1;bottom:0;box-sizing:content-box;margin:0;overflow-x:hidden;overflow-y:auto;position:absolute;top:0;width:15.625rem;height:18.75rem;z-index:1002;-webkit-transform:translate3d(100%, 0, 0);-moz-transform:translate3d(100%, 0, 0);-ms-transform:translate(100%, 0);-o-transform:translate3d(100%, 0, 0);transform:translate3d(100%, 0, 0);right:0;-webkit-transition:-webkit-transform 500ms ease;-moz-transition:-moz-transform 500ms ease;-ms-transition:-ms-transform 500ms ease;-o-transition:-o-transform 500ms ease;transition:transform 500ms ease}.right-submenu *{-webkit-backface-visibility:hidden}.right-submenu .back>a{background:#444;border-bottom:none;border-top:1px solid #5e5e5e;color:#999999;font-weight:bold;padding:.3rem 0.9375rem;text-transform:uppercase;margin:0}.right-submenu .back>a:hover{background:#303030;border-bottom:none;border-top:1px solid #5e5e5e}.right-submenu .back>a:after{content:"\BB";margin-left:.5rem;display:inline}.right-submenu.move-left,.right-submenu.offcanvas-overlap-left,.right-submenu.offcanvas-overlap{-webkit-transform:translate3d(0%, 0, 0);-moz-transform:translate3d(0%, 0, 0);-ms-transform:translate(0%, 0);-o-transform:translate3d(0%, 0, 0);transform:translate3d(0%, 0, 0)}.top-submenu{-webkit-backface-visibility:hidden;-webkit-overflow-scrolling:touch;background:#0093d1;bottom:0;box-sizing:content-box;margin:0;overflow-x:hidden;overflow-y:auto;position:absolute;top:0;width:15.625rem;height:18.75rem;z-index:1002;-webkit-transform:translate3d(0, -100%, 0);-moz-transform:translate3d(0, -100%, 0);-ms-transform:translate(0, -100%);-o-transform:translate3d(0, -100%, 0);transform:translate3d(0, -100%, 0);top:0;width:100%;-webkit-transition:-webkit-transform 500ms ease;-moz-transition:-moz-transform 500ms ease;-ms-transition:-ms-transform 500ms ease;-o-transition:-o-transform 500ms ease;transition:transform 500ms ease}.top-submenu *{-webkit-backface-visibility:hidden}.top-submenu .back>a{background:#444;border-bottom:none;border-top:1px solid #5e5e5e;color:#999999;font-weight:bold;padding:.3rem 0.9375rem;text-transform:uppercase;margin:0}.top-submenu .back>a:hover{background:#303030;border-bottom:none;border-top:1px solid #5e5e5e}.top-submenu.move-bottom,.top-submenu.offcanvas-overlap-bottom,.top-submenu.offcanvas-overlap{-webkit-transform:translate3d(0, 0%, 0);-moz-transform:translate3d(0, 0%, 0);-ms-transform:translate(0, 0%);-o-transform:translate3d(0, 0%, 0);transform:translate3d(0, 0%, 0)}.bottom-submenu{-webkit-backface-visibility:hidden;-webkit-overflow-scrolling:touch;background:#0093d1;bottom:0;box-sizing:content-box;margin:0;overflow-x:hidden;overflow-y:auto;position:absolute;top:0;width:15.625rem;height:18.75rem;z-index:1002;-webkit-transform:translate3d(0, 100%, 0);-moz-transform:translate3d(0, 100%, 0);-ms-transform:translate(0, 100%);-o-transform:translate3d(0, 100%, 0);transform:translate3d(0, 100%, 0);bottom:0;width:100%;-webkit-transition:-webkit-transform 500ms ease;-moz-transition:-moz-transform 500ms ease;-ms-transition:-ms-transform 500ms ease;-o-transition:-o-transform 500ms ease;transition:transform 500ms ease}.bottom-submenu *{-webkit-backface-visibility:hidden}.bottom-submenu .back>a{background:#444;border-bottom:none;border-top:1px solid #5e5e5e;color:#999999;font-weight:bold;padding:.3rem 0.9375rem;text-transform:uppercase;margin:0}.bottom-submenu .back>a:hover{background:#303030;border-bottom:none;border-top:1px solid #5e5e5e}.bottom-submenu.move-top,.bottom-submenu.offcanvas-overlap-top,.bottom-submenu.offcanvas-overlap{-webkit-transform:translate3d(0, 0%, 0);-moz-transform:translate3d(0, 0%, 0);-ms-transform:translate(0, 0%);-o-transform:translate3d(0, 0%, 0);transform:translate3d(0, 0%, 0)}.left-off-canvas-menu ul.off-canvas-list li.has-submenu>a:after{content:"\BB";margin-left:.5rem;display:inline}.right-off-canvas-menu ul.off-canvas-list li.has-submenu>a:before{content:"\AB";margin-right:.5rem;display:inline}@media only screen{.show-for-small-only,.show-for-small-up,.show-for-small,.show-for-small-down,.hide-for-medium-only,.hide-for-medium-up,.hide-for-medium,.show-for-medium-down,.hide-for-large-only,.hide-for-large-up,.hide-for-large,.show-for-large-down,.hide-for-xlarge-only,.hide-for-xlarge-up,.hide-for-xlarge,.show-for-xlarge-down,.hide-for-xxlarge-only,.hide-for-xxlarge-up,.hide-for-xxlarge,.show-for-xxlarge-down{display:inherit !important}.hide-for-small-only,.hide-for-small-up,.hide-for-small,.hide-for-small-down,.show-for-medium-only,.show-for-medium-up,.show-for-medium,.hide-for-medium-down,.show-for-large-only,.show-for-large-up,.show-for-large,.hide-for-large-down,.show-for-xlarge-only,.show-for-xlarge-up,.show-for-xlarge,.hide-for-xlarge-down,.show-for-xxlarge-only,.show-for-xxlarge-up,.show-for-xxlarge,.hide-for-xxlarge-down{display:none !important}.visible-for-small-only,.visible-for-small-up,.visible-for-small,.visible-for-small-down,.hidden-for-medium-only,.hidden-for-medium-up,.hidden-for-medium,.visible-for-medium-down,.hidden-for-large-only,.hidden-for-large-up,.hidden-for-large,.visible-for-large-down,.hidden-for-xlarge-only,.hidden-for-xlarge-up,.hidden-for-xlarge,.visible-for-xlarge-down,.hidden-for-xxlarge-only,.hidden-for-xxlarge-up,.hidden-for-xxlarge,.visible-for-xxlarge-down{position:static !important;height:auto;width:auto;overflow:visible;clip:auto}.hidden-for-small-only,.hidden-for-small-up,.hidden-for-small,.hidden-for-small-down,.visible-for-medium-only,.visible-for-medium-up,.visible-for-medium,.hidden-for-medium-down,.visible-for-large-only,.visible-for-large-up,.visible-for-large,.hidden-for-large-down,.visible-for-xlarge-only,.visible-for-xlarge-up,.visible-for-xlarge,.hidden-for-xlarge-down,.visible-for-xxlarge-only,.visible-for-xxlarge-up,.visible-for-xxlarge,.hidden-for-xxlarge-down{clip:rect(1px, 1px, 1px, 1px);height:1px;overflow:hidden;position:absolute !important;width:1px}table.show-for-small-only,table.show-for-small-up,table.show-for-small,table.show-for-small-down,table.hide-for-medium-only,table.hide-for-medium-up,table.hide-for-medium,table.show-for-medium-down,table.hide-for-large-only,table.hide-for-large-up,table.hide-for-large,table.show-for-large-down,table.hide-for-xlarge-only,table.hide-for-xlarge-up,table.hide-for-xlarge,table.show-for-xlarge-down,table.hide-for-xxlarge-only,table.hide-for-xxlarge-up,table.hide-for-xxlarge,table.show-for-xxlarge-down{display:table !important}thead.show-for-small-only,thead.show-for-small-up,thead.show-for-small,thead.show-for-small-down,thead.hide-for-medium-only,thead.hide-for-medium-up,thead.hide-for-medium,thead.show-for-medium-down,thead.hide-for-large-only,thead.hide-for-large-up,thead.hide-for-large,thead.show-for-large-down,thead.hide-for-xlarge-only,thead.hide-for-xlarge-up,thead.hide-for-xlarge,thead.show-for-xlarge-down,thead.hide-for-xxlarge-only,thead.hide-for-xxlarge-up,thead.hide-for-xxlarge,thead.show-for-xxlarge-down{display:table-header-group !important}tbody.show-for-small-only,tbody.show-for-small-up,tbody.show-for-small,tbody.show-for-small-down,tbody.hide-for-medium-only,tbody.hide-for-medium-up,tbody.hide-for-medium,tbody.show-for-medium-down,tbody.hide-for-large-only,tbody.hide-for-large-up,tbody.hide-for-large,tbody.show-for-large-down,tbody.hide-for-xlarge-only,tbody.hide-for-xlarge-up,tbody.hide-for-xlarge,tbody.show-for-xlarge-down,tbody.hide-for-xxlarge-only,tbody.hide-for-xxlarge-up,tbody.hide-for-xxlarge,tbody.show-for-xxlarge-down{display:table-row-group !important}tr.show-for-small-only,tr.show-for-small-up,tr.show-for-small,tr.show-for-small-down,tr.hide-for-medium-only,tr.hide-for-medium-up,tr.hide-for-medium,tr.show-for-medium-down,tr.hide-for-large-only,tr.hide-for-large-up,tr.hide-for-large,tr.show-for-large-down,tr.hide-for-xlarge-only,tr.hide-for-xlarge-up,tr.hide-for-xlarge,tr.show-for-xlarge-down,tr.hide-for-xxlarge-only,tr.hide-for-xxlarge-up,tr.hide-for-xxlarge,tr.show-for-xxlarge-down{display:table-row}th.show-for-small-only,td.show-for-small-only,th.show-for-small-up,td.show-for-small-up,th.show-for-small,td.show-for-small,th.show-for-small-down,td.show-for-small-down,th.hide-for-medium-only,td.hide-for-medium-only,th.hide-for-medium-up,td.hide-for-medium-up,th.hide-for-medium,td.hide-for-medium,th.show-for-medium-down,td.show-for-medium-down,th.hide-for-large-only,td.hide-for-large-only,th.hide-for-large-up,td.hide-for-large-up,th.hide-for-large,td.hide-for-large,th.show-for-large-down,td.show-for-large-down,th.hide-for-xlarge-only,td.hide-for-xlarge-only,th.hide-for-xlarge-up,td.hide-for-xlarge-up,th.hide-for-xlarge,td.hide-for-xlarge,th.show-for-xlarge-down,td.show-for-xlarge-down,th.hide-for-xxlarge-only,td.hide-for-xxlarge-only,th.hide-for-xxlarge-up,td.hide-for-xxlarge-up,th.hide-for-xxlarge,td.hide-for-xxlarge,th.show-for-xxlarge-down,td.show-for-xxlarge-down{display:table-cell !important}}@media only screen and (min-width:40.063em){.hide-for-small-only,.show-for-small-up,.hide-for-small,.hide-for-small-down,.show-for-medium-only,.show-for-medium-up,.show-for-medium,.show-for-medium-down,.hide-for-large-only,.hide-for-large-up,.hide-for-large,.show-for-large-down,.hide-for-xlarge-only,.hide-for-xlarge-up,.hide-for-xlarge,.show-for-xlarge-down,.hide-for-xxlarge-only,.hide-for-xxlarge-up,.hide-for-xxlarge,.show-for-xxlarge-down{display:inherit !important}.show-for-small-only,.hide-for-small-up,.show-for-small,.show-for-small-down,.hide-for-medium-only,.hide-for-medium-up,.hide-for-medium,.hide-for-medium-down,.show-for-large-only,.show-for-large-up,.show-for-large,.hide-for-large-down,.show-for-xlarge-only,.show-for-xlarge-up,.show-for-xlarge,.hide-for-xlarge-down,.show-for-xxlarge-only,.show-for-xxlarge-up,.show-for-xxlarge,.hide-for-xxlarge-down{display:none !important}.hidden-for-small-only,.visible-for-small-up,.hidden-for-small,.hidden-for-small-down,.visible-for-medium-only,.visible-for-medium-up,.visible-for-medium,.visible-for-medium-down,.hidden-for-large-only,.hidden-for-large-up,.hidden-for-large,.visible-for-large-down,.hidden-for-xlarge-only,.hidden-for-xlarge-up,.hidden-for-xlarge,.visible-for-xlarge-down,.hidden-for-xxlarge-only,.hidden-for-xxlarge-up,.hidden-for-xxlarge,.visible-for-xxlarge-down{position:static !important;height:auto;width:auto;overflow:visible;clip:auto}.visible-for-small-only,.hidden-for-small-up,.visible-for-small,.visible-for-small-down,.hidden-for-medium-only,.hidden-for-medium-up,.hidden-for-medium,.hidden-for-medium-down,.visible-for-large-only,.visible-for-large-up,.visible-for-large,.hidden-for-large-down,.visible-for-xlarge-only,.visible-for-xlarge-up,.visible-for-xlarge,.hidden-for-xlarge-down,.visible-for-xxlarge-only,.visible-for-xxlarge-up,.visible-for-xxlarge,.hidden-for-xxlarge-down{clip:rect(1px, 1px, 1px, 1px);height:1px;overflow:hidden;position:absolute !important;width:1px}table.hide-for-small-only,table.show-for-small-up,table.hide-for-small,table.hide-for-small-down,table.show-for-medium-only,table.show-for-medium-up,table.show-for-medium,table.show-for-medium-down,table.hide-for-large-only,table.hide-for-large-up,table.hide-for-large,table.show-for-large-down,table.hide-for-xlarge-only,table.hide-for-xlarge-up,table.hide-for-xlarge,table.show-for-xlarge-down,table.hide-for-xxlarge-only,table.hide-for-xxlarge-up,table.hide-for-xxlarge,table.show-for-xxlarge-down{display:table !important}thead.hide-for-small-only,thead.show-for-small-up,thead.hide-for-small,thead.hide-for-small-down,thead.show-for-medium-only,thead.show-for-medium-up,thead.show-for-medium,thead.show-for-medium-down,thead.hide-for-large-only,thead.hide-for-large-up,thead.hide-for-large,thead.show-for-large-down,thead.hide-for-xlarge-only,thead.hide-for-xlarge-up,thead.hide-for-xlarge,thead.show-for-xlarge-down,thead.hide-for-xxlarge-only,thead.hide-for-xxlarge-up,thead.hide-for-xxlarge,thead.show-for-xxlarge-down{display:table-header-group !important}tbody.hide-for-small-only,tbody.show-for-small-up,tbody.hide-for-small,tbody.hide-for-small-down,tbody.show-for-medium-only,tbody.show-for-medium-up,tbody.show-for-medium,tbody.show-for-medium-down,tbody.hide-for-large-only,tbody.hide-for-large-up,tbody.hide-for-large,tbody.show-for-large-down,tbody.hide-for-xlarge-only,tbody.hide-for-xlarge-up,tbody.hide-for-xlarge,tbody.show-for-xlarge-down,tbody.hide-for-xxlarge-only,tbody.hide-for-xxlarge-up,tbody.hide-for-xxlarge,tbody.show-for-xxlarge-down{display:table-row-group !important}tr.hide-for-small-only,tr.show-for-small-up,tr.hide-for-small,tr.hide-for-small-down,tr.show-for-medium-only,tr.show-for-medium-up,tr.show-for-medium,tr.show-for-medium-down,tr.hide-for-large-only,tr.hide-for-large-up,tr.hide-for-large,tr.show-for-large-down,tr.hide-for-xlarge-only,tr.hide-for-xlarge-up,tr.hide-for-xlarge,tr.show-for-xlarge-down,tr.hide-for-xxlarge-only,tr.hide-for-xxlarge-up,tr.hide-for-xxlarge,tr.show-for-xxlarge-down{display:table-row}th.hide-for-small-only,td.hide-for-small-only,th.show-for-small-up,td.show-for-small-up,th.hide-for-small,td.hide-for-small,th.hide-for-small-down,td.hide-for-small-down,th.show-for-medium-only,td.show-for-medium-only,th.show-for-medium-up,td.show-for-medium-up,th.show-for-medium,td.show-for-medium,th.show-for-medium-down,td.show-for-medium-down,th.hide-for-large-only,td.hide-for-large-only,th.hide-for-large-up,td.hide-for-large-up,th.hide-for-large,td.hide-for-large,th.show-for-large-down,td.show-for-large-down,th.hide-for-xlarge-only,td.hide-for-xlarge-only,th.hide-for-xlarge-up,td.hide-for-xlarge-up,th.hide-for-xlarge,td.hide-for-xlarge,th.show-for-xlarge-down,td.show-for-xlarge-down,th.hide-for-xxlarge-only,td.hide-for-xxlarge-only,th.hide-for-xxlarge-up,td.hide-for-xxlarge-up,th.hide-for-xxlarge,td.hide-for-xxlarge,th.show-for-xxlarge-down,td.show-for-xxlarge-down{display:table-cell !important}}@media only screen and (min-width:64.063em){.hide-for-small-only,.show-for-small-up,.hide-for-small,.hide-for-small-down,.hide-for-medium-only,.show-for-medium-up,.hide-for-medium,.hide-for-medium-down,.show-for-large-only,.show-for-large-up,.show-for-large,.show-for-large-down,.hide-for-xlarge-only,.hide-for-xlarge-up,.hide-for-xlarge,.show-for-xlarge-down,.hide-for-xxlarge-only,.hide-for-xxlarge-up,.hide-for-xxlarge,.show-for-xxlarge-down{display:inherit !important}.show-for-small-only,.hide-for-small-up,.show-for-small,.show-for-small-down,.show-for-medium-only,.hide-for-medium-up,.show-for-medium,.show-for-medium-down,.hide-for-large-only,.hide-for-large-up,.hide-for-large,.hide-for-large-down,.show-for-xlarge-only,.show-for-xlarge-up,.show-for-xlarge,.hide-for-xlarge-down,.show-for-xxlarge-only,.show-for-xxlarge-up,.show-for-xxlarge,.hide-for-xxlarge-down{display:none !important}.hidden-for-small-only,.visible-for-small-up,.hidden-for-small,.hidden-for-small-down,.hidden-for-medium-only,.visible-for-medium-up,.hidden-for-medium,.hidden-for-medium-down,.visible-for-large-only,.visible-for-large-up,.visible-for-large,.visible-for-large-down,.hidden-for-xlarge-only,.hidden-for-xlarge-up,.hidden-for-xlarge,.visible-for-xlarge-down,.hidden-for-xxlarge-only,.hidden-for-xxlarge-up,.hidden-for-xxlarge,.visible-for-xxlarge-down{position:static !important;height:auto;width:auto;overflow:visible;clip:auto}.visible-for-small-only,.hidden-for-small-up,.visible-for-small,.visible-for-small-down,.visible-for-medium-only,.hidden-for-medium-up,.visible-for-medium,.visible-for-medium-down,.hidden-for-large-only,.hidden-for-large-up,.hidden-for-large,.hidden-for-large-down,.visible-for-xlarge-only,.visible-for-xlarge-up,.visible-for-xlarge,.hidden-for-xlarge-down,.visible-for-xxlarge-only,.visible-for-xxlarge-up,.visible-for-xxlarge,.hidden-for-xxlarge-down{clip:rect(1px, 1px, 1px, 1px);height:1px;overflow:hidden;position:absolute !important;width:1px}table.hide-for-small-only,table.show-for-small-up,table.hide-for-small,table.hide-for-small-down,table.hide-for-medium-only,table.show-for-medium-up,table.hide-for-medium,table.hide-for-medium-down,table.show-for-large-only,table.show-for-large-up,table.show-for-large,table.show-for-large-down,table.hide-for-xlarge-only,table.hide-for-xlarge-up,table.hide-for-xlarge,table.show-for-xlarge-down,table.hide-for-xxlarge-only,table.hide-for-xxlarge-up,table.hide-for-xxlarge,table.show-for-xxlarge-down{display:table !important}thead.hide-for-small-only,thead.show-for-small-up,thead.hide-for-small,thead.hide-for-small-down,thead.hide-for-medium-only,thead.show-for-medium-up,thead.hide-for-medium,thead.hide-for-medium-down,thead.show-for-large-only,thead.show-for-large-up,thead.show-for-large,thead.show-for-large-down,thead.hide-for-xlarge-only,thead.hide-for-xlarge-up,thead.hide-for-xlarge,thead.show-for-xlarge-down,thead.hide-for-xxlarge-only,thead.hide-for-xxlarge-up,thead.hide-for-xxlarge,thead.show-for-xxlarge-down{display:table-header-group !important}tbody.hide-for-small-only,tbody.show-for-small-up,tbody.hide-for-small,tbody.hide-for-small-down,tbody.hide-for-medium-only,tbody.show-for-medium-up,tbody.hide-for-medium,tbody.hide-for-medium-down,tbody.show-for-large-only,tbody.show-for-large-up,tbody.show-for-large,tbody.show-for-large-down,tbody.hide-for-xlarge-only,tbody.hide-for-xlarge-up,tbody.hide-for-xlarge,tbody.show-for-xlarge-down,tbody.hide-for-xxlarge-only,tbody.hide-for-xxlarge-up,tbody.hide-for-xxlarge,tbody.show-for-xxlarge-down{display:table-row-group !important}tr.hide-for-small-only,tr.show-for-small-up,tr.hide-for-small,tr.hide-for-small-down,tr.hide-for-medium-only,tr.show-for-medium-up,tr.hide-for-medium,tr.hide-for-medium-down,tr.show-for-large-only,tr.show-for-large-up,tr.show-for-large,tr.show-for-large-down,tr.hide-for-xlarge-only,tr.hide-for-xlarge-up,tr.hide-for-xlarge,tr.show-for-xlarge-down,tr.hide-for-xxlarge-only,tr.hide-for-xxlarge-up,tr.hide-for-xxlarge,tr.show-for-xxlarge-down{display:table-row}th.hide-for-small-only,td.hide-for-small-only,th.show-for-small-up,td.show-for-small-up,th.hide-for-small,td.hide-for-small,th.hide-for-small-down,td.hide-for-small-down,th.hide-for-medium-only,td.hide-for-medium-only,th.show-for-medium-up,td.show-for-medium-up,th.hide-for-medium,td.hide-for-medium,th.hide-for-medium-down,td.hide-for-medium-down,th.show-for-large-only,td.show-for-large-only,th.show-for-large-up,td.show-for-large-up,th.show-for-large,td.show-for-large,th.show-for-large-down,td.show-for-large-down,th.hide-for-xlarge-only,td.hide-for-xlarge-only,th.hide-for-xlarge-up,td.hide-for-xlarge-up,th.hide-for-xlarge,td.hide-for-xlarge,th.show-for-xlarge-down,td.show-for-xlarge-down,th.hide-for-xxlarge-only,td.hide-for-xxlarge-only,th.hide-for-xxlarge-up,td.hide-for-xxlarge-up,th.hide-for-xxlarge,td.hide-for-xxlarge,th.show-for-xxlarge-down,td.show-for-xxlarge-down{display:table-cell !important}}@media only screen and (min-width:90.063em){.hide-for-small-only,.show-for-small-up,.hide-for-small,.hide-for-small-down,.hide-for-medium-only,.show-for-medium-up,.hide-for-medium,.hide-for-medium-down,.hide-for-large-only,.show-for-large-up,.hide-for-large,.hide-for-large-down,.show-for-xlarge-only,.show-for-xlarge-up,.show-for-xlarge,.show-for-xlarge-down,.hide-for-xxlarge-only,.hide-for-xxlarge-up,.hide-for-xxlarge,.show-for-xxlarge-down{display:inherit !important}.show-for-small-only,.hide-for-small-up,.show-for-small,.show-for-small-down,.show-for-medium-only,.hide-for-medium-up,.show-for-medium,.show-for-medium-down,.show-for-large-only,.hide-for-large-up,.show-for-large,.show-for-large-down,.hide-for-xlarge-only,.hide-for-xlarge-up,.hide-for-xlarge,.hide-for-xlarge-down,.show-for-xxlarge-only,.show-for-xxlarge-up,.show-for-xxlarge,.hide-for-xxlarge-down{display:none !important}.hidden-for-small-only,.visible-for-small-up,.hidden-for-small,.hidden-for-small-down,.hidden-for-medium-only,.visible-for-medium-up,.hidden-for-medium,.hidden-for-medium-down,.hidden-for-large-only,.visible-for-large-up,.hidden-for-large,.hidden-for-large-down,.visible-for-xlarge-only,.visible-for-xlarge-up,.visible-for-xlarge,.visible-for-xlarge-down,.hidden-for-xxlarge-only,.hidden-for-xxlarge-up,.hidden-for-xxlarge,.visible-for-xxlarge-down{position:static !important;height:auto;width:auto;overflow:visible;clip:auto}.visible-for-small-only,.hidden-for-small-up,.visible-for-small,.visible-for-small-down,.visible-for-medium-only,.hidden-for-medium-up,.visible-for-medium,.visible-for-medium-down,.visible-for-large-only,.hidden-for-large-up,.visible-for-large,.visible-for-large-down,.hidden-for-xlarge-only,.hidden-for-xlarge-up,.hidden-for-xlarge,.hidden-for-xlarge-down,.visible-for-xxlarge-only,.visible-for-xxlarge-up,.visible-for-xxlarge,.hidden-for-xxlarge-down{clip:rect(1px, 1px, 1px, 1px);height:1px;overflow:hidden;position:absolute !important;width:1px}table.hide-for-small-only,table.show-for-small-up,table.hide-for-small,table.hide-for-small-down,table.hide-for-medium-only,table.show-for-medium-up,table.hide-for-medium,table.hide-for-medium-down,table.hide-for-large-only,table.show-for-large-up,table.hide-for-large,table.hide-for-large-down,table.show-for-xlarge-only,table.show-for-xlarge-up,table.show-for-xlarge,table.show-for-xlarge-down,table.hide-for-xxlarge-only,table.hide-for-xxlarge-up,table.hide-for-xxlarge,table.show-for-xxlarge-down{display:table !important}thead.hide-for-small-only,thead.show-for-small-up,thead.hide-for-small,thead.hide-for-small-down,thead.hide-for-medium-only,thead.show-for-medium-up,thead.hide-for-medium,thead.hide-for-medium-down,thead.hide-for-large-only,thead.show-for-large-up,thead.hide-for-large,thead.hide-for-large-down,thead.show-for-xlarge-only,thead.show-for-xlarge-up,thead.show-for-xlarge,thead.show-for-xlarge-down,thead.hide-for-xxlarge-only,thead.hide-for-xxlarge-up,thead.hide-for-xxlarge,thead.show-for-xxlarge-down{display:table-header-group !important}tbody.hide-for-small-only,tbody.show-for-small-up,tbody.hide-for-small,tbody.hide-for-small-down,tbody.hide-for-medium-only,tbody.show-for-medium-up,tbody.hide-for-medium,tbody.hide-for-medium-down,tbody.hide-for-large-only,tbody.show-for-large-up,tbody.hide-for-large,tbody.hide-for-large-down,tbody.show-for-xlarge-only,tbody.show-for-xlarge-up,tbody.show-for-xlarge,tbody.show-for-xlarge-down,tbody.hide-for-xxlarge-only,tbody.hide-for-xxlarge-up,tbody.hide-for-xxlarge,tbody.show-for-xxlarge-down{display:table-row-group !important}tr.hide-for-small-only,tr.show-for-small-up,tr.hide-for-small,tr.hide-for-small-down,tr.hide-for-medium-only,tr.show-for-medium-up,tr.hide-for-medium,tr.hide-for-medium-down,tr.hide-for-large-only,tr.show-for-large-up,tr.hide-for-large,tr.hide-for-large-down,tr.show-for-xlarge-only,tr.show-for-xlarge-up,tr.show-for-xlarge,tr.show-for-xlarge-down,tr.hide-for-xxlarge-only,tr.hide-for-xxlarge-up,tr.hide-for-xxlarge,tr.show-for-xxlarge-down{display:table-row}th.hide-for-small-only,td.hide-for-small-only,th.show-for-small-up,td.show-for-small-up,th.hide-for-small,td.hide-for-small,th.hide-for-small-down,td.hide-for-small-down,th.hide-for-medium-only,td.hide-for-medium-only,th.show-for-medium-up,td.show-for-medium-up,th.hide-for-medium,td.hide-for-medium,th.hide-for-medium-down,td.hide-for-medium-down,th.hide-for-large-only,td.hide-for-large-only,th.show-for-large-up,td.show-for-large-up,th.hide-for-large,td.hide-for-large,th.hide-for-large-down,td.hide-for-large-down,th.show-for-xlarge-only,td.show-for-xlarge-only,th.show-for-xlarge-up,td.show-for-xlarge-up,th.show-for-xlarge,td.show-for-xlarge,th.show-for-xlarge-down,td.show-for-xlarge-down,th.hide-for-xxlarge-only,td.hide-for-xxlarge-only,th.hide-for-xxlarge-up,td.hide-for-xxlarge-up,th.hide-for-xxlarge,td.hide-for-xxlarge,th.show-for-xxlarge-down,td.show-for-xxlarge-down{display:table-cell !important}}@media only screen and (min-width:120.063em){.hide-for-small-only,.show-for-small-up,.hide-for-small,.hide-for-small-down,.hide-for-medium-only,.show-for-medium-up,.hide-for-medium,.hide-for-medium-down,.hide-for-large-only,.show-for-large-up,.hide-for-large,.hide-for-large-down,.hide-for-xlarge-only,.show-for-xlarge-up,.hide-for-xlarge,.hide-for-xlarge-down,.show-for-xxlarge-only,.show-for-xxlarge-up,.show-for-xxlarge,.show-for-xxlarge-down{display:inherit !important}.show-for-small-only,.hide-for-small-up,.show-for-small,.show-for-small-down,.show-for-medium-only,.hide-for-medium-up,.show-for-medium,.show-for-medium-down,.show-for-large-only,.hide-for-large-up,.show-for-large,.show-for-large-down,.show-for-xlarge-only,.hide-for-xlarge-up,.show-for-xlarge,.show-for-xlarge-down,.hide-for-xxlarge-only,.hide-for-xxlarge-up,.hide-for-xxlarge,.hide-for-xxlarge-down{display:none !important}.hidden-for-small-only,.visible-for-small-up,.hidden-for-small,.hidden-for-small-down,.hidden-for-medium-only,.visible-for-medium-up,.hidden-for-medium,.hidden-for-medium-down,.hidden-for-large-only,.visible-for-large-up,.hidden-for-large,.hidden-for-large-down,.hidden-for-xlarge-only,.visible-for-xlarge-up,.hidden-for-xlarge,.hidden-for-xlarge-down,.visible-for-xxlarge-only,.visible-for-xxlarge-up,.visible-for-xxlarge,.visible-for-xxlarge-down{position:static !important;height:auto;width:auto;overflow:visible;clip:auto}.visible-for-small-only,.hidden-for-small-up,.visible-for-small,.visible-for-small-down,.visible-for-medium-only,.hidden-for-medium-up,.visible-for-medium,.visible-for-medium-down,.visible-for-large-only,.hidden-for-large-up,.visible-for-large,.visible-for-large-down,.visible-for-xlarge-only,.hidden-for-xlarge-up,.visible-for-xlarge,.visible-for-xlarge-down,.hidden-for-xxlarge-only,.hidden-for-xxlarge-up,.hidden-for-xxlarge,.hidden-for-xxlarge-down{clip:rect(1px, 1px, 1px, 1px);height:1px;overflow:hidden;position:absolute !important;width:1px}table.hide-for-small-only,table.show-for-small-up,table.hide-for-small,table.hide-for-small-down,table.hide-for-medium-only,table.show-for-medium-up,table.hide-for-medium,table.hide-for-medium-down,table.hide-for-large-only,table.show-for-large-up,table.hide-for-large,table.hide-for-large-down,table.hide-for-xlarge-only,table.show-for-xlarge-up,table.hide-for-xlarge,table.hide-for-xlarge-down,table.show-for-xxlarge-only,table.show-for-xxlarge-up,table.show-for-xxlarge,table.show-for-xxlarge-down{display:table !important}thead.hide-for-small-only,thead.show-for-small-up,thead.hide-for-small,thead.hide-for-small-down,thead.hide-for-medium-only,thead.show-for-medium-up,thead.hide-for-medium,thead.hide-for-medium-down,thead.hide-for-large-only,thead.show-for-large-up,thead.hide-for-large,thead.hide-for-large-down,thead.hide-for-xlarge-only,thead.show-for-xlarge-up,thead.hide-for-xlarge,thead.hide-for-xlarge-down,thead.show-for-xxlarge-only,thead.show-for-xxlarge-up,thead.show-for-xxlarge,thead.show-for-xxlarge-down{display:table-header-group !important}tbody.hide-for-small-only,tbody.show-for-small-up,tbody.hide-for-small,tbody.hide-for-small-down,tbody.hide-for-medium-only,tbody.show-for-medium-up,tbody.hide-for-medium,tbody.hide-for-medium-down,tbody.hide-for-large-only,tbody.show-for-large-up,tbody.hide-for-large,tbody.hide-for-large-down,tbody.hide-for-xlarge-only,tbody.show-for-xlarge-up,tbody.hide-for-xlarge,tbody.hide-for-xlarge-down,tbody.show-for-xxlarge-only,tbody.show-for-xxlarge-up,tbody.show-for-xxlarge,tbody.show-for-xxlarge-down{display:table-row-group !important}tr.hide-for-small-only,tr.show-for-small-up,tr.hide-for-small,tr.hide-for-small-down,tr.hide-for-medium-only,tr.show-for-medium-up,tr.hide-for-medium,tr.hide-for-medium-down,tr.hide-for-large-only,tr.show-for-large-up,tr.hide-for-large,tr.hide-for-large-down,tr.hide-for-xlarge-only,tr.show-for-xlarge-up,tr.hide-for-xlarge,tr.hide-for-xlarge-down,tr.show-for-xxlarge-only,tr.show-for-xxlarge-up,tr.show-for-xxlarge,tr.show-for-xxlarge-down{display:table-row}th.hide-for-small-only,td.hide-for-small-only,th.show-for-small-up,td.show-for-small-up,th.hide-for-small,td.hide-for-small,th.hide-for-small-down,td.hide-for-small-down,th.hide-for-medium-only,td.hide-for-medium-only,th.show-for-medium-up,td.show-for-medium-up,th.hide-for-medium,td.hide-for-medium,th.hide-for-medium-down,td.hide-for-medium-down,th.hide-for-large-only,td.hide-for-large-only,th.show-for-large-up,td.show-for-large-up,th.hide-for-large,td.hide-for-large,th.hide-for-large-down,td.hide-for-large-down,th.hide-for-xlarge-only,td.hide-for-xlarge-only,th.show-for-xlarge-up,td.show-for-xlarge-up,th.hide-for-xlarge,td.hide-for-xlarge,th.hide-for-xlarge-down,td.hide-for-xlarge-down,th.show-for-xxlarge-only,td.show-for-xxlarge-only,th.show-for-xxlarge-up,td.show-for-xxlarge-up,th.show-for-xxlarge,td.show-for-xxlarge,th.show-for-xxlarge-down,td.show-for-xxlarge-down{display:table-cell !important}}.show-for-landscape,.hide-for-portrait{display:inherit !important}.hide-for-landscape,.show-for-portrait{display:none !important}table.hide-for-landscape,table.show-for-portrait{display:table !important}thead.hide-for-landscape,thead.show-for-portrait{display:table-header-group !important}tbody.hide-for-landscape,tbody.show-for-portrait{display:table-row-group !important}tr.hide-for-landscape,tr.show-for-portrait{display:table-row !important}td.hide-for-landscape,td.show-for-portrait,th.hide-for-landscape,th.show-for-portrait{display:table-cell !important}@media only screen and (orientation: landscape){.show-for-landscape,.hide-for-portrait{display:inherit !important}.hide-for-landscape,.show-for-portrait{display:none !important}table.show-for-landscape,table.hide-for-portrait{display:table !important}thead.show-for-landscape,thead.hide-for-portrait{display:table-header-group !important}tbody.show-for-landscape,tbody.hide-for-portrait{display:table-row-group !important}tr.show-for-landscape,tr.hide-for-portrait{display:table-row !important}td.show-for-landscape,td.hide-for-portrait,th.show-for-landscape,th.hide-for-portrait{display:table-cell !important}}@media only screen and (orientation: portrait){.show-for-portrait,.hide-for-landscape{display:inherit !important}.hide-for-portrait,.show-for-landscape{display:none !important}table.show-for-portrait,table.hide-for-landscape{display:table !important}thead.show-for-portrait,thead.hide-for-landscape{display:table-header-group !important}tbody.show-for-portrait,tbody.hide-for-landscape{display:table-row-group !important}tr.show-for-portrait,tr.hide-for-landscape{display:table-row !important}td.show-for-portrait,td.hide-for-landscape,th.show-for-portrait,th.hide-for-landscape{display:table-cell !important}}.show-for-touch{display:none !important}.hide-for-touch{display:inherit !important}.touch .show-for-touch{display:inherit !important}.touch .hide-for-touch{display:none !important}table.hide-for-touch{display:table !important}.touch table.show-for-touch{display:table !important}thead.hide-for-touch{display:table-header-group !important}.touch thead.show-for-touch{display:table-header-group !important}tbody.hide-for-touch{display:table-row-group !important}.touch tbody.show-for-touch{display:table-row-group !important}tr.hide-for-touch{display:table-row !important}.touch tr.show-for-touch{display:table-row !important}td.hide-for-touch{display:table-cell !important}.touch td.show-for-touch{display:table-cell !important}th.hide-for-touch{display:table-cell !important}.touch th.show-for-touch{display:table-cell !important}.show-for-sr{clip:rect(1px, 1px, 1px, 1px);height:1px;overflow:hidden;position:absolute !important;width:1px}.show-on-focus{clip:rect(1px, 1px, 1px, 1px);height:1px;overflow:hidden;position:absolute !important;width:1px}.show-on-focus:focus,.show-on-focus:active{position:static !important;height:auto;width:auto;overflow:visible;clip:auto}.print-only,.show-for-print{display:none !important}@media print{.print-only,.show-for-print{display:block !important}.hide-on-print,.hide-for-print{display:none !important}table.show-for-print{display:table !important}thead.show-for-print{display:table-header-group !important}tbody.show-for-print{display:table-row-group !important}tr.show-for-print{display:table-row !important}td.show-for-print{display:table-cell !important}th.show-for-print{display:table-cell !important}}img.aligncenter{display:block;clear:both;float:none;padding:0;margin-left:auto;margin-right:auto}img.alignright{padding:0;margin:0 0 6px 11px;display:inline}blockquote.alignleft,img.alignleft,.wp-caption.alignleft{margin:0.4375rem 2.1875rem 0.4375rem 0}blockquote.alignright,img.alignright,.wp-caption.alignright{margin:0.4375rem 0 0.4375rem 2.1875rem}img.alignleft{padding:0;display:inline}.alignright{float:right}.alignnone{float:none}.alignleft{float:left}.wp-caption{width:auto}.wp-caption-text{font-family:Open Sans, sans-serif;font-size:9px;color:#FFFFFF;font-style:italic;margin:0;padding:0 5px}.gallery-one-title{height:45px;font-size:0.8em;text-align:center;font-family:sans-serif;padding:5px}.gallery-holder{margin:10px 0 20px 0}@media 0em, 40em{img.alignright,img.alignleft,img.aligncenter{width:70% !important;display:block;margin-left:auto;margin-right:auto;float:none;text-align:center}div.wp-caption.alignright,div.wp-caption.alignleft{width:44% !important;margin-left:auto;margin-right:auto;float:none;text-align:center}div.wp-caption.aligncenter{width:85% !important;margin-left:auto;margin-right:auto;float:none;text-align:center}div.wp-caption.alignnone{width:85% !important;float:none}div.wp-caption.alignright,div.wp-caption.alignleft,div.wp-caption.aligncenter{width:100%}}@media 40.063em, 64em{img.aligncenter,img.alignnone{width:70% !important;display:block;margin-left:auto;margin-right:auto;float:none;text-align:center}div.wp-caption.aligncenter{width:74% !important;margin-left:auto;margin-right:auto;float:none;text-align:center}div.wp-caption.aligncenter{width:100%}div.wp-caption.alignnone{width:73% !important;float:none}}.wp-caption{max-width:100%;margin:10px 20px;padding:5px;text-align:center}.wp-caption img{width:100%}.wp-caption p.wp-caption-text{padding:5px;width:100%;margin:0;color:black;font-size:12px}.wp-caption.aligncenter{margin:10px auto}@media only screen and (max-width: 40em){#blog-posts-over{padding:0 !important;margin:0 !important}}.blog-posts-container{margin:30px 0 30px}.blog-posts-container embed,.blog-posts-container iframe,.blog-posts-container object,.blog-posts-container video{max-width:100%}.blog-posts-container a{text-decoration:none}.blog-posts-container header.entry-header h2.entry-title a{color:#222;margin-left:0}.blog-posts-container .wp-caption .wp-caption-text,.blog-posts-container .gallery-caption,.blog-posts-container .entry-caption{overflow:hidden;color:#757575;font-size:0.857143rem;font-style:italic;line-height:2}.blog-posts-container .date{font-size:12px}.blog-posts-container footer.entry-meta{color:#757575;font-size:0.928571rem;line-height:1.84615;margin-top:1.71429rem;clear:both;float:none;margin-right:auto}.blog-posts-container footer{background:none;clear:both;padding:15px 0 0;position:relative;text-align:center}#content-wrapper{border-top:4px solid #85111A;border-bottom:4px solid #17274B}#content-wrapper h1,#content-wrapper h2,#content-wrapper h3,#content-wrapper h4,#content-wrapper h5,#content-wrapper h6{clear:both}.content{background:#fff;box-shadow:3px 3px 8px -1px darkgrey}#searchform_container{margin-top:20px}#searchform{max-width:100%;text-align:center}#searchform div input.blogbutton{background:-webkit-linear-gradient(left, #1999ce 5%, #107098 100%);background:-moz-linear-gradient(center top, #1999ce 5%, #107098 100%);background:-ms-linear-gradient(left, #1999ce 5%, #107098 100%)}#blog-side-info{border-left:1px solid grey;margin-top:30px;padding-left:20px}@media only screen and (max-width: 40em){#blog-side-info{text-align:center;}}h1,h2,h3,h4,h5,h6{clear:both}.gallery li a img{display:block;width:100%}.ngg-gallery-thumbnail,.ngg-gallery-thumbnail-box{float:none !important}.ngg-album-compact h4 .ngg-album-desc{height:auto !important;font-family:Georgia,Cambria,"Times New Roman",Times,serif;font-weight:400}.ngg-album-compact .album-meta-wrapper h4 a{font-style:normal}.album-meta-wrapper{display:block;height:54px;margin-bottom:20px}.ngg-glmalbums{margin:10px 0;min-height:260px}@media only screen and (max-width: 40em){.ngg-glmalbums{min-height:180px;}}.ngg-album-link{text-align:center}.ninja-forms-form-wrap{max-width:600px;margin:0 auto}.ninja-forms-form-wrap input[type=submit]{-webkit-appearance:none;-moz-appearance:none;border-radius:0;border-style:solid;border-width:0;cursor:pointer;font-family:"Open Sans",sans-serif;font-weight:normal;line-height:normal;margin:0 0 1.25rem;position:relative;text-align:center;text-decoration:none;display:inline-block;padding:1rem 2rem 1.0625rem 2rem;font-size:1rem;background-color:#486b71;border-color:#3a565a;color:#FFFFFF;transition:background-color 300ms ease-out;display:block;margin:0 auto}.ninja-forms-form-wrap input[type=submit]:hover,.ninja-forms-form-wrap input[type=submit]:focus{background-color:#3a565a}.ninja-forms-form-wrap input[type=submit]:hover,.ninja-forms-form-wrap input[type=submit]:focus{color:#FFFFFF}a[href^=tel]{color:inherit;text-decoration:none}body .shadow-wrapper{margin:0 auto;background:#FFFFFF;box-shadow:0 0 15px -6px #000000;-ms-box-shadow:0 0 15px -6px #000000;-moz-box-shadow:0 0 15px -6px #000000;-webkit-box-shadow:0 0 15px -6px #000000;max-width:1000px;padding-top:1.25rem}#header-separator{height:auto;background-color:#333132;color:#EDF6F5;width:100%;text-align:center;padding:5px 10px 20px}@media only screen and (max-width: 40em){#header-separator h1{font-size:30px;line-height:1.2}}#header-separator.header-separator-interior{padding:5px 0}#header-separator>*{max-width:1024px;margin:0 auto;float:none}#header-separator h1{color:#EDF6F5;font-weight:bold;text-transform:uppercase;letter-spacing:1px;line-height:1.8}#header-separator.header-separator-interior h1{color:#f5ad1a}#header-separator p{color:#FFFFFF;font-size:18px;line-height:1.2}header{list-style:none;max-height:600px;height:auto}header #logo img{margin-bottom:15px}header .search input{height:20px;width:167px;padding:0 8px;margin:13px 0px 0px 18px;border-radius:3px;font-size:10px;color:#000000;display:inline-block}header .search a.magnifying-glass{font-size:10em;display:inline-block;width:0.625rem;height:0.625rem;border:0.125rem solid #131c5f;position:relative;border-radius:0.35em;margin:0 0 0 -25px}header .search a.magnifying-glass:before{content:"";display:inline-block;position:absolute;right:-0.4375rem;bottom:-0.25rem;border-width:0;background:#131c5f;width:0.5rem;height:0.125rem;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}header #sec-nav{position:relative;text-align:left;padding:10px 0;margin:0 0 15px 45px}header #sec-nav ul{margin:0}header #sec-nav ul li{display:inline}header #sec-nav ul li a{font-size:12px;color:#131c5f;padding:0 5px;font-weight:bold}header #sec-nav>ul>li{position:relative}header #sec-nav>ul>li:before{color:#999999;content:"|";position:absolute;top:2px;left:-15px;font-size:14px;font-weight:bold;display:block;padding:0 10px}header #sec-nav>ul>li:first-child:before{content:none}header img{margin-left:5px}header .social{margin-top:-25px;padding-right:0}header .social a{float:right;margin:0 5px}header .social a img{margin:0}@media only screen and (min-width:0em) and (max-width:64em){#header-media{margin-top:45px;}}.contain-to-grid{box-shadow:0 5px 10px -1px #999999}.contain-to-grid .top-bar{height:73px;box-shadow:0 3px 3px 0 rgba(0,0,0,0.5);margin-bottom:10px}@media screen and (max-width: 782px){#wpadminbar{position:fixed !important}}.tab-bar{background-color:#85111A}.tab-bar .tab-bar-section.middle{text-align:right}#top-bar-wrapper{position:absolute;top:0;width:100%}#top-bar-logo{max-width:140px;border:3px solid #85111A;position:absolute;left:0px;top:15px;z-index:9;-webkit-box-shadow:9px 10px 6px -6px rgba(0,0,0,0.7);-moz-box-shadow:9px 10px 6px -6px rgba(0,0,0,0.7);box-shadow:9px 10px 6px -6px rgba(0,0,0,0.7)}.left-off-canvas-toggle.menu-icon>span{margin-left:20px}.submenu-two-columns{-webkit-column-count:2;-moz-column-count:2;column-count:2;min-width:460px}.submenu-two-columns li{-webkit-column-break-inside:avoid;page-break-inside:avoid;break-inside:avoid-column}.top-bar{background:transparent;width:1024px;margin:0 auto;padding-top:100px;z-index:5}.top-bar .top-bar-section{background:#FAFAFA;-webkit-border-top-right-radius:20px;-moz-border-top-right-radius:20px;border-top-right-radius:20px;display:inline-block;height:auto;line-height:1;margin-left:auto;margin-right:auto;width:100%;-webkit-box-shadow:9px 10px 6px -6px rgba(0,0,0,0.7);-moz-box-shadow:9px 10px 6px -6px rgba(0,0,0,0.7);box-shadow:9px 10px 6px -6px rgba(0,0,0,0.7)}.top-bar .top-bar-section>ul{float:right;background:transparent;border-top-right-radius:9px;border-bottom-right-radius:9px;height:65px !important}.top-bar .top-bar-section>ul>li{height:100%;background-color:#FAFAFA;border-top:2px solid transparent;border-left:2px solid transparent;border-right:2px solid transparent}.top-bar .top-bar-section>ul>li.active:not(.has-form){background-color:#85111A}.top-bar .top-bar-section>ul>li.active:not(.has-form)>a:not(.button){padding:6px 20px;line-height:1;background-color:#85111A;color:#FFFFFF;font-size:22px;font-weight:bold}.top-bar .top-bar-section>ul>li.active:not(.has-form)>a:not(.button).active{background-color:#85111A;color:#FFFFFF}.top-bar .top-bar-section>ul>li>a{position:relative;top:50%;transform:translateY(-50%);font-size:26px;font-family:'Times New Roman', Times, serif}.top-bar .top-bar-section>ul>li.active:not(.has-form)>a:not(.button){font-weight:bold}.top-bar .top-bar-section>ul>li>ul>li{float:none}.top-bar .top-bar-section>ul>li:not(.has-form):not(.active){background-color:#FAFAFA}.top-bar .top-bar-section>ul>li:not(.has-form):not(.active):hover{border-top:2px solid #85111A;border-right:2px solid #85111A;border-left:2px solid #85111A;background-color:#FAFAFA}.top-bar .top-bar-section>ul>li:not(.has-form):not(.active):hover>a:not(.button){background-color:#FAFAFA;color:#85111A}.top-bar .top-bar-section>ul>li:not(.has-form):not(.active):hover>a.active{background-color:#FAFAFA}.top-bar .top-bar-section>ul>li:not(.has-form):not(.active)>a:not(.button){line-height:1;background-color:#FAFAFA;color:#85111A;font-size:24px;font-weight:bold}.top-bar .top-bar-section>ul>li:not(.has-form):not(.active)>a:not(.button).active{background-color:#85111A;color:#FFFFFF}.top-bar .top-bar-section>ul>li:not(.has-form):not(.active):last-child,.top-bar .top-bar-section>ul>li:not(.has-form):not(.active):last-child>a{border-top-right-radius:9px}.top-bar .top-bar-section ul{background:white}.top-bar .top-bar-section ul li ul.dropdown{top:59px;max-width:500px;padding:20px;border-width:0 2px 2px 2px;border-style:solid;border-color:#85111A;border-bottom-left-radius:5px;border-bottom-right-radius:5px;z-index:-1}.top-bar .top-bar-section ul li ul.dropdown li:not(.has-form):not(.active):hover>a:not(.button){background-color:#FFFFFF;color:#85111A;font-size:16px}.top-bar .top-bar-section ul li ul.dropdown li{min-width:180px;background-color:#FFFFFF;color:#000000;border-bottom:1px dotted #7B7495;font-size:16px}.top-bar .top-bar-section ul li ul.dropdown li:not(.has-form):not(.active)>a:not(.button){background-color:#FFFFFF;color:#000000}.top-bar .top-bar-section ul li ul.dropdown li a{color:#000000;border-top-left-radius:0;border-top-right-radius:0;text-align:left;white-space:normal}.top-bar .top-bar-section ul li ul.dropdown li:not(.has-form):not(.active)>a:not(.button){font-size:1rem;padding:10px 0;line-height:1}.top-bar .top-bar-section ul li ul.dropdown li:not(.has-form).active{background-color:#FFFFFF}.top-bar .top-bar-section ul li ul.dropdown li:not(.has-form).active a:not(.button){background-color:#FFFFFF;color:#f27225;padding:10px 0;font-size:1rem;line-height:1}.top-bar .top-bar-section ul li ul.dropdown li:not(.has-form).active a:not(.button):hover{background-color:#FFFFFF;color:#f27225}.top-bar .top-bar-section ul li:not(.drop-left) ul.dropdown{left:-1%}.top-bar .top-bar-section ul li.drop-left ul.dropdown{right:-2%;left:auto}.top-bar .top-bar-section ul li.drop-left ul.dropdown li a{text-align:left}main.page-inside{padding:20px}#content-wrapper .breadcrumbs{margin-top:10px;margin-bottom:15px;background-color:white;border:0;padding:0}#content-wrapper .breadcrumbs>span{color:#f27225;font-size:14px;text-transform:none}#content-wrapper .breadcrumbs a>span{color:#f27225;font-size:14px;text-transform:none;text-decoration:underline}#content-bulk #con{margin:0}#content-bulk h2{text-transform:uppercase;font-size:25px}#content-bulk footer{margin:35px 0}#content-bulk footer #address{margin-top:25px}#content-bulk footer #address p{font-size:12px;margin-top:5px}#content-bulk footer #address img{margin:0;padding-right:5px}#content-bulk footer #address a{font-size:12px}#content-bulk footer img{box-shadow:none}#main-content{padding-top:20px}.st_sharethis{float:right;width:58px}body .stButton .sharethis{background-image:url("../assets/share-icon.png") !important;width:52px;height:22px}.map-wrapper{background-color:#bcd5e9;border-bottom:2px solid #486b71;margin-bottom:30px}.map-wrapper .area-map-info{padding-top:25px}.map-wrapper .area-map-info .city-img{background-size:cover;background-repeat:no-repeat;border:2px solid #486b71;display:block;height:200px;width:300px}.map-wrapper .area-map-info .city-title{color:#486b71;font-size:28px;font-weight:bold;letter-spacing:0;line-height:1.0;margin:10px 0 5px}.map-wrapper .area-map-info .city-content{max-height:75px;overflow:hidden}.map-wrapper .area-map-info .city-link{background:#486b71;border:1px solid white;border-radius:7px;color:white;font-weight:bold;margin-top:15px;padding:4px 8px}.map-wrapper .city-info-button{margin-top:10px;margin-bottom:5px}@media only screen and (min-width:0em) and (max-width:64em){.map-wrapper .city-info-wrapper{margin:0 auto 20px;max-width:300px}}#city-map{display:block;max-width:630px;margin:0 auto;width:100%}@media only screen and (max-width: 40em){#city-map{height:auto;}}-moz-document url-prefix() #city-map{height:auto}@media screen and (-webkit-min-device-pixel-ratio: 0){#city-map{height:auto}}@media screen and (max-device-width: 480px){#city-map{height:auto}}@media all and (-ms-high-contrast: none),(-ms-high-contrast: active){#city-map{height:400px}}#Main_Towns_-_hover path{visibility:hidden}@media only screen and (min-width:0em) and (max-width:64em){#slideshow{margin-top:45px;}}#slideshow #caption{background:rgba(0,0,0,0.75);color:#FFFFFF;margin-top:-51px}#slideshow #caption p{padding:10px 5px;font-size:12px;margin:0;text-align:right}.ngg-gallery-thumbnail,.ngg-gallery-thumbnail-box{float:none !important}.gallery li a img{display:block;width:100%}.ngg-gallery-thumbnail,.ngg-gallery-thumbnail-box{float:none !important}.ngg-album-compact h4 .ngg-album-desc{height:auto !important;font-family:Georgia,Cambria,"Times New Roman",Times,serif;font-weight:400}.ngg-album-compact .album-meta-wrapper h4 a{font-style:normal}.album-meta-wrapper{display:block;height:54px;margin-bottom:20px}.ngg-glmalbums{margin:10px 0}.ninja-forms-form-wrap{max-width:600px;margin:0 auto}.ninja-forms-form-wrap input[type=submit]{-webkit-appearance:none;-moz-appearance:none;border-radius:0;border-style:solid;border-width:0;cursor:pointer;font-family:"Open Sans",sans-serif;font-weight:normal;line-height:normal;margin:0 0 1.25rem;position:relative;text-align:center;text-decoration:none;display:inline-block;padding:1rem 2rem 1.0625rem 2rem;font-size:1rem;background-color:#486b71;border-color:#3a565a;color:#FFFFFF;transition:background-color 300ms ease-out;display:block;margin:0 auto}.ninja-forms-form-wrap input[type=submit]:hover,.ninja-forms-form-wrap input[type=submit]:focus{background-color:#3a565a}.ninja-forms-form-wrap input[type=submit]:hover,.ninja-forms-form-wrap input[type=submit]:focus{color:#FFFFFF}#glm-member-db-front-container .glm-member-list-active-info .glm-member-title a{color:#486b71;font-size:26px;letter-spacing:normal;text-decoration:none;vertical-align:top}#glm-member-db-front-container .glm-member-list-active-info .glm-member-title a:hover{text-decoration:underline}#glm-member-db-front-container #glm-member-list-filters-button{background-color:#f27225}#glm-member-db-front-container #glm-member-list-map-toggle{background-color:#f27225}#glm-member-db-front-container #glm-member-list-filters-close{background-color:#d25205}#glm-member-db-front-container .glm-member-list-container .glm-member-title{line-height:1;margin:5px 0;text-transform:none}#glm-member-db-front-container .glm-member-list-container .glm-member-list-image-wrapper{float:right;max-height:180px}#glm-member-db-front-container .glm-member-list-data{padding:20px}#glm-member-db-front-container .glm-member-list-active-info{font-size:16px}#glm-member-db-front-container .glm-member-list-address-wrapper>div{line-height:1.5}#glm-member-db-front-container .glm-member-list-active-info .glm-member-list-links>a{text-decoration:underline;color:#36555a;line-height:1.5}#glm-member-db-front-container .glm-alpha-links>.glm-alpha-link{background-color:#FFFFFF;border-color:#486b71;color:#486b71}#glm-member-db-front-container .glm-alpha-links>.glm-alpha-link:hover{background-color:#486b71;color:#FFFFFF}#glm-member-db-front-container .glm-alpha-links>.glm-alpha-link-selected{background-color:#486b71;color:white}#glm-member-db-front-container .glm-member-list-active-info{padding:0 0px 0 0}#glm-member-db-front-container .glm-member-db-list-header-title{text-transform:none}#glm-member-db-front-container .glm-member-list-terms{display:none}#glm-member-db-front-container .glm-member-search .glm-member-button-small,#glm-member-db-front-container .glm-member-search input[type="submit"].glm-member-button{font-size:0.9em !important;padding:5px 20px !important;margin:0 auto !important;line-height:1.8em !important;height:auto !important;border-radius:5px;background-color:#f27225;transition:all 0.5s}#glm-member-db-front-container .glm-member-search .glm-member-button-small:hover,#glm-member-db-front-container .glm-member-search input[type="submit"].glm-member-button:hover{transition:all 0.5s;background-color:#f5ad1a}#glm-member-db-front-container .glm-member-search::before{background-color:#f27225}#glm-member-db-front-container .glm-member-db-takeback-mini{text-decoration:none;position:relative;background-color:#f27225;transition:all 0.5s}#glm-member-db-front-container .glm-member-db-takeback-mini:hover{transition:all 0.5s;background-color:#f5ad1a}#glm-member-db-front-container .glm-member-db-takeback-mini span{font-size:16px;top:14px}#content-wrapper .glm-member-db-grid-view .glm-member-title a{letter-spacing:2px}#content-wrapper .glm-member-db-grid-view .glm-member-list-sub-links{margin:0}#content-wrapper .glm-member-db-grid-view .glm-member-list-sub-links ul{display:table;margin-left:0;width:100%}#content-wrapper .glm-member-db-grid-view .glm-member-list-sub-links ul li{text-transform:uppercase;font-weight:bold;border:0;width:50%;float:left;display:block;padding:1px;margin:0}#content-wrapper .glm-member-db-grid-view .glm-member-list-sub-links ul li a{color:#f27225;border-radius:3px;padding:4px 8px;display:block;width:auto;font-size:12px;text-decoration:underline}#glm-member-detail-container .glm-member-title{display:none}#glm-member-detail-container #glm-member-detail-contact-info{background-color:#EDF6F5;color:#486b71}#glm-member-detail-container #glm-member-detail-website-link{text-decoration:none}#glm-member-detail-container #glm-member-detail-data-container>.glm-member-detail-content-toggle{color:#486b71}#glm-member-detail-container .map-button{background-color:#f27225}#glm-member-detail-container .map-button:hover{background-color:#f5ad1a}#glm-member-detail-container #glm-member-detail-links a{color:#486b71;border-color:#486b71}.glm-member-detail-contact-phone small{font-size:12px}#members-only-sidebar-off-canvas{background-color:#324B4F;border-radius:5px;list-style:outside none none;margin:10px;max-width:230px}#members-only-sidebar-off-canvas h2{color:#f5ad1a}#members-only-sidebar-off-canvas h4{color:#f5ad1a}#members-only-sidebar-off-canvas ul li a{color:#FFFFFF}#members-only-sidebar-off-canvas ul li a:hover{color:#f5ad1a}#members-only-sidebar-off-canvas .menu-side .glm-button{background:transparent;text-decoration:underline;color:white}#members-only-content #glm-member-front-header{margin-top:-10px}#members-only-content #side-links{border:1px solid #486b71;border-radius:3px;padding:15px 20px 30px;background-color:#36555a;list-style:none}@media only screen and (min-width:40.063em) and (max-width:64em){#members-only-content #side-links{padding:25px 15px;}}#members-only-content #side-links h4{color:#f5ad1a;line-height:1.2;letter-spacing:normal;font-size:26px}@media only screen and (min-width:40.063em) and (max-width:64em){#members-only-content #side-links h4{font-size:24px;}}#members-only-content #side-links ul{margin:0;list-style:none}#members-only-content #side-links li{list-style:none;line-height:1.2;margin-top:15px}#members-only-content #side-links li a{color:white;text-decoration:none;font-size:20px}#members-only-content #side-links li a:hover{color:#f5ad1a}#members-only-content .glm-button.button{background-color:#486b71}#members-only-content #main-content{padding-top:0}#members-only-content #lostpasswordform{max-width:350px}#featured-business #glm-member-db-front-container{padding:0}#featured-business .glm-featured-member-text{padding:20px}#featured-business .glm-featured-member-image-container{max-height:200px;overflow:hidden}#sidebar .glm-member-front-container{padding:0}#glm-event-wrapper h1{font-size:1.5rem;padding:0 15px}#glm-event-wrapper #glm-events-search-form .button{-webkit-appearance:none;-moz-appearance:none;border-radius:0;border-style:solid;border-width:0;cursor:pointer;font-family:"Open Sans",sans-serif;font-weight:normal;line-height:normal;margin:0 0 1.25rem;position:relative;text-align:center;text-decoration:none;display:inline-block;padding:0.75rem 1.5rem 0.8125rem 1.5rem;background-color:#486b71;border-color:#3a565a;color:#FFFFFF;border-radius:3px;transition:background-color 300ms ease-out;color:white}#glm-event-wrapper #glm-events-search-form .button:hover,#glm-event-wrapper #glm-events-search-form .button:focus{background-color:#3a565a}#glm-event-wrapper #glm-events-search-form .button:hover,#glm-event-wrapper #glm-events-search-form .button:focus{color:#FFFFFF}#glm-event-wrapper #glm-events-search-form #glm-event-add-event{width:126px;float:right}#glm-event-wrapper button:not(.fc-button){-webkit-appearance:none;-moz-appearance:none;border-radius:0;border-style:solid;border-width:0;cursor:pointer;font-family:"Open Sans",sans-serif;font-weight:normal;line-height:normal;margin:0 0 1.25rem;position:relative;text-align:center;text-decoration:none;display:inline-block;padding:0.75rem 1.5rem 0.8125rem 1.5rem;background-color:#486b71;border-color:#3a565a;color:#FFFFFF;border-radius:3px;transition:background-color 300ms ease-out;width:220px}#glm-event-wrapper button:not(.fc-button):hover,#glm-event-wrapper button:not(.fc-button):focus{background-color:#3a565a}#glm-event-wrapper button:not(.fc-button):hover,#glm-event-wrapper button:not(.fc-button):focus{color:#FFFFFF}#glm-event-wrapper p{margin-left:15px}#glm-event-wrapper .glm-event-day-row{border:1px solid #FFFFFF;background:-webkit-linear-gradient(left, #f2f2f2 5%, #FFFFFF 100%);background:-moz-linear-gradient(center top, #f2f2f2 5%, #FFFFFF 100%);background:-ms-linear-gradient(left, #f2f2f2 5%, #FFFFFF 100%)}#glm-event-wrapper .glm-event-day-event{border:1px solid #486b71}#glm-event-wrapper .glm-event-day-event:hover{border:1px solid #000000}#glm-event-wrapper .glm-event-day-event a.glm-read-more{border:1px solid #486b71;background-color:#FFFFFF;color:#000000}#glm-event-wrapper .glm-event-day-event a.glm-read-more:hover{color:#FFFFFF;background-color:#486b71;border:1px solid #FFFFFF}#glm-event-wrapper .glm-event-cal{border:1px solid #486b71}#glm-event-wrapper .glm-event-cal-day-container{background:-webkit-linear-gradient(left, #FFFFFF 5%, #f2f2f2 100%);background:-moz-linear-gradient(center top, #FFFFFF 5%, #f2f2f2 100%);background:-ms-linear-gradient(left, #FFFFFF 5%, #f2f2f2 100%)}#glm-event-wrapper .glm-event-cal-month{background-color:#486b71;color:#fff}#glm-event-wrapper h1{color:#486b71}#glm-event-wrapper h2{color:#486b71;font-weight:bold}#glm-event-wrapper #glm-event-detail-cost:before{top:0px}#glm-event-wrapper .stButton .sharethis{display:none}#glm-event-wrapper span#eventShare.st_sharethis,#glm-event-wrapper #shareThisOrange{background-color:#486b71 !important;font-size:0.875rem;font-weight:bold;color:white;width:auto;height:30px;border-radius:3px;max-height:30px;padding:3px 0 0 15px}#glm-event-wrapper #EventDrivingDirectionSubmit{margin-left:0px;font-weight:bold}.hasDatepicker{width:100%;height:34px}#glm-events-frontpage-wrapper .glm-events-frontpage-day{padding:3px;background-color:#486b71;color:#779156}#glm-events-frontpage-wrapper .glm-events-frontpage-event-container{margin:10px 0;overflow:hidden}#glm-events-frontpage-wrapper .glm-events-frontpage-event-image{width:90px;height:90px}#glm-events-frontpage-wrapper .glm-events-frontpage-event-title,#glm-events-frontpage-wrapper .glm-events-frontpage-event-dates,#glm-events-frontpage-wrapper .glm-events-frontpage-event-content{float:left;width:170px;padding:0px 12px 0px 8px;margin-top:4px}#glm-events-frontpage-wrapper .glm-events-frontpage-event-title{color:#486b71;font-weight:bold;max-height:37.2px;overflow:hidden;line-height:1.4}#glm-events-frontpage-wrapper .glm-events-frontpage-event-dates{color:grey;max-height:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#glm-events-frontpage-wrapper .glm-events-frontpage-event-content{max-height:37.2px;overflow:hidden}@media only screen and (min-width:40.063em){#glm-event-wrapper{margin:0 auto}#glm-event-wrapper.event-detail{width:100%}}form#glm-member-event-search #glm-event-category{width:83%}.prefix,.postfix{border-style:solid;border-width:1px;display:block;font-size:0.875rem;height:2.3125rem;line-height:2.3125rem;overflow:visible;padding-bottom:0;padding-top:0;position:relative;text-align:center;width:100%;z-index:2}span.prefix,label.prefix{background:#f2f2f2;border-right:none;color:#333333;border-color:#cccccc}span.postfix,label.postfix{background:#f2f2f2;border-left:none;color:#333333;border-color:#cccccc}input:not([type]),input[type="text"],input[type="password"],input[type="date"],input[type="datetime"],input[type="datetime-local"],input[type="month"],input[type="week"],input[type="email"],input[type="number"],input[type="search"],input[type="tel"],input[type="time"],input[type="url"],input[type="color"],textarea{-webkit-appearance:none;-moz-appearance:none;border-radius:0;background-color:#FFFFFF;border-style:solid;border-width:1px;border-color:#cccccc;box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);color:rgba(0,0,0,0.75);display:block;font-family:inherit;font-size:0.875rem;height:2.3125rem;margin:0 0 1rem 0;padding:0.5rem;width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:border-color 0.15s linear,background 0.15s linear;-moz-transition:border-color 0.15s linear,background 0.15s linear;-ms-transition:border-color 0.15s linear,background 0.15s linear;-o-transition:border-color 0.15s linear,background 0.15s linear;transition:border-color 0.15s linear,background 0.15s linear}.right{float:right !important}#glm-event-detail-takeback-mini{background-color:#f27225;transition:all 0.5s}#glm-event-detail-takeback-mini:hover{transition:all 0.5s;background-color:#f5ad1a}#front-event-feed-title{color:#486b71;font-size:25px;font-weight:bold;letter-spacing:1px;text-transform:uppercase}#event-feed-row{margin-bottom:40px}#feed .image-container{width:auto;height:150px;margin-bottom:10px}#feed .front-event-title{color:#486b71;font-size:18px;font-weight:bold;min-height:50px}#feed .front-event-date-container{display:inline;padding:0 5px}#feed .front-event-date{color:grey;font-size:14px}#feed .front-event-button{background-color:#f27225;float:right;color:#FFFFFF;font-size:15px;text-transform:uppercase;letter-spacing:1px;font-weight:bold;padding:4px;line-height:1.2}#feed .front-event-border{border-bottom:2px solid #486b71;clear:both}#glm-member-packaging-front-container #glm-package-detail-member-name h3{color:#000000}#glm-member-packaging-front-container .glm-member-db-takeback-mini{text-decoration:none;position:relative;background-color:#f27225;transition:all 0.5s}#glm-member-packaging-front-container .glm-member-db-takeback-mini:hover{transition:all 0.5s;background-color:#f5ad1a}#glm-member-packaging-front-container #glm-member-detail-contact-info small{color:#000000}#eventCalendar{}#eventCalendar .fc-toolbar{}#eventCalendar .fc-view-container{}#glm-blocks-wrapper{background-color:#EDF6F5;float:left;width:100%}.glm-blocks-container{padding:40px 0;max-width:1024px}.glm-blocks-container .glm-block-image{position:relative}.glm-blocks-container .glm-block-image img{float:left;width:100%}.glm-blocks-container .glm-block-title h1{margin:0;background-color:#85111A;text-align:center;letter-spacing:0;padding:10px;font-weight:bold;line-height:1;font-size:24px;position:relative;border-bottom-left-radius:25%;border-bottom-right-radius:25%}.glm-blocks-container .glm-block-title h1::after{content:url(../assets/bottom.png);width:100%;height:40px;right:50%;left:0;position:absolute;top:100%;line-height:0}.glm-blocks-container .glm-block{position:relative;margin-bottom:20px}@media only screen and (max-width: 40em){.glm-blocks-container .glm-block{position:relative;margin-bottom:20px;max-width:400px;margin:0 auto 20px;float:none !important;}}.page-inside .glm-blocks-container .glm-block-title h1{font-weight:normal;font-size:20px}.glm-block-video-arrow{width:0;height:0;position:absolute;border-top:30px solid transparent;border-bottom:30px solid transparent;border-left:50px solid white;left:50%;top:50%;transform:translate(-50%, -50%);pointer-events:none}#event-feed-row .main-events-container{padding:5px 30px}#event-feed-row .slick-next{right:-20px}.home-feed-post{padding-bottom:25px}input[type="submit"].blogbutton{border-radius:3px;color:#FFFFFF;border:2px solid #FFFFFF;font-weight:bold;font-size:13px;padding:2px 5px;margin-top:-10px;text-transform:uppercase}input[type="submit"].blogbutton:hover{cursor:pointer;background:#FFFFFF;border:2px solid #035C84;color:white}.addthis_wrapper{float:right;display:inline-block;margin-top:5px}#blog-posts-over article{padding-top:10px;margin-bottom:15px;display:inline-block;width:100%}#blog-posts-over article .entry-header{background:transparent}#blog-posts-over article .addthis_wrapper{float:right}#blog-posts-over article h1{letter-spacing:1px;line-height:1.2}#blog-posts-over article p{padding-bottom:15px}#blog-posts-over article a.read-more{border:2px solid #FFFFFF;font-weight:bold;font-size:13px;padding:0 3px;text-transform:uppercase}#blog-posts-over article a.read-more:hover{background:#FFFFFF;border:2px solid #035C84;color:#035C84}#blog-posts-over article .entry-header{margin-bottom:10px}#blog-posts-over article .entry-header .entry-title{margin-bottom:0}#blog-posts-over article .entry-header .meta.date{font-size:13px;font-weight:bold}#blog-posts-over .entry-meta{text-align:center;color:#757575;font-size:12px}#blog-posts-over>div{margin:25px 0}#blog-side-info ul li{line-height:1.2;margin-bottom:10px}#blog-side-info #searchform{margin-bottom:30px}#blog-side-info p{margin-bottom:0}@media only screen and (max-width: 40em){#blog-side-info-wrapper{float:none;margin:0 auto;clear:both}#blog-side-info{padding-left:0;border-left:0}#blog-side-info ul{margin-left:0;margin-top:10px}#blog-side-info #searchform{padding:35px 0}#blog-side-info #searchform #s{width:100%}}#blog-side-info{padding-right:10px}#blog-side-info ul{list-style-type:none}.blog-archive .featured-image-wrap,.blog-home .featured-image-wrap{display:none}#sidebar{padding-top:25px;background:#f2f9fc}#sidebar .row.collapse{margin-left:14px}#sidebar li{list-style:none}#sidebar li #calendar_wrap table#wp-calendar{margin:0 auto}#sidebar a{font-size:12px}#sidebar form{margin:0 12px 0 14px}#sidebar form select{padding:0 0.5rem;border-radius:5px;height:25px;margin:0}#sidebar form select option{font-size:10px}#sidebar .small-block-grid-2{margin-top:10px}#sidebar .small-block-grid-2 li{padding:0 0.625rem 0.625rem}#sidebar .small-block-grid-2 li img{border:2px solid lightblue}#sidebar .small-block-grid-2>li:nth-of-type(2),#sidebar .small-block-grid-2>li:nth-of-type(4){padding-left:0}#sidebar .small-block-grid-2>li:nth-of-type(3),#sidebar .small-block-grid-2>li:nth-of-type(4){padding-bottom:20px}#sidebar h3{margin:20px 0 0}#sidebar h1{margin:0;font-size:1.5625rem;text-transform:none}#sidebar input{padding:5px 0 5px 8px;height:auto;margin:10px 0}#sidebar button{border-radius:2px;padding:0 10px}#side-nav{padding-top:10px;background:#f2f9fc}#side-nav h1{font-size:1.375rem}#side-nav h4{font-weight:bold;margin-left:10px}#side-nav li{list-style:none}#side-nav ul{list-style:none;margin:0 0 20px}#side-nav ul li{margin:0 -15px;padding:5px 10px 5px 25px}#side-nav ul li:hover{background:#81adc1}#side-nav ul li a{color:darkblue}#side-nav ul li a:hover{color:#FFFFFF}#side-nav h3{text-transform:none;margin:0}#side-nav input{padding:5px 0 5px 8px;height:auto;margin-bottom:10px}#side-nav button{border-radius:2px;padding:0 10px}#extra{margin-top:15px}#extra p{line-height:1.3}#extra p.title{margin:0}#extra p.title#last{padding-top:10px}#extra p#message{text-transform:uppercase;color:lightblue;font-size:0.9375rem;margin:40px 0}.county-news{font-weight:bold}.current_page_item>a{font-weight:bold}.search-top #searchform{text-align:left;display:inline-block;position:relative}.search-top #searchform #search-button{width:22px;right:0px;position:absolute;padding:0;border:1px solid lightgray}.search-top input{height:20px;width:167px;padding:0 8px;margin:13px 0px 0px 18px;border-radius:3px;font-size:10px;color:#000000;display:inline-block}.search-top a.magnifying-glass{font-size:10em;width:0.75rem;height:0.75rem;border:0.125rem solid darkblue;position:absolute;top:15px;border-radius:0.35em;margin:0 0 0 -20px}.search-top a.magnifying-glass:before{content:"";display:inline-block;position:absolute;right:-0.4375rem;bottom:-0.25rem;border-width:0;background:darkblue;width:0.5rem;height:0.125rem;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}.search-results #blog-posts-over .search-result-container header.entry-header{margin-bottom:0px}.search-results #blog-posts-over .search-result-container .search_result_context{margin:0;padding:0;line-height:1.3}.search-results #blog-posts-over .search-result-container article p{margin:0;padding:0}#searchWrapper{position:relative}#searchContainer{position:absolute;right:10px;top:10px;z-index:2}#searchContainer #headerSearch{border-radius:3px;height:25px;padding:0 0 0 8px;margin-bottom:0px}@media only screen and (min-width:0em) and (max-width:64em){#searchContainer #headerSearch{display:none;}}.searchformHeader{height:18px}#magnifying-glass{font-size:10em;display:inline-block;height:13px;position:relative;border-radius:0.35em;left:10.5rem;top:-22px;margin-top:1px;padding:0;width:13px;bottom:-0.8125rem;border:0.125rem solid #85111A}.searchformHeader input[type="submit"]{cursor:cursor;cursor:hand;position:absolute;right:5px;width:10px;top:29px;background:transparent;height:20px;color:transparent;padding:6px 10px;border:medium none;margin:0px 0px 0px -25px;display:none !important}#magnifying-glass::before{content:"";display:inline-block;position:absolute;bottom:-0.25rem;border-width:0px;background:#85111A none repeat scroll 0% 0%;transform:rotate(135deg);height:0.125rem;width:0.5rem;left:-0.4375rem}footer.main{bottom:0;left:0;right:0}@media only screen and (max-width: 1024px){footer.main{position:relative;bottom:0;}}#footer-top #footer-guide p{margin:0}#footer-top #footer-guide .footer-guide-text-wrapper{float:left;padding:20px 15px}#footer-top #footer-guide .footer-guide-text-wrapper .footer-guide-text{color:#f27225;font-size:24px;line-height:1.2;margin-bottom:15px}#footer-top #footer-guide .footer-guide-text-wrapper .footer-guide-links a{color:#00aeef;font-size:18px;text-transform:uppercase}#footer-top #footer-guide .footer-guide-text-wrapper .footer-guide-links .separator{color:#00aeef;font-size:18px;padding:4px}#footer-top #footer-guide .footer-guide-image-wrapper{float:left}#footer-social{padding:15px}#footer-social .footer-social-text{color:#85111A;font-size:24px;line-height:1.2;margin-bottom:15px}#footer-social .footer-social-icon{background-image:url("../assets/social-icons.png");height:32px;width:32px;display:block;float:left;margin-right:25px;margin-bottom:15px}@media only screen and (min-width:0em) and (max-width:64em){#footer-social .footer-social-icon{margin-right:10px;}}#footer-social #facebook{background-position:0 0}#footer-social #instagram{background-position:-79px 0}#footer-social #travel-advisor{background-position:-259px 0}#footer-social #blog{background-position:-304px 0}#footer-newsletter-wrapper{width:100%;height:auto;background-color:#17274B;position:relative}#footer-newsletter-wrapper .footer-newsletter-title{width:80%;color:#EDF6F5;float:left;font-weight:bold;letter-spacing:1px;line-height:1}#footer-newsletter-wrapper .footer-newsletter-text{width:80%;color:#FFFFFF;float:left;font-size:18px;margin-bottom:0}#footer-newsletter-wrapper .footer-newsletter-button{position:absolute;right:5%;top:35px;display:inline;background-color:#EDF6F5;color:#85111A;padding:5px 18px;text-transform:uppercase;line-height:1;font-weight:bold;letter-spacing:1px;transition:all 0.5s}#footer-newsletter-wrapper .footer-newsletter-button:hover{background-color:#FFFFFF;color:#17274B;transition:all 0.5s}#footer-newsletter{padding:15px;position:relative}#footer-weather-address-wrapper{height:200px;position:relative;background-color:#FAFAFA;border-top:4px solid #17274B;border-bottom:4px solid #17274B;background:url(../assets/footer.jpg) no-repeat center 85%;background-size:cover}#footer-weather-address-wrapper #footer-overlay{position:absolute;height:100%;width:100%;background-color:rgba(255,255,255,0.85)}#footer-weather-address-container{background-color:transparent;position:absolute;top:50%;left:50%;transform:translate(-50%, -50%)}#footer-weather{text-align:center}#footer-weather .footer-weather-logo img{text-align:center;margin-bottom:20px}#footer-weather .footer-pure-michigan-logo{float:right}#footer-weather .footer-pure-michigan-logo img{max-width:160px;margin-top:35px}@media only screen and (min-width:0em) and (max-width:64em){#footer-weather .footer-pure-michigan-logo img{margin-top:55px;}}#footer-weather #weather-widget{position:absolute;display:none;width:264px;height:200px;bottom:210px;left:60%;transform:translateX(-50%)}@media only screen and (min-width:0em) and (max-width:64em){#footer-weather #weather-widget{bottom:210px;}}#footer-weather #weather-widget:after{content:url(../assets/weather-arrow-down.png);position:absolute;top:245px;left:45%}@media only screen and (min-width:0em) and (max-width:64em){#footer-weather #weather-widget:after{top:245px;left:81px;}}#footer-weather #weather-widget .wu-wrapper{border:3px solid #85111A;background:white;width:255px;height:255px}#footer-address{color:#17274B;text-align:center}@media only screen and (min-width:40.063em) and (max-width:64em){#footer-address{line-height:1.0;}}#footer-address a{color:#85111A;text-decoration:underline}#footer-address a:hover{color:#85111A}#footer-address span{color:#17274B;white-space:nowrap}#footer-address h2{color:#85111A;font-size:20px;font-weight:bold;letter-spacing:0;line-height:1.0}#footer-logo{text-align:center;padding-top:35px}#connect{padding-top:20px;background:#4c4d4f}#connect ul{margin:0;list-style:none}#connect ul li{background:none;padding:0 5px;display:inline-block}#connect ul li>a{display:block;font-family:Open Sans, sans-serif;font-size:12px;color:#fff;padding:20px 18px;line-height:1.2}#connect ul li a#current{background:#0093d1}#copyright{padding-top:10px;color:#17274B;float:none;line-height:1.0;margin:0 auto}@media only screen and (min-width:64.063em){#copyright{padding-top:30px;}}#copyright span{font-size:0.625rem}#copyright a{color:#17274B;text-decoration:underline}#footer_address span.bullet,#copyright span.bullet{margin:0 5px}@media only screen and (max-width: 40em){#footer_address span.bullet,#copyright span.bullet{display:none !important;}}h1{color:#FFFFFF;font-family:'Times New Roman', Times, serif;font-size:36px;letter-spacing:4px;text-decoration:uppercase}h2{color:#FFFFFF;font-family:'Times New Roman', Times, serif;font-size:36px;letter-spacing:4px}h3{color:#486b71;font-family:'Times New Roman', Times, serif;font-size:30px;font-weight:bold}h4{color:#486b71;font-family:'Times New Roman', Times, serif;font-size:24px;font-weight:bold;letter-spacing:4px}h5{color:#f27225;font-family:'Times New Roman', Times, serif;font-size:24px}h6{color:#f5ad1a;font-family:'Times New Roman', Times, serif;font-size:18px;font-weight:bold}.off-canvas-wrap{min-height:100%}.off-canvas-wrap .inner-wrap{min-height:100vh;height:100%}#example.element{background-color:transparent}aside.left-off-canvas-menu{background-color:#486b71}aside.left-off-canvas-menu .search-button{background-color:#f27225;margin:0 auto;display:block}#left-off-canvas-client-info{float:left}#left-off-canvas-client-info li{color:white;line-height:1.2;margin-bottom:5px}#off-canvas-social{padding:15px 55px}#off-canvas-social .footer-social-text{color:#f27225;font-size:24px;line-height:1.2;margin-bottom:15px}#off-canvas-social .footer-social-icon{background-image:url("../assets/social-icons.png");height:56px;width:56px;display:block;float:left;margin-right:6px;margin-bottom:15px;margin-left:6px}#off-canvas-social #facebook{background-position:0 0}#off-canvas-social #instagram{background-position:-79px 0}#off-canvas-social #travel-advisor{background-position:-158px 0}#off-canvas-social #blog{background-position:-237px 0}aside.left-off-canvas-menu li.page_item{display:block;overflow:hidden;position:relative;padding:4px 8px}aside.left-off-canvas-menu .left-off-canvas-list ul li a{color:white}aside.left-off-canvas-menu .left-off-canvas-list ul li a:hover{color:#f5ad1a}aside.left-off-canvas-menu li.page_item_has_children a.toggle{position:absolute;right:10px;top:5px;width:auto;text-decoration:none}aside.left-off-canvas-menu li.page_item_has_children a.toggle:before{content:'>';transform:rotate(0deg);color:#FFFFFF;height:17px;width:17px;font-size:17px;font-weight:bold;display:block}aside.left-off-canvas-menu li.page_item_has_children a.toggle:hover{background:transparent}aside.left-off-canvas-menu li.page_item_has_children a.toggle.open{content:'>';transform:rotate(90deg);color:#FFFFFF;height:1rem;width:1rem;font-size:1rem;font-weight:bold;display:block}aside.left-off-canvas-menu ul.children{display:none}aside.left-off-canvas-menu .off-canvas-list ul li>ul li>a{padding-left:10px;margin-left:25px;line-height:18px}aside.left-off-canvas-menu ul.open{display:block}.left-off-canvas-menu{list-style:none}.left-off-canvas-menu li a{color:#FFFFFF;font-size:1rem;line-height:1.2;border-color:white;margin-bottom:5px}.left-off-canvas-menu li a:hover{color:black}.left-off-canvas-menu li .dropdown{list-style:none}.left-off-canvas-menu ul{list-style:none;padding:10px 0}.left-off-canvas-menu ul li a{color:#FFFFFF}.left-off-canvas-menu ul li ul{list-style:none}.left-off-canvas-menu ul li ul li a{width:85%;display:block;white-space:pre-wrap}.offcavas-social-list{list-style:none;margin-top:0;margin-bottom:1.0625rem;margin-left:-1.375rem;margin-right:0;overflow:hidden;padding:0;margin-left:auto}.offcavas-social-list>li{display:block;float:left;list-style:none;margin-left:1.375rem}.offcavas-social-list>li>*{display:block}
\ No newline at end of file
diff --git a/css/editor-style.css b/css/editor-style.css
deleted file mode 100644 (file)
index 7082fc6..0000000
+++ /dev/null
@@ -1,759 +0,0 @@
-/**
- * Table of Contents:
- *
- * 1.0 - Body
- * 2.0 - Headings
- * 3.0 - Text Elements
- * 4.0 - Links
- * 5.0 - Alignment
- * 6.0 - Tables
- * 7.0 - Images
- * 8.0 - Galleries
- * 9.0 - Audio/Video
- * 10.0 - Post Formats
- * 11.0 - RTL
- * ----------------------------------------------------------------------------
- */
-
-
-/**
- * 1.0 Body
- * ----------------------------------------------------------------------------
- */
-
-html .mceContentBody {
-       font-size: 100%;
-}
-
-body {
-       color: #141412;
-       font-family: "Source Sans Pro", Helvetica, sans-serif;
-       line-height: 1.5;
-       text-rendering: optimizeLegibility;
-       vertical-align: baseline;
-}
-
-
-/**
- * 2.0 Headings
- * ----------------------------------------------------------------------------
- */
-
-h1,
-h2,
-h3,
-h4,
-h5,
-h6 {
-       clear: both;
-       line-height: 1.3;
-}
-
-h1 {
-       font-size: 36px;
-       margin: 0 0 15px;
-}
-
-h2 {
-       font-size: 30px;
-       margin: 0 0 15px;
-}
-
-h3 {
-       font-size: 26px;
-       margin: 0 0 15px;
-}
-
-h4 {
-       font-size: 20px;
-       margin: 0 0 15px;
-}
-
-h5 {
-       font-size: 18px;
-       margin: 0 0 15px;
-}
-
-h6 {
-       font-size: 16px;
-       margin: 0 0 15px;
-}
-
-hr {
-       margin: 20px 0;
-}
-
-
-/**
- * 3.0 Text Elements
- * ----------------------------------------------------------------------------
- */
-
-p {
-       margin: 0 0 24px;
-}
-
-ol,
-ul {
-       margin: 16px 0;
-       padding: 0 0 0 40px;
-}
-
-ul {
-       list-style-type: square;
-}
-
-ol {
-       list-style: decimal outside;
-}
-
-li > ul,
-li > ol {
-       margin: 0;
-}
-
-dl {
-       margin: 0 20px;
-}
-
-dt {
-       font-weight: bold;
-}
-
-dd {
-       margin: 0 0 20px;
-}
-
-strong {
-       font-weight: bold;
-}
-
-code,
-kbd,
-pre,
-samp {
-       font-family: monospace, serif;
-       font-size: 14px;
-}
-
-pre {
-       background: #f5f5f5;
-       color: #666;
-       font-family: monospace;
-       font-size: 14px;
-       margin: 20px 0;
-       overflow: auto;
-       padding: 20px;
-       white-space: pre;
-       white-space: pre-wrap;
-       word-wrap: break-word;
-}
-
-blockquote,
-q {
-       quotes: none;
-}
-
-blockquote:before,
-blockquote:after,
-q:before,
-q:after {
-       content: "";
-       content: none;
-}
-
-blockquote {
-       font-size: 24px;
-       font-style: italic;
-       font-weight: 300;
-       margin: 24px 40px;
-}
-
-blockquote blockquote {
-       margin-right: 0;
-}
-
-blockquote cite,
-blockquote small {
-       font-size: 14px;
-       font-weight: normal;
-       text-transform: uppercase;
-}
-
-cite {
-       border-bottom: 0;
-}
-
-abbr[title] {
-       border-bottom: 1px dotted;
-}
-
-address {
-       font-style: italic;
-       margin: 0 0 24px;
-}
-
-del {
-       color: #333;
-}
-
-ins {
-       background: #fff9c0;
-       border: none;
-       color: #333;
-       text-decoration: none;
-}
-
-sub,
-sup {
-       font-size: 75%;
-       line-height: 0;
-       position: relative;
-       vertical-align: baseline;
-}
-
-sup {
-       top: -0.5em;
-}
-
-sub {
-       bottom: -0.25em;
-}
-
-
-/**
- * 4.0 Links
- * ----------------------------------------------------------------------------
- */
-
-a {
-       color: #ca3c08;
-       text-decoration: none;
-}
-
-a:visited {
-       color: #ac0404;
-}
-
-a:focus {
-       outline: thin dotted;
-}
-
-a:active,
-a:hover {
-       color: #ea9629;
-       outline: 0;
-}
-
-a:hover {
-       text-decoration: underline;
-}
-
-
-/**
- * 5.0 Alignment
- * ----------------------------------------------------------------------------
- */
-
-.alignleft {
-       float: left;
-       margin: 5px 20px 5px 0;
-}
-
-.alignright {
-       float: right;
-       margin: 5px 0 5px 20px;
-}
-
-.aligncenter {
-       display: block;
-       margin: 5px auto;
-}
-
-img.alignnone {
-       margin: 5px 0;
-}
-
-
-/**
- * 6.0 Tables
- * ----------------------------------------------------------------------------
- */
-
-table {
-       border-bottom: 1px solid #ededed;
-       border-collapse: collapse;
-       border-spacing: 0;
-       font-size: 14px;
-       line-height: 2;
-       margin: 0 0 20px;
-       width: 100%;
-}
-
-caption,
-th,
-td {
-       font-weight: normal;
-       text-align: left;
-}
-
-caption {
-       font-size: 16px;
-       margin: 20px 0;
-}
-
-th {
-       font-weight: bold;
-       text-transform: uppercase;
-}
-
-td {
-       border-top: 1px solid #ededed;
-       padding: 6px 10px 6px 0;
-}
-
-
-/**
- * 7.0 Images
- * ----------------------------------------------------------------------------
- */
-
-img {
-       height: auto;
-       max-width: 100%;
-       vertical-align: middle;
-}
-
-.wp-caption {
-       background: transparent;
-       border: none;
-       margin: 0;
-       padding: 0;
-       text-align: left;
-}
-
-.html5-captions .wp-caption {
-       padding: 0;
-}
-
-.wp-caption.alignleft {
-       margin: 5px 10px 5px 0;
-}
-
-.html5-captions .wp-caption.alignleft {
-       margin-right: 20px;
-}
-
-.wp-caption.alignright {
-       margin: 5px 0 5px 10px;
-}
-
-.wp-caption.alignright img,
-.wp-caption.alignright .wp-caption-dd {
-       padding-left: 10px;
-}
-
-.html5-captions .wp-caption.alignright {
-       margin-left: 20px;
-}
-
-.html5-captions .wp-caption.alignright img,
-.html5-captions .wp-caption.alignright .wp-caption-dd {
-       padding: 0;
-}
-
-.wp-caption-dt {
-       margin: 0;
-}
-
-.wp-caption .wp-caption-text,
-.wp-caption-dd {
-       color: #220e10;
-       font-size: 18px;
-       font-style: italic;
-       font-weight: 300;
-       line-height: 1.5;
-       margin-bottom: 24px;
-       padding: 0;
-}
-
-.mceTemp + ul,
-.mceTemp + ol {
-       list-style-position: inside;
-}
-
-
-/**
- * 8.0 Galleries
- * ----------------------------------------------------------------------------
- */
-
-.gallery .gallery-item {
-       float: left;
-       margin: 0 4px 4px 0;
-       overflow: hidden;
-       padding: 0;
-       position: relative;
-}
-
-.gallery-columns-1 .gallery-item {
-       max-width: 100%;
-       width: auto;
-}
-
-.gallery-columns-2 .gallery-item {
-       max-width: 48%;
-       max-width: -webkit-calc(50% - 14px);
-       max-width:         calc(50% - 14px);
-       width: auto;
-}
-
-.gallery-columns-3 .gallery-item {
-       max-width: 32%;
-       max-width: -webkit-calc(33.3% - 11px);
-       max-width:         calc(33.3% - 11px);
-       width: auto;
-}
-
-.gallery-columns-4 .gallery-item {
-       max-width: 23%;
-       max-width: -webkit-calc(25% - 9px);
-       max-width:         calc(25% - 9px);
-       width: auto;
-}
-
-.gallery-columns-5 .gallery-item {
-       max-width: 19%;
-       max-width: -webkit-calc(20% - 8px);
-       max-width:         calc(20% - 8px);
-       width: auto;
-}
-
-.gallery-columns-6 .gallery-item {
-       max-width: 15%;
-       max-width: -webkit-calc(16.7% - 7px);
-       max-width:         calc(16.7% - 7px);
-       width: auto;
-}
-
-.gallery-columns-7 .gallery-item {
-       max-width: 13%;
-       max-width: -webkit-calc(14.28% - 7px);
-       max-width:         calc(14.28% - 7px);
-       width: auto;
-}
-
-.gallery-columns-8 .gallery-item {
-       max-width: 11%;
-       max-width: -webkit-calc(12.5% - 6px);
-       max-width:         calc(12.5% - 6px);
-       width: auto;
-}
-
-.gallery-columns-9 .gallery-item {
-       max-width: 9%;
-       max-width: -webkit-calc(11.1% - 6px);
-       max-width:         calc(11.1% - 6px);
-       width: auto;
-}
-
-.gallery-columns-1 .gallery-item:nth-of-type(1n),
-.gallery-columns-2 .gallery-item:nth-of-type(2n),
-.gallery-columns-3 .gallery-item:nth-of-type(3n),
-.gallery-columns-4 .gallery-item:nth-of-type(4n),
-.gallery-columns-5 .gallery-item:nth-of-type(5n),
-.gallery-columns-6 .gallery-item:nth-of-type(6n),
-.gallery-columns-7 .gallery-item:nth-of-type(7n),
-.gallery-columns-8 .gallery-item:nth-of-type(8n),
-.gallery-columns-9 .gallery-item:nth-of-type(9n) {
-       margin-right: 0;
-}
-
-.gallery-columns-1 .gallery-item:nth-of-type(1n),
-.gallery-columns-2 .gallery-item:nth-of-type(2n - 1),
-.gallery-columns-3 .gallery-item:nth-of-type(3n - 2),
-.gallery-columns-4 .gallery-item:nth-of-type(4n - 3),
-.gallery-columns-5 .gallery-item:nth-of-type(5n - 4),
-.gallery-columns-6 .gallery-item:nth-of-type(6n - 5),
-.gallery-columns-7 .gallery-item:nth-of-type(7n - 6),
-.gallery-columns-8 .gallery-item:nth-of-type(8n - 7),
-.gallery-columns-9 .gallery-item:nth-of-type(9n - 8) {
-       margin-left: 12px; /* Compensate for the default negative margin on .gallery, which can't be changed. */
-}
-
-.gallery .gallery-caption {
-       background-color: rgba(0, 0, 0, 0.7);
-       box-sizing: border-box;
-       color: #fff;
-       font-size: 14px;
-       line-height: 1.3;
-       margin: 0;
-       max-height: 50%;
-       opacity: 0;
-       padding: 2px 8px;
-       position: absolute;
-       bottom: 0;
-       left: 0;
-       text-align: left;
-       -webkit-transition: opacity 400ms ease;
-       transition:         opacity 400ms ease;
-       width: 100%;
-}
-
-.gallery .gallery-caption:before {
-       box-shadow: 0 -10px 15px #000 inset;
-       content: "";
-       height: 100%;
-       min-height: 49px;
-       position: absolute;
-       left: 0;
-       top: 0;
-       width: 100%;
-}
-
-.gallery-item:hover .gallery-caption {
-       opacity: 1;
-}
-
-.gallery-columns-7 .gallery-caption,
-.gallery-columns-8 .gallery-caption,
-.gallery-columns-9 .gallery-caption {
-       display: none;
-}
-
-
-/**
- * 9.0 Audio/Video
- * ----------------------------------------------------------------------------
- */
-.mejs-mediaelement,
-.mejs-container .mejs-controls {
-       background: #220e10;
-}
-
-.mejs-controls .mejs-time-rail .mejs-time-loaded,
-.mejs-controls .mejs-horizontal-volume-slider .mejs-horizontal-volume-current {
-       background: #fff;
-}
-
-.mejs-controls .mejs-time-rail .mejs-time-current {
-       background: #ea9629;
-}
-
-.mejs-controls .mejs-time-rail .mejs-time-total,
-.mejs-controls .mejs-horizontal-volume-slider .mejs-horizontal-volume-total {
-       background: #595959;
-}
-
-.mejs-controls .mejs-time-rail span,
-.mejs-controls .mejs-horizontal-volume-slider .mejs-horizontal-volume-total,
-.mejs-controls .mejs-horizontal-volume-slider .mejs-horizontal-volume-current {
-       border-radius: 0;
-}
-
-
-/**
- * 10.0 Post Formats
- * ----------------------------------------------------------------------------
- */
-
-/* Aside */
-.post-format-aside {
-       background-color: #f7f5e7;
-}
-
-.post-format-aside blockquote {
-       font-size: 100%;
-       font-weight: normal;
-}
-
-.post-format-aside cite {
-       font-size: 100%;
-       text-transform: none;
-}
-
-.post-format-aside cite:before {
-       content: "\2014";
-       margin-right: 5px;
-}
-
-/* Audio */
-.post-format-audio {
-       background-color: #db572f;
-}
-
-.post-format-audio a {
-       color: #fbfaf3;
-}
-
-.post-format-audio:before {
-       background: url(../images/dotted-line.png) repeat-y 85px 0;
-       background-size: 4px 4px;
-       content: "\f109";
-       display: block;
-       float: left;
-       font-family: Genericons;
-       font-size: 64px;
-       -webkit-font-smoothing: antialiased;
-       height: 100%;
-       line-height: 1;
-       width: 120px;
-}
-
-/* Chat */
-.post-format-chat {
-       background-color: #eadaa6;
-}
-
-.post-format-chat a {
-       color: #722d19;
-}
-
-/* Gallery */
-.post-format-gallery {
-       background-color: #fbca3c;
-}
-
-.post-format-gallery a {
-       color: #722d19;
-}
-
-/* Image: same as Standard/Defaults */
-
-/* Link */
-.post-format-link {
-       background-color: #f7f5e7;
-}
-
-/* Quote */
-.post-format-quote {
-       background-color: #210d10;
-       color: #f7f5e7;
-}
-
-.post-format-quote a {
-       color: #e63f2a;
-}
-
-.post-format-quote blockquote {
-       font-size: 28px;
-       font-style: italic;
-       font-weight: 300;
-       margin: 0;
-       padding-left: 75px;
-       position: relative;
-}
-
-.post-format-quote blockquote:before {
-       content: '\201C';
-       font-size: 140px;
-       font-weight: 400;
-       line-height: .8;
-       padding-right: 25px;
-       position: absolute;
-       left: -15px;
-       top: -3px;
-}
-
-.post-format-quote blockquote small,
-.post-format-quote blockquote cite {
-       display: block;
-       font-size: 16px;
-}
-
-.format-quote .entry-content cite a {
-       border-bottom: 1px dotted #fff;
-       color: #fff;
-}
-
-.format-quote .entry-content cite a:hover {
-       text-decoration: none;
-}
-
-
-/* Status */
-.post-format-status {
-       background-color: #722d19;
-       color: #f7f5e7;
-       font-style: italic;
-       font-weight: 300;
-       padding: 0;
-       padding-left: 35px;
-}
-
-.post-format-status.mceContentBody {
-       font-size: 24px;
-}
-
-.post-format-status:before {
-       background: url(../images/dotted-line.png) repeat-y left bottom;
-       background-size: 4px 4px;
-       content: "";
-       display: block;
-       float: left;
-       height: 100%;
-       position: relative;
-       left: -30px;
-       width: 1px;
-}
-
-.post-format-status > p:first-child:before {
-       background-color: rgba(0, 0, 0, 0.65);
-       content: "";
-       height: 3px;
-       width: 13px;
-       margin-top: 13px;
-       position: absolute;
-       left: 9px;
-}
-
-.post-format-status a {
-       color: #eadaa6;
-}
-
-/* Video */
-.post-format-video {
-       background-color: #db572f;
-}
-
-.post-format-video a {
-       color: #fbfaf3;
-}
-
-
-/**
- * 11.0 RTL
- * ----------------------------------------------------------------------------
- */
-
-html .mceContentBody.rtl {
-       direction: rtl;
-       unicode-bidi: embed;
-}
-
-.rtl ol,
-.rtl ul {
-       padding: 0 40px 0 0;
-}
-
-.rtl .wp-caption,
-.rtl tr th {
-       text-align: right;
-}
-
-.rtl td {
-       padding: 6px 0 6px 10px;
-       text-align: right;
-}
-
-.rtl blockquote blockquote {
-       margin-left: 0;
-       margin-right: 24px;
-}
-
-.rtl.post-format-audio:before,
-.rtl.post-format-status:before,
-.rtl.post-format-status > p:first-child:before {
-       background: none;
-       content: none;
-}
diff --git a/css/fontawesome/css/font-awesome.css b/css/fontawesome/css/font-awesome.css
deleted file mode 100644 (file)
index ee906a8..0000000
+++ /dev/null
@@ -1,2337 +0,0 @@
-/*!
- *  Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome
- *  License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
- */
-/* FONT PATH
- * -------------------------- */
-@font-face {
-  font-family: 'FontAwesome';
-  src: url('../fonts/fontawesome-webfont.eot?v=4.7.0');
-  src: url('../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'), url('../fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'), url('../fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'), url('../fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'), url('../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg');
-  font-weight: normal;
-  font-style: normal;
-}
-.fa {
-  display: inline-block;
-  font: normal normal normal 14px/1 FontAwesome;
-  font-size: inherit;
-  text-rendering: auto;
-  -webkit-font-smoothing: antialiased;
-  -moz-osx-font-smoothing: grayscale;
-}
-/* makes the font 33% larger relative to the icon container */
-.fa-lg {
-  font-size: 1.33333333em;
-  line-height: 0.75em;
-  vertical-align: -15%;
-}
-.fa-2x {
-  font-size: 2em;
-}
-.fa-3x {
-  font-size: 3em;
-}
-.fa-4x {
-  font-size: 4em;
-}
-.fa-5x {
-  font-size: 5em;
-}
-.fa-fw {
-  width: 1.28571429em;
-  text-align: center;
-}
-.fa-ul {
-  padding-left: 0;
-  margin-left: 2.14285714em;
-  list-style-type: none;
-}
-.fa-ul > li {
-  position: relative;
-}
-.fa-li {
-  position: absolute;
-  left: -2.14285714em;
-  width: 2.14285714em;
-  top: 0.14285714em;
-  text-align: center;
-}
-.fa-li.fa-lg {
-  left: -1.85714286em;
-}
-.fa-border {
-  padding: .2em .25em .15em;
-  border: solid 0.08em #eeeeee;
-  border-radius: .1em;
-}
-.fa-pull-left {
-  float: left;
-}
-.fa-pull-right {
-  float: right;
-}
-.fa.fa-pull-left {
-  margin-right: .3em;
-}
-.fa.fa-pull-right {
-  margin-left: .3em;
-}
-/* Deprecated as of 4.4.0 */
-.pull-right {
-  float: right;
-}
-.pull-left {
-  float: left;
-}
-.fa.pull-left {
-  margin-right: .3em;
-}
-.fa.pull-right {
-  margin-left: .3em;
-}
-.fa-spin {
-  -webkit-animation: fa-spin 2s infinite linear;
-  animation: fa-spin 2s infinite linear;
-}
-.fa-pulse {
-  -webkit-animation: fa-spin 1s infinite steps(8);
-  animation: fa-spin 1s infinite steps(8);
-}
-@-webkit-keyframes fa-spin {
-  0% {
-    -webkit-transform: rotate(0deg);
-    transform: rotate(0deg);
-  }
-  100% {
-    -webkit-transform: rotate(359deg);
-    transform: rotate(359deg);
-  }
-}
-@keyframes fa-spin {
-  0% {
-    -webkit-transform: rotate(0deg);
-    transform: rotate(0deg);
-  }
-  100% {
-    -webkit-transform: rotate(359deg);
-    transform: rotate(359deg);
-  }
-}
-.fa-rotate-90 {
-  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";
-  -webkit-transform: rotate(90deg);
-  -ms-transform: rotate(90deg);
-  transform: rotate(90deg);
-}
-.fa-rotate-180 {
-  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";
-  -webkit-transform: rotate(180deg);
-  -ms-transform: rotate(180deg);
-  transform: rotate(180deg);
-}
-.fa-rotate-270 {
-  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";
-  -webkit-transform: rotate(270deg);
-  -ms-transform: rotate(270deg);
-  transform: rotate(270deg);
-}
-.fa-flip-horizontal {
-  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";
-  -webkit-transform: scale(-1, 1);
-  -ms-transform: scale(-1, 1);
-  transform: scale(-1, 1);
-}
-.fa-flip-vertical {
-  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";
-  -webkit-transform: scale(1, -1);
-  -ms-transform: scale(1, -1);
-  transform: scale(1, -1);
-}
-:root .fa-rotate-90,
-:root .fa-rotate-180,
-:root .fa-rotate-270,
-:root .fa-flip-horizontal,
-:root .fa-flip-vertical {
-  filter: none;
-}
-.fa-stack {
-  position: relative;
-  display: inline-block;
-  width: 2em;
-  height: 2em;
-  line-height: 2em;
-  vertical-align: middle;
-}
-.fa-stack-1x,
-.fa-stack-2x {
-  position: absolute;
-  left: 0;
-  width: 100%;
-  text-align: center;
-}
-.fa-stack-1x {
-  line-height: inherit;
-}
-.fa-stack-2x {
-  font-size: 2em;
-}
-.fa-inverse {
-  color: #ffffff;
-}
-/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
-   readers do not read off random characters that represent icons */
-.fa-glass:before {
-  content: "\f000";
-}
-.fa-music:before {
-  content: "\f001";
-}
-.fa-search:before {
-  content: "\f002";
-}
-.fa-envelope-o:before {
-  content: "\f003";
-}
-.fa-heart:before {
-  content: "\f004";
-}
-.fa-star:before {
-  content: "\f005";
-}
-.fa-star-o:before {
-  content: "\f006";
-}
-.fa-user:before {
-  content: "\f007";
-}
-.fa-film:before {
-  content: "\f008";
-}
-.fa-th-large:before {
-  content: "\f009";
-}
-.fa-th:before {
-  content: "\f00a";
-}
-.fa-th-list:before {
-  content: "\f00b";
-}
-.fa-check:before {
-  content: "\f00c";
-}
-.fa-remove:before,
-.fa-close:before,
-.fa-times:before {
-  content: "\f00d";
-}
-.fa-search-plus:before {
-  content: "\f00e";
-}
-.fa-search-minus:before {
-  content: "\f010";
-}
-.fa-power-off:before {
-  content: "\f011";
-}
-.fa-signal:before {
-  content: "\f012";
-}
-.fa-gear:before,
-.fa-cog:before {
-  content: "\f013";
-}
-.fa-trash-o:before {
-  content: "\f014";
-}
-.fa-home:before {
-  content: "\f015";
-}
-.fa-file-o:before {
-  content: "\f016";
-}
-.fa-clock-o:before {
-  content: "\f017";
-}
-.fa-road:before {
-  content: "\f018";
-}
-.fa-download:before {
-  content: "\f019";
-}
-.fa-arrow-circle-o-down:before {
-  content: "\f01a";
-}
-.fa-arrow-circle-o-up:before {
-  content: "\f01b";
-}
-.fa-inbox:before {
-  content: "\f01c";
-}
-.fa-play-circle-o:before {
-  content: "\f01d";
-}
-.fa-rotate-right:before,
-.fa-repeat:before {
-  content: "\f01e";
-}
-.fa-refresh:before {
-  content: "\f021";
-}
-.fa-list-alt:before {
-  content: "\f022";
-}
-.fa-lock:before {
-  content: "\f023";
-}
-.fa-flag:before {
-  content: "\f024";
-}
-.fa-headphones:before {
-  content: "\f025";
-}
-.fa-volume-off:before {
-  content: "\f026";
-}
-.fa-volume-down:before {
-  content: "\f027";
-}
-.fa-volume-up:before {
-  content: "\f028";
-}
-.fa-qrcode:before {
-  content: "\f029";
-}
-.fa-barcode:before {
-  content: "\f02a";
-}
-.fa-tag:before {
-  content: "\f02b";
-}
-.fa-tags:before {
-  content: "\f02c";
-}
-.fa-book:before {
-  content: "\f02d";
-}
-.fa-bookmark:before {
-  content: "\f02e";
-}
-.fa-print:before {
-  content: "\f02f";
-}
-.fa-camera:before {
-  content: "\f030";
-}
-.fa-font:before {
-  content: "\f031";
-}
-.fa-bold:before {
-  content: "\f032";
-}
-.fa-italic:before {
-  content: "\f033";
-}
-.fa-text-height:before {
-  content: "\f034";
-}
-.fa-text-width:before {
-  content: "\f035";
-}
-.fa-align-left:before {
-  content: "\f036";
-}
-.fa-align-center:before {
-  content: "\f037";
-}
-.fa-align-right:before {
-  content: "\f038";
-}
-.fa-align-justify:before {
-  content: "\f039";
-}
-.fa-list:before {
-  content: "\f03a";
-}
-.fa-dedent:before,
-.fa-outdent:before {
-  content: "\f03b";
-}
-.fa-indent:before {
-  content: "\f03c";
-}
-.fa-video-camera:before {
-  content: "\f03d";
-}
-.fa-photo:before,
-.fa-image:before,
-.fa-picture-o:before {
-  content: "\f03e";
-}
-.fa-pencil:before {
-  content: "\f040";
-}
-.fa-map-marker:before {
-  content: "\f041";
-}
-.fa-adjust:before {
-  content: "\f042";
-}
-.fa-tint:before {
-  content: "\f043";
-}
-.fa-edit:before,
-.fa-pencil-square-o:before {
-  content: "\f044";
-}
-.fa-share-square-o:before {
-  content: "\f045";
-}
-.fa-check-square-o:before {
-  content: "\f046";
-}
-.fa-arrows:before {
-  content: "\f047";
-}
-.fa-step-backward:before {
-  content: "\f048";
-}
-.fa-fast-backward:before {
-  content: "\f049";
-}
-.fa-backward:before {
-  content: "\f04a";
-}
-.fa-play:before {
-  content: "\f04b";
-}
-.fa-pause:before {
-  content: "\f04c";
-}
-.fa-stop:before {
-  content: "\f04d";
-}
-.fa-forward:before {
-  content: "\f04e";
-}
-.fa-fast-forward:before {
-  content: "\f050";
-}
-.fa-step-forward:before {
-  content: "\f051";
-}
-.fa-eject:before {
-  content: "\f052";
-}
-.fa-chevron-left:before {
-  content: "\f053";
-}
-.fa-chevron-right:before {
-  content: "\f054";
-}
-.fa-plus-circle:before {
-  content: "\f055";
-}
-.fa-minus-circle:before {
-  content: "\f056";
-}
-.fa-times-circle:before {
-  content: "\f057";
-}
-.fa-check-circle:before {
-  content: "\f058";
-}
-.fa-question-circle:before {
-  content: "\f059";
-}
-.fa-info-circle:before {
-  content: "\f05a";
-}
-.fa-crosshairs:before {
-  content: "\f05b";
-}
-.fa-times-circle-o:before {
-  content: "\f05c";
-}
-.fa-check-circle-o:before {
-  content: "\f05d";
-}
-.fa-ban:before {
-  content: "\f05e";
-}
-.fa-arrow-left:before {
-  content: "\f060";
-}
-.fa-arrow-right:before {
-  content: "\f061";
-}
-.fa-arrow-up:before {
-  content: "\f062";
-}
-.fa-arrow-down:before {
-  content: "\f063";
-}
-.fa-mail-forward:before,
-.fa-share:before {
-  content: "\f064";
-}
-.fa-expand:before {
-  content: "\f065";
-}
-.fa-compress:before {
-  content: "\f066";
-}
-.fa-plus:before {
-  content: "\f067";
-}
-.fa-minus:before {
-  content: "\f068";
-}
-.fa-asterisk:before {
-  content: "\f069";
-}
-.fa-exclamation-circle:before {
-  content: "\f06a";
-}
-.fa-gift:before {
-  content: "\f06b";
-}
-.fa-leaf:before {
-  content: "\f06c";
-}
-.fa-fire:before {
-  content: "\f06d";
-}
-.fa-eye:before {
-  content: "\f06e";
-}
-.fa-eye-slash:before {
-  content: "\f070";
-}
-.fa-warning:before,
-.fa-exclamation-triangle:before {
-  content: "\f071";
-}
-.fa-plane:before {
-  content: "\f072";
-}
-.fa-calendar:before {
-  content: "\f073";
-}
-.fa-random:before {
-  content: "\f074";
-}
-.fa-comment:before {
-  content: "\f075";
-}
-.fa-magnet:before {
-  content: "\f076";
-}
-.fa-chevron-up:before {
-  content: "\f077";
-}
-.fa-chevron-down:before {
-  content: "\f078";
-}
-.fa-retweet:before {
-  content: "\f079";
-}
-.fa-shopping-cart:before {
-  content: "\f07a";
-}
-.fa-folder:before {
-  content: "\f07b";
-}
-.fa-folder-open:before {
-  content: "\f07c";
-}
-.fa-arrows-v:before {
-  content: "\f07d";
-}
-.fa-arrows-h:before {
-  content: "\f07e";
-}
-.fa-bar-chart-o:before,
-.fa-bar-chart:before {
-  content: "\f080";
-}
-.fa-twitter-square:before {
-  content: "\f081";
-}
-.fa-facebook-square:before {
-  content: "\f082";
-}
-.fa-camera-retro:before {
-  content: "\f083";
-}
-.fa-key:before {
-  content: "\f084";
-}
-.fa-gears:before,
-.fa-cogs:before {
-  content: "\f085";
-}
-.fa-comments:before {
-  content: "\f086";
-}
-.fa-thumbs-o-up:before {
-  content: "\f087";
-}
-.fa-thumbs-o-down:before {
-  content: "\f088";
-}
-.fa-star-half:before {
-  content: "\f089";
-}
-.fa-heart-o:before {
-  content: "\f08a";
-}
-.fa-sign-out:before {
-  content: "\f08b";
-}
-.fa-linkedin-square:before {
-  content: "\f08c";
-}
-.fa-thumb-tack:before {
-  content: "\f08d";
-}
-.fa-external-link:before {
-  content: "\f08e";
-}
-.fa-sign-in:before {
-  content: "\f090";
-}
-.fa-trophy:before {
-  content: "\f091";
-}
-.fa-github-square:before {
-  content: "\f092";
-}
-.fa-upload:before {
-  content: "\f093";
-}
-.fa-lemon-o:before {
-  content: "\f094";
-}
-.fa-phone:before {
-  content: "\f095";
-}
-.fa-square-o:before {
-  content: "\f096";
-}
-.fa-bookmark-o:before {
-  content: "\f097";
-}
-.fa-phone-square:before {
-  content: "\f098";
-}
-.fa-twitter:before {
-  content: "\f099";
-}
-.fa-facebook-f:before,
-.fa-facebook:before {
-  content: "\f09a";
-}
-.fa-github:before {
-  content: "\f09b";
-}
-.fa-unlock:before {
-  content: "\f09c";
-}
-.fa-credit-card:before {
-  content: "\f09d";
-}
-.fa-feed:before,
-.fa-rss:before {
-  content: "\f09e";
-}
-.fa-hdd-o:before {
-  content: "\f0a0";
-}
-.fa-bullhorn:before {
-  content: "\f0a1";
-}
-.fa-bell:before {
-  content: "\f0f3";
-}
-.fa-certificate:before {
-  content: "\f0a3";
-}
-.fa-hand-o-right:before {
-  content: "\f0a4";
-}
-.fa-hand-o-left:before {
-  content: "\f0a5";
-}
-.fa-hand-o-up:before {
-  content: "\f0a6";
-}
-.fa-hand-o-down:before {
-  content: "\f0a7";
-}
-.fa-arrow-circle-left:before {
-  content: "\f0a8";
-}
-.fa-arrow-circle-right:before {
-  content: "\f0a9";
-}
-.fa-arrow-circle-up:before {
-  content: "\f0aa";
-}
-.fa-arrow-circle-down:before {
-  content: "\f0ab";
-}
-.fa-globe:before {
-  content: "\f0ac";
-}
-.fa-wrench:before {
-  content: "\f0ad";
-}
-.fa-tasks:before {
-  content: "\f0ae";
-}
-.fa-filter:before {
-  content: "\f0b0";
-}
-.fa-briefcase:before {
-  content: "\f0b1";
-}
-.fa-arrows-alt:before {
-  content: "\f0b2";
-}
-.fa-group:before,
-.fa-users:before {
-  content: "\f0c0";
-}
-.fa-chain:before,
-.fa-link:before {
-  content: "\f0c1";
-}
-.fa-cloud:before {
-  content: "\f0c2";
-}
-.fa-flask:before {
-  content: "\f0c3";
-}
-.fa-cut:before,
-.fa-scissors:before {
-  content: "\f0c4";
-}
-.fa-copy:before,
-.fa-files-o:before {
-  content: "\f0c5";
-}
-.fa-paperclip:before {
-  content: "\f0c6";
-}
-.fa-save:before,
-.fa-floppy-o:before {
-  content: "\f0c7";
-}
-.fa-square:before {
-  content: "\f0c8";
-}
-.fa-navicon:before,
-.fa-reorder:before,
-.fa-bars:before {
-  content: "\f0c9";
-}
-.fa-list-ul:before {
-  content: "\f0ca";
-}
-.fa-list-ol:before {
-  content: "\f0cb";
-}
-.fa-strikethrough:before {
-  content: "\f0cc";
-}
-.fa-underline:before {
-  content: "\f0cd";
-}
-.fa-table:before {
-  content: "\f0ce";
-}
-.fa-magic:before {
-  content: "\f0d0";
-}
-.fa-truck:before {
-  content: "\f0d1";
-}
-.fa-pinterest:before {
-  content: "\f0d2";
-}
-.fa-pinterest-square:before {
-  content: "\f0d3";
-}
-.fa-google-plus-square:before {
-  content: "\f0d4";
-}
-.fa-google-plus:before {
-  content: "\f0d5";
-}
-.fa-money:before {
-  content: "\f0d6";
-}
-.fa-caret-down:before {
-  content: "\f0d7";
-}
-.fa-caret-up:before {
-  content: "\f0d8";
-}
-.fa-caret-left:before {
-  content: "\f0d9";
-}
-.fa-caret-right:before {
-  content: "\f0da";
-}
-.fa-columns:before {
-  content: "\f0db";
-}
-.fa-unsorted:before,
-.fa-sort:before {
-  content: "\f0dc";
-}
-.fa-sort-down:before,
-.fa-sort-desc:before {
-  content: "\f0dd";
-}
-.fa-sort-up:before,
-.fa-sort-asc:before {
-  content: "\f0de";
-}
-.fa-envelope:before {
-  content: "\f0e0";
-}
-.fa-linkedin:before {
-  content: "\f0e1";
-}
-.fa-rotate-left:before,
-.fa-undo:before {
-  content: "\f0e2";
-}
-.fa-legal:before,
-.fa-gavel:before {
-  content: "\f0e3";
-}
-.fa-dashboard:before,
-.fa-tachometer:before {
-  content: "\f0e4";
-}
-.fa-comment-o:before {
-  content: "\f0e5";
-}
-.fa-comments-o:before {
-  content: "\f0e6";
-}
-.fa-flash:before,
-.fa-bolt:before {
-  content: "\f0e7";
-}
-.fa-sitemap:before {
-  content: "\f0e8";
-}
-.fa-umbrella:before {
-  content: "\f0e9";
-}
-.fa-paste:before,
-.fa-clipboard:before {
-  content: "\f0ea";
-}
-.fa-lightbulb-o:before {
-  content: "\f0eb";
-}
-.fa-exchange:before {
-  content: "\f0ec";
-}
-.fa-cloud-download:before {
-  content: "\f0ed";
-}
-.fa-cloud-upload:before {
-  content: "\f0ee";
-}
-.fa-user-md:before {
-  content: "\f0f0";
-}
-.fa-stethoscope:before {
-  content: "\f0f1";
-}
-.fa-suitcase:before {
-  content: "\f0f2";
-}
-.fa-bell-o:before {
-  content: "\f0a2";
-}
-.fa-coffee:before {
-  content: "\f0f4";
-}
-.fa-cutlery:before {
-  content: "\f0f5";
-}
-.fa-file-text-o:before {
-  content: "\f0f6";
-}
-.fa-building-o:before {
-  content: "\f0f7";
-}
-.fa-hospital-o:before {
-  content: "\f0f8";
-}
-.fa-ambulance:before {
-  content: "\f0f9";
-}
-.fa-medkit:before {
-  content: "\f0fa";
-}
-.fa-fighter-jet:before {
-  content: "\f0fb";
-}
-.fa-beer:before {
-  content: "\f0fc";
-}
-.fa-h-square:before {
-  content: "\f0fd";
-}
-.fa-plus-square:before {
-  content: "\f0fe";
-}
-.fa-angle-double-left:before {
-  content: "\f100";
-}
-.fa-angle-double-right:before {
-  content: "\f101";
-}
-.fa-angle-double-up:before {
-  content: "\f102";
-}
-.fa-angle-double-down:before {
-  content: "\f103";
-}
-.fa-angle-left:before {
-  content: "\f104";
-}
-.fa-angle-right:before {
-  content: "\f105";
-}
-.fa-angle-up:before {
-  content: "\f106";
-}
-.fa-angle-down:before {
-  content: "\f107";
-}
-.fa-desktop:before {
-  content: "\f108";
-}
-.fa-laptop:before {
-  content: "\f109";
-}
-.fa-tablet:before {
-  content: "\f10a";
-}
-.fa-mobile-phone:before,
-.fa-mobile:before {
-  content: "\f10b";
-}
-.fa-circle-o:before {
-  content: "\f10c";
-}
-.fa-quote-left:before {
-  content: "\f10d";
-}
-.fa-quote-right:before {
-  content: "\f10e";
-}
-.fa-spinner:before {
-  content: "\f110";
-}
-.fa-circle:before {
-  content: "\f111";
-}
-.fa-mail-reply:before,
-.fa-reply:before {
-  content: "\f112";
-}
-.fa-github-alt:before {
-  content: "\f113";
-}
-.fa-folder-o:before {
-  content: "\f114";
-}
-.fa-folder-open-o:before {
-  content: "\f115";
-}
-.fa-smile-o:before {
-  content: "\f118";
-}
-.fa-frown-o:before {
-  content: "\f119";
-}
-.fa-meh-o:before {
-  content: "\f11a";
-}
-.fa-gamepad:before {
-  content: "\f11b";
-}
-.fa-keyboard-o:before {
-  content: "\f11c";
-}
-.fa-flag-o:before {
-  content: "\f11d";
-}
-.fa-flag-checkered:before {
-  content: "\f11e";
-}
-.fa-terminal:before {
-  content: "\f120";
-}
-.fa-code:before {
-  content: "\f121";
-}
-.fa-mail-reply-all:before,
-.fa-reply-all:before {
-  content: "\f122";
-}
-.fa-star-half-empty:before,
-.fa-star-half-full:before,
-.fa-star-half-o:before {
-  content: "\f123";
-}
-.fa-location-arrow:before {
-  content: "\f124";
-}
-.fa-crop:before {
-  content: "\f125";
-}
-.fa-code-fork:before {
-  content: "\f126";
-}
-.fa-unlink:before,
-.fa-chain-broken:before {
-  content: "\f127";
-}
-.fa-question:before {
-  content: "\f128";
-}
-.fa-info:before {
-  content: "\f129";
-}
-.fa-exclamation:before {
-  content: "\f12a";
-}
-.fa-superscript:before {
-  content: "\f12b";
-}
-.fa-subscript:before {
-  content: "\f12c";
-}
-.fa-eraser:before {
-  content: "\f12d";
-}
-.fa-puzzle-piece:before {
-  content: "\f12e";
-}
-.fa-microphone:before {
-  content: "\f130";
-}
-.fa-microphone-slash:before {
-  content: "\f131";
-}
-.fa-shield:before {
-  content: "\f132";
-}
-.fa-calendar-o:before {
-  content: "\f133";
-}
-.fa-fire-extinguisher:before {
-  content: "\f134";
-}
-.fa-rocket:before {
-  content: "\f135";
-}
-.fa-maxcdn:before {
-  content: "\f136";
-}
-.fa-chevron-circle-left:before {
-  content: "\f137";
-}
-.fa-chevron-circle-right:before {
-  content: "\f138";
-}
-.fa-chevron-circle-up:before {
-  content: "\f139";
-}
-.fa-chevron-circle-down:before {
-  content: "\f13a";
-}
-.fa-html5:before {
-  content: "\f13b";
-}
-.fa-css3:before {
-  content: "\f13c";
-}
-.fa-anchor:before {
-  content: "\f13d";
-}
-.fa-unlock-alt:before {
-  content: "\f13e";
-}
-.fa-bullseye:before {
-  content: "\f140";
-}
-.fa-ellipsis-h:before {
-  content: "\f141";
-}
-.fa-ellipsis-v:before {
-  content: "\f142";
-}
-.fa-rss-square:before {
-  content: "\f143";
-}
-.fa-play-circle:before {
-  content: "\f144";
-}
-.fa-ticket:before {
-  content: "\f145";
-}
-.fa-minus-square:before {
-  content: "\f146";
-}
-.fa-minus-square-o:before {
-  content: "\f147";
-}
-.fa-level-up:before {
-  content: "\f148";
-}
-.fa-level-down:before {
-  content: "\f149";
-}
-.fa-check-square:before {
-  content: "\f14a";
-}
-.fa-pencil-square:before {
-  content: "\f14b";
-}
-.fa-external-link-square:before {
-  content: "\f14c";
-}
-.fa-share-square:before {
-  content: "\f14d";
-}
-.fa-compass:before {
-  content: "\f14e";
-}
-.fa-toggle-down:before,
-.fa-caret-square-o-down:before {
-  content: "\f150";
-}
-.fa-toggle-up:before,
-.fa-caret-square-o-up:before {
-  content: "\f151";
-}
-.fa-toggle-right:before,
-.fa-caret-square-o-right:before {
-  content: "\f152";
-}
-.fa-euro:before,
-.fa-eur:before {
-  content: "\f153";
-}
-.fa-gbp:before {
-  content: "\f154";
-}
-.fa-dollar:before,
-.fa-usd:before {
-  content: "\f155";
-}
-.fa-rupee:before,
-.fa-inr:before {
-  content: "\f156";
-}
-.fa-cny:before,
-.fa-rmb:before,
-.fa-yen:before,
-.fa-jpy:before {
-  content: "\f157";
-}
-.fa-ruble:before,
-.fa-rouble:before,
-.fa-rub:before {
-  content: "\f158";
-}
-.fa-won:before,
-.fa-krw:before {
-  content: "\f159";
-}
-.fa-bitcoin:before,
-.fa-btc:before {
-  content: "\f15a";
-}
-.fa-file:before {
-  content: "\f15b";
-}
-.fa-file-text:before {
-  content: "\f15c";
-}
-.fa-sort-alpha-asc:before {
-  content: "\f15d";
-}
-.fa-sort-alpha-desc:before {
-  content: "\f15e";
-}
-.fa-sort-amount-asc:before {
-  content: "\f160";
-}
-.fa-sort-amount-desc:before {
-  content: "\f161";
-}
-.fa-sort-numeric-asc:before {
-  content: "\f162";
-}
-.fa-sort-numeric-desc:before {
-  content: "\f163";
-}
-.fa-thumbs-up:before {
-  content: "\f164";
-}
-.fa-thumbs-down:before {
-  content: "\f165";
-}
-.fa-youtube-square:before {
-  content: "\f166";
-}
-.fa-youtube:before {
-  content: "\f167";
-}
-.fa-xing:before {
-  content: "\f168";
-}
-.fa-xing-square:before {
-  content: "\f169";
-}
-.fa-youtube-play:before {
-  content: "\f16a";
-}
-.fa-dropbox:before {
-  content: "\f16b";
-}
-.fa-stack-overflow:before {
-  content: "\f16c";
-}
-.fa-instagram:before {
-  content: "\f16d";
-}
-.fa-flickr:before {
-  content: "\f16e";
-}
-.fa-adn:before {
-  content: "\f170";
-}
-.fa-bitbucket:before {
-  content: "\f171";
-}
-.fa-bitbucket-square:before {
-  content: "\f172";
-}
-.fa-tumblr:before {
-  content: "\f173";
-}
-.fa-tumblr-square:before {
-  content: "\f174";
-}
-.fa-long-arrow-down:before {
-  content: "\f175";
-}
-.fa-long-arrow-up:before {
-  content: "\f176";
-}
-.fa-long-arrow-left:before {
-  content: "\f177";
-}
-.fa-long-arrow-right:before {
-  content: "\f178";
-}
-.fa-apple:before {
-  content: "\f179";
-}
-.fa-windows:before {
-  content: "\f17a";
-}
-.fa-android:before {
-  content: "\f17b";
-}
-.fa-linux:before {
-  content: "\f17c";
-}
-.fa-dribbble:before {
-  content: "\f17d";
-}
-.fa-skype:before {
-  content: "\f17e";
-}
-.fa-foursquare:before {
-  content: "\f180";
-}
-.fa-trello:before {
-  content: "\f181";
-}
-.fa-female:before {
-  content: "\f182";
-}
-.fa-male:before {
-  content: "\f183";
-}
-.fa-gittip:before,
-.fa-gratipay:before {
-  content: "\f184";
-}
-.fa-sun-o:before {
-  content: "\f185";
-}
-.fa-moon-o:before {
-  content: "\f186";
-}
-.fa-archive:before {
-  content: "\f187";
-}
-.fa-bug:before {
-  content: "\f188";
-}
-.fa-vk:before {
-  content: "\f189";
-}
-.fa-weibo:before {
-  content: "\f18a";
-}
-.fa-renren:before {
-  content: "\f18b";
-}
-.fa-pagelines:before {
-  content: "\f18c";
-}
-.fa-stack-exchange:before {
-  content: "\f18d";
-}
-.fa-arrow-circle-o-right:before {
-  content: "\f18e";
-}
-.fa-arrow-circle-o-left:before {
-  content: "\f190";
-}
-.fa-toggle-left:before,
-.fa-caret-square-o-left:before {
-  content: "\f191";
-}
-.fa-dot-circle-o:before {
-  content: "\f192";
-}
-.fa-wheelchair:before {
-  content: "\f193";
-}
-.fa-vimeo-square:before {
-  content: "\f194";
-}
-.fa-turkish-lira:before,
-.fa-try:before {
-  content: "\f195";
-}
-.fa-plus-square-o:before {
-  content: "\f196";
-}
-.fa-space-shuttle:before {
-  content: "\f197";
-}
-.fa-slack:before {
-  content: "\f198";
-}
-.fa-envelope-square:before {
-  content: "\f199";
-}
-.fa-wordpress:before {
-  content: "\f19a";
-}
-.fa-openid:before {
-  content: "\f19b";
-}
-.fa-institution:before,
-.fa-bank:before,
-.fa-university:before {
-  content: "\f19c";
-}
-.fa-mortar-board:before,
-.fa-graduation-cap:before {
-  content: "\f19d";
-}
-.fa-yahoo:before {
-  content: "\f19e";
-}
-.fa-google:before {
-  content: "\f1a0";
-}
-.fa-reddit:before {
-  content: "\f1a1";
-}
-.fa-reddit-square:before {
-  content: "\f1a2";
-}
-.fa-stumbleupon-circle:before {
-  content: "\f1a3";
-}
-.fa-stumbleupon:before {
-  content: "\f1a4";
-}
-.fa-delicious:before {
-  content: "\f1a5";
-}
-.fa-digg:before {
-  content: "\f1a6";
-}
-.fa-pied-piper-pp:before {
-  content: "\f1a7";
-}
-.fa-pied-piper-alt:before {
-  content: "\f1a8";
-}
-.fa-drupal:before {
-  content: "\f1a9";
-}
-.fa-joomla:before {
-  content: "\f1aa";
-}
-.fa-language:before {
-  content: "\f1ab";
-}
-.fa-fax:before {
-  content: "\f1ac";
-}
-.fa-building:before {
-  content: "\f1ad";
-}
-.fa-child:before {
-  content: "\f1ae";
-}
-.fa-paw:before {
-  content: "\f1b0";
-}
-.fa-spoon:before {
-  content: "\f1b1";
-}
-.fa-cube:before {
-  content: "\f1b2";
-}
-.fa-cubes:before {
-  content: "\f1b3";
-}
-.fa-behance:before {
-  content: "\f1b4";
-}
-.fa-behance-square:before {
-  content: "\f1b5";
-}
-.fa-steam:before {
-  content: "\f1b6";
-}
-.fa-steam-square:before {
-  content: "\f1b7";
-}
-.fa-recycle:before {
-  content: "\f1b8";
-}
-.fa-automobile:before,
-.fa-car:before {
-  content: "\f1b9";
-}
-.fa-cab:before,
-.fa-taxi:before {
-  content: "\f1ba";
-}
-.fa-tree:before {
-  content: "\f1bb";
-}
-.fa-spotify:before {
-  content: "\f1bc";
-}
-.fa-deviantart:before {
-  content: "\f1bd";
-}
-.fa-soundcloud:before {
-  content: "\f1be";
-}
-.fa-database:before {
-  content: "\f1c0";
-}
-.fa-file-pdf-o:before {
-  content: "\f1c1";
-}
-.fa-file-word-o:before {
-  content: "\f1c2";
-}
-.fa-file-excel-o:before {
-  content: "\f1c3";
-}
-.fa-file-powerpoint-o:before {
-  content: "\f1c4";
-}
-.fa-file-photo-o:before,
-.fa-file-picture-o:before,
-.fa-file-image-o:before {
-  content: "\f1c5";
-}
-.fa-file-zip-o:before,
-.fa-file-archive-o:before {
-  content: "\f1c6";
-}
-.fa-file-sound-o:before,
-.fa-file-audio-o:before {
-  content: "\f1c7";
-}
-.fa-file-movie-o:before,
-.fa-file-video-o:before {
-  content: "\f1c8";
-}
-.fa-file-code-o:before {
-  content: "\f1c9";
-}
-.fa-vine:before {
-  content: "\f1ca";
-}
-.fa-codepen:before {
-  content: "\f1cb";
-}
-.fa-jsfiddle:before {
-  content: "\f1cc";
-}
-.fa-life-bouy:before,
-.fa-life-buoy:before,
-.fa-life-saver:before,
-.fa-support:before,
-.fa-life-ring:before {
-  content: "\f1cd";
-}
-.fa-circle-o-notch:before {
-  content: "\f1ce";
-}
-.fa-ra:before,
-.fa-resistance:before,
-.fa-rebel:before {
-  content: "\f1d0";
-}
-.fa-ge:before,
-.fa-empire:before {
-  content: "\f1d1";
-}
-.fa-git-square:before {
-  content: "\f1d2";
-}
-.fa-git:before {
-  content: "\f1d3";
-}
-.fa-y-combinator-square:before,
-.fa-yc-square:before,
-.fa-hacker-news:before {
-  content: "\f1d4";
-}
-.fa-tencent-weibo:before {
-  content: "\f1d5";
-}
-.fa-qq:before {
-  content: "\f1d6";
-}
-.fa-wechat:before,
-.fa-weixin:before {
-  content: "\f1d7";
-}
-.fa-send:before,
-.fa-paper-plane:before {
-  content: "\f1d8";
-}
-.fa-send-o:before,
-.fa-paper-plane-o:before {
-  content: "\f1d9";
-}
-.fa-history:before {
-  content: "\f1da";
-}
-.fa-circle-thin:before {
-  content: "\f1db";
-}
-.fa-header:before {
-  content: "\f1dc";
-}
-.fa-paragraph:before {
-  content: "\f1dd";
-}
-.fa-sliders:before {
-  content: "\f1de";
-}
-.fa-share-alt:before {
-  content: "\f1e0";
-}
-.fa-share-alt-square:before {
-  content: "\f1e1";
-}
-.fa-bomb:before {
-  content: "\f1e2";
-}
-.fa-soccer-ball-o:before,
-.fa-futbol-o:before {
-  content: "\f1e3";
-}
-.fa-tty:before {
-  content: "\f1e4";
-}
-.fa-binoculars:before {
-  content: "\f1e5";
-}
-.fa-plug:before {
-  content: "\f1e6";
-}
-.fa-slideshare:before {
-  content: "\f1e7";
-}
-.fa-twitch:before {
-  content: "\f1e8";
-}
-.fa-yelp:before {
-  content: "\f1e9";
-}
-.fa-newspaper-o:before {
-  content: "\f1ea";
-}
-.fa-wifi:before {
-  content: "\f1eb";
-}
-.fa-calculator:before {
-  content: "\f1ec";
-}
-.fa-paypal:before {
-  content: "\f1ed";
-}
-.fa-google-wallet:before {
-  content: "\f1ee";
-}
-.fa-cc-visa:before {
-  content: "\f1f0";
-}
-.fa-cc-mastercard:before {
-  content: "\f1f1";
-}
-.fa-cc-discover:before {
-  content: "\f1f2";
-}
-.fa-cc-amex:before {
-  content: "\f1f3";
-}
-.fa-cc-paypal:before {
-  content: "\f1f4";
-}
-.fa-cc-stripe:before {
-  content: "\f1f5";
-}
-.fa-bell-slash:before {
-  content: "\f1f6";
-}
-.fa-bell-slash-o:before {
-  content: "\f1f7";
-}
-.fa-trash:before {
-  content: "\f1f8";
-}
-.fa-copyright:before {
-  content: "\f1f9";
-}
-.fa-at:before {
-  content: "\f1fa";
-}
-.fa-eyedropper:before {
-  content: "\f1fb";
-}
-.fa-paint-brush:before {
-  content: "\f1fc";
-}
-.fa-birthday-cake:before {
-  content: "\f1fd";
-}
-.fa-area-chart:before {
-  content: "\f1fe";
-}
-.fa-pie-chart:before {
-  content: "\f200";
-}
-.fa-line-chart:before {
-  content: "\f201";
-}
-.fa-lastfm:before {
-  content: "\f202";
-}
-.fa-lastfm-square:before {
-  content: "\f203";
-}
-.fa-toggle-off:before {
-  content: "\f204";
-}
-.fa-toggle-on:before {
-  content: "\f205";
-}
-.fa-bicycle:before {
-  content: "\f206";
-}
-.fa-bus:before {
-  content: "\f207";
-}
-.fa-ioxhost:before {
-  content: "\f208";
-}
-.fa-angellist:before {
-  content: "\f209";
-}
-.fa-cc:before {
-  content: "\f20a";
-}
-.fa-shekel:before,
-.fa-sheqel:before,
-.fa-ils:before {
-  content: "\f20b";
-}
-.fa-meanpath:before {
-  content: "\f20c";
-}
-.fa-buysellads:before {
-  content: "\f20d";
-}
-.fa-connectdevelop:before {
-  content: "\f20e";
-}
-.fa-dashcube:before {
-  content: "\f210";
-}
-.fa-forumbee:before {
-  content: "\f211";
-}
-.fa-leanpub:before {
-  content: "\f212";
-}
-.fa-sellsy:before {
-  content: "\f213";
-}
-.fa-shirtsinbulk:before {
-  content: "\f214";
-}
-.fa-simplybuilt:before {
-  content: "\f215";
-}
-.fa-skyatlas:before {
-  content: "\f216";
-}
-.fa-cart-plus:before {
-  content: "\f217";
-}
-.fa-cart-arrow-down:before {
-  content: "\f218";
-}
-.fa-diamond:before {
-  content: "\f219";
-}
-.fa-ship:before {
-  content: "\f21a";
-}
-.fa-user-secret:before {
-  content: "\f21b";
-}
-.fa-motorcycle:before {
-  content: "\f21c";
-}
-.fa-street-view:before {
-  content: "\f21d";
-}
-.fa-heartbeat:before {
-  content: "\f21e";
-}
-.fa-venus:before {
-  content: "\f221";
-}
-.fa-mars:before {
-  content: "\f222";
-}
-.fa-mercury:before {
-  content: "\f223";
-}
-.fa-intersex:before,
-.fa-transgender:before {
-  content: "\f224";
-}
-.fa-transgender-alt:before {
-  content: "\f225";
-}
-.fa-venus-double:before {
-  content: "\f226";
-}
-.fa-mars-double:before {
-  content: "\f227";
-}
-.fa-venus-mars:before {
-  content: "\f228";
-}
-.fa-mars-stroke:before {
-  content: "\f229";
-}
-.fa-mars-stroke-v:before {
-  content: "\f22a";
-}
-.fa-mars-stroke-h:before {
-  content: "\f22b";
-}
-.fa-neuter:before {
-  content: "\f22c";
-}
-.fa-genderless:before {
-  content: "\f22d";
-}
-.fa-facebook-official:before {
-  content: "\f230";
-}
-.fa-pinterest-p:before {
-  content: "\f231";
-}
-.fa-whatsapp:before {
-  content: "\f232";
-}
-.fa-server:before {
-  content: "\f233";
-}
-.fa-user-plus:before {
-  content: "\f234";
-}
-.fa-user-times:before {
-  content: "\f235";
-}
-.fa-hotel:before,
-.fa-bed:before {
-  content: "\f236";
-}
-.fa-viacoin:before {
-  content: "\f237";
-}
-.fa-train:before {
-  content: "\f238";
-}
-.fa-subway:before {
-  content: "\f239";
-}
-.fa-medium:before {
-  content: "\f23a";
-}
-.fa-yc:before,
-.fa-y-combinator:before {
-  content: "\f23b";
-}
-.fa-optin-monster:before {
-  content: "\f23c";
-}
-.fa-opencart:before {
-  content: "\f23d";
-}
-.fa-expeditedssl:before {
-  content: "\f23e";
-}
-.fa-battery-4:before,
-.fa-battery:before,
-.fa-battery-full:before {
-  content: "\f240";
-}
-.fa-battery-3:before,
-.fa-battery-three-quarters:before {
-  content: "\f241";
-}
-.fa-battery-2:before,
-.fa-battery-half:before {
-  content: "\f242";
-}
-.fa-battery-1:before,
-.fa-battery-quarter:before {
-  content: "\f243";
-}
-.fa-battery-0:before,
-.fa-battery-empty:before {
-  content: "\f244";
-}
-.fa-mouse-pointer:before {
-  content: "\f245";
-}
-.fa-i-cursor:before {
-  content: "\f246";
-}
-.fa-object-group:before {
-  content: "\f247";
-}
-.fa-object-ungroup:before {
-  content: "\f248";
-}
-.fa-sticky-note:before {
-  content: "\f249";
-}
-.fa-sticky-note-o:before {
-  content: "\f24a";
-}
-.fa-cc-jcb:before {
-  content: "\f24b";
-}
-.fa-cc-diners-club:before {
-  content: "\f24c";
-}
-.fa-clone:before {
-  content: "\f24d";
-}
-.fa-balance-scale:before {
-  content: "\f24e";
-}
-.fa-hourglass-o:before {
-  content: "\f250";
-}
-.fa-hourglass-1:before,
-.fa-hourglass-start:before {
-  content: "\f251";
-}
-.fa-hourglass-2:before,
-.fa-hourglass-half:before {
-  content: "\f252";
-}
-.fa-hourglass-3:before,
-.fa-hourglass-end:before {
-  content: "\f253";
-}
-.fa-hourglass:before {
-  content: "\f254";
-}
-.fa-hand-grab-o:before,
-.fa-hand-rock-o:before {
-  content: "\f255";
-}
-.fa-hand-stop-o:before,
-.fa-hand-paper-o:before {
-  content: "\f256";
-}
-.fa-hand-scissors-o:before {
-  content: "\f257";
-}
-.fa-hand-lizard-o:before {
-  content: "\f258";
-}
-.fa-hand-spock-o:before {
-  content: "\f259";
-}
-.fa-hand-pointer-o:before {
-  content: "\f25a";
-}
-.fa-hand-peace-o:before {
-  content: "\f25b";
-}
-.fa-trademark:before {
-  content: "\f25c";
-}
-.fa-registered:before {
-  content: "\f25d";
-}
-.fa-creative-commons:before {
-  content: "\f25e";
-}
-.fa-gg:before {
-  content: "\f260";
-}
-.fa-gg-circle:before {
-  content: "\f261";
-}
-.fa-tripadvisor:before {
-  content: "\f262";
-}
-.fa-odnoklassniki:before {
-  content: "\f263";
-}
-.fa-odnoklassniki-square:before {
-  content: "\f264";
-}
-.fa-get-pocket:before {
-  content: "\f265";
-}
-.fa-wikipedia-w:before {
-  content: "\f266";
-}
-.fa-safari:before {
-  content: "\f267";
-}
-.fa-chrome:before {
-  content: "\f268";
-}
-.fa-firefox:before {
-  content: "\f269";
-}
-.fa-opera:before {
-  content: "\f26a";
-}
-.fa-internet-explorer:before {
-  content: "\f26b";
-}
-.fa-tv:before,
-.fa-television:before {
-  content: "\f26c";
-}
-.fa-contao:before {
-  content: "\f26d";
-}
-.fa-500px:before {
-  content: "\f26e";
-}
-.fa-amazon:before {
-  content: "\f270";
-}
-.fa-calendar-plus-o:before {
-  content: "\f271";
-}
-.fa-calendar-minus-o:before {
-  content: "\f272";
-}
-.fa-calendar-times-o:before {
-  content: "\f273";
-}
-.fa-calendar-check-o:before {
-  content: "\f274";
-}
-.fa-industry:before {
-  content: "\f275";
-}
-.fa-map-pin:before {
-  content: "\f276";
-}
-.fa-map-signs:before {
-  content: "\f277";
-}
-.fa-map-o:before {
-  content: "\f278";
-}
-.fa-map:before {
-  content: "\f279";
-}
-.fa-commenting:before {
-  content: "\f27a";
-}
-.fa-commenting-o:before {
-  content: "\f27b";
-}
-.fa-houzz:before {
-  content: "\f27c";
-}
-.fa-vimeo:before {
-  content: "\f27d";
-}
-.fa-black-tie:before {
-  content: "\f27e";
-}
-.fa-fonticons:before {
-  content: "\f280";
-}
-.fa-reddit-alien:before {
-  content: "\f281";
-}
-.fa-edge:before {
-  content: "\f282";
-}
-.fa-credit-card-alt:before {
-  content: "\f283";
-}
-.fa-codiepie:before {
-  content: "\f284";
-}
-.fa-modx:before {
-  content: "\f285";
-}
-.fa-fort-awesome:before {
-  content: "\f286";
-}
-.fa-usb:before {
-  content: "\f287";
-}
-.fa-product-hunt:before {
-  content: "\f288";
-}
-.fa-mixcloud:before {
-  content: "\f289";
-}
-.fa-scribd:before {
-  content: "\f28a";
-}
-.fa-pause-circle:before {
-  content: "\f28b";
-}
-.fa-pause-circle-o:before {
-  content: "\f28c";
-}
-.fa-stop-circle:before {
-  content: "\f28d";
-}
-.fa-stop-circle-o:before {
-  content: "\f28e";
-}
-.fa-shopping-bag:before {
-  content: "\f290";
-}
-.fa-shopping-basket:before {
-  content: "\f291";
-}
-.fa-hashtag:before {
-  content: "\f292";
-}
-.fa-bluetooth:before {
-  content: "\f293";
-}
-.fa-bluetooth-b:before {
-  content: "\f294";
-}
-.fa-percent:before {
-  content: "\f295";
-}
-.fa-gitlab:before {
-  content: "\f296";
-}
-.fa-wpbeginner:before {
-  content: "\f297";
-}
-.fa-wpforms:before {
-  content: "\f298";
-}
-.fa-envira:before {
-  content: "\f299";
-}
-.fa-universal-access:before {
-  content: "\f29a";
-}
-.fa-wheelchair-alt:before {
-  content: "\f29b";
-}
-.fa-question-circle-o:before {
-  content: "\f29c";
-}
-.fa-blind:before {
-  content: "\f29d";
-}
-.fa-audio-description:before {
-  content: "\f29e";
-}
-.fa-volume-control-phone:before {
-  content: "\f2a0";
-}
-.fa-braille:before {
-  content: "\f2a1";
-}
-.fa-assistive-listening-systems:before {
-  content: "\f2a2";
-}
-.fa-asl-interpreting:before,
-.fa-american-sign-language-interpreting:before {
-  content: "\f2a3";
-}
-.fa-deafness:before,
-.fa-hard-of-hearing:before,
-.fa-deaf:before {
-  content: "\f2a4";
-}
-.fa-glide:before {
-  content: "\f2a5";
-}
-.fa-glide-g:before {
-  content: "\f2a6";
-}
-.fa-signing:before,
-.fa-sign-language:before {
-  content: "\f2a7";
-}
-.fa-low-vision:before {
-  content: "\f2a8";
-}
-.fa-viadeo:before {
-  content: "\f2a9";
-}
-.fa-viadeo-square:before {
-  content: "\f2aa";
-}
-.fa-snapchat:before {
-  content: "\f2ab";
-}
-.fa-snapchat-ghost:before {
-  content: "\f2ac";
-}
-.fa-snapchat-square:before {
-  content: "\f2ad";
-}
-.fa-pied-piper:before {
-  content: "\f2ae";
-}
-.fa-first-order:before {
-  content: "\f2b0";
-}
-.fa-yoast:before {
-  content: "\f2b1";
-}
-.fa-themeisle:before {
-  content: "\f2b2";
-}
-.fa-google-plus-circle:before,
-.fa-google-plus-official:before {
-  content: "\f2b3";
-}
-.fa-fa:before,
-.fa-font-awesome:before {
-  content: "\f2b4";
-}
-.fa-handshake-o:before {
-  content: "\f2b5";
-}
-.fa-envelope-open:before {
-  content: "\f2b6";
-}
-.fa-envelope-open-o:before {
-  content: "\f2b7";
-}
-.fa-linode:before {
-  content: "\f2b8";
-}
-.fa-address-book:before {
-  content: "\f2b9";
-}
-.fa-address-book-o:before {
-  content: "\f2ba";
-}
-.fa-vcard:before,
-.fa-address-card:before {
-  content: "\f2bb";
-}
-.fa-vcard-o:before,
-.fa-address-card-o:before {
-  content: "\f2bc";
-}
-.fa-user-circle:before {
-  content: "\f2bd";
-}
-.fa-user-circle-o:before {
-  content: "\f2be";
-}
-.fa-user-o:before {
-  content: "\f2c0";
-}
-.fa-id-badge:before {
-  content: "\f2c1";
-}
-.fa-drivers-license:before,
-.fa-id-card:before {
-  content: "\f2c2";
-}
-.fa-drivers-license-o:before,
-.fa-id-card-o:before {
-  content: "\f2c3";
-}
-.fa-quora:before {
-  content: "\f2c4";
-}
-.fa-free-code-camp:before {
-  content: "\f2c5";
-}
-.fa-telegram:before {
-  content: "\f2c6";
-}
-.fa-thermometer-4:before,
-.fa-thermometer:before,
-.fa-thermometer-full:before {
-  content: "\f2c7";
-}
-.fa-thermometer-3:before,
-.fa-thermometer-three-quarters:before {
-  content: "\f2c8";
-}
-.fa-thermometer-2:before,
-.fa-thermometer-half:before {
-  content: "\f2c9";
-}
-.fa-thermometer-1:before,
-.fa-thermometer-quarter:before {
-  content: "\f2ca";
-}
-.fa-thermometer-0:before,
-.fa-thermometer-empty:before {
-  content: "\f2cb";
-}
-.fa-shower:before {
-  content: "\f2cc";
-}
-.fa-bathtub:before,
-.fa-s15:before,
-.fa-bath:before {
-  content: "\f2cd";
-}
-.fa-podcast:before {
-  content: "\f2ce";
-}
-.fa-window-maximize:before {
-  content: "\f2d0";
-}
-.fa-window-minimize:before {
-  content: "\f2d1";
-}
-.fa-window-restore:before {
-  content: "\f2d2";
-}
-.fa-times-rectangle:before,
-.fa-window-close:before {
-  content: "\f2d3";
-}
-.fa-times-rectangle-o:before,
-.fa-window-close-o:before {
-  content: "\f2d4";
-}
-.fa-bandcamp:before {
-  content: "\f2d5";
-}
-.fa-grav:before {
-  content: "\f2d6";
-}
-.fa-etsy:before {
-  content: "\f2d7";
-}
-.fa-imdb:before {
-  content: "\f2d8";
-}
-.fa-ravelry:before {
-  content: "\f2d9";
-}
-.fa-eercast:before {
-  content: "\f2da";
-}
-.fa-microchip:before {
-  content: "\f2db";
-}
-.fa-snowflake-o:before {
-  content: "\f2dc";
-}
-.fa-superpowers:before {
-  content: "\f2dd";
-}
-.fa-wpexplorer:before {
-  content: "\f2de";
-}
-.fa-meetup:before {
-  content: "\f2e0";
-}
-.sr-only {
-  position: absolute;
-  width: 1px;
-  height: 1px;
-  padding: 0;
-  margin: -1px;
-  overflow: hidden;
-  clip: rect(0, 0, 0, 0);
-  border: 0;
-}
-.sr-only-focusable:active,
-.sr-only-focusable:focus {
-  position: static;
-  width: auto;
-  height: auto;
-  margin: 0;
-  overflow: visible;
-  clip: auto;
-}
diff --git a/css/fontawesome/css/font-awesome.min.css b/css/fontawesome/css/font-awesome.min.css
deleted file mode 100644 (file)
index 540440c..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-/*!
- *  Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome
- *  License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
- */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.7.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'),url('../fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"}.fa-gitlab:before{content:"\f296"}.fa-wpbeginner:before{content:"\f297"}.fa-wpforms:before{content:"\f298"}.fa-envira:before{content:"\f299"}.fa-universal-access:before{content:"\f29a"}.fa-wheelchair-alt:before{content:"\f29b"}.fa-question-circle-o:before{content:"\f29c"}.fa-blind:before{content:"\f29d"}.fa-audio-description:before{content:"\f29e"}.fa-volume-control-phone:before{content:"\f2a0"}.fa-braille:before{content:"\f2a1"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:"\f2a4"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-signing:before,.fa-sign-language:before{content:"\f2a7"}.fa-low-vision:before{content:"\f2a8"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-pied-piper:before{content:"\f2ae"}.fa-first-order:before{content:"\f2b0"}.fa-yoast:before{content:"\f2b1"}.fa-themeisle:before{content:"\f2b2"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:"\f2b3"}.fa-fa:before,.fa-font-awesome:before{content:"\f2b4"}.fa-handshake-o:before{content:"\f2b5"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-o:before{content:"\f2b7"}.fa-linode:before{content:"\f2b8"}.fa-address-book:before{content:"\f2b9"}.fa-address-book-o:before{content:"\f2ba"}.fa-vcard:before,.fa-address-card:before{content:"\f2bb"}.fa-vcard-o:before,.fa-address-card-o:before{content:"\f2bc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-circle-o:before{content:"\f2be"}.fa-user-o:before{content:"\f2c0"}.fa-id-badge:before{content:"\f2c1"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-drivers-license-o:before,.fa-id-card-o:before{content:"\f2c3"}.fa-quora:before{content:"\f2c4"}.fa-free-code-camp:before{content:"\f2c5"}.fa-telegram:before{content:"\f2c6"}.fa-thermometer-4:before,.fa-thermometer:before,.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-shower:before{content:"\f2cc"}.fa-bathtub:before,.fa-s15:before,.fa-bath:before{content:"\f2cd"}.fa-podcast:before{content:"\f2ce"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-times-rectangle:before,.fa-window-close:before{content:"\f2d3"}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:"\f2d4"}.fa-bandcamp:before{content:"\f2d5"}.fa-grav:before{content:"\f2d6"}.fa-etsy:before{content:"\f2d7"}.fa-imdb:before{content:"\f2d8"}.fa-ravelry:before{content:"\f2d9"}.fa-eercast:before{content:"\f2da"}.fa-microchip:before{content:"\f2db"}.fa-snowflake-o:before{content:"\f2dc"}.fa-superpowers:before{content:"\f2dd"}.fa-wpexplorer:before{content:"\f2de"}.fa-meetup:before{content:"\f2e0"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}
diff --git a/css/fontawesome/fonts/FontAwesome.otf b/css/fontawesome/fonts/FontAwesome.otf
deleted file mode 100644 (file)
index 401ec0f..0000000
Binary files a/css/fontawesome/fonts/FontAwesome.otf and /dev/null differ
diff --git a/css/fontawesome/fonts/fontawesome-webfont.eot b/css/fontawesome/fonts/fontawesome-webfont.eot
deleted file mode 100644 (file)
index e9f60ca..0000000
Binary files a/css/fontawesome/fonts/fontawesome-webfont.eot and /dev/null differ
diff --git a/css/fontawesome/fonts/fontawesome-webfont.svg b/css/fontawesome/fonts/fontawesome-webfont.svg
deleted file mode 100644 (file)
index 855c845..0000000
+++ /dev/null
@@ -1,2671 +0,0 @@
-<?xml version="1.0" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
-<svg>
-<metadata>
-Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016
- By ,,,
-Copyright Dave Gandy 2016. All rights reserved.
-</metadata>
-<defs>
-<font id="FontAwesome" horiz-adv-x="1536" >
-  <font-face 
-    font-family="FontAwesome"
-    font-weight="400"
-    font-stretch="normal"
-    units-per-em="1792"
-    panose-1="0 0 0 0 0 0 0 0 0 0"
-    ascent="1536"
-    descent="-256"
-    bbox="-1.02083 -256.962 2304.6 1537.02"
-    underline-thickness="0"
-    underline-position="0"
-    unicode-range="U+0020-F500"
-  />
-<missing-glyph horiz-adv-x="896" 
-d="M224 112h448v1312h-448v-1312zM112 0v1536h672v-1536h-672z" />
-    <glyph glyph-name=".notdef" horiz-adv-x="896" 
-d="M224 112h448v1312h-448v-1312zM112 0v1536h672v-1536h-672z" />
-    <glyph glyph-name=".null" horiz-adv-x="0" 
- />
-    <glyph glyph-name="nonmarkingreturn" horiz-adv-x="597" 
- />
-    <glyph glyph-name="space" unicode=" " horiz-adv-x="448" 
- />
-    <glyph glyph-name="dieresis" unicode="&#xa8;" horiz-adv-x="1792" 
- />
-    <glyph glyph-name="copyright" unicode="&#xa9;" horiz-adv-x="1792" 
- />
-    <glyph glyph-name="registered" unicode="&#xae;" horiz-adv-x="1792" 
- />
-    <glyph glyph-name="acute" unicode="&#xb4;" horiz-adv-x="1792" 
- />
-    <glyph glyph-name="AE" unicode="&#xc6;" horiz-adv-x="1792" 
- />
-    <glyph glyph-name="Oslash" unicode="&#xd8;" horiz-adv-x="1792" 
- />
-    <glyph glyph-name="trademark" unicode="&#x2122;" horiz-adv-x="1792" 
- />
-    <glyph glyph-name="infinity" unicode="&#x221e;" horiz-adv-x="1792" 
- />
-    <glyph glyph-name="notequal" unicode="&#x2260;" horiz-adv-x="1792" 
- />
-    <glyph glyph-name="glass" unicode="&#xf000;" horiz-adv-x="1792" 
-d="M1699 1350q0 -35 -43 -78l-632 -632v-768h320q26 0 45 -19t19 -45t-19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45t45 19h320v768l-632 632q-43 43 -43 78q0 23 18 36.5t38 17.5t43 4h1408q23 0 43 -4t38 -17.5t18 -36.5z" />
-    <glyph glyph-name="music" unicode="&#xf001;" 
-d="M1536 1312v-1120q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v537l-768 -237v-709q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89
-t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v967q0 31 19 56.5t49 35.5l832 256q12 4 28 4q40 0 68 -28t28 -68z" />
-    <glyph glyph-name="search" unicode="&#xf002;" horiz-adv-x="1664" 
-d="M1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -52 -38 -90t-90 -38q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5
-t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z" />
-    <glyph glyph-name="envelope" unicode="&#xf003;" horiz-adv-x="1792" 
-d="M1664 32v768q-32 -36 -69 -66q-268 -206 -426 -338q-51 -43 -83 -67t-86.5 -48.5t-102.5 -24.5h-1h-1q-48 0 -102.5 24.5t-86.5 48.5t-83 67q-158 132 -426 338q-37 30 -69 66v-768q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1664 1083v11v13.5t-0.5 13
-t-3 12.5t-5.5 9t-9 7.5t-14 2.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5q0 -168 147 -284q193 -152 401 -317q6 -5 35 -29.5t46 -37.5t44.5 -31.5t50.5 -27.5t43 -9h1h1q20 0 43 9t50.5 27.5t44.5 31.5t46 37.5t35 29.5q208 165 401 317q54 43 100.5 115.5t46.5 131.5z
-M1792 1120v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z" />
-    <glyph glyph-name="heart" unicode="&#xf004;" horiz-adv-x="1792" 
-d="M896 -128q-26 0 -44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5q224 0 351 -124t127 -344q0 -221 -229 -450l-623 -600
-q-18 -18 -44 -18z" />
-    <glyph glyph-name="star" unicode="&#xf005;" horiz-adv-x="1664" 
-d="M1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -21 -10.5 -35.5t-30.5 -14.5q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455
-l502 -73q56 -9 56 -46z" />
-    <glyph glyph-name="star_empty" unicode="&#xf006;" horiz-adv-x="1664" 
-d="M1137 532l306 297l-422 62l-189 382l-189 -382l-422 -62l306 -297l-73 -421l378 199l377 -199zM1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -50 -41 -50q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500
-l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455l502 -73q56 -9 56 -46z" />
-    <glyph glyph-name="user" unicode="&#xf007;" horiz-adv-x="1280" 
-d="M1280 137q0 -109 -62.5 -187t-150.5 -78h-854q-88 0 -150.5 78t-62.5 187q0 85 8.5 160.5t31.5 152t58.5 131t94 89t134.5 34.5q131 -128 313 -128t313 128q76 0 134.5 -34.5t94 -89t58.5 -131t31.5 -152t8.5 -160.5zM1024 1024q0 -159 -112.5 -271.5t-271.5 -112.5
-t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5z" />
-    <glyph glyph-name="film" unicode="&#xf008;" horiz-adv-x="1920" 
-d="M384 -64v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 320v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 704v128q0 26 -19 45t-45 19h-128
-q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1408 -64v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM384 1088v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45
-t45 -19h128q26 0 45 19t19 45zM1792 -64v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1408 704v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM1792 320v128
-q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1792 704v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1792 1088v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19
-t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1920 1248v-1344q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1344q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
-    <glyph glyph-name="th_large" unicode="&#xf009;" horiz-adv-x="1664" 
-d="M768 512v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM768 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 512v-384q0 -52 -38 -90t-90 -38
-h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90z" />
-    <glyph glyph-name="th" unicode="&#xf00a;" horiz-adv-x="1792" 
-d="M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 288v-192q0 -40 -28 -68t-68 -28h-320
-q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28
-h320q40 0 68 -28t28 -68zM1792 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 800v-192
-q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68z" />
-    <glyph glyph-name="th_list" unicode="&#xf00b;" horiz-adv-x="1792" 
-d="M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 288v-192q0 -40 -28 -68t-68 -28h-960
-q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 800v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v192q0 40 28 68t68 28
-h960q40 0 68 -28t28 -68zM1792 1312v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68z" />
-    <glyph glyph-name="ok" unicode="&#xf00c;" horiz-adv-x="1792" 
-d="M1671 970q0 -40 -28 -68l-724 -724l-136 -136q-28 -28 -68 -28t-68 28l-136 136l-362 362q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -295l656 657q28 28 68 28t68 -28l136 -136q28 -28 28 -68z" />
-    <glyph glyph-name="remove" unicode="&#xf00d;" horiz-adv-x="1408" 
-d="M1298 214q0 -40 -28 -68l-136 -136q-28 -28 -68 -28t-68 28l-294 294l-294 -294q-28 -28 -68 -28t-68 28l-136 136q-28 28 -28 68t28 68l294 294l-294 294q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -294l294 294q28 28 68 28t68 -28l136 -136q28 -28 28 -68
-t-28 -68l-294 -294l294 -294q28 -28 28 -68z" />
-    <glyph glyph-name="zoom_in" unicode="&#xf00e;" horiz-adv-x="1664" 
-d="M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-224q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v224h-224q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h224v224q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5v-224h224
-q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5
-t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z" />
-    <glyph glyph-name="zoom_out" unicode="&#xf010;" horiz-adv-x="1664" 
-d="M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-576q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h576q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5z
-M1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z
-" />
-    <glyph glyph-name="off" unicode="&#xf011;" 
-d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61t-298 61t-245 164t-164 245t-61 298q0 182 80.5 343t226.5 270q43 32 95.5 25t83.5 -50q32 -42 24.5 -94.5t-49.5 -84.5q-98 -74 -151.5 -181t-53.5 -228q0 -104 40.5 -198.5t109.5 -163.5t163.5 -109.5
-t198.5 -40.5t198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5q0 121 -53.5 228t-151.5 181q-42 32 -49.5 84.5t24.5 94.5q31 43 84 50t95 -25q146 -109 226.5 -270t80.5 -343zM896 1408v-640q0 -52 -38 -90t-90 -38t-90 38t-38 90v640q0 52 38 90t90 38t90 -38t38 -90z" />
-    <glyph glyph-name="signal" unicode="&#xf012;" horiz-adv-x="1792" 
-d="M256 96v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM640 224v-320q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v320q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1024 480v-576q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23
-v576q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1408 864v-960q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v960q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 1376v-1472q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v1472q0 14 9 23t23 9h192q14 0 23 -9t9 -23z" />
-    <glyph glyph-name="cog" unicode="&#xf013;" 
-d="M1024 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1536 749v-222q0 -12 -8 -23t-20 -13l-185 -28q-19 -54 -39 -91q35 -50 107 -138q10 -12 10 -25t-9 -23q-27 -37 -99 -108t-94 -71q-12 0 -26 9l-138 108q-44 -23 -91 -38
-q-16 -136 -29 -186q-7 -28 -36 -28h-222q-14 0 -24.5 8.5t-11.5 21.5l-28 184q-49 16 -90 37l-141 -107q-10 -9 -25 -9q-14 0 -25 11q-126 114 -165 168q-7 10 -7 23q0 12 8 23q15 21 51 66.5t54 70.5q-27 50 -41 99l-183 27q-13 2 -21 12.5t-8 23.5v222q0 12 8 23t19 13
-l186 28q14 46 39 92q-40 57 -107 138q-10 12 -10 24q0 10 9 23q26 36 98.5 107.5t94.5 71.5q13 0 26 -10l138 -107q44 23 91 38q16 136 29 186q7 28 36 28h222q14 0 24.5 -8.5t11.5 -21.5l28 -184q49 -16 90 -37l142 107q9 9 24 9q13 0 25 -10q129 -119 165 -170q7 -8 7 -22
-q0 -12 -8 -23q-15 -21 -51 -66.5t-54 -70.5q26 -50 41 -98l183 -28q13 -2 21 -12.5t8 -23.5z" />
-    <glyph glyph-name="trash" unicode="&#xf014;" horiz-adv-x="1408" 
-d="M512 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM768 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1024 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576
-q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1152 76v948h-896v-948q0 -22 7 -40.5t14.5 -27t10.5 -8.5h832q3 0 10.5 8.5t14.5 27t7 40.5zM480 1152h448l-48 117q-7 9 -17 11h-317q-10 -2 -17 -11zM1408 1120v-64q0 -14 -9 -23t-23 -9h-96v-948q0 -83 -47 -143.5t-113 -60.5h-832
-q-66 0 -113 58.5t-47 141.5v952h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h309l70 167q15 37 54 63t79 26h320q40 0 79 -26t54 -63l70 -167h309q14 0 23 -9t9 -23z" />
-    <glyph glyph-name="home" unicode="&#xf015;" horiz-adv-x="1664" 
-d="M1408 544v-480q0 -26 -19 -45t-45 -19h-384v384h-256v-384h-384q-26 0 -45 19t-19 45v480q0 1 0.5 3t0.5 3l575 474l575 -474q1 -2 1 -6zM1631 613l-62 -74q-8 -9 -21 -11h-3q-13 0 -21 7l-692 577l-692 -577q-12 -8 -24 -7q-13 2 -21 11l-62 74q-8 10 -7 23.5t11 21.5
-l719 599q32 26 76 26t76 -26l244 -204v195q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-408l219 -182q10 -8 11 -21.5t-7 -23.5z" />
-    <glyph glyph-name="file_alt" unicode="&#xf016;" 
-d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
-" />
-    <glyph glyph-name="time" unicode="&#xf017;" 
-d="M896 992v-448q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640
-q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-    <glyph glyph-name="road" unicode="&#xf018;" horiz-adv-x="1920" 
-d="M1111 540v4l-24 320q-1 13 -11 22.5t-23 9.5h-186q-13 0 -23 -9.5t-11 -22.5l-24 -320v-4q-1 -12 8 -20t21 -8h244q12 0 21 8t8 20zM1870 73q0 -73 -46 -73h-704q13 0 22 9.5t8 22.5l-20 256q-1 13 -11 22.5t-23 9.5h-272q-13 0 -23 -9.5t-11 -22.5l-20 -256
-q-1 -13 8 -22.5t22 -9.5h-704q-46 0 -46 73q0 54 26 116l417 1044q8 19 26 33t38 14h339q-13 0 -23 -9.5t-11 -22.5l-15 -192q-1 -14 8 -23t22 -9h166q13 0 22 9t8 23l-15 192q-1 13 -11 22.5t-23 9.5h339q20 0 38 -14t26 -33l417 -1044q26 -62 26 -116z" />
-    <glyph glyph-name="download_alt" unicode="&#xf019;" horiz-adv-x="1664" 
-d="M1280 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 416v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h465l135 -136
-q58 -56 136 -56t136 56l136 136h464q40 0 68 -28t28 -68zM1339 985q17 -41 -14 -70l-448 -448q-18 -19 -45 -19t-45 19l-448 448q-31 29 -14 70q17 39 59 39h256v448q0 26 19 45t45 19h256q26 0 45 -19t19 -45v-448h256q42 0 59 -39z" />
-    <glyph glyph-name="download" unicode="&#xf01a;" 
-d="M1120 608q0 -12 -10 -24l-319 -319q-11 -9 -23 -9t-23 9l-320 320q-15 16 -7 35q8 20 30 20h192v352q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-352h192q14 0 23 -9t9 -23zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273
-t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-    <glyph glyph-name="upload" unicode="&#xf01b;" 
-d="M1118 660q-8 -20 -30 -20h-192v-352q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v352h-192q-14 0 -23 9t-9 23q0 12 10 24l319 319q11 9 23 9t23 -9l320 -320q15 -16 7 -35zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198
-t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-    <glyph glyph-name="inbox" unicode="&#xf01c;" 
-d="M1023 576h316q-1 3 -2.5 8.5t-2.5 7.5l-212 496h-708l-212 -496q-1 -3 -2.5 -8.5t-2.5 -7.5h316l95 -192h320zM1536 546v-482q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v482q0 62 25 123l238 552q10 25 36.5 42t52.5 17h832q26 0 52.5 -17t36.5 -42l238 -552
-q25 -61 25 -123z" />
-    <glyph glyph-name="play_circle" unicode="&#xf01d;" 
-d="M1184 640q0 -37 -32 -55l-544 -320q-15 -9 -32 -9q-16 0 -32 8q-32 19 -32 56v640q0 37 32 56q33 18 64 -1l544 -320q32 -18 32 -55zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640
-q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-    <glyph glyph-name="repeat" unicode="&#xf01e;" 
-d="M1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l138 138q-148 137 -349 137q-104 0 -198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5q119 0 225 52t179 147q7 10 23 12q15 0 25 -9
-l137 -138q9 -8 9.5 -20.5t-7.5 -22.5q-109 -132 -264 -204.5t-327 -72.5q-156 0 -298 61t-245 164t-164 245t-61 298t61 298t164 245t245 164t298 61q147 0 284.5 -55.5t244.5 -156.5l130 129q29 31 70 14q39 -17 39 -59z" />
-    <glyph glyph-name="refresh" unicode="&#xf021;" 
-d="M1511 480q0 -5 -1 -7q-64 -268 -268 -434.5t-478 -166.5q-146 0 -282.5 55t-243.5 157l-129 -129q-19 -19 -45 -19t-45 19t-19 45v448q0 26 19 45t45 19h448q26 0 45 -19t19 -45t-19 -45l-137 -137q71 -66 161 -102t187 -36q134 0 250 65t186 179q11 17 53 117
-q8 23 30 23h192q13 0 22.5 -9.5t9.5 -22.5zM1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-26 0 -45 19t-19 45t19 45l138 138q-148 137 -349 137q-134 0 -250 -65t-186 -179q-11 -17 -53 -117q-8 -23 -30 -23h-199q-13 0 -22.5 9.5t-9.5 22.5v7q65 268 270 434.5t480 166.5
-q146 0 284 -55.5t245 -156.5l130 129q19 19 45 19t45 -19t19 -45z" />
-    <glyph glyph-name="list_alt" unicode="&#xf022;" horiz-adv-x="1792" 
-d="M384 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
-M384 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1536 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5z
-M1536 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5zM1536 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5
-t9.5 -22.5zM1664 160v832q0 13 -9.5 22.5t-22.5 9.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5v-832q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1792 1248v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1472q66 0 113 -47
-t47 -113z" />
-    <glyph glyph-name="lock" unicode="&#xf023;" horiz-adv-x="1152" 
-d="M320 768h512v192q0 106 -75 181t-181 75t-181 -75t-75 -181v-192zM1152 672v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h32v192q0 184 132 316t316 132t316 -132t132 -316v-192h32q40 0 68 -28t28 -68z" />
-    <glyph glyph-name="flag" unicode="&#xf024;" horiz-adv-x="1792" 
-d="M320 1280q0 -72 -64 -110v-1266q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v1266q-64 38 -64 110q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -25 -12.5 -38.5t-39.5 -27.5q-215 -116 -369 -116q-61 0 -123.5 22t-108.5 48
-t-115.5 48t-142.5 22q-192 0 -464 -146q-17 -9 -33 -9q-26 0 -45 19t-19 45v742q0 32 31 55q21 14 79 43q236 120 421 120q107 0 200 -29t219 -88q38 -19 88 -19q54 0 117.5 21t110 47t88 47t54.5 21q26 0 45 -19t19 -45z" />
-    <glyph glyph-name="headphones" unicode="&#xf025;" horiz-adv-x="1664" 
-d="M1664 650q0 -166 -60 -314l-20 -49l-185 -33q-22 -83 -90.5 -136.5t-156.5 -53.5v-32q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-32q71 0 130 -35.5t93 -95.5l68 12q29 95 29 193q0 148 -88 279t-236.5 209t-315.5 78
-t-315.5 -78t-236.5 -209t-88 -279q0 -98 29 -193l68 -12q34 60 93 95.5t130 35.5v32q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v32q-88 0 -156.5 53.5t-90.5 136.5l-185 33l-20 49q-60 148 -60 314q0 151 67 291t179 242.5
-t266 163.5t320 61t320 -61t266 -163.5t179 -242.5t67 -291z" />
-    <glyph glyph-name="volume_off" unicode="&#xf026;" horiz-adv-x="768" 
-d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45z" />
-    <glyph glyph-name="volume_down" unicode="&#xf027;" horiz-adv-x="1152" 
-d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 36
-t12 56.5t-12 56.5t-29 36t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142z" />
-    <glyph glyph-name="volume_up" unicode="&#xf028;" horiz-adv-x="1664" 
-d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 36
-t12 56.5t-12 56.5t-29 36t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142zM1408 640q0 -153 -85 -282.5t-225 -188.5q-13 -5 -25 -5q-27 0 -46 19t-19 45q0 39 39 59q56 29 76 44q74 54 115.5 135.5t41.5 173.5t-41.5 173.5
-t-115.5 135.5q-20 15 -76 44q-39 20 -39 59q0 26 19 45t45 19q13 0 26 -5q140 -59 225 -188.5t85 -282.5zM1664 640q0 -230 -127 -422.5t-338 -283.5q-13 -5 -26 -5q-26 0 -45 19t-19 45q0 36 39 59q7 4 22.5 10.5t22.5 10.5q46 25 82 51q123 91 192 227t69 289t-69 289
-t-192 227q-36 26 -82 51q-7 4 -22.5 10.5t-22.5 10.5q-39 23 -39 59q0 26 19 45t45 19q13 0 26 -5q211 -91 338 -283.5t127 -422.5z" />
-    <glyph glyph-name="qrcode" unicode="&#xf029;" horiz-adv-x="1408" 
-d="M384 384v-128h-128v128h128zM384 1152v-128h-128v128h128zM1152 1152v-128h-128v128h128zM128 129h384v383h-384v-383zM128 896h384v384h-384v-384zM896 896h384v384h-384v-384zM640 640v-640h-640v640h640zM1152 128v-128h-128v128h128zM1408 128v-128h-128v128h128z
-M1408 640v-384h-384v128h-128v-384h-128v640h384v-128h128v128h128zM640 1408v-640h-640v640h640zM1408 1408v-640h-640v640h640z" />
-    <glyph glyph-name="barcode" unicode="&#xf02a;" horiz-adv-x="1792" 
-d="M63 0h-63v1408h63v-1408zM126 1h-32v1407h32v-1407zM220 1h-31v1407h31v-1407zM377 1h-31v1407h31v-1407zM534 1h-62v1407h62v-1407zM660 1h-31v1407h31v-1407zM723 1h-31v1407h31v-1407zM786 1h-31v1407h31v-1407zM943 1h-63v1407h63v-1407zM1100 1h-63v1407h63v-1407z
-M1226 1h-63v1407h63v-1407zM1352 1h-63v1407h63v-1407zM1446 1h-63v1407h63v-1407zM1635 1h-94v1407h94v-1407zM1698 1h-32v1407h32v-1407zM1792 0h-63v1408h63v-1408z" />
-    <glyph glyph-name="tag" unicode="&#xf02b;" 
-d="M448 1088q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5
-l715 -714q37 -39 37 -91z" />
-    <glyph glyph-name="tags" unicode="&#xf02c;" horiz-adv-x="1920" 
-d="M448 1088q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5
-l715 -714q37 -39 37 -91zM1899 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-36 0 -59 14t-53 45l470 470q37 37 37 90q0 52 -37 91l-715 714q-38 38 -102 64.5t-117 26.5h224q53 0 117 -26.5t102 -64.5l715 -714q37 -39 37 -91z" />
-    <glyph glyph-name="book" unicode="&#xf02d;" horiz-adv-x="1664" 
-d="M1639 1058q40 -57 18 -129l-275 -906q-19 -64 -76.5 -107.5t-122.5 -43.5h-923q-77 0 -148.5 53.5t-99.5 131.5q-24 67 -2 127q0 4 3 27t4 37q1 8 -3 21.5t-3 19.5q2 11 8 21t16.5 23.5t16.5 23.5q23 38 45 91.5t30 91.5q3 10 0.5 30t-0.5 28q3 11 17 28t17 23
-q21 36 42 92t25 90q1 9 -2.5 32t0.5 28q4 13 22 30.5t22 22.5q19 26 42.5 84.5t27.5 96.5q1 8 -3 25.5t-2 26.5q2 8 9 18t18 23t17 21q8 12 16.5 30.5t15 35t16 36t19.5 32t26.5 23.5t36 11.5t47.5 -5.5l-1 -3q38 9 51 9h761q74 0 114 -56t18 -130l-274 -906
-q-36 -119 -71.5 -153.5t-128.5 -34.5h-869q-27 0 -38 -15q-11 -16 -1 -43q24 -70 144 -70h923q29 0 56 15.5t35 41.5l300 987q7 22 5 57q38 -15 59 -43zM575 1056q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5
-t-16.5 -22.5zM492 800q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5t-16.5 -22.5z" />
-    <glyph glyph-name="bookmark" unicode="&#xf02e;" horiz-adv-x="1280" 
-d="M1164 1408q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62v1289q0 34 19.5 62t52.5 41q21 9 44 9h1048z" />
-    <glyph glyph-name="print" unicode="&#xf02f;" horiz-adv-x="1664" 
-d="M384 0h896v256h-896v-256zM384 640h896v384h-160q-40 0 -68 28t-28 68v160h-640v-640zM1536 576q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 576v-416q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-160q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68
-v160h-224q-13 0 -22.5 9.5t-9.5 22.5v416q0 79 56.5 135.5t135.5 56.5h64v544q0 40 28 68t68 28h672q40 0 88 -20t76 -48l152 -152q28 -28 48 -76t20 -88v-256h64q79 0 135.5 -56.5t56.5 -135.5z" />
-    <glyph glyph-name="camera" unicode="&#xf030;" horiz-adv-x="1920" 
-d="M960 864q119 0 203.5 -84.5t84.5 -203.5t-84.5 -203.5t-203.5 -84.5t-203.5 84.5t-84.5 203.5t84.5 203.5t203.5 84.5zM1664 1280q106 0 181 -75t75 -181v-896q0 -106 -75 -181t-181 -75h-1408q-106 0 -181 75t-75 181v896q0 106 75 181t181 75h224l51 136
-q19 49 69.5 84.5t103.5 35.5h512q53 0 103.5 -35.5t69.5 -84.5l51 -136h224zM960 128q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
-    <glyph glyph-name="font" unicode="&#xf031;" horiz-adv-x="1664" 
-d="M725 977l-170 -450q33 0 136.5 -2t160.5 -2q19 0 57 2q-87 253 -184 452zM0 -128l2 79q23 7 56 12.5t57 10.5t49.5 14.5t44.5 29t31 50.5l237 616l280 724h75h53q8 -14 11 -21l205 -480q33 -78 106 -257.5t114 -274.5q15 -34 58 -144.5t72 -168.5q20 -45 35 -57
-q19 -15 88 -29.5t84 -20.5q6 -38 6 -57q0 -5 -0.5 -13.5t-0.5 -12.5q-63 0 -190 8t-191 8q-76 0 -215 -7t-178 -8q0 43 4 78l131 28q1 0 12.5 2.5t15.5 3.5t14.5 4.5t15 6.5t11 8t9 11t2.5 14q0 16 -31 96.5t-72 177.5t-42 100l-450 2q-26 -58 -76.5 -195.5t-50.5 -162.5
-q0 -22 14 -37.5t43.5 -24.5t48.5 -13.5t57 -8.5t41 -4q1 -19 1 -58q0 -9 -2 -27q-58 0 -174.5 10t-174.5 10q-8 0 -26.5 -4t-21.5 -4q-80 -14 -188 -14z" />
-    <glyph glyph-name="bold" unicode="&#xf032;" horiz-adv-x="1408" 
-d="M555 15q74 -32 140 -32q376 0 376 335q0 114 -41 180q-27 44 -61.5 74t-67.5 46.5t-80.5 25t-84 10.5t-94.5 2q-73 0 -101 -10q0 -53 -0.5 -159t-0.5 -158q0 -8 -1 -67.5t-0.5 -96.5t4.5 -83.5t12 -66.5zM541 761q42 -7 109 -7q82 0 143 13t110 44.5t74.5 89.5t25.5 142
-q0 70 -29 122.5t-79 82t-108 43.5t-124 14q-50 0 -130 -13q0 -50 4 -151t4 -152q0 -27 -0.5 -80t-0.5 -79q0 -46 1 -69zM0 -128l2 94q15 4 85 16t106 27q7 12 12.5 27t8.5 33.5t5.5 32.5t3 37.5t0.5 34v35.5v30q0 982 -22 1025q-4 8 -22 14.5t-44.5 11t-49.5 7t-48.5 4.5
-t-30.5 3l-4 83q98 2 340 11.5t373 9.5q23 0 68 -0.5t68 -0.5q70 0 136.5 -13t128.5 -42t108 -71t74 -104.5t28 -137.5q0 -52 -16.5 -95.5t-39 -72t-64.5 -57.5t-73 -45t-84 -40q154 -35 256.5 -134t102.5 -248q0 -100 -35 -179.5t-93.5 -130.5t-138 -85.5t-163.5 -48.5
-t-176 -14q-44 0 -132 3t-132 3q-106 0 -307 -11t-231 -12z" />
-    <glyph glyph-name="italic" unicode="&#xf033;" horiz-adv-x="1024" 
-d="M0 -126l17 85q22 7 61.5 16.5t72 19t59.5 23.5q28 35 41 101q1 7 62 289t114 543.5t52 296.5v25q-24 13 -54.5 18.5t-69.5 8t-58 5.5l19 103q33 -2 120 -6.5t149.5 -7t120.5 -2.5q48 0 98.5 2.5t121 7t98.5 6.5q-5 -39 -19 -89q-30 -10 -101.5 -28.5t-108.5 -33.5
-q-8 -19 -14 -42.5t-9 -40t-7.5 -45.5t-6.5 -42q-27 -148 -87.5 -419.5t-77.5 -355.5q-2 -9 -13 -58t-20 -90t-16 -83.5t-6 -57.5l1 -18q17 -4 185 -31q-3 -44 -16 -99q-11 0 -32.5 -1.5t-32.5 -1.5q-29 0 -87 10t-86 10q-138 2 -206 2q-51 0 -143 -9t-121 -11z" />
-    <glyph glyph-name="text_height" unicode="&#xf034;" horiz-adv-x="1792" 
-d="M1744 128q33 0 42 -18.5t-11 -44.5l-126 -162q-20 -26 -49 -26t-49 26l-126 162q-20 26 -11 44.5t42 18.5h80v1024h-80q-33 0 -42 18.5t11 44.5l126 162q20 26 49 26t49 -26l126 -162q20 -26 11 -44.5t-42 -18.5h-80v-1024h80zM81 1407l54 -27q12 -5 211 -5q44 0 132 2
-t132 2q36 0 107.5 -0.5t107.5 -0.5h293q6 0 21 -0.5t20.5 0t16 3t17.5 9t15 17.5l42 1q4 0 14 -0.5t14 -0.5q2 -112 2 -336q0 -80 -5 -109q-39 -14 -68 -18q-25 44 -54 128q-3 9 -11 48t-14.5 73.5t-7.5 35.5q-6 8 -12 12.5t-15.5 6t-13 2.5t-18 0.5t-16.5 -0.5
-q-17 0 -66.5 0.5t-74.5 0.5t-64 -2t-71 -6q-9 -81 -8 -136q0 -94 2 -388t2 -455q0 -16 -2.5 -71.5t0 -91.5t12.5 -69q40 -21 124 -42.5t120 -37.5q5 -40 5 -50q0 -14 -3 -29l-34 -1q-76 -2 -218 8t-207 10q-50 0 -151 -9t-152 -9q-3 51 -3 52v9q17 27 61.5 43t98.5 29t78 27
-q19 42 19 383q0 101 -3 303t-3 303v117q0 2 0.5 15.5t0.5 25t-1 25.5t-3 24t-5 14q-11 12 -162 12q-33 0 -93 -12t-80 -26q-19 -13 -34 -72.5t-31.5 -111t-42.5 -53.5q-42 26 -56 44v383z" />
-    <glyph glyph-name="text_width" unicode="&#xf035;" 
-d="M81 1407l54 -27q12 -5 211 -5q44 0 132 2t132 2q70 0 246.5 1t304.5 0.5t247 -4.5q33 -1 56 31l42 1q4 0 14 -0.5t14 -0.5q2 -112 2 -336q0 -80 -5 -109q-39 -14 -68 -18q-25 44 -54 128q-3 9 -11 47.5t-15 73.5t-7 36q-10 13 -27 19q-5 2 -66 2q-30 0 -93 1t-103 1
-t-94 -2t-96 -7q-9 -81 -8 -136l1 -152v52q0 -55 1 -154t1.5 -180t0.5 -153q0 -16 -2.5 -71.5t0 -91.5t12.5 -69q40 -21 124 -42.5t120 -37.5q5 -40 5 -50q0 -14 -3 -29l-34 -1q-76 -2 -218 8t-207 10q-50 0 -151 -9t-152 -9q-3 51 -3 52v9q17 27 61.5 43t98.5 29t78 27
-q7 16 11.5 74t6 145.5t1.5 155t-0.5 153.5t-0.5 89q0 7 -2.5 21.5t-2.5 22.5q0 7 0.5 44t1 73t0 76.5t-3 67.5t-6.5 32q-11 12 -162 12q-41 0 -163 -13.5t-138 -24.5q-19 -12 -34 -71.5t-31.5 -111.5t-42.5 -54q-42 26 -56 44v383zM1310 125q12 0 42 -19.5t57.5 -41.5
-t59.5 -49t36 -30q26 -21 26 -49t-26 -49q-4 -3 -36 -30t-59.5 -49t-57.5 -41.5t-42 -19.5q-13 0 -20.5 10.5t-10 28.5t-2.5 33.5t1.5 33t1.5 19.5h-1024q0 -2 1.5 -19.5t1.5 -33t-2.5 -33.5t-10 -28.5t-20.5 -10.5q-12 0 -42 19.5t-57.5 41.5t-59.5 49t-36 30q-26 21 -26 49
-t26 49q4 3 36 30t59.5 49t57.5 41.5t42 19.5q13 0 20.5 -10.5t10 -28.5t2.5 -33.5t-1.5 -33t-1.5 -19.5h1024q0 2 -1.5 19.5t-1.5 33t2.5 33.5t10 28.5t20.5 10.5z" />
-    <glyph glyph-name="align_left" unicode="&#xf036;" horiz-adv-x="1792" 
-d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1408 576v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45zM1664 960v-128q0 -26 -19 -45
-t-45 -19h-1536q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45zM1280 1344v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
-    <glyph glyph-name="align_center" unicode="&#xf037;" horiz-adv-x="1792" 
-d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1408 576v-128q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h896q26 0 45 -19t19 -45zM1664 960v-128q0 -26 -19 -45t-45 -19
-h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1280 1344v-128q0 -26 -19 -45t-45 -19h-640q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h640q26 0 45 -19t19 -45z" />
-    <glyph glyph-name="align_right" unicode="&#xf038;" horiz-adv-x="1792" 
-d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 576v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45zM1792 960v-128q0 -26 -19 -45
-t-45 -19h-1536q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45zM1792 1344v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
-    <glyph glyph-name="align_justify" unicode="&#xf039;" horiz-adv-x="1792" 
-d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 576v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 960v-128q0 -26 -19 -45
-t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 1344v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45z" />
-    <glyph glyph-name="list" unicode="&#xf03a;" horiz-adv-x="1792" 
-d="M256 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM256 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5
-t9.5 -22.5zM256 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1344
-q13 0 22.5 -9.5t9.5 -22.5zM256 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5
-t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192
-q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5z" />
-    <glyph glyph-name="indent_left" unicode="&#xf03b;" horiz-adv-x="1792" 
-d="M384 992v-576q0 -13 -9.5 -22.5t-22.5 -9.5q-14 0 -23 9l-288 288q-9 9 -9 23t9 23l288 288q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5
-t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088
-q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5z" />
-    <glyph glyph-name="indent_right" unicode="&#xf03c;" horiz-adv-x="1792" 
-d="M352 704q0 -14 -9 -23l-288 -288q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v576q0 13 9.5 22.5t22.5 9.5q14 0 23 -9l288 -288q9 -9 9 -23zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5
-t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088
-q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5z" />
-    <glyph glyph-name="facetime_video" unicode="&#xf03d;" horiz-adv-x="1792" 
-d="M1792 1184v-1088q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-403 403v-166q0 -119 -84.5 -203.5t-203.5 -84.5h-704q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h704q119 0 203.5 -84.5t84.5 -203.5v-165l403 402q18 19 45 19q12 0 25 -5
-q39 -17 39 -59z" />
-    <glyph glyph-name="picture" unicode="&#xf03e;" horiz-adv-x="1920" 
-d="M640 960q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1664 576v-448h-1408v192l320 320l160 -160l512 512zM1760 1280h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-1216q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5v1216
-q0 13 -9.5 22.5t-22.5 9.5zM1920 1248v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
-    <glyph glyph-name="pencil" unicode="&#xf040;" 
-d="M363 0l91 91l-235 235l-91 -91v-107h128v-128h107zM886 928q0 22 -22 22q-10 0 -17 -7l-542 -542q-7 -7 -7 -17q0 -22 22 -22q10 0 17 7l542 542q7 7 7 17zM832 1120l416 -416l-832 -832h-416v416zM1515 1024q0 -53 -37 -90l-166 -166l-416 416l166 165q36 38 90 38
-q53 0 91 -38l235 -234q37 -39 37 -91z" />
-    <glyph glyph-name="map_marker" unicode="&#xf041;" horiz-adv-x="1024" 
-d="M768 896q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1024 896q0 -109 -33 -179l-364 -774q-16 -33 -47.5 -52t-67.5 -19t-67.5 19t-46.5 52l-365 774q-33 70 -33 179q0 212 150 362t362 150t362 -150t150 -362z" />
-    <glyph glyph-name="adjust" unicode="&#xf042;" 
-d="M768 96v1088q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-    <glyph glyph-name="tint" unicode="&#xf043;" horiz-adv-x="1024" 
-d="M512 384q0 36 -20 69q-1 1 -15.5 22.5t-25.5 38t-25 44t-21 50.5q-4 16 -21 16t-21 -16q-7 -23 -21 -50.5t-25 -44t-25.5 -38t-15.5 -22.5q-20 -33 -20 -69q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 512q0 -212 -150 -362t-362 -150t-362 150t-150 362
-q0 145 81 275q6 9 62.5 90.5t101 151t99.5 178t83 201.5q9 30 34 47t51 17t51.5 -17t33.5 -47q28 -93 83 -201.5t99.5 -178t101 -151t62.5 -90.5q81 -127 81 -275z" />
-    <glyph glyph-name="edit" unicode="&#xf044;" horiz-adv-x="1792" 
-d="M888 352l116 116l-152 152l-116 -116v-56h96v-96h56zM1328 1072q-16 16 -33 -1l-350 -350q-17 -17 -1 -33t33 1l350 350q17 17 1 33zM1408 478v-190q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832
-q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-14 -14 -32 -8q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v126q0 13 9 22l64 64q15 15 35 7t20 -29zM1312 1216l288 -288l-672 -672h-288v288zM1756 1084l-92 -92
-l-288 288l92 92q28 28 68 28t68 -28l152 -152q28 -28 28 -68t-28 -68z" />
-    <glyph glyph-name="share" unicode="&#xf045;" horiz-adv-x="1664" 
-d="M1408 547v-259q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h255v0q13 0 22.5 -9.5t9.5 -22.5q0 -27 -26 -32q-77 -26 -133 -60q-10 -4 -16 -4h-112q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832
-q66 0 113 47t47 113v214q0 19 18 29q28 13 54 37q16 16 35 8q21 -9 21 -29zM1645 1043l-384 -384q-18 -19 -45 -19q-12 0 -25 5q-39 17 -39 59v192h-160q-323 0 -438 -131q-119 -137 -74 -473q3 -23 -20 -34q-8 -2 -12 -2q-16 0 -26 13q-10 14 -21 31t-39.5 68.5t-49.5 99.5
-t-38.5 114t-17.5 122q0 49 3.5 91t14 90t28 88t47 81.5t68.5 74t94.5 61.5t124.5 48.5t159.5 30.5t196.5 11h160v192q0 42 39 59q13 5 25 5q26 0 45 -19l384 -384q19 -19 19 -45t-19 -45z" />
-    <glyph glyph-name="check" unicode="&#xf046;" horiz-adv-x="1664" 
-d="M1408 606v-318q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-10 -10 -23 -10q-3 0 -9 2q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832
-q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v254q0 13 9 22l64 64q10 10 23 10q6 0 12 -3q20 -8 20 -29zM1639 1095l-814 -814q-24 -24 -57 -24t-57 24l-430 430q-24 24 -24 57t24 57l110 110q24 24 57 24t57 -24l263 -263l647 647q24 24 57 24t57 -24l110 -110
-q24 -24 24 -57t-24 -57z" />
-    <glyph glyph-name="move" unicode="&#xf047;" horiz-adv-x="1792" 
-d="M1792 640q0 -26 -19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-384v-384h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v384h-384v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45
-t19 45l256 256q19 19 45 19t45 -19t19 -45v-128h384v384h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45t-19 -45t-45 -19h-128v-384h384v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45z" />
-    <glyph glyph-name="step_backward" unicode="&#xf048;" horiz-adv-x="1024" 
-d="M979 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 10 13 19z" />
-    <glyph glyph-name="fast_backward" unicode="&#xf049;" horiz-adv-x="1792" 
-d="M1747 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 10 13 19l710 710
-q19 19 32 13t13 -32v-710q4 10 13 19z" />
-    <glyph glyph-name="backward" unicode="&#xf04a;" horiz-adv-x="1664" 
-d="M1619 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-19 19 -19 45t19 45l710 710q19 19 32 13t13 -32v-710q4 10 13 19z" />
-    <glyph glyph-name="play" unicode="&#xf04b;" horiz-adv-x="1408" 
-d="M1384 609l-1328 -738q-23 -13 -39.5 -3t-16.5 36v1472q0 26 16.5 36t39.5 -3l1328 -738q23 -13 23 -31t-23 -31z" />
-    <glyph glyph-name="pause" unicode="&#xf04c;" 
-d="M1536 1344v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45zM640 1344v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45z" />
-    <glyph glyph-name="stop" unicode="&#xf04d;" 
-d="M1536 1344v-1408q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" />
-    <glyph glyph-name="forward" unicode="&#xf04e;" horiz-adv-x="1664" 
-d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q9 -9 13 -19v710q0 26 13 32t32 -13l710 -710q19 -19 19 -45t-19 -45l-710 -710q-19 -19 -32 -13t-13 32v710q-4 -10 -13 -19z" />
-    <glyph glyph-name="fast_forward" unicode="&#xf050;" horiz-adv-x="1792" 
-d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q9 -9 13 -19v710q0 26 13 32t32 -13l710 -710q9 -9 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-4 -10 -13 -19l-710 -710
-q-19 -19 -32 -13t-13 32v710q-4 -10 -13 -19z" />
-    <glyph glyph-name="step_forward" unicode="&#xf051;" horiz-adv-x="1024" 
-d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q9 -9 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-4 -10 -13 -19z" />
-    <glyph glyph-name="eject" unicode="&#xf052;" horiz-adv-x="1538" 
-d="M14 557l710 710q19 19 45 19t45 -19l710 -710q19 -19 13 -32t-32 -13h-1472q-26 0 -32 13t13 32zM1473 0h-1408q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1408q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19z" />
-    <glyph glyph-name="chevron_left" unicode="&#xf053;" horiz-adv-x="1280" 
-d="M1171 1235l-531 -531l531 -531q19 -19 19 -45t-19 -45l-166 -166q-19 -19 -45 -19t-45 19l-742 742q-19 19 -19 45t19 45l742 742q19 19 45 19t45 -19l166 -166q19 -19 19 -45t-19 -45z" />
-    <glyph glyph-name="chevron_right" unicode="&#xf054;" horiz-adv-x="1280" 
-d="M1107 659l-742 -742q-19 -19 -45 -19t-45 19l-166 166q-19 19 -19 45t19 45l531 531l-531 531q-19 19 -19 45t19 45l166 166q19 19 45 19t45 -19l742 -742q19 -19 19 -45t-19 -45z" />
-    <glyph glyph-name="plus_sign" unicode="&#xf055;" 
-d="M1216 576v128q0 26 -19 45t-45 19h-256v256q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-256h-256q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h256v-256q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v256h256q26 0 45 19t19 45zM1536 640q0 -209 -103 -385.5
-t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-    <glyph glyph-name="minus_sign" unicode="&#xf056;" 
-d="M1216 576v128q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5
-t103 -385.5z" />
-    <glyph glyph-name="remove_sign" unicode="&#xf057;" 
-d="M1149 414q0 26 -19 45l-181 181l181 181q19 19 19 45q0 27 -19 46l-90 90q-19 19 -46 19q-26 0 -45 -19l-181 -181l-181 181q-19 19 -45 19q-27 0 -46 -19l-90 -90q-19 -19 -19 -46q0 -26 19 -45l181 -181l-181 -181q-19 -19 -19 -45q0 -27 19 -46l90 -90q19 -19 46 -19
-q26 0 45 19l181 181l181 -181q19 -19 45 -19q27 0 46 19l90 90q19 19 19 46zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-    <glyph glyph-name="ok_sign" unicode="&#xf058;" 
-d="M1284 802q0 28 -18 46l-91 90q-19 19 -45 19t-45 -19l-408 -407l-226 226q-19 19 -45 19t-45 -19l-91 -90q-18 -18 -18 -46q0 -27 18 -45l362 -362q19 -19 45 -19q27 0 46 19l543 543q18 18 18 45zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103
-t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-    <glyph glyph-name="question_sign" unicode="&#xf059;" 
-d="M896 160v192q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h192q14 0 23 9t9 23zM1152 832q0 88 -55.5 163t-138.5 116t-170 41q-243 0 -371 -213q-15 -24 8 -42l132 -100q7 -6 19 -6q16 0 25 12q53 68 86 92q34 24 86 24q48 0 85.5 -26t37.5 -59
-q0 -38 -20 -61t-68 -45q-63 -28 -115.5 -86.5t-52.5 -125.5v-36q0 -14 9 -23t23 -9h192q14 0 23 9t9 23q0 19 21.5 49.5t54.5 49.5q32 18 49 28.5t46 35t44.5 48t28 60.5t12.5 81zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5
-t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-    <glyph glyph-name="info_sign" unicode="&#xf05a;" 
-d="M1024 160v160q0 14 -9 23t-23 9h-96v512q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h96v-320h-96q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h448q14 0 23 9t9 23zM896 1056v160q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23
-t23 -9h192q14 0 23 9t9 23zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-    <glyph glyph-name="screenshot" unicode="&#xf05b;" 
-d="M1197 512h-109q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h109q-32 108 -112.5 188.5t-188.5 112.5v-109q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v109q-108 -32 -188.5 -112.5t-112.5 -188.5h109q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-109
-q32 -108 112.5 -188.5t188.5 -112.5v109q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-109q108 32 188.5 112.5t112.5 188.5zM1536 704v-128q0 -26 -19 -45t-45 -19h-143q-37 -161 -154.5 -278.5t-278.5 -154.5v-143q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v143
-q-161 37 -278.5 154.5t-154.5 278.5h-143q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h143q37 161 154.5 278.5t278.5 154.5v143q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-143q161 -37 278.5 -154.5t154.5 -278.5h143q26 0 45 -19t19 -45z" />
-    <glyph glyph-name="remove_circle" unicode="&#xf05c;" 
-d="M1097 457l-146 -146q-10 -10 -23 -10t-23 10l-137 137l-137 -137q-10 -10 -23 -10t-23 10l-146 146q-10 10 -10 23t10 23l137 137l-137 137q-10 10 -10 23t10 23l146 146q10 10 23 10t23 -10l137 -137l137 137q10 10 23 10t23 -10l146 -146q10 -10 10 -23t-10 -23
-l-137 -137l137 -137q10 -10 10 -23t-10 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5
-t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-    <glyph glyph-name="ok_circle" unicode="&#xf05d;" 
-d="M1171 723l-422 -422q-19 -19 -45 -19t-45 19l-294 294q-19 19 -19 45t19 45l102 102q19 19 45 19t45 -19l147 -147l275 275q19 19 45 19t45 -19l102 -102q19 -19 19 -45t-19 -45zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198
-t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-    <glyph glyph-name="ban_circle" unicode="&#xf05e;" 
-d="M1312 643q0 161 -87 295l-754 -753q137 -89 297 -89q111 0 211.5 43.5t173.5 116.5t116 174.5t43 212.5zM313 344l755 754q-135 91 -300 91q-148 0 -273 -73t-198 -199t-73 -274q0 -162 89 -299zM1536 643q0 -157 -61 -300t-163.5 -246t-245 -164t-298.5 -61t-298.5 61
-t-245 164t-163.5 246t-61 300t61 299.5t163.5 245.5t245 164t298.5 61t298.5 -61t245 -164t163.5 -245.5t61 -299.5z" />
-    <glyph glyph-name="arrow_left" unicode="&#xf060;" 
-d="M1536 640v-128q0 -53 -32.5 -90.5t-84.5 -37.5h-704l293 -294q38 -36 38 -90t-38 -90l-75 -76q-37 -37 -90 -37q-52 0 -91 37l-651 652q-37 37 -37 90q0 52 37 91l651 650q38 38 91 38q52 0 90 -38l75 -74q38 -38 38 -91t-38 -91l-293 -293h704q52 0 84.5 -37.5
-t32.5 -90.5z" />
-    <glyph glyph-name="arrow_right" unicode="&#xf061;" 
-d="M1472 576q0 -54 -37 -91l-651 -651q-39 -37 -91 -37q-51 0 -90 37l-75 75q-38 38 -38 91t38 91l293 293h-704q-52 0 -84.5 37.5t-32.5 90.5v128q0 53 32.5 90.5t84.5 37.5h704l-293 294q-38 36 -38 90t38 90l75 75q38 38 90 38q53 0 91 -38l651 -651q37 -35 37 -90z" />
-    <glyph glyph-name="arrow_up" unicode="&#xf062;" horiz-adv-x="1664" 
-d="M1611 565q0 -51 -37 -90l-75 -75q-38 -38 -91 -38q-54 0 -90 38l-294 293v-704q0 -52 -37.5 -84.5t-90.5 -32.5h-128q-53 0 -90.5 32.5t-37.5 84.5v704l-294 -293q-36 -38 -90 -38t-90 38l-75 75q-38 38 -38 90q0 53 38 91l651 651q35 37 90 37q54 0 91 -37l651 -651
-q37 -39 37 -91z" />
-    <glyph glyph-name="arrow_down" unicode="&#xf063;" horiz-adv-x="1664" 
-d="M1611 704q0 -53 -37 -90l-651 -652q-39 -37 -91 -37q-53 0 -90 37l-651 652q-38 36 -38 90q0 53 38 91l74 75q39 37 91 37q53 0 90 -37l294 -294v704q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-704l294 294q37 37 90 37q52 0 91 -37l75 -75q37 -39 37 -91z" />
-    <glyph glyph-name="share_alt" unicode="&#xf064;" horiz-adv-x="1792" 
-d="M1792 896q0 -26 -19 -45l-512 -512q-19 -19 -45 -19t-45 19t-19 45v256h-224q-98 0 -175.5 -6t-154 -21.5t-133 -42.5t-105.5 -69.5t-80 -101t-48.5 -138.5t-17.5 -181q0 -55 5 -123q0 -6 2.5 -23.5t2.5 -26.5q0 -15 -8.5 -25t-23.5 -10q-16 0 -28 17q-7 9 -13 22
-t-13.5 30t-10.5 24q-127 285 -127 451q0 199 53 333q162 403 875 403h224v256q0 26 19 45t45 19t45 -19l512 -512q19 -19 19 -45z" />
-    <glyph glyph-name="resize_full" unicode="&#xf065;" 
-d="M755 480q0 -13 -10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45t-45 -19h-448q-26 0 -45 19t-19 45v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23zM1536 1344v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332
-q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45z" />
-    <glyph glyph-name="resize_small" unicode="&#xf066;" 
-d="M768 576v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45zM1523 1248q0 -13 -10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45
-t-45 -19h-448q-26 0 -45 19t-19 45v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23z" />
-    <glyph glyph-name="plus" unicode="&#xf067;" horiz-adv-x="1408" 
-d="M1408 800v-192q0 -40 -28 -68t-68 -28h-416v-416q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v416h-416q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h416v416q0 40 28 68t68 28h192q40 0 68 -28t28 -68v-416h416q40 0 68 -28t28 -68z" />
-    <glyph glyph-name="minus" unicode="&#xf068;" horiz-adv-x="1408" 
-d="M1408 800v-192q0 -40 -28 -68t-68 -28h-1216q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h1216q40 0 68 -28t28 -68z" />
-    <glyph glyph-name="asterisk" unicode="&#xf069;" horiz-adv-x="1664" 
-d="M1482 486q46 -26 59.5 -77.5t-12.5 -97.5l-64 -110q-26 -46 -77.5 -59.5t-97.5 12.5l-266 153v-307q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v307l-266 -153q-46 -26 -97.5 -12.5t-77.5 59.5l-64 110q-26 46 -12.5 97.5t59.5 77.5l266 154l-266 154
-q-46 26 -59.5 77.5t12.5 97.5l64 110q26 46 77.5 59.5t97.5 -12.5l266 -153v307q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-307l266 153q46 26 97.5 12.5t77.5 -59.5l64 -110q26 -46 12.5 -97.5t-59.5 -77.5l-266 -154z" />
-    <glyph glyph-name="exclamation_sign" unicode="&#xf06a;" 
-d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM896 161v190q0 14 -9 23.5t-22 9.5h-192q-13 0 -23 -10t-10 -23v-190q0 -13 10 -23t23 -10h192
-q13 0 22 9.5t9 23.5zM894 505l18 621q0 12 -10 18q-10 8 -24 8h-220q-14 0 -24 -8q-10 -6 -10 -18l17 -621q0 -10 10 -17.5t24 -7.5h185q14 0 23.5 7.5t10.5 17.5z" />
-    <glyph glyph-name="gift" unicode="&#xf06b;" 
-d="M928 180v56v468v192h-320v-192v-468v-56q0 -25 18 -38.5t46 -13.5h192q28 0 46 13.5t18 38.5zM472 1024h195l-126 161q-26 31 -69 31q-40 0 -68 -28t-28 -68t28 -68t68 -28zM1160 1120q0 40 -28 68t-68 28q-43 0 -69 -31l-125 -161h194q40 0 68 28t28 68zM1536 864v-320
-q0 -14 -9 -23t-23 -9h-96v-416q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v416h-96q-14 0 -23 9t-9 23v320q0 14 9 23t23 9h440q-93 0 -158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5q107 0 168 -77l128 -165l128 165q61 77 168 77q93 0 158.5 -65.5t65.5 -158.5
-t-65.5 -158.5t-158.5 -65.5h440q14 0 23 -9t9 -23z" />
-    <glyph glyph-name="leaf" unicode="&#xf06c;" horiz-adv-x="1792" 
-d="M1280 832q0 26 -19 45t-45 19q-172 0 -318 -49.5t-259.5 -134t-235.5 -219.5q-19 -21 -19 -45q0 -26 19 -45t45 -19q24 0 45 19q27 24 74 71t67 66q137 124 268.5 176t313.5 52q26 0 45 19t19 45zM1792 1030q0 -95 -20 -193q-46 -224 -184.5 -383t-357.5 -268
-q-214 -108 -438 -108q-148 0 -286 47q-15 5 -88 42t-96 37q-16 0 -39.5 -32t-45 -70t-52.5 -70t-60 -32q-43 0 -63.5 17.5t-45.5 59.5q-2 4 -6 11t-5.5 10t-3 9.5t-1.5 13.5q0 35 31 73.5t68 65.5t68 56t31 48q0 4 -14 38t-16 44q-9 51 -9 104q0 115 43.5 220t119 184.5
-t170.5 139t204 95.5q55 18 145 25.5t179.5 9t178.5 6t163.5 24t113.5 56.5l29.5 29.5t29.5 28t27 20t36.5 16t43.5 4.5q39 0 70.5 -46t47.5 -112t24 -124t8 -96z" />
-    <glyph glyph-name="fire" unicode="&#xf06d;" horiz-adv-x="1408" 
-d="M1408 -160v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1152 896q0 -78 -24.5 -144t-64 -112.5t-87.5 -88t-96 -77.5t-87.5 -72t-64 -81.5t-24.5 -96.5q0 -96 67 -224l-4 1l1 -1
-q-90 41 -160 83t-138.5 100t-113.5 122.5t-72.5 150.5t-27.5 184q0 78 24.5 144t64 112.5t87.5 88t96 77.5t87.5 72t64 81.5t24.5 96.5q0 94 -66 224l3 -1l-1 1q90 -41 160 -83t138.5 -100t113.5 -122.5t72.5 -150.5t27.5 -184z" />
-    <glyph glyph-name="eye_open" unicode="&#xf06e;" horiz-adv-x="1792" 
-d="M1664 576q-152 236 -381 353q61 -104 61 -225q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 121 61 225q-229 -117 -381 -353q133 -205 333.5 -326.5t434.5 -121.5t434.5 121.5t333.5 326.5zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5
-t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1792 576q0 -34 -20 -69q-140 -230 -376.5 -368.5t-499.5 -138.5t-499.5 139t-376.5 368q-20 35 -20 69t20 69q140 229 376.5 368t499.5 139t499.5 -139t376.5 -368q20 -35 20 -69z" />
-    <glyph glyph-name="eye_close" unicode="&#xf070;" horiz-adv-x="1792" 
-d="M555 201l78 141q-87 63 -136 159t-49 203q0 121 61 225q-229 -117 -381 -353q167 -258 427 -375zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1307 1151q0 -7 -1 -9
-q-106 -189 -316 -567t-315 -566l-49 -89q-10 -16 -28 -16q-12 0 -134 70q-16 10 -16 28q0 12 44 87q-143 65 -263.5 173t-208.5 245q-20 31 -20 69t20 69q153 235 380 371t496 136q89 0 180 -17l54 97q10 16 28 16q5 0 18 -6t31 -15.5t33 -18.5t31.5 -18.5t19.5 -11.5
-q16 -10 16 -27zM1344 704q0 -139 -79 -253.5t-209 -164.5l280 502q8 -45 8 -84zM1792 576q0 -35 -20 -69q-39 -64 -109 -145q-150 -172 -347.5 -267t-419.5 -95l74 132q212 18 392.5 137t301.5 307q-115 179 -282 294l63 112q95 -64 182.5 -153t144.5 -184q20 -34 20 -69z
-" />
-    <glyph glyph-name="warning_sign" unicode="&#xf071;" horiz-adv-x="1792" 
-d="M1024 161v190q0 14 -9.5 23.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -23.5v-190q0 -14 9.5 -23.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 23.5zM1022 535l18 459q0 12 -10 19q-13 11 -24 11h-220q-11 0 -24 -11q-10 -7 -10 -21l17 -457q0 -10 10 -16.5t24 -6.5h185
-q14 0 23.5 6.5t10.5 16.5zM1008 1469l768 -1408q35 -63 -2 -126q-17 -29 -46.5 -46t-63.5 -17h-1536q-34 0 -63.5 17t-46.5 46q-37 63 -2 126l768 1408q17 31 47 49t65 18t65 -18t47 -49z" />
-    <glyph glyph-name="plane" unicode="&#xf072;" horiz-adv-x="1408" 
-d="M1376 1376q44 -52 12 -148t-108 -172l-161 -161l160 -696q5 -19 -12 -33l-128 -96q-7 -6 -19 -6q-4 0 -7 1q-15 3 -21 16l-279 508l-259 -259l53 -194q5 -17 -8 -31l-96 -96q-9 -9 -23 -9h-2q-15 2 -24 13l-189 252l-252 189q-11 7 -13 23q-1 13 9 25l96 97q9 9 23 9
-q6 0 8 -1l194 -53l259 259l-508 279q-14 8 -17 24q-2 16 9 27l128 128q14 13 30 8l665 -159l160 160q76 76 172 108t148 -12z" />
-    <glyph glyph-name="calendar" unicode="&#xf073;" horiz-adv-x="1664" 
-d="M128 -128h288v288h-288v-288zM480 -128h320v288h-320v-288zM128 224h288v320h-288v-320zM480 224h320v320h-320v-320zM128 608h288v288h-288v-288zM864 -128h320v288h-320v-288zM480 608h320v288h-320v-288zM1248 -128h288v288h-288v-288zM864 224h320v320h-320v-320z
-M512 1088v288q0 13 -9.5 22.5t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-288q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1248 224h288v320h-288v-320zM864 608h320v288h-320v-288zM1248 608h288v288h-288v-288zM1280 1088v288q0 13 -9.5 22.5t-22.5 9.5h-64
-q-13 0 -22.5 -9.5t-9.5 -22.5v-288q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1664 1152v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47
-h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" />
-    <glyph glyph-name="random" unicode="&#xf074;" horiz-adv-x="1792" 
-d="M666 1055q-60 -92 -137 -273q-22 45 -37 72.5t-40.5 63.5t-51 56.5t-63 35t-81.5 14.5h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224q250 0 410 -225zM1792 256q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v192q-32 0 -85 -0.5t-81 -1t-73 1
-t-71 5t-64 10.5t-63 18.5t-58 28.5t-59 40t-55 53.5t-56 69.5q59 93 136 273q22 -45 37 -72.5t40.5 -63.5t51 -56.5t63 -35t81.5 -14.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23zM1792 1152q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5
-v192h-256q-48 0 -87 -15t-69 -45t-51 -61.5t-45 -77.5q-32 -62 -78 -171q-29 -66 -49.5 -111t-54 -105t-64 -100t-74 -83t-90 -68.5t-106.5 -42t-128 -16.5h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224q48 0 87 15t69 45t51 61.5t45 77.5q32 62 78 171q29 66 49.5 111
-t54 105t64 100t74 83t90 68.5t106.5 42t128 16.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23z" />
-    <glyph glyph-name="comment" unicode="&#xf075;" horiz-adv-x="1792" 
-d="M1792 640q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22q-17 -2 -30.5 9t-17.5 29v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51t27 59t26 76q-157 89 -247.5 220t-90.5 281
-q0 130 71 248.5t191 204.5t286 136.5t348 50.5q244 0 450 -85.5t326 -233t120 -321.5z" />
-    <glyph glyph-name="magnet" unicode="&#xf076;" 
-d="M1536 704v-128q0 -201 -98.5 -362t-274 -251.5t-395.5 -90.5t-395.5 90.5t-274 251.5t-98.5 362v128q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-128q0 -52 23.5 -90t53.5 -57t71 -30t64 -13t44 -2t44 2t64 13t71 30t53.5 57t23.5 90v128q0 26 19 45t45 19h384
-q26 0 45 -19t19 -45zM512 1344v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45zM1536 1344v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45z" />
-    <glyph glyph-name="chevron_up" unicode="&#xf077;" horiz-adv-x="1792" 
-d="M1683 205l-166 -165q-19 -19 -45 -19t-45 19l-531 531l-531 -531q-19 -19 -45 -19t-45 19l-166 165q-19 19 -19 45.5t19 45.5l742 741q19 19 45 19t45 -19l742 -741q19 -19 19 -45.5t-19 -45.5z" />
-    <glyph glyph-name="chevron_down" unicode="&#xf078;" horiz-adv-x="1792" 
-d="M1683 728l-742 -741q-19 -19 -45 -19t-45 19l-742 741q-19 19 -19 45.5t19 45.5l166 165q19 19 45 19t45 -19l531 -531l531 531q19 19 45 19t45 -19l166 -165q19 -19 19 -45.5t-19 -45.5z" />
-    <glyph glyph-name="retweet" unicode="&#xf079;" horiz-adv-x="1920" 
-d="M1280 32q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-8 0 -13.5 2t-9 7t-5.5 8t-3 11.5t-1 11.5v13v11v160v416h-192q-26 0 -45 19t-19 45q0 24 15 41l320 384q19 22 49 22t49 -22l320 -384q15 -17 15 -41q0 -26 -19 -45t-45 -19h-192v-384h576q16 0 25 -11l160 -192q7 -10 7 -21
-zM1920 448q0 -24 -15 -41l-320 -384q-20 -23 -49 -23t-49 23l-320 384q-15 17 -15 41q0 26 19 45t45 19h192v384h-576q-16 0 -25 12l-160 192q-7 9 -7 20q0 13 9.5 22.5t22.5 9.5h960q8 0 13.5 -2t9 -7t5.5 -8t3 -11.5t1 -11.5v-13v-11v-160v-416h192q26 0 45 -19t19 -45z
-" />
-    <glyph glyph-name="shopping_cart" unicode="&#xf07a;" horiz-adv-x="1664" 
-d="M640 0q0 -52 -38 -90t-90 -38t-90 38t-38 90t38 90t90 38t90 -38t38 -90zM1536 0q0 -52 -38 -90t-90 -38t-90 38t-38 90t38 90t90 38t90 -38t38 -90zM1664 1088v-512q0 -24 -16.5 -42.5t-40.5 -21.5l-1044 -122q13 -60 13 -70q0 -16 -24 -64h920q26 0 45 -19t19 -45
-t-19 -45t-45 -19h-1024q-26 0 -45 19t-19 45q0 11 8 31.5t16 36t21.5 40t15.5 29.5l-177 823h-204q-26 0 -45 19t-19 45t19 45t45 19h256q16 0 28.5 -6.5t19.5 -15.5t13 -24.5t8 -26t5.5 -29.5t4.5 -26h1201q26 0 45 -19t19 -45z" />
-    <glyph glyph-name="folder_close" unicode="&#xf07b;" horiz-adv-x="1664" 
-d="M1664 928v-704q0 -92 -66 -158t-158 -66h-1216q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h672q92 0 158 -66t66 -158z" />
-    <glyph glyph-name="folder_open" unicode="&#xf07c;" horiz-adv-x="1920" 
-d="M1879 584q0 -31 -31 -66l-336 -396q-43 -51 -120.5 -86.5t-143.5 -35.5h-1088q-34 0 -60.5 13t-26.5 43q0 31 31 66l336 396q43 51 120.5 86.5t143.5 35.5h1088q34 0 60.5 -13t26.5 -43zM1536 928v-160h-832q-94 0 -197 -47.5t-164 -119.5l-337 -396l-5 -6q0 4 -0.5 12.5
-t-0.5 12.5v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h544q92 0 158 -66t66 -158z" />
-    <glyph glyph-name="resize_vertical" unicode="&#xf07d;" horiz-adv-x="768" 
-d="M704 1216q0 -26 -19 -45t-45 -19h-128v-1024h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v1024h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45z" />
-    <glyph glyph-name="resize_horizontal" unicode="&#xf07e;" horiz-adv-x="1792" 
-d="M1792 640q0 -26 -19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-1024v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45t19 45l256 256q19 19 45 19t45 -19t19 -45v-128h1024v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45z" />
-    <glyph glyph-name="bar_chart" unicode="&#xf080;" horiz-adv-x="2048" 
-d="M640 640v-512h-256v512h256zM1024 1152v-1024h-256v1024h256zM2048 0v-128h-2048v1536h128v-1408h1920zM1408 896v-768h-256v768h256zM1792 1280v-1152h-256v1152h256z" />
-    <glyph glyph-name="twitter_sign" unicode="&#xf081;" 
-d="M1280 926q-56 -25 -121 -34q68 40 93 117q-65 -38 -134 -51q-61 66 -153 66q-87 0 -148.5 -61.5t-61.5 -148.5q0 -29 5 -48q-129 7 -242 65t-192 155q-29 -50 -29 -106q0 -114 91 -175q-47 1 -100 26v-2q0 -75 50 -133.5t123 -72.5q-29 -8 -51 -8q-13 0 -39 4
-q21 -63 74.5 -104t121.5 -42q-116 -90 -261 -90q-26 0 -50 3q148 -94 322 -94q112 0 210 35.5t168 95t120.5 137t75 162t24.5 168.5q0 18 -1 27q63 45 105 109zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5
-t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-    <glyph glyph-name="facebook_sign" unicode="&#xf082;" 
-d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-188v595h199l30 232h-229v148q0 56 23.5 84t91.5 28l122 1v207q-63 9 -178 9q-136 0 -217.5 -80t-81.5 -226v-171h-200v-232h200v-595h-532q-119 0 -203.5 84.5t-84.5 203.5v960
-q0 119 84.5 203.5t203.5 84.5h960z" />
-    <glyph glyph-name="camera_retro" unicode="&#xf083;" horiz-adv-x="1792" 
-d="M928 704q0 14 -9 23t-23 9q-66 0 -113 -47t-47 -113q0 -14 9 -23t23 -9t23 9t9 23q0 40 28 68t68 28q14 0 23 9t9 23zM1152 574q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM128 0h1536v128h-1536v-128zM1280 574q0 159 -112.5 271.5
-t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM256 1216h384v128h-384v-128zM128 1024h1536v118v138h-828l-64 -128h-644v-128zM1792 1280v-1280q0 -53 -37.5 -90.5t-90.5 -37.5h-1536q-53 0 -90.5 37.5t-37.5 90.5v1280
-q0 53 37.5 90.5t90.5 37.5h1536q53 0 90.5 -37.5t37.5 -90.5z" />
-    <glyph glyph-name="key" unicode="&#xf084;" horiz-adv-x="1792" 
-d="M832 1024q0 80 -56 136t-136 56t-136 -56t-56 -136q0 -42 19 -83q-41 19 -83 19q-80 0 -136 -56t-56 -136t56 -136t136 -56t136 56t56 136q0 42 -19 83q41 -19 83 -19q80 0 136 56t56 136zM1683 320q0 -17 -49 -66t-66 -49q-9 0 -28.5 16t-36.5 33t-38.5 40t-24.5 26
-l-96 -96l220 -220q28 -28 28 -68q0 -42 -39 -81t-81 -39q-40 0 -68 28l-671 671q-176 -131 -365 -131q-163 0 -265.5 102.5t-102.5 265.5q0 160 95 313t248 248t313 95q163 0 265.5 -102.5t102.5 -265.5q0 -189 -131 -365l355 -355l96 96q-3 3 -26 24.5t-40 38.5t-33 36.5
-t-16 28.5q0 17 49 66t66 49q13 0 23 -10q6 -6 46 -44.5t82 -79.5t86.5 -86t73 -78t28.5 -41z" />
-    <glyph glyph-name="cogs" unicode="&#xf085;" horiz-adv-x="1920" 
-d="M896 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1664 128q0 52 -38 90t-90 38t-90 -38t-38 -90q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 1152q0 52 -38 90t-90 38t-90 -38t-38 -90q0 -53 37.5 -90.5t90.5 -37.5
-t90.5 37.5t37.5 90.5zM1280 731v-185q0 -10 -7 -19.5t-16 -10.5l-155 -24q-11 -35 -32 -76q34 -48 90 -115q7 -11 7 -20q0 -12 -7 -19q-23 -30 -82.5 -89.5t-78.5 -59.5q-11 0 -21 7l-115 90q-37 -19 -77 -31q-11 -108 -23 -155q-7 -24 -30 -24h-186q-11 0 -20 7.5t-10 17.5
-l-23 153q-34 10 -75 31l-118 -89q-7 -7 -20 -7q-11 0 -21 8q-144 133 -144 160q0 9 7 19q10 14 41 53t47 61q-23 44 -35 82l-152 24q-10 1 -17 9.5t-7 19.5v185q0 10 7 19.5t16 10.5l155 24q11 35 32 76q-34 48 -90 115q-7 11 -7 20q0 12 7 20q22 30 82 89t79 59q11 0 21 -7
-l115 -90q34 18 77 32q11 108 23 154q7 24 30 24h186q11 0 20 -7.5t10 -17.5l23 -153q34 -10 75 -31l118 89q8 7 20 7q11 0 21 -8q144 -133 144 -160q0 -8 -7 -19q-12 -16 -42 -54t-45 -60q23 -48 34 -82l152 -23q10 -2 17 -10.5t7 -19.5zM1920 198v-140q0 -16 -149 -31
-q-12 -27 -30 -52q51 -113 51 -138q0 -4 -4 -7q-122 -71 -124 -71q-8 0 -46 47t-52 68q-20 -2 -30 -2t-30 2q-14 -21 -52 -68t-46 -47q-2 0 -124 71q-4 3 -4 7q0 25 51 138q-18 25 -30 52q-149 15 -149 31v140q0 16 149 31q13 29 30 52q-51 113 -51 138q0 4 4 7q4 2 35 20
-t59 34t30 16q8 0 46 -46.5t52 -67.5q20 2 30 2t30 -2q51 71 92 112l6 2q4 0 124 -70q4 -3 4 -7q0 -25 -51 -138q17 -23 30 -52q149 -15 149 -31zM1920 1222v-140q0 -16 -149 -31q-12 -27 -30 -52q51 -113 51 -138q0 -4 -4 -7q-122 -71 -124 -71q-8 0 -46 47t-52 68
-q-20 -2 -30 -2t-30 2q-14 -21 -52 -68t-46 -47q-2 0 -124 71q-4 3 -4 7q0 25 51 138q-18 25 -30 52q-149 15 -149 31v140q0 16 149 31q13 29 30 52q-51 113 -51 138q0 4 4 7q4 2 35 20t59 34t30 16q8 0 46 -46.5t52 -67.5q20 2 30 2t30 -2q51 71 92 112l6 2q4 0 124 -70
-q4 -3 4 -7q0 -25 -51 -138q17 -23 30 -52q149 -15 149 -31z" />
-    <glyph glyph-name="comments" unicode="&#xf086;" horiz-adv-x="1792" 
-d="M1408 768q0 -139 -94 -257t-256.5 -186.5t-353.5 -68.5q-86 0 -176 16q-124 -88 -278 -128q-36 -9 -86 -16h-3q-11 0 -20.5 8t-11.5 21q-1 3 -1 6.5t0.5 6.5t2 6l2.5 5t3.5 5.5t4 5t4.5 5t4 4.5q5 6 23 25t26 29.5t22.5 29t25 38.5t20.5 44q-124 72 -195 177t-71 224
-q0 139 94 257t256.5 186.5t353.5 68.5t353.5 -68.5t256.5 -186.5t94 -257zM1792 512q0 -120 -71 -224.5t-195 -176.5q10 -24 20.5 -44t25 -38.5t22.5 -29t26 -29.5t23 -25q1 -1 4 -4.5t4.5 -5t4 -5t3.5 -5.5l2.5 -5t2 -6t0.5 -6.5t-1 -6.5q-3 -14 -13 -22t-22 -7
-q-50 7 -86 16q-154 40 -278 128q-90 -16 -176 -16q-271 0 -472 132q58 -4 88 -4q161 0 309 45t264 129q125 92 192 212t67 254q0 77 -23 152q129 -71 204 -178t75 -230z" />
-    <glyph glyph-name="thumbs_up_alt" unicode="&#xf087;" 
-d="M256 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 768q0 51 -39 89.5t-89 38.5h-352q0 58 48 159.5t48 160.5q0 98 -32 145t-128 47q-26 -26 -38 -85t-30.5 -125.5t-59.5 -109.5q-22 -23 -77 -91q-4 -5 -23 -30t-31.5 -41t-34.5 -42.5
-t-40 -44t-38.5 -35.5t-40 -27t-35.5 -9h-32v-640h32q13 0 31.5 -3t33 -6.5t38 -11t35 -11.5t35.5 -12.5t29 -10.5q211 -73 342 -73h121q192 0 192 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 47.5q32 1 53.5 47t21.5 81zM1536 769
-q0 -89 -49 -163q9 -33 9 -69q0 -77 -38 -144q3 -21 3 -43q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5h-36h-93q-96 0 -189.5 22.5t-216.5 65.5q-116 40 -138 40h-288q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5h274q36 24 137 155q58 75 107 128
-q24 25 35.5 85.5t30.5 126.5t62 108q39 37 90 37q84 0 151 -32.5t102 -101.5t35 -186q0 -93 -48 -192h176q104 0 180 -76t76 -179z" />
-    <glyph glyph-name="thumbs_down_alt" unicode="&#xf088;" 
-d="M256 1088q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 512q0 35 -21.5 81t-53.5 47q15 17 25 47.5t10 55.5q0 69 -53 119q18 31 18 69q0 37 -17.5 73.5t-47.5 52.5q5 30 5 56q0 85 -49 126t-136 41h-128q-131 0 -342 -73q-5 -2 -29 -10.5
-t-35.5 -12.5t-35 -11.5t-38 -11t-33 -6.5t-31.5 -3h-32v-640h32q16 0 35.5 -9t40 -27t38.5 -35.5t40 -44t34.5 -42.5t31.5 -41t23 -30q55 -68 77 -91q41 -43 59.5 -109.5t30.5 -125.5t38 -85q96 0 128 47t32 145q0 59 -48 160.5t-48 159.5h352q50 0 89 38.5t39 89.5z
-M1536 511q0 -103 -76 -179t-180 -76h-176q48 -99 48 -192q0 -118 -35 -186q-35 -69 -102 -101.5t-151 -32.5q-51 0 -90 37q-34 33 -54 82t-25.5 90.5t-17.5 84.5t-31 64q-48 50 -107 127q-101 131 -137 155h-274q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5
-h288q22 0 138 40q128 44 223 66t200 22h112q140 0 226.5 -79t85.5 -216v-5q60 -77 60 -178q0 -22 -3 -43q38 -67 38 -144q0 -36 -9 -69q49 -73 49 -163z" />
-    <glyph glyph-name="star_half" unicode="&#xf089;" horiz-adv-x="896" 
-d="M832 1504v-1339l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41z" />
-    <glyph glyph-name="heart_empty" unicode="&#xf08a;" horiz-adv-x="1792" 
-d="M1664 940q0 81 -21.5 143t-55 98.5t-81.5 59.5t-94 31t-98 8t-112 -25.5t-110.5 -64t-86.5 -72t-60 -61.5q-18 -22 -49 -22t-49 22q-24 28 -60 61.5t-86.5 72t-110.5 64t-112 25.5t-98 -8t-94 -31t-81.5 -59.5t-55 -98.5t-21.5 -143q0 -168 187 -355l581 -560l580 559
-q188 188 188 356zM1792 940q0 -221 -229 -450l-623 -600q-18 -18 -44 -18t-44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5
-q224 0 351 -124t127 -344z" />
-    <glyph glyph-name="signout" unicode="&#xf08b;" horiz-adv-x="1664" 
-d="M640 96q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h320q13 0 22.5 -9.5t9.5 -22.5q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-66 0 -113 -47t-47 -113v-704
-q0 -66 47 -113t113 -47h288h11h13t11.5 -1t11.5 -3t8 -5.5t7 -9t2 -13.5zM1568 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45z" />
-    <glyph glyph-name="linkedin_sign" unicode="&#xf08c;" 
-d="M237 122h231v694h-231v-694zM483 1030q-1 52 -36 86t-93 34t-94.5 -34t-36.5 -86q0 -51 35.5 -85.5t92.5 -34.5h1q59 0 95 34.5t36 85.5zM1068 122h231v398q0 154 -73 233t-193 79q-136 0 -209 -117h2v101h-231q3 -66 0 -694h231v388q0 38 7 56q15 35 45 59.5t74 24.5
-q116 0 116 -157v-371zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-    <glyph glyph-name="pushpin" unicode="&#xf08d;" horiz-adv-x="1152" 
-d="M480 672v448q0 14 -9 23t-23 9t-23 -9t-9 -23v-448q0 -14 9 -23t23 -9t23 9t9 23zM1152 320q0 -26 -19 -45t-45 -19h-429l-51 -483q-2 -12 -10.5 -20.5t-20.5 -8.5h-1q-27 0 -32 27l-76 485h-404q-26 0 -45 19t-19 45q0 123 78.5 221.5t177.5 98.5v512q-52 0 -90 38
-t-38 90t38 90t90 38h640q52 0 90 -38t38 -90t-38 -90t-90 -38v-512q99 0 177.5 -98.5t78.5 -221.5z" />
-    <glyph glyph-name="external_link" unicode="&#xf08e;" horiz-adv-x="1792" 
-d="M1408 608v-320q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h704q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v320
-q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1792 1472v-512q0 -26 -19 -45t-45 -19t-45 19l-176 176l-652 -652q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l652 652l-176 176q-19 19 -19 45t19 45t45 19h512q26 0 45 -19t19 -45z" />
-    <glyph glyph-name="signin" unicode="&#xf090;" 
-d="M1184 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45zM1536 992v-704q0 -119 -84.5 -203.5t-203.5 -84.5h-320q-13 0 -22.5 9.5t-9.5 22.5
-q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q66 0 113 47t47 113v704q0 66 -47 113t-113 47h-288h-11h-13t-11.5 1t-11.5 3t-8 5.5t-7 9t-2 13.5q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q119 0 203.5 -84.5t84.5 -203.5z" />
-    <glyph glyph-name="trophy" unicode="&#xf091;" horiz-adv-x="1664" 
-d="M458 653q-74 162 -74 371h-256v-96q0 -78 94.5 -162t235.5 -113zM1536 928v96h-256q0 -209 -74 -371q141 29 235.5 113t94.5 162zM1664 1056v-128q0 -71 -41.5 -143t-112 -130t-173 -97.5t-215.5 -44.5q-42 -54 -95 -95q-38 -34 -52.5 -72.5t-14.5 -89.5q0 -54 30.5 -91
-t97.5 -37q75 0 133.5 -45.5t58.5 -114.5v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v64q0 69 58.5 114.5t133.5 45.5q67 0 97.5 37t30.5 91q0 51 -14.5 89.5t-52.5 72.5q-53 41 -95 95q-113 5 -215.5 44.5t-173 97.5t-112 130t-41.5 143v128q0 40 28 68t68 28h288v96
-q0 66 47 113t113 47h576q66 0 113 -47t47 -113v-96h288q40 0 68 -28t28 -68z" />
-    <glyph glyph-name="github_sign" unicode="&#xf092;" 
-d="M519 336q4 6 -3 13q-9 7 -14 2q-4 -6 3 -13q9 -7 14 -2zM491 377q-5 7 -12 4q-6 -4 0 -12q7 -8 12 -5q6 4 0 13zM450 417q2 4 -5 8q-7 2 -8 -2q-3 -5 4 -8q8 -2 9 2zM471 394q2 1 1.5 4.5t-3.5 5.5q-6 7 -10 3t1 -11q6 -6 11 -2zM557 319q2 7 -9 11q-9 3 -13 -4
-q-2 -7 9 -11q9 -3 13 4zM599 316q0 8 -12 8q-10 0 -10 -8t11 -8t11 8zM638 323q-2 7 -13 5t-9 -9q2 -8 12 -6t10 10zM1280 640q0 212 -150 362t-362 150t-362 -150t-150 -362q0 -167 98 -300.5t252 -185.5q18 -3 26.5 5t8.5 20q0 52 -1 95q-6 -1 -15.5 -2.5t-35.5 -2t-48 4
-t-43.5 20t-29.5 41.5q-23 59 -57 74q-2 1 -4.5 3.5l-8 8t-7 9.5t4 7.5t19.5 3.5q6 0 15 -2t30 -15.5t33 -35.5q16 -28 37.5 -42t43.5 -14t38 3.5t30 9.5q7 47 33 69q-49 6 -86 18.5t-73 39t-55.5 76t-19.5 119.5q0 79 53 137q-24 62 5 136q19 6 54.5 -7.5t60.5 -29.5l26 -16
-q58 17 128 17t128 -17q11 7 28.5 18t55.5 26t57 9q29 -74 5 -136q53 -58 53 -137q0 -57 -14 -100.5t-35.5 -70t-53.5 -44.5t-62.5 -26t-68.5 -12q35 -31 35 -95q0 -40 -0.5 -89t-0.5 -51q0 -12 8.5 -20t26.5 -5q154 52 252 185.5t98 300.5zM1536 1120v-960
-q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-    <glyph glyph-name="upload_alt" unicode="&#xf093;" horiz-adv-x="1664" 
-d="M1280 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 288v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h427q21 -56 70.5 -92
-t110.5 -36h256q61 0 110.5 36t70.5 92h427q40 0 68 -28t28 -68zM1339 936q-17 -40 -59 -40h-256v-448q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v448h-256q-42 0 -59 40q-17 39 14 69l448 448q18 19 45 19t45 -19l448 -448q31 -30 14 -69z" />
-    <glyph glyph-name="lemon" unicode="&#xf094;" 
-d="M1407 710q0 44 -7 113.5t-18 96.5q-12 30 -17 44t-9 36.5t-4 48.5q0 23 5 68.5t5 67.5q0 37 -10 55q-4 1 -13 1q-19 0 -58 -4.5t-59 -4.5q-60 0 -176 24t-175 24q-43 0 -94.5 -11.5t-85 -23.5t-89.5 -34q-137 -54 -202 -103q-96 -73 -159.5 -189.5t-88 -236t-24.5 -248.5
-q0 -40 12.5 -120t12.5 -121q0 -23 -11 -66.5t-11 -65.5t12 -36.5t34 -14.5q24 0 72.5 11t73.5 11q57 0 169.5 -15.5t169.5 -15.5q181 0 284 36q129 45 235.5 152.5t166 245.5t59.5 275zM1535 712q0 -165 -70 -327.5t-196 -288t-281 -180.5q-124 -44 -326 -44
-q-57 0 -170 14.5t-169 14.5q-24 0 -72.5 -14.5t-73.5 -14.5q-73 0 -123.5 55.5t-50.5 128.5q0 24 11 68t11 67q0 40 -12.5 120.5t-12.5 121.5q0 111 18 217.5t54.5 209.5t100.5 194t150 156q78 59 232 120q194 78 316 78q60 0 175.5 -24t173.5 -24q19 0 57 5t58 5
-q81 0 118 -50.5t37 -134.5q0 -23 -5 -68t-5 -68q0 -13 2 -25t3.5 -16.5t7.5 -20.5t8 -20q16 -40 25 -118.5t9 -136.5z" />
-    <glyph glyph-name="phone" unicode="&#xf095;" horiz-adv-x="1408" 
-d="M1408 296q0 -27 -10 -70.5t-21 -68.5q-21 -50 -122 -106q-94 -51 -186 -51q-27 0 -53 3.5t-57.5 12.5t-47 14.5t-55.5 20.5t-49 18q-98 35 -175 83q-127 79 -264 216t-216 264q-48 77 -83 175q-3 9 -18 49t-20.5 55.5t-14.5 47t-12.5 57.5t-3.5 53q0 92 51 186
-q56 101 106 122q25 11 68.5 21t70.5 10q14 0 21 -3q18 -6 53 -76q11 -19 30 -54t35 -63.5t31 -53.5q3 -4 17.5 -25t21.5 -35.5t7 -28.5q0 -20 -28.5 -50t-62 -55t-62 -53t-28.5 -46q0 -9 5 -22.5t8.5 -20.5t14 -24t11.5 -19q76 -137 174 -235t235 -174q2 -1 19 -11.5t24 -14
-t20.5 -8.5t22.5 -5q18 0 46 28.5t53 62t55 62t50 28.5q14 0 28.5 -7t35.5 -21.5t25 -17.5q25 -15 53.5 -31t63.5 -35t54 -30q70 -35 76 -53q3 -7 3 -21z" />
-    <glyph glyph-name="check_empty" unicode="&#xf096;" horiz-adv-x="1408" 
-d="M1120 1280h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v832q0 66 -47 113t-113 47zM1408 1120v-832q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832
-q119 0 203.5 -84.5t84.5 -203.5z" />
-    <glyph glyph-name="bookmark_empty" unicode="&#xf097;" horiz-adv-x="1280" 
-d="M1152 1280h-1024v-1242l423 406l89 85l89 -85l423 -406v1242zM1164 1408q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62v1289
-q0 34 19.5 62t52.5 41q21 9 44 9h1048z" />
-    <glyph glyph-name="phone_sign" unicode="&#xf098;" 
-d="M1280 343q0 11 -2 16t-18 16.5t-40.5 25t-47.5 26.5t-45.5 25t-28.5 15q-5 3 -19 13t-25 15t-21 5q-15 0 -36.5 -20.5t-39.5 -45t-38.5 -45t-33.5 -20.5q-7 0 -16.5 3.5t-15.5 6.5t-17 9.5t-14 8.5q-99 55 -170 126.5t-127 170.5q-2 3 -8.5 14t-9.5 17t-6.5 15.5
-t-3.5 16.5q0 13 20.5 33.5t45 38.5t45 39.5t20.5 36.5q0 10 -5 21t-15 25t-13 19q-3 6 -15 28.5t-25 45.5t-26.5 47.5t-25 40.5t-16.5 18t-16 2q-48 0 -101 -22q-46 -21 -80 -94.5t-34 -130.5q0 -16 2.5 -34t5 -30.5t9 -33t10 -29.5t12.5 -33t11 -30q60 -164 216.5 -320.5
-t320.5 -216.5q6 -2 30 -11t33 -12.5t29.5 -10t33 -9t30.5 -5t34 -2.5q57 0 130.5 34t94.5 80q22 53 22 101zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z
-" />
-    <glyph glyph-name="twitter" unicode="&#xf099;" horiz-adv-x="1664" 
-d="M1620 1128q-67 -98 -162 -167q1 -14 1 -42q0 -130 -38 -259.5t-115.5 -248.5t-184.5 -210.5t-258 -146t-323 -54.5q-271 0 -496 145q35 -4 78 -4q225 0 401 138q-105 2 -188 64.5t-114 159.5q33 -5 61 -5q43 0 85 11q-112 23 -185.5 111.5t-73.5 205.5v4q68 -38 146 -41
-q-66 44 -105 115t-39 154q0 88 44 163q121 -149 294.5 -238.5t371.5 -99.5q-8 38 -8 74q0 134 94.5 228.5t228.5 94.5q140 0 236 -102q109 21 205 78q-37 -115 -142 -178q93 10 186 50z" />
-    <glyph glyph-name="facebook" unicode="&#xf09a;" horiz-adv-x="1024" 
-d="M959 1524v-264h-157q-86 0 -116 -36t-30 -108v-189h293l-39 -296h-254v-759h-306v759h-255v296h255v218q0 186 104 288.5t277 102.5q147 0 228 -12z" />
-    <glyph glyph-name="github" unicode="&#xf09b;" 
-d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5q0 -251 -146.5 -451.5t-378.5 -277.5q-27 -5 -40 7t-13 30q0 3 0.5 76.5t0.5 134.5q0 97 -52 142q57 6 102.5 18t94 39t81 66.5t53 105t20.5 150.5q0 119 -79 206q37 91 -8 204q-28 9 -81 -11t-92 -44l-38 -24
-q-93 26 -192 26t-192 -26q-16 11 -42.5 27t-83.5 38.5t-85 13.5q-45 -113 -8 -204q-79 -87 -79 -206q0 -85 20.5 -150t52.5 -105t80.5 -67t94 -39t102.5 -18q-39 -36 -49 -103q-21 -10 -45 -15t-57 -5t-65.5 21.5t-55.5 62.5q-19 32 -48.5 52t-49.5 24l-20 3q-21 0 -29 -4.5
-t-5 -11.5t9 -14t13 -12l7 -5q22 -10 43.5 -38t31.5 -51l10 -23q13 -38 44 -61.5t67 -30t69.5 -7t55.5 3.5l23 4q0 -38 0.5 -88.5t0.5 -54.5q0 -18 -13 -30t-40 -7q-232 77 -378.5 277.5t-146.5 451.5q0 209 103 385.5t279.5 279.5t385.5 103zM291 305q3 7 -7 12
-q-10 3 -13 -2q-3 -7 7 -12q9 -6 13 2zM322 271q7 5 -2 16q-10 9 -16 3q-7 -5 2 -16q10 -10 16 -3zM352 226q9 7 0 19q-8 13 -17 6q-9 -5 0 -18t17 -7zM394 184q8 8 -4 19q-12 12 -20 3q-9 -8 4 -19q12 -12 20 -3zM451 159q3 11 -13 16q-15 4 -19 -7t13 -15q15 -6 19 6z
-M514 154q0 13 -17 11q-16 0 -16 -11q0 -13 17 -11q16 0 16 11zM572 164q-2 11 -18 9q-16 -3 -14 -15t18 -8t14 14z" />
-    <glyph glyph-name="unlock" unicode="&#xf09c;" horiz-adv-x="1664" 
-d="M1664 960v-256q0 -26 -19 -45t-45 -19h-64q-26 0 -45 19t-19 45v256q0 106 -75 181t-181 75t-181 -75t-75 -181v-192h96q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h672v192q0 185 131.5 316.5t316.5 131.5
-t316.5 -131.5t131.5 -316.5z" />
-    <glyph glyph-name="credit_card" unicode="&#xf09d;" horiz-adv-x="1920" 
-d="M1760 1408q66 0 113 -47t47 -113v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600zM160 1280q-13 0 -22.5 -9.5t-9.5 -22.5v-224h1664v224q0 13 -9.5 22.5t-22.5 9.5h-1600zM1760 0q13 0 22.5 9.5t9.5 22.5v608h-1664v-608
-q0 -13 9.5 -22.5t22.5 -9.5h1600zM256 128v128h256v-128h-256zM640 128v128h384v-128h-384z" />
-    <glyph glyph-name="rss" unicode="&#xf09e;" horiz-adv-x="1408" 
-d="M384 192q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 69q2 -28 -17 -48q-18 -21 -47 -21h-135q-25 0 -43 16.5t-20 41.5q-22 229 -184.5 391.5t-391.5 184.5q-25 2 -41.5 20t-16.5 43v135q0 29 21 47q17 17 43 17h5q160 -13 306 -80.5
-t259 -181.5q114 -113 181.5 -259t80.5 -306zM1408 67q2 -27 -18 -47q-18 -20 -46 -20h-143q-26 0 -44.5 17.5t-19.5 42.5q-12 215 -101 408.5t-231.5 336t-336 231.5t-408.5 102q-25 1 -42.5 19.5t-17.5 43.5v143q0 28 20 46q18 18 44 18h3q262 -13 501.5 -120t425.5 -294
-q187 -186 294 -425.5t120 -501.5z" />
-    <glyph glyph-name="hdd" unicode="&#xf0a0;" 
-d="M1040 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1296 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1408 160v320q0 13 -9.5 22.5t-22.5 9.5
-h-1216q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h1216q13 0 22.5 9.5t9.5 22.5zM178 640h1180l-157 482q-4 13 -16 21.5t-26 8.5h-782q-14 0 -26 -8.5t-16 -21.5zM1536 480v-320q0 -66 -47 -113t-113 -47h-1216q-66 0 -113 47t-47 113v320q0 25 16 75
-l197 606q17 53 63 86t101 33h782q55 0 101 -33t63 -86l197 -606q16 -50 16 -75z" />
-    <glyph glyph-name="bullhorn" unicode="&#xf0a1;" horiz-adv-x="1792" 
-d="M1664 896q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5v-384q0 -52 -38 -90t-90 -38q-417 347 -812 380q-58 -19 -91 -66t-31 -100.5t40 -92.5q-20 -33 -23 -65.5t6 -58t33.5 -55t48 -50t61.5 -50.5q-29 -58 -111.5 -83t-168.5 -11.5t-132 55.5q-7 23 -29.5 87.5
-t-32 94.5t-23 89t-15 101t3.5 98.5t22 110.5h-122q-66 0 -113 47t-47 113v192q0 66 47 113t113 47h480q435 0 896 384q52 0 90 -38t38 -90v-384zM1536 292v954q-394 -302 -768 -343v-270q377 -42 768 -341z" />
-    <glyph glyph-name="bell" unicode="&#xf0a2;" horiz-adv-x="1792" 
-d="M912 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM246 128h1300q-266 300 -266 832q0 51 -24 105t-69 103t-121.5 80.5t-169.5 31.5t-169.5 -31.5t-121.5 -80.5t-69 -103t-24 -105q0 -532 -266 -832z
-M1728 128q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-181 75t-75 181h-448q-52 0 -90 38t-38 90q50 42 91 88t85 119.5t74.5 158.5t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q190 -28 307 -158.5
-t117 -282.5q0 -139 19.5 -260t50 -206t74.5 -158.5t85 -119.5t91 -88z" />
-    <glyph glyph-name="certificate" unicode="&#xf0a3;" 
-d="M1376 640l138 -135q30 -28 20 -70q-12 -41 -52 -51l-188 -48l53 -186q12 -41 -19 -70q-29 -31 -70 -19l-186 53l-48 -188q-10 -40 -51 -52q-12 -2 -19 -2q-31 0 -51 22l-135 138l-135 -138q-28 -30 -70 -20q-41 11 -51 52l-48 188l-186 -53q-41 -12 -70 19q-31 29 -19 70
-l53 186l-188 48q-40 10 -52 51q-10 42 20 70l138 135l-138 135q-30 28 -20 70q12 41 52 51l188 48l-53 186q-12 41 19 70q29 31 70 19l186 -53l48 188q10 41 51 51q41 12 70 -19l135 -139l135 139q29 30 70 19q41 -10 51 -51l48 -188l186 53q41 12 70 -19q31 -29 19 -70
-l-53 -186l188 -48q40 -10 52 -51q10 -42 -20 -70z" />
-    <glyph glyph-name="hand_right" unicode="&#xf0a4;" horiz-adv-x="1792" 
-d="M256 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 768q0 51 -39 89.5t-89 38.5h-576q0 20 15 48.5t33 55t33 68t15 84.5q0 67 -44.5 97.5t-115.5 30.5q-24 0 -90 -139q-24 -44 -37 -65q-40 -64 -112 -145q-71 -81 -101 -106
-q-69 -57 -140 -57h-32v-640h32q72 0 167 -32t193.5 -64t179.5 -32q189 0 189 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 47.5h331q52 0 90 38t38 90zM1792 769q0 -105 -75.5 -181t-180.5 -76h-169q-4 -62 -37 -119q3 -21 3 -43
-q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5q-133 0 -322 69q-164 59 -223 59h-288q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5h288q10 0 21.5 4.5t23.5 14t22.5 18t24 22.5t20.5 21.5t19 21.5t14 17q65 74 100 129q13 21 33 62t37 72t40.5 63t55 49.5
-t69.5 17.5q125 0 206.5 -67t81.5 -189q0 -68 -22 -128h374q104 0 180 -76t76 -179z" />
-    <glyph glyph-name="hand_left" unicode="&#xf0a5;" horiz-adv-x="1792" 
-d="M1376 128h32v640h-32q-35 0 -67.5 12t-62.5 37t-50 46t-49 54q-8 9 -12 14q-72 81 -112 145q-14 22 -38 68q-1 3 -10.5 22.5t-18.5 36t-20 35.5t-21.5 30.5t-18.5 11.5q-71 0 -115.5 -30.5t-44.5 -97.5q0 -43 15 -84.5t33 -68t33 -55t15 -48.5h-576q-50 0 -89 -38.5
-t-39 -89.5q0 -52 38 -90t90 -38h331q-15 -17 -25 -47.5t-10 -55.5q0 -69 53 -119q-18 -32 -18 -69t17.5 -73.5t47.5 -52.5q-4 -24 -4 -56q0 -85 48.5 -126t135.5 -41q84 0 183 32t194 64t167 32zM1664 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45z
-M1792 768v-640q0 -53 -37.5 -90.5t-90.5 -37.5h-288q-59 0 -223 -59q-190 -69 -317 -69q-142 0 -230 77.5t-87 217.5l1 5q-61 76 -61 178q0 22 3 43q-33 57 -37 119h-169q-105 0 -180.5 76t-75.5 181q0 103 76 179t180 76h374q-22 60 -22 128q0 122 81.5 189t206.5 67
-q38 0 69.5 -17.5t55 -49.5t40.5 -63t37 -72t33 -62q35 -55 100 -129q2 -3 14 -17t19 -21.5t20.5 -21.5t24 -22.5t22.5 -18t23.5 -14t21.5 -4.5h288q53 0 90.5 -37.5t37.5 -90.5z" />
-    <glyph glyph-name="hand_up" unicode="&#xf0a6;" 
-d="M1280 -64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 700q0 189 -167 189q-26 0 -56 -5q-16 30 -52.5 47.5t-73.5 17.5t-69 -18q-50 53 -119 53q-25 0 -55.5 -10t-47.5 -25v331q0 52 -38 90t-90 38q-51 0 -89.5 -39t-38.5 -89v-576
-q-20 0 -48.5 15t-55 33t-68 33t-84.5 15q-67 0 -97.5 -44.5t-30.5 -115.5q0 -24 139 -90q44 -24 65 -37q64 -40 145 -112q81 -71 106 -101q57 -69 57 -140v-32h640v32q0 72 32 167t64 193.5t32 179.5zM1536 705q0 -133 -69 -322q-59 -164 -59 -223v-288q0 -53 -37.5 -90.5
-t-90.5 -37.5h-640q-53 0 -90.5 37.5t-37.5 90.5v288q0 10 -4.5 21.5t-14 23.5t-18 22.5t-22.5 24t-21.5 20.5t-21.5 19t-17 14q-74 65 -129 100q-21 13 -62 33t-72 37t-63 40.5t-49.5 55t-17.5 69.5q0 125 67 206.5t189 81.5q68 0 128 -22v374q0 104 76 180t179 76
-q105 0 181 -75.5t76 -180.5v-169q62 -4 119 -37q21 3 43 3q101 0 178 -60q139 1 219.5 -85t80.5 -227z" />
-    <glyph glyph-name="hand_down" unicode="&#xf0a7;" 
-d="M1408 576q0 84 -32 183t-64 194t-32 167v32h-640v-32q0 -35 -12 -67.5t-37 -62.5t-46 -50t-54 -49q-9 -8 -14 -12q-81 -72 -145 -112q-22 -14 -68 -38q-3 -1 -22.5 -10.5t-36 -18.5t-35.5 -20t-30.5 -21.5t-11.5 -18.5q0 -71 30.5 -115.5t97.5 -44.5q43 0 84.5 15t68 33
-t55 33t48.5 15v-576q0 -50 38.5 -89t89.5 -39q52 0 90 38t38 90v331q46 -35 103 -35q69 0 119 53q32 -18 69 -18t73.5 17.5t52.5 47.5q24 -4 56 -4q85 0 126 48.5t41 135.5zM1280 1344q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 580
-q0 -142 -77.5 -230t-217.5 -87l-5 1q-76 -61 -178 -61q-22 0 -43 3q-54 -30 -119 -37v-169q0 -105 -76 -180.5t-181 -75.5q-103 0 -179 76t-76 180v374q-54 -22 -128 -22q-121 0 -188.5 81.5t-67.5 206.5q0 38 17.5 69.5t49.5 55t63 40.5t72 37t62 33q55 35 129 100
-q3 2 17 14t21.5 19t21.5 20.5t22.5 24t18 22.5t14 23.5t4.5 21.5v288q0 53 37.5 90.5t90.5 37.5h640q53 0 90.5 -37.5t37.5 -90.5v-288q0 -59 59 -223q69 -190 69 -317z" />
-    <glyph glyph-name="circle_arrow_left" unicode="&#xf0a8;" 
-d="M1280 576v128q0 26 -19 45t-45 19h-502l189 189q19 19 19 45t-19 45l-91 91q-18 18 -45 18t-45 -18l-362 -362l-91 -91q-18 -18 -18 -45t18 -45l91 -91l362 -362q18 -18 45 -18t45 18l91 91q18 18 18 45t-18 45l-189 189h502q26 0 45 19t19 45zM1536 640
-q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-    <glyph glyph-name="circle_arrow_right" unicode="&#xf0a9;" 
-d="M1285 640q0 27 -18 45l-91 91l-362 362q-18 18 -45 18t-45 -18l-91 -91q-18 -18 -18 -45t18 -45l189 -189h-502q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h502l-189 -189q-19 -19 -19 -45t19 -45l91 -91q18 -18 45 -18t45 18l362 362l91 91q18 18 18 45zM1536 640
-q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-    <glyph glyph-name="circle_arrow_up" unicode="&#xf0aa;" 
-d="M1284 641q0 27 -18 45l-362 362l-91 91q-18 18 -45 18t-45 -18l-91 -91l-362 -362q-18 -18 -18 -45t18 -45l91 -91q18 -18 45 -18t45 18l189 189v-502q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v502l189 -189q19 -19 45 -19t45 19l91 91q18 18 18 45zM1536 640
-q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-    <glyph glyph-name="circle_arrow_down" unicode="&#xf0ab;" 
-d="M1284 639q0 27 -18 45l-91 91q-18 18 -45 18t-45 -18l-189 -189v502q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-502l-189 189q-19 19 -45 19t-45 -19l-91 -91q-18 -18 -18 -45t18 -45l362 -362l91 -91q18 -18 45 -18t45 18l91 91l362 362q18 18 18 45zM1536 640
-q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-    <glyph glyph-name="globe" unicode="&#xf0ac;" 
-d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM1042 887q-2 -1 -9.5 -9.5t-13.5 -9.5q2 0 4.5 5t5 11t3.5 7q6 7 22 15q14 6 52 12q34 8 51 -11
-q-2 2 9.5 13t14.5 12q3 2 15 4.5t15 7.5l2 22q-12 -1 -17.5 7t-6.5 21q0 -2 -6 -8q0 7 -4.5 8t-11.5 -1t-9 -1q-10 3 -15 7.5t-8 16.5t-4 15q-2 5 -9.5 11t-9.5 10q-1 2 -2.5 5.5t-3 6.5t-4 5.5t-5.5 2.5t-7 -5t-7.5 -10t-4.5 -5q-3 2 -6 1.5t-4.5 -1t-4.5 -3t-5 -3.5
-q-3 -2 -8.5 -3t-8.5 -2q15 5 -1 11q-10 4 -16 3q9 4 7.5 12t-8.5 14h5q-1 4 -8.5 8.5t-17.5 8.5t-13 6q-8 5 -34 9.5t-33 0.5q-5 -6 -4.5 -10.5t4 -14t3.5 -12.5q1 -6 -5.5 -13t-6.5 -12q0 -7 14 -15.5t10 -21.5q-3 -8 -16 -16t-16 -12q-5 -8 -1.5 -18.5t10.5 -16.5
-q2 -2 1.5 -4t-3.5 -4.5t-5.5 -4t-6.5 -3.5l-3 -2q-11 -5 -20.5 6t-13.5 26q-7 25 -16 30q-23 8 -29 -1q-5 13 -41 26q-25 9 -58 4q6 1 0 15q-7 15 -19 12q3 6 4 17.5t1 13.5q3 13 12 23q1 1 7 8.5t9.5 13.5t0.5 6q35 -4 50 11q5 5 11.5 17t10.5 17q9 6 14 5.5t14.5 -5.5
-t14.5 -5q14 -1 15.5 11t-7.5 20q12 -1 3 17q-4 7 -8 9q-12 4 -27 -5q-8 -4 2 -8q-1 1 -9.5 -10.5t-16.5 -17.5t-16 5q-1 1 -5.5 13.5t-9.5 13.5q-8 0 -16 -15q3 8 -11 15t-24 8q19 12 -8 27q-7 4 -20.5 5t-19.5 -4q-5 -7 -5.5 -11.5t5 -8t10.5 -5.5t11.5 -4t8.5 -3
-q14 -10 8 -14q-2 -1 -8.5 -3.5t-11.5 -4.5t-6 -4q-3 -4 0 -14t-2 -14q-5 5 -9 17.5t-7 16.5q7 -9 -25 -6l-10 1q-4 0 -16 -2t-20.5 -1t-13.5 8q-4 8 0 20q1 4 4 2q-4 3 -11 9.5t-10 8.5q-46 -15 -94 -41q6 -1 12 1q5 2 13 6.5t10 5.5q34 14 42 7l5 5q14 -16 20 -25
-q-7 4 -30 1q-20 -6 -22 -12q7 -12 5 -18q-4 3 -11.5 10t-14.5 11t-15 5q-16 0 -22 -1q-146 -80 -235 -222q7 -7 12 -8q4 -1 5 -9t2.5 -11t11.5 3q9 -8 3 -19q1 1 44 -27q19 -17 21 -21q3 -11 -10 -18q-1 2 -9 9t-9 4q-3 -5 0.5 -18.5t10.5 -12.5q-7 0 -9.5 -16t-2.5 -35.5
-t-1 -23.5l2 -1q-3 -12 5.5 -34.5t21.5 -19.5q-13 -3 20 -43q6 -8 8 -9q3 -2 12 -7.5t15 -10t10 -10.5q4 -5 10 -22.5t14 -23.5q-2 -6 9.5 -20t10.5 -23q-1 0 -2.5 -1t-2.5 -1q3 -7 15.5 -14t15.5 -13q1 -3 2 -10t3 -11t8 -2q2 20 -24 62q-15 25 -17 29q-3 5 -5.5 15.5
-t-4.5 14.5q2 0 6 -1.5t8.5 -3.5t7.5 -4t2 -3q-3 -7 2 -17.5t12 -18.5t17 -19t12 -13q6 -6 14 -19.5t0 -13.5q9 0 20 -10.5t17 -19.5q5 -8 8 -26t5 -24q2 -7 8.5 -13.5t12.5 -9.5l16 -8t13 -7q5 -2 18.5 -10.5t21.5 -11.5q10 -4 16 -4t14.5 2.5t13.5 3.5q15 2 29 -15t21 -21
-q36 -19 55 -11q-2 -1 0.5 -7.5t8 -15.5t9 -14.5t5.5 -8.5q5 -6 18 -15t18 -15q6 4 7 9q-3 -8 7 -20t18 -10q14 3 14 32q-31 -15 -49 18q0 1 -2.5 5.5t-4 8.5t-2.5 8.5t0 7.5t5 3q9 0 10 3.5t-2 12.5t-4 13q-1 8 -11 20t-12 15q-5 -9 -16 -8t-16 9q0 -1 -1.5 -5.5t-1.5 -6.5
-q-13 0 -15 1q1 3 2.5 17.5t3.5 22.5q1 4 5.5 12t7.5 14.5t4 12.5t-4.5 9.5t-17.5 2.5q-19 -1 -26 -20q-1 -3 -3 -10.5t-5 -11.5t-9 -7q-7 -3 -24 -2t-24 5q-13 8 -22.5 29t-9.5 37q0 10 2.5 26.5t3 25t-5.5 24.5q3 2 9 9.5t10 10.5q2 1 4.5 1.5t4.5 0t4 1.5t3 6q-1 1 -4 3
-q-3 3 -4 3q7 -3 28.5 1.5t27.5 -1.5q15 -11 22 2q0 1 -2.5 9.5t-0.5 13.5q5 -27 29 -9q3 -3 15.5 -5t17.5 -5q3 -2 7 -5.5t5.5 -4.5t5 0.5t8.5 6.5q10 -14 12 -24q11 -40 19 -44q7 -3 11 -2t4.5 9.5t0 14t-1.5 12.5l-1 8v18l-1 8q-15 3 -18.5 12t1.5 18.5t15 18.5q1 1 8 3.5
-t15.5 6.5t12.5 8q21 19 15 35q7 0 11 9q-1 0 -5 3t-7.5 5t-4.5 2q9 5 2 16q5 3 7.5 11t7.5 10q9 -12 21 -2q8 8 1 16q5 7 20.5 10.5t18.5 9.5q7 -2 8 2t1 12t3 12q4 5 15 9t13 5l17 11q3 4 0 4q18 -2 31 11q10 11 -6 20q3 6 -3 9.5t-15 5.5q3 1 11.5 0.5t10.5 1.5
-q15 10 -7 16q-17 5 -43 -12zM879 10q206 36 351 189q-3 3 -12.5 4.5t-12.5 3.5q-18 7 -24 8q1 7 -2.5 13t-8 9t-12.5 8t-11 7q-2 2 -7 6t-7 5.5t-7.5 4.5t-8.5 2t-10 -1l-3 -1q-3 -1 -5.5 -2.5t-5.5 -3t-4 -3t0 -2.5q-21 17 -36 22q-5 1 -11 5.5t-10.5 7t-10 1.5t-11.5 -7
-q-5 -5 -6 -15t-2 -13q-7 5 0 17.5t2 18.5q-3 6 -10.5 4.5t-12 -4.5t-11.5 -8.5t-9 -6.5t-8.5 -5.5t-8.5 -7.5q-3 -4 -6 -12t-5 -11q-2 4 -11.5 6.5t-9.5 5.5q2 -10 4 -35t5 -38q7 -31 -12 -48q-27 -25 -29 -40q-4 -22 12 -26q0 -7 -8 -20.5t-7 -21.5q0 -6 2 -16z" />
-    <glyph glyph-name="wrench" unicode="&#xf0ad;" horiz-adv-x="1664" 
-d="M384 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1028 484l-682 -682q-37 -37 -90 -37q-52 0 -91 37l-106 108q-38 36 -38 90q0 53 38 91l681 681q39 -98 114.5 -173.5t173.5 -114.5zM1662 919q0 -39 -23 -106q-47 -134 -164.5 -217.5
-t-258.5 -83.5q-185 0 -316.5 131.5t-131.5 316.5t131.5 316.5t316.5 131.5q58 0 121.5 -16.5t107.5 -46.5q16 -11 16 -28t-16 -28l-293 -169v-224l193 -107q5 3 79 48.5t135.5 81t70.5 35.5q15 0 23.5 -10t8.5 -25z" />
-    <glyph glyph-name="tasks" unicode="&#xf0ae;" horiz-adv-x="1792" 
-d="M1024 128h640v128h-640v-128zM640 640h1024v128h-1024v-128zM1280 1152h384v128h-384v-128zM1792 320v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 832v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19
-t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 1344v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45z" />
-    <glyph glyph-name="filter" unicode="&#xf0b0;" horiz-adv-x="1408" 
-d="M1403 1241q17 -41 -14 -70l-493 -493v-742q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-256 256q-19 19 -19 45v486l-493 493q-31 29 -14 70q17 39 59 39h1280q42 0 59 -39z" />
-    <glyph glyph-name="briefcase" unicode="&#xf0b1;" horiz-adv-x="1792" 
-d="M640 1280h512v128h-512v-128zM1792 640v-480q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v480h672v-160q0 -26 19 -45t45 -19h320q26 0 45 19t19 45v160h672zM1024 640v-128h-256v128h256zM1792 1120v-384h-1792v384q0 66 47 113t113 47h352v160q0 40 28 68
-t68 28h576q40 0 68 -28t28 -68v-160h352q66 0 113 -47t47 -113z" />
-    <glyph glyph-name="fullscreen" unicode="&#xf0b2;" 
-d="M1283 995l-355 -355l355 -355l144 144q29 31 70 14q39 -17 39 -59v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l144 144l-355 355l-355 -355l144 -144q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l144 -144
-l355 355l-355 355l-144 -144q-19 -19 -45 -19q-12 0 -24 5q-40 17 -40 59v448q0 26 19 45t45 19h448q42 0 59 -40q17 -39 -14 -69l-144 -144l355 -355l355 355l-144 144q-31 30 -14 69q17 40 59 40h448q26 0 45 -19t19 -45v-448q0 -42 -39 -59q-13 -5 -25 -5q-26 0 -45 19z
-" />
-    <glyph glyph-name="group" unicode="&#xf0c0;" horiz-adv-x="1920" 
-d="M593 640q-162 -5 -265 -128h-134q-82 0 -138 40.5t-56 118.5q0 353 124 353q6 0 43.5 -21t97.5 -42.5t119 -21.5q67 0 133 23q-5 -37 -5 -66q0 -139 81 -256zM1664 3q0 -120 -73 -189.5t-194 -69.5h-874q-121 0 -194 69.5t-73 189.5q0 53 3.5 103.5t14 109t26.5 108.5
-t43 97.5t62 81t85.5 53.5t111.5 20q10 0 43 -21.5t73 -48t107 -48t135 -21.5t135 21.5t107 48t73 48t43 21.5q61 0 111.5 -20t85.5 -53.5t62 -81t43 -97.5t26.5 -108.5t14 -109t3.5 -103.5zM640 1280q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75
-t75 -181zM1344 896q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5zM1920 671q0 -78 -56 -118.5t-138 -40.5h-134q-103 123 -265 128q81 117 81 256q0 29 -5 66q66 -23 133 -23q59 0 119 21.5t97.5 42.5
-t43.5 21q124 0 124 -353zM1792 1280q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181z" />
-    <glyph glyph-name="link" unicode="&#xf0c1;" horiz-adv-x="1664" 
-d="M1456 320q0 40 -28 68l-208 208q-28 28 -68 28q-42 0 -72 -32q3 -3 19 -18.5t21.5 -21.5t15 -19t13 -25.5t3.5 -27.5q0 -40 -28 -68t-68 -28q-15 0 -27.5 3.5t-25.5 13t-19 15t-21.5 21.5t-18.5 19q-33 -31 -33 -73q0 -40 28 -68l206 -207q27 -27 68 -27q40 0 68 26
-l147 146q28 28 28 67zM753 1025q0 40 -28 68l-206 207q-28 28 -68 28q-39 0 -68 -27l-147 -146q-28 -28 -28 -67q0 -40 28 -68l208 -208q27 -27 68 -27q42 0 72 31q-3 3 -19 18.5t-21.5 21.5t-15 19t-13 25.5t-3.5 27.5q0 40 28 68t68 28q15 0 27.5 -3.5t25.5 -13t19 -15
-t21.5 -21.5t18.5 -19q33 31 33 73zM1648 320q0 -120 -85 -203l-147 -146q-83 -83 -203 -83q-121 0 -204 85l-206 207q-83 83 -83 203q0 123 88 209l-88 88q-86 -88 -208 -88q-120 0 -204 84l-208 208q-84 84 -84 204t85 203l147 146q83 83 203 83q121 0 204 -85l206 -207
-q83 -83 83 -203q0 -123 -88 -209l88 -88q86 88 208 88q120 0 204 -84l208 -208q84 -84 84 -204z" />
-    <glyph glyph-name="cloud" unicode="&#xf0c2;" horiz-adv-x="1920" 
-d="M1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088q-185 0 -316.5 131.5t-131.5 316.5q0 132 71 241.5t187 163.5q-2 28 -2 43q0 212 150 362t362 150q158 0 286.5 -88t187.5 -230q70 62 166 62q106 0 181 -75t75 -181q0 -75 -41 -138q129 -30 213 -134.5t84 -239.5z
-" />
-    <glyph glyph-name="beaker" unicode="&#xf0c3;" horiz-adv-x="1664" 
-d="M1527 88q56 -89 21.5 -152.5t-140.5 -63.5h-1152q-106 0 -140.5 63.5t21.5 152.5l503 793v399h-64q-26 0 -45 19t-19 45t19 45t45 19h512q26 0 45 -19t19 -45t-19 -45t-45 -19h-64v-399zM748 813l-272 -429h712l-272 429l-20 31v37v399h-128v-399v-37z" />
-    <glyph glyph-name="cut" unicode="&#xf0c4;" horiz-adv-x="1792" 
-d="M960 640q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1260 576l507 -398q28 -20 25 -56q-5 -35 -35 -51l-128 -64q-13 -7 -29 -7q-17 0 -31 8l-690 387l-110 -66q-8 -4 -12 -5q14 -49 10 -97q-7 -77 -56 -147.5t-132 -123.5q-132 -84 -277 -84
-q-136 0 -222 78q-90 84 -79 207q7 76 56 147t131 124q132 84 278 84q83 0 151 -31q9 13 22 22l122 73l-122 73q-13 9 -22 22q-68 -31 -151 -31q-146 0 -278 84q-82 53 -131 124t-56 147q-5 59 15.5 113t63.5 93q85 79 222 79q145 0 277 -84q83 -52 132 -123t56 -148
-q4 -48 -10 -97q4 -1 12 -5l110 -66l690 387q14 8 31 8q16 0 29 -7l128 -64q30 -16 35 -51q3 -36 -25 -56zM579 836q46 42 21 108t-106 117q-92 59 -192 59q-74 0 -113 -36q-46 -42 -21 -108t106 -117q92 -59 192 -59q74 0 113 36zM494 91q81 51 106 117t-21 108
-q-39 36 -113 36q-100 0 -192 -59q-81 -51 -106 -117t21 -108q39 -36 113 -36q100 0 192 59zM672 704l96 -58v11q0 36 33 56l14 8l-79 47l-26 -26q-3 -3 -10 -11t-12 -12q-2 -2 -4 -3.5t-3 -2.5zM896 480l96 -32l736 576l-128 64l-768 -431v-113l-160 -96l9 -8q2 -2 7 -6
-q4 -4 11 -12t11 -12l26 -26zM1600 64l128 64l-520 408l-177 -138q-2 -3 -13 -7z" />
-    <glyph glyph-name="copy" unicode="&#xf0c5;" horiz-adv-x="1792" 
-d="M1696 1152q40 0 68 -28t28 -68v-1216q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v288h-544q-40 0 -68 28t-28 68v672q0 40 20 88t48 76l408 408q28 28 76 48t88 20h416q40 0 68 -28t28 -68v-328q68 40 128 40h416zM1152 939l-299 -299h299v299zM512 1323l-299 -299
-h299v299zM708 676l316 316v416h-384v-416q0 -40 -28 -68t-68 -28h-416v-640h512v256q0 40 20 88t48 76zM1664 -128v1152h-384v-416q0 -40 -28 -68t-68 -28h-416v-640h896z" />
-    <glyph glyph-name="paper_clip" unicode="&#xf0c6;" horiz-adv-x="1408" 
-d="M1404 151q0 -117 -79 -196t-196 -79q-135 0 -235 100l-777 776q-113 115 -113 271q0 159 110 270t269 111q158 0 273 -113l605 -606q10 -10 10 -22q0 -16 -30.5 -46.5t-46.5 -30.5q-13 0 -23 10l-606 607q-79 77 -181 77q-106 0 -179 -75t-73 -181q0 -105 76 -181
-l776 -777q63 -63 145 -63q64 0 106 42t42 106q0 82 -63 145l-581 581q-26 24 -60 24q-29 0 -48 -19t-19 -48q0 -32 25 -59l410 -410q10 -10 10 -22q0 -16 -31 -47t-47 -31q-12 0 -22 10l-410 410q-63 61 -63 149q0 82 57 139t139 57q88 0 149 -63l581 -581q100 -98 100 -235
-z" />
-    <glyph glyph-name="save" unicode="&#xf0c7;" 
-d="M384 0h768v384h-768v-384zM1280 0h128v896q0 14 -10 38.5t-20 34.5l-281 281q-10 10 -34 20t-39 10v-416q0 -40 -28 -68t-68 -28h-576q-40 0 -68 28t-28 68v416h-128v-1280h128v416q0 40 28 68t68 28h832q40 0 68 -28t28 -68v-416zM896 928v320q0 13 -9.5 22.5t-22.5 9.5
-h-192q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 22.5zM1536 896v-928q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h928q40 0 88 -20t76 -48l280 -280q28 -28 48 -76t20 -88z" />
-    <glyph glyph-name="sign_blank" unicode="&#xf0c8;" 
-d="M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-    <glyph glyph-name="reorder" unicode="&#xf0c9;" 
-d="M1536 192v-128q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1536 704v-128q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1536 1216v-128q0 -26 -19 -45
-t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" />
-    <glyph glyph-name="ul" unicode="&#xf0ca;" horiz-adv-x="1792" 
-d="M384 128q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM384 640q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5
-t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5zM384 1152q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1792 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z
-M1792 1248v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z" />
-    <glyph glyph-name="ol" unicode="&#xf0cb;" horiz-adv-x="1792" 
-d="M381 -84q0 -80 -54.5 -126t-135.5 -46q-106 0 -172 66l57 88q49 -45 106 -45q29 0 50.5 14.5t21.5 42.5q0 64 -105 56l-26 56q8 10 32.5 43.5t42.5 54t37 38.5v1q-16 0 -48.5 -1t-48.5 -1v-53h-106v152h333v-88l-95 -115q51 -12 81 -49t30 -88zM383 543v-159h-362
-q-6 36 -6 54q0 51 23.5 93t56.5 68t66 47.5t56.5 43.5t23.5 45q0 25 -14.5 38.5t-39.5 13.5q-46 0 -81 -58l-85 59q24 51 71.5 79.5t105.5 28.5q73 0 123 -41.5t50 -112.5q0 -50 -34 -91.5t-75 -64.5t-75.5 -50.5t-35.5 -52.5h127v60h105zM1792 224v-192q0 -13 -9.5 -22.5
-t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 14 9 23t23 9h1216q13 0 22.5 -9.5t9.5 -22.5zM384 1123v-99h-335v99h107q0 41 0.5 121.5t0.5 121.5v12h-2q-8 -17 -50 -54l-71 76l136 127h106v-404h108zM1792 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216
-q-13 0 -22.5 9.5t-9.5 22.5v192q0 14 9 23t23 9h1216q13 0 22.5 -9.5t9.5 -22.5zM1792 1248v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z" />
-    <glyph glyph-name="strikethrough" unicode="&#xf0cc;" horiz-adv-x="1792" 
-d="M1760 640q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1728q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h1728zM483 704q-28 35 -51 80q-48 98 -48 188q0 181 134 309q133 127 393 127q50 0 167 -19q66 -12 177 -48q10 -38 21 -118q14 -123 14 -183q0 -18 -5 -45l-12 -3l-84 6
-l-14 2q-50 149 -103 205q-88 91 -210 91q-114 0 -182 -59q-67 -58 -67 -146q0 -73 66 -140t279 -129q69 -20 173 -66q58 -28 95 -52h-743zM990 448h411q7 -39 7 -92q0 -111 -41 -212q-23 -56 -71 -104q-37 -35 -109 -81q-80 -48 -153 -66q-80 -21 -203 -21q-114 0 -195 23
-l-140 40q-57 16 -72 28q-8 8 -8 22v13q0 108 -2 156q-1 30 0 68l2 37v44l102 2q15 -34 30 -71t22.5 -56t12.5 -27q35 -57 80 -94q43 -36 105 -57q59 -22 132 -22q64 0 139 27q77 26 122 86q47 61 47 129q0 84 -81 157q-34 29 -137 71z" />
-    <glyph glyph-name="underline" unicode="&#xf0cd;" 
-d="M48 1313q-37 2 -45 4l-3 88q13 1 40 1q60 0 112 -4q132 -7 166 -7q86 0 168 3q116 4 146 5q56 0 86 2l-1 -14l2 -64v-9q-60 -9 -124 -9q-60 0 -79 -25q-13 -14 -13 -132q0 -13 0.5 -32.5t0.5 -25.5l1 -229l14 -280q6 -124 51 -202q35 -59 96 -92q88 -47 177 -47
-q104 0 191 28q56 18 99 51q48 36 65 64q36 56 53 114q21 73 21 229q0 79 -3.5 128t-11 122.5t-13.5 159.5l-4 59q-5 67 -24 88q-34 35 -77 34l-100 -2l-14 3l2 86h84l205 -10q76 -3 196 10l18 -2q6 -38 6 -51q0 -7 -4 -31q-45 -12 -84 -13q-73 -11 -79 -17q-15 -15 -15 -41
-q0 -7 1.5 -27t1.5 -31q8 -19 22 -396q6 -195 -15 -304q-15 -76 -41 -122q-38 -65 -112 -123q-75 -57 -182 -89q-109 -33 -255 -33q-167 0 -284 46q-119 47 -179 122q-61 76 -83 195q-16 80 -16 237v333q0 188 -17 213q-25 36 -147 39zM1536 -96v64q0 14 -9 23t-23 9h-1472
-q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h1472q14 0 23 9t9 23z" />
-    <glyph glyph-name="table" unicode="&#xf0ce;" horiz-adv-x="1664" 
-d="M512 160v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM512 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 160v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23
-v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM512 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 160v192
-q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192
-q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1664 1248v-1088q0 -66 -47 -113t-113 -47h-1344q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1344q66 0 113 -47t47 -113
-z" />
-    <glyph glyph-name="magic" unicode="&#xf0d0;" horiz-adv-x="1664" 
-d="M1190 955l293 293l-107 107l-293 -293zM1637 1248q0 -27 -18 -45l-1286 -1286q-18 -18 -45 -18t-45 18l-198 198q-18 18 -18 45t18 45l1286 1286q18 18 45 18t45 -18l198 -198q18 -18 18 -45zM286 1438l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98zM636 1276
-l196 -60l-196 -60l-60 -196l-60 196l-196 60l196 60l60 196zM1566 798l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98zM926 1438l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98z" />
-    <glyph glyph-name="truck" unicode="&#xf0d1;" horiz-adv-x="1792" 
-d="M640 128q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM256 640h384v256h-158q-13 0 -22 -9l-195 -195q-9 -9 -9 -22v-30zM1536 128q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM1792 1216v-1024q0 -15 -4 -26.5t-13.5 -18.5
-t-16.5 -11.5t-23.5 -6t-22.5 -2t-25.5 0t-22.5 0.5q0 -106 -75 -181t-181 -75t-181 75t-75 181h-384q0 -106 -75 -181t-181 -75t-181 75t-75 181h-64q-3 0 -22.5 -0.5t-25.5 0t-22.5 2t-23.5 6t-16.5 11.5t-13.5 18.5t-4 26.5q0 26 19 45t45 19v320q0 8 -0.5 35t0 38
-t2.5 34.5t6.5 37t14 30.5t22.5 30l198 198q19 19 50.5 32t58.5 13h160v192q0 26 19 45t45 19h1024q26 0 45 -19t19 -45z" />
-    <glyph glyph-name="pinterest" unicode="&#xf0d2;" 
-d="M1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103q-111 0 -218 32q59 93 78 164q9 34 54 211q20 -39 73 -67.5t114 -28.5q121 0 216 68.5t147 188.5t52 270q0 114 -59.5 214t-172.5 163t-255 63q-105 0 -196 -29t-154.5 -77t-109 -110.5t-67 -129.5t-21.5 -134
-q0 -104 40 -183t117 -111q30 -12 38 20q2 7 8 31t8 30q6 23 -11 43q-51 61 -51 151q0 151 104.5 259.5t273.5 108.5q151 0 235.5 -82t84.5 -213q0 -170 -68.5 -289t-175.5 -119q-61 0 -98 43.5t-23 104.5q8 35 26.5 93.5t30 103t11.5 75.5q0 50 -27 83t-77 33
-q-62 0 -105 -57t-43 -142q0 -73 25 -122l-99 -418q-17 -70 -13 -177q-206 91 -333 281t-127 423q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-    <glyph glyph-name="pinterest_sign" unicode="&#xf0d3;" 
-d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-725q85 122 108 210q9 34 53 209q21 -39 73.5 -67t112.5 -28q181 0 295.5 147.5t114.5 373.5q0 84 -35 162.5t-96.5 139t-152.5 97t-197 36.5q-104 0 -194.5 -28.5t-153 -76.5
-t-107.5 -109.5t-66.5 -128t-21.5 -132.5q0 -102 39.5 -180t116.5 -110q13 -5 23.5 0t14.5 19q10 44 15 61q6 23 -11 42q-50 62 -50 150q0 150 103.5 256.5t270.5 106.5q149 0 232.5 -81t83.5 -210q0 -168 -67.5 -286t-173.5 -118q-60 0 -97 43.5t-23 103.5q8 34 26.5 92.5
-t29.5 102t11 74.5q0 49 -26.5 81.5t-75.5 32.5q-61 0 -103.5 -56.5t-42.5 -139.5q0 -72 24 -121l-98 -414q-24 -100 -7 -254h-183q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960z" />
-    <glyph glyph-name="google_plus_sign" unicode="&#xf0d4;" 
-d="M917 631q0 26 -6 64h-362v-132h217q-3 -24 -16.5 -50t-37.5 -53t-66.5 -44.5t-96.5 -17.5q-99 0 -169 71t-70 171t70 171t169 71q92 0 153 -59l104 101q-108 100 -257 100q-160 0 -272 -112.5t-112 -271.5t112 -271.5t272 -112.5q165 0 266.5 105t101.5 270zM1262 585
-h109v110h-109v110h-110v-110h-110v-110h110v-110h110v110zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-    <glyph glyph-name="google_plus" unicode="&#xf0d5;" horiz-adv-x="2304" 
-d="M1437 623q0 -208 -87 -370.5t-248 -254t-369 -91.5q-149 0 -285 58t-234 156t-156 234t-58 285t58 285t156 234t234 156t285 58q286 0 491 -192l-199 -191q-117 113 -292 113q-123 0 -227.5 -62t-165.5 -168.5t-61 -232.5t61 -232.5t165.5 -168.5t227.5 -62
-q83 0 152.5 23t114.5 57.5t78.5 78.5t49 83t21.5 74h-416v252h692q12 -63 12 -122zM2304 745v-210h-209v-209h-210v209h-209v210h209v209h210v-209h209z" />
-    <glyph glyph-name="money" unicode="&#xf0d6;" horiz-adv-x="1920" 
-d="M768 384h384v96h-128v448h-114l-148 -137l77 -80q42 37 55 57h2v-288h-128v-96zM1280 640q0 -70 -21 -142t-59.5 -134t-101.5 -101t-138 -39t-138 39t-101.5 101t-59.5 134t-21 142t21 142t59.5 134t101.5 101t138 39t138 -39t101.5 -101t59.5 -134t21 -142zM1792 384
-v512q-106 0 -181 75t-75 181h-1152q0 -106 -75 -181t-181 -75v-512q106 0 181 -75t75 -181h1152q0 106 75 181t181 75zM1920 1216v-1152q0 -26 -19 -45t-45 -19h-1792q-26 0 -45 19t-19 45v1152q0 26 19 45t45 19h1792q26 0 45 -19t19 -45z" />
-    <glyph glyph-name="caret_down" unicode="&#xf0d7;" horiz-adv-x="1024" 
-d="M1024 832q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45z" />
-    <glyph glyph-name="caret_up" unicode="&#xf0d8;" horiz-adv-x="1024" 
-d="M1024 320q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
-    <glyph glyph-name="caret_left" unicode="&#xf0d9;" horiz-adv-x="640" 
-d="M640 1088v-896q0 -26 -19 -45t-45 -19t-45 19l-448 448q-19 19 -19 45t19 45l448 448q19 19 45 19t45 -19t19 -45z" />
-    <glyph glyph-name="caret_right" unicode="&#xf0da;" horiz-adv-x="640" 
-d="M576 640q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19t-19 45v896q0 26 19 45t45 19t45 -19l448 -448q19 -19 19 -45z" />
-    <glyph glyph-name="columns" unicode="&#xf0db;" horiz-adv-x="1664" 
-d="M160 0h608v1152h-640v-1120q0 -13 9.5 -22.5t22.5 -9.5zM1536 32v1120h-640v-1152h608q13 0 22.5 9.5t9.5 22.5zM1664 1248v-1216q0 -66 -47 -113t-113 -47h-1344q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1344q66 0 113 -47t47 -113z" />
-    <glyph glyph-name="sort" unicode="&#xf0dc;" horiz-adv-x="1024" 
-d="M1024 448q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45zM1024 832q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
-    <glyph glyph-name="sort_down" unicode="&#xf0dd;" horiz-adv-x="1024" 
-d="M1024 448q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45z" />
-    <glyph glyph-name="sort_up" unicode="&#xf0de;" horiz-adv-x="1024" 
-d="M1024 832q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
-    <glyph glyph-name="envelope_alt" unicode="&#xf0e0;" horiz-adv-x="1792" 
-d="M1792 826v-794q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v794q44 -49 101 -87q362 -246 497 -345q57 -42 92.5 -65.5t94.5 -48t110 -24.5h1h1q51 0 110 24.5t94.5 48t92.5 65.5q170 123 498 345q57 39 100 87zM1792 1120q0 -79 -49 -151t-122 -123
-q-376 -261 -468 -325q-10 -7 -42.5 -30.5t-54 -38t-52 -32.5t-57.5 -27t-50 -9h-1h-1q-23 0 -50 9t-57.5 27t-52 32.5t-54 38t-42.5 30.5q-91 64 -262 182.5t-205 142.5q-62 42 -117 115.5t-55 136.5q0 78 41.5 130t118.5 52h1472q65 0 112.5 -47t47.5 -113z" />
-    <glyph glyph-name="linkedin" unicode="&#xf0e1;" 
-d="M349 911v-991h-330v991h330zM370 1217q1 -73 -50.5 -122t-135.5 -49h-2q-82 0 -132 49t-50 122q0 74 51.5 122.5t134.5 48.5t133 -48.5t51 -122.5zM1536 488v-568h-329v530q0 105 -40.5 164.5t-126.5 59.5q-63 0 -105.5 -34.5t-63.5 -85.5q-11 -30 -11 -81v-553h-329
-q2 399 2 647t-1 296l-1 48h329v-144h-2q20 32 41 56t56.5 52t87 43.5t114.5 15.5q171 0 275 -113.5t104 -332.5z" />
-    <glyph glyph-name="undo" unicode="&#xf0e2;" 
-d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61q-172 0 -327 72.5t-264 204.5q-7 10 -6.5 22.5t8.5 20.5l137 138q10 9 25 9q16 -2 23 -12q73 -95 179 -147t225 -52q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5
-t-163.5 109.5t-198.5 40.5q-98 0 -188 -35.5t-160 -101.5l137 -138q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l130 -129q107 101 244.5 156.5t284.5 55.5q156 0 298 -61t245 -164t164 -245t61 -298z" />
-    <glyph glyph-name="legal" unicode="&#xf0e3;" horiz-adv-x="1792" 
-d="M1771 0q0 -53 -37 -90l-107 -108q-39 -37 -91 -37q-53 0 -90 37l-363 364q-38 36 -38 90q0 53 43 96l-256 256l-126 -126q-14 -14 -34 -14t-34 14q2 -2 12.5 -12t12.5 -13t10 -11.5t10 -13.5t6 -13.5t5.5 -16.5t1.5 -18q0 -38 -28 -68q-3 -3 -16.5 -18t-19 -20.5
-t-18.5 -16.5t-22 -15.5t-22 -9t-26 -4.5q-40 0 -68 28l-408 408q-28 28 -28 68q0 13 4.5 26t9 22t15.5 22t16.5 18.5t20.5 19t18 16.5q30 28 68 28q10 0 18 -1.5t16.5 -5.5t13.5 -6t13.5 -10t11.5 -10t13 -12.5t12 -12.5q-14 14 -14 34t14 34l348 348q14 14 34 14t34 -14
-q-2 2 -12.5 12t-12.5 13t-10 11.5t-10 13.5t-6 13.5t-5.5 16.5t-1.5 18q0 38 28 68q3 3 16.5 18t19 20.5t18.5 16.5t22 15.5t22 9t26 4.5q40 0 68 -28l408 -408q28 -28 28 -68q0 -13 -4.5 -26t-9 -22t-15.5 -22t-16.5 -18.5t-20.5 -19t-18 -16.5q-30 -28 -68 -28
-q-10 0 -18 1.5t-16.5 5.5t-13.5 6t-13.5 10t-11.5 10t-13 12.5t-12 12.5q14 -14 14 -34t-14 -34l-126 -126l256 -256q43 43 96 43q52 0 91 -37l363 -363q37 -39 37 -91z" />
-    <glyph glyph-name="dashboard" unicode="&#xf0e4;" horiz-adv-x="1792" 
-d="M384 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM576 832q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1004 351l101 382q6 26 -7.5 48.5t-38.5 29.5
-t-48 -6.5t-30 -39.5l-101 -382q-60 -5 -107 -43.5t-63 -98.5q-20 -77 20 -146t117 -89t146 20t89 117q16 60 -6 117t-72 91zM1664 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 1024q0 53 -37.5 90.5
-t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1472 832q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1792 384q0 -261 -141 -483q-19 -29 -54 -29h-1402q-35 0 -54 29
-q-141 221 -141 483q0 182 71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
-    <glyph glyph-name="comment_alt" unicode="&#xf0e5;" horiz-adv-x="1792" 
-d="M896 1152q-204 0 -381.5 -69.5t-282 -187.5t-104.5 -255q0 -112 71.5 -213.5t201.5 -175.5l87 -50l-27 -96q-24 -91 -70 -172q152 63 275 171l43 38l57 -6q69 -8 130 -8q204 0 381.5 69.5t282 187.5t104.5 255t-104.5 255t-282 187.5t-381.5 69.5zM1792 640
-q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22h-5q-15 0 -27 10.5t-16 27.5v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51t27 59t26 76q-157 89 -247.5 220t-90.5 281q0 174 120 321.5
-t326 233t450 85.5t450 -85.5t326 -233t120 -321.5z" />
-    <glyph glyph-name="comments_alt" unicode="&#xf0e6;" horiz-adv-x="1792" 
-d="M704 1152q-153 0 -286 -52t-211.5 -141t-78.5 -191q0 -82 53 -158t149 -132l97 -56l-35 -84q34 20 62 39l44 31l53 -10q78 -14 153 -14q153 0 286 52t211.5 141t78.5 191t-78.5 191t-211.5 141t-286 52zM704 1280q191 0 353.5 -68.5t256.5 -186.5t94 -257t-94 -257
-t-256.5 -186.5t-353.5 -68.5q-86 0 -176 16q-124 -88 -278 -128q-36 -9 -86 -16h-3q-11 0 -20.5 8t-11.5 21q-1 3 -1 6.5t0.5 6.5t2 6l2.5 5t3.5 5.5t4 5t4.5 5t4 4.5q5 6 23 25t26 29.5t22.5 29t25 38.5t20.5 44q-124 72 -195 177t-71 224q0 139 94 257t256.5 186.5
-t353.5 68.5zM1526 111q10 -24 20.5 -44t25 -38.5t22.5 -29t26 -29.5t23 -25q1 -1 4 -4.5t4.5 -5t4 -5t3.5 -5.5l2.5 -5t2 -6t0.5 -6.5t-1 -6.5q-3 -14 -13 -22t-22 -7q-50 7 -86 16q-154 40 -278 128q-90 -16 -176 -16q-271 0 -472 132q58 -4 88 -4q161 0 309 45t264 129
-q125 92 192 212t67 254q0 77 -23 152q129 -71 204 -178t75 -230q0 -120 -71 -224.5t-195 -176.5z" />
-    <glyph glyph-name="bolt" unicode="&#xf0e7;" horiz-adv-x="896" 
-d="M885 970q18 -20 7 -44l-540 -1157q-13 -25 -42 -25q-4 0 -14 2q-17 5 -25.5 19t-4.5 30l197 808l-406 -101q-4 -1 -12 -1q-18 0 -31 11q-18 15 -13 39l201 825q4 14 16 23t28 9h328q19 0 32 -12.5t13 -29.5q0 -8 -5 -18l-171 -463l396 98q8 2 12 2q19 0 34 -15z" />
-    <glyph glyph-name="sitemap" unicode="&#xf0e8;" horiz-adv-x="1792" 
-d="M1792 288v-320q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192h-512v-192h96q40 0 68 -28t28 -68v-320q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192h-512v-192h96q40 0 68 -28t28 -68v-320
-q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192q0 52 38 90t90 38h512v192h-96q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h320q40 0 68 -28t28 -68v-320q0 -40 -28 -68t-68 -28h-96v-192h512q52 0 90 -38t38 -90v-192h96q40 0 68 -28t28 -68
-z" />
-    <glyph glyph-name="umbrella" unicode="&#xf0e9;" horiz-adv-x="1664" 
-d="M896 708v-580q0 -104 -76 -180t-180 -76t-180 76t-76 180q0 26 19 45t45 19t45 -19t19 -45q0 -50 39 -89t89 -39t89 39t39 89v580q33 11 64 11t64 -11zM1664 681q0 -13 -9.5 -22.5t-22.5 -9.5q-11 0 -23 10q-49 46 -93 69t-102 23q-68 0 -128 -37t-103 -97
-q-7 -10 -17.5 -28t-14.5 -24q-11 -17 -28 -17q-18 0 -29 17q-4 6 -14.5 24t-17.5 28q-43 60 -102.5 97t-127.5 37t-127.5 -37t-102.5 -97q-7 -10 -17.5 -28t-14.5 -24q-11 -17 -29 -17q-17 0 -28 17q-4 6 -14.5 24t-17.5 28q-43 60 -103 97t-128 37q-58 0 -102 -23t-93 -69
-q-12 -10 -23 -10q-13 0 -22.5 9.5t-9.5 22.5q0 5 1 7q45 183 172.5 319.5t298 204.5t360.5 68q140 0 274.5 -40t246.5 -113.5t194.5 -187t115.5 -251.5q1 -2 1 -7zM896 1408v-98q-42 2 -64 2t-64 -2v98q0 26 19 45t45 19t45 -19t19 -45z" />
-    <glyph glyph-name="paste" unicode="&#xf0ea;" horiz-adv-x="1792" 
-d="M768 -128h896v640h-416q-40 0 -68 28t-28 68v416h-384v-1152zM1024 1312v64q0 13 -9.5 22.5t-22.5 9.5h-704q-13 0 -22.5 -9.5t-9.5 -22.5v-64q0 -13 9.5 -22.5t22.5 -9.5h704q13 0 22.5 9.5t9.5 22.5zM1280 640h299l-299 299v-299zM1792 512v-672q0 -40 -28 -68t-68 -28
-h-960q-40 0 -68 28t-28 68v160h-544q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h1088q40 0 68 -28t28 -68v-328q21 -13 36 -28l408 -408q28 -28 48 -76t20 -88z" />
-    <glyph glyph-name="light_bulb" unicode="&#xf0eb;" horiz-adv-x="1024" 
-d="M736 960q0 -13 -9.5 -22.5t-22.5 -9.5t-22.5 9.5t-9.5 22.5q0 46 -54 71t-106 25q-13 0 -22.5 9.5t-9.5 22.5t9.5 22.5t22.5 9.5q50 0 99.5 -16t87 -54t37.5 -90zM896 960q0 72 -34.5 134t-90 101.5t-123 62t-136.5 22.5t-136.5 -22.5t-123 -62t-90 -101.5t-34.5 -134
-q0 -101 68 -180q10 -11 30.5 -33t30.5 -33q128 -153 141 -298h228q13 145 141 298q10 11 30.5 33t30.5 33q68 79 68 180zM1024 960q0 -155 -103 -268q-45 -49 -74.5 -87t-59.5 -95.5t-34 -107.5q47 -28 47 -82q0 -37 -25 -64q25 -27 25 -64q0 -52 -45 -81q13 -23 13 -47
-q0 -46 -31.5 -71t-77.5 -25q-20 -44 -60 -70t-87 -26t-87 26t-60 70q-46 0 -77.5 25t-31.5 71q0 24 13 47q-45 29 -45 81q0 37 25 64q-25 27 -25 64q0 54 47 82q-4 50 -34 107.5t-59.5 95.5t-74.5 87q-103 113 -103 268q0 99 44.5 184.5t117 142t164 89t186.5 32.5
-t186.5 -32.5t164 -89t117 -142t44.5 -184.5z" />
-    <glyph glyph-name="exchange" unicode="&#xf0ec;" horiz-adv-x="1792" 
-d="M1792 352v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5q-12 0 -24 10l-319 320q-9 9 -9 22q0 14 9 23l320 320q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5v-192h1376q13 0 22.5 -9.5t9.5 -22.5zM1792 896q0 -14 -9 -23l-320 -320q-9 -9 -23 -9
-q-13 0 -22.5 9.5t-9.5 22.5v192h-1376q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1376v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23z" />
-    <glyph glyph-name="cloud_download" unicode="&#xf0ed;" horiz-adv-x="1920" 
-d="M1280 608q0 14 -9 23t-23 9h-224v352q0 13 -9.5 22.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -22.5v-352h-224q-13 0 -22.5 -9.5t-9.5 -22.5q0 -14 9 -23l352 -352q9 -9 23 -9t23 9l351 351q10 12 10 24zM1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088
-q-185 0 -316.5 131.5t-131.5 316.5q0 130 70 240t188 165q-2 30 -2 43q0 212 150 362t362 150q156 0 285.5 -87t188.5 -231q71 62 166 62q106 0 181 -75t75 -181q0 -76 -41 -138q130 -31 213.5 -135.5t83.5 -238.5z" />
-    <glyph glyph-name="cloud_upload" unicode="&#xf0ee;" horiz-adv-x="1920" 
-d="M1280 672q0 14 -9 23l-352 352q-9 9 -23 9t-23 -9l-351 -351q-10 -12 -10 -24q0 -14 9 -23t23 -9h224v-352q0 -13 9.5 -22.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 22.5v352h224q13 0 22.5 9.5t9.5 22.5zM1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088
-q-185 0 -316.5 131.5t-131.5 316.5q0 130 70 240t188 165q-2 30 -2 43q0 212 150 362t362 150q156 0 285.5 -87t188.5 -231q71 62 166 62q106 0 181 -75t75 -181q0 -76 -41 -138q130 -31 213.5 -135.5t83.5 -238.5z" />
-    <glyph glyph-name="user_md" unicode="&#xf0f0;" horiz-adv-x="1408" 
-d="M384 192q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45t45 19t45 -19t19 -45zM1408 131q0 -121 -73 -190t-194 -69h-874q-121 0 -194 69t-73 190q0 68 5.5 131t24 138t47.5 132.5t81 103t120 60.5q-22 -52 -22 -120v-203q-58 -20 -93 -70t-35 -111q0 -80 56 -136t136 -56
-t136 56t56 136q0 61 -35.5 111t-92.5 70v203q0 62 25 93q132 -104 295 -104t295 104q25 -31 25 -93v-64q-106 0 -181 -75t-75 -181v-89q-32 -29 -32 -71q0 -40 28 -68t68 -28t68 28t28 68q0 42 -32 71v89q0 52 38 90t90 38t90 -38t38 -90v-89q-32 -29 -32 -71q0 -40 28 -68
-t68 -28t68 28t28 68q0 42 -32 71v89q0 68 -34.5 127.5t-93.5 93.5q0 10 0.5 42.5t0 48t-2.5 41.5t-7 47t-13 40q68 -15 120 -60.5t81 -103t47.5 -132.5t24 -138t5.5 -131zM1088 1024q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5
-t271.5 -112.5t112.5 -271.5z" />
-    <glyph glyph-name="stethoscope" unicode="&#xf0f1;" horiz-adv-x="1408" 
-d="M1280 832q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 832q0 -62 -35.5 -111t-92.5 -70v-395q0 -159 -131.5 -271.5t-316.5 -112.5t-316.5 112.5t-131.5 271.5v132q-164 20 -274 128t-110 252v512q0 26 19 45t45 19q6 0 16 -2q17 30 47 48
-t65 18q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5q-33 0 -64 18v-402q0 -106 94 -181t226 -75t226 75t94 181v402q-31 -18 -64 -18q-53 0 -90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5q35 0 65 -18t47 -48q10 2 16 2q26 0 45 -19t19 -45v-512q0 -144 -110 -252
-t-274 -128v-132q0 -106 94 -181t226 -75t226 75t94 181v395q-57 21 -92.5 70t-35.5 111q0 80 56 136t136 56t136 -56t56 -136z" />
-    <glyph glyph-name="suitcase" unicode="&#xf0f2;" horiz-adv-x="1792" 
-d="M640 1152h512v128h-512v-128zM288 1152v-1280h-64q-92 0 -158 66t-66 158v832q0 92 66 158t158 66h64zM1408 1152v-1280h-1024v1280h128v160q0 40 28 68t68 28h576q40 0 68 -28t28 -68v-160h128zM1792 928v-832q0 -92 -66 -158t-158 -66h-64v1280h64q92 0 158 -66
-t66 -158z" />
-    <glyph glyph-name="bell_alt" unicode="&#xf0f3;" horiz-adv-x="1792" 
-d="M912 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM1728 128q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-181 75t-75 181h-448q-52 0 -90 38t-38 90q50 42 91 88t85 119.5t74.5 158.5
-t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q190 -28 307 -158.5t117 -282.5q0 -139 19.5 -260t50 -206t74.5 -158.5t85 -119.5t91 -88z" />
-    <glyph glyph-name="coffee" unicode="&#xf0f4;" horiz-adv-x="1920" 
-d="M1664 896q0 80 -56 136t-136 56h-64v-384h64q80 0 136 56t56 136zM0 128h1792q0 -106 -75 -181t-181 -75h-1280q-106 0 -181 75t-75 181zM1856 896q0 -159 -112.5 -271.5t-271.5 -112.5h-64v-32q0 -92 -66 -158t-158 -66h-704q-92 0 -158 66t-66 158v736q0 26 19 45
-t45 19h1152q159 0 271.5 -112.5t112.5 -271.5z" />
-    <glyph glyph-name="food" unicode="&#xf0f5;" horiz-adv-x="1408" 
-d="M640 1472v-640q0 -61 -35.5 -111t-92.5 -70v-779q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v779q-57 20 -92.5 70t-35.5 111v640q0 26 19 45t45 19t45 -19t19 -45v-416q0 -26 19 -45t45 -19t45 19t19 45v416q0 26 19 45t45 19t45 -19t19 -45v-416q0 -26 19 -45
-t45 -19t45 19t19 45v416q0 26 19 45t45 19t45 -19t19 -45zM1408 1472v-1600q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v512h-224q-13 0 -22.5 9.5t-9.5 22.5v800q0 132 94 226t226 94h256q26 0 45 -19t19 -45z" />
-    <glyph glyph-name="file_text_alt" unicode="&#xf0f6;" 
-d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
-M384 736q0 14 9 23t23 9h704q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64zM1120 512q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704zM1120 256q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704
-q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704z" />
-    <glyph glyph-name="building" unicode="&#xf0f7;" horiz-adv-x="1408" 
-d="M384 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
-M640 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
-M1152 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
-M640 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
-M1152 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
-M640 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
-M1152 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
-M640 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
-M896 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
-M896 -128h384v1536h-1152v-1536h384v224q0 13 9.5 22.5t22.5 9.5h320q13 0 22.5 -9.5t9.5 -22.5v-224zM1408 1472v-1664q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1664q0 26 19 45t45 19h1280q26 0 45 -19t19 -45z" />
-    <glyph glyph-name="hospital" unicode="&#xf0f8;" horiz-adv-x="1408" 
-d="M384 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
-M640 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
-M1152 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
-M640 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
-M896 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
-M896 -128h384v1152h-256v-32q0 -40 -28 -68t-68 -28h-448q-40 0 -68 28t-28 68v32h-256v-1152h384v224q0 13 9.5 22.5t22.5 9.5h320q13 0 22.5 -9.5t9.5 -22.5v-224zM896 1056v320q0 13 -9.5 22.5t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-96h-128v96q0 13 -9.5 22.5
-t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5v96h128v-96q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1408 1088v-1280q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1280q0 26 19 45t45 19h320
-v288q0 40 28 68t68 28h448q40 0 68 -28t28 -68v-288h320q26 0 45 -19t19 -45z" />
-    <glyph glyph-name="ambulance" unicode="&#xf0f9;" horiz-adv-x="1920" 
-d="M640 128q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM256 640h384v256h-158q-14 -2 -22 -9l-195 -195q-7 -12 -9 -22v-30zM1536 128q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5
-t90.5 37.5t37.5 90.5zM1664 800v192q0 14 -9 23t-23 9h-224v224q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-224h-224q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h224v-224q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v224h224q14 0 23 9t9 23zM1920 1344v-1152
-q0 -26 -19 -45t-45 -19h-192q0 -106 -75 -181t-181 -75t-181 75t-75 181h-384q0 -106 -75 -181t-181 -75t-181 75t-75 181h-128q-26 0 -45 19t-19 45t19 45t45 19v416q0 26 13 58t32 51l198 198q19 19 51 32t58 13h160v320q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
-    <glyph glyph-name="medkit" unicode="&#xf0fa;" horiz-adv-x="1792" 
-d="M1280 416v192q0 14 -9 23t-23 9h-224v224q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-224h-224q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h224v-224q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v224h224q14 0 23 9t9 23zM640 1152h512v128h-512v-128zM256 1152v-1280h-32
-q-92 0 -158 66t-66 158v832q0 92 66 158t158 66h32zM1440 1152v-1280h-1088v1280h160v160q0 40 28 68t68 28h576q40 0 68 -28t28 -68v-160h160zM1792 928v-832q0 -92 -66 -158t-158 -66h-32v1280h32q92 0 158 -66t66 -158z" />
-    <glyph glyph-name="fighter_jet" unicode="&#xf0fb;" horiz-adv-x="1920" 
-d="M1920 576q-1 -32 -288 -96l-352 -32l-224 -64h-64l-293 -352h69q26 0 45 -4.5t19 -11.5t-19 -11.5t-45 -4.5h-96h-160h-64v32h64v416h-160l-192 -224h-96l-32 32v192h32v32h128v8l-192 24v128l192 24v8h-128v32h-32v192l32 32h96l192 -224h160v416h-64v32h64h160h96
-q26 0 45 -4.5t19 -11.5t-19 -11.5t-45 -4.5h-69l293 -352h64l224 -64l352 -32q128 -28 200 -52t80 -34z" />
-    <glyph glyph-name="beer" unicode="&#xf0fc;" horiz-adv-x="1664" 
-d="M640 640v384h-256v-256q0 -53 37.5 -90.5t90.5 -37.5h128zM1664 192v-192h-1152v192l128 192h-128q-159 0 -271.5 112.5t-112.5 271.5v320l-64 64l32 128h480l32 128h960l32 -192l-64 -32v-800z" />
-    <glyph glyph-name="h_sign" unicode="&#xf0fd;" 
-d="M1280 192v896q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-512v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-896q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h512v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1536 1120v-960
-q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-    <glyph glyph-name="f0fe" unicode="&#xf0fe;" 
-d="M1280 576v128q0 26 -19 45t-45 19h-320v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-320q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h320v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h320q26 0 45 19t19 45zM1536 1120v-960
-q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-    <glyph glyph-name="double_angle_left" unicode="&#xf100;" horiz-adv-x="1024" 
-d="M627 160q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23zM1011 160q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23
-t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23z" />
-    <glyph glyph-name="double_angle_right" unicode="&#xf101;" horiz-adv-x="1024" 
-d="M595 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23zM979 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23
-l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
-    <glyph glyph-name="double_angle_up" unicode="&#xf102;" horiz-adv-x="1152" 
-d="M1075 224q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23zM1075 608q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393
-q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
-    <glyph glyph-name="double_angle_down" unicode="&#xf103;" horiz-adv-x="1152" 
-d="M1075 672q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23zM1075 1056q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23
-t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" />
-    <glyph glyph-name="angle_left" unicode="&#xf104;" horiz-adv-x="640" 
-d="M627 992q0 -13 -10 -23l-393 -393l393 -393q10 -10 10 -23t-10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" />
-    <glyph glyph-name="angle_right" unicode="&#xf105;" horiz-adv-x="640" 
-d="M595 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
-    <glyph glyph-name="angle_up" unicode="&#xf106;" horiz-adv-x="1152" 
-d="M1075 352q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
-    <glyph glyph-name="angle_down" unicode="&#xf107;" horiz-adv-x="1152" 
-d="M1075 800q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" />
-    <glyph glyph-name="desktop" unicode="&#xf108;" horiz-adv-x="1920" 
-d="M1792 544v832q0 13 -9.5 22.5t-22.5 9.5h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-832q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5zM1920 1376v-1088q0 -66 -47 -113t-113 -47h-544q0 -37 16 -77.5t32 -71t16 -43.5q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19
-t-19 45q0 14 16 44t32 70t16 78h-544q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
-    <glyph glyph-name="laptop" unicode="&#xf109;" horiz-adv-x="1920" 
-d="M416 256q-66 0 -113 47t-47 113v704q0 66 47 113t113 47h1088q66 0 113 -47t47 -113v-704q0 -66 -47 -113t-113 -47h-1088zM384 1120v-704q0 -13 9.5 -22.5t22.5 -9.5h1088q13 0 22.5 9.5t9.5 22.5v704q0 13 -9.5 22.5t-22.5 9.5h-1088q-13 0 -22.5 -9.5t-9.5 -22.5z
-M1760 192h160v-96q0 -40 -47 -68t-113 -28h-1600q-66 0 -113 28t-47 68v96h160h1600zM1040 96q16 0 16 16t-16 16h-160q-16 0 -16 -16t16 -16h160z" />
-    <glyph glyph-name="tablet" unicode="&#xf10a;" horiz-adv-x="1152" 
-d="M640 128q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1024 288v960q0 13 -9.5 22.5t-22.5 9.5h-832q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h832q13 0 22.5 9.5t9.5 22.5zM1152 1248v-1088q0 -66 -47 -113t-113 -47h-832
-q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h832q66 0 113 -47t47 -113z" />
-    <glyph glyph-name="mobile_phone" unicode="&#xf10b;" horiz-adv-x="768" 
-d="M464 128q0 33 -23.5 56.5t-56.5 23.5t-56.5 -23.5t-23.5 -56.5t23.5 -56.5t56.5 -23.5t56.5 23.5t23.5 56.5zM672 288v704q0 13 -9.5 22.5t-22.5 9.5h-512q-13 0 -22.5 -9.5t-9.5 -22.5v-704q0 -13 9.5 -22.5t22.5 -9.5h512q13 0 22.5 9.5t9.5 22.5zM480 1136
-q0 16 -16 16h-160q-16 0 -16 -16t16 -16h160q16 0 16 16zM768 1152v-1024q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v1024q0 52 38 90t90 38h512q52 0 90 -38t38 -90z" />
-    <glyph glyph-name="circle_blank" unicode="&#xf10c;" 
-d="M768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103
-t279.5 -279.5t103 -385.5z" />
-    <glyph glyph-name="quote_left" unicode="&#xf10d;" horiz-adv-x="1664" 
-d="M768 576v-384q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v704q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5h64q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-64q-106 0 -181 -75t-75 -181v-32q0 -40 28 -68t68 -28h224q80 0 136 -56t56 -136z
-M1664 576v-384q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v704q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5h64q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-64q-106 0 -181 -75t-75 -181v-32q0 -40 28 -68t68 -28h224q80 0 136 -56t56 -136z" />
-    <glyph glyph-name="quote_right" unicode="&#xf10e;" horiz-adv-x="1664" 
-d="M768 1216v-704q0 -104 -40.5 -198.5t-109.5 -163.5t-163.5 -109.5t-198.5 -40.5h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64q106 0 181 75t75 181v32q0 40 -28 68t-68 28h-224q-80 0 -136 56t-56 136v384q0 80 56 136t136 56h384q80 0 136 -56t56 -136zM1664 1216
-v-704q0 -104 -40.5 -198.5t-109.5 -163.5t-163.5 -109.5t-198.5 -40.5h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64q106 0 181 75t75 181v32q0 40 -28 68t-68 28h-224q-80 0 -136 56t-56 136v384q0 80 56 136t136 56h384q80 0 136 -56t56 -136z" />
-    <glyph glyph-name="spinner" unicode="&#xf110;" horiz-adv-x="1792" 
-d="M526 142q0 -53 -37.5 -90.5t-90.5 -37.5q-52 0 -90 38t-38 90q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1024 -64q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM320 640q0 -53 -37.5 -90.5t-90.5 -37.5
-t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1522 142q0 -52 -38 -90t-90 -38q-53 0 -90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM558 1138q0 -66 -47 -113t-113 -47t-113 47t-47 113t47 113t113 47t113 -47t47 -113z
-M1728 640q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1088 1344q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1618 1138q0 -93 -66 -158.5t-158 -65.5q-93 0 -158.5 65.5t-65.5 158.5
-q0 92 65.5 158t158.5 66q92 0 158 -66t66 -158z" />
-    <glyph glyph-name="circle" unicode="&#xf111;" 
-d="M1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-    <glyph glyph-name="reply" unicode="&#xf112;" horiz-adv-x="1792" 
-d="M1792 416q0 -166 -127 -451q-3 -7 -10.5 -24t-13.5 -30t-13 -22q-12 -17 -28 -17q-15 0 -23.5 10t-8.5 25q0 9 2.5 26.5t2.5 23.5q5 68 5 123q0 101 -17.5 181t-48.5 138.5t-80 101t-105.5 69.5t-133 42.5t-154 21.5t-175.5 6h-224v-256q0 -26 -19 -45t-45 -19t-45 19
-l-512 512q-19 19 -19 45t19 45l512 512q19 19 45 19t45 -19t19 -45v-256h224q713 0 875 -403q53 -134 53 -333z" />
-    <glyph glyph-name="github_alt" unicode="&#xf113;" horiz-adv-x="1664" 
-d="M640 320q0 -40 -12.5 -82t-43 -76t-72.5 -34t-72.5 34t-43 76t-12.5 82t12.5 82t43 76t72.5 34t72.5 -34t43 -76t12.5 -82zM1280 320q0 -40 -12.5 -82t-43 -76t-72.5 -34t-72.5 34t-43 76t-12.5 82t12.5 82t43 76t72.5 34t72.5 -34t43 -76t12.5 -82zM1440 320
-q0 120 -69 204t-187 84q-41 0 -195 -21q-71 -11 -157 -11t-157 11q-152 21 -195 21q-118 0 -187 -84t-69 -204q0 -88 32 -153.5t81 -103t122 -60t140 -29.5t149 -7h168q82 0 149 7t140 29.5t122 60t81 103t32 153.5zM1664 496q0 -207 -61 -331q-38 -77 -105.5 -133t-141 -86
-t-170 -47.5t-171.5 -22t-167 -4.5q-78 0 -142 3t-147.5 12.5t-152.5 30t-137 51.5t-121 81t-86 115q-62 123 -62 331q0 237 136 396q-27 82 -27 170q0 116 51 218q108 0 190 -39.5t189 -123.5q147 35 309 35q148 0 280 -32q105 82 187 121t189 39q51 -102 51 -218
-q0 -87 -27 -168q136 -160 136 -398z" />
-    <glyph glyph-name="folder_close_alt" unicode="&#xf114;" horiz-adv-x="1664" 
-d="M1536 224v704q0 40 -28 68t-68 28h-704q-40 0 -68 28t-28 68v64q0 40 -28 68t-68 28h-320q-40 0 -68 -28t-28 -68v-960q0 -40 28 -68t68 -28h1216q40 0 68 28t28 68zM1664 928v-704q0 -92 -66 -158t-158 -66h-1216q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320
-q92 0 158 -66t66 -158v-32h672q92 0 158 -66t66 -158z" />
-    <glyph glyph-name="folder_open_alt" unicode="&#xf115;" horiz-adv-x="1920" 
-d="M1781 605q0 35 -53 35h-1088q-40 0 -85.5 -21.5t-71.5 -52.5l-294 -363q-18 -24 -18 -40q0 -35 53 -35h1088q40 0 86 22t71 53l294 363q18 22 18 39zM640 768h768v160q0 40 -28 68t-68 28h-576q-40 0 -68 28t-28 68v64q0 40 -28 68t-68 28h-320q-40 0 -68 -28t-28 -68
-v-853l256 315q44 53 116 87.5t140 34.5zM1909 605q0 -62 -46 -120l-295 -363q-43 -53 -116 -87.5t-140 -34.5h-1088q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h544q92 0 158 -66t66 -158v-160h192q54 0 99 -24.5t67 -70.5q15 -32 15 -68z
-" />
-    <glyph glyph-name="expand_alt" unicode="&#xf116;" horiz-adv-x="1792" 
- />
-    <glyph glyph-name="collapse_alt" unicode="&#xf117;" horiz-adv-x="1792" 
- />
-    <glyph glyph-name="smile" unicode="&#xf118;" 
-d="M1134 461q-37 -121 -138 -195t-228 -74t-228 74t-138 195q-8 25 4 48.5t38 31.5q25 8 48.5 -4t31.5 -38q25 -80 92.5 -129.5t151.5 -49.5t151.5 49.5t92.5 129.5q8 26 32 38t49 4t37 -31.5t4 -48.5zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5
-t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5
-t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-    <glyph glyph-name="frown" unicode="&#xf119;" 
-d="M1134 307q8 -25 -4 -48.5t-37 -31.5t-49 4t-32 38q-25 80 -92.5 129.5t-151.5 49.5t-151.5 -49.5t-92.5 -129.5q-8 -26 -31.5 -38t-48.5 -4q-26 8 -38 31.5t-4 48.5q37 121 138 195t228 74t228 -74t138 -195zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5
-t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204
-t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-    <glyph glyph-name="meh" unicode="&#xf11a;" 
-d="M1152 448q0 -26 -19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h640q26 0 45 -19t19 -45zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5
-t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640
-q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-    <glyph glyph-name="gamepad" unicode="&#xf11b;" horiz-adv-x="1920" 
-d="M832 448v128q0 14 -9 23t-23 9h-192v192q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-192h-192q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h192v-192q0 -14 9 -23t23 -9h128q14 0 23 9t9 23v192h192q14 0 23 9t9 23zM1408 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5
-t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 640q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1920 512q0 -212 -150 -362t-362 -150q-192 0 -338 128h-220q-146 -128 -338 -128q-212 0 -362 150
-t-150 362t150 362t362 150h896q212 0 362 -150t150 -362z" />
-    <glyph glyph-name="keyboard" unicode="&#xf11c;" horiz-adv-x="1920" 
-d="M384 368v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM512 624v-96q0 -16 -16 -16h-224q-16 0 -16 16v96q0 16 16 16h224q16 0 16 -16zM384 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1408 368v-96q0 -16 -16 -16
-h-864q-16 0 -16 16v96q0 16 16 16h864q16 0 16 -16zM768 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM640 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1024 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16
-h96q16 0 16 -16zM896 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1280 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1664 368v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1152 880v-96
-q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1408 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1664 880v-352q0 -16 -16 -16h-224q-16 0 -16 16v96q0 16 16 16h112v240q0 16 16 16h96q16 0 16 -16zM1792 128v896h-1664v-896
-h1664zM1920 1024v-896q0 -53 -37.5 -90.5t-90.5 -37.5h-1664q-53 0 -90.5 37.5t-37.5 90.5v896q0 53 37.5 90.5t90.5 37.5h1664q53 0 90.5 -37.5t37.5 -90.5z" />
-    <glyph glyph-name="flag_alt" unicode="&#xf11d;" horiz-adv-x="1792" 
-d="M1664 491v616q-169 -91 -306 -91q-82 0 -145 32q-100 49 -184 76.5t-178 27.5q-173 0 -403 -127v-599q245 113 433 113q55 0 103.5 -7.5t98 -26t77 -31t82.5 -39.5l28 -14q44 -22 101 -22q120 0 293 92zM320 1280q0 -35 -17.5 -64t-46.5 -46v-1266q0 -14 -9 -23t-23 -9
-h-64q-14 0 -23 9t-9 23v1266q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -39 -35 -57q-10 -5 -17 -9q-218 -116 -369 -116q-88 0 -158 35l-28 14q-64 33 -99 48t-91 29t-114 14q-102 0 -235.5 -44t-228.5 -102
-q-15 -9 -33 -9q-16 0 -32 8q-32 19 -32 56v742q0 35 31 55q35 21 78.5 42.5t114 52t152.5 49.5t155 19q112 0 209 -31t209 -86q38 -19 89 -19q122 0 310 112q22 12 31 17q31 16 62 -2q31 -20 31 -55z" />
-    <glyph glyph-name="flag_checkered" unicode="&#xf11e;" horiz-adv-x="1792" 
-d="M832 536v192q-181 -16 -384 -117v-185q205 96 384 110zM832 954v197q-172 -8 -384 -126v-189q215 111 384 118zM1664 491v184q-235 -116 -384 -71v224q-20 6 -39 15q-5 3 -33 17t-34.5 17t-31.5 15t-34.5 15.5t-32.5 13t-36 12.5t-35 8.5t-39.5 7.5t-39.5 4t-44 2
-q-23 0 -49 -3v-222h19q102 0 192.5 -29t197.5 -82q19 -9 39 -15v-188q42 -17 91 -17q120 0 293 92zM1664 918v189q-169 -91 -306 -91q-45 0 -78 8v-196q148 -42 384 90zM320 1280q0 -35 -17.5 -64t-46.5 -46v-1266q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v1266
-q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -39 -35 -57q-10 -5 -17 -9q-218 -116 -369 -116q-88 0 -158 35l-28 14q-64 33 -99 48t-91 29t-114 14q-102 0 -235.5 -44t-228.5 -102q-15 -9 -33 -9q-16 0 -32 8
-q-32 19 -32 56v742q0 35 31 55q35 21 78.5 42.5t114 52t152.5 49.5t155 19q112 0 209 -31t209 -86q38 -19 89 -19q122 0 310 112q22 12 31 17q31 16 62 -2q31 -20 31 -55z" />
-    <glyph glyph-name="terminal" unicode="&#xf120;" horiz-adv-x="1664" 
-d="M585 553l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23t-10 -23zM1664 96v-64q0 -14 -9 -23t-23 -9h-960q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h960q14 0 23 -9
-t9 -23z" />
-    <glyph glyph-name="code" unicode="&#xf121;" horiz-adv-x="1920" 
-d="M617 137l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23t-10 -23zM1208 1204l-373 -1291q-4 -13 -15.5 -19.5t-23.5 -2.5l-62 17q-13 4 -19.5 15.5t-2.5 24.5
-l373 1291q4 13 15.5 19.5t23.5 2.5l62 -17q13 -4 19.5 -15.5t2.5 -24.5zM1865 553l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23t-10 -23z" />
-    <glyph glyph-name="reply_all" unicode="&#xf122;" horiz-adv-x="1792" 
-d="M640 454v-70q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-512 512q-19 19 -19 45t19 45l512 512q29 31 70 14q39 -17 39 -59v-69l-397 -398q-19 -19 -19 -45t19 -45zM1792 416q0 -58 -17 -133.5t-38.5 -138t-48 -125t-40.5 -90.5l-20 -40q-8 -17 -28 -17q-6 0 -9 1
-q-25 8 -23 34q43 400 -106 565q-64 71 -170.5 110.5t-267.5 52.5v-251q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-512 512q-19 19 -19 45t19 45l512 512q29 31 70 14q39 -17 39 -59v-262q411 -28 599 -221q169 -173 169 -509z" />
-    <glyph glyph-name="star_half_empty" unicode="&#xf123;" horiz-adv-x="1664" 
-d="M1186 579l257 250l-356 52l-66 10l-30 60l-159 322v-963l59 -31l318 -168l-60 355l-12 66zM1638 841l-363 -354l86 -500q5 -33 -6 -51.5t-34 -18.5q-17 0 -40 12l-449 236l-449 -236q-23 -12 -40 -12q-23 0 -34 18.5t-6 51.5l86 500l-364 354q-32 32 -23 59.5t54 34.5
-l502 73l225 455q20 41 49 41q28 0 49 -41l225 -455l502 -73q45 -7 54 -34.5t-24 -59.5z" />
-    <glyph glyph-name="location_arrow" unicode="&#xf124;" horiz-adv-x="1408" 
-d="M1401 1187l-640 -1280q-17 -35 -57 -35q-5 0 -15 2q-22 5 -35.5 22.5t-13.5 39.5v576h-576q-22 0 -39.5 13.5t-22.5 35.5t4 42t29 30l1280 640q13 7 29 7q27 0 45 -19q15 -14 18.5 -34.5t-6.5 -39.5z" />
-    <glyph glyph-name="crop" unicode="&#xf125;" horiz-adv-x="1664" 
-d="M557 256h595v595zM512 301l595 595h-595v-595zM1664 224v-192q0 -14 -9 -23t-23 -9h-224v-224q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v224h-864q-14 0 -23 9t-9 23v864h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224v224q0 14 9 23t23 9h192q14 0 23 -9t9 -23
-v-224h851l246 247q10 9 23 9t23 -9q9 -10 9 -23t-9 -23l-247 -246v-851h224q14 0 23 -9t9 -23z" />
-    <glyph glyph-name="code_fork" unicode="&#xf126;" horiz-adv-x="1024" 
-d="M288 64q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM288 1216q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM928 1088q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1024 1088q0 -52 -26 -96.5t-70 -69.5
-q-2 -287 -226 -414q-67 -38 -203 -81q-128 -40 -169.5 -71t-41.5 -100v-26q44 -25 70 -69.5t26 -96.5q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 52 26 96.5t70 69.5v820q-44 25 -70 69.5t-26 96.5q0 80 56 136t136 56t136 -56t56 -136q0 -52 -26 -96.5t-70 -69.5v-497
-q54 26 154 57q55 17 87.5 29.5t70.5 31t59 39.5t40.5 51t28 69.5t8.5 91.5q-44 25 -70 69.5t-26 96.5q0 80 56 136t136 56t136 -56t56 -136z" />
-    <glyph glyph-name="unlink" unicode="&#xf127;" horiz-adv-x="1664" 
-d="M439 265l-256 -256q-11 -9 -23 -9t-23 9q-9 10 -9 23t9 23l256 256q10 9 23 9t23 -9q9 -10 9 -23t-9 -23zM608 224v-320q0 -14 -9 -23t-23 -9t-23 9t-9 23v320q0 14 9 23t23 9t23 -9t9 -23zM384 448q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23t9 23t23 9h320
-q14 0 23 -9t9 -23zM1648 320q0 -120 -85 -203l-147 -146q-83 -83 -203 -83q-121 0 -204 85l-334 335q-21 21 -42 56l239 18l273 -274q27 -27 68 -27.5t68 26.5l147 146q28 28 28 67q0 40 -28 68l-274 275l18 239q35 -21 56 -42l336 -336q84 -86 84 -204zM1031 1044l-239 -18
-l-273 274q-28 28 -68 28q-39 0 -68 -27l-147 -146q-28 -28 -28 -67q0 -40 28 -68l274 -274l-18 -240q-35 21 -56 42l-336 336q-84 86 -84 204q0 120 85 203l147 146q83 83 203 83q121 0 204 -85l334 -335q21 -21 42 -56zM1664 960q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9
-t-9 23t9 23t23 9h320q14 0 23 -9t9 -23zM1120 1504v-320q0 -14 -9 -23t-23 -9t-23 9t-9 23v320q0 14 9 23t23 9t23 -9t9 -23zM1527 1353l-256 -256q-11 -9 -23 -9t-23 9q-9 10 -9 23t9 23l256 256q10 9 23 9t23 -9q9 -10 9 -23t-9 -23z" />
-    <glyph glyph-name="question" unicode="&#xf128;" horiz-adv-x="1024" 
-d="M704 280v-240q0 -16 -12 -28t-28 -12h-240q-16 0 -28 12t-12 28v240q0 16 12 28t28 12h240q16 0 28 -12t12 -28zM1020 880q0 -54 -15.5 -101t-35 -76.5t-55 -59.5t-57.5 -43.5t-61 -35.5q-41 -23 -68.5 -65t-27.5 -67q0 -17 -12 -32.5t-28 -15.5h-240q-15 0 -25.5 18.5
-t-10.5 37.5v45q0 83 65 156.5t143 108.5q59 27 84 56t25 76q0 42 -46.5 74t-107.5 32q-65 0 -108 -29q-35 -25 -107 -115q-13 -16 -31 -16q-12 0 -25 8l-164 125q-13 10 -15.5 25t5.5 28q160 266 464 266q80 0 161 -31t146 -83t106 -127.5t41 -158.5z" />
-    <glyph glyph-name="_279" unicode="&#xf129;" horiz-adv-x="640" 
-d="M640 192v-128q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64v384h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-576h64q26 0 45 -19t19 -45zM512 1344v-192q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v192
-q0 26 19 45t45 19h256q26 0 45 -19t19 -45z" />
-    <glyph glyph-name="exclamation" unicode="&#xf12a;" horiz-adv-x="640" 
-d="M512 288v-224q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v224q0 26 19 45t45 19h256q26 0 45 -19t19 -45zM542 1344l-28 -768q-1 -26 -20.5 -45t-45.5 -19h-256q-26 0 -45.5 19t-20.5 45l-28 768q-1 26 17.5 45t44.5 19h320q26 0 44.5 -19t17.5 -45z" />
-    <glyph glyph-name="superscript" unicode="&#xf12b;" 
-d="M897 167v-167h-248l-159 252l-24 42q-8 9 -11 21h-3q-1 -3 -2.5 -6.5t-3.5 -8t-3 -6.5q-10 -20 -25 -44l-155 -250h-258v167h128l197 291l-185 272h-137v168h276l139 -228q2 -4 23 -42q8 -9 11 -21h3q3 9 11 21l25 42l140 228h257v-168h-125l-184 -267l204 -296h109z
-M1534 846v-206h-514l-3 27q-4 28 -4 46q0 64 26 117t65 86.5t84 65t84 54.5t65 54t26 64q0 38 -29.5 62.5t-70.5 24.5q-51 0 -97 -39q-14 -11 -36 -38l-105 92q26 37 63 66q83 65 188 65q110 0 178 -59.5t68 -158.5q0 -56 -24.5 -103t-62 -76.5t-81.5 -58.5t-82 -50.5
-t-65.5 -51.5t-30.5 -63h232v80h126z" />
-    <glyph glyph-name="subscript" unicode="&#xf12c;" 
-d="M897 167v-167h-248l-159 252l-24 42q-8 9 -11 21h-3q-1 -3 -2.5 -6.5t-3.5 -8t-3 -6.5q-10 -20 -25 -44l-155 -250h-258v167h128l197 291l-185 272h-137v168h276l139 -228q2 -4 23 -42q8 -9 11 -21h3q3 9 11 21l25 42l140 228h257v-168h-125l-184 -267l204 -296h109z
-M1536 -50v-206h-514l-4 27q-3 45 -3 46q0 64 26 117t65 86.5t84 65t84 54.5t65 54t26 64q0 38 -29.5 62.5t-70.5 24.5q-51 0 -97 -39q-14 -11 -36 -38l-105 92q26 37 63 66q80 65 188 65q110 0 178 -59.5t68 -158.5q0 -66 -34.5 -118.5t-84 -86t-99.5 -62.5t-87 -63t-41 -73
-h232v80h126z" />
-    <glyph glyph-name="_283" unicode="&#xf12d;" horiz-adv-x="1920" 
-d="M896 128l336 384h-768l-336 -384h768zM1909 1205q15 -34 9.5 -71.5t-30.5 -65.5l-896 -1024q-38 -44 -96 -44h-768q-38 0 -69.5 20.5t-47.5 54.5q-15 34 -9.5 71.5t30.5 65.5l896 1024q38 44 96 44h768q38 0 69.5 -20.5t47.5 -54.5z" />
-    <glyph glyph-name="puzzle_piece" unicode="&#xf12e;" horiz-adv-x="1664" 
-d="M1664 438q0 -81 -44.5 -135t-123.5 -54q-41 0 -77.5 17.5t-59 38t-56.5 38t-71 17.5q-110 0 -110 -124q0 -39 16 -115t15 -115v-5q-22 0 -33 -1q-34 -3 -97.5 -11.5t-115.5 -13.5t-98 -5q-61 0 -103 26.5t-42 83.5q0 37 17.5 71t38 56.5t38 59t17.5 77.5q0 79 -54 123.5
-t-135 44.5q-84 0 -143 -45.5t-59 -127.5q0 -43 15 -83t33.5 -64.5t33.5 -53t15 -50.5q0 -45 -46 -89q-37 -35 -117 -35q-95 0 -245 24q-9 2 -27.5 4t-27.5 4l-13 2q-1 0 -3 1q-2 0 -2 1v1024q2 -1 17.5 -3.5t34 -5t21.5 -3.5q150 -24 245 -24q80 0 117 35q46 44 46 89
-q0 22 -15 50.5t-33.5 53t-33.5 64.5t-15 83q0 82 59 127.5t144 45.5q80 0 134 -44.5t54 -123.5q0 -41 -17.5 -77.5t-38 -59t-38 -56.5t-17.5 -71q0 -57 42 -83.5t103 -26.5q64 0 180 15t163 17v-2q-1 -2 -3.5 -17.5t-5 -34t-3.5 -21.5q-24 -150 -24 -245q0 -80 35 -117
-q44 -46 89 -46q22 0 50.5 15t53 33.5t64.5 33.5t83 15q82 0 127.5 -59t45.5 -143z" />
-    <glyph glyph-name="microphone" unicode="&#xf130;" horiz-adv-x="1152" 
-d="M1152 832v-128q0 -221 -147.5 -384.5t-364.5 -187.5v-132h256q26 0 45 -19t19 -45t-19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h256v132q-217 24 -364.5 187.5t-147.5 384.5v128q0 26 19 45t45 19t45 -19t19 -45v-128q0 -185 131.5 -316.5t316.5 -131.5
-t316.5 131.5t131.5 316.5v128q0 26 19 45t45 19t45 -19t19 -45zM896 1216v-512q0 -132 -94 -226t-226 -94t-226 94t-94 226v512q0 132 94 226t226 94t226 -94t94 -226z" />
-    <glyph glyph-name="microphone_off" unicode="&#xf131;" horiz-adv-x="1408" 
-d="M271 591l-101 -101q-42 103 -42 214v128q0 26 19 45t45 19t45 -19t19 -45v-128q0 -53 15 -113zM1385 1193l-361 -361v-128q0 -132 -94 -226t-226 -94q-55 0 -109 19l-96 -96q97 -51 205 -51q185 0 316.5 131.5t131.5 316.5v128q0 26 19 45t45 19t45 -19t19 -45v-128
-q0 -221 -147.5 -384.5t-364.5 -187.5v-132h256q26 0 45 -19t19 -45t-19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h256v132q-125 13 -235 81l-254 -254q-10 -10 -23 -10t-23 10l-82 82q-10 10 -10 23t10 23l1234 1234q10 10 23 10t23 -10l82 -82q10 -10 10 -23
-t-10 -23zM1005 1325l-621 -621v512q0 132 94 226t226 94q102 0 184.5 -59t116.5 -152z" />
-    <glyph glyph-name="shield" unicode="&#xf132;" horiz-adv-x="1280" 
-d="M1088 576v640h-448v-1137q119 63 213 137q235 184 235 360zM1280 1344v-768q0 -86 -33.5 -170.5t-83 -150t-118 -127.5t-126.5 -103t-121 -77.5t-89.5 -49.5t-42.5 -20q-12 -6 -26 -6t-26 6q-16 7 -42.5 20t-89.5 49.5t-121 77.5t-126.5 103t-118 127.5t-83 150
-t-33.5 170.5v768q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
-    <glyph glyph-name="calendar_empty" unicode="&#xf133;" horiz-adv-x="1664" 
-d="M128 -128h1408v1024h-1408v-1024zM512 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1280 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1664 1152v-1280
-q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" />
-    <glyph glyph-name="fire_extinguisher" unicode="&#xf134;" horiz-adv-x="1408" 
-d="M512 1344q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 1376v-320q0 -16 -12 -25q-8 -7 -20 -7q-4 0 -7 1l-448 96q-11 2 -18 11t-7 20h-256v-102q111 -23 183.5 -111t72.5 -203v-800q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v800
-q0 106 62.5 190.5t161.5 114.5v111h-32q-59 0 -115 -23.5t-91.5 -53t-66 -66.5t-40.5 -53.5t-14 -24.5q-17 -35 -57 -35q-16 0 -29 7q-23 12 -31.5 37t3.5 49q5 10 14.5 26t37.5 53.5t60.5 70t85 67t108.5 52.5q-25 42 -25 86q0 66 47 113t113 47t113 -47t47 -113
-q0 -33 -14 -64h302q0 11 7 20t18 11l448 96q3 1 7 1q12 0 20 -7q12 -9 12 -25z" />
-    <glyph glyph-name="rocket" unicode="&#xf135;" horiz-adv-x="1664" 
-d="M1440 1088q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1664 1376q0 -249 -75.5 -430.5t-253.5 -360.5q-81 -80 -195 -176l-20 -379q-2 -16 -16 -26l-384 -224q-7 -4 -16 -4q-12 0 -23 9l-64 64q-13 14 -8 32l85 276l-281 281l-276 -85q-3 -1 -9 -1
-q-14 0 -23 9l-64 64q-17 19 -5 39l224 384q10 14 26 16l379 20q96 114 176 195q188 187 358 258t431 71q14 0 24 -9.5t10 -22.5z" />
-    <glyph glyph-name="maxcdn" unicode="&#xf136;" horiz-adv-x="1792" 
-d="M1745 763l-164 -763h-334l178 832q13 56 -15 88q-27 33 -83 33h-169l-204 -953h-334l204 953h-286l-204 -953h-334l204 953l-153 327h1276q101 0 189.5 -40.5t147.5 -113.5q60 -73 81 -168.5t0 -194.5z" />
-    <glyph glyph-name="chevron_sign_left" unicode="&#xf137;" 
-d="M909 141l102 102q19 19 19 45t-19 45l-307 307l307 307q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-454 -454q-19 -19 -19 -45t19 -45l454 -454q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5
-t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-    <glyph glyph-name="chevron_sign_right" unicode="&#xf138;" 
-d="M717 141l454 454q19 19 19 45t-19 45l-454 454q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l307 -307l-307 -307q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5
-t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-    <glyph glyph-name="chevron_sign_up" unicode="&#xf139;" 
-d="M1165 397l102 102q19 19 19 45t-19 45l-454 454q-19 19 -45 19t-45 -19l-454 -454q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19l307 307l307 -307q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5
-t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-    <glyph glyph-name="chevron_sign_down" unicode="&#xf13a;" 
-d="M813 237l454 454q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-307 -307l-307 307q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l454 -454q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5
-t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-    <glyph glyph-name="html5" unicode="&#xf13b;" horiz-adv-x="1408" 
-d="M1130 939l16 175h-884l47 -534h612l-22 -228l-197 -53l-196 53l-13 140h-175l22 -278l362 -100h4v1l359 99l50 544h-644l-15 181h674zM0 1408h1408l-128 -1438l-578 -162l-574 162z" />
-    <glyph glyph-name="css3" unicode="&#xf13c;" horiz-adv-x="1792" 
-d="M275 1408h1505l-266 -1333l-804 -267l-698 267l71 356h297l-29 -147l422 -161l486 161l68 339h-1208l58 297h1209l38 191h-1208z" />
-    <glyph glyph-name="anchor" unicode="&#xf13d;" horiz-adv-x="1792" 
-d="M960 1280q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1792 352v-352q0 -22 -20 -30q-8 -2 -12 -2q-12 0 -23 9l-93 93q-119 -143 -318.5 -226.5t-429.5 -83.5t-429.5 83.5t-318.5 226.5l-93 -93q-9 -9 -23 -9q-4 0 -12 2q-20 8 -20 30v352
-q0 14 9 23t23 9h352q22 0 30 -20q8 -19 -7 -35l-100 -100q67 -91 189.5 -153.5t271.5 -82.5v647h-192q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h192v163q-58 34 -93 92.5t-35 128.5q0 106 75 181t181 75t181 -75t75 -181q0 -70 -35 -128.5t-93 -92.5v-163h192q26 0 45 -19
-t19 -45v-128q0 -26 -19 -45t-45 -19h-192v-647q149 20 271.5 82.5t189.5 153.5l-100 100q-15 16 -7 35q8 20 30 20h352q14 0 23 -9t9 -23z" />
-    <glyph glyph-name="unlock_alt" unicode="&#xf13e;" horiz-adv-x="1152" 
-d="M1056 768q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h32v320q0 185 131.5 316.5t316.5 131.5t316.5 -131.5t131.5 -316.5q0 -26 -19 -45t-45 -19h-64q-26 0 -45 19t-19 45q0 106 -75 181t-181 75t-181 -75t-75 -181
-v-320h736z" />
-    <glyph glyph-name="bullseye" unicode="&#xf140;" 
-d="M1024 640q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM1152 640q0 159 -112.5 271.5t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM1280 640q0 -212 -150 -362t-362 -150t-362 150
-t-150 362t150 362t362 150t362 -150t150 -362zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640
-q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-    <glyph glyph-name="ellipsis_horizontal" unicode="&#xf141;" horiz-adv-x="1408" 
-d="M384 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM896 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM1408 800v-192q0 -40 -28 -68t-68 -28h-192
-q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68z" />
-    <glyph glyph-name="ellipsis_vertical" unicode="&#xf142;" horiz-adv-x="384" 
-d="M384 288v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM384 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM384 1312v-192q0 -40 -28 -68t-68 -28h-192
-q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68z" />
-    <glyph glyph-name="_303" unicode="&#xf143;" 
-d="M512 256q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM863 162q-13 233 -176.5 396.5t-396.5 176.5q-14 1 -24 -9t-10 -23v-128q0 -13 8.5 -22t21.5 -10q154 -11 264 -121t121 -264q1 -13 10 -21.5t22 -8.5h128
-q13 0 23 10t9 24zM1247 161q-5 154 -56 297.5t-139.5 260t-205 205t-260 139.5t-297.5 56q-14 1 -23 -9q-10 -10 -10 -23v-128q0 -13 9 -22t22 -10q204 -7 378 -111.5t278.5 -278.5t111.5 -378q1 -13 10 -22t22 -9h128q13 0 23 10q11 9 9 23zM1536 1120v-960
-q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-    <glyph glyph-name="play_sign" unicode="&#xf144;" 
-d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM1152 585q32 18 32 55t-32 55l-544 320q-31 19 -64 1q-32 -19 -32 -56v-640q0 -37 32 -56
-q16 -8 32 -8q17 0 32 9z" />
-    <glyph glyph-name="ticket" unicode="&#xf145;" horiz-adv-x="1792" 
-d="M1024 1084l316 -316l-572 -572l-316 316zM813 105l618 618q19 19 19 45t-19 45l-362 362q-18 18 -45 18t-45 -18l-618 -618q-19 -19 -19 -45t19 -45l362 -362q18 -18 45 -18t45 18zM1702 742l-907 -908q-37 -37 -90.5 -37t-90.5 37l-126 126q56 56 56 136t-56 136
-t-136 56t-136 -56l-125 126q-37 37 -37 90.5t37 90.5l907 906q37 37 90.5 37t90.5 -37l125 -125q-56 -56 -56 -136t56 -136t136 -56t136 56l126 -125q37 -37 37 -90.5t-37 -90.5z" />
-    <glyph glyph-name="minus_sign_alt" unicode="&#xf146;" 
-d="M1280 576v128q0 26 -19 45t-45 19h-896q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h896q26 0 45 19t19 45zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5
-t84.5 -203.5z" />
-    <glyph glyph-name="check_minus" unicode="&#xf147;" horiz-adv-x="1408" 
-d="M1152 736v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h832q14 0 23 -9t9 -23zM1280 288v832q0 66 -47 113t-113 47h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113zM1408 1120v-832q0 -119 -84.5 -203.5
-t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q119 0 203.5 -84.5t84.5 -203.5z" />
-    <glyph glyph-name="level_up" unicode="&#xf148;" horiz-adv-x="1024" 
-d="M1018 933q-18 -37 -58 -37h-192v-864q0 -14 -9 -23t-23 -9h-704q-21 0 -29 18q-8 20 4 35l160 192q9 11 25 11h320v640h-192q-40 0 -58 37q-17 37 9 68l320 384q18 22 49 22t49 -22l320 -384q27 -32 9 -68z" />
-    <glyph glyph-name="level_down" unicode="&#xf149;" horiz-adv-x="1024" 
-d="M32 1280h704q13 0 22.5 -9.5t9.5 -23.5v-863h192q40 0 58 -37t-9 -69l-320 -384q-18 -22 -49 -22t-49 22l-320 384q-26 31 -9 69q18 37 58 37h192v640h-320q-14 0 -25 11l-160 192q-13 14 -4 34q9 19 29 19z" />
-    <glyph glyph-name="check_sign" unicode="&#xf14a;" 
-d="M685 237l614 614q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-467 -467l-211 211q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l358 -358q19 -19 45 -19t45 19zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5
-t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-    <glyph glyph-name="edit_sign" unicode="&#xf14b;" 
-d="M404 428l152 -152l-52 -52h-56v96h-96v56zM818 818q14 -13 -3 -30l-291 -291q-17 -17 -30 -3q-14 13 3 30l291 291q17 17 30 3zM544 128l544 544l-288 288l-544 -544v-288h288zM1152 736l92 92q28 28 28 68t-28 68l-152 152q-28 28 -68 28t-68 -28l-92 -92zM1536 1120
-v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-    <glyph glyph-name="_312" unicode="&#xf14c;" 
-d="M1280 608v480q0 26 -19 45t-45 19h-480q-42 0 -59 -39q-17 -41 14 -70l144 -144l-534 -534q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19l534 534l144 -144q18 -19 45 -19q12 0 25 5q39 17 39 59zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960
-q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-    <glyph glyph-name="share_sign" unicode="&#xf14d;" 
-d="M1005 435l352 352q19 19 19 45t-19 45l-352 352q-30 31 -69 14q-40 -17 -40 -59v-160q-119 0 -216 -19.5t-162.5 -51t-114 -79t-76.5 -95.5t-44.5 -109t-21.5 -111.5t-5 -110.5q0 -181 167 -404q11 -12 25 -12q7 0 13 3q22 9 19 33q-44 354 62 473q46 52 130 75.5
-t224 23.5v-160q0 -42 40 -59q12 -5 24 -5q26 0 45 19zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-    <glyph glyph-name="compass" unicode="&#xf14e;" 
-d="M640 448l256 128l-256 128v-256zM1024 1039v-542l-512 -256v542zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103
-t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-    <glyph glyph-name="collapse" unicode="&#xf150;" 
-d="M1145 861q18 -35 -5 -66l-320 -448q-19 -27 -52 -27t-52 27l-320 448q-23 31 -5 66q17 35 57 35h640q40 0 57 -35zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5zM1536 1120
-v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-    <glyph glyph-name="collapse_top" unicode="&#xf151;" 
-d="M1145 419q-17 -35 -57 -35h-640q-40 0 -57 35q-18 35 5 66l320 448q19 27 52 27t52 -27l320 -448q23 -31 5 -66zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5zM1536 1120v-960
-q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-    <glyph glyph-name="_317" unicode="&#xf152;" 
-d="M1088 640q0 -33 -27 -52l-448 -320q-31 -23 -66 -5q-35 17 -35 57v640q0 40 35 57q35 18 66 -5l448 -320q27 -19 27 -52zM1280 160v960q0 14 -9 23t-23 9h-960q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h960q14 0 23 9t9 23zM1536 1120v-960q0 -119 -84.5 -203.5
-t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-    <glyph glyph-name="eur" unicode="&#xf153;" horiz-adv-x="1024" 
-d="M976 229l35 -159q3 -12 -3 -22.5t-17 -14.5l-5 -1q-4 -2 -10.5 -3.5t-16 -4.5t-21.5 -5.5t-25.5 -5t-30 -5t-33.5 -4.5t-36.5 -3t-38.5 -1q-234 0 -409 130.5t-238 351.5h-95q-13 0 -22.5 9.5t-9.5 22.5v113q0 13 9.5 22.5t22.5 9.5h66q-2 57 1 105h-67q-14 0 -23 9
-t-9 23v114q0 14 9 23t23 9h98q67 210 243.5 338t400.5 128q102 0 194 -23q11 -3 20 -15q6 -11 3 -24l-43 -159q-3 -13 -14 -19.5t-24 -2.5l-4 1q-4 1 -11.5 2.5l-17.5 3.5t-22.5 3.5t-26 3t-29 2.5t-29.5 1q-126 0 -226 -64t-150 -176h468q16 0 25 -12q10 -12 7 -26
-l-24 -114q-5 -26 -32 -26h-488q-3 -37 0 -105h459q15 0 25 -12q9 -12 6 -27l-24 -112q-2 -11 -11 -18.5t-20 -7.5h-387q48 -117 149.5 -185.5t228.5 -68.5q18 0 36 1.5t33.5 3.5t29.5 4.5t24.5 5t18.5 4.5l12 3l5 2q13 5 26 -2q12 -7 15 -21z" />
-    <glyph glyph-name="gbp" unicode="&#xf154;" horiz-adv-x="1024" 
-d="M1020 399v-367q0 -14 -9 -23t-23 -9h-956q-14 0 -23 9t-9 23v150q0 13 9.5 22.5t22.5 9.5h97v383h-95q-14 0 -23 9.5t-9 22.5v131q0 14 9 23t23 9h95v223q0 171 123.5 282t314.5 111q185 0 335 -125q9 -8 10 -20.5t-7 -22.5l-103 -127q-9 -11 -22 -12q-13 -2 -23 7
-q-5 5 -26 19t-69 32t-93 18q-85 0 -137 -47t-52 -123v-215h305q13 0 22.5 -9t9.5 -23v-131q0 -13 -9.5 -22.5t-22.5 -9.5h-305v-379h414v181q0 13 9 22.5t23 9.5h162q14 0 23 -9.5t9 -22.5z" />
-    <glyph glyph-name="usd" unicode="&#xf155;" horiz-adv-x="1024" 
-d="M978 351q0 -153 -99.5 -263.5t-258.5 -136.5v-175q0 -14 -9 -23t-23 -9h-135q-13 0 -22.5 9.5t-9.5 22.5v175q-66 9 -127.5 31t-101.5 44.5t-74 48t-46.5 37.5t-17.5 18q-17 21 -2 41l103 135q7 10 23 12q15 2 24 -9l2 -2q113 -99 243 -125q37 -8 74 -8q81 0 142.5 43
-t61.5 122q0 28 -15 53t-33.5 42t-58.5 37.5t-66 32t-80 32.5q-39 16 -61.5 25t-61.5 26.5t-62.5 31t-56.5 35.5t-53.5 42.5t-43.5 49t-35.5 58t-21 66.5t-8.5 78q0 138 98 242t255 134v180q0 13 9.5 22.5t22.5 9.5h135q14 0 23 -9t9 -23v-176q57 -6 110.5 -23t87 -33.5
-t63.5 -37.5t39 -29t15 -14q17 -18 5 -38l-81 -146q-8 -15 -23 -16q-14 -3 -27 7q-3 3 -14.5 12t-39 26.5t-58.5 32t-74.5 26t-85.5 11.5q-95 0 -155 -43t-60 -111q0 -26 8.5 -48t29.5 -41.5t39.5 -33t56 -31t60.5 -27t70 -27.5q53 -20 81 -31.5t76 -35t75.5 -42.5t62 -50
-t53 -63.5t31.5 -76.5t13 -94z" />
-    <glyph glyph-name="inr" unicode="&#xf156;" horiz-adv-x="898" 
-d="M898 1066v-102q0 -14 -9 -23t-23 -9h-168q-23 -144 -129 -234t-276 -110q167 -178 459 -536q14 -16 4 -34q-8 -18 -29 -18h-195q-16 0 -25 12q-306 367 -498 571q-9 9 -9 22v127q0 13 9.5 22.5t22.5 9.5h112q132 0 212.5 43t102.5 125h-427q-14 0 -23 9t-9 23v102
-q0 14 9 23t23 9h413q-57 113 -268 113h-145q-13 0 -22.5 9.5t-9.5 22.5v133q0 14 9 23t23 9h832q14 0 23 -9t9 -23v-102q0 -14 -9 -23t-23 -9h-233q47 -61 64 -144h171q14 0 23 -9t9 -23z" />
-    <glyph glyph-name="jpy" unicode="&#xf157;" horiz-adv-x="1027" 
-d="M603 0h-172q-13 0 -22.5 9t-9.5 23v330h-288q-13 0 -22.5 9t-9.5 23v103q0 13 9.5 22.5t22.5 9.5h288v85h-288q-13 0 -22.5 9t-9.5 23v104q0 13 9.5 22.5t22.5 9.5h214l-321 578q-8 16 0 32q10 16 28 16h194q19 0 29 -18l215 -425q19 -38 56 -125q10 24 30.5 68t27.5 61
-l191 420q8 19 29 19h191q17 0 27 -16q9 -14 1 -31l-313 -579h215q13 0 22.5 -9.5t9.5 -22.5v-104q0 -14 -9.5 -23t-22.5 -9h-290v-85h290q13 0 22.5 -9.5t9.5 -22.5v-103q0 -14 -9.5 -23t-22.5 -9h-290v-330q0 -13 -9.5 -22.5t-22.5 -9.5z" />
-    <glyph glyph-name="rub" unicode="&#xf158;" horiz-adv-x="1280" 
-d="M1043 971q0 100 -65 162t-171 62h-320v-448h320q106 0 171 62t65 162zM1280 971q0 -193 -126.5 -315t-326.5 -122h-340v-118h505q14 0 23 -9t9 -23v-128q0 -14 -9 -23t-23 -9h-505v-192q0 -14 -9.5 -23t-22.5 -9h-167q-14 0 -23 9t-9 23v192h-224q-14 0 -23 9t-9 23v128
-q0 14 9 23t23 9h224v118h-224q-14 0 -23 9t-9 23v149q0 13 9 22.5t23 9.5h224v629q0 14 9 23t23 9h539q200 0 326.5 -122t126.5 -315z" />
-    <glyph glyph-name="krw" unicode="&#xf159;" horiz-adv-x="1792" 
-d="M514 341l81 299h-159l75 -300q1 -1 1 -3t1 -3q0 1 0.5 3.5t0.5 3.5zM630 768l35 128h-292l32 -128h225zM822 768h139l-35 128h-70zM1271 340l78 300h-162l81 -299q0 -1 0.5 -3.5t1.5 -3.5q0 1 0.5 3t0.5 3zM1382 768l33 128h-297l34 -128h230zM1792 736v-64q0 -14 -9 -23
-t-23 -9h-213l-164 -616q-7 -24 -31 -24h-159q-24 0 -31 24l-166 616h-209l-167 -616q-7 -24 -31 -24h-159q-11 0 -19.5 7t-10.5 17l-160 616h-208q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h175l-33 128h-142q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h109l-89 344q-5 15 5 28
-q10 12 26 12h137q26 0 31 -24l90 -360h359l97 360q7 24 31 24h126q24 0 31 -24l98 -360h365l93 360q5 24 31 24h137q16 0 26 -12q10 -13 5 -28l-91 -344h111q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-145l-34 -128h179q14 0 23 -9t9 -23z" />
-    <glyph glyph-name="btc" unicode="&#xf15a;" horiz-adv-x="1280" 
-d="M1167 896q18 -182 -131 -258q117 -28 175 -103t45 -214q-7 -71 -32.5 -125t-64.5 -89t-97 -58.5t-121.5 -34.5t-145.5 -15v-255h-154v251q-80 0 -122 1v-252h-154v255q-18 0 -54 0.5t-55 0.5h-200l31 183h111q50 0 58 51v402h16q-6 1 -16 1v287q-13 68 -89 68h-111v164
-l212 -1q64 0 97 1v252h154v-247q82 2 122 2v245h154v-252q79 -7 140 -22.5t113 -45t82.5 -78t36.5 -114.5zM952 351q0 36 -15 64t-37 46t-57.5 30.5t-65.5 18.5t-74 9t-69 3t-64.5 -1t-47.5 -1v-338q8 0 37 -0.5t48 -0.5t53 1.5t58.5 4t57 8.5t55.5 14t47.5 21t39.5 30
-t24.5 40t9.5 51zM881 827q0 33 -12.5 58.5t-30.5 42t-48 28t-55 16.5t-61.5 8t-58 2.5t-54 -1t-39.5 -0.5v-307q5 0 34.5 -0.5t46.5 0t50 2t55 5.5t51.5 11t48.5 18.5t37 27t27 38.5t9 51z" />
-    <glyph glyph-name="file" unicode="&#xf15b;" 
-d="M1024 1024v472q22 -14 36 -28l408 -408q14 -14 28 -36h-472zM896 992q0 -40 28 -68t68 -28h544v-1056q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h800v-544z" />
-    <glyph glyph-name="file_text" unicode="&#xf15c;" 
-d="M1468 1060q14 -14 28 -36h-472v472q22 -14 36 -28zM992 896h544v-1056q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h800v-544q0 -40 28 -68t68 -28zM1152 160v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704
-q14 0 23 9t9 23zM1152 416v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23zM1152 672v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23z" />
-    <glyph glyph-name="sort_by_alphabet" unicode="&#xf15d;" horiz-adv-x="1664" 
-d="M1191 1128h177l-72 218l-12 47q-2 16 -2 20h-4l-3 -20q0 -1 -3.5 -18t-7.5 -29zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1572 -23
-v-233h-584v90l369 529q12 18 21 27l11 9v3q-2 0 -6.5 -0.5t-7.5 -0.5q-12 -3 -30 -3h-232v-115h-120v229h567v-89l-369 -530q-6 -8 -21 -26l-11 -11v-2l14 2q9 2 30 2h248v119h121zM1661 874v-106h-288v106h75l-47 144h-243l-47 -144h75v-106h-287v106h70l230 662h162
-l230 -662h70z" />
-    <glyph glyph-name="_329" unicode="&#xf15e;" horiz-adv-x="1664" 
-d="M1191 104h177l-72 218l-12 47q-2 16 -2 20h-4l-3 -20q0 -1 -3.5 -18t-7.5 -29zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1661 -150
-v-106h-288v106h75l-47 144h-243l-47 -144h75v-106h-287v106h70l230 662h162l230 -662h70zM1572 1001v-233h-584v90l369 529q12 18 21 27l11 9v3q-2 0 -6.5 -0.5t-7.5 -0.5q-12 -3 -30 -3h-232v-115h-120v229h567v-89l-369 -530q-6 -8 -21 -26l-11 -10v-3l14 3q9 1 30 1h248
-v119h121z" />
-    <glyph glyph-name="sort_by_attributes" unicode="&#xf160;" horiz-adv-x="1792" 
-d="M736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1792 -32v-192q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h832
-q14 0 23 -9t9 -23zM1600 480v-192q0 -14 -9 -23t-23 -9h-640q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h640q14 0 23 -9t9 -23zM1408 992v-192q0 -14 -9 -23t-23 -9h-448q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h448q14 0 23 -9t9 -23zM1216 1504v-192q0 -14 -9 -23t-23 -9h-256
-q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h256q14 0 23 -9t9 -23z" />
-    <glyph glyph-name="sort_by_attributes_alt" unicode="&#xf161;" horiz-adv-x="1792" 
-d="M1216 -32v-192q0 -14 -9 -23t-23 -9h-256q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h256q14 0 23 -9t9 -23zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192
-q14 0 23 -9t9 -23zM1408 480v-192q0 -14 -9 -23t-23 -9h-448q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h448q14 0 23 -9t9 -23zM1600 992v-192q0 -14 -9 -23t-23 -9h-640q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h640q14 0 23 -9t9 -23zM1792 1504v-192q0 -14 -9 -23t-23 -9h-832
-q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h832q14 0 23 -9t9 -23z" />
-    <glyph glyph-name="sort_by_order" unicode="&#xf162;" 
-d="M1346 223q0 63 -44 116t-103 53q-52 0 -83 -37t-31 -94t36.5 -95t104.5 -38q50 0 85 27t35 68zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23
-zM1486 165q0 -62 -13 -121.5t-41 -114t-68 -95.5t-98.5 -65.5t-127.5 -24.5q-62 0 -108 16q-24 8 -42 15l39 113q15 -7 31 -11q37 -13 75 -13q84 0 134.5 58.5t66.5 145.5h-2q-21 -23 -61.5 -37t-84.5 -14q-106 0 -173 71.5t-67 172.5q0 105 72 178t181 73q123 0 205 -94.5
-t82 -252.5zM1456 882v-114h-469v114h167v432q0 7 0.5 19t0.5 17v16h-2l-7 -12q-8 -13 -26 -31l-62 -58l-82 86l192 185h123v-654h165z" />
-    <glyph glyph-name="sort_by_order_alt" unicode="&#xf163;" 
-d="M1346 1247q0 63 -44 116t-103 53q-52 0 -83 -37t-31 -94t36.5 -95t104.5 -38q50 0 85 27t35 68zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9
-t9 -23zM1456 -142v-114h-469v114h167v432q0 7 0.5 19t0.5 17v16h-2l-7 -12q-8 -13 -26 -31l-62 -58l-82 86l192 185h123v-654h165zM1486 1189q0 -62 -13 -121.5t-41 -114t-68 -95.5t-98.5 -65.5t-127.5 -24.5q-62 0 -108 16q-24 8 -42 15l39 113q15 -7 31 -11q37 -13 75 -13
-q84 0 134.5 58.5t66.5 145.5h-2q-21 -23 -61.5 -37t-84.5 -14q-106 0 -173 71.5t-67 172.5q0 105 72 178t181 73q123 0 205 -94.5t82 -252.5z" />
-    <glyph glyph-name="_334" unicode="&#xf164;" horiz-adv-x="1664" 
-d="M256 192q0 26 -19 45t-45 19q-27 0 -45.5 -19t-18.5 -45q0 -27 18.5 -45.5t45.5 -18.5q26 0 45 18.5t19 45.5zM416 704v-640q0 -26 -19 -45t-45 -19h-288q-26 0 -45 19t-19 45v640q0 26 19 45t45 19h288q26 0 45 -19t19 -45zM1600 704q0 -86 -55 -149q15 -44 15 -76
-q3 -76 -43 -137q17 -56 0 -117q-15 -57 -54 -94q9 -112 -49 -181q-64 -76 -197 -78h-36h-76h-17q-66 0 -144 15.5t-121.5 29t-120.5 39.5q-123 43 -158 44q-26 1 -45 19.5t-19 44.5v641q0 25 18 43.5t43 20.5q24 2 76 59t101 121q68 87 101 120q18 18 31 48t17.5 48.5
-t13.5 60.5q7 39 12.5 61t19.5 52t34 50q19 19 45 19q46 0 82.5 -10.5t60 -26t40 -40.5t24 -45t12 -50t5 -45t0.5 -39q0 -38 -9.5 -76t-19 -60t-27.5 -56q-3 -6 -10 -18t-11 -22t-8 -24h277q78 0 135 -57t57 -135z" />
-    <glyph glyph-name="_335" unicode="&#xf165;" horiz-adv-x="1664" 
-d="M256 960q0 -26 -19 -45t-45 -19q-27 0 -45.5 19t-18.5 45q0 27 18.5 45.5t45.5 18.5q26 0 45 -18.5t19 -45.5zM416 448v640q0 26 -19 45t-45 19h-288q-26 0 -45 -19t-19 -45v-640q0 -26 19 -45t45 -19h288q26 0 45 19t19 45zM1545 597q55 -61 55 -149q-1 -78 -57.5 -135
-t-134.5 -57h-277q4 -14 8 -24t11 -22t10 -18q18 -37 27 -57t19 -58.5t10 -76.5q0 -24 -0.5 -39t-5 -45t-12 -50t-24 -45t-40 -40.5t-60 -26t-82.5 -10.5q-26 0 -45 19q-20 20 -34 50t-19.5 52t-12.5 61q-9 42 -13.5 60.5t-17.5 48.5t-31 48q-33 33 -101 120q-49 64 -101 121
-t-76 59q-25 2 -43 20.5t-18 43.5v641q0 26 19 44.5t45 19.5q35 1 158 44q77 26 120.5 39.5t121.5 29t144 15.5h17h76h36q133 -2 197 -78q58 -69 49 -181q39 -37 54 -94q17 -61 0 -117q46 -61 43 -137q0 -32 -15 -76z" />
-    <glyph glyph-name="youtube_sign" unicode="&#xf166;" 
-d="M919 233v157q0 50 -29 50q-17 0 -33 -16v-224q16 -16 33 -16q29 0 29 49zM1103 355h66v34q0 51 -33 51t-33 -51v-34zM532 621v-70h-80v-423h-74v423h-78v70h232zM733 495v-367h-67v40q-39 -45 -76 -45q-33 0 -42 28q-6 17 -6 54v290h66v-270q0 -24 1 -26q1 -15 15 -15
-q20 0 42 31v280h67zM985 384v-146q0 -52 -7 -73q-12 -42 -53 -42q-35 0 -68 41v-36h-67v493h67v-161q32 40 68 40q41 0 53 -42q7 -21 7 -74zM1236 255v-9q0 -29 -2 -43q-3 -22 -15 -40q-27 -40 -80 -40q-52 0 -81 38q-21 27 -21 86v129q0 59 20 86q29 38 80 38t78 -38
-q21 -29 21 -86v-76h-133v-65q0 -51 34 -51q24 0 30 26q0 1 0.5 7t0.5 16.5v21.5h68zM785 1079v-156q0 -51 -32 -51t-32 51v156q0 52 32 52t32 -52zM1318 366q0 177 -19 260q-10 44 -43 73.5t-76 34.5q-136 15 -412 15q-275 0 -411 -15q-44 -5 -76.5 -34.5t-42.5 -73.5
-q-20 -87 -20 -260q0 -176 20 -260q10 -43 42.5 -73t75.5 -35q137 -15 412 -15t412 15q43 5 75.5 35t42.5 73q20 84 20 260zM563 1017l90 296h-75l-51 -195l-53 195h-78q7 -23 23 -69l24 -69q35 -103 46 -158v-201h74v201zM852 936v130q0 58 -21 87q-29 38 -78 38
-q-51 0 -78 -38q-21 -29 -21 -87v-130q0 -58 21 -87q27 -38 78 -38q49 0 78 38q21 27 21 87zM1033 816h67v370h-67v-283q-22 -31 -42 -31q-15 0 -16 16q-1 2 -1 26v272h-67v-293q0 -37 6 -55q11 -27 43 -27q36 0 77 45v-40zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5
-h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-    <glyph glyph-name="youtube" unicode="&#xf167;" 
-d="M971 292v-211q0 -67 -39 -67q-23 0 -45 22v301q22 22 45 22q39 0 39 -67zM1309 291v-46h-90v46q0 68 45 68t45 -68zM343 509h107v94h-312v-94h105v-569h100v569zM631 -60h89v494h-89v-378q-30 -42 -57 -42q-18 0 -21 21q-1 3 -1 35v364h-89v-391q0 -49 8 -73
-q12 -37 58 -37q48 0 102 61v-54zM1060 88v197q0 73 -9 99q-17 56 -71 56q-50 0 -93 -54v217h-89v-663h89v48q45 -55 93 -55q54 0 71 55q9 27 9 100zM1398 98v13h-91q0 -51 -2 -61q-7 -36 -40 -36q-46 0 -46 69v87h179v103q0 79 -27 116q-39 51 -106 51q-68 0 -107 -51
-q-28 -37 -28 -116v-173q0 -79 29 -116q39 -51 108 -51q72 0 108 53q18 27 21 54q2 9 2 58zM790 1011v210q0 69 -43 69t-43 -69v-210q0 -70 43 -70t43 70zM1509 260q0 -234 -26 -350q-14 -59 -58 -99t-102 -46q-184 -21 -555 -21t-555 21q-58 6 -102.5 46t-57.5 99
-q-26 112 -26 350q0 234 26 350q14 59 58 99t103 47q183 20 554 20t555 -20q58 -7 102.5 -47t57.5 -99q26 -112 26 -350zM511 1536h102l-121 -399v-271h-100v271q-14 74 -61 212q-37 103 -65 187h106l71 -263zM881 1203v-175q0 -81 -28 -118q-38 -51 -106 -51q-67 0 -105 51
-q-28 38 -28 118v175q0 80 28 117q38 51 105 51q68 0 106 -51q28 -37 28 -117zM1216 1365v-499h-91v55q-53 -62 -103 -62q-46 0 -59 37q-8 24 -8 75v394h91v-367q0 -33 1 -35q3 -22 21 -22q27 0 57 43v381h91z" />
-    <glyph glyph-name="xing" unicode="&#xf168;" horiz-adv-x="1408" 
-d="M597 869q-10 -18 -257 -456q-27 -46 -65 -46h-239q-21 0 -31 17t0 36l253 448q1 0 0 1l-161 279q-12 22 -1 37q9 15 32 15h239q40 0 66 -45zM1403 1511q11 -16 0 -37l-528 -934v-1l336 -615q11 -20 1 -37q-10 -15 -32 -15h-239q-42 0 -66 45l-339 622q18 32 531 942
-q25 45 64 45h241q22 0 31 -15z" />
-    <glyph glyph-name="xing_sign" unicode="&#xf169;" 
-d="M685 771q0 1 -126 222q-21 34 -52 34h-184q-18 0 -26 -11q-7 -12 1 -29l125 -216v-1l-196 -346q-9 -14 0 -28q8 -13 24 -13h185q31 0 50 36zM1309 1268q-7 12 -24 12h-187q-30 0 -49 -35l-411 -729q1 -2 262 -481q20 -35 52 -35h184q18 0 25 12q8 13 -1 28l-260 476v1
-l409 723q8 16 0 28zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-    <glyph glyph-name="youtube_play" unicode="&#xf16a;" horiz-adv-x="1792" 
-d="M711 408l484 250l-484 253v-503zM896 1270q168 0 324.5 -4.5t229.5 -9.5l73 -4q1 0 17 -1.5t23 -3t23.5 -4.5t28.5 -8t28 -13t31 -19.5t29 -26.5q6 -6 15.5 -18.5t29 -58.5t26.5 -101q8 -64 12.5 -136.5t5.5 -113.5v-40v-136q1 -145 -18 -290q-7 -55 -25 -99.5t-32 -61.5
-l-14 -17q-14 -15 -29 -26.5t-31 -19t-28 -12.5t-28.5 -8t-24 -4.5t-23 -3t-16.5 -1.5q-251 -19 -627 -19q-207 2 -359.5 6.5t-200.5 7.5l-49 4l-36 4q-36 5 -54.5 10t-51 21t-56.5 41q-6 6 -15.5 18.5t-29 58.5t-26.5 101q-8 64 -12.5 136.5t-5.5 113.5v40v136
-q-1 145 18 290q7 55 25 99.5t32 61.5l14 17q14 15 29 26.5t31 19.5t28 13t28.5 8t23.5 4.5t23 3t17 1.5q251 18 627 18z" />
-    <glyph glyph-name="dropbox" unicode="&#xf16b;" horiz-adv-x="1792" 
-d="M402 829l494 -305l-342 -285l-490 319zM1388 274v-108l-490 -293v-1l-1 1l-1 -1v1l-489 293v108l147 -96l342 284v2l1 -1l1 1v-2l343 -284zM554 1418l342 -285l-494 -304l-338 270zM1390 829l338 -271l-489 -319l-343 285zM1239 1418l489 -319l-338 -270l-494 304z" />
-    <glyph glyph-name="stackexchange" unicode="&#xf16c;" 
-d="M1289 -96h-1118v480h-160v-640h1438v640h-160v-480zM347 428l33 157l783 -165l-33 -156zM450 802l67 146l725 -339l-67 -145zM651 1158l102 123l614 -513l-102 -123zM1048 1536l477 -641l-128 -96l-477 641zM330 65v159h800v-159h-800z" />
-    <glyph glyph-name="instagram" unicode="&#xf16d;" 
-d="M1024 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1162 640q0 -164 -115 -279t-279 -115t-279 115t-115 279t115 279t279 115t279 -115t115 -279zM1270 1050q0 -38 -27 -65t-65 -27t-65 27t-27 65t27 65t65 27t65 -27t27 -65zM768 1270
-q-7 0 -76.5 0.5t-105.5 0t-96.5 -3t-103 -10t-71.5 -18.5q-50 -20 -88 -58t-58 -88q-11 -29 -18.5 -71.5t-10 -103t-3 -96.5t0 -105.5t0.5 -76.5t-0.5 -76.5t0 -105.5t3 -96.5t10 -103t18.5 -71.5q20 -50 58 -88t88 -58q29 -11 71.5 -18.5t103 -10t96.5 -3t105.5 0t76.5 0.5
-t76.5 -0.5t105.5 0t96.5 3t103 10t71.5 18.5q50 20 88 58t58 88q11 29 18.5 71.5t10 103t3 96.5t0 105.5t-0.5 76.5t0.5 76.5t0 105.5t-3 96.5t-10 103t-18.5 71.5q-20 50 -58 88t-88 58q-29 11 -71.5 18.5t-103 10t-96.5 3t-105.5 0t-76.5 -0.5zM1536 640q0 -229 -5 -317
-q-10 -208 -124 -322t-322 -124q-88 -5 -317 -5t-317 5q-208 10 -322 124t-124 322q-5 88 -5 317t5 317q10 208 124 322t322 124q88 5 317 5t317 -5q208 -10 322 -124t124 -322q5 -88 5 -317z" />
-    <glyph glyph-name="flickr" unicode="&#xf16e;" 
-d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960zM698 640q0 88 -62 150t-150 62t-150 -62t-62 -150t62 -150t150 -62t150 62t62 150zM1262 640q0 88 -62 150
-t-150 62t-150 -62t-62 -150t62 -150t150 -62t150 62t62 150z" />
-    <glyph glyph-name="adn" unicode="&#xf170;" 
-d="M768 914l201 -306h-402zM1133 384h94l-459 691l-459 -691h94l104 160h522zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-    <glyph glyph-name="f171" unicode="&#xf171;" horiz-adv-x="1408" 
-d="M815 677q8 -63 -50.5 -101t-111.5 -6q-39 17 -53.5 58t-0.5 82t52 58q36 18 72.5 12t64 -35.5t27.5 -67.5zM926 698q-14 107 -113 164t-197 13q-63 -28 -100.5 -88.5t-34.5 -129.5q4 -91 77.5 -155t165.5 -56q91 8 152 84t50 168zM1165 1240q-20 27 -56 44.5t-58 22
-t-71 12.5q-291 47 -566 -2q-43 -7 -66 -12t-55 -22t-50 -43q30 -28 76 -45.5t73.5 -22t87.5 -11.5q228 -29 448 -1q63 8 89.5 12t72.5 21.5t75 46.5zM1222 205q-8 -26 -15.5 -76.5t-14 -84t-28.5 -70t-58 -56.5q-86 -48 -189.5 -71.5t-202 -22t-201.5 18.5q-46 8 -81.5 18
-t-76.5 27t-73 43.5t-52 61.5q-25 96 -57 292l6 16l18 9q223 -148 506.5 -148t507.5 148q21 -6 24 -23t-5 -45t-8 -37zM1403 1166q-26 -167 -111 -655q-5 -30 -27 -56t-43.5 -40t-54.5 -31q-252 -126 -610 -88q-248 27 -394 139q-15 12 -25.5 26.5t-17 35t-9 34t-6 39.5
-t-5.5 35q-9 50 -26.5 150t-28 161.5t-23.5 147.5t-22 158q3 26 17.5 48.5t31.5 37.5t45 30t46 22.5t48 18.5q125 46 313 64q379 37 676 -50q155 -46 215 -122q16 -20 16.5 -51t-5.5 -54z" />
-    <glyph glyph-name="bitbucket_sign" unicode="&#xf172;" 
-d="M848 666q0 43 -41 66t-77 1q-43 -20 -42.5 -72.5t43.5 -70.5q39 -23 81 4t36 72zM928 682q8 -66 -36 -121t-110 -61t-119 40t-56 113q-2 49 25.5 93t72.5 64q70 31 141.5 -10t81.5 -118zM1100 1073q-20 -21 -53.5 -34t-53 -16t-63.5 -8q-155 -20 -324 0q-44 6 -63 9.5
-t-52.5 16t-54.5 32.5q13 19 36 31t40 15.5t47 8.5q198 35 408 1q33 -5 51 -8.5t43 -16t39 -31.5zM1142 327q0 7 5.5 26.5t3 32t-17.5 16.5q-161 -106 -365 -106t-366 106l-12 -6l-5 -12q26 -154 41 -210q47 -81 204 -108q249 -46 428 53q34 19 49 51.5t22.5 85.5t12.5 71z
-M1272 1020q9 53 -8 75q-43 55 -155 88q-216 63 -487 36q-132 -12 -226 -46q-38 -15 -59.5 -25t-47 -34t-29.5 -54q8 -68 19 -138t29 -171t24 -137q1 -5 5 -31t7 -36t12 -27t22 -28q105 -80 284 -100q259 -28 440 63q24 13 39.5 23t31 29t19.5 40q48 267 80 473zM1536 1120
-v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-    <glyph glyph-name="tumblr" unicode="&#xf173;" horiz-adv-x="1024" 
-d="M944 207l80 -237q-23 -35 -111 -66t-177 -32q-104 -2 -190.5 26t-142.5 74t-95 106t-55.5 120t-16.5 118v544h-168v215q72 26 129 69.5t91 90t58 102t34 99t15 88.5q1 5 4.5 8.5t7.5 3.5h244v-424h333v-252h-334v-518q0 -30 6.5 -56t22.5 -52.5t49.5 -41.5t81.5 -14
-q78 2 134 29z" />
-    <glyph glyph-name="tumblr_sign" unicode="&#xf174;" 
-d="M1136 75l-62 183q-44 -22 -103 -22q-36 -1 -62 10.5t-38.5 31.5t-17.5 40.5t-5 43.5v398h257v194h-256v326h-188q-8 0 -9 -10q-5 -44 -17.5 -87t-39 -95t-77 -95t-118.5 -68v-165h130v-418q0 -57 21.5 -115t65 -111t121 -85.5t176.5 -30.5q69 1 136.5 25t85.5 50z
-M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-    <glyph glyph-name="long_arrow_down" unicode="&#xf175;" horiz-adv-x="768" 
-d="M765 237q8 -19 -5 -35l-350 -384q-10 -10 -23 -10q-14 0 -24 10l-355 384q-13 16 -5 35q9 19 29 19h224v1248q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1248h224q21 0 29 -19z" />
-    <glyph glyph-name="long_arrow_up" unicode="&#xf176;" horiz-adv-x="768" 
-d="M765 1043q-9 -19 -29 -19h-224v-1248q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v1248h-224q-21 0 -29 19t5 35l350 384q10 10 23 10q14 0 24 -10l355 -384q13 -16 5 -35z" />
-    <glyph glyph-name="long_arrow_left" unicode="&#xf177;" horiz-adv-x="1792" 
-d="M1792 736v-192q0 -14 -9 -23t-23 -9h-1248v-224q0 -21 -19 -29t-35 5l-384 350q-10 10 -10 23q0 14 10 24l384 354q16 14 35 6q19 -9 19 -29v-224h1248q14 0 23 -9t9 -23z" />
-    <glyph glyph-name="long_arrow_right" unicode="&#xf178;" horiz-adv-x="1792" 
-d="M1728 643q0 -14 -10 -24l-384 -354q-16 -14 -35 -6q-19 9 -19 29v224h-1248q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h1248v224q0 21 19 29t35 -5l384 -350q10 -10 10 -23z" />
-    <glyph glyph-name="apple" unicode="&#xf179;" horiz-adv-x="1408" 
-d="M1393 321q-39 -125 -123 -250q-129 -196 -257 -196q-49 0 -140 32q-86 32 -151 32q-61 0 -142 -33q-81 -34 -132 -34q-152 0 -301 259q-147 261 -147 503q0 228 113 374q113 144 284 144q72 0 177 -30q104 -30 138 -30q45 0 143 34q102 34 173 34q119 0 213 -65
-q52 -36 104 -100q-79 -67 -114 -118q-65 -94 -65 -207q0 -124 69 -223t158 -126zM1017 1494q0 -61 -29 -136q-30 -75 -93 -138q-54 -54 -108 -72q-37 -11 -104 -17q3 149 78 257q74 107 250 148q1 -3 2.5 -11t2.5 -11q0 -4 0.5 -10t0.5 -10z" />
-    <glyph glyph-name="windows" unicode="&#xf17a;" horiz-adv-x="1664" 
-d="M682 530v-651l-682 94v557h682zM682 1273v-659h-682v565zM1664 530v-786l-907 125v661h907zM1664 1408v-794h-907v669z" />
-    <glyph glyph-name="android" unicode="&#xf17b;" horiz-adv-x="1408" 
-d="M493 1053q16 0 27.5 11.5t11.5 27.5t-11.5 27.5t-27.5 11.5t-27 -11.5t-11 -27.5t11 -27.5t27 -11.5zM915 1053q16 0 27 11.5t11 27.5t-11 27.5t-27 11.5t-27.5 -11.5t-11.5 -27.5t11.5 -27.5t27.5 -11.5zM103 869q42 0 72 -30t30 -72v-430q0 -43 -29.5 -73t-72.5 -30
-t-73 30t-30 73v430q0 42 30 72t73 30zM1163 850v-666q0 -46 -32 -78t-77 -32h-75v-227q0 -43 -30 -73t-73 -30t-73 30t-30 73v227h-138v-227q0 -43 -30 -73t-73 -30q-42 0 -72 30t-30 73l-1 227h-74q-46 0 -78 32t-32 78v666h918zM931 1255q107 -55 171 -153.5t64 -215.5
-h-925q0 117 64 215.5t172 153.5l-71 131q-7 13 5 20q13 6 20 -6l72 -132q95 42 201 42t201 -42l72 132q7 12 20 6q12 -7 5 -20zM1408 767v-430q0 -43 -30 -73t-73 -30q-42 0 -72 30t-30 73v430q0 43 30 72.5t72 29.5q43 0 73 -29.5t30 -72.5z" />
-    <glyph glyph-name="linux" unicode="&#xf17c;" 
-d="M663 1125q-11 -1 -15.5 -10.5t-8.5 -9.5q-5 -1 -5 5q0 12 19 15h10zM750 1111q-4 -1 -11.5 6.5t-17.5 4.5q24 11 32 -2q3 -6 -3 -9zM399 684q-4 1 -6 -3t-4.5 -12.5t-5.5 -13.5t-10 -13q-10 -11 -1 -12q4 -1 12.5 7t12.5 18q1 3 2 7t2 6t1.5 4.5t0.5 4v3t-1 2.5t-3 2z
-M1254 325q0 18 -55 42q4 15 7.5 27.5t5 26t3 21.5t0.5 22.5t-1 19.5t-3.5 22t-4 20.5t-5 25t-5.5 26.5q-10 48 -47 103t-72 75q24 -20 57 -83q87 -162 54 -278q-11 -40 -50 -42q-31 -4 -38.5 18.5t-8 83.5t-11.5 107q-9 39 -19.5 69t-19.5 45.5t-15.5 24.5t-13 15t-7.5 7
-q-14 62 -31 103t-29.5 56t-23.5 33t-15 40q-4 21 6 53.5t4.5 49.5t-44.5 25q-15 3 -44.5 18t-35.5 16q-8 1 -11 26t8 51t36 27q37 3 51 -30t4 -58q-11 -19 -2 -26.5t30 -0.5q13 4 13 36v37q-5 30 -13.5 50t-21 30.5t-23.5 15t-27 7.5q-107 -8 -89 -134q0 -15 -1 -15
-q-9 9 -29.5 10.5t-33 -0.5t-15.5 5q1 57 -16 90t-45 34q-27 1 -41.5 -27.5t-16.5 -59.5q-1 -15 3.5 -37t13 -37.5t15.5 -13.5q10 3 16 14q4 9 -7 8q-7 0 -15.5 14.5t-9.5 33.5q-1 22 9 37t34 14q17 0 27 -21t9.5 -39t-1.5 -22q-22 -15 -31 -29q-8 -12 -27.5 -23.5
-t-20.5 -12.5q-13 -14 -15.5 -27t7.5 -18q14 -8 25 -19.5t16 -19t18.5 -13t35.5 -6.5q47 -2 102 15q2 1 23 7t34.5 10.5t29.5 13t21 17.5q9 14 20 8q5 -3 6.5 -8.5t-3 -12t-16.5 -9.5q-20 -6 -56.5 -21.5t-45.5 -19.5q-44 -19 -70 -23q-25 -5 -79 2q-10 2 -9 -2t17 -19
-q25 -23 67 -22q17 1 36 7t36 14t33.5 17.5t30 17t24.5 12t17.5 2.5t8.5 -11q0 -2 -1 -4.5t-4 -5t-6 -4.5t-8.5 -5t-9 -4.5t-10 -5t-9.5 -4.5q-28 -14 -67.5 -44t-66.5 -43t-49 -1q-21 11 -63 73q-22 31 -25 22q-1 -3 -1 -10q0 -25 -15 -56.5t-29.5 -55.5t-21 -58t11.5 -63
-q-23 -6 -62.5 -90t-47.5 -141q-2 -18 -1.5 -69t-5.5 -59q-8 -24 -29 -3q-32 31 -36 94q-2 28 4 56q4 19 -1 18q-2 -1 -4 -5q-36 -65 10 -166q5 -12 25 -28t24 -20q20 -23 104 -90.5t93 -76.5q16 -15 17.5 -38t-14 -43t-45.5 -23q8 -15 29 -44.5t28 -54t7 -70.5q46 24 7 92
-q-4 8 -10.5 16t-9.5 12t-2 6q3 5 13 9.5t20 -2.5q46 -52 166 -36q133 15 177 87q23 38 34 30q12 -6 10 -52q-1 -25 -23 -92q-9 -23 -6 -37.5t24 -15.5q3 19 14.5 77t13.5 90q2 21 -6.5 73.5t-7.5 97t23 70.5q15 18 51 18q1 37 34.5 53t72.5 10.5t60 -22.5zM626 1152
-q3 17 -2.5 30t-11.5 15q-9 2 -9 -7q2 -5 5 -6q10 0 7 -15q-3 -20 8 -20q3 0 3 3zM1045 955q-2 8 -6.5 11.5t-13 5t-14.5 5.5q-5 3 -9.5 8t-7 8t-5.5 6.5t-4 4t-4 -1.5q-14 -16 7 -43.5t39 -31.5q9 -1 14.5 8t3.5 20zM867 1168q0 11 -5 19.5t-11 12.5t-9 3q-6 0 -8 -2t0 -4
-t5 -3q14 -4 18 -31q0 -3 8 2q2 2 2 3zM921 1401q0 2 -2.5 5t-9 7t-9.5 6q-15 15 -24 15q-9 -1 -11.5 -7.5t-1 -13t-0.5 -12.5q-1 -4 -6 -10.5t-6 -9t3 -8.5q4 -3 8 0t11 9t15 9q1 1 9 1t15 2t9 7zM1486 60q20 -12 31 -24.5t12 -24t-2.5 -22.5t-15.5 -22t-23.5 -19.5
-t-30 -18.5t-31.5 -16.5t-32 -15.5t-27 -13q-38 -19 -85.5 -56t-75.5 -64q-17 -16 -68 -19.5t-89 14.5q-18 9 -29.5 23.5t-16.5 25.5t-22 19.5t-47 9.5q-44 1 -130 1q-19 0 -57 -1.5t-58 -2.5q-44 -1 -79.5 -15t-53.5 -30t-43.5 -28.5t-53.5 -11.5q-29 1 -111 31t-146 43
-q-19 4 -51 9.5t-50 9t-39.5 9.5t-33.5 14.5t-17 19.5q-10 23 7 66.5t18 54.5q1 16 -4 40t-10 42.5t-4.5 36.5t10.5 27q14 12 57 14t60 12q30 18 42 35t12 51q21 -73 -32 -106q-32 -20 -83 -15q-34 3 -43 -10q-13 -15 5 -57q2 -6 8 -18t8.5 -18t4.5 -17t1 -22q0 -15 -17 -49
-t-14 -48q3 -17 37 -26q20 -6 84.5 -18.5t99.5 -20.5q24 -6 74 -22t82.5 -23t55.5 -4q43 6 64.5 28t23 48t-7.5 58.5t-19 52t-20 36.5q-121 190 -169 242q-68 74 -113 40q-11 -9 -15 15q-3 16 -2 38q1 29 10 52t24 47t22 42q8 21 26.5 72t29.5 78t30 61t39 54
-q110 143 124 195q-12 112 -16 310q-2 90 24 151.5t106 104.5q39 21 104 21q53 1 106 -13.5t89 -41.5q57 -42 91.5 -121.5t29.5 -147.5q-5 -95 30 -214q34 -113 133 -218q55 -59 99.5 -163t59.5 -191q8 -49 5 -84.5t-12 -55.5t-20 -22q-10 -2 -23.5 -19t-27 -35.5
-t-40.5 -33.5t-61 -14q-18 1 -31.5 5t-22.5 13.5t-13.5 15.5t-11.5 20.5t-9 19.5q-22 37 -41 30t-28 -49t7 -97q20 -70 1 -195q-10 -65 18 -100.5t73 -33t85 35.5q59 49 89.5 66.5t103.5 42.5q53 18 77 36.5t18.5 34.5t-25 28.5t-51.5 23.5q-33 11 -49.5 48t-15 72.5
-t15.5 47.5q1 -31 8 -56.5t14.5 -40.5t20.5 -28.5t21 -19t21.5 -13t16.5 -9.5z" />
-    <glyph glyph-name="dribble" unicode="&#xf17d;" 
-d="M1024 36q-42 241 -140 498h-2l-2 -1q-16 -6 -43 -16.5t-101 -49t-137 -82t-131 -114.5t-103 -148l-15 11q184 -150 418 -150q132 0 256 52zM839 643q-21 49 -53 111q-311 -93 -673 -93q-1 -7 -1 -21q0 -124 44 -236.5t124 -201.5q50 89 123.5 166.5t142.5 124.5t130.5 81
-t99.5 48l37 13q4 1 13 3.5t13 4.5zM732 855q-120 213 -244 378q-138 -65 -234 -186t-128 -272q302 0 606 80zM1416 536q-210 60 -409 29q87 -239 128 -469q111 75 185 189.5t96 250.5zM611 1277q-1 0 -2 -1q1 1 2 1zM1201 1132q-185 164 -433 164q-76 0 -155 -19
-q131 -170 246 -382q69 26 130 60.5t96.5 61.5t65.5 57t37.5 40.5zM1424 647q-3 232 -149 410l-1 -1q-9 -12 -19 -24.5t-43.5 -44.5t-71 -60.5t-100 -65t-131.5 -64.5q25 -53 44 -95q2 -5 6.5 -17t7.5 -17q36 5 74.5 7t73.5 2t69 -1.5t64 -4t56.5 -5.5t48 -6.5t36.5 -6
-t25 -4.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-    <glyph glyph-name="skype" unicode="&#xf17e;" 
-d="M1173 473q0 50 -19.5 91.5t-48.5 68.5t-73 49t-82.5 34t-87.5 23l-104 24q-30 7 -44 10.5t-35 11.5t-30 16t-16.5 21t-7.5 30q0 77 144 77q43 0 77 -12t54 -28.5t38 -33.5t40 -29t48 -12q47 0 75.5 32t28.5 77q0 55 -56 99.5t-142 67.5t-182 23q-68 0 -132 -15.5
-t-119.5 -47t-89 -87t-33.5 -128.5q0 -61 19 -106.5t56 -75.5t80 -48.5t103 -32.5l146 -36q90 -22 112 -36q32 -20 32 -60q0 -39 -40 -64.5t-105 -25.5q-51 0 -91.5 16t-65 38.5t-45.5 45t-46 38.5t-54 16q-50 0 -75.5 -30t-25.5 -75q0 -92 122 -157.5t291 -65.5
-q73 0 140 18.5t122.5 53.5t88.5 93.5t33 131.5zM1536 256q0 -159 -112.5 -271.5t-271.5 -112.5q-130 0 -234 80q-77 -16 -150 -16q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5q0 73 16 150q-80 104 -80 234q0 159 112.5 271.5t271.5 112.5q130 0 234 -80
-q77 16 150 16q143 0 273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -73 -16 -150q80 -104 80 -234z" />
-    <glyph glyph-name="foursquare" unicode="&#xf180;" horiz-adv-x="1280" 
-d="M1000 1102l37 194q5 23 -9 40t-35 17h-712q-23 0 -38.5 -17t-15.5 -37v-1101q0 -7 6 -1l291 352q23 26 38 33.5t48 7.5h239q22 0 37 14.5t18 29.5q24 130 37 191q4 21 -11.5 40t-36.5 19h-294q-29 0 -48 19t-19 48v42q0 29 19 47.5t48 18.5h346q18 0 35 13.5t20 29.5z
-M1227 1324q-15 -73 -53.5 -266.5t-69.5 -350t-35 -173.5q-6 -22 -9 -32.5t-14 -32.5t-24.5 -33t-38.5 -21t-58 -10h-271q-13 0 -22 -10q-8 -9 -426 -494q-22 -25 -58.5 -28.5t-48.5 5.5q-55 22 -55 98v1410q0 55 38 102.5t120 47.5h888q95 0 127 -53t10 -159zM1227 1324
-l-158 -790q4 17 35 173.5t69.5 350t53.5 266.5z" />
-    <glyph glyph-name="trello" unicode="&#xf181;" 
-d="M704 192v1024q0 14 -9 23t-23 9h-480q-14 0 -23 -9t-9 -23v-1024q0 -14 9 -23t23 -9h480q14 0 23 9t9 23zM1376 576v640q0 14 -9 23t-23 9h-480q-14 0 -23 -9t-9 -23v-640q0 -14 9 -23t23 -9h480q14 0 23 9t9 23zM1536 1344v-1408q0 -26 -19 -45t-45 -19h-1408
-q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" />
-    <glyph glyph-name="female" unicode="&#xf182;" horiz-adv-x="1280" 
-d="M1280 480q0 -40 -28 -68t-68 -28q-51 0 -80 43l-227 341h-45v-132l247 -411q9 -15 9 -33q0 -26 -19 -45t-45 -19h-192v-272q0 -46 -33 -79t-79 -33h-160q-46 0 -79 33t-33 79v272h-192q-26 0 -45 19t-19 45q0 18 9 33l247 411v132h-45l-227 -341q-29 -43 -80 -43
-q-40 0 -68 28t-28 68q0 29 16 53l256 384q73 107 176 107h384q103 0 176 -107l256 -384q16 -24 16 -53zM864 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" />
-    <glyph glyph-name="male" unicode="&#xf183;" horiz-adv-x="1024" 
-d="M1024 832v-416q0 -40 -28 -68t-68 -28t-68 28t-28 68v352h-64v-912q0 -46 -33 -79t-79 -33t-79 33t-33 79v464h-64v-464q0 -46 -33 -79t-79 -33t-79 33t-33 79v912h-64v-352q0 -40 -28 -68t-68 -28t-68 28t-28 68v416q0 80 56 136t136 56h640q80 0 136 -56t56 -136z
-M736 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" />
-    <glyph glyph-name="gittip" unicode="&#xf184;" 
-d="M773 234l350 473q16 22 24.5 59t-6 85t-61.5 79q-40 26 -83 25.5t-73.5 -17.5t-54.5 -45q-36 -40 -96 -40q-59 0 -95 40q-24 28 -54.5 45t-73.5 17.5t-84 -25.5q-46 -31 -60.5 -79t-6 -85t24.5 -59zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103
-t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-    <glyph glyph-name="sun" unicode="&#xf185;" horiz-adv-x="1792" 
-d="M1472 640q0 117 -45.5 223.5t-123 184t-184 123t-223.5 45.5t-223.5 -45.5t-184 -123t-123 -184t-45.5 -223.5t45.5 -223.5t123 -184t184 -123t223.5 -45.5t223.5 45.5t184 123t123 184t45.5 223.5zM1748 363q-4 -15 -20 -20l-292 -96v-306q0 -16 -13 -26q-15 -10 -29 -4
-l-292 94l-180 -248q-10 -13 -26 -13t-26 13l-180 248l-292 -94q-14 -6 -29 4q-13 10 -13 26v306l-292 96q-16 5 -20 20q-5 17 4 29l180 248l-180 248q-9 13 -4 29q4 15 20 20l292 96v306q0 16 13 26q15 10 29 4l292 -94l180 248q9 12 26 12t26 -12l180 -248l292 94
-q14 6 29 -4q13 -10 13 -26v-306l292 -96q16 -5 20 -20q5 -16 -4 -29l-180 -248l180 -248q9 -12 4 -29z" />
-    <glyph glyph-name="_366" unicode="&#xf186;" 
-d="M1262 233q-54 -9 -110 -9q-182 0 -337 90t-245 245t-90 337q0 192 104 357q-201 -60 -328.5 -229t-127.5 -384q0 -130 51 -248.5t136.5 -204t204 -136.5t248.5 -51q144 0 273.5 61.5t220.5 171.5zM1465 318q-94 -203 -283.5 -324.5t-413.5 -121.5q-156 0 -298 61
-t-245 164t-164 245t-61 298q0 153 57.5 292.5t156 241.5t235.5 164.5t290 68.5q44 2 61 -39q18 -41 -15 -72q-86 -78 -131.5 -181.5t-45.5 -218.5q0 -148 73 -273t198 -198t273 -73q118 0 228 51q41 18 72 -13q14 -14 17.5 -34t-4.5 -38z" />
-    <glyph glyph-name="archive" unicode="&#xf187;" horiz-adv-x="1792" 
-d="M1088 704q0 26 -19 45t-45 19h-256q-26 0 -45 -19t-19 -45t19 -45t45 -19h256q26 0 45 19t19 45zM1664 896v-960q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v960q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1728 1344v-256q0 -26 -19 -45t-45 -19h-1536
-q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1536q26 0 45 -19t19 -45z" />
-    <glyph glyph-name="bug" unicode="&#xf188;" horiz-adv-x="1664" 
-d="M1632 576q0 -26 -19 -45t-45 -19h-224q0 -171 -67 -290l208 -209q19 -19 19 -45t-19 -45q-18 -19 -45 -19t-45 19l-198 197q-5 -5 -15 -13t-42 -28.5t-65 -36.5t-82 -29t-97 -13v896h-128v-896q-51 0 -101.5 13.5t-87 33t-66 39t-43.5 32.5l-15 14l-183 -207
-q-20 -21 -48 -21q-24 0 -43 16q-19 18 -20.5 44.5t15.5 46.5l202 227q-58 114 -58 274h-224q-26 0 -45 19t-19 45t19 45t45 19h224v294l-173 173q-19 19 -19 45t19 45t45 19t45 -19l173 -173h844l173 173q19 19 45 19t45 -19t19 -45t-19 -45l-173 -173v-294h224q26 0 45 -19
-t19 -45zM1152 1152h-640q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5z" />
-    <glyph glyph-name="vk" unicode="&#xf189;" horiz-adv-x="1920" 
-d="M1917 1016q23 -64 -150 -294q-24 -32 -65 -85q-40 -51 -55 -72t-30.5 -49.5t-12 -42t13 -34.5t32.5 -43t57 -53q4 -2 5 -4q141 -131 191 -221q3 -5 6.5 -12.5t7 -26.5t-0.5 -34t-25 -27.5t-59 -12.5l-256 -4q-24 -5 -56 5t-52 22l-20 12q-30 21 -70 64t-68.5 77.5t-61 58
-t-56.5 15.5q-3 -1 -8 -3.5t-17 -14.5t-21.5 -29.5t-17 -52t-6.5 -77.5q0 -15 -3.5 -27.5t-7.5 -18.5l-4 -5q-18 -19 -53 -22h-115q-71 -4 -146 16.5t-131.5 53t-103 66t-70.5 57.5l-25 24q-10 10 -27.5 30t-71.5 91t-106 151t-122.5 211t-130.5 272q-6 16 -6 27t3 16l4 6
-q15 19 57 19l274 2q12 -2 23 -6.5t16 -8.5l5 -3q16 -11 24 -32q20 -50 46 -103.5t41 -81.5l16 -29q29 -60 56 -104t48.5 -68.5t41.5 -38.5t34 -14t27 5q2 1 5 5t12 22t13.5 47t9.5 81t0 125q-2 40 -9 73t-14 46l-6 12q-25 34 -85 43q-13 2 5 24q16 19 38 30q53 26 239 24
-q82 -1 135 -13q20 -5 33.5 -13.5t20.5 -24t10.5 -32t3.5 -45.5t-1 -55t-2.5 -70.5t-1.5 -82.5q0 -11 -1 -42t-0.5 -48t3.5 -40.5t11.5 -39t22.5 -24.5q8 -2 17 -4t26 11t38 34.5t52 67t68 107.5q60 104 107 225q4 10 10 17.5t11 10.5l4 3l5 2.5t13 3t20 0.5l288 2
-q39 5 64 -2.5t31 -16.5z" />
-    <glyph glyph-name="weibo" unicode="&#xf18a;" horiz-adv-x="1792" 
-d="M675 252q21 34 11 69t-45 50q-34 14 -73 1t-60 -46q-22 -34 -13 -68.5t43 -50.5t74.5 -2.5t62.5 47.5zM769 373q8 13 3.5 26.5t-17.5 18.5q-14 5 -28.5 -0.5t-21.5 -18.5q-17 -31 13 -45q14 -5 29 0.5t22 18.5zM943 266q-45 -102 -158 -150t-224 -12
-q-107 34 -147.5 126.5t6.5 187.5q47 93 151.5 139t210.5 19q111 -29 158.5 -119.5t2.5 -190.5zM1255 426q-9 96 -89 170t-208.5 109t-274.5 21q-223 -23 -369.5 -141.5t-132.5 -264.5q9 -96 89 -170t208.5 -109t274.5 -21q223 23 369.5 141.5t132.5 264.5zM1563 422
-q0 -68 -37 -139.5t-109 -137t-168.5 -117.5t-226 -83t-270.5 -31t-275 33.5t-240.5 93t-171.5 151t-65 199.5q0 115 69.5 245t197.5 258q169 169 341.5 236t246.5 -7q65 -64 20 -209q-4 -14 -1 -20t10 -7t14.5 0.5t13.5 3.5l6 2q139 59 246 59t153 -61q45 -63 0 -178
-q-2 -13 -4.5 -20t4.5 -12.5t12 -7.5t17 -6q57 -18 103 -47t80 -81.5t34 -116.5zM1489 1046q42 -47 54.5 -108.5t-6.5 -117.5q-8 -23 -29.5 -34t-44.5 -4q-23 8 -34 29.5t-4 44.5q20 63 -24 111t-107 35q-24 -5 -45 8t-25 37q-5 24 8 44.5t37 25.5q60 13 119 -5.5t101 -65.5z
-M1670 1209q87 -96 112.5 -222.5t-13.5 -241.5q-9 -27 -34 -40t-52 -4t-40 34t-5 52q28 82 10 172t-80 158q-62 69 -148 95.5t-173 8.5q-28 -6 -52 9.5t-30 43.5t9.5 51.5t43.5 29.5q123 26 244 -11.5t208 -134.5z" />
-    <glyph glyph-name="renren" unicode="&#xf18b;" 
-d="M1133 -34q-171 -94 -368 -94q-196 0 -367 94q138 87 235.5 211t131.5 268q35 -144 132.5 -268t235.5 -211zM638 1394v-485q0 -252 -126.5 -459.5t-330.5 -306.5q-181 215 -181 495q0 187 83.5 349.5t229.5 269.5t325 137zM1536 638q0 -280 -181 -495
-q-204 99 -330.5 306.5t-126.5 459.5v485q179 -30 325 -137t229.5 -269.5t83.5 -349.5z" />
-    <glyph glyph-name="_372" unicode="&#xf18c;" horiz-adv-x="1408" 
-d="M1402 433q-32 -80 -76 -138t-91 -88.5t-99 -46.5t-101.5 -14.5t-96.5 8.5t-86.5 22t-69.5 27.5t-46 22.5l-17 10q-113 -228 -289.5 -359.5t-384.5 -132.5q-19 0 -32 13t-13 32t13 31.5t32 12.5q173 1 322.5 107.5t251.5 294.5q-36 -14 -72 -23t-83 -13t-91 2.5t-93 28.5
-t-92 59t-84.5 100t-74.5 146q114 47 214 57t167.5 -7.5t124.5 -56.5t88.5 -77t56.5 -82q53 131 79 291q-7 -1 -18 -2.5t-46.5 -2.5t-69.5 0.5t-81.5 10t-88.5 23t-84 42.5t-75 65t-54.5 94.5t-28.5 127.5q70 28 133.5 36.5t112.5 -1t92 -30t73.5 -50t56 -61t42 -63t27.5 -56
-t16 -39.5l4 -16q12 122 12 195q-8 6 -21.5 16t-49 44.5t-63.5 71.5t-54 93t-33 112.5t12 127t70 138.5q73 -25 127.5 -61.5t84.5 -76.5t48 -85t20.5 -89t-0.5 -85.5t-13 -76.5t-19 -62t-17 -42l-7 -15q1 -4 1 -50t-1 -72q3 7 10 18.5t30.5 43t50.5 58t71 55.5t91.5 44.5
-t112 14.5t132.5 -24q-2 -78 -21.5 -141.5t-50 -104.5t-69.5 -71.5t-81.5 -45.5t-84.5 -24t-80 -9.5t-67.5 1t-46.5 4.5l-17 3q-23 -147 -73 -283q6 7 18 18.5t49.5 41t77.5 52.5t99.5 42t117.5 20t129 -23.5t137 -77.5z" />
-    <glyph glyph-name="stack_exchange" unicode="&#xf18d;" horiz-adv-x="1280" 
-d="M1259 283v-66q0 -85 -57.5 -144.5t-138.5 -59.5h-57l-260 -269v269h-529q-81 0 -138.5 59.5t-57.5 144.5v66h1238zM1259 609v-255h-1238v255h1238zM1259 937v-255h-1238v255h1238zM1259 1077v-67h-1238v67q0 84 57.5 143.5t138.5 59.5h846q81 0 138.5 -59.5t57.5 -143.5z
-" />
-    <glyph glyph-name="_374" unicode="&#xf18e;" 
-d="M1152 640q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v192h-352q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h352v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198
-t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-    <glyph glyph-name="arrow_circle_alt_left" unicode="&#xf190;" 
-d="M1152 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-352v-192q0 -14 -9 -23t-23 -9q-12 0 -24 10l-319 319q-9 9 -9 23t9 23l320 320q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5v-192h352q13 0 22.5 -9.5t9.5 -22.5zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198
-t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-    <glyph glyph-name="_376" unicode="&#xf191;" 
-d="M1024 960v-640q0 -26 -19 -45t-45 -19q-20 0 -37 12l-448 320q-27 19 -27 52t27 52l448 320q17 12 37 12q26 0 45 -19t19 -45zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5z
-M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-    <glyph glyph-name="dot_circle_alt" unicode="&#xf192;" 
-d="M1024 640q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5
-t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-    <glyph glyph-name="_378" unicode="&#xf193;" horiz-adv-x="1664" 
-d="M1023 349l102 -204q-58 -179 -210 -290t-339 -111q-156 0 -288.5 77.5t-210 210t-77.5 288.5q0 181 104.5 330t274.5 211l17 -131q-122 -54 -195 -165.5t-73 -244.5q0 -185 131.5 -316.5t316.5 -131.5q126 0 232.5 65t165 175.5t49.5 236.5zM1571 249l58 -114l-256 -128
-q-13 -7 -29 -7q-40 0 -57 35l-239 477h-472q-24 0 -42.5 16.5t-21.5 40.5l-96 779q-2 17 6 42q14 51 57 82.5t97 31.5q66 0 113 -47t47 -113q0 -69 -52 -117.5t-120 -41.5l37 -289h423v-128h-407l16 -128h455q40 0 57 -35l228 -455z" />
-    <glyph glyph-name="vimeo_square" unicode="&#xf194;" 
-d="M1292 898q10 216 -161 222q-231 8 -312 -261q44 19 82 19q85 0 74 -96q-4 -57 -74 -167t-105 -110q-43 0 -82 169q-13 54 -45 255q-30 189 -160 177q-59 -7 -164 -100l-81 -72l-81 -72l52 -67q76 52 87 52q57 0 107 -179q15 -55 45 -164.5t45 -164.5q68 -179 164 -179
-q157 0 383 294q220 283 226 444zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-    <glyph glyph-name="_380" unicode="&#xf195;" horiz-adv-x="1152" 
-d="M1152 704q0 -191 -94.5 -353t-256.5 -256.5t-353 -94.5h-160q-14 0 -23 9t-9 23v611l-215 -66q-3 -1 -9 -1q-10 0 -19 6q-13 10 -13 26v128q0 23 23 31l233 71v93l-215 -66q-3 -1 -9 -1q-10 0 -19 6q-13 10 -13 26v128q0 23 23 31l233 71v250q0 14 9 23t23 9h160
-q14 0 23 -9t9 -23v-181l375 116q15 5 28 -5t13 -26v-128q0 -23 -23 -31l-393 -121v-93l375 116q15 5 28 -5t13 -26v-128q0 -23 -23 -31l-393 -121v-487q188 13 318 151t130 328q0 14 9 23t23 9h160q14 0 23 -9t9 -23z" />
-    <glyph glyph-name="plus_square_o" unicode="&#xf196;" horiz-adv-x="1408" 
-d="M1152 736v-64q0 -14 -9 -23t-23 -9h-352v-352q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v352h-352q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h352v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-352h352q14 0 23 -9t9 -23zM1280 288v832q0 66 -47 113t-113 47h-832
-q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113zM1408 1120v-832q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q119 0 203.5 -84.5t84.5 -203.5z" />
-    <glyph glyph-name="_382" unicode="&#xf197;" horiz-adv-x="2176" 
-d="M620 416q-110 -64 -268 -64h-128v64h-64q-13 0 -22.5 23.5t-9.5 56.5q0 24 7 49q-58 2 -96.5 10.5t-38.5 20.5t38.5 20.5t96.5 10.5q-7 25 -7 49q0 33 9.5 56.5t22.5 23.5h64v64h128q158 0 268 -64h1113q42 -7 106.5 -18t80.5 -14q89 -15 150 -40.5t83.5 -47.5t22.5 -40
-t-22.5 -40t-83.5 -47.5t-150 -40.5q-16 -3 -80.5 -14t-106.5 -18h-1113zM1739 668q53 -36 53 -92t-53 -92l81 -30q68 48 68 122t-68 122zM625 400h1015q-217 -38 -456 -80q-57 0 -113 -24t-83 -48l-28 -24l-288 -288q-26 -26 -70.5 -45t-89.5 -19h-96l-93 464h29
-q157 0 273 64zM352 816h-29l93 464h96q46 0 90 -19t70 -45l288 -288q4 -4 11 -10.5t30.5 -23t48.5 -29t61.5 -23t72.5 -10.5l456 -80h-1015q-116 64 -273 64z" />
-    <glyph glyph-name="_383" unicode="&#xf198;" horiz-adv-x="1664" 
-d="M1519 760q62 0 103.5 -40.5t41.5 -101.5q0 -97 -93 -130l-172 -59l56 -167q7 -21 7 -47q0 -59 -42 -102t-101 -43q-47 0 -85.5 27t-53.5 72l-55 165l-310 -106l55 -164q8 -24 8 -47q0 -59 -42 -102t-102 -43q-47 0 -85 27t-53 72l-55 163l-153 -53q-29 -9 -50 -9
-q-61 0 -101.5 40t-40.5 101q0 47 27.5 85t71.5 53l156 53l-105 313l-156 -54q-26 -8 -48 -8q-60 0 -101 40.5t-41 100.5q0 47 27.5 85t71.5 53l157 53l-53 159q-8 24 -8 47q0 60 42 102.5t102 42.5q47 0 85 -27t53 -72l54 -160l310 105l-54 160q-8 24 -8 47q0 59 42.5 102
-t101.5 43q47 0 85.5 -27.5t53.5 -71.5l53 -161l162 55q21 6 43 6q60 0 102.5 -39.5t42.5 -98.5q0 -45 -30 -81.5t-74 -51.5l-157 -54l105 -316l164 56q24 8 46 8zM725 498l310 105l-105 315l-310 -107z" />
-    <glyph glyph-name="_384" unicode="&#xf199;" 
-d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960zM1280 352v436q-31 -35 -64 -55q-34 -22 -132.5 -85t-151.5 -99q-98 -69 -164 -69v0v0q-66 0 -164 69
-q-47 32 -142 92.5t-142 92.5q-12 8 -33 27t-31 27v-436q0 -40 28 -68t68 -28h832q40 0 68 28t28 68zM1280 925q0 41 -27.5 70t-68.5 29h-832q-40 0 -68 -28t-28 -68q0 -37 30.5 -76.5t67.5 -64.5q47 -32 137.5 -89t129.5 -83q3 -2 17 -11.5t21 -14t21 -13t23.5 -13
-t21.5 -9.5t22.5 -7.5t20.5 -2.5t20.5 2.5t22.5 7.5t21.5 9.5t23.5 13t21 13t21 14t17 11.5l267 174q35 23 66.5 62.5t31.5 73.5z" />
-    <glyph glyph-name="_385" unicode="&#xf19a;" horiz-adv-x="1792" 
-d="M127 640q0 163 67 313l367 -1005q-196 95 -315 281t-119 411zM1415 679q0 -19 -2.5 -38.5t-10 -49.5t-11.5 -44t-17.5 -59t-17.5 -58l-76 -256l-278 826q46 3 88 8q19 2 26 18.5t-2.5 31t-28.5 13.5l-205 -10q-75 1 -202 10q-12 1 -20.5 -5t-11.5 -15t-1.5 -18.5t9 -16.5
-t19.5 -8l80 -8l120 -328l-168 -504l-280 832q46 3 88 8q19 2 26 18.5t-2.5 31t-28.5 13.5l-205 -10q-7 0 -23 0.5t-26 0.5q105 160 274.5 253.5t367.5 93.5q147 0 280.5 -53t238.5 -149h-10q-55 0 -92 -40.5t-37 -95.5q0 -12 2 -24t4 -21.5t8 -23t9 -21t12 -22.5t12.5 -21
-t14.5 -24t14 -23q63 -107 63 -212zM909 573l237 -647q1 -6 5 -11q-126 -44 -255 -44q-112 0 -217 32zM1570 1009q95 -174 95 -369q0 -209 -104 -385.5t-279 -278.5l235 678q59 169 59 276q0 42 -6 79zM896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286
-t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM896 -215q173 0 331.5 68t273 182.5t182.5 273t68 331.5t-68 331.5t-182.5 273t-273 182.5t-331.5 68t-331.5 -68t-273 -182.5t-182.5 -273t-68 -331.5t68 -331.5t182.5 -273
-t273 -182.5t331.5 -68z" />
-    <glyph glyph-name="_386" unicode="&#xf19b;" horiz-adv-x="1792" 
-d="M1086 1536v-1536l-272 -128q-228 20 -414 102t-293 208.5t-107 272.5q0 140 100.5 263.5t275 205.5t391.5 108v-172q-217 -38 -356.5 -150t-139.5 -255q0 -152 154.5 -267t388.5 -145v1360zM1755 954l37 -390l-525 114l147 83q-119 70 -280 99v172q277 -33 481 -157z" />
-    <glyph glyph-name="_387" unicode="&#xf19c;" horiz-adv-x="2048" 
-d="M960 1536l960 -384v-128h-128q0 -26 -20.5 -45t-48.5 -19h-1526q-28 0 -48.5 19t-20.5 45h-128v128zM256 896h256v-768h128v768h256v-768h128v768h256v-768h128v768h256v-768h59q28 0 48.5 -19t20.5 -45v-64h-1664v64q0 26 20.5 45t48.5 19h59v768zM1851 -64
-q28 0 48.5 -19t20.5 -45v-128h-1920v128q0 26 20.5 45t48.5 19h1782z" />
-    <glyph glyph-name="_388" unicode="&#xf19d;" horiz-adv-x="2304" 
-d="M1774 700l18 -316q4 -69 -82 -128t-235 -93.5t-323 -34.5t-323 34.5t-235 93.5t-82 128l18 316l574 -181q22 -7 48 -7t48 7zM2304 1024q0 -23 -22 -31l-1120 -352q-4 -1 -10 -1t-10 1l-652 206q-43 -34 -71 -111.5t-34 -178.5q63 -36 63 -109q0 -69 -58 -107l58 -433
-q2 -14 -8 -25q-9 -11 -24 -11h-192q-15 0 -24 11q-10 11 -8 25l58 433q-58 38 -58 107q0 73 65 111q11 207 98 330l-333 104q-22 8 -22 31t22 31l1120 352q4 1 10 1t10 -1l1120 -352q22 -8 22 -31z" />
-    <glyph glyph-name="_389" unicode="&#xf19e;" 
-d="M859 579l13 -707q-62 11 -105 11q-41 0 -105 -11l13 707q-40 69 -168.5 295.5t-216.5 374.5t-181 287q58 -15 108 -15q44 0 111 15q63 -111 133.5 -229.5t167 -276.5t138.5 -227q37 61 109.5 177.5t117.5 190t105 176t107 189.5q54 -14 107 -14q56 0 114 14v0
-q-28 -39 -60 -88.5t-49.5 -78.5t-56.5 -96t-49 -84q-146 -248 -353 -610z" />
-    <glyph glyph-name="uniF1A0" unicode="&#xf1a0;" 
-d="M768 750h725q12 -67 12 -128q0 -217 -91 -387.5t-259.5 -266.5t-386.5 -96q-157 0 -299 60.5t-245 163.5t-163.5 245t-60.5 299t60.5 299t163.5 245t245 163.5t299 60.5q300 0 515 -201l-209 -201q-123 119 -306 119q-129 0 -238.5 -65t-173.5 -176.5t-64 -243.5
-t64 -243.5t173.5 -176.5t238.5 -65q87 0 160 24t120 60t82 82t51.5 87t22.5 78h-436v264z" />
-    <glyph glyph-name="f1a1" unicode="&#xf1a1;" horiz-adv-x="1792" 
-d="M1095 369q16 -16 0 -31q-62 -62 -199 -62t-199 62q-16 15 0 31q6 6 15 6t15 -6q48 -49 169 -49q120 0 169 49q6 6 15 6t15 -6zM788 550q0 -37 -26 -63t-63 -26t-63.5 26t-26.5 63q0 38 26.5 64t63.5 26t63 -26.5t26 -63.5zM1183 550q0 -37 -26.5 -63t-63.5 -26t-63 26
-t-26 63t26 63.5t63 26.5t63.5 -26t26.5 -64zM1434 670q0 49 -35 84t-85 35t-86 -36q-130 90 -311 96l63 283l200 -45q0 -37 26 -63t63 -26t63.5 26.5t26.5 63.5t-26.5 63.5t-63.5 26.5q-54 0 -80 -50l-221 49q-19 5 -25 -16l-69 -312q-180 -7 -309 -97q-35 37 -87 37
-q-50 0 -85 -35t-35 -84q0 -35 18.5 -64t49.5 -44q-6 -27 -6 -56q0 -142 140 -243t337 -101q198 0 338 101t140 243q0 32 -7 57q30 15 48 43.5t18 63.5zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191
-t348 71t348 -71t286 -191t191 -286t71 -348z" />
-    <glyph glyph-name="_392" unicode="&#xf1a2;" 
-d="M939 407q13 -13 0 -26q-53 -53 -171 -53t-171 53q-13 13 0 26q5 6 13 6t13 -6q42 -42 145 -42t145 42q5 6 13 6t13 -6zM676 563q0 -31 -23 -54t-54 -23t-54 23t-23 54q0 32 22.5 54.5t54.5 22.5t54.5 -22.5t22.5 -54.5zM1014 563q0 -31 -23 -54t-54 -23t-54 23t-23 54
-q0 32 22.5 54.5t54.5 22.5t54.5 -22.5t22.5 -54.5zM1229 666q0 42 -30 72t-73 30q-42 0 -73 -31q-113 78 -267 82l54 243l171 -39q1 -32 23.5 -54t53.5 -22q32 0 54.5 22.5t22.5 54.5t-22.5 54.5t-54.5 22.5q-48 0 -69 -43l-189 42q-17 5 -21 -13l-60 -268q-154 -6 -265 -83
-q-30 32 -74 32q-43 0 -73 -30t-30 -72q0 -30 16 -55t42 -38q-5 -25 -5 -48q0 -122 120 -208.5t289 -86.5q170 0 290 86.5t120 208.5q0 25 -6 49q25 13 40.5 37.5t15.5 54.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960
-q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-    <glyph glyph-name="_393" unicode="&#xf1a3;" 
-d="M866 697l90 27v62q0 79 -58 135t-138 56t-138 -55.5t-58 -134.5v-283q0 -20 -14 -33.5t-33 -13.5t-32.5 13.5t-13.5 33.5v120h-151v-122q0 -82 57.5 -139t139.5 -57q81 0 138.5 56.5t57.5 136.5v280q0 19 13.5 33t33.5 14q19 0 32.5 -14t13.5 -33v-54zM1199 502v122h-150
-v-126q0 -20 -13.5 -33.5t-33.5 -13.5q-19 0 -32.5 14t-13.5 33v123l-90 -26l-60 28v-123q0 -80 58 -137t139 -57t138.5 57t57.5 139zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103
-t385.5 -103t279.5 -279.5t103 -385.5z" />
-    <glyph glyph-name="f1a4" unicode="&#xf1a4;" horiz-adv-x="1920" 
-d="M1062 824v118q0 42 -30 72t-72 30t-72 -30t-30 -72v-612q0 -175 -126 -299t-303 -124q-178 0 -303.5 125.5t-125.5 303.5v266h328v-262q0 -43 30 -72.5t72 -29.5t72 29.5t30 72.5v620q0 171 126.5 292t301.5 121q176 0 302 -122t126 -294v-136l-195 -58zM1592 602h328
-v-266q0 -178 -125.5 -303.5t-303.5 -125.5q-177 0 -303 124.5t-126 300.5v268l131 -61l195 58v-270q0 -42 30 -71.5t72 -29.5t72 29.5t30 71.5v275z" />
-    <glyph glyph-name="_395" unicode="&#xf1a5;" 
-d="M1472 160v480h-704v704h-480q-93 0 -158.5 -65.5t-65.5 -158.5v-480h704v-704h480q93 0 158.5 65.5t65.5 158.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5
-t84.5 -203.5z" />
-    <glyph glyph-name="_396" unicode="&#xf1a6;" horiz-adv-x="2048" 
-d="M328 1254h204v-983h-532v697h328v286zM328 435v369h-123v-369h123zM614 968v-697h205v697h-205zM614 1254v-204h205v204h-205zM901 968h533v-942h-533v163h328v82h-328v697zM1229 435v369h-123v-369h123zM1516 968h532v-942h-532v163h327v82h-327v697zM1843 435v369h-123
-v-369h123z" />
-    <glyph glyph-name="_397" unicode="&#xf1a7;" 
-d="M1046 516q0 -64 -38 -109t-91 -45q-43 0 -70 15v277q28 17 70 17q53 0 91 -45.5t38 -109.5zM703 944q0 -64 -38 -109.5t-91 -45.5q-43 0 -70 15v277q28 17 70 17q53 0 91 -45t38 -109zM1265 513q0 134 -88 229t-213 95q-20 0 -39 -3q-23 -78 -78 -136q-87 -95 -211 -101
-v-636l211 41v206q51 -19 117 -19q125 0 213 95t88 229zM922 940q0 134 -88.5 229t-213.5 95q-74 0 -141 -36h-186v-840l211 41v206q55 -19 116 -19q125 0 213.5 95t88.5 229zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960
-q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-    <glyph glyph-name="_398" unicode="&#xf1a8;" horiz-adv-x="2038" 
-d="M1222 607q75 3 143.5 -20.5t118 -58.5t101 -94.5t84 -108t75.5 -120.5q33 -56 78.5 -109t75.5 -80.5t99 -88.5q-48 -30 -108.5 -57.5t-138.5 -59t-114 -47.5q-44 37 -74 115t-43.5 164.5t-33 180.5t-42.5 168.5t-72.5 123t-122.5 48.5l-10 -2l-6 -4q4 -5 13 -14
-q6 -5 28 -23.5t25.5 -22t19 -18t18 -20.5t11.5 -21t10.5 -27.5t4.5 -31t4 -40.5l1 -33q1 -26 -2.5 -57.5t-7.5 -52t-12.5 -58.5t-11.5 -53q-35 1 -101 -9.5t-98 -10.5q-39 0 -72 10q-2 16 -2 47q0 74 3 96q2 13 31.5 41.5t57 59t26.5 51.5q-24 2 -43 -24
-q-36 -53 -111.5 -99.5t-136.5 -46.5q-25 0 -75.5 63t-106.5 139.5t-84 96.5q-6 4 -27 30q-482 -112 -513 -112q-16 0 -28 11t-12 27q0 15 8.5 26.5t22.5 14.5l486 106q-8 14 -8 25t5.5 17.5t16 11.5t20 7t23 4.5t18.5 4.5q4 1 15.5 7.5t17.5 6.5q15 0 28 -16t20 -33
-q163 37 172 37q17 0 29.5 -11t12.5 -28q0 -15 -8.5 -26t-23.5 -14l-182 -40l-1 -16q-1 -26 81.5 -117.5t104.5 -91.5q47 0 119 80t72 129q0 36 -23.5 53t-51 18.5t-51 11.5t-23.5 34q0 16 10 34l-68 19q43 44 43 117q0 26 -5 58q82 16 144 16q44 0 71.5 -1.5t48.5 -8.5
-t31 -13.5t20.5 -24.5t15.5 -33.5t17 -47.5t24 -60l50 25q-3 -40 -23 -60t-42.5 -21t-40 -6.5t-16.5 -20.5zM1282 842q-5 5 -13.5 15.5t-12 14.5t-10.5 11.5t-10 10.5l-8 8t-8.5 7.5t-8 5t-8.5 4.5q-7 3 -14.5 5t-20.5 2.5t-22 0.5h-32.5h-37.5q-126 0 -217 -43
-q16 30 36 46.5t54 29.5t65.5 36t46 36.5t50 55t43.5 50.5q12 -9 28 -31.5t32 -36.5t38 -13l12 1v-76l22 -1q247 95 371 190q28 21 50 39t42.5 37.5t33 31t29.5 34t24 31t24.5 37t23 38t27 47.5t29.5 53l7 9q-2 -53 -43 -139q-79 -165 -205 -264t-306 -142q-14 -3 -42 -7.5
-t-50 -9.5t-39 -14q3 -19 24.5 -46t21.5 -34q0 -11 -26 -30zM1061 -79q39 26 131.5 47.5t146.5 21.5q9 0 22.5 -15.5t28 -42.5t26 -50t24 -51t14.5 -33q-121 -45 -244 -45q-61 0 -125 11zM822 568l48 12l109 -177l-73 -48zM1323 51q3 -15 3 -16q0 -7 -17.5 -14.5t-46 -13
-t-54 -9.5t-53.5 -7.5t-32 -4.5l-7 43q21 2 60.5 8.5t72 10t60.5 3.5h14zM866 679l-96 -20l-6 17q10 1 32.5 7t34.5 6q19 0 35 -10zM1061 45h31l10 -83l-41 -12v95zM1950 1535v1v-1zM1950 1535l-1 -5l-2 -2l1 3zM1950 1535l1 1z" />
-    <glyph glyph-name="_399" unicode="&#xf1a9;" 
-d="M1167 -50q-5 19 -24 5q-30 -22 -87 -39t-131 -17q-129 0 -193 49q-5 4 -13 4q-11 0 -26 -12q-7 -6 -7.5 -16t7.5 -20q34 -32 87.5 -46t102.5 -12.5t99 4.5q41 4 84.5 20.5t65 30t28.5 20.5q12 12 7 29zM1128 65q-19 47 -39 61q-23 15 -76 15q-47 0 -71 -10
-q-29 -12 -78 -56q-26 -24 -12 -44q9 -8 17.5 -4.5t31.5 23.5q3 2 10.5 8.5t10.5 8.5t10 7t11.5 7t12.5 5t15 4.5t16.5 2.5t20.5 1q27 0 44.5 -7.5t23 -14.5t13.5 -22q10 -17 12.5 -20t12.5 1q23 12 14 34zM1483 346q0 22 -5 44.5t-16.5 45t-34 36.5t-52.5 14
-q-33 0 -97 -41.5t-129 -83.5t-101 -42q-27 -1 -63.5 19t-76 49t-83.5 58t-100 49t-111 19q-115 -1 -197 -78.5t-84 -178.5q-2 -112 74 -164q29 -20 62.5 -28.5t103.5 -8.5q57 0 132 32.5t134 71t120 70.5t93 31q26 -1 65 -31.5t71.5 -67t68 -67.5t55.5 -32q35 -3 58.5 14
-t55.5 63q28 41 42.5 101t14.5 106zM1536 506q0 -164 -62 -304.5t-166 -236t-242.5 -149.5t-290.5 -54t-293 57.5t-247.5 157t-170.5 241.5t-64 302q0 89 19.5 172.5t49 145.5t70.5 118.5t78.5 94t78.5 69.5t64.5 46.5t42.5 24.5q14 8 51 26.5t54.5 28.5t48 30t60.5 44
-q36 28 58 72.5t30 125.5q129 -155 186 -193q44 -29 130 -68t129 -66q21 -13 39 -25t60.5 -46.5t76 -70.5t75 -95t69 -122t47 -148.5t19.5 -177.5z" />
-    <glyph glyph-name="_400" unicode="&#xf1aa;" 
-d="M1070 463l-160 -160l-151 -152l-30 -30q-65 -64 -151.5 -87t-171.5 -2q-16 -70 -72 -115t-129 -45q-85 0 -145 60.5t-60 145.5q0 72 44.5 128t113.5 72q-22 86 1 173t88 152l12 12l151 -152l-11 -11q-37 -37 -37 -89t37 -90q37 -37 89 -37t89 37l30 30l151 152l161 160z
-M729 1145l12 -12l-152 -152l-12 12q-37 37 -89 37t-89 -37t-37 -89.5t37 -89.5l29 -29l152 -152l160 -160l-151 -152l-161 160l-151 152l-30 30q-68 67 -90 159.5t5 179.5q-70 15 -115 71t-45 129q0 85 60 145.5t145 60.5q76 0 133.5 -49t69.5 -123q84 20 169.5 -3.5
-t149.5 -87.5zM1536 78q0 -85 -60 -145.5t-145 -60.5q-74 0 -131 47t-71 118q-86 -28 -179.5 -6t-161.5 90l-11 12l151 152l12 -12q37 -37 89 -37t89 37t37 89t-37 89l-30 30l-152 152l-160 160l152 152l160 -160l152 -152l29 -30q64 -64 87.5 -150.5t2.5 -171.5
-q76 -11 126.5 -68.5t50.5 -134.5zM1534 1202q0 -77 -51 -135t-127 -69q26 -85 3 -176.5t-90 -158.5l-12 -12l-151 152l12 12q37 37 37 89t-37 89t-89 37t-89 -37l-30 -30l-152 -152l-160 -160l-152 152l161 160l152 152l29 30q67 67 159 89.5t178 -3.5q11 75 68.5 126
-t135.5 51q85 0 145 -60.5t60 -145.5z" />
-    <glyph glyph-name="f1ab" unicode="&#xf1ab;" 
-d="M654 458q-1 -3 -12.5 0.5t-31.5 11.5l-20 9q-44 20 -87 49q-7 5 -41 31.5t-38 28.5q-67 -103 -134 -181q-81 -95 -105 -110q-4 -2 -19.5 -4t-18.5 0q6 4 82 92q21 24 85.5 115t78.5 118q17 30 51 98.5t36 77.5q-8 1 -110 -33q-8 -2 -27.5 -7.5t-34.5 -9.5t-17 -5
-q-2 -2 -2 -10.5t-1 -9.5q-5 -10 -31 -15q-23 -7 -47 0q-18 4 -28 21q-4 6 -5 23q6 2 24.5 5t29.5 6q58 16 105 32q100 35 102 35q10 2 43 19.5t44 21.5q9 3 21.5 8t14.5 5.5t6 -0.5q2 -12 -1 -33q0 -2 -12.5 -27t-26.5 -53.5t-17 -33.5q-25 -50 -77 -131l64 -28
-q12 -6 74.5 -32t67.5 -28q4 -1 10.5 -25.5t4.5 -30.5zM449 944q3 -15 -4 -28q-12 -23 -50 -38q-30 -12 -60 -12q-26 3 -49 26q-14 15 -18 41l1 3q3 -3 19.5 -5t26.5 0t58 16q36 12 55 14q17 0 21 -17zM1147 815l63 -227l-139 42zM39 15l694 232v1032l-694 -233v-1031z
-M1280 332l102 -31l-181 657l-100 31l-216 -536l102 -31l45 110l211 -65zM777 1294l573 -184v380zM1088 -29l158 -13l-54 -160l-40 66q-130 -83 -276 -108q-58 -12 -91 -12h-84q-79 0 -199.5 39t-183.5 85q-8 7 -8 16q0 8 5 13.5t13 5.5q4 0 18 -7.5t30.5 -16.5t20.5 -11
-q73 -37 159.5 -61.5t157.5 -24.5q95 0 167 14.5t157 50.5q15 7 30.5 15.5t34 19t28.5 16.5zM1536 1050v-1079l-774 246q-14 -6 -375 -127.5t-368 -121.5q-13 0 -18 13q0 1 -1 3v1078q3 9 4 10q5 6 20 11q107 36 149 50v384l558 -198q2 0 160.5 55t316 108.5t161.5 53.5
-q20 0 20 -21v-418z" />
-    <glyph glyph-name="_402" unicode="&#xf1ac;" horiz-adv-x="1792" 
-d="M288 1152q66 0 113 -47t47 -113v-1088q0 -66 -47 -113t-113 -47h-128q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h128zM1664 989q58 -34 93 -93t35 -128v-768q0 -106 -75 -181t-181 -75h-864q-66 0 -113 47t-47 113v1536q0 40 28 68t68 28h672q40 0 88 -20t76 -48
-l152 -152q28 -28 48 -76t20 -88v-163zM928 0v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM928 256v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM928 512v128q0 14 -9 23
-t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1184 0v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1184 256v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128
-q14 0 23 9t9 23zM1184 512v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1440 0v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1440 256v128q0 14 -9 23t-23 9h-128
-q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1440 512v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1536 896v256h-160q-40 0 -68 28t-28 68v160h-640v-512h896z" />
-    <glyph glyph-name="_403" unicode="&#xf1ad;" 
-d="M1344 1536q26 0 45 -19t19 -45v-1664q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1664q0 26 19 45t45 19h1280zM512 1248v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM512 992v-64q0 -14 9 -23t23 -9h64q14 0 23 9
-t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM512 736v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM512 480v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM384 160v64
-q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM384 416v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM384 672v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64
-q14 0 23 9t9 23zM384 928v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM384 1184v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 -96v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9
-t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM896 416v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 672v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 928v64
-q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 1184v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 160v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64
-q14 0 23 9t9 23zM1152 416v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 672v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 928v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9
-t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 1184v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23z" />
-    <glyph glyph-name="_404" unicode="&#xf1ae;" horiz-adv-x="1280" 
-d="M1188 988l-292 -292v-824q0 -46 -33 -79t-79 -33t-79 33t-33 79v384h-64v-384q0 -46 -33 -79t-79 -33t-79 33t-33 79v824l-292 292q-28 28 -28 68t28 68q29 28 68.5 28t67.5 -28l228 -228h368l228 228q28 28 68 28t68 -28q28 -29 28 -68.5t-28 -67.5zM864 1152
-q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" />
-    <glyph glyph-name="uniF1B1" unicode="&#xf1b0;" horiz-adv-x="1664" 
-d="M780 1064q0 -60 -19 -113.5t-63 -92.5t-105 -39q-76 0 -138 57.5t-92 135.5t-30 151q0 60 19 113.5t63 92.5t105 39q77 0 138.5 -57.5t91.5 -135t30 -151.5zM438 581q0 -80 -42 -139t-119 -59q-76 0 -141.5 55.5t-100.5 133.5t-35 152q0 80 42 139.5t119 59.5
-q76 0 141.5 -55.5t100.5 -134t35 -152.5zM832 608q118 0 255 -97.5t229 -237t92 -254.5q0 -46 -17 -76.5t-48.5 -45t-64.5 -20t-76 -5.5q-68 0 -187.5 45t-182.5 45q-66 0 -192.5 -44.5t-200.5 -44.5q-183 0 -183 146q0 86 56 191.5t139.5 192.5t187.5 146t193 59zM1071 819
-q-61 0 -105 39t-63 92.5t-19 113.5q0 74 30 151.5t91.5 135t138.5 57.5q61 0 105 -39t63 -92.5t19 -113.5q0 -73 -30 -151t-92 -135.5t-138 -57.5zM1503 923q77 0 119 -59.5t42 -139.5q0 -74 -35 -152t-100.5 -133.5t-141.5 -55.5q-77 0 -119 59t-42 139q0 74 35 152.5
-t100.5 134t141.5 55.5z" />
-    <glyph glyph-name="_406" unicode="&#xf1b1;" horiz-adv-x="768" 
-d="M704 1008q0 -145 -57 -243.5t-152 -135.5l45 -821q2 -26 -16 -45t-44 -19h-192q-26 0 -44 19t-16 45l45 821q-95 37 -152 135.5t-57 243.5q0 128 42.5 249.5t117.5 200t160 78.5t160 -78.5t117.5 -200t42.5 -249.5z" />
-    <glyph glyph-name="_407" unicode="&#xf1b2;" horiz-adv-x="1792" 
-d="M896 -93l640 349v636l-640 -233v-752zM832 772l698 254l-698 254l-698 -254zM1664 1024v-768q0 -35 -18 -65t-49 -47l-704 -384q-28 -16 -61 -16t-61 16l-704 384q-31 17 -49 47t-18 65v768q0 40 23 73t61 47l704 256q22 8 44 8t44 -8l704 -256q38 -14 61 -47t23 -73z
-" />
-    <glyph glyph-name="_408" unicode="&#xf1b3;" horiz-adv-x="2304" 
-d="M640 -96l384 192v314l-384 -164v-342zM576 358l404 173l-404 173l-404 -173zM1664 -96l384 192v314l-384 -164v-342zM1600 358l404 173l-404 173l-404 -173zM1152 651l384 165v266l-384 -164v-267zM1088 1030l441 189l-441 189l-441 -189zM2176 512v-416q0 -36 -19 -67
-t-52 -47l-448 -224q-25 -14 -57 -14t-57 14l-448 224q-4 2 -7 4q-2 -2 -7 -4l-448 -224q-25 -14 -57 -14t-57 14l-448 224q-33 16 -52 47t-19 67v416q0 38 21.5 70t56.5 48l434 186v400q0 38 21.5 70t56.5 48l448 192q23 10 50 10t50 -10l448 -192q35 -16 56.5 -48t21.5 -70
-v-400l434 -186q36 -16 57 -48t21 -70z" />
-    <glyph glyph-name="_409" unicode="&#xf1b4;" horiz-adv-x="2048" 
-d="M1848 1197h-511v-124h511v124zM1596 771q-90 0 -146 -52.5t-62 -142.5h408q-18 195 -200 195zM1612 186q63 0 122 32t76 87h221q-100 -307 -427 -307q-214 0 -340.5 132t-126.5 347q0 208 130.5 345.5t336.5 137.5q138 0 240.5 -68t153 -179t50.5 -248q0 -17 -2 -47h-658
-q0 -111 57.5 -171.5t166.5 -60.5zM277 236h296q205 0 205 167q0 180 -199 180h-302v-347zM277 773h281q78 0 123.5 36.5t45.5 113.5q0 144 -190 144h-260v-294zM0 1282h594q87 0 155 -14t126.5 -47.5t90 -96.5t31.5 -154q0 -181 -172 -263q114 -32 172 -115t58 -204
-q0 -75 -24.5 -136.5t-66 -103.5t-98.5 -71t-121 -42t-134 -13h-611v1260z" />
-    <glyph glyph-name="_410" unicode="&#xf1b5;" 
-d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960zM499 1041h-371v-787h382q117 0 197 57.5t80 170.5q0 158 -143 200q107 52 107 164q0 57 -19.5 96.5
-t-56.5 60.5t-79 29.5t-97 8.5zM477 723h-176v184h163q119 0 119 -90q0 -94 -106 -94zM486 388h-185v217h189q124 0 124 -113q0 -104 -128 -104zM1136 356q-68 0 -104 38t-36 107h411q1 10 1 30q0 132 -74.5 220.5t-203.5 88.5q-128 0 -210 -86t-82 -216q0 -135 79 -217
-t213 -82q205 0 267 191h-138q-11 -34 -47.5 -54t-75.5 -20zM1126 722q113 0 124 -122h-254q4 56 39 89t91 33zM964 988h319v-77h-319v77z" />
-    <glyph glyph-name="_411" unicode="&#xf1b6;" horiz-adv-x="1792" 
-d="M1582 954q0 -101 -71.5 -172.5t-172.5 -71.5t-172.5 71.5t-71.5 172.5t71.5 172.5t172.5 71.5t172.5 -71.5t71.5 -172.5zM812 212q0 104 -73 177t-177 73q-27 0 -54 -6l104 -42q77 -31 109.5 -106.5t1.5 -151.5q-31 -77 -107 -109t-152 -1q-21 8 -62 24.5t-61 24.5
-q32 -60 91 -96.5t130 -36.5q104 0 177 73t73 177zM1642 953q0 126 -89.5 215.5t-215.5 89.5q-127 0 -216.5 -89.5t-89.5 -215.5q0 -127 89.5 -216t216.5 -89q126 0 215.5 89t89.5 216zM1792 953q0 -189 -133.5 -322t-321.5 -133l-437 -319q-12 -129 -109 -218t-229 -89
-q-121 0 -214 76t-118 192l-230 92v429l389 -157q79 48 173 48q13 0 35 -2l284 407q2 187 135.5 319t320.5 132q188 0 321.5 -133.5t133.5 -321.5z" />
-    <glyph glyph-name="_412" unicode="&#xf1b7;" 
-d="M1242 889q0 80 -57 136.5t-137 56.5t-136.5 -57t-56.5 -136q0 -80 56.5 -136.5t136.5 -56.5t137 56.5t57 136.5zM632 301q0 -83 -58 -140.5t-140 -57.5q-56 0 -103 29t-72 77q52 -20 98 -40q60 -24 120 1.5t85 86.5q24 60 -1.5 120t-86.5 84l-82 33q22 5 42 5
-q82 0 140 -57.5t58 -140.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v153l172 -69q20 -92 93.5 -152t168.5 -60q104 0 181 70t87 173l345 252q150 0 255.5 105.5t105.5 254.5q0 150 -105.5 255.5t-255.5 105.5
-q-148 0 -253 -104.5t-107 -252.5l-225 -322q-9 1 -28 1q-75 0 -137 -37l-297 119v468q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5zM1289 887q0 -100 -71 -170.5t-171 -70.5t-170.5 70.5t-70.5 170.5t70.5 171t170.5 71q101 0 171.5 -70.5t70.5 -171.5z
-" />
-    <glyph glyph-name="_413" unicode="&#xf1b8;" horiz-adv-x="1792" 
-d="M836 367l-15 -368l-2 -22l-420 29q-36 3 -67 31.5t-47 65.5q-11 27 -14.5 55t4 65t12 55t21.5 64t19 53q78 -12 509 -28zM449 953l180 -379l-147 92q-63 -72 -111.5 -144.5t-72.5 -125t-39.5 -94.5t-18.5 -63l-4 -21l-190 357q-17 26 -18 56t6 47l8 18q35 63 114 188
-l-140 86zM1680 436l-188 -359q-12 -29 -36.5 -46.5t-43.5 -20.5l-18 -4q-71 -7 -219 -12l8 -164l-230 367l211 362l7 -173q170 -16 283 -5t170 33zM895 1360q-47 -63 -265 -435l-317 187l-19 12l225 356q20 31 60 45t80 10q24 -2 48.5 -12t42 -21t41.5 -33t36 -34.5
-t36 -39.5t32 -35zM1550 1053l212 -363q18 -37 12.5 -76t-27.5 -74q-13 -20 -33 -37t-38 -28t-48.5 -22t-47 -16t-51.5 -14t-46 -12q-34 72 -265 436l313 195zM1407 1279l142 83l-220 -373l-419 20l151 86q-34 89 -75 166t-75.5 123.5t-64.5 80t-47 46.5l-17 13l405 -1
-q31 3 58 -10.5t39 -28.5l11 -15q39 -61 112 -190z" />
-    <glyph glyph-name="_414" unicode="&#xf1b9;" horiz-adv-x="2048" 
-d="M480 448q0 66 -47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47t113 47t47 113zM516 768h1016l-89 357q-2 8 -14 17.5t-21 9.5h-768q-9 0 -21 -9.5t-14 -17.5zM1888 448q0 66 -47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47t113 47t47 113zM2048 544v-384
-q0 -14 -9 -23t-23 -9h-96v-128q0 -80 -56 -136t-136 -56t-136 56t-56 136v128h-1024v-128q0 -80 -56 -136t-136 -56t-136 56t-56 136v128h-96q-14 0 -23 9t-9 23v384q0 93 65.5 158.5t158.5 65.5h28l105 419q23 94 104 157.5t179 63.5h768q98 0 179 -63.5t104 -157.5
-l105 -419h28q93 0 158.5 -65.5t65.5 -158.5z" />
-    <glyph glyph-name="_415" unicode="&#xf1ba;" horiz-adv-x="2048" 
-d="M1824 640q93 0 158.5 -65.5t65.5 -158.5v-384q0 -14 -9 -23t-23 -9h-96v-64q0 -80 -56 -136t-136 -56t-136 56t-56 136v64h-1024v-64q0 -80 -56 -136t-136 -56t-136 56t-56 136v64h-96q-14 0 -23 9t-9 23v384q0 93 65.5 158.5t158.5 65.5h28l105 419q23 94 104 157.5
-t179 63.5h128v224q0 14 9 23t23 9h448q14 0 23 -9t9 -23v-224h128q98 0 179 -63.5t104 -157.5l105 -419h28zM320 160q66 0 113 47t47 113t-47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47zM516 640h1016l-89 357q-2 8 -14 17.5t-21 9.5h-768q-9 0 -21 -9.5t-14 -17.5z
-M1728 160q66 0 113 47t47 113t-47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47z" />
-    <glyph glyph-name="_416" unicode="&#xf1bb;" 
-d="M1504 64q0 -26 -19 -45t-45 -19h-462q1 -17 6 -87.5t5 -108.5q0 -25 -18 -42.5t-43 -17.5h-320q-25 0 -43 17.5t-18 42.5q0 38 5 108.5t6 87.5h-462q-26 0 -45 19t-19 45t19 45l402 403h-229q-26 0 -45 19t-19 45t19 45l402 403h-197q-26 0 -45 19t-19 45t19 45l384 384
-q19 19 45 19t45 -19l384 -384q19 -19 19 -45t-19 -45t-45 -19h-197l402 -403q19 -19 19 -45t-19 -45t-45 -19h-229l402 -403q19 -19 19 -45z" />
-    <glyph glyph-name="_417" unicode="&#xf1bc;" 
-d="M1127 326q0 32 -30 51q-193 115 -447 115q-133 0 -287 -34q-42 -9 -42 -52q0 -20 13.5 -34.5t35.5 -14.5q5 0 37 8q132 27 243 27q226 0 397 -103q19 -11 33 -11q19 0 33 13.5t14 34.5zM1223 541q0 40 -35 61q-237 141 -548 141q-153 0 -303 -42q-48 -13 -48 -64
-q0 -25 17.5 -42.5t42.5 -17.5q7 0 37 8q122 33 251 33q279 0 488 -124q24 -13 38 -13q25 0 42.5 17.5t17.5 42.5zM1331 789q0 47 -40 70q-126 73 -293 110.5t-343 37.5q-204 0 -364 -47q-23 -7 -38.5 -25.5t-15.5 -48.5q0 -31 20.5 -52t51.5 -21q11 0 40 8q133 37 307 37
-q159 0 309.5 -34t253.5 -95q21 -12 40 -12q29 0 50.5 20.5t21.5 51.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-    <glyph glyph-name="_418" unicode="&#xf1bd;" horiz-adv-x="1024" 
-d="M1024 1233l-303 -582l24 -31h279v-415h-507l-44 -30l-142 -273l-30 -30h-301v303l303 583l-24 30h-279v415h507l44 30l142 273l30 30h301v-303z" />
-    <glyph glyph-name="_419" unicode="&#xf1be;" horiz-adv-x="2304" 
-d="M784 164l16 241l-16 523q-1 10 -7.5 17t-16.5 7q-9 0 -16 -7t-7 -17l-14 -523l14 -241q1 -10 7.5 -16.5t15.5 -6.5q22 0 24 23zM1080 193l11 211l-12 586q0 16 -13 24q-8 5 -16 5t-16 -5q-13 -8 -13 -24l-1 -6l-10 -579q0 -1 11 -236v-1q0 -10 6 -17q9 -11 23 -11
-q11 0 20 9q9 7 9 20zM35 533l20 -128l-20 -126q-2 -9 -9 -9t-9 9l-17 126l17 128q2 9 9 9t9 -9zM121 612l26 -207l-26 -203q-2 -9 -10 -9q-9 0 -9 10l-23 202l23 207q0 9 9 9q8 0 10 -9zM401 159zM213 650l25 -245l-25 -237q0 -11 -11 -11q-10 0 -12 11l-21 237l21 245
-q2 12 12 12q11 0 11 -12zM307 657l23 -252l-23 -244q-2 -13 -14 -13q-13 0 -13 13l-21 244l21 252q0 13 13 13q12 0 14 -13zM401 639l21 -234l-21 -246q-2 -16 -16 -16q-6 0 -10.5 4.5t-4.5 11.5l-20 246l20 234q0 6 4.5 10.5t10.5 4.5q14 0 16 -15zM784 164zM495 785
-l21 -380l-21 -246q0 -7 -5 -12.5t-12 -5.5q-16 0 -18 18l-18 246l18 380q2 18 18 18q7 0 12 -5.5t5 -12.5zM589 871l19 -468l-19 -244q0 -8 -5.5 -13.5t-13.5 -5.5q-18 0 -20 19l-16 244l16 468q2 19 20 19q8 0 13.5 -5.5t5.5 -13.5zM687 911l18 -506l-18 -242
-q-2 -21 -22 -21q-19 0 -21 21l-16 242l16 506q0 9 6.5 15.5t14.5 6.5q9 0 15 -6.5t7 -15.5zM1079 169v0v0v0zM881 915l15 -510l-15 -239q0 -10 -7.5 -17.5t-17.5 -7.5t-17 7t-8 18l-14 239l14 510q0 11 7.5 18t17.5 7t17.5 -7t7.5 -18zM980 896l14 -492l-14 -236
-q0 -11 -8 -19t-19 -8t-19 8t-9 19l-12 236l12 492q1 12 9 20t19 8t18.5 -8t8.5 -20zM1192 404l-14 -231v0q0 -13 -9 -22t-22 -9t-22 9t-10 22l-6 114l-6 117l12 636v3q2 15 12 24q9 7 20 7q8 0 15 -5q14 -8 16 -26zM2304 423q0 -117 -83 -199.5t-200 -82.5h-786
-q-13 2 -22 11t-9 22v899q0 23 28 33q85 34 181 34q195 0 338 -131.5t160 -323.5q53 22 110 22q117 0 200 -83t83 -201z" />
-    <glyph glyph-name="uniF1C0" unicode="&#xf1c0;" 
-d="M768 768q237 0 443 43t325 127v-170q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5t-103 128v170q119 -84 325 -127t443 -43zM768 0q237 0 443 43t325 127v-170q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5t-103 128v170q119 -84 325 -127
-t443 -43zM768 384q237 0 443 43t325 127v-170q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5t-103 128v170q119 -84 325 -127t443 -43zM768 1536q208 0 385 -34.5t280 -93.5t103 -128v-128q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5
-t-103 128v128q0 69 103 128t280 93.5t385 34.5z" />
-    <glyph glyph-name="uniF1C1" unicode="&#xf1c1;" 
-d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
-M894 465q33 -26 84 -56q59 7 117 7q147 0 177 -49q16 -22 2 -52q0 -1 -1 -2l-2 -2v-1q-6 -38 -71 -38q-48 0 -115 20t-130 53q-221 -24 -392 -83q-153 -262 -242 -262q-15 0 -28 7l-24 12q-1 1 -6 5q-10 10 -6 36q9 40 56 91.5t132 96.5q14 9 23 -6q2 -2 2 -4q52 85 107 197
-q68 136 104 262q-24 82 -30.5 159.5t6.5 127.5q11 40 42 40h21h1q23 0 35 -15q18 -21 9 -68q-2 -6 -4 -8q1 -3 1 -8v-30q-2 -123 -14 -192q55 -164 146 -238zM318 54q52 24 137 158q-51 -40 -87.5 -84t-49.5 -74zM716 974q-15 -42 -2 -132q1 7 7 44q0 3 7 43q1 4 4 8
-q-1 1 -1 2q-1 2 -1 3q-1 22 -13 36q0 -1 -1 -2v-2zM592 313q135 54 284 81q-2 1 -13 9.5t-16 13.5q-76 67 -127 176q-27 -86 -83 -197q-30 -56 -45 -83zM1238 329q-24 24 -140 24q76 -28 124 -28q14 0 18 1q0 1 -2 3z" />
-    <glyph glyph-name="_422" unicode="&#xf1c2;" 
-d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
-M233 768v-107h70l164 -661h159l128 485q7 20 10 46q2 16 2 24h4l3 -24q1 -3 3.5 -20t5.5 -26l128 -485h159l164 661h70v107h-300v-107h90l-99 -438q-5 -20 -7 -46l-2 -21h-4q0 3 -0.5 6.5t-1.5 8t-1 6.5q-1 5 -4 21t-5 25l-144 545h-114l-144 -545q-2 -9 -4.5 -24.5
-t-3.5 -21.5l-4 -21h-4l-2 21q-2 26 -7 46l-99 438h90v107h-300z" />
-    <glyph glyph-name="_423" unicode="&#xf1c3;" 
-d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
-M429 106v-106h281v106h-75l103 161q5 7 10 16.5t7.5 13.5t3.5 4h2q1 -4 5 -10q2 -4 4.5 -7.5t6 -8t6.5 -8.5l107 -161h-76v-106h291v106h-68l-192 273l195 282h67v107h-279v-107h74l-103 -159q-4 -7 -10 -16.5t-9 -13.5l-2 -3h-2q-1 4 -5 10q-6 11 -17 23l-106 159h76v107
-h-290v-107h68l189 -272l-194 -283h-68z" />
-    <glyph glyph-name="_424" unicode="&#xf1c4;" 
-d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
-M416 106v-106h327v106h-93v167h137q76 0 118 15q67 23 106.5 87t39.5 146q0 81 -37 141t-100 87q-48 19 -130 19h-368v-107h92v-555h-92zM769 386h-119v268h120q52 0 83 -18q56 -33 56 -115q0 -89 -62 -120q-31 -15 -78 -15z" />
-    <glyph glyph-name="_425" unicode="&#xf1c5;" 
-d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
-M1280 320v-320h-1024v192l192 192l128 -128l384 384zM448 512q-80 0 -136 56t-56 136t56 136t136 56t136 -56t56 -136t-56 -136t-136 -56z" />
-    <glyph glyph-name="_426" unicode="&#xf1c6;" 
-d="M640 1152v128h-128v-128h128zM768 1024v128h-128v-128h128zM640 896v128h-128v-128h128zM768 768v128h-128v-128h128zM1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400
-v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-128v-128h-128v128h-512v-1536h1280zM781 593l107 -349q8 -27 8 -52q0 -83 -72.5 -137.5t-183.5 -54.5t-183.5 54.5t-72.5 137.5q0 25 8 52q21 63 120 396v128h128v-128h79
-q22 0 39 -13t23 -34zM640 128q53 0 90.5 19t37.5 45t-37.5 45t-90.5 19t-90.5 -19t-37.5 -45t37.5 -45t90.5 -19z" />
-    <glyph glyph-name="_427" unicode="&#xf1c7;" 
-d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
-M620 686q20 -8 20 -30v-544q0 -22 -20 -30q-8 -2 -12 -2q-12 0 -23 9l-166 167h-131q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h131l166 167q16 15 35 7zM1037 -3q31 0 50 24q129 159 129 363t-129 363q-16 21 -43 24t-47 -14q-21 -17 -23.5 -43.5t14.5 -47.5
-q100 -123 100 -282t-100 -282q-17 -21 -14.5 -47.5t23.5 -42.5q18 -15 40 -15zM826 145q27 0 47 20q87 93 87 219t-87 219q-18 19 -45 20t-46 -17t-20 -44.5t18 -46.5q52 -57 52 -131t-52 -131q-19 -20 -18 -46.5t20 -44.5q20 -17 44 -17z" />
-    <glyph glyph-name="_428" unicode="&#xf1c8;" 
-d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
-M768 768q52 0 90 -38t38 -90v-384q0 -52 -38 -90t-90 -38h-384q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h384zM1260 766q20 -8 20 -30v-576q0 -22 -20 -30q-8 -2 -12 -2q-14 0 -23 9l-265 266v90l265 266q9 9 23 9q4 0 12 -2z" />
-    <glyph glyph-name="_429" unicode="&#xf1c9;" 
-d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
-M480 768q8 11 21 12.5t24 -6.5l51 -38q11 -8 12.5 -21t-6.5 -24l-182 -243l182 -243q8 -11 6.5 -24t-12.5 -21l-51 -38q-11 -8 -24 -6.5t-21 12.5l-226 301q-14 19 0 38zM1282 467q14 -19 0 -38l-226 -301q-8 -11 -21 -12.5t-24 6.5l-51 38q-11 8 -12.5 21t6.5 24l182 243
-l-182 243q-8 11 -6.5 24t12.5 21l51 38q11 8 24 6.5t21 -12.5zM662 6q-13 2 -20.5 13t-5.5 24l138 831q2 13 13 20.5t24 5.5l63 -10q13 -2 20.5 -13t5.5 -24l-138 -831q-2 -13 -13 -20.5t-24 -5.5z" />
-    <glyph glyph-name="_430" unicode="&#xf1ca;" 
-d="M1497 709v-198q-101 -23 -198 -23q-65 -136 -165.5 -271t-181.5 -215.5t-128 -106.5q-80 -45 -162 3q-28 17 -60.5 43.5t-85 83.5t-102.5 128.5t-107.5 184t-105.5 244t-91.5 314.5t-70.5 390h283q26 -218 70 -398.5t104.5 -317t121.5 -235.5t140 -195q169 169 287 406
-q-142 72 -223 220t-81 333q0 192 104 314.5t284 122.5q178 0 273 -105.5t95 -297.5q0 -159 -58 -286q-7 -1 -19.5 -3t-46 -2t-63 6t-62 25.5t-50.5 51.5q31 103 31 184q0 87 -29 132t-79 45q-53 0 -85 -49.5t-32 -140.5q0 -186 105 -293.5t267 -107.5q62 0 121 14z" />
-    <glyph glyph-name="_431" unicode="&#xf1cb;" horiz-adv-x="1792" 
-d="M216 367l603 -402v359l-334 223zM154 511l193 129l-193 129v-258zM973 -35l603 402l-269 180l-334 -223v-359zM896 458l272 182l-272 182l-272 -182zM485 733l334 223v359l-603 -402zM1445 640l193 -129v258zM1307 733l269 180l-603 402v-359zM1792 913v-546
-q0 -41 -34 -64l-819 -546q-21 -13 -43 -13t-43 13l-819 546q-34 23 -34 64v546q0 41 34 64l819 546q21 13 43 13t43 -13l819 -546q34 -23 34 -64z" />
-    <glyph glyph-name="_432" unicode="&#xf1cc;" horiz-adv-x="2048" 
-d="M1800 764q111 -46 179.5 -145.5t68.5 -221.5q0 -164 -118 -280.5t-285 -116.5q-4 0 -11.5 0.5t-10.5 0.5h-1209h-1h-2h-5q-170 10 -288 125.5t-118 280.5q0 110 55 203t147 147q-12 39 -12 82q0 115 82 196t199 81q95 0 172 -58q75 154 222.5 248t326.5 94
-q166 0 306 -80.5t221.5 -218.5t81.5 -301q0 -6 -0.5 -18t-0.5 -18zM468 498q0 -122 84 -193t208 -71q137 0 240 99q-16 20 -47.5 56.5t-43.5 50.5q-67 -65 -144 -65q-55 0 -93.5 33.5t-38.5 87.5q0 53 38.5 87t91.5 34q44 0 84.5 -21t73 -55t65 -75t69 -82t77 -75t97 -55
-t121.5 -21q121 0 204.5 71.5t83.5 190.5q0 121 -84 192t-207 71q-143 0 -241 -97l93 -108q66 64 142 64q52 0 92 -33t40 -84q0 -57 -37 -91.5t-94 -34.5q-43 0 -82.5 21t-72 55t-65.5 75t-69.5 82t-77.5 75t-96.5 55t-118.5 21q-122 0 -207 -70.5t-85 -189.5z" />
-    <glyph glyph-name="_433" unicode="&#xf1cd;" horiz-adv-x="1792" 
-d="M896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM896 1408q-190 0 -361 -90l194 -194q82 28 167 28t167 -28l194 194q-171 90 -361 90zM218 279l194 194
-q-28 82 -28 167t28 167l-194 194q-90 -171 -90 -361t90 -361zM896 -128q190 0 361 90l-194 194q-82 -28 -167 -28t-167 28l-194 -194q171 -90 361 -90zM896 256q159 0 271.5 112.5t112.5 271.5t-112.5 271.5t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5
-t271.5 -112.5zM1380 473l194 -194q90 171 90 361t-90 361l-194 -194q28 -82 28 -167t-28 -167z" />
-    <glyph glyph-name="_434" unicode="&#xf1ce;" horiz-adv-x="1792" 
-d="M1760 640q0 -176 -68.5 -336t-184 -275.5t-275.5 -184t-336 -68.5t-336 68.5t-275.5 184t-184 275.5t-68.5 336q0 213 97 398.5t265 305.5t374 151v-228q-221 -45 -366.5 -221t-145.5 -406q0 -130 51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5
-t136.5 204t51 248.5q0 230 -145.5 406t-366.5 221v228q206 -31 374 -151t265 -305.5t97 -398.5z" />
-    <glyph glyph-name="uniF1D0" unicode="&#xf1d0;" horiz-adv-x="1792" 
-d="M19 662q8 217 116 406t305 318h5q0 -1 -1 -3q-8 -8 -28 -33.5t-52 -76.5t-60 -110.5t-44.5 -135.5t-14 -150.5t39 -157.5t108.5 -154q50 -50 102 -69.5t90.5 -11.5t69.5 23.5t47 32.5l16 16q39 51 53 116.5t6.5 122.5t-21 107t-26.5 80l-14 29q-10 25 -30.5 49.5t-43 41
-t-43.5 29.5t-35 19l-13 6l104 115q39 -17 78 -52t59 -61l19 -27q1 48 -18.5 103.5t-40.5 87.5l-20 31l161 183l160 -181q-33 -46 -52.5 -102.5t-22.5 -90.5l-4 -33q22 37 61.5 72.5t67.5 52.5l28 17l103 -115q-44 -14 -85 -50t-60 -65l-19 -29q-31 -56 -48 -133.5t-7 -170
-t57 -156.5q33 -45 77.5 -60.5t85 -5.5t76 26.5t57.5 33.5l21 16q60 53 96.5 115t48.5 121.5t10 121.5t-18 118t-37 107.5t-45.5 93t-45 72t-34.5 47.5l-13 17q-14 13 -7 13l10 -3q40 -29 62.5 -46t62 -50t64 -58t58.5 -65t55.5 -77t45.5 -88t38 -103t23.5 -117t10.5 -136
-q3 -259 -108 -465t-312 -321t-456 -115q-185 0 -351 74t-283.5 198t-184 293t-60.5 353z" />
-    <glyph glyph-name="uniF1D1" unicode="&#xf1d1;" horiz-adv-x="1792" 
-d="M874 -102v-66q-208 6 -385 109.5t-283 275.5l58 34q29 -49 73 -99l65 57q148 -168 368 -212l-17 -86q65 -12 121 -13zM276 428l-83 -28q22 -60 49 -112l-57 -33q-98 180 -98 385t98 385l57 -33q-30 -56 -49 -112l82 -28q-35 -100 -35 -212q0 -109 36 -212zM1528 251
-l58 -34q-106 -172 -283 -275.5t-385 -109.5v66q56 1 121 13l-17 86q220 44 368 212l65 -57q44 50 73 99zM1377 805l-233 -80q14 -42 14 -85t-14 -85l232 -80q-31 -92 -98 -169l-185 162q-57 -67 -147 -85l48 -241q-52 -10 -98 -10t-98 10l48 241q-90 18 -147 85l-185 -162
-q-67 77 -98 169l232 80q-14 42 -14 85t14 85l-233 80q33 93 99 169l185 -162q59 68 147 86l-48 240q44 10 98 10t98 -10l-48 -240q88 -18 147 -86l185 162q66 -76 99 -169zM874 1448v-66q-65 -2 -121 -13l17 -86q-220 -42 -368 -211l-65 56q-38 -42 -73 -98l-57 33
-q106 172 282 275.5t385 109.5zM1705 640q0 -205 -98 -385l-57 33q27 52 49 112l-83 28q36 103 36 212q0 112 -35 212l82 28q-19 56 -49 112l57 33q98 -180 98 -385zM1585 1063l-57 -33q-35 56 -73 98l-65 -56q-148 169 -368 211l17 86q-56 11 -121 13v66q209 -6 385 -109.5
-t282 -275.5zM1748 640q0 173 -67.5 331t-181.5 272t-272 181.5t-331 67.5t-331 -67.5t-272 -181.5t-181.5 -272t-67.5 -331t67.5 -331t181.5 -272t272 -181.5t331 -67.5t331 67.5t272 181.5t181.5 272t67.5 331zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71
-t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
-    <glyph glyph-name="uniF1D2" unicode="&#xf1d2;" 
-d="M582 228q0 -66 -93 -66q-107 0 -107 63q0 64 98 64q102 0 102 -61zM546 694q0 -85 -74 -85q-77 0 -77 84q0 90 77 90q36 0 55 -25.5t19 -63.5zM712 769v125q-78 -29 -135 -29q-50 29 -110 29q-86 0 -145 -57t-59 -143q0 -50 29.5 -102t73.5 -67v-3q-38 -17 -38 -85
-q0 -53 41 -77v-3q-113 -37 -113 -139q0 -45 20 -78.5t54 -51t72 -25.5t81 -8q224 0 224 188q0 67 -48 99t-126 46q-27 5 -51.5 20.5t-24.5 39.5q0 44 49 52q77 15 122 70t45 134q0 24 -10 52q37 9 49 13zM771 350h137q-2 27 -2 82v387q0 46 2 69h-137q3 -23 3 -71v-392
-q0 -50 -3 -75zM1280 366v121q-30 -21 -68 -21q-53 0 -53 82v225h52q9 0 26.5 -1t26.5 -1v117h-105q0 82 3 102h-140q4 -24 4 -55v-47h-60v-117q36 3 37 3q3 0 11 -0.5t12 -0.5v-2h-2v-217q0 -37 2.5 -64t11.5 -56.5t24.5 -48.5t43.5 -31t66 -12q64 0 108 24zM924 1072
-q0 36 -24 63.5t-60 27.5t-60.5 -27t-24.5 -64q0 -36 25 -62.5t60 -26.5t59.5 27t24.5 62zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-    <glyph glyph-name="_438" unicode="&#xf1d3;" horiz-adv-x="1792" 
-d="M595 22q0 100 -165 100q-158 0 -158 -104q0 -101 172 -101q151 0 151 105zM536 777q0 61 -30 102t-89 41q-124 0 -124 -145q0 -135 124 -135q119 0 119 137zM805 1101v-202q-36 -12 -79 -22q16 -43 16 -84q0 -127 -73 -216.5t-197 -112.5q-40 -8 -59.5 -27t-19.5 -58
-q0 -31 22.5 -51.5t58 -32t78.5 -22t86 -25.5t78.5 -37.5t58 -64t22.5 -98.5q0 -304 -363 -304q-69 0 -130 12.5t-116 41t-87.5 82t-32.5 127.5q0 165 182 225v4q-67 41 -67 126q0 109 63 137v4q-72 24 -119.5 108.5t-47.5 165.5q0 139 95 231.5t235 92.5q96 0 178 -47
-q98 0 218 47zM1123 220h-222q4 45 4 134v609q0 94 -4 128h222q-4 -33 -4 -124v-613q0 -89 4 -134zM1724 442v-196q-71 -39 -174 -39q-62 0 -107 20t-70 50t-39.5 78t-18.5 92t-4 103v351h2v4q-7 0 -19 1t-18 1q-21 0 -59 -6v190h96v76q0 54 -6 89h227q-6 -41 -6 -165h171
-v-190q-15 0 -43.5 2t-42.5 2h-85v-365q0 -131 87 -131q61 0 109 33zM1148 1389q0 -58 -39 -101.5t-96 -43.5q-58 0 -98 43.5t-40 101.5q0 59 39.5 103t98.5 44q58 0 96.5 -44.5t38.5 -102.5z" />
-    <glyph glyph-name="_439" unicode="&#xf1d4;" 
-d="M809 532l266 499h-112l-157 -312q-24 -48 -44 -92l-42 92l-155 312h-120l263 -493v-324h101v318zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-    <glyph glyph-name="uniF1D5" unicode="&#xf1d5;" horiz-adv-x="1280" 
-d="M842 964q0 -80 -57 -136.5t-136 -56.5q-60 0 -111 35q-62 -67 -115 -146q-247 -371 -202 -859q1 -22 -12.5 -38.5t-34.5 -18.5h-5q-20 0 -35 13.5t-17 33.5q-14 126 -3.5 247.5t29.5 217t54 186t69 155.5t74 125q61 90 132 165q-16 35 -16 77q0 80 56.5 136.5t136.5 56.5
-t136.5 -56.5t56.5 -136.5zM1223 953q0 -158 -78 -292t-212.5 -212t-292.5 -78q-64 0 -131 14q-21 5 -32.5 23.5t-6.5 39.5q5 20 23 31.5t39 7.5q51 -13 108 -13q97 0 186 38t153 102t102 153t38 186t-38 186t-102 153t-153 102t-186 38t-186 -38t-153 -102t-102 -153
-t-38 -186q0 -114 52 -218q10 -20 3.5 -40t-25.5 -30t-39.5 -3t-30.5 26q-64 123 -64 265q0 119 46.5 227t124.5 186t186 124t226 46q158 0 292.5 -78t212.5 -212.5t78 -292.5z" />
-    <glyph glyph-name="uniF1D6" unicode="&#xf1d6;" horiz-adv-x="1792" 
-d="M270 730q-8 19 -8 52q0 20 11 49t24 45q-1 22 7.5 53t22.5 43q0 139 92.5 288.5t217.5 209.5q139 66 324 66q133 0 266 -55q49 -21 90 -48t71 -56t55 -68t42 -74t32.5 -84.5t25.5 -89.5t22 -98l1 -5q55 -83 55 -150q0 -14 -9 -40t-9 -38q0 -1 1.5 -3.5t3.5 -5t2 -3.5
-q77 -114 120.5 -214.5t43.5 -208.5q0 -43 -19.5 -100t-55.5 -57q-9 0 -19.5 7.5t-19 17.5t-19 26t-16 26.5t-13.5 26t-9 17.5q-1 1 -3 1l-5 -4q-59 -154 -132 -223q20 -20 61.5 -38.5t69 -41.5t35.5 -65q-2 -4 -4 -16t-7 -18q-64 -97 -302 -97q-53 0 -110.5 9t-98 20
-t-104.5 30q-15 5 -23 7q-14 4 -46 4.5t-40 1.5q-41 -45 -127.5 -65t-168.5 -20q-35 0 -69 1.5t-93 9t-101 20.5t-74.5 40t-32.5 64q0 40 10 59.5t41 48.5q11 2 40.5 13t49.5 12q4 0 14 2q2 2 2 4l-2 3q-48 11 -108 105.5t-73 156.5l-5 3q-4 0 -12 -20q-18 -41 -54.5 -74.5
-t-77.5 -37.5h-1q-4 0 -6 4.5t-5 5.5q-23 54 -23 100q0 275 252 466z" />
-    <glyph glyph-name="uniF1D7" unicode="&#xf1d7;" horiz-adv-x="2048" 
-d="M580 1075q0 41 -25 66t-66 25q-43 0 -76 -25.5t-33 -65.5q0 -39 33 -64.5t76 -25.5q41 0 66 24.5t25 65.5zM1323 568q0 28 -25.5 50t-65.5 22q-27 0 -49.5 -22.5t-22.5 -49.5q0 -28 22.5 -50.5t49.5 -22.5q40 0 65.5 22t25.5 51zM1087 1075q0 41 -24.5 66t-65.5 25
-q-43 0 -76 -25.5t-33 -65.5q0 -39 33 -64.5t76 -25.5q41 0 65.5 24.5t24.5 65.5zM1722 568q0 28 -26 50t-65 22q-27 0 -49.5 -22.5t-22.5 -49.5q0 -28 22.5 -50.5t49.5 -22.5q39 0 65 22t26 51zM1456 965q-31 4 -70 4q-169 0 -311 -77t-223.5 -208.5t-81.5 -287.5
-q0 -78 23 -152q-35 -3 -68 -3q-26 0 -50 1.5t-55 6.5t-44.5 7t-54.5 10.5t-50 10.5l-253 -127l72 218q-290 203 -290 490q0 169 97.5 311t264 223.5t363.5 81.5q176 0 332.5 -66t262 -182.5t136.5 -260.5zM2048 404q0 -117 -68.5 -223.5t-185.5 -193.5l55 -181l-199 109
-q-150 -37 -218 -37q-169 0 -311 70.5t-223.5 191.5t-81.5 264t81.5 264t223.5 191.5t311 70.5q161 0 303 -70.5t227.5 -192t85.5 -263.5z" />
-    <glyph glyph-name="_443" unicode="&#xf1d8;" horiz-adv-x="1792" 
-d="M1764 1525q33 -24 27 -64l-256 -1536q-5 -29 -32 -45q-14 -8 -31 -8q-11 0 -24 5l-453 185l-242 -295q-18 -23 -49 -23q-13 0 -22 4q-19 7 -30.5 23.5t-11.5 36.5v349l864 1059l-1069 -925l-395 162q-37 14 -40 55q-2 40 32 59l1664 960q15 9 32 9q20 0 36 -11z" />
-    <glyph glyph-name="_444" unicode="&#xf1d9;" horiz-adv-x="1792" 
-d="M1764 1525q33 -24 27 -64l-256 -1536q-5 -29 -32 -45q-14 -8 -31 -8q-11 0 -24 5l-527 215l-298 -327q-18 -21 -47 -21q-14 0 -23 4q-19 7 -30 23.5t-11 36.5v452l-472 193q-37 14 -40 55q-3 39 32 59l1664 960q35 21 68 -2zM1422 26l221 1323l-1434 -827l336 -137
-l863 639l-478 -797z" />
-    <glyph glyph-name="_445" unicode="&#xf1da;" 
-d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61q-172 0 -327 72.5t-264 204.5q-7 10 -6.5 22.5t8.5 20.5l137 138q10 9 25 9q16 -2 23 -12q73 -95 179 -147t225 -52q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5
-t-163.5 109.5t-198.5 40.5q-98 0 -188 -35.5t-160 -101.5l137 -138q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l130 -129q107 101 244.5 156.5t284.5 55.5q156 0 298 -61t245 -164t164 -245t61 -298zM896 928v-448q0 -14 -9 -23
-t-23 -9h-320q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23z" />
-    <glyph glyph-name="_446" unicode="&#xf1db;" 
-d="M768 1280q-130 0 -248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5t-51 248.5t-136.5 204t-204 136.5t-248.5 51zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103
-t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-    <glyph glyph-name="_447" unicode="&#xf1dc;" horiz-adv-x="1792" 
-d="M1682 -128q-44 0 -132.5 3.5t-133.5 3.5q-44 0 -132 -3.5t-132 -3.5q-24 0 -37 20.5t-13 45.5q0 31 17 46t39 17t51 7t45 15q33 21 33 140l-1 391q0 21 -1 31q-13 4 -50 4h-675q-38 0 -51 -4q-1 -10 -1 -31l-1 -371q0 -142 37 -164q16 -10 48 -13t57 -3.5t45 -15
-t20 -45.5q0 -26 -12.5 -48t-36.5 -22q-47 0 -139.5 3.5t-138.5 3.5q-43 0 -128 -3.5t-127 -3.5q-23 0 -35.5 21t-12.5 45q0 30 15.5 45t36 17.5t47.5 7.5t42 15q33 23 33 143l-1 57v813q0 3 0.5 26t0 36.5t-1.5 38.5t-3.5 42t-6.5 36.5t-11 31.5t-16 18q-15 10 -45 12t-53 2
-t-41 14t-18 45q0 26 12 48t36 22q46 0 138.5 -3.5t138.5 -3.5q42 0 126.5 3.5t126.5 3.5q25 0 37.5 -22t12.5 -48q0 -30 -17 -43.5t-38.5 -14.5t-49.5 -4t-43 -13q-35 -21 -35 -160l1 -320q0 -21 1 -32q13 -3 39 -3h699q25 0 38 3q1 11 1 32l1 320q0 139 -35 160
-q-18 11 -58.5 12.5t-66 13t-25.5 49.5q0 26 12.5 48t37.5 22q44 0 132 -3.5t132 -3.5q43 0 129 3.5t129 3.5q25 0 37.5 -22t12.5 -48q0 -30 -17.5 -44t-40 -14.5t-51.5 -3t-44 -12.5q-35 -23 -35 -161l1 -943q0 -119 34 -140q16 -10 46 -13.5t53.5 -4.5t41.5 -15.5t18 -44.5
-q0 -26 -12 -48t-36 -22z" />
-    <glyph glyph-name="_448" unicode="&#xf1dd;" horiz-adv-x="1280" 
-d="M1278 1347v-73q0 -29 -18.5 -61t-42.5 -32q-50 0 -54 -1q-26 -6 -32 -31q-3 -11 -3 -64v-1152q0 -25 -18 -43t-43 -18h-108q-25 0 -43 18t-18 43v1218h-143v-1218q0 -25 -17.5 -43t-43.5 -18h-108q-26 0 -43.5 18t-17.5 43v496q-147 12 -245 59q-126 58 -192 179
-q-64 117 -64 259q0 166 88 286q88 118 209 159q111 37 417 37h479q25 0 43 -18t18 -43z" />
-    <glyph glyph-name="_449" unicode="&#xf1de;" 
-d="M352 128v-128h-352v128h352zM704 256q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h256zM864 640v-128h-864v128h864zM224 1152v-128h-224v128h224zM1536 128v-128h-736v128h736zM576 1280q26 0 45 -19t19 -45v-256
-q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h256zM1216 768q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h256zM1536 640v-128h-224v128h224zM1536 1152v-128h-864v128h864z" />
-    <glyph glyph-name="uniF1E0" unicode="&#xf1e0;" 
-d="M1216 512q133 0 226.5 -93.5t93.5 -226.5t-93.5 -226.5t-226.5 -93.5t-226.5 93.5t-93.5 226.5q0 12 2 34l-360 180q-92 -86 -218 -86q-133 0 -226.5 93.5t-93.5 226.5t93.5 226.5t226.5 93.5q126 0 218 -86l360 180q-2 22 -2 34q0 133 93.5 226.5t226.5 93.5
-t226.5 -93.5t93.5 -226.5t-93.5 -226.5t-226.5 -93.5q-126 0 -218 86l-360 -180q2 -22 2 -34t-2 -34l360 -180q92 86 218 86z" />
-    <glyph glyph-name="_451" unicode="&#xf1e1;" 
-d="M1280 341q0 88 -62.5 151t-150.5 63q-84 0 -145 -58l-241 120q2 16 2 23t-2 23l241 120q61 -58 145 -58q88 0 150.5 63t62.5 151t-62.5 150.5t-150.5 62.5t-151 -62.5t-63 -150.5q0 -7 2 -23l-241 -120q-62 57 -145 57q-88 0 -150.5 -62.5t-62.5 -150.5t62.5 -150.5
-t150.5 -62.5q83 0 145 57l241 -120q-2 -16 -2 -23q0 -88 63 -150.5t151 -62.5t150.5 62.5t62.5 150.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-    <glyph glyph-name="_452" unicode="&#xf1e2;" horiz-adv-x="1792" 
-d="M571 947q-10 25 -34 35t-49 0q-108 -44 -191 -127t-127 -191q-10 -25 0 -49t35 -34q13 -5 24 -5q42 0 60 40q34 84 98.5 148.5t148.5 98.5q25 11 35 35t0 49zM1513 1303l46 -46l-244 -243l68 -68q19 -19 19 -45.5t-19 -45.5l-64 -64q89 -161 89 -343q0 -143 -55.5 -273.5
-t-150 -225t-225 -150t-273.5 -55.5t-273.5 55.5t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5q182 0 343 -89l64 64q19 19 45.5 19t45.5 -19l68 -68zM1521 1359q-10 -10 -22 -10q-13 0 -23 10l-91 90q-9 10 -9 23t9 23q10 9 23 9t23 -9l90 -91
-q10 -9 10 -22.5t-10 -22.5zM1751 1129q-11 -9 -23 -9t-23 9l-90 91q-10 9 -10 22.5t10 22.5q9 10 22.5 10t22.5 -10l91 -90q9 -10 9 -23t-9 -23zM1792 1312q0 -14 -9 -23t-23 -9h-96q-14 0 -23 9t-9 23t9 23t23 9h96q14 0 23 -9t9 -23zM1600 1504v-96q0 -14 -9 -23t-23 -9
-t-23 9t-9 23v96q0 14 9 23t23 9t23 -9t9 -23zM1751 1449l-91 -90q-10 -10 -22 -10q-13 0 -23 10q-10 9 -10 22.5t10 22.5l90 91q10 9 23 9t23 -9q9 -10 9 -23t-9 -23z" />
-    <glyph glyph-name="_453" unicode="&#xf1e3;" horiz-adv-x="1792" 
-d="M609 720l287 208l287 -208l-109 -336h-355zM896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM1515 186q149 203 149 454v3l-102 -89l-240 224l63 323
-l134 -12q-150 206 -389 282l53 -124l-287 -159l-287 159l53 124q-239 -76 -389 -282l135 12l62 -323l-240 -224l-102 89v-3q0 -251 149 -454l30 132l326 -40l139 -298l-116 -69q117 -39 240 -39t240 39l-116 69l139 298l326 40z" />
-    <glyph glyph-name="_454" unicode="&#xf1e4;" horiz-adv-x="1792" 
-d="M448 224v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM256 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM832 224v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23
-v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM640 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM66 768q-28 0 -47 19t-19 46v129h514v-129q0 -27 -19 -46t-46 -19h-383zM1216 224v-192q0 -14 -9 -23t-23 -9h-192
-q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1024 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1600 224v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23
-zM1408 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 1016v-13h-514v10q0 104 -382 102q-382 -1 -382 -102v-10h-514v13q0 17 8.5 43t34 64t65.5 75.5t110.5 76t160 67.5t224 47.5t293.5 18.5t293 -18.5t224 -47.5
-t160.5 -67.5t110.5 -76t65.5 -75.5t34 -64t8.5 -43zM1792 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 962v-129q0 -27 -19 -46t-46 -19h-384q-27 0 -46 19t-19 46v129h514z" />
-    <glyph glyph-name="_455" unicode="&#xf1e5;" horiz-adv-x="1792" 
-d="M704 1216v-768q0 -26 -19 -45t-45 -19v-576q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v512l249 873q7 23 31 23h424zM1024 1216v-704h-256v704h256zM1792 320v-512q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v576q-26 0 -45 19t-19 45v768h424q24 0 31 -23z
-M736 1504v-224h-352v224q0 14 9 23t23 9h288q14 0 23 -9t9 -23zM1408 1504v-224h-352v224q0 14 9 23t23 9h288q14 0 23 -9t9 -23z" />
-    <glyph glyph-name="_456" unicode="&#xf1e6;" horiz-adv-x="1792" 
-d="M1755 1083q37 -38 37 -90.5t-37 -90.5l-401 -400l150 -150l-160 -160q-163 -163 -389.5 -186.5t-411.5 100.5l-362 -362h-181v181l362 362q-124 185 -100.5 411.5t186.5 389.5l160 160l150 -150l400 401q38 37 91 37t90 -37t37 -90.5t-37 -90.5l-400 -401l234 -234
-l401 400q38 37 91 37t90 -37z" />
-    <glyph glyph-name="_457" unicode="&#xf1e7;" horiz-adv-x="1792" 
-d="M873 796q0 -83 -63.5 -142.5t-152.5 -59.5t-152.5 59.5t-63.5 142.5q0 84 63.5 143t152.5 59t152.5 -59t63.5 -143zM1375 796q0 -83 -63 -142.5t-153 -59.5q-89 0 -152.5 59.5t-63.5 142.5q0 84 63.5 143t152.5 59q90 0 153 -59t63 -143zM1600 616v667q0 87 -32 123.5
-t-111 36.5h-1112q-83 0 -112.5 -34t-29.5 -126v-673q43 -23 88.5 -40t81 -28t81 -18.5t71 -11t70 -4t58.5 -0.5t56.5 2t44.5 2q68 1 95 -27q6 -6 10 -9q26 -25 61 -51q7 91 118 87q5 0 36.5 -1.5t43 -2t45.5 -1t53 1t54.5 4.5t61 8.5t62 13.5t67 19.5t67.5 27t72 34.5z
-M1763 621q-121 -149 -372 -252q84 -285 -23 -465q-66 -113 -183 -148q-104 -32 -182 15q-86 51 -82 164l-1 326v1q-8 2 -24.5 6t-23.5 5l-1 -338q4 -114 -83 -164q-79 -47 -183 -15q-117 36 -182 150q-105 180 -22 463q-251 103 -372 252q-25 37 -4 63t60 -1q4 -2 11.5 -7
-t10.5 -8v694q0 72 47 123t114 51h1257q67 0 114 -51t47 -123v-694l21 15q39 27 60 1t-4 -63z" />
-    <glyph glyph-name="_458" unicode="&#xf1e8;" horiz-adv-x="1792" 
-d="M896 1102v-434h-145v434h145zM1294 1102v-434h-145v434h145zM1294 342l253 254v795h-1194v-1049h326v-217l217 217h398zM1692 1536v-1013l-434 -434h-326l-217 -217h-217v217h-398v1158l109 289h1483z" />
-    <glyph glyph-name="_459" unicode="&#xf1e9;" 
-d="M773 217v-127q-1 -292 -6 -305q-12 -32 -51 -40q-54 -9 -181.5 38t-162.5 89q-13 15 -17 36q-1 12 4 26q4 10 34 47t181 216q1 0 60 70q15 19 39.5 24.5t49.5 -3.5q24 -10 37.5 -29t12.5 -42zM624 468q-3 -55 -52 -70l-120 -39q-275 -88 -292 -88q-35 2 -54 36
-q-12 25 -17 75q-8 76 1 166.5t30 124.5t56 32q13 0 202 -77q71 -29 115 -47l84 -34q23 -9 35.5 -30.5t11.5 -48.5zM1450 171q-7 -54 -91.5 -161t-135.5 -127q-37 -14 -63 7q-14 10 -184 287l-47 77q-14 21 -11.5 46t19.5 46q35 43 83 26q1 -1 119 -40q203 -66 242 -79.5
-t47 -20.5q28 -22 22 -61zM778 803q5 -102 -54 -122q-58 -17 -114 71l-378 598q-8 35 19 62q41 43 207.5 89.5t224.5 31.5q40 -10 49 -45q3 -18 22 -305.5t24 -379.5zM1440 695q3 -39 -26 -59q-15 -10 -329 -86q-67 -15 -91 -23l1 2q-23 -6 -46 4t-37 32q-30 47 0 87
-q1 1 75 102q125 171 150 204t34 39q28 19 65 2q48 -23 123 -133.5t81 -167.5v-3z" />
-    <glyph glyph-name="_460" unicode="&#xf1ea;" horiz-adv-x="2048" 
-d="M1024 1024h-384v-384h384v384zM1152 384v-128h-640v128h640zM1152 1152v-640h-640v640h640zM1792 384v-128h-512v128h512zM1792 640v-128h-512v128h512zM1792 896v-128h-512v128h512zM1792 1152v-128h-512v128h512zM256 192v960h-128v-960q0 -26 19 -45t45 -19t45 19
-t19 45zM1920 192v1088h-1536v-1088q0 -33 -11 -64h1483q26 0 45 19t19 45zM2048 1408v-1216q0 -80 -56 -136t-136 -56h-1664q-80 0 -136 56t-56 136v1088h256v128h1792z" />
-    <glyph glyph-name="_461" unicode="&#xf1eb;" horiz-adv-x="2048" 
-d="M1024 13q-20 0 -93 73.5t-73 93.5q0 32 62.5 54t103.5 22t103.5 -22t62.5 -54q0 -20 -73 -93.5t-93 -73.5zM1294 284q-2 0 -40 25t-101.5 50t-128.5 25t-128.5 -25t-101 -50t-40.5 -25q-18 0 -93.5 75t-75.5 93q0 13 10 23q78 77 196 121t233 44t233 -44t196 -121
-q10 -10 10 -23q0 -18 -75.5 -93t-93.5 -75zM1567 556q-11 0 -23 8q-136 105 -252 154.5t-268 49.5q-85 0 -170.5 -22t-149 -53t-113.5 -62t-79 -53t-31 -22q-17 0 -92 75t-75 93q0 12 10 22q132 132 320 205t380 73t380 -73t320 -205q10 -10 10 -22q0 -18 -75 -93t-92 -75z
-M1838 827q-11 0 -22 9q-179 157 -371.5 236.5t-420.5 79.5t-420.5 -79.5t-371.5 -236.5q-11 -9 -22 -9q-17 0 -92.5 75t-75.5 93q0 13 10 23q187 186 445 288t527 102t527 -102t445 -288q10 -10 10 -23q0 -18 -75.5 -93t-92.5 -75z" />
-    <glyph glyph-name="_462" unicode="&#xf1ec;" horiz-adv-x="1792" 
-d="M384 0q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM768 0q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM384 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5
-t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1152 0q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM768 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5
-t37.5 90.5zM384 768q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1152 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM768 768q0 53 -37.5 90.5t-90.5 37.5
-t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1536 0v384q0 52 -38 90t-90 38t-90 -38t-38 -90v-384q0 -52 38 -90t90 -38t90 38t38 90zM1152 768q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5z
-M1536 1088v256q0 26 -19 45t-45 19h-1280q-26 0 -45 -19t-19 -45v-256q0 -26 19 -45t45 -19h1280q26 0 45 19t19 45zM1536 768q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 1408v-1536q0 -52 -38 -90t-90 -38
-h-1408q-52 0 -90 38t-38 90v1536q0 52 38 90t90 38h1408q52 0 90 -38t38 -90z" />
-    <glyph glyph-name="_463" unicode="&#xf1ed;" 
-d="M1519 890q18 -84 -4 -204q-87 -444 -565 -444h-44q-25 0 -44 -16.5t-24 -42.5l-4 -19l-55 -346l-2 -15q-5 -26 -24.5 -42.5t-44.5 -16.5h-251q-21 0 -33 15t-9 36q9 56 26.5 168t26.5 168t27 167.5t27 167.5q5 37 43 37h131q133 -2 236 21q175 39 287 144q102 95 155 246
-q24 70 35 133q1 6 2.5 7.5t3.5 1t6 -3.5q79 -59 98 -162zM1347 1172q0 -107 -46 -236q-80 -233 -302 -315q-113 -40 -252 -42q0 -1 -90 -1l-90 1q-100 0 -118 -96q-2 -8 -85 -530q-1 -10 -12 -10h-295q-22 0 -36.5 16.5t-11.5 38.5l232 1471q5 29 27.5 48t51.5 19h598
-q34 0 97.5 -13t111.5 -32q107 -41 163.5 -123t56.5 -196z" />
-    <glyph glyph-name="_464" unicode="&#xf1ee;" horiz-adv-x="1792" 
-d="M441 864q33 0 52 -26q266 -364 362 -774h-446q-127 441 -367 749q-12 16 -3 33.5t29 17.5h373zM1000 507q-49 -199 -125 -393q-79 310 -256 594q40 221 44 449q211 -340 337 -650zM1099 1216q235 -324 384.5 -698.5t184.5 -773.5h-451q-41 665 -553 1472h435zM1792 640
-q0 -424 -101 -812q-67 560 -359 1083q-25 301 -106 584q-4 16 5.5 28.5t25.5 12.5h359q21 0 38.5 -13t22.5 -33q115 -409 115 -850z" />
-    <glyph glyph-name="uniF1F0" unicode="&#xf1f0;" horiz-adv-x="2304" 
-d="M1975 546h-138q14 37 66 179l3 9q4 10 10 26t9 26l12 -55zM531 611l-58 295q-11 54 -75 54h-268l-2 -13q311 -79 403 -336zM710 960l-162 -438l-17 89q-26 70 -85 129.5t-131 88.5l135 -510h175l261 641h-176zM849 318h166l104 642h-166zM1617 944q-69 27 -149 27
-q-123 0 -201 -59t-79 -153q-1 -102 145 -174q48 -23 67 -41t19 -39q0 -30 -30 -46t-69 -16q-86 0 -156 33l-22 11l-23 -144q74 -34 185 -34q130 -1 208.5 59t80.5 160q0 106 -140 174q-49 25 -71 42t-22 38q0 22 24.5 38.5t70.5 16.5q70 1 124 -24l15 -8zM2042 960h-128
-q-65 0 -87 -54l-246 -588h174l35 96h212q5 -22 20 -96h154zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" />
-    <glyph glyph-name="_466" unicode="&#xf1f1;" horiz-adv-x="2304" 
-d="M1119 1195q-128 85 -281 85q-103 0 -197.5 -40.5t-162.5 -108.5t-108.5 -162t-40.5 -197q0 -104 40.5 -198t108.5 -162t162 -108.5t198 -40.5q153 0 281 85q-131 107 -178 265.5t0.5 316.5t177.5 265zM1152 1171q-126 -99 -172 -249.5t-0.5 -300.5t172.5 -249
-q127 99 172.5 249t-0.5 300.5t-172 249.5zM1185 1195q130 -107 177.5 -265.5t0.5 -317t-178 -264.5q128 -85 281 -85q104 0 198 40.5t162 108.5t108.5 162t40.5 198q0 103 -40.5 197t-108.5 162t-162.5 108.5t-197.5 40.5q-153 0 -281 -85zM1926 473h7v3h-17v-3h7v-17h3v17z
-M1955 456h4v20h-5l-6 -13l-6 13h-5v-20h3v15l6 -13h4l5 13v-15zM1947 16v-2h-2h-3v3h3h2v-1zM1947 7h3l-4 5h2l1 1q1 1 1 3t-1 3l-1 1h-3h-6v-13h3v5h1zM685 75q0 19 11 31t30 12q18 0 29 -12.5t11 -30.5q0 -19 -11 -31t-29 -12q-19 0 -30 12t-11 31zM1158 119q30 0 35 -32
-h-70q5 32 35 32zM1514 75q0 19 11 31t29 12t29.5 -12.5t11.5 -30.5q0 -19 -11 -31t-30 -12q-18 0 -29 12t-11 31zM1786 75q0 18 11.5 30.5t29.5 12.5t29.5 -12.5t11.5 -30.5q0 -19 -11.5 -31t-29.5 -12t-29.5 12.5t-11.5 30.5zM1944 3q-2 0 -4 1q-1 0 -3 2t-2 3q-1 2 -1 4
-q0 3 1 4q0 2 2 4l1 1q2 0 2 1q2 1 4 1q3 0 4 -1l4 -2l2 -4v-1q1 -2 1 -3l-1 -1v-3t-1 -1l-1 -2q-2 -2 -4 -2q-1 -1 -4 -1zM599 7h30v85q0 24 -14.5 38.5t-39.5 15.5q-32 0 -47 -24q-14 24 -45 24q-24 0 -39 -20v16h-30v-135h30v75q0 36 33 36q30 0 30 -36v-75h29v75
-q0 36 33 36q30 0 30 -36v-75zM765 7h29v68v67h-29v-16q-17 20 -43 20q-29 0 -48 -20t-19 -51t19 -51t48 -20q28 0 43 20v-17zM943 48q0 34 -47 40l-14 2q-23 4 -23 14q0 15 25 15q23 0 43 -11l12 24q-22 14 -55 14q-26 0 -41 -12t-15 -32q0 -33 47 -39l13 -2q24 -4 24 -14
-q0 -17 -31 -17q-25 0 -45 14l-13 -23q25 -17 58 -17q29 0 45.5 12t16.5 32zM1073 14l-8 25q-13 -7 -26 -7q-19 0 -19 22v61h48v27h-48v41h-30v-41h-28v-27h28v-61q0 -50 47 -50q21 0 36 10zM1159 146q-29 0 -48 -20t-19 -51q0 -32 19.5 -51.5t49.5 -19.5q33 0 55 19l-14 22
-q-18 -15 -39 -15q-34 0 -41 33h101v12q0 32 -18 51.5t-46 19.5zM1318 146q-23 0 -35 -20v16h-30v-135h30v76q0 35 29 35q10 0 18 -4l9 28q-9 4 -21 4zM1348 75q0 -31 19.5 -51t52.5 -20q29 0 48 16l-14 24q-18 -13 -35 -12q-18 0 -29.5 12t-11.5 31t11.5 31t29.5 12
-q19 0 35 -12l14 24q-20 16 -48 16q-33 0 -52.5 -20t-19.5 -51zM1593 7h30v68v67h-30v-16q-15 20 -42 20q-29 0 -48.5 -20t-19.5 -51t19.5 -51t48.5 -20q28 0 42 20v-17zM1726 146q-23 0 -35 -20v16h-29v-135h29v76q0 35 29 35q10 0 18 -4l9 28q-8 4 -21 4zM1866 7h29v68v122
-h-29v-71q-15 20 -43 20t-47.5 -20.5t-19.5 -50.5t19.5 -50.5t47.5 -20.5q29 0 43 20v-17zM1944 27l-2 -1h-3q-2 -1 -4 -3q-3 -1 -3 -4q-1 -2 -1 -6q0 -3 1 -5q0 -2 3 -4q2 -2 4 -3t5 -1q4 0 6 1q0 1 2 2l2 1q1 1 3 4q1 2 1 5q0 4 -1 6q-1 1 -3 4q0 1 -2 2l-2 1q-1 0 -3 0.5
-t-3 0.5zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" />
-    <glyph glyph-name="_467" unicode="&#xf1f2;" horiz-adv-x="2304" 
-d="M313 759q0 -51 -36 -84q-29 -26 -89 -26h-17v220h17q61 0 89 -27q36 -31 36 -83zM2089 824q0 -52 -64 -52h-19v101h20q63 0 63 -49zM380 759q0 74 -50 120.5t-129 46.5h-95v-333h95q74 0 119 38q60 51 60 128zM410 593h65v333h-65v-333zM730 694q0 40 -20.5 62t-75.5 42
-q-29 10 -39.5 19t-10.5 23q0 16 13.5 26.5t34.5 10.5q29 0 53 -27l34 44q-41 37 -98 37q-44 0 -74 -27.5t-30 -67.5q0 -35 18 -55.5t64 -36.5q37 -13 45 -19q19 -12 19 -34q0 -20 -14 -33.5t-36 -13.5q-48 0 -71 44l-42 -40q44 -64 115 -64q51 0 83 30.5t32 79.5zM1008 604
-v77q-37 -37 -78 -37q-49 0 -80.5 32.5t-31.5 82.5q0 48 31.5 81.5t77.5 33.5q43 0 81 -38v77q-40 20 -80 20q-74 0 -125.5 -50.5t-51.5 -123.5t51 -123.5t125 -50.5q42 0 81 19zM2240 0v527q-65 -40 -144.5 -84t-237.5 -117t-329.5 -137.5t-417.5 -134.5t-504 -118h1569
-q26 0 45 19t19 45zM1389 757q0 75 -53 128t-128 53t-128 -53t-53 -128t53 -128t128 -53t128 53t53 128zM1541 584l144 342h-71l-90 -224l-89 224h-71l142 -342h35zM1714 593h184v56h-119v90h115v56h-115v74h119v57h-184v-333zM2105 593h80l-105 140q76 16 76 94q0 47 -31 73
-t-87 26h-97v-333h65v133h9zM2304 1274v-1268q0 -56 -38.5 -95t-93.5 -39h-2040q-55 0 -93.5 39t-38.5 95v1268q0 56 38.5 95t93.5 39h2040q55 0 93.5 -39t38.5 -95z" />
-    <glyph glyph-name="f1f3" unicode="&#xf1f3;" horiz-adv-x="2304" 
-d="M119 854h89l-45 108zM740 328l74 79l-70 79h-163v-49h142v-55h-142v-54h159zM898 406l99 -110v217zM1186 453q0 33 -40 33h-84v-69h83q41 0 41 36zM1475 457q0 29 -42 29h-82v-61h81q43 0 43 32zM1197 923q0 29 -42 29h-82v-60h81q43 0 43 31zM1656 854h89l-44 108z
-M699 1009v-271h-66v212l-94 -212h-57l-94 212v-212h-132l-25 60h-135l-25 -60h-70l116 271h96l110 -257v257h106l85 -184l77 184h108zM1255 453q0 -20 -5.5 -35t-14 -25t-22.5 -16.5t-26 -10t-31.5 -4.5t-31.5 -1t-32.5 0.5t-29.5 0.5v-91h-126l-80 90l-83 -90h-256v271h260
-l80 -89l82 89h207q109 0 109 -89zM964 794v-56h-217v271h217v-57h-152v-49h148v-55h-148v-54h152zM2304 235v-229q0 -55 -38.5 -94.5t-93.5 -39.5h-2040q-55 0 -93.5 39.5t-38.5 94.5v678h111l25 61h55l25 -61h218v46l19 -46h113l20 47v-47h541v99l10 1q10 0 10 -14v-86h279
-v23q23 -12 55 -18t52.5 -6.5t63 0.5t51.5 1l25 61h56l25 -61h227v58l34 -58h182v378h-180v-44l-25 44h-185v-44l-23 44h-249q-69 0 -109 -22v22h-172v-22q-24 22 -73 22h-628l-43 -97l-43 97h-198v-44l-22 44h-169l-78 -179v391q0 55 38.5 94.5t93.5 39.5h2040
-q55 0 93.5 -39.5t38.5 -94.5v-678h-120q-51 0 -81 -22v22h-177q-55 0 -78 -22v22h-316v-22q-31 22 -87 22h-209v-22q-23 22 -91 22h-234l-54 -58l-50 58h-349v-378h343l55 59l52 -59h211v89h21q59 0 90 13v-102h174v99h8q8 0 10 -2t2 -10v-87h529q57 0 88 24v-24h168
-q60 0 95 17zM1546 469q0 -23 -12 -43t-34 -29q25 -9 34 -26t9 -46v-54h-65v45q0 33 -12 43.5t-46 10.5h-69v-99h-65v271h154q48 0 77 -15t29 -58zM1269 936q0 -24 -12.5 -44t-33.5 -29q26 -9 34.5 -25.5t8.5 -46.5v-53h-65q0 9 0.5 26.5t0 25t-3 18.5t-8.5 16t-17.5 8.5
-t-29.5 3.5h-70v-98h-64v271l153 -1q49 0 78 -14.5t29 -57.5zM1798 327v-56h-216v271h216v-56h-151v-49h148v-55h-148v-54zM1372 1009v-271h-66v271h66zM2065 357q0 -86 -102 -86h-126v58h126q34 0 34 25q0 16 -17 21t-41.5 5t-49.5 3.5t-42 22.5t-17 55q0 39 26 60t66 21
-h130v-57h-119q-36 0 -36 -25q0 -16 17.5 -20.5t42 -4t49 -2.5t42 -21.5t17.5 -54.5zM2304 407v-101q-24 -35 -88 -35h-125v58h125q33 0 33 25q0 13 -12.5 19t-31 5.5t-40 2t-40 8t-31 24t-12.5 48.5q0 39 26.5 60t66.5 21h129v-57h-118q-36 0 -36 -25q0 -20 29 -22t68.5 -5
-t56.5 -26zM2139 1008v-270h-92l-122 203v-203h-132l-26 60h-134l-25 -60h-75q-129 0 -129 133q0 138 133 138h63v-59q-7 0 -28 1t-28.5 0.5t-23 -2t-21.5 -6.5t-14.5 -13.5t-11.5 -23t-3 -33.5q0 -38 13.5 -58t49.5 -20h29l92 213h97l109 -256v256h99l114 -188v188h66z" />
-    <glyph glyph-name="_469" unicode="&#xf1f4;" horiz-adv-x="2304" 
-d="M745 630q0 -37 -25.5 -61.5t-62.5 -24.5q-29 0 -46.5 16t-17.5 44q0 37 25 62.5t62 25.5q28 0 46.5 -16.5t18.5 -45.5zM1530 779q0 -42 -22 -57t-66 -15l-32 -1l17 107q2 11 13 11h18q22 0 35 -2t25 -12.5t12 -30.5zM1881 630q0 -36 -25.5 -61t-61.5 -25q-29 0 -47 16
-t-18 44q0 37 25 62.5t62 25.5q28 0 46.5 -16.5t18.5 -45.5zM513 801q0 59 -38.5 85.5t-100.5 26.5h-160q-19 0 -21 -19l-65 -408q-1 -6 3 -11t10 -5h76q20 0 22 19l18 110q1 8 7 13t15 6.5t17 1.5t19 -1t14 -1q86 0 135 48.5t49 134.5zM822 489l41 261q1 6 -3 11t-10 5h-76
-q-14 0 -17 -33q-27 40 -95 40q-72 0 -122.5 -54t-50.5 -127q0 -59 34.5 -94t92.5 -35q28 0 58 12t48 32q-4 -12 -4 -21q0 -16 13 -16h69q19 0 22 19zM1269 752q0 5 -4 9.5t-9 4.5h-77q-11 0 -18 -10l-106 -156l-44 150q-5 16 -22 16h-75q-5 0 -9 -4.5t-4 -9.5q0 -2 19.5 -59
-t42 -123t23.5 -70q-82 -112 -82 -120q0 -13 13 -13h77q11 0 18 10l255 368q2 2 2 7zM1649 801q0 59 -38.5 85.5t-100.5 26.5h-159q-20 0 -22 -19l-65 -408q-1 -6 3 -11t10 -5h82q12 0 16 13l18 116q1 8 7 13t15 6.5t17 1.5t19 -1t14 -1q86 0 135 48.5t49 134.5zM1958 489
-l41 261q1 6 -3 11t-10 5h-76q-14 0 -17 -33q-26 40 -95 40q-72 0 -122.5 -54t-50.5 -127q0 -59 34.5 -94t92.5 -35q29 0 59 12t47 32q0 -1 -2 -9t-2 -12q0 -16 13 -16h69q19 0 22 19zM2176 898v1q0 14 -13 14h-74q-11 0 -13 -11l-65 -416l-1 -2q0 -5 4 -9.5t10 -4.5h66
-q19 0 21 19zM392 764q-5 -35 -26 -46t-60 -11l-33 -1l17 107q2 11 13 11h19q40 0 58 -11.5t12 -48.5zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" />
-    <glyph glyph-name="_470" unicode="&#xf1f5;" horiz-adv-x="2304" 
-d="M1597 633q0 -69 -21 -106q-19 -35 -52 -35q-23 0 -41 9v224q29 30 57 30q57 0 57 -122zM2035 669h-110q6 98 56 98q51 0 54 -98zM476 534q0 59 -33 91.5t-101 57.5q-36 13 -52 24t-16 25q0 26 38 26q58 0 124 -33l18 112q-67 32 -149 32q-77 0 -123 -38q-48 -39 -48 -109
-q0 -58 32.5 -90.5t99.5 -56.5q39 -14 54.5 -25.5t15.5 -27.5q0 -31 -48 -31q-29 0 -70 12.5t-72 30.5l-18 -113q72 -41 168 -41q81 0 129 37q51 41 51 117zM771 749l19 111h-96v135l-129 -21l-18 -114l-46 -8l-17 -103h62v-219q0 -84 44 -120q38 -30 111 -30q32 0 79 11v118
-q-32 -7 -44 -7q-42 0 -42 50v197h77zM1087 724v139q-15 3 -28 3q-32 0 -55.5 -16t-33.5 -46l-10 56h-131v-471h150v306q26 31 82 31q16 0 26 -2zM1124 389h150v471h-150v-471zM1746 638q0 122 -45 179q-40 52 -111 52q-64 0 -117 -56l-8 47h-132v-645l150 25v151
-q36 -11 68 -11q83 0 134 56q61 65 61 202zM1278 986q0 33 -23 56t-56 23t-56 -23t-23 -56t23 -56.5t56 -23.5t56 23.5t23 56.5zM2176 629q0 113 -48 176q-50 64 -144 64q-96 0 -151.5 -66t-55.5 -180q0 -128 63 -188q55 -55 161 -55q101 0 160 40l-16 103q-57 -31 -128 -31
-q-43 0 -63 19q-23 19 -28 66h248q2 14 2 52zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" />
-    <glyph glyph-name="_471" unicode="&#xf1f6;" horiz-adv-x="2048" 
-d="M1558 684q61 -356 298 -556q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-180.5 74.5t-75.5 180.5zM1024 -176q16 0 16 16t-16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5zM2026 1424q8 -10 7.5 -23.5t-10.5 -22.5
-l-1872 -1622q-10 -8 -23.5 -7t-21.5 11l-84 96q-8 10 -7.5 23.5t10.5 21.5l186 161q-19 32 -19 66q50 42 91 88t85 119.5t74.5 158.5t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q124 -18 219 -82.5t148 -157.5
-l418 363q10 8 23.5 7t21.5 -11z" />
-    <glyph glyph-name="_472" unicode="&#xf1f7;" horiz-adv-x="2048" 
-d="M1040 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM503 315l877 760q-42 88 -132.5 146.5t-223.5 58.5q-93 0 -169.5 -31.5t-121.5 -80.5t-69 -103t-24 -105q0 -384 -137 -645zM1856 128
-q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-180.5 74.5t-75.5 180.5l149 129h757q-166 187 -227 459l111 97q61 -356 298 -556zM1942 1520l84 -96q8 -10 7.5 -23.5t-10.5 -22.5l-1872 -1622q-10 -8 -23.5 -7t-21.5 11l-84 96q-8 10 -7.5 23.5t10.5 21.5l186 161
-q-19 32 -19 66q50 42 91 88t85 119.5t74.5 158.5t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q124 -18 219 -82.5t148 -157.5l418 363q10 8 23.5 7t21.5 -11z" />
-    <glyph glyph-name="_473" unicode="&#xf1f8;" horiz-adv-x="1408" 
-d="M512 160v704q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-704q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM768 160v704q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-704q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1024 160v704q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-704
-q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM480 1152h448l-48 117q-7 9 -17 11h-317q-10 -2 -17 -11zM1408 1120v-64q0 -14 -9 -23t-23 -9h-96v-948q0 -83 -47 -143.5t-113 -60.5h-832q-66 0 -113 58.5t-47 141.5v952h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h309l70 167
-q15 37 54 63t79 26h320q40 0 79 -26t54 -63l70 -167h309q14 0 23 -9t9 -23z" />
-    <glyph glyph-name="_474" unicode="&#xf1f9;" 
-d="M1150 462v-109q0 -50 -36.5 -89t-94 -60.5t-118 -32.5t-117.5 -11q-205 0 -342.5 139t-137.5 346q0 203 136 339t339 136q34 0 75.5 -4.5t93 -18t92.5 -34t69 -56.5t28 -81v-109q0 -16 -16 -16h-118q-16 0 -16 16v70q0 43 -65.5 67.5t-137.5 24.5q-140 0 -228.5 -91.5
-t-88.5 -237.5q0 -151 91.5 -249.5t233.5 -98.5q68 0 138 24t70 66v70q0 7 4.5 11.5t10.5 4.5h119q6 0 11 -4.5t5 -11.5zM768 1280q-130 0 -248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5
-t-51 248.5t-136.5 204t-204 136.5t-248.5 51zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-    <glyph glyph-name="_475" unicode="&#xf1fa;" 
-d="M972 761q0 108 -53.5 169t-147.5 61q-63 0 -124 -30.5t-110 -84.5t-79.5 -137t-30.5 -180q0 -112 53.5 -173t150.5 -61q96 0 176 66.5t122.5 166t42.5 203.5zM1536 640q0 -111 -37 -197t-98.5 -135t-131.5 -74.5t-145 -27.5q-6 0 -15.5 -0.5t-16.5 -0.5q-95 0 -142 53
-q-28 33 -33 83q-52 -66 -131.5 -110t-173.5 -44q-161 0 -249.5 95.5t-88.5 269.5q0 157 66 290t179 210.5t246 77.5q87 0 155 -35.5t106 -99.5l2 19l11 56q1 6 5.5 12t9.5 6h118q5 0 13 -11q5 -5 3 -16l-120 -614q-5 -24 -5 -48q0 -39 12.5 -52t44.5 -13q28 1 57 5.5t73 24
-t77 50t57 89.5t24 137q0 292 -174 466t-466 174q-130 0 -248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51q228 0 405 144q11 9 24 8t21 -12l41 -49q8 -12 7 -24q-2 -13 -12 -22q-102 -83 -227.5 -128t-258.5 -45q-156 0 -298 61
-t-245 164t-164 245t-61 298t61 298t164 245t245 164t298 61q344 0 556 -212t212 -556z" />
-    <glyph glyph-name="_476" unicode="&#xf1fb;" horiz-adv-x="1792" 
-d="M1698 1442q94 -94 94 -226.5t-94 -225.5l-225 -223l104 -104q10 -10 10 -23t-10 -23l-210 -210q-10 -10 -23 -10t-23 10l-105 105l-603 -603q-37 -37 -90 -37h-203l-256 -128l-64 64l128 256v203q0 53 37 90l603 603l-105 105q-10 10 -10 23t10 23l210 210q10 10 23 10
-t23 -10l104 -104l223 225q93 94 225.5 94t226.5 -94zM512 64l576 576l-192 192l-576 -576v-192h192z" />
-    <glyph glyph-name="f1fc" unicode="&#xf1fc;" horiz-adv-x="1792" 
-d="M1615 1536q70 0 122.5 -46.5t52.5 -116.5q0 -63 -45 -151q-332 -629 -465 -752q-97 -91 -218 -91q-126 0 -216.5 92.5t-90.5 219.5q0 128 92 212l638 579q59 54 130 54zM706 502q39 -76 106.5 -130t150.5 -76l1 -71q4 -213 -129.5 -347t-348.5 -134q-123 0 -218 46.5
-t-152.5 127.5t-86.5 183t-29 220q7 -5 41 -30t62 -44.5t59 -36.5t46 -17q41 0 55 37q25 66 57.5 112.5t69.5 76t88 47.5t103 25.5t125 10.5z" />
-    <glyph glyph-name="_478" unicode="&#xf1fd;" horiz-adv-x="1792" 
-d="M1792 128v-384h-1792v384q45 0 85 14t59 27.5t47 37.5q30 27 51.5 38t56.5 11q24 0 44 -7t31 -15t33 -27q29 -25 47 -38t58 -27t86 -14q45 0 85 14.5t58 27t48 37.5q21 19 32.5 27t31 15t43.5 7q35 0 56.5 -11t51.5 -38q28 -24 47 -37.5t59 -27.5t85 -14t85 14t59 27.5
-t47 37.5q30 27 51.5 38t56.5 11q34 0 55.5 -11t51.5 -38q28 -24 47 -37.5t59 -27.5t85 -14zM1792 448v-192q-24 0 -44 7t-31 15t-33 27q-29 25 -47 38t-58 27t-85 14q-46 0 -86 -14t-58 -27t-47 -38q-22 -19 -33 -27t-31 -15t-44 -7q-35 0 -56.5 11t-51.5 38q-29 25 -47 38
-t-58 27t-86 14q-45 0 -85 -14.5t-58 -27t-48 -37.5q-21 -19 -32.5 -27t-31 -15t-43.5 -7q-35 0 -56.5 11t-51.5 38q-28 24 -47 37.5t-59 27.5t-85 14q-46 0 -86 -14t-58 -27t-47 -38q-30 -27 -51.5 -38t-56.5 -11v192q0 80 56 136t136 56h64v448h256v-448h256v448h256v-448
-h256v448h256v-448h64q80 0 136 -56t56 -136zM512 1312q0 -77 -36 -118.5t-92 -41.5q-53 0 -90.5 37.5t-37.5 90.5q0 29 9.5 51t23.5 34t31 28t31 31.5t23.5 44.5t9.5 67q38 0 83 -74t45 -150zM1024 1312q0 -77 -36 -118.5t-92 -41.5q-53 0 -90.5 37.5t-37.5 90.5
-q0 29 9.5 51t23.5 34t31 28t31 31.5t23.5 44.5t9.5 67q38 0 83 -74t45 -150zM1536 1312q0 -77 -36 -118.5t-92 -41.5q-53 0 -90.5 37.5t-37.5 90.5q0 29 9.5 51t23.5 34t31 28t31 31.5t23.5 44.5t9.5 67q38 0 83 -74t45 -150z" />
-    <glyph glyph-name="_479" unicode="&#xf1fe;" horiz-adv-x="2048" 
-d="M2048 0v-128h-2048v1536h128v-1408h1920zM1664 1024l256 -896h-1664v576l448 576l576 -576z" />
-    <glyph glyph-name="_480" unicode="&#xf200;" horiz-adv-x="1792" 
-d="M768 646l546 -546q-106 -108 -247.5 -168t-298.5 -60q-209 0 -385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103v-762zM955 640h773q0 -157 -60 -298.5t-168 -247.5zM1664 768h-768v768q209 0 385.5 -103t279.5 -279.5t103 -385.5z" />
-    <glyph glyph-name="_481" unicode="&#xf201;" horiz-adv-x="2048" 
-d="M2048 0v-128h-2048v1536h128v-1408h1920zM1920 1248v-435q0 -21 -19.5 -29.5t-35.5 7.5l-121 121l-633 -633q-10 -10 -23 -10t-23 10l-233 233l-416 -416l-192 192l585 585q10 10 23 10t23 -10l233 -233l464 464l-121 121q-16 16 -7.5 35.5t29.5 19.5h435q14 0 23 -9
-t9 -23z" />
-    <glyph glyph-name="_482" unicode="&#xf202;" horiz-adv-x="1792" 
-d="M1292 832q0 -6 10 -41q10 -29 25 -49.5t41 -34t44 -20t55 -16.5q325 -91 325 -332q0 -146 -105.5 -242.5t-254.5 -96.5q-59 0 -111.5 18.5t-91.5 45.5t-77 74.5t-63 87.5t-53.5 103.5t-43.5 103t-39.5 106.5t-35.5 95q-32 81 -61.5 133.5t-73.5 96.5t-104 64t-142 20
-q-96 0 -183 -55.5t-138 -144.5t-51 -185q0 -160 106.5 -279.5t263.5 -119.5q177 0 258 95q56 63 83 116l84 -152q-15 -34 -44 -70l1 -1q-131 -152 -388 -152q-147 0 -269.5 79t-190.5 207.5t-68 274.5q0 105 43.5 206t116 176.5t172 121.5t204.5 46q87 0 159 -19t123.5 -50
-t95 -80t72.5 -99t58.5 -117t50.5 -124.5t50 -130.5t55 -127q96 -200 233 -200q81 0 138.5 48.5t57.5 128.5q0 42 -19 72t-50.5 46t-72.5 31.5t-84.5 27t-87.5 34t-81 52t-65 82t-39 122.5q-3 16 -3 33q0 110 87.5 192t198.5 78q78 -3 120.5 -14.5t90.5 -53.5h-1
-q12 -11 23 -24.5t26 -36t19 -27.5l-129 -99q-26 49 -54 70v1q-23 21 -97 21q-49 0 -84 -33t-35 -83z" />
-    <glyph glyph-name="_483" unicode="&#xf203;" 
-d="M1432 484q0 173 -234 239q-35 10 -53 16.5t-38 25t-29 46.5q0 2 -2 8.5t-3 12t-1 7.5q0 36 24.5 59.5t60.5 23.5q54 0 71 -15h-1q20 -15 39 -51l93 71q-39 54 -49 64q-33 29 -67.5 39t-85.5 10q-80 0 -142 -57.5t-62 -137.5q0 -7 2 -23q16 -96 64.5 -140t148.5 -73
-q29 -8 49 -15.5t45 -21.5t38.5 -34.5t13.5 -46.5v-5q1 -58 -40.5 -93t-100.5 -35q-97 0 -167 144q-23 47 -51.5 121.5t-48 125.5t-54 110.5t-74 95.5t-103.5 60.5t-147 24.5q-101 0 -192 -56t-144 -148t-50 -192v-1q4 -108 50.5 -199t133.5 -147.5t196 -56.5q186 0 279 110
-q20 27 31 51l-60 109q-42 -80 -99 -116t-146 -36q-115 0 -191 87t-76 204q0 105 82 189t186 84q112 0 170 -53.5t104 -172.5q8 -21 25.5 -68.5t28.5 -76.5t31.5 -74.5t38.5 -74t45.5 -62.5t55.5 -53.5t66 -33t80 -13.5q107 0 183 69.5t76 174.5zM1536 1120v-960
-q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-    <glyph glyph-name="_484" unicode="&#xf204;" horiz-adv-x="2048" 
-d="M1152 640q0 104 -40.5 198.5t-109.5 163.5t-163.5 109.5t-198.5 40.5t-198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5t198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5zM1920 640q0 104 -40.5 198.5
-t-109.5 163.5t-163.5 109.5t-198.5 40.5h-386q119 -90 188.5 -224t69.5 -288t-69.5 -288t-188.5 -224h386q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5zM2048 640q0 -130 -51 -248.5t-136.5 -204t-204 -136.5t-248.5 -51h-768q-130 0 -248.5 51t-204 136.5
-t-136.5 204t-51 248.5t51 248.5t136.5 204t204 136.5t248.5 51h768q130 0 248.5 -51t204 -136.5t136.5 -204t51 -248.5z" />
-    <glyph glyph-name="_485" unicode="&#xf205;" horiz-adv-x="2048" 
-d="M0 640q0 130 51 248.5t136.5 204t204 136.5t248.5 51h768q130 0 248.5 -51t204 -136.5t136.5 -204t51 -248.5t-51 -248.5t-136.5 -204t-204 -136.5t-248.5 -51h-768q-130 0 -248.5 51t-204 136.5t-136.5 204t-51 248.5zM1408 128q104 0 198.5 40.5t163.5 109.5
-t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5t-163.5 109.5t-198.5 40.5t-198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5z" />
-    <glyph glyph-name="_486" unicode="&#xf206;" horiz-adv-x="2304" 
-d="M762 384h-314q-40 0 -57.5 35t6.5 67l188 251q-65 31 -137 31q-132 0 -226 -94t-94 -226t94 -226t226 -94q115 0 203 72.5t111 183.5zM576 512h186q-18 85 -75 148zM1056 512l288 384h-480l-99 -132q105 -103 126 -252h165zM2176 448q0 132 -94 226t-226 94
-q-60 0 -121 -24l174 -260q15 -23 10 -49t-27 -40q-15 -11 -36 -11q-35 0 -53 29l-174 260q-93 -95 -93 -225q0 -132 94 -226t226 -94t226 94t94 226zM2304 448q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 97 39.5 183.5t109.5 149.5l-65 98l-353 -469
-q-18 -26 -51 -26h-197q-23 -164 -149 -274t-294 -110q-185 0 -316.5 131.5t-131.5 316.5t131.5 316.5t316.5 131.5q114 0 215 -55l137 183h-224q-26 0 -45 19t-19 45t19 45t45 19h384v-128h435l-85 128h-222q-26 0 -45 19t-19 45t19 45t45 19h256q33 0 53 -28l267 -400
-q91 44 192 44q185 0 316.5 -131.5t131.5 -316.5z" />
-    <glyph glyph-name="_487" unicode="&#xf207;" 
-d="M384 320q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1408 320q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1362 716l-72 384q-5 23 -22.5 37.5t-40.5 14.5
-h-918q-23 0 -40.5 -14.5t-22.5 -37.5l-72 -384q-5 -30 14 -53t49 -23h1062q30 0 49 23t14 53zM1136 1328q0 20 -14 34t-34 14h-640q-20 0 -34 -14t-14 -34t14 -34t34 -14h640q20 0 34 14t14 34zM1536 603v-603h-128v-128q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5
-t-37.5 90.5v128h-768v-128q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5v128h-128v603q0 112 25 223l103 454q9 78 97.5 137t230 89t312.5 30t312.5 -30t230 -89t97.5 -137l105 -454q23 -102 23 -223z" />
-    <glyph glyph-name="_488" unicode="&#xf208;" horiz-adv-x="2048" 
-d="M1463 704q0 -35 -25 -60.5t-61 -25.5h-702q-36 0 -61 25.5t-25 60.5t25 60.5t61 25.5h702q36 0 61 -25.5t25 -60.5zM1677 704q0 86 -23 170h-982q-36 0 -61 25t-25 60q0 36 25 61t61 25h908q-88 143 -235 227t-320 84q-177 0 -327.5 -87.5t-238 -237.5t-87.5 -327
-q0 -86 23 -170h982q36 0 61 -25t25 -60q0 -36 -25 -61t-61 -25h-908q88 -143 235.5 -227t320.5 -84q132 0 253 51.5t208 139t139 208t52 253.5zM2048 959q0 -35 -25 -60t-61 -25h-131q17 -85 17 -170q0 -167 -65.5 -319.5t-175.5 -263t-262.5 -176t-319.5 -65.5
-q-246 0 -448.5 133t-301.5 350h-189q-36 0 -61 25t-25 61q0 35 25 60t61 25h132q-17 85 -17 170q0 167 65.5 319.5t175.5 263t262.5 176t320.5 65.5q245 0 447.5 -133t301.5 -350h188q36 0 61 -25t25 -61z" />
-    <glyph glyph-name="_489" unicode="&#xf209;" horiz-adv-x="1280" 
-d="M953 1158l-114 -328l117 -21q165 451 165 518q0 56 -38 56q-57 0 -130 -225zM654 471l33 -88q37 42 71 67l-33 5.5t-38.5 7t-32.5 8.5zM362 1367q0 -98 159 -521q17 10 49 10q15 0 75 -5l-121 351q-75 220 -123 220q-19 0 -29 -17.5t-10 -37.5zM283 608q0 -36 51.5 -119
-t117.5 -153t100 -70q14 0 25.5 13t11.5 27q0 24 -32 102q-13 32 -32 72t-47.5 89t-61.5 81t-62 32q-20 0 -45.5 -27t-25.5 -47zM125 273q0 -41 25 -104q59 -145 183.5 -227t281.5 -82q227 0 382 170q152 169 152 427q0 43 -1 67t-11.5 62t-30.5 56q-56 49 -211.5 75.5
-t-270.5 26.5q-37 0 -49 -11q-12 -5 -12 -35q0 -34 21.5 -60t55.5 -40t77.5 -23.5t87.5 -11.5t85 -4t70 0h23q24 0 40 -19q15 -19 19 -55q-28 -28 -96 -54q-61 -22 -93 -46q-64 -46 -108.5 -114t-44.5 -137q0 -31 18.5 -88.5t18.5 -87.5l-3 -12q-4 -12 -4 -14
-q-137 10 -146 216q-8 -2 -41 -2q2 -7 2 -21q0 -53 -40.5 -89.5t-94.5 -36.5q-82 0 -166.5 78t-84.5 159q0 34 33 67q52 -64 60 -76q77 -104 133 -104q12 0 26.5 8.5t14.5 20.5q0 34 -87.5 145t-116.5 111q-43 0 -70 -44.5t-27 -90.5zM11 264q0 101 42.5 163t136.5 88
-q-28 74 -28 104q0 62 61 123t122 61q29 0 70 -15q-163 462 -163 567q0 80 41 130.5t119 50.5q131 0 325 -581q6 -17 8 -23q6 16 29 79.5t43.5 118.5t54 127.5t64.5 123t70.5 86.5t76.5 36q71 0 112 -49t41 -122q0 -108 -159 -550q61 -15 100.5 -46t58.5 -78t26 -93.5
-t7 -110.5q0 -150 -47 -280t-132 -225t-211 -150t-278 -55q-111 0 -223 42q-149 57 -258 191.5t-109 286.5z" />
-    <glyph glyph-name="_490" unicode="&#xf20a;" horiz-adv-x="2048" 
-d="M785 528h207q-14 -158 -98.5 -248.5t-214.5 -90.5q-162 0 -254.5 116t-92.5 316q0 194 93 311.5t233 117.5q148 0 232 -87t97 -247h-203q-5 64 -35.5 99t-81.5 35q-57 0 -88.5 -60.5t-31.5 -177.5q0 -48 5 -84t18 -69.5t40 -51.5t66 -18q95 0 109 139zM1497 528h206
-q-14 -158 -98 -248.5t-214 -90.5q-162 0 -254.5 116t-92.5 316q0 194 93 311.5t233 117.5q148 0 232 -87t97 -247h-204q-4 64 -35 99t-81 35q-57 0 -88.5 -60.5t-31.5 -177.5q0 -48 5 -84t18 -69.5t39.5 -51.5t65.5 -18q49 0 76.5 38t33.5 101zM1856 647q0 207 -15.5 307
-t-60.5 161q-6 8 -13.5 14t-21.5 15t-16 11q-86 63 -697 63q-625 0 -710 -63q-5 -4 -17.5 -11.5t-21 -14t-14.5 -14.5q-45 -60 -60 -159.5t-15 -308.5q0 -208 15 -307.5t60 -160.5q6 -8 15 -15t20.5 -14t17.5 -12q44 -33 239.5 -49t470.5 -16q610 0 697 65q5 4 17 11t20.5 14
-t13.5 16q46 60 61 159t15 309zM2048 1408v-1536h-2048v1536h2048z" />
-    <glyph glyph-name="_491" unicode="&#xf20b;" 
-d="M992 912v-496q0 -14 -9 -23t-23 -9h-160q-14 0 -23 9t-9 23v496q0 112 -80 192t-192 80h-272v-1152q0 -14 -9 -23t-23 -9h-160q-14 0 -23 9t-9 23v1344q0 14 9 23t23 9h464q135 0 249 -66.5t180.5 -180.5t66.5 -249zM1376 1376v-880q0 -135 -66.5 -249t-180.5 -180.5
-t-249 -66.5h-464q-14 0 -23 9t-9 23v960q0 14 9 23t23 9h160q14 0 23 -9t9 -23v-768h272q112 0 192 80t80 192v880q0 14 9 23t23 9h160q14 0 23 -9t9 -23z" />
-    <glyph glyph-name="_492" unicode="&#xf20c;" 
-d="M1311 694v-114q0 -24 -13.5 -38t-37.5 -14h-202q-24 0 -38 14t-14 38v114q0 24 14 38t38 14h202q24 0 37.5 -14t13.5 -38zM821 464v250q0 53 -32.5 85.5t-85.5 32.5h-133q-68 0 -96 -52q-28 52 -96 52h-130q-53 0 -85.5 -32.5t-32.5 -85.5v-250q0 -22 21 -22h55
-q22 0 22 22v230q0 24 13.5 38t38.5 14h94q24 0 38 -14t14 -38v-230q0 -22 21 -22h54q22 0 22 22v230q0 24 14 38t38 14h97q24 0 37.5 -14t13.5 -38v-230q0 -22 22 -22h55q21 0 21 22zM1410 560v154q0 53 -33 85.5t-86 32.5h-264q-53 0 -86 -32.5t-33 -85.5v-410
-q0 -21 22 -21h55q21 0 21 21v180q31 -42 94 -42h191q53 0 86 32.5t33 85.5zM1536 1176v-1072q0 -96 -68 -164t-164 -68h-1072q-96 0 -164 68t-68 164v1072q0 96 68 164t164 68h1072q96 0 164 -68t68 -164z" />
-    <glyph glyph-name="_493" unicode="&#xf20d;" 
-d="M915 450h-294l147 551zM1001 128h311l-324 1024h-440l-324 -1024h311l383 314zM1536 1120v-960q0 -118 -85 -203t-203 -85h-960q-118 0 -203 85t-85 203v960q0 118 85 203t203 85h960q118 0 203 -85t85 -203z" />
-    <glyph glyph-name="_494" unicode="&#xf20e;" horiz-adv-x="2048" 
-d="M2048 641q0 -21 -13 -36.5t-33 -19.5l-205 -356q3 -9 3 -18q0 -20 -12.5 -35.5t-32.5 -19.5l-193 -337q3 -8 3 -16q0 -23 -16.5 -40t-40.5 -17q-25 0 -41 18h-400q-17 -20 -43 -20t-43 20h-399q-17 -20 -43 -20q-23 0 -40 16.5t-17 40.5q0 8 4 20l-193 335
-q-20 4 -32.5 19.5t-12.5 35.5q0 9 3 18l-206 356q-20 5 -32.5 20.5t-12.5 35.5q0 21 13.5 36.5t33.5 19.5l199 344q0 1 -0.5 3t-0.5 3q0 36 34 51l209 363q-4 10 -4 18q0 24 17 40.5t40 16.5q26 0 44 -21h396q16 21 43 21t43 -21h398q18 21 44 21q23 0 40 -16.5t17 -40.5
-q0 -6 -4 -18l207 -358q23 -1 39 -17.5t16 -38.5q0 -13 -7 -27l187 -324q19 -4 31.5 -19.5t12.5 -35.5zM1063 -158h389l-342 354h-143l-342 -354h360q18 16 39 16t39 -16zM112 654q1 -4 1 -13q0 -10 -2 -15l208 -360l15 -6l188 199v347l-187 194q-13 -8 -29 -10zM986 1438
-h-388l190 -200l554 200h-280q-16 -16 -38 -16t-38 16zM1689 226q1 6 5 11l-64 68l-17 -79h76zM1583 226l22 105l-252 266l-296 -307l63 -64h463zM1495 -142l16 28l65 310h-427l333 -343q8 4 13 5zM578 -158h5l342 354h-373v-335l4 -6q14 -5 22 -13zM552 226h402l64 66
-l-309 321l-157 -166v-221zM359 226h163v189l-168 -177q4 -8 5 -12zM358 1051q0 -1 0.5 -2t0.5 -2q0 -16 -8 -29l171 -177v269zM552 1121v-311l153 -157l297 314l-223 236zM556 1425l-4 -8v-264l205 74l-191 201q-6 -2 -10 -3zM1447 1438h-16l-621 -224l213 -225zM1023 946
-l-297 -315l311 -319l296 307zM688 634l-136 141v-284zM1038 270l-42 -44h85zM1374 618l238 -251l132 624l-3 5l-1 1zM1718 1018q-8 13 -8 29v2l-216 376q-5 1 -13 5l-437 -463l310 -327zM522 1142v223l-163 -282zM522 196h-163l163 -283v283zM1607 196l-48 -227l130 227h-82
-zM1729 266l207 361q-2 10 -2 14q0 1 3 16l-171 296l-129 -612l77 -82q5 3 15 7z" />
-    <glyph glyph-name="f210" unicode="&#xf210;" 
-d="M0 856q0 131 91.5 226.5t222.5 95.5h742l352 358v-1470q0 -132 -91.5 -227t-222.5 -95h-780q-131 0 -222.5 95t-91.5 227v790zM1232 102l-176 180v425q0 46 -32 79t-78 33h-484q-46 0 -78 -33t-32 -79v-492q0 -46 32.5 -79.5t77.5 -33.5h770z" />
-    <glyph glyph-name="_496" unicode="&#xf211;" 
-d="M934 1386q-317 -121 -556 -362.5t-358 -560.5q-20 89 -20 176q0 208 102.5 384.5t278.5 279t384 102.5q82 0 169 -19zM1203 1267q93 -65 164 -155q-389 -113 -674.5 -400.5t-396.5 -676.5q-93 72 -155 162q112 386 395 671t667 399zM470 -67q115 356 379.5 622t619.5 384
-q40 -92 54 -195q-292 -120 -516 -345t-343 -518q-103 14 -194 52zM1536 -125q-193 50 -367 115q-135 -84 -290 -107q109 205 274 370.5t369 275.5q-21 -152 -101 -284q65 -175 115 -370z" />
-    <glyph glyph-name="f212" unicode="&#xf212;" horiz-adv-x="2048" 
-d="M1893 1144l155 -1272q-131 0 -257 57q-200 91 -393 91q-226 0 -374 -148q-148 148 -374 148q-193 0 -393 -91q-128 -57 -252 -57h-5l155 1272q224 127 482 127q233 0 387 -106q154 106 387 106q258 0 482 -127zM1398 157q129 0 232 -28.5t260 -93.5l-124 1021
-q-171 78 -368 78q-224 0 -374 -141q-150 141 -374 141q-197 0 -368 -78l-124 -1021q105 43 165.5 65t148.5 39.5t178 17.5q202 0 374 -108q172 108 374 108zM1438 191l-55 907q-211 -4 -359 -155q-152 155 -374 155q-176 0 -336 -66l-114 -941q124 51 228.5 76t221.5 25
-q209 0 374 -102q172 107 374 102z" />
-    <glyph glyph-name="_498" unicode="&#xf213;" horiz-adv-x="2048" 
-d="M1500 165v733q0 21 -15 36t-35 15h-93q-20 0 -35 -15t-15 -36v-733q0 -20 15 -35t35 -15h93q20 0 35 15t15 35zM1216 165v531q0 20 -15 35t-35 15h-101q-20 0 -35 -15t-15 -35v-531q0 -20 15 -35t35 -15h101q20 0 35 15t15 35zM924 165v429q0 20 -15 35t-35 15h-101
-q-20 0 -35 -15t-15 -35v-429q0 -20 15 -35t35 -15h101q20 0 35 15t15 35zM632 165v362q0 20 -15 35t-35 15h-101q-20 0 -35 -15t-15 -35v-362q0 -20 15 -35t35 -15h101q20 0 35 15t15 35zM2048 311q0 -166 -118 -284t-284 -118h-1244q-166 0 -284 118t-118 284
-q0 116 63 214.5t168 148.5q-10 34 -10 73q0 113 80.5 193.5t193.5 80.5q102 0 180 -67q45 183 194 300t338 117q149 0 275 -73.5t199.5 -199.5t73.5 -275q0 -66 -14 -122q135 -33 221 -142.5t86 -247.5z" />
-    <glyph glyph-name="_499" unicode="&#xf214;" 
-d="M0 1536h1536v-1392l-776 -338l-760 338v1392zM1436 209v926h-1336v-926l661 -294zM1436 1235v201h-1336v-201h1336zM181 937v-115h-37v115h37zM181 789v-115h-37v115h37zM181 641v-115h-37v115h37zM181 493v-115h-37v115h37zM181 345v-115h-37v115h37zM207 202l15 34
-l105 -47l-15 -33zM343 142l15 34l105 -46l-15 -34zM478 82l15 34l105 -46l-15 -34zM614 23l15 33l104 -46l-15 -34zM797 10l105 46l15 -33l-105 -47zM932 70l105 46l15 -34l-105 -46zM1068 130l105 46l15 -34l-105 -46zM1203 189l105 47l15 -34l-105 -46zM259 1389v-36h-114
-v36h114zM421 1389v-36h-115v36h115zM583 1389v-36h-115v36h115zM744 1389v-36h-114v36h114zM906 1389v-36h-114v36h114zM1068 1389v-36h-115v36h115zM1230 1389v-36h-115v36h115zM1391 1389v-36h-114v36h114zM181 1049v-79h-37v115h115v-36h-78zM421 1085v-36h-115v36h115z
-M583 1085v-36h-115v36h115zM744 1085v-36h-114v36h114zM906 1085v-36h-114v36h114zM1068 1085v-36h-115v36h115zM1230 1085v-36h-115v36h115zM1355 970v79h-78v36h115v-115h-37zM1355 822v115h37v-115h-37zM1355 674v115h37v-115h-37zM1355 526v115h37v-115h-37zM1355 378
-v115h37v-115h-37zM1355 230v115h37v-115h-37zM760 265q-129 0 -221 91.5t-92 221.5q0 129 92 221t221 92q130 0 221.5 -92t91.5 -221q0 -130 -91.5 -221.5t-221.5 -91.5zM595 646q0 -36 19.5 -56.5t49.5 -25t64 -7t64 -2t49.5 -9t19.5 -30.5q0 -49 -112 -49q-97 0 -123 51
-h-3l-31 -63q67 -42 162 -42q29 0 56.5 5t55.5 16t45.5 33t17.5 53q0 46 -27.5 69.5t-67.5 27t-79.5 3t-67 5t-27.5 25.5q0 21 20.5 33t40.5 15t41 3q34 0 70.5 -11t51.5 -34h3l30 58q-3 1 -21 8.5t-22.5 9t-19.5 7t-22 7t-20 4.5t-24 4t-23 1q-29 0 -56.5 -5t-54 -16.5
-t-43 -34t-16.5 -53.5z" />
-    <glyph glyph-name="_500" unicode="&#xf215;" horiz-adv-x="2048" 
-d="M863 504q0 112 -79.5 191.5t-191.5 79.5t-191 -79.5t-79 -191.5t79 -191t191 -79t191.5 79t79.5 191zM1726 505q0 112 -79 191t-191 79t-191.5 -79t-79.5 -191q0 -113 79.5 -192t191.5 -79t191 79.5t79 191.5zM2048 1314v-1348q0 -44 -31.5 -75.5t-76.5 -31.5h-1832
-q-45 0 -76.5 31.5t-31.5 75.5v1348q0 44 31.5 75.5t76.5 31.5h431q44 0 76 -31.5t32 -75.5v-161h754v161q0 44 32 75.5t76 31.5h431q45 0 76.5 -31.5t31.5 -75.5z" />
-    <glyph glyph-name="_501" unicode="&#xf216;" horiz-adv-x="2048" 
-d="M1430 953zM1690 749q148 0 253 -98.5t105 -244.5q0 -157 -109 -261.5t-267 -104.5q-85 0 -162 27.5t-138 73.5t-118 106t-109 126t-103.5 132.5t-108.5 126.5t-117 106t-136 73.5t-159 27.5q-154 0 -251.5 -91.5t-97.5 -244.5q0 -157 104 -250t263 -93q100 0 208 37.5
-t193 98.5q5 4 21 18.5t30 24t22 9.5q14 0 24.5 -10.5t10.5 -24.5q0 -24 -60 -77q-101 -88 -234.5 -142t-260.5 -54q-133 0 -245.5 58t-180 165t-67.5 241q0 205 141.5 341t347.5 136q120 0 226.5 -43.5t185.5 -113t151.5 -153t139 -167.5t133.5 -153.5t149.5 -113
-t172.5 -43.5q102 0 168.5 61.5t66.5 162.5q0 95 -64.5 159t-159.5 64q-30 0 -81.5 -18.5t-68.5 -18.5q-20 0 -35.5 15t-15.5 35q0 18 8.5 57t8.5 59q0 159 -107.5 263t-266.5 104q-58 0 -111.5 -18.5t-84 -40.5t-55.5 -40.5t-33 -18.5q-15 0 -25.5 10.5t-10.5 25.5
-q0 19 25 46q59 67 147 103.5t182 36.5q191 0 318 -125.5t127 -315.5q0 -37 -4 -66q57 15 115 15z" />
-    <glyph glyph-name="_502" unicode="&#xf217;" horiz-adv-x="1664" 
-d="M1216 832q0 26 -19 45t-45 19h-128v128q0 26 -19 45t-45 19t-45 -19t-19 -45v-128h-128q-26 0 -45 -19t-19 -45t19 -45t45 -19h128v-128q0 -26 19 -45t45 -19t45 19t19 45v128h128q26 0 45 19t19 45zM640 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5
-t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1536 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1664 1088v-512q0 -24 -16 -42.5t-41 -21.5l-1044 -122q1 -7 4.5 -21.5t6 -26.5t2.5 -22q0 -16 -24 -64h920
-q26 0 45 -19t19 -45t-19 -45t-45 -19h-1024q-26 0 -45 19t-19 45q0 14 11 39.5t29.5 59.5t20.5 38l-177 823h-204q-26 0 -45 19t-19 45t19 45t45 19h256q16 0 28.5 -6.5t20 -15.5t13 -24.5t7.5 -26.5t5.5 -29.5t4.5 -25.5h1201q26 0 45 -19t19 -45z" />
-    <glyph glyph-name="_503" unicode="&#xf218;" horiz-adv-x="1664" 
-d="M1280 832q0 26 -19 45t-45 19t-45 -19l-147 -146v293q0 26 -19 45t-45 19t-45 -19t-19 -45v-293l-147 146q-19 19 -45 19t-45 -19t-19 -45t19 -45l256 -256q19 -19 45 -19t45 19l256 256q19 19 19 45zM640 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5
-t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1536 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1664 1088v-512q0 -24 -16 -42.5t-41 -21.5l-1044 -122q1 -7 4.5 -21.5t6 -26.5t2.5 -22q0 -16 -24 -64h920
-q26 0 45 -19t19 -45t-19 -45t-45 -19h-1024q-26 0 -45 19t-19 45q0 14 11 39.5t29.5 59.5t20.5 38l-177 823h-204q-26 0 -45 19t-19 45t19 45t45 19h256q16 0 28.5 -6.5t20 -15.5t13 -24.5t7.5 -26.5t5.5 -29.5t4.5 -25.5h1201q26 0 45 -19t19 -45z" />
-    <glyph glyph-name="_504" unicode="&#xf219;" horiz-adv-x="2048" 
-d="M212 768l623 -665l-300 665h-323zM1024 -4l349 772h-698zM538 896l204 384h-262l-288 -384h346zM1213 103l623 665h-323zM683 896h682l-204 384h-274zM1510 896h346l-288 384h-262zM1651 1382l384 -512q14 -18 13 -41.5t-17 -40.5l-960 -1024q-18 -20 -47 -20t-47 20
-l-960 1024q-16 17 -17 40.5t13 41.5l384 512q18 26 51 26h1152q33 0 51 -26z" />
-    <glyph glyph-name="_505" unicode="&#xf21a;" horiz-adv-x="2048" 
-d="M1811 -19q19 19 45 19t45 -19l128 -128l-90 -90l-83 83l-83 -83q-18 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83
-q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-128 128l90 90l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83
-q19 19 45 19t45 -19l83 -83zM237 19q-19 -19 -45 -19t-45 19l-128 128l90 90l83 -82l83 82q19 19 45 19t45 -19l83 -82l64 64v293l-210 314q-17 26 -7 56.5t40 40.5l177 58v299h128v128h256v128h256v-128h256v-128h128v-299l177 -58q30 -10 40 -40.5t-7 -56.5l-210 -314
-v-293l19 18q19 19 45 19t45 -19l83 -82l83 82q19 19 45 19t45 -19l128 -128l-90 -90l-83 83l-83 -83q-18 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83
-q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83zM640 1152v-128l384 128l384 -128v128h-128v128h-512v-128h-128z" />
-    <glyph glyph-name="_506" unicode="&#xf21b;" 
-d="M576 0l96 448l-96 128l-128 64zM832 0l128 640l-128 -64l-96 -128zM992 1010q-2 4 -4 6q-10 8 -96 8q-70 0 -167 -19q-7 -2 -21 -2t-21 2q-97 19 -167 19q-86 0 -96 -8q-2 -2 -4 -6q2 -18 4 -27q2 -3 7.5 -6.5t7.5 -10.5q2 -4 7.5 -20.5t7 -20.5t7.5 -17t8.5 -17t9 -14
-t12 -13.5t14 -9.5t17.5 -8t20.5 -4t24.5 -2q36 0 59 12.5t32.5 30t14.5 34.5t11.5 29.5t17.5 12.5h12q11 0 17.5 -12.5t11.5 -29.5t14.5 -34.5t32.5 -30t59 -12.5q13 0 24.5 2t20.5 4t17.5 8t14 9.5t12 13.5t9 14t8.5 17t7.5 17t7 20.5t7.5 20.5q2 7 7.5 10.5t7.5 6.5
-q2 9 4 27zM1408 131q0 -121 -73 -190t-194 -69h-874q-121 0 -194 69t-73 190q0 61 4.5 118t19 125.5t37.5 123.5t63.5 103.5t93.5 74.5l-90 220h214q-22 64 -22 128q0 12 2 32q-194 40 -194 96q0 57 210 99q17 62 51.5 134t70.5 114q32 37 76 37q30 0 84 -31t84 -31t84 31
-t84 31q44 0 76 -37q36 -42 70.5 -114t51.5 -134q210 -42 210 -99q0 -56 -194 -96q7 -81 -20 -160h214l-82 -225q63 -33 107.5 -96.5t65.5 -143.5t29 -151.5t8 -148.5z" />
-    <glyph glyph-name="_507" unicode="&#xf21c;" horiz-adv-x="2304" 
-d="M2301 500q12 -103 -22 -198.5t-99 -163.5t-158.5 -106t-196.5 -31q-161 11 -279.5 125t-134.5 274q-12 111 27.5 210.5t118.5 170.5l-71 107q-96 -80 -151 -194t-55 -244q0 -27 -18.5 -46.5t-45.5 -19.5h-256h-69q-23 -164 -149 -274t-294 -110q-185 0 -316.5 131.5
-t-131.5 316.5t131.5 316.5t316.5 131.5q76 0 152 -27l24 45q-123 110 -304 110h-64q-26 0 -45 19t-19 45t19 45t45 19h128q78 0 145 -13.5t116.5 -38.5t71.5 -39.5t51 -36.5h512h115l-85 128h-222q-30 0 -49 22.5t-14 52.5q4 23 23 38t43 15h253q33 0 53 -28l70 -105
-l114 114q19 19 46 19h101q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-179l115 -172q131 63 275 36q143 -26 244 -134.5t118 -253.5zM448 128q115 0 203 72.5t111 183.5h-314q-35 0 -55 31q-18 32 -1 63l147 277q-47 13 -91 13q-132 0 -226 -94t-94 -226t94 -226
-t226 -94zM1856 128q132 0 226 94t94 226t-94 226t-226 94q-60 0 -121 -24l174 -260q15 -23 10 -49t-27 -40q-15 -11 -36 -11q-35 0 -53 29l-174 260q-93 -95 -93 -225q0 -132 94 -226t226 -94z" />
-    <glyph glyph-name="_508" unicode="&#xf21d;" 
-d="M1408 0q0 -63 -61.5 -113.5t-164 -81t-225 -46t-253.5 -15.5t-253.5 15.5t-225 46t-164 81t-61.5 113.5q0 49 33 88.5t91 66.5t118 44.5t131 29.5q26 5 48 -10.5t26 -41.5q5 -26 -10.5 -48t-41.5 -26q-58 -10 -106 -23.5t-76.5 -25.5t-48.5 -23.5t-27.5 -19.5t-8.5 -12
-q3 -11 27 -26.5t73 -33t114 -32.5t160.5 -25t201.5 -10t201.5 10t160.5 25t114 33t73 33.5t27 27.5q-1 4 -8.5 11t-27.5 19t-48.5 23.5t-76.5 25t-106 23.5q-26 4 -41.5 26t-10.5 48q4 26 26 41.5t48 10.5q71 -12 131 -29.5t118 -44.5t91 -66.5t33 -88.5zM1024 896v-384
-q0 -26 -19 -45t-45 -19h-64v-384q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v384h-64q-26 0 -45 19t-19 45v384q0 53 37.5 90.5t90.5 37.5h384q53 0 90.5 -37.5t37.5 -90.5zM928 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5
-t158.5 -65.5t65.5 -158.5z" />
-    <glyph glyph-name="_509" unicode="&#xf21e;" horiz-adv-x="1792" 
-d="M1280 512h305q-5 -6 -10 -10.5t-9 -7.5l-3 -4l-623 -600q-18 -18 -44 -18t-44 18l-624 602q-5 2 -21 20h369q22 0 39.5 13.5t22.5 34.5l70 281l190 -667q6 -20 23 -33t39 -13q21 0 38 13t23 33l146 485l56 -112q18 -35 57 -35zM1792 940q0 -145 -103 -300h-369l-111 221
-q-8 17 -25.5 27t-36.5 8q-45 -5 -56 -46l-129 -430l-196 686q-6 20 -23.5 33t-39.5 13t-39 -13.5t-22 -34.5l-116 -464h-423q-103 155 -103 300q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5q224 0 351 -124
-t127 -344z" />
-    <glyph glyph-name="venus" unicode="&#xf221;" horiz-adv-x="1280" 
-d="M1152 960q0 -221 -147.5 -384.5t-364.5 -187.5v-260h224q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-224v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-224q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v260q-150 16 -271.5 103t-186 224t-52.5 292
-q11 134 80.5 249t182 188t245.5 88q170 19 319 -54t236 -212t87 -306zM128 960q0 -185 131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5z" />
-    <glyph glyph-name="_511" unicode="&#xf222;" 
-d="M1472 1408q26 0 45 -19t19 -45v-416q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v262l-382 -383q126 -156 126 -359q0 -117 -45.5 -223.5t-123 -184t-184 -123t-223.5 -45.5t-223.5 45.5t-184 123t-123 184t-45.5 223.5t45.5 223.5t123 184t184 123t223.5 45.5
-q203 0 359 -126l382 382h-261q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h416zM576 0q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
-    <glyph glyph-name="_512" unicode="&#xf223;" horiz-adv-x="1280" 
-d="M830 1220q145 -72 233.5 -210.5t88.5 -305.5q0 -221 -147.5 -384.5t-364.5 -187.5v-132h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96v-96q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v96h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v132q-217 24 -364.5 187.5
-t-147.5 384.5q0 167 88.5 305.5t233.5 210.5q-165 96 -228 273q-6 16 3.5 29.5t26.5 13.5h69q21 0 29 -20q44 -106 140 -171t214 -65t214 65t140 171q8 20 37 20h61q17 0 26.5 -13.5t3.5 -29.5q-63 -177 -228 -273zM576 256q185 0 316.5 131.5t131.5 316.5t-131.5 316.5
-t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
-    <glyph glyph-name="_513" unicode="&#xf224;" 
-d="M1024 1504q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q126 -158 126 -359q0 -221 -147.5 -384.5t-364.5 -187.5v-132h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96v-96q0 -14 -9 -23t-23 -9h-64
-q-14 0 -23 9t-9 23v96h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v132q-149 16 -270.5 103t-186.5 223.5t-53 291.5q16 204 160 353.5t347 172.5q118 14 228 -19t198 -103l255 254h-134q-14 0 -23 9t-9 23v64zM576 256q185 0 316.5 131.5t131.5 316.5t-131.5 316.5
-t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
-    <glyph glyph-name="_514" unicode="&#xf225;" horiz-adv-x="1792" 
-d="M1280 1504q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q126 -158 126 -359q0 -221 -147.5 -384.5t-364.5 -187.5v-132h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96v-96q0 -14 -9 -23t-23 -9h-64
-q-14 0 -23 9t-9 23v96h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v132q-217 24 -364.5 187.5t-147.5 384.5q0 201 126 359l-52 53l-101 -111q-9 -10 -22 -10.5t-23 7.5l-48 44q-10 8 -10.5 21.5t8.5 23.5l105 115l-111 112v-134q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9
-t-9 23v288q0 26 19 45t45 19h288q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-133l106 -107l86 94q9 10 22 10.5t23 -7.5l48 -44q10 -8 10.5 -21.5t-8.5 -23.5l-90 -99l57 -56q158 126 359 126t359 -126l255 254h-134q-14 0 -23 9t-9 23v64zM832 256q185 0 316.5 131.5
-t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
-    <glyph glyph-name="_515" unicode="&#xf226;" horiz-adv-x="1792" 
-d="M1790 1007q12 -155 -52.5 -292t-186 -224t-271.5 -103v-260h224q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-224v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-512v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-224q-14 0 -23 9t-9 23v64q0 14 9 23
-t23 9h224v260q-150 16 -271.5 103t-186 224t-52.5 292q17 206 164.5 356.5t352.5 169.5q206 21 377 -94q171 115 377 94q205 -19 352.5 -169.5t164.5 -356.5zM896 647q128 131 128 313t-128 313q-128 -131 -128 -313t128 -313zM576 512q115 0 218 57q-154 165 -154 391
-q0 224 154 391q-103 57 -218 57q-185 0 -316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5zM1152 128v260q-137 15 -256 94q-119 -79 -256 -94v-260h512zM1216 512q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5q-115 0 -218 -57q154 -167 154 -391
-q0 -226 -154 -391q103 -57 218 -57z" />
-    <glyph glyph-name="_516" unicode="&#xf227;" horiz-adv-x="1920" 
-d="M1536 1120q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q76 -95 107.5 -214t9.5 -247q-31 -182 -166 -312t-318 -156q-210 -29 -384.5 80t-241.5 300q-117 6 -221 57.5t-177.5 133t-113.5 192.5t-32 230
-q9 135 78 252t182 191.5t248 89.5q118 14 227.5 -19t198.5 -103l255 254h-134q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q59 -74 93 -169q182 -9 328 -124l255 254h-134q-14 0 -23 9
-t-9 23v64zM1024 704q0 20 -4 58q-162 -25 -271 -150t-109 -292q0 -20 4 -58q162 25 271 150t109 292zM128 704q0 -168 111 -294t276 -149q-3 29 -3 59q0 210 135 369.5t338 196.5q-53 120 -163.5 193t-245.5 73q-185 0 -316.5 -131.5t-131.5 -316.5zM1088 -128
-q185 0 316.5 131.5t131.5 316.5q0 168 -111 294t-276 149q3 -28 3 -59q0 -210 -135 -369.5t-338 -196.5q53 -120 163.5 -193t245.5 -73z" />
-    <glyph glyph-name="_517" unicode="&#xf228;" horiz-adv-x="2048" 
-d="M1664 1504q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q76 -95 107.5 -214t9.5 -247q-32 -180 -164.5 -310t-313.5 -157q-223 -34 -409 90q-117 -78 -256 -93v-132h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23
-t-23 -9h-96v-96q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v96h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v132q-155 17 -279.5 109.5t-187 237.5t-39.5 307q25 187 159.5 322.5t320.5 164.5q224 34 410 -90q146 97 320 97q201 0 359 -126l255 254h-134q-14 0 -23 9
-t-9 23v64zM896 391q128 131 128 313t-128 313q-128 -131 -128 -313t128 -313zM128 704q0 -185 131.5 -316.5t316.5 -131.5q117 0 218 57q-154 167 -154 391t154 391q-101 57 -218 57q-185 0 -316.5 -131.5t-131.5 -316.5zM1216 256q185 0 316.5 131.5t131.5 316.5
-t-131.5 316.5t-316.5 131.5q-117 0 -218 -57q154 -167 154 -391t-154 -391q101 -57 218 -57z" />
-    <glyph glyph-name="_518" unicode="&#xf229;" 
-d="M1472 1408q26 0 45 -19t19 -45v-416q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v262l-213 -214l140 -140q9 -10 9 -23t-9 -22l-46 -46q-9 -9 -22 -9t-23 9l-140 141l-78 -79q126 -156 126 -359q0 -117 -45.5 -223.5t-123 -184t-184 -123t-223.5 -45.5t-223.5 45.5
-t-184 123t-123 184t-45.5 223.5t45.5 223.5t123 184t184 123t223.5 45.5q203 0 359 -126l78 78l-172 172q-9 10 -9 23t9 22l46 46q9 9 22 9t23 -9l172 -172l213 213h-261q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h416zM576 0q185 0 316.5 131.5t131.5 316.5t-131.5 316.5
-t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
-    <glyph glyph-name="_519" unicode="&#xf22a;" horiz-adv-x="1280" 
-d="M640 892q217 -24 364.5 -187.5t147.5 -384.5q0 -167 -87 -306t-236 -212t-319 -54q-133 15 -245.5 88t-182 188t-80.5 249q-12 155 52.5 292t186 224t271.5 103v132h-160q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h160v165l-92 -92q-10 -9 -23 -9t-22 9l-46 46q-9 9 -9 22
-t9 23l202 201q19 19 45 19t45 -19l202 -201q9 -10 9 -23t-9 -22l-46 -46q-9 -9 -22 -9t-23 9l-92 92v-165h160q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-160v-132zM576 -128q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5
-t131.5 -316.5t316.5 -131.5z" />
-    <glyph glyph-name="_520" unicode="&#xf22b;" horiz-adv-x="2048" 
-d="M1901 621q19 -19 19 -45t-19 -45l-294 -294q-9 -10 -22.5 -10t-22.5 10l-45 45q-10 9 -10 22.5t10 22.5l185 185h-294v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-132q-24 -217 -187.5 -364.5t-384.5 -147.5q-167 0 -306 87t-212 236t-54 319q15 133 88 245.5
-t188 182t249 80.5q155 12 292 -52.5t224 -186t103 -271.5h132v224q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-224h294l-185 185q-10 9 -10 22.5t10 22.5l45 45q9 10 22.5 10t22.5 -10zM576 128q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5
-t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
-    <glyph glyph-name="_521" unicode="&#xf22c;" horiz-adv-x="1280" 
-d="M1152 960q0 -221 -147.5 -384.5t-364.5 -187.5v-612q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v612q-217 24 -364.5 187.5t-147.5 384.5q0 117 45.5 223.5t123 184t184 123t223.5 45.5t223.5 -45.5t184 -123t123 -184t45.5 -223.5zM576 512q185 0 316.5 131.5
-t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
-    <glyph glyph-name="_522" unicode="&#xf22d;" horiz-adv-x="1280" 
-d="M1024 576q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1152 576q0 -117 -45.5 -223.5t-123 -184t-184 -123t-223.5 -45.5t-223.5 45.5t-184 123t-123 184t-45.5 223.5t45.5 223.5t123 184t184 123
-t223.5 45.5t223.5 -45.5t184 -123t123 -184t45.5 -223.5z" />
-    <glyph glyph-name="_523" unicode="&#xf22e;" horiz-adv-x="1792" 
- />
-    <glyph glyph-name="_524" unicode="&#xf22f;" horiz-adv-x="1792" 
- />
-    <glyph glyph-name="_525" unicode="&#xf230;" 
-d="M1451 1408q35 0 60 -25t25 -60v-1366q0 -35 -25 -60t-60 -25h-391v595h199l30 232h-229v148q0 56 23.5 84t91.5 28l122 1v207q-63 9 -178 9q-136 0 -217.5 -80t-81.5 -226v-171h-200v-232h200v-595h-735q-35 0 -60 25t-25 60v1366q0 35 25 60t60 25h1366z" />
-    <glyph glyph-name="_526" unicode="&#xf231;" horiz-adv-x="1280" 
-d="M0 939q0 108 37.5 203.5t103.5 166.5t152 123t185 78t202 26q158 0 294 -66.5t221 -193.5t85 -287q0 -96 -19 -188t-60 -177t-100 -149.5t-145 -103t-189 -38.5q-68 0 -135 32t-96 88q-10 -39 -28 -112.5t-23.5 -95t-20.5 -71t-26 -71t-32 -62.5t-46 -77.5t-62 -86.5
-l-14 -5l-9 10q-15 157 -15 188q0 92 21.5 206.5t66.5 287.5t52 203q-32 65 -32 169q0 83 52 156t132 73q61 0 95 -40.5t34 -102.5q0 -66 -44 -191t-44 -187q0 -63 45 -104.5t109 -41.5q55 0 102 25t78.5 68t56 95t38 110.5t20 111t6.5 99.5q0 173 -109.5 269.5t-285.5 96.5
-q-200 0 -334 -129.5t-134 -328.5q0 -44 12.5 -85t27 -65t27 -45.5t12.5 -30.5q0 -28 -15 -73t-37 -45q-2 0 -17 3q-51 15 -90.5 56t-61 94.5t-32.5 108t-11 106.5z" />
-    <glyph glyph-name="_527" unicode="&#xf232;" 
-d="M985 562q13 0 97.5 -44t89.5 -53q2 -5 2 -15q0 -33 -17 -76q-16 -39 -71 -65.5t-102 -26.5q-57 0 -190 62q-98 45 -170 118t-148 185q-72 107 -71 194v8q3 91 74 158q24 22 52 22q6 0 18 -1.5t19 -1.5q19 0 26.5 -6.5t15.5 -27.5q8 -20 33 -88t25 -75q0 -21 -34.5 -57.5
-t-34.5 -46.5q0 -7 5 -15q34 -73 102 -137q56 -53 151 -101q12 -7 22 -7q15 0 54 48.5t52 48.5zM782 32q127 0 243.5 50t200.5 134t134 200.5t50 243.5t-50 243.5t-134 200.5t-200.5 134t-243.5 50t-243.5 -50t-200.5 -134t-134 -200.5t-50 -243.5q0 -203 120 -368l-79 -233
-l242 77q158 -104 345 -104zM782 1414q153 0 292.5 -60t240.5 -161t161 -240.5t60 -292.5t-60 -292.5t-161 -240.5t-240.5 -161t-292.5 -60q-195 0 -365 94l-417 -134l136 405q-108 178 -108 389q0 153 60 292.5t161 240.5t240.5 161t292.5 60z" />
-    <glyph glyph-name="_528" unicode="&#xf233;" horiz-adv-x="1792" 
-d="M128 128h1024v128h-1024v-128zM128 640h1024v128h-1024v-128zM1696 192q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM128 1152h1024v128h-1024v-128zM1696 704q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1696 1216
-q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1792 384v-384h-1792v384h1792zM1792 896v-384h-1792v384h1792zM1792 1408v-384h-1792v384h1792z" />
-    <glyph glyph-name="_529" unicode="&#xf234;" horiz-adv-x="2048" 
-d="M704 640q-159 0 -271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5t-112.5 -271.5t-271.5 -112.5zM1664 512h352q13 0 22.5 -9.5t9.5 -22.5v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-352v-352q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5
-t-9.5 22.5v352h-352q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h352v352q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5v-352zM928 288q0 -52 38 -90t90 -38h256v-238q-68 -50 -171 -50h-874q-121 0 -194 69t-73 190q0 53 3.5 103.5t14 109t26.5 108.5
-t43 97.5t62 81t85.5 53.5t111.5 20q19 0 39 -17q79 -61 154.5 -91.5t164.5 -30.5t164.5 30.5t154.5 91.5q20 17 39 17q132 0 217 -96h-223q-52 0 -90 -38t-38 -90v-192z" />
-    <glyph glyph-name="_530" unicode="&#xf235;" horiz-adv-x="2048" 
-d="M704 640q-159 0 -271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5t-112.5 -271.5t-271.5 -112.5zM1781 320l249 -249q9 -9 9 -23q0 -13 -9 -22l-136 -136q-9 -9 -22 -9q-14 0 -23 9l-249 249l-249 -249q-9 -9 -23 -9q-13 0 -22 9l-136 136
-q-9 9 -9 22q0 14 9 23l249 249l-249 249q-9 9 -9 23q0 13 9 22l136 136q9 9 22 9q14 0 23 -9l249 -249l249 249q9 9 23 9q13 0 22 -9l136 -136q9 -9 9 -22q0 -14 -9 -23zM1283 320l-181 -181q-37 -37 -37 -91q0 -53 37 -90l83 -83q-21 -3 -44 -3h-874q-121 0 -194 69
-t-73 190q0 53 3.5 103.5t14 109t26.5 108.5t43 97.5t62 81t85.5 53.5t111.5 20q19 0 39 -17q154 -122 319 -122t319 122q20 17 39 17q28 0 57 -6q-28 -27 -41 -50t-13 -56q0 -54 37 -91z" />
-    <glyph glyph-name="_531" unicode="&#xf236;" horiz-adv-x="2048" 
-d="M256 512h1728q26 0 45 -19t19 -45v-448h-256v256h-1536v-256h-256v1216q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-704zM832 832q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM2048 576v64q0 159 -112.5 271.5t-271.5 112.5h-704
-q-26 0 -45 -19t-19 -45v-384h1152z" />
-    <glyph glyph-name="_532" unicode="&#xf237;" 
-d="M1536 1536l-192 -448h192v-192h-274l-55 -128h329v-192h-411l-357 -832l-357 832h-411v192h329l-55 128h-274v192h192l-192 448h256l323 -768h378l323 768h256zM768 320l108 256h-216z" />
-    <glyph glyph-name="_533" unicode="&#xf238;" 
-d="M1088 1536q185 0 316.5 -93.5t131.5 -226.5v-896q0 -130 -125.5 -222t-305.5 -97l213 -202q16 -15 8 -35t-30 -20h-1056q-22 0 -30 20t8 35l213 202q-180 5 -305.5 97t-125.5 222v896q0 133 131.5 226.5t316.5 93.5h640zM768 192q80 0 136 56t56 136t-56 136t-136 56
-t-136 -56t-56 -136t56 -136t136 -56zM1344 768v512h-1152v-512h1152z" />
-    <glyph glyph-name="_534" unicode="&#xf239;" 
-d="M1088 1536q185 0 316.5 -93.5t131.5 -226.5v-896q0 -130 -125.5 -222t-305.5 -97l213 -202q16 -15 8 -35t-30 -20h-1056q-22 0 -30 20t8 35l213 202q-180 5 -305.5 97t-125.5 222v896q0 133 131.5 226.5t316.5 93.5h640zM288 224q66 0 113 47t47 113t-47 113t-113 47
-t-113 -47t-47 -113t47 -113t113 -47zM704 768v512h-544v-512h544zM1248 224q66 0 113 47t47 113t-47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47zM1408 768v512h-576v-512h576z" />
-    <glyph glyph-name="_535" unicode="&#xf23a;" horiz-adv-x="1792" 
-d="M597 1115v-1173q0 -25 -12.5 -42.5t-36.5 -17.5q-17 0 -33 8l-465 233q-21 10 -35.5 33.5t-14.5 46.5v1140q0 20 10 34t29 14q14 0 44 -15l511 -256q3 -3 3 -5zM661 1014l534 -866l-534 266v600zM1792 996v-1054q0 -25 -14 -40.5t-38 -15.5t-47 13l-441 220zM1789 1116
-q0 -3 -256.5 -419.5t-300.5 -487.5l-390 634l324 527q17 28 52 28q14 0 26 -6l541 -270q4 -2 4 -6z" />
-    <glyph glyph-name="_536" unicode="&#xf23b;" 
-d="M809 532l266 499h-112l-157 -312q-24 -48 -44 -92l-42 92l-155 312h-120l263 -493v-324h101v318zM1536 1408v-1536h-1536v1536h1536z" />
-    <glyph glyph-name="_537" unicode="&#xf23c;" horiz-adv-x="2296" 
-d="M478 -139q-8 -16 -27 -34.5t-37 -25.5q-25 -9 -51.5 3.5t-28.5 31.5q-1 22 40 55t68 38q23 4 34 -21.5t2 -46.5zM1819 -139q7 -16 26 -34.5t38 -25.5q25 -9 51.5 3.5t27.5 31.5q2 22 -39.5 55t-68.5 38q-22 4 -33 -21.5t-2 -46.5zM1867 -30q13 -27 56.5 -59.5t77.5 -41.5
-q45 -13 82 4.5t37 50.5q0 46 -67.5 100.5t-115.5 59.5q-40 5 -63.5 -37.5t-6.5 -76.5zM428 -30q-13 -27 -56 -59.5t-77 -41.5q-45 -13 -82 4.5t-37 50.5q0 46 67.5 100.5t115.5 59.5q40 5 63 -37.5t6 -76.5zM1158 1094h1q-41 0 -76 -15q27 -8 44 -30.5t17 -49.5
-q0 -35 -27 -60t-65 -25q-52 0 -80 43q-5 -23 -5 -42q0 -74 56 -126.5t135 -52.5q80 0 136 52.5t56 126.5t-56 126.5t-136 52.5zM1462 1312q-99 109 -220.5 131.5t-245.5 -44.5q27 60 82.5 96.5t118 39.5t121.5 -17t99.5 -74.5t44.5 -131.5zM2212 73q8 -11 -11 -42
-q7 -23 7 -40q1 -56 -44.5 -112.5t-109.5 -91.5t-118 -37q-48 -2 -92 21.5t-66 65.5q-687 -25 -1259 0q-23 -41 -66.5 -65t-92.5 -22q-86 3 -179.5 80.5t-92.5 160.5q2 22 7 40q-19 31 -11 42q6 10 31 1q14 22 41 51q-7 29 2 38q11 10 39 -4q29 20 59 34q0 29 13 37
-q23 12 51 -16q35 5 61 -2q18 -4 38 -19v73q-11 0 -18 2q-53 10 -97 44.5t-55 87.5q-9 38 0 81q15 62 93 95q2 17 19 35.5t36 23.5t33 -7.5t19 -30.5h13q46 -5 60 -23q3 -3 5 -7q10 1 30.5 3.5t30.5 3.5q-15 11 -30 17q-23 40 -91 43q0 6 1 10q-62 2 -118.5 18.5t-84.5 47.5
-q-32 36 -42.5 92t-2.5 112q16 126 90 179q23 16 52 4.5t32 -40.5q0 -1 1.5 -14t2.5 -21t3 -20t5.5 -19t8.5 -10q27 -14 76 -12q48 46 98 74q-40 4 -162 -14l47 46q61 58 163 111q145 73 282 86q-20 8 -41 15.5t-47 14t-42.5 10.5t-47.5 11t-43 10q595 126 904 -139
-q98 -84 158 -222q85 -10 121 9h1q5 3 8.5 10t5.5 19t3 19.5t3 21.5l1 14q3 28 32 40t52 -5q73 -52 91 -178q7 -57 -3.5 -113t-42.5 -91q-28 -32 -83.5 -48.5t-115.5 -18.5v-10q-71 -2 -95 -43q-14 -5 -31 -17q11 -1 32 -3.5t30 -3.5q1 5 5 8q16 18 60 23h13q5 18 19 30t33 8
-t36 -23t19 -36q79 -32 93 -95q9 -40 1 -81q-12 -53 -56 -88t-97 -44q-10 -2 -17 -2q0 -49 -1 -73q20 15 38 19q26 7 61 2q28 28 51 16q14 -9 14 -37q33 -16 59 -34q27 13 38 4q10 -10 2 -38q28 -30 41 -51q23 8 31 -1zM1937 1025q0 -29 -9 -54q82 -32 112 -132
-q4 37 -9.5 98.5t-41.5 90.5q-20 19 -36 17t-16 -20zM1859 925q35 -42 47.5 -108.5t-0.5 -124.5q67 13 97 45q13 14 18 28q-3 64 -31 114.5t-79 66.5q-15 -15 -52 -21zM1822 921q-30 0 -44 1q42 -115 53 -239q21 0 43 3q16 68 1 135t-53 100zM258 839q30 100 112 132
-q-9 25 -9 54q0 18 -16.5 20t-35.5 -17q-28 -29 -41.5 -90.5t-9.5 -98.5zM294 737q29 -31 97 -45q-13 58 -0.5 124.5t47.5 108.5v0q-37 6 -52 21q-51 -16 -78.5 -66t-31.5 -115q9 -17 18 -28zM471 683q14 124 73 235q-19 -4 -55 -18l-45 -19v1q-46 -89 -20 -196q25 -3 47 -3z
-M1434 644q8 -38 16.5 -108.5t11.5 -89.5q3 -18 9.5 -21.5t23.5 4.5q40 20 62 85.5t23 125.5q-24 2 -146 4zM1152 1285q-116 0 -199 -82.5t-83 -198.5q0 -117 83 -199.5t199 -82.5t199 82.5t83 199.5q0 116 -83 198.5t-199 82.5zM1380 646q-105 2 -211 0v1q-1 -27 2.5 -86
-t13.5 -66q29 -14 93.5 -14.5t95.5 10.5q9 3 11 39t-0.5 69.5t-4.5 46.5zM1112 447q8 4 9.5 48t-0.5 88t-4 63v1q-212 -3 -214 -3q-4 -20 -7 -62t0 -83t14 -46q34 -15 101 -16t101 10zM718 636q-16 -59 4.5 -118.5t77.5 -84.5q15 -8 24 -5t12 21q3 16 8 90t10 103
-q-69 -2 -136 -6zM591 510q3 -23 -34 -36q132 -141 271.5 -240t305.5 -154q172 49 310.5 146t293.5 250q-33 13 -30 34q0 2 0.5 3.5t1.5 3t1 2.5v1v-1q-17 2 -50 5.5t-48 4.5q-26 -90 -82 -132q-51 -38 -82 1q-5 6 -9 14q-7 13 -17 62q-2 -5 -5 -9t-7.5 -7t-8 -5.5t-9.5 -4
-l-10 -2.5t-12 -2l-12 -1.5t-13.5 -1t-13.5 -0.5q-106 -9 -163 11q-4 -17 -10 -26.5t-21 -15t-23 -7t-36 -3.5q-6 -1 -9 -1q-179 -17 -203 40q-2 -63 -56 -54q-47 8 -91 54q-12 13 -20 26q-17 29 -26 65q-58 -6 -87 -10q1 -2 4 -10zM507 -118q3 14 3 30q-17 71 -51 130
-t-73 70q-41 12 -101.5 -14.5t-104.5 -80t-39 -107.5q35 -53 100 -93t119 -42q51 -2 94 28t53 79zM510 53q23 -63 27 -119q195 113 392 174q-98 52 -180.5 120t-179.5 165q-6 -4 -29 -13q0 -1 -1 -4t-1 -5q31 -18 22 -37q-12 -23 -56 -34q-10 -13 -29 -24h-1q-2 -83 1 -150
-q19 -34 35 -73zM579 -113q532 -21 1145 0q-254 147 -428 196q-76 -35 -156 -57q-8 -3 -16 0q-65 21 -129 49q-208 -60 -416 -188h-1v-1q1 0 1 1zM1763 -67q4 54 28 120q14 38 33 71l-1 -1q3 77 3 153q-15 8 -30 25q-42 9 -56 33q-9 20 22 38q-2 4 -2 9q-16 4 -28 12
-q-204 -190 -383 -284q198 -59 414 -176zM2155 -90q5 54 -39 107.5t-104 80t-102 14.5q-38 -11 -72.5 -70.5t-51.5 -129.5q0 -16 3 -30q10 -49 53 -79t94 -28q54 2 119 42t100 93z" />
-    <glyph glyph-name="_538" unicode="&#xf23d;" horiz-adv-x="2304" 
-d="M1524 -25q0 -68 -48 -116t-116 -48t-116.5 48t-48.5 116t48.5 116.5t116.5 48.5t116 -48.5t48 -116.5zM775 -25q0 -68 -48.5 -116t-116.5 -48t-116 48t-48 116t48 116.5t116 48.5t116.5 -48.5t48.5 -116.5zM0 1469q57 -60 110.5 -104.5t121 -82t136 -63t166 -45.5
-t200 -31.5t250 -18.5t304 -9.5t372.5 -2.5q139 0 244.5 -5t181 -16.5t124 -27.5t71 -39.5t24 -51.5t-19.5 -64t-56.5 -76.5t-89.5 -91t-116 -104.5t-139 -119q-185 -157 -286 -247q29 51 76.5 109t94 105.5t94.5 98.5t83 91.5t54 80.5t13 70t-45.5 55.5t-116.5 41t-204 23.5
-t-304 5q-168 -2 -314 6t-256 23t-204.5 41t-159.5 51.5t-122.5 62.5t-91.5 66.5t-68 71.5t-50.5 69.5t-40 68t-36.5 59.5z" />
-    <glyph glyph-name="_539" unicode="&#xf23e;" horiz-adv-x="1792" 
-d="M896 1472q-169 0 -323 -66t-265.5 -177.5t-177.5 -265.5t-66 -323t66 -323t177.5 -265.5t265.5 -177.5t323 -66t323 66t265.5 177.5t177.5 265.5t66 323t-66 323t-177.5 265.5t-265.5 177.5t-323 66zM896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348
-t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM496 704q16 0 16 -16v-480q0 -16 -16 -16h-32q-16 0 -16 16v480q0 16 16 16h32zM896 640q53 0 90.5 -37.5t37.5 -90.5q0 -35 -17.5 -64t-46.5 -46v-114q0 -14 -9 -23
-t-23 -9h-64q-14 0 -23 9t-9 23v114q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5zM896 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM544 928v-96
-q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v96q0 93 65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5v-96q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v96q0 146 -103 249t-249 103t-249 -103t-103 -249zM1408 192v512q0 26 -19 45t-45 19h-896q-26 0 -45 -19t-19 -45v-512
-q0 -26 19 -45t45 -19h896q26 0 45 19t19 45z" />
-    <glyph glyph-name="_540" unicode="&#xf240;" horiz-adv-x="2304" 
-d="M1920 1024v-768h-1664v768h1664zM2048 448h128v384h-128v288q0 14 -9 23t-23 9h-1856q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h1856q14 0 23 9t9 23v288zM2304 832v-384q0 -53 -37.5 -90.5t-90.5 -37.5v-160q0 -66 -47 -113t-113 -47h-1856q-66 0 -113 47t-47 113
-v960q0 66 47 113t113 47h1856q66 0 113 -47t47 -113v-160q53 0 90.5 -37.5t37.5 -90.5z" />
-    <glyph glyph-name="_541" unicode="&#xf241;" horiz-adv-x="2304" 
-d="M256 256v768h1280v-768h-1280zM2176 960q53 0 90.5 -37.5t37.5 -90.5v-384q0 -53 -37.5 -90.5t-90.5 -37.5v-160q0 -66 -47 -113t-113 -47h-1856q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h1856q66 0 113 -47t47 -113v-160zM2176 448v384h-128v288q0 14 -9 23t-23 9
-h-1856q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h1856q14 0 23 9t9 23v288h128z" />
-    <glyph glyph-name="_542" unicode="&#xf242;" horiz-adv-x="2304" 
-d="M256 256v768h896v-768h-896zM2176 960q53 0 90.5 -37.5t37.5 -90.5v-384q0 -53 -37.5 -90.5t-90.5 -37.5v-160q0 -66 -47 -113t-113 -47h-1856q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h1856q66 0 113 -47t47 -113v-160zM2176 448v384h-128v288q0 14 -9 23t-23 9
-h-1856q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h1856q14 0 23 9t9 23v288h128z" />
-    <glyph glyph-name="_543" unicode="&#xf243;" horiz-adv-x="2304" 
-d="M256 256v768h512v-768h-512zM2176 960q53 0 90.5 -37.5t37.5 -90.5v-384q0 -53 -37.5 -90.5t-90.5 -37.5v-160q0 -66 -47 -113t-113 -47h-1856q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h1856q66 0 113 -47t47 -113v-160zM2176 448v384h-128v288q0 14 -9 23t-23 9
-h-1856q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h1856q14 0 23 9t9 23v288h128z" />
-    <glyph glyph-name="_544" unicode="&#xf244;" horiz-adv-x="2304" 
-d="M2176 960q53 0 90.5 -37.5t37.5 -90.5v-384q0 -53 -37.5 -90.5t-90.5 -37.5v-160q0 -66 -47 -113t-113 -47h-1856q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h1856q66 0 113 -47t47 -113v-160zM2176 448v384h-128v288q0 14 -9 23t-23 9h-1856q-14 0 -23 -9t-9 -23
-v-960q0 -14 9 -23t23 -9h1856q14 0 23 9t9 23v288h128z" />
-    <glyph glyph-name="_545" unicode="&#xf245;" horiz-adv-x="1280" 
-d="M1133 493q31 -30 14 -69q-17 -40 -59 -40h-382l201 -476q10 -25 0 -49t-34 -35l-177 -75q-25 -10 -49 0t-35 34l-191 452l-312 -312q-19 -19 -45 -19q-12 0 -24 5q-40 17 -40 59v1504q0 42 40 59q12 5 24 5q27 0 45 -19z" />
-    <glyph glyph-name="_546" unicode="&#xf246;" horiz-adv-x="1024" 
-d="M832 1408q-320 0 -320 -224v-416h128v-128h-128v-544q0 -224 320 -224h64v-128h-64q-272 0 -384 146q-112 -146 -384 -146h-64v128h64q320 0 320 224v544h-128v128h128v416q0 224 -320 224h-64v128h64q272 0 384 -146q112 146 384 146h64v-128h-64z" />
-    <glyph glyph-name="_547" unicode="&#xf247;" horiz-adv-x="2048" 
-d="M2048 1152h-128v-1024h128v-384h-384v128h-1280v-128h-384v384h128v1024h-128v384h384v-128h1280v128h384v-384zM1792 1408v-128h128v128h-128zM128 1408v-128h128v128h-128zM256 -128v128h-128v-128h128zM1664 0v128h128v1024h-128v128h-1280v-128h-128v-1024h128v-128
-h1280zM1920 -128v128h-128v-128h128zM1280 896h384v-768h-896v256h-384v768h896v-256zM512 512h640v512h-640v-512zM1536 256v512h-256v-384h-384v-128h640z" />
-    <glyph glyph-name="_548" unicode="&#xf248;" horiz-adv-x="2304" 
-d="M2304 768h-128v-640h128v-384h-384v128h-896v-128h-384v384h128v128h-384v-128h-384v384h128v640h-128v384h384v-128h896v128h384v-384h-128v-128h384v128h384v-384zM2048 1024v-128h128v128h-128zM1408 1408v-128h128v128h-128zM128 1408v-128h128v128h-128zM256 256
-v128h-128v-128h128zM1536 384h-128v-128h128v128zM384 384h896v128h128v640h-128v128h-896v-128h-128v-640h128v-128zM896 -128v128h-128v-128h128zM2176 -128v128h-128v-128h128zM2048 128v640h-128v128h-384v-384h128v-384h-384v128h-384v-128h128v-128h896v128h128z" />
-    <glyph glyph-name="_549" unicode="&#xf249;" 
-d="M1024 288v-416h-928q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h1344q40 0 68 -28t28 -68v-928h-416q-40 0 -68 -28t-28 -68zM1152 256h381q-15 -82 -65 -132l-184 -184q-50 -50 -132 -65v381z" />
-    <glyph glyph-name="_550" unicode="&#xf24a;" 
-d="M1400 256h-248v-248q29 10 41 22l185 185q12 12 22 41zM1120 384h288v896h-1280v-1280h896v288q0 40 28 68t68 28zM1536 1312v-1024q0 -40 -20 -88t-48 -76l-184 -184q-28 -28 -76 -48t-88 -20h-1024q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h1344q40 0 68 -28t28 -68
-z" />
-    <glyph glyph-name="_551" unicode="&#xf24b;" horiz-adv-x="2304" 
-d="M1951 538q0 -26 -15.5 -44.5t-38.5 -23.5q-8 -2 -18 -2h-153v140h153q10 0 18 -2q23 -5 38.5 -23.5t15.5 -44.5zM1933 751q0 -25 -15 -42t-38 -21q-3 -1 -15 -1h-139v129h139q3 0 8.5 -0.5t6.5 -0.5q23 -4 38 -21.5t15 -42.5zM728 587v308h-228v-308q0 -58 -38 -94.5
-t-105 -36.5q-108 0 -229 59v-112q53 -15 121 -23t109 -9l42 -1q328 0 328 217zM1442 403v113q-99 -52 -200 -59q-108 -8 -169 41t-61 142t61 142t169 41q101 -7 200 -58v112q-48 12 -100 19.5t-80 9.5l-28 2q-127 6 -218.5 -14t-140.5 -60t-71 -88t-22 -106t22 -106t71 -88
-t140.5 -60t218.5 -14q101 4 208 31zM2176 518q0 54 -43 88.5t-109 39.5v3q57 8 89 41.5t32 79.5q0 55 -41 88t-107 36q-3 0 -12 0.5t-14 0.5h-455v-510h491q74 0 121.5 36.5t47.5 96.5zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90
-t90 38h2048q52 0 90 -38t38 -90z" />
-    <glyph glyph-name="_552" unicode="&#xf24c;" horiz-adv-x="2304" 
-d="M858 295v693q-106 -41 -172 -135.5t-66 -211.5t66 -211.5t172 -134.5zM1362 641q0 117 -66 211.5t-172 135.5v-694q106 41 172 135.5t66 211.5zM1577 641q0 -159 -78.5 -294t-213.5 -213.5t-294 -78.5q-119 0 -227.5 46.5t-187 125t-125 187t-46.5 227.5q0 159 78.5 294
-t213.5 213.5t294 78.5t294 -78.5t213.5 -213.5t78.5 -294zM1960 634q0 139 -55.5 261.5t-147.5 205.5t-213.5 131t-252.5 48h-301q-176 0 -323.5 -81t-235 -230t-87.5 -335q0 -171 87 -317.5t236 -231.5t323 -85h301q129 0 251.5 50.5t214.5 135t147.5 202.5t55.5 246z
-M2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" />
-    <glyph glyph-name="_553" unicode="&#xf24d;" horiz-adv-x="1792" 
-d="M1664 -96v1088q0 13 -9.5 22.5t-22.5 9.5h-1088q-13 0 -22.5 -9.5t-9.5 -22.5v-1088q0 -13 9.5 -22.5t22.5 -9.5h1088q13 0 22.5 9.5t9.5 22.5zM1792 992v-1088q0 -66 -47 -113t-113 -47h-1088q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1088q66 0 113 -47t47 -113
-zM1408 1376v-160h-128v160q0 13 -9.5 22.5t-22.5 9.5h-1088q-13 0 -22.5 -9.5t-9.5 -22.5v-1088q0 -13 9.5 -22.5t22.5 -9.5h160v-128h-160q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1088q66 0 113 -47t47 -113z" />
-    <glyph glyph-name="_554" unicode="&#xf24e;" horiz-adv-x="2304" 
-d="M1728 1088l-384 -704h768zM448 1088l-384 -704h768zM1269 1280q-14 -40 -45.5 -71.5t-71.5 -45.5v-1291h608q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1344q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h608v1291q-40 14 -71.5 45.5t-45.5 71.5h-491q-14 0 -23 9t-9 23v64
-q0 14 9 23t23 9h491q21 57 70 92.5t111 35.5t111 -35.5t70 -92.5h491q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-491zM1088 1264q33 0 56.5 23.5t23.5 56.5t-23.5 56.5t-56.5 23.5t-56.5 -23.5t-23.5 -56.5t23.5 -56.5t56.5 -23.5zM2176 384q0 -73 -46.5 -131t-117.5 -91
-t-144.5 -49.5t-139.5 -16.5t-139.5 16.5t-144.5 49.5t-117.5 91t-46.5 131q0 11 35 81t92 174.5t107 195.5t102 184t56 100q18 33 56 33t56 -33q4 -7 56 -100t102 -184t107 -195.5t92 -174.5t35 -81zM896 384q0 -73 -46.5 -131t-117.5 -91t-144.5 -49.5t-139.5 -16.5
-t-139.5 16.5t-144.5 49.5t-117.5 91t-46.5 131q0 11 35 81t92 174.5t107 195.5t102 184t56 100q18 33 56 33t56 -33q4 -7 56 -100t102 -184t107 -195.5t92 -174.5t35 -81z" />
-    <glyph glyph-name="_555" unicode="&#xf250;" 
-d="M1408 1408q0 -261 -106.5 -461.5t-266.5 -306.5q160 -106 266.5 -306.5t106.5 -461.5h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1472q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96q0 261 106.5 461.5t266.5 306.5q-160 106 -266.5 306.5t-106.5 461.5h-96q-14 0 -23 9
-t-9 23v64q0 14 9 23t23 9h1472q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96zM874 700q77 29 149 92.5t129.5 152.5t92.5 210t35 253h-1024q0 -132 35 -253t92.5 -210t129.5 -152.5t149 -92.5q19 -7 30.5 -23.5t11.5 -36.5t-11.5 -36.5t-30.5 -23.5q-77 -29 -149 -92.5
-t-129.5 -152.5t-92.5 -210t-35 -253h1024q0 132 -35 253t-92.5 210t-129.5 152.5t-149 92.5q-19 7 -30.5 23.5t-11.5 36.5t11.5 36.5t30.5 23.5z" />
-    <glyph glyph-name="_556" unicode="&#xf251;" 
-d="M1408 1408q0 -261 -106.5 -461.5t-266.5 -306.5q160 -106 266.5 -306.5t106.5 -461.5h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1472q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96q0 261 106.5 461.5t266.5 306.5q-160 106 -266.5 306.5t-106.5 461.5h-96q-14 0 -23 9
-t-9 23v64q0 14 9 23t23 9h1472q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96zM1280 1408h-1024q0 -66 9 -128h1006q9 61 9 128zM1280 -128q0 130 -34 249.5t-90.5 208t-126.5 152t-146 94.5h-230q-76 -31 -146 -94.5t-126.5 -152t-90.5 -208t-34 -249.5h1024z" />
-    <glyph glyph-name="_557" unicode="&#xf252;" 
-d="M1408 1408q0 -261 -106.5 -461.5t-266.5 -306.5q160 -106 266.5 -306.5t106.5 -461.5h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1472q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96q0 261 106.5 461.5t266.5 306.5q-160 106 -266.5 306.5t-106.5 461.5h-96q-14 0 -23 9
-t-9 23v64q0 14 9 23t23 9h1472q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96zM1280 1408h-1024q0 -206 85 -384h854q85 178 85 384zM1223 192q-54 141 -145.5 241.5t-194.5 142.5h-230q-103 -42 -194.5 -142.5t-145.5 -241.5h910z" />
-    <glyph glyph-name="_558" unicode="&#xf253;" 
-d="M1408 1408q0 -261 -106.5 -461.5t-266.5 -306.5q160 -106 266.5 -306.5t106.5 -461.5h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1472q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96q0 261 106.5 461.5t266.5 306.5q-160 106 -266.5 306.5t-106.5 461.5h-96q-14 0 -23 9
-t-9 23v64q0 14 9 23t23 9h1472q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96zM874 700q77 29 149 92.5t129.5 152.5t92.5 210t35 253h-1024q0 -132 35 -253t92.5 -210t129.5 -152.5t149 -92.5q19 -7 30.5 -23.5t11.5 -36.5t-11.5 -36.5t-30.5 -23.5q-137 -51 -244 -196
-h700q-107 145 -244 196q-19 7 -30.5 23.5t-11.5 36.5t11.5 36.5t30.5 23.5z" />
-    <glyph glyph-name="_559" unicode="&#xf254;" 
-d="M1504 -64q14 0 23 -9t9 -23v-128q0 -14 -9 -23t-23 -9h-1472q-14 0 -23 9t-9 23v128q0 14 9 23t23 9h1472zM130 0q3 55 16 107t30 95t46 87t53.5 76t64.5 69.5t66 60t70.5 55t66.5 47.5t65 43q-43 28 -65 43t-66.5 47.5t-70.5 55t-66 60t-64.5 69.5t-53.5 76t-46 87
-t-30 95t-16 107h1276q-3 -55 -16 -107t-30 -95t-46 -87t-53.5 -76t-64.5 -69.5t-66 -60t-70.5 -55t-66.5 -47.5t-65 -43q43 -28 65 -43t66.5 -47.5t70.5 -55t66 -60t64.5 -69.5t53.5 -76t46 -87t30 -95t16 -107h-1276zM1504 1536q14 0 23 -9t9 -23v-128q0 -14 -9 -23t-23 -9
-h-1472q-14 0 -23 9t-9 23v128q0 14 9 23t23 9h1472z" />
-    <glyph glyph-name="_560" unicode="&#xf255;" 
-d="M768 1152q-53 0 -90.5 -37.5t-37.5 -90.5v-128h-32v93q0 48 -32 81.5t-80 33.5q-46 0 -79 -33t-33 -79v-429l-32 30v172q0 48 -32 81.5t-80 33.5q-46 0 -79 -33t-33 -79v-224q0 -47 35 -82l310 -296q39 -39 39 -102q0 -26 19 -45t45 -19h640q26 0 45 19t19 45v25
-q0 41 10 77l108 436q10 36 10 77v246q0 48 -32 81.5t-80 33.5q-46 0 -79 -33t-33 -79v-32h-32v125q0 40 -25 72.5t-64 40.5q-14 2 -23 2q-46 0 -79 -33t-33 -79v-128h-32v122q0 51 -32.5 89.5t-82.5 43.5q-5 1 -13 1zM768 1280q84 0 149 -50q57 34 123 34q59 0 111 -27
-t86 -76q27 7 59 7q100 0 170 -71.5t70 -171.5v-246q0 -51 -13 -108l-109 -436q-6 -24 -6 -71q0 -80 -56 -136t-136 -56h-640q-84 0 -138 58.5t-54 142.5l-308 296q-76 73 -76 175v224q0 99 70.5 169.5t169.5 70.5q11 0 16 -1q6 95 75.5 160t164.5 65q52 0 98 -21
-q72 69 174 69z" />
-    <glyph glyph-name="_561" unicode="&#xf256;" horiz-adv-x="1792" 
-d="M880 1408q-46 0 -79 -33t-33 -79v-656h-32v528q0 46 -33 79t-79 33t-79 -33t-33 -79v-528v-256l-154 205q-38 51 -102 51q-53 0 -90.5 -37.5t-37.5 -90.5q0 -43 26 -77l384 -512q38 -51 102 -51h688q34 0 61 22t34 56l76 405q5 32 5 59v498q0 46 -33 79t-79 33t-79 -33
-t-33 -79v-272h-32v528q0 46 -33 79t-79 33t-79 -33t-33 -79v-528h-32v656q0 46 -33 79t-79 33zM880 1536q68 0 125.5 -35.5t88.5 -96.5q19 4 42 4q99 0 169.5 -70.5t70.5 -169.5v-17q105 6 180.5 -64t75.5 -175v-498q0 -40 -8 -83l-76 -404q-14 -79 -76.5 -131t-143.5 -52
-h-688q-60 0 -114.5 27.5t-90.5 74.5l-384 512q-51 68 -51 154q0 106 75 181t181 75q78 0 128 -34v434q0 99 70.5 169.5t169.5 70.5q23 0 42 -4q31 61 88.5 96.5t125.5 35.5z" />
-    <glyph glyph-name="_562" unicode="&#xf257;" horiz-adv-x="1792" 
-d="M1073 -128h-177q-163 0 -226 141q-23 49 -23 102v5q-62 30 -98.5 88.5t-36.5 127.5q0 38 5 48h-261q-106 0 -181 75t-75 181t75 181t181 75h113l-44 17q-74 28 -119.5 93.5t-45.5 145.5q0 106 75 181t181 75q46 0 91 -17l628 -239h401q106 0 181 -75t75 -181v-668
-q0 -88 -54 -157.5t-140 -90.5l-339 -85q-92 -23 -186 -23zM1024 583l-155 -71l-163 -74q-30 -14 -48 -41.5t-18 -60.5q0 -46 33 -79t79 -33q26 0 46 10l338 154q-49 10 -80.5 50t-31.5 90v55zM1344 272q0 46 -33 79t-79 33q-26 0 -46 -10l-290 -132q-28 -13 -37 -17
-t-30.5 -17t-29.5 -23.5t-16 -29t-8 -40.5q0 -50 31.5 -82t81.5 -32q20 0 38 9l352 160q30 14 48 41.5t18 60.5zM1112 1024l-650 248q-24 8 -46 8q-53 0 -90.5 -37.5t-37.5 -90.5q0 -40 22.5 -73t59.5 -47l526 -200v-64h-640q-53 0 -90.5 -37.5t-37.5 -90.5t37.5 -90.5
-t90.5 -37.5h535l233 106v198q0 63 46 106l111 102h-69zM1073 0q82 0 155 19l339 85q43 11 70 45.5t27 78.5v668q0 53 -37.5 90.5t-90.5 37.5h-308l-136 -126q-36 -33 -36 -82v-296q0 -46 33 -77t79 -31t79 35t33 81v208h32v-208q0 -70 -57 -114q52 -8 86.5 -48.5t34.5 -93.5
-q0 -42 -23 -78t-61 -53l-310 -141h91z" />
-    <glyph glyph-name="_563" unicode="&#xf258;" horiz-adv-x="2048" 
-d="M1151 1536q61 0 116 -28t91 -77l572 -781q118 -159 118 -359v-355q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v177l-286 143h-546q-80 0 -136 56t-56 136v32q0 119 84.5 203.5t203.5 84.5h420l42 128h-686q-100 0 -173.5 67.5t-81.5 166.5q-65 79 -65 182v32
-q0 80 56 136t136 56h959zM1920 -64v355q0 157 -93 284l-573 781q-39 52 -103 52h-959q-26 0 -45 -19t-19 -45q0 -32 1.5 -49.5t9.5 -40.5t25 -43q10 31 35.5 50t56.5 19h832v-32h-832q-26 0 -45 -19t-19 -45q0 -44 3 -58q8 -44 44 -73t81 -29h640h91q40 0 68 -28t28 -68
-q0 -15 -5 -30l-64 -192q-10 -29 -35 -47.5t-56 -18.5h-443q-66 0 -113 -47t-47 -113v-32q0 -26 19 -45t45 -19h561q16 0 29 -7l317 -158q24 -13 38.5 -36t14.5 -50v-197q0 -26 19 -45t45 -19h384q26 0 45 19t19 45z" />
-    <glyph glyph-name="_564" unicode="&#xf259;" horiz-adv-x="2048" 
-d="M459 -256q-77 0 -137.5 47.5t-79.5 122.5l-101 401q-13 57 -13 108q0 45 -5 67l-116 477q-7 27 -7 57q0 93 62 161t155 78q17 85 82.5 139t152.5 54q83 0 148 -51.5t85 -132.5l83 -348l103 428q20 81 85 132.5t148 51.5q89 0 155.5 -57.5t80.5 -144.5q92 -10 152 -79
-t60 -162q0 -24 -7 -59l-123 -512q10 7 37.5 28.5t38.5 29.5t35 23t41 20.5t41.5 11t49.5 5.5q105 0 180 -74t75 -179q0 -62 -28.5 -118t-78.5 -94l-507 -380q-68 -51 -153 -51h-694zM1104 1408q-38 0 -68.5 -24t-39.5 -62l-164 -682h-127l-145 602q-9 38 -39.5 62t-68.5 24
-q-48 0 -80 -33t-32 -80q0 -15 3 -28l132 -547h-26l-99 408q-9 37 -40 62.5t-69 25.5q-47 0 -80 -33t-33 -79q0 -14 3 -26l116 -478q7 -28 9 -86t10 -88l100 -401q8 -32 34 -52.5t59 -20.5h694q42 0 76 26l507 379q56 43 56 110q0 52 -37.5 88.5t-89.5 36.5q-43 0 -77 -26
-l-307 -230v227q0 4 32 138t68 282t39 161q4 18 4 29q0 47 -32 81t-79 34q-39 0 -69.5 -24t-39.5 -62l-116 -482h-26l150 624q3 14 3 28q0 48 -31.5 82t-79.5 34z" />
-    <glyph glyph-name="_565" unicode="&#xf25a;" horiz-adv-x="1792" 
-d="M640 1408q-53 0 -90.5 -37.5t-37.5 -90.5v-512v-384l-151 202q-41 54 -107 54q-52 0 -89 -38t-37 -90q0 -43 26 -77l384 -512q38 -51 102 -51h718q22 0 39.5 13.5t22.5 34.5l92 368q24 96 24 194v217q0 41 -28 71t-68 30t-68 -28t-28 -68h-32v61q0 48 -32 81.5t-80 33.5
-q-46 0 -79 -33t-33 -79v-64h-32v90q0 55 -37 94.5t-91 39.5q-53 0 -90.5 -37.5t-37.5 -90.5v-96h-32v570q0 55 -37 94.5t-91 39.5zM640 1536q107 0 181.5 -77.5t74.5 -184.5v-220q22 2 32 2q99 0 173 -69q47 21 99 21q113 0 184 -87q27 7 56 7q94 0 159 -67.5t65 -161.5
-v-217q0 -116 -28 -225l-92 -368q-16 -64 -68 -104.5t-118 -40.5h-718q-60 0 -114.5 27.5t-90.5 74.5l-384 512q-51 68 -51 154q0 105 74.5 180.5t179.5 75.5q71 0 130 -35v547q0 106 75 181t181 75zM768 128v384h-32v-384h32zM1024 128v384h-32v-384h32zM1280 128v384h-32
-v-384h32z" />
-    <glyph glyph-name="_566" unicode="&#xf25b;" 
-d="M1288 889q60 0 107 -23q141 -63 141 -226v-177q0 -94 -23 -186l-85 -339q-21 -86 -90.5 -140t-157.5 -54h-668q-106 0 -181 75t-75 181v401l-239 628q-17 45 -17 91q0 106 75 181t181 75q80 0 145.5 -45.5t93.5 -119.5l17 -44v113q0 106 75 181t181 75t181 -75t75 -181
-v-261q27 5 48 5q69 0 127.5 -36.5t88.5 -98.5zM1072 896q-33 0 -60.5 -18t-41.5 -48l-74 -163l-71 -155h55q50 0 90 -31.5t50 -80.5l154 338q10 20 10 46q0 46 -33 79t-79 33zM1293 761q-22 0 -40.5 -8t-29 -16t-23.5 -29.5t-17 -30.5t-17 -37l-132 -290q-10 -20 -10 -46
-q0 -46 33 -79t79 -33q33 0 60.5 18t41.5 48l160 352q9 18 9 38q0 50 -32 81.5t-82 31.5zM128 1120q0 -22 8 -46l248 -650v-69l102 111q43 46 106 46h198l106 233v535q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5v-640h-64l-200 526q-14 37 -47 59.5t-73 22.5
-q-53 0 -90.5 -37.5t-37.5 -90.5zM1180 -128q44 0 78.5 27t45.5 70l85 339q19 73 19 155v91l-141 -310q-17 -38 -53 -61t-78 -23q-53 0 -93.5 34.5t-48.5 86.5q-44 -57 -114 -57h-208v32h208q46 0 81 33t35 79t-31 79t-77 33h-296q-49 0 -82 -36l-126 -136v-308
-q0 -53 37.5 -90.5t90.5 -37.5h668z" />
-    <glyph glyph-name="_567" unicode="&#xf25c;" horiz-adv-x="1973" 
-d="M857 992v-117q0 -13 -9.5 -22t-22.5 -9h-298v-812q0 -13 -9 -22.5t-22 -9.5h-135q-13 0 -22.5 9t-9.5 23v812h-297q-13 0 -22.5 9t-9.5 22v117q0 14 9 23t23 9h793q13 0 22.5 -9.5t9.5 -22.5zM1895 995l77 -961q1 -13 -8 -24q-10 -10 -23 -10h-134q-12 0 -21 8.5
-t-10 20.5l-46 588l-189 -425q-8 -19 -29 -19h-120q-20 0 -29 19l-188 427l-45 -590q-1 -12 -10 -20.5t-21 -8.5h-135q-13 0 -23 10q-9 10 -9 24l78 961q1 12 10 20.5t21 8.5h142q20 0 29 -19l220 -520q10 -24 20 -51q3 7 9.5 24.5t10.5 26.5l221 520q9 19 29 19h141
-q13 0 22 -8.5t10 -20.5z" />
-    <glyph glyph-name="_568" unicode="&#xf25d;" horiz-adv-x="1792" 
-d="M1042 833q0 88 -60 121q-33 18 -117 18h-123v-281h162q66 0 102 37t36 105zM1094 548l205 -373q8 -17 -1 -31q-8 -16 -27 -16h-152q-20 0 -28 17l-194 365h-155v-350q0 -14 -9 -23t-23 -9h-134q-14 0 -23 9t-9 23v960q0 14 9 23t23 9h294q128 0 190 -24q85 -31 134 -109
-t49 -180q0 -92 -42.5 -165.5t-115.5 -109.5q6 -10 9 -16zM896 1376q-150 0 -286 -58.5t-234.5 -157t-157 -234.5t-58.5 -286t58.5 -286t157 -234.5t234.5 -157t286 -58.5t286 58.5t234.5 157t157 234.5t58.5 286t-58.5 286t-157 234.5t-234.5 157t-286 58.5zM1792 640
-q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
-    <glyph glyph-name="_569" unicode="&#xf25e;" horiz-adv-x="1792" 
-d="M605 303q153 0 257 104q14 18 3 36l-45 82q-6 13 -24 17q-16 2 -27 -11l-4 -3q-4 -4 -11.5 -10t-17.5 -13.5t-23.5 -14.5t-28.5 -13t-33.5 -9.5t-37.5 -3.5q-76 0 -125 50t-49 127q0 76 48 125.5t122 49.5q37 0 71.5 -14t50.5 -28l16 -14q11 -11 26 -10q16 2 24 14l53 78
-q13 20 -2 39q-3 4 -11 12t-30 23.5t-48.5 28t-67.5 22.5t-86 10q-148 0 -246 -96.5t-98 -240.5q0 -146 97 -241.5t247 -95.5zM1235 303q153 0 257 104q14 18 4 36l-45 82q-8 14 -25 17q-16 2 -27 -11l-4 -3q-4 -4 -11.5 -10t-17.5 -13.5t-23.5 -14.5t-28.5 -13t-33.5 -9.5
-t-37.5 -3.5q-76 0 -125 50t-49 127q0 76 48 125.5t122 49.5q37 0 71.5 -14t50.5 -28l16 -14q11 -11 26 -10q16 2 24 14l53 78q13 20 -2 39q-3 4 -11 12t-30 23.5t-48.5 28t-67.5 22.5t-86 10q-147 0 -245.5 -96.5t-98.5 -240.5q0 -146 97 -241.5t247 -95.5zM896 1376
-q-150 0 -286 -58.5t-234.5 -157t-157 -234.5t-58.5 -286t58.5 -286t157 -234.5t234.5 -157t286 -58.5t286 58.5t234.5 157t157 234.5t58.5 286t-58.5 286t-157 234.5t-234.5 157t-286 58.5zM896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286t-286 -191
-t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71z" />
-    <glyph glyph-name="f260" unicode="&#xf260;" horiz-adv-x="2048" 
-d="M736 736l384 -384l-384 -384l-672 672l672 672l168 -168l-96 -96l-72 72l-480 -480l480 -480l193 193l-289 287zM1312 1312l672 -672l-672 -672l-168 168l96 96l72 -72l480 480l-480 480l-193 -193l289 -287l-96 -96l-384 384z" />
-    <glyph glyph-name="f261" unicode="&#xf261;" horiz-adv-x="1792" 
-d="M717 182l271 271l-279 279l-88 -88l192 -191l-96 -96l-279 279l279 279l40 -40l87 87l-127 128l-454 -454zM1075 190l454 454l-454 454l-271 -271l279 -279l88 88l-192 191l96 96l279 -279l-279 -279l-40 40l-87 -88zM1792 640q0 -182 -71 -348t-191 -286t-286 -191
-t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
-    <glyph glyph-name="_572" unicode="&#xf262;" horiz-adv-x="2304" 
-d="M651 539q0 -39 -27.5 -66.5t-65.5 -27.5q-39 0 -66.5 27.5t-27.5 66.5q0 38 27.5 65.5t66.5 27.5q38 0 65.5 -27.5t27.5 -65.5zM1805 540q0 -39 -27.5 -66.5t-66.5 -27.5t-66.5 27.5t-27.5 66.5t27.5 66t66.5 27t66.5 -27t27.5 -66zM765 539q0 79 -56.5 136t-136.5 57
-t-136.5 -56.5t-56.5 -136.5t56.5 -136.5t136.5 -56.5t136.5 56.5t56.5 136.5zM1918 540q0 80 -56.5 136.5t-136.5 56.5q-79 0 -136 -56.5t-57 -136.5t56.5 -136.5t136.5 -56.5t136.5 56.5t56.5 136.5zM850 539q0 -116 -81.5 -197.5t-196.5 -81.5q-116 0 -197.5 82t-81.5 197
-t82 196.5t197 81.5t196.5 -81.5t81.5 -196.5zM2004 540q0 -115 -81.5 -196.5t-197.5 -81.5q-115 0 -196.5 81.5t-81.5 196.5t81.5 196.5t196.5 81.5q116 0 197.5 -81.5t81.5 -196.5zM1040 537q0 191 -135.5 326.5t-326.5 135.5q-125 0 -231 -62t-168 -168.5t-62 -231.5
-t62 -231.5t168 -168.5t231 -62q191 0 326.5 135.5t135.5 326.5zM1708 1110q-254 111 -556 111q-319 0 -573 -110q117 0 223 -45.5t182.5 -122.5t122 -183t45.5 -223q0 115 43.5 219.5t118 180.5t177.5 123t217 50zM2187 537q0 191 -135 326.5t-326 135.5t-326.5 -135.5
-t-135.5 -326.5t135.5 -326.5t326.5 -135.5t326 135.5t135 326.5zM1921 1103h383q-44 -51 -75 -114.5t-40 -114.5q110 -151 110 -337q0 -156 -77 -288t-209 -208.5t-287 -76.5q-133 0 -249 56t-196 155q-47 -56 -129 -179q-11 22 -53.5 82.5t-74.5 97.5
-q-80 -99 -196.5 -155.5t-249.5 -56.5q-155 0 -287 76.5t-209 208.5t-77 288q0 186 110 337q-9 51 -40 114.5t-75 114.5h365q149 100 355 156.5t432 56.5q224 0 421 -56t348 -157z" />
-    <glyph glyph-name="f263" unicode="&#xf263;" horiz-adv-x="1280" 
-d="M640 629q-188 0 -321 133t-133 320q0 188 133 321t321 133t321 -133t133 -321q0 -187 -133 -320t-321 -133zM640 1306q-92 0 -157.5 -65.5t-65.5 -158.5q0 -92 65.5 -157.5t157.5 -65.5t157.5 65.5t65.5 157.5q0 93 -65.5 158.5t-157.5 65.5zM1163 574q13 -27 15 -49.5
-t-4.5 -40.5t-26.5 -38.5t-42.5 -37t-61.5 -41.5q-115 -73 -315 -94l73 -72l267 -267q30 -31 30 -74t-30 -73l-12 -13q-31 -30 -74 -30t-74 30q-67 68 -267 268l-267 -268q-31 -30 -74 -30t-73 30l-12 13q-31 30 -31 73t31 74l267 267l72 72q-203 21 -317 94
-q-39 25 -61.5 41.5t-42.5 37t-26.5 38.5t-4.5 40.5t15 49.5q10 20 28 35t42 22t56 -2t65 -35q5 -4 15 -11t43 -24.5t69 -30.5t92 -24t113 -11q91 0 174 25.5t120 50.5l38 25q33 26 65 35t56 2t42 -22t28 -35z" />
-    <glyph glyph-name="_574" unicode="&#xf264;" 
-d="M927 956q0 -66 -46.5 -112.5t-112.5 -46.5t-112.5 46.5t-46.5 112.5t46.5 112.5t112.5 46.5t112.5 -46.5t46.5 -112.5zM1141 593q-10 20 -28 32t-47.5 9.5t-60.5 -27.5q-10 -8 -29 -20t-81 -32t-127 -20t-124 18t-86 36l-27 18q-31 25 -60.5 27.5t-47.5 -9.5t-28 -32
-q-22 -45 -2 -74.5t87 -73.5q83 -53 226 -67l-51 -52q-142 -142 -191 -190q-22 -22 -22 -52.5t22 -52.5l9 -9q22 -22 52.5 -22t52.5 22l191 191q114 -115 191 -191q22 -22 52.5 -22t52.5 22l9 9q22 22 22 52.5t-22 52.5l-191 190l-52 52q141 14 225 67q67 44 87 73.5t-2 74.5
-zM1092 956q0 134 -95 229t-229 95t-229 -95t-95 -229t95 -229t229 -95t229 95t95 229zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-    <glyph glyph-name="_575" unicode="&#xf265;" horiz-adv-x="1720" 
-d="M1565 1408q65 0 110 -45.5t45 -110.5v-519q0 -176 -68 -336t-182.5 -275t-274 -182.5t-334.5 -67.5q-176 0 -335.5 67.5t-274.5 182.5t-183 275t-68 336v519q0 64 46 110t110 46h1409zM861 344q47 0 82 33l404 388q37 35 37 85q0 49 -34.5 83.5t-83.5 34.5q-47 0 -82 -33
-l-323 -310l-323 310q-35 33 -81 33q-49 0 -83.5 -34.5t-34.5 -83.5q0 -51 36 -85l405 -388q33 -33 81 -33z" />
-    <glyph glyph-name="_576" unicode="&#xf266;" horiz-adv-x="2304" 
-d="M1494 -103l-295 695q-25 -49 -158.5 -305.5t-198.5 -389.5q-1 -1 -27.5 -0.5t-26.5 1.5q-82 193 -255.5 587t-259.5 596q-21 50 -66.5 107.5t-103.5 100.5t-102 43q0 5 -0.5 24t-0.5 27h583v-50q-39 -2 -79.5 -16t-66.5 -43t-10 -64q26 -59 216.5 -499t235.5 -540
-q31 61 140 266.5t131 247.5q-19 39 -126 281t-136 295q-38 69 -201 71v50l513 -1v-47q-60 -2 -93.5 -25t-12.5 -69q33 -70 87 -189.5t86 -187.5q110 214 173 363q24 55 -10 79.5t-129 26.5q1 7 1 25v24q64 0 170.5 0.5t180 1t92.5 0.5v-49q-62 -2 -119 -33t-90 -81
-l-213 -442q13 -33 127.5 -290t121.5 -274l441 1017q-14 38 -49.5 62.5t-65 31.5t-55.5 8v50l460 -4l1 -2l-1 -44q-139 -4 -201 -145q-526 -1216 -559 -1291h-49z" />
-    <glyph glyph-name="_577" unicode="&#xf267;" horiz-adv-x="1792" 
-d="M949 643q0 -26 -16.5 -45t-41.5 -19q-26 0 -45 16.5t-19 41.5q0 26 17 45t42 19t44 -16.5t19 -41.5zM964 585l350 581q-9 -8 -67.5 -62.5t-125.5 -116.5t-136.5 -127t-117 -110.5t-50.5 -51.5l-349 -580q7 7 67 62t126 116.5t136 127t117 111t50 50.5zM1611 640
-q0 -201 -104 -371q-3 2 -17 11t-26.5 16.5t-16.5 7.5q-13 0 -13 -13q0 -10 59 -44q-74 -112 -184.5 -190.5t-241.5 -110.5l-16 67q-1 10 -15 10q-5 0 -8 -5.5t-2 -9.5l16 -68q-72 -15 -146 -15q-199 0 -372 105q1 2 13 20.5t21.5 33.5t9.5 19q0 13 -13 13q-6 0 -17 -14.5
-t-22.5 -34.5t-13.5 -23q-113 75 -192 187.5t-110 244.5l69 15q10 3 10 15q0 5 -5.5 8t-10.5 2l-68 -15q-14 72 -14 139q0 206 109 379q2 -1 18.5 -12t30 -19t17.5 -8q13 0 13 12q0 6 -12.5 15.5t-32.5 21.5l-20 12q77 112 189 189t244 107l15 -67q2 -10 15 -10q5 0 8 5.5
-t2 10.5l-15 66q71 13 134 13q204 0 379 -109q-39 -56 -39 -65q0 -13 12 -13q11 0 48 64q111 -75 187.5 -186t107.5 -241l-56 -12q-10 -2 -10 -16q0 -5 5.5 -8t9.5 -2l57 13q14 -72 14 -140zM1696 640q0 163 -63.5 311t-170.5 255t-255 170.5t-311 63.5t-311 -63.5
-t-255 -170.5t-170.5 -255t-63.5 -311t63.5 -311t170.5 -255t255 -170.5t311 -63.5t311 63.5t255 170.5t170.5 255t63.5 311zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191
-t191 -286t71 -348z" />
-    <glyph glyph-name="_578" unicode="&#xf268;" horiz-adv-x="1792" 
-d="M893 1536q240 2 451 -120q232 -134 352 -372l-742 39q-160 9 -294 -74.5t-185 -229.5l-276 424q128 159 311 245.5t383 87.5zM146 1131l337 -663q72 -143 211 -217t293 -45l-230 -451q-212 33 -385 157.5t-272.5 316t-99.5 411.5q0 267 146 491zM1732 962
-q58 -150 59.5 -310.5t-48.5 -306t-153 -272t-246 -209.5q-230 -133 -498 -119l405 623q88 131 82.5 290.5t-106.5 277.5zM896 942q125 0 213.5 -88.5t88.5 -213.5t-88.5 -213.5t-213.5 -88.5t-213.5 88.5t-88.5 213.5t88.5 213.5t213.5 88.5z" />
-    <glyph glyph-name="_579" unicode="&#xf269;" horiz-adv-x="1792" 
-d="M903 -256q-283 0 -504.5 150.5t-329.5 398.5q-58 131 -67 301t26 332.5t111 312t179 242.5l-11 -281q11 14 68 15.5t70 -15.5q42 81 160.5 138t234.5 59q-54 -45 -119.5 -148.5t-58.5 -163.5q25 -8 62.5 -13.5t63 -7.5t68 -4t50.5 -3q15 -5 9.5 -45.5t-30.5 -75.5
-q-5 -7 -16.5 -18.5t-56.5 -35.5t-101 -34l15 -189l-139 67q-18 -43 -7.5 -81.5t36 -66.5t65.5 -41.5t81 -6.5q51 9 98 34.5t83.5 45t73.5 17.5q61 -4 89.5 -33t19.5 -65q-1 -2 -2.5 -5.5t-8.5 -12.5t-18 -15.5t-31.5 -10.5t-46.5 -1q-60 -95 -144.5 -135.5t-209.5 -29.5
-q74 -61 162.5 -82.5t168.5 -6t154.5 52t128 87.5t80.5 104q43 91 39 192.5t-37.5 188.5t-78.5 125q87 -38 137 -79.5t77 -112.5q15 170 -57.5 343t-209.5 284q265 -77 412 -279.5t151 -517.5q2 -127 -40.5 -255t-123.5 -238t-189 -196t-247.5 -135.5t-288.5 -49.5z" />
-    <glyph glyph-name="_580" unicode="&#xf26a;" horiz-adv-x="1792" 
-d="M1493 1308q-165 110 -359 110q-155 0 -293 -73t-240 -200q-75 -93 -119.5 -218t-48.5 -266v-42q4 -141 48.5 -266t119.5 -218q102 -127 240 -200t293 -73q194 0 359 110q-121 -108 -274.5 -168t-322.5 -60q-29 0 -43 1q-175 8 -333 82t-272 193t-181 281t-67 339
-q0 182 71 348t191 286t286 191t348 71h3q168 -1 320.5 -60.5t273.5 -167.5zM1792 640q0 -192 -77 -362.5t-213 -296.5q-104 -63 -222 -63q-137 0 -255 84q154 56 253.5 233t99.5 405q0 227 -99 404t-253 234q119 83 254 83q119 0 226 -65q135 -125 210.5 -295t75.5 -361z
-" />
-    <glyph glyph-name="_581" unicode="&#xf26b;" horiz-adv-x="1792" 
-d="M1792 599q0 -56 -7 -104h-1151q0 -146 109.5 -244.5t257.5 -98.5q99 0 185.5 46.5t136.5 130.5h423q-56 -159 -170.5 -281t-267.5 -188.5t-321 -66.5q-187 0 -356 83q-228 -116 -394 -116q-237 0 -237 263q0 115 45 275q17 60 109 229q199 360 475 606
-q-184 -79 -427 -354q63 274 283.5 449.5t501.5 175.5q30 0 45 -1q255 117 433 117q64 0 116 -13t94.5 -40.5t66.5 -76.5t24 -115q0 -116 -75 -286q101 -182 101 -390zM1722 1239q0 83 -53 132t-137 49q-108 0 -254 -70q121 -47 222.5 -131.5t170.5 -195.5q51 135 51 216z
-M128 2q0 -86 48.5 -132.5t134.5 -46.5q115 0 266 83q-122 72 -213.5 183t-137.5 245q-98 -205 -98 -332zM632 715h728q-5 142 -113 237t-251 95q-144 0 -251.5 -95t-112.5 -237z" />
-    <glyph glyph-name="_582" unicode="&#xf26c;" horiz-adv-x="2048" 
-d="M1792 288v960q0 13 -9.5 22.5t-22.5 9.5h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5zM1920 1248v-960q0 -66 -47 -113t-113 -47h-736v-128h352q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23
-v64q0 14 9 23t23 9h352v128h-736q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
-    <glyph glyph-name="_583" unicode="&#xf26d;" horiz-adv-x="1792" 
-d="M138 1408h197q-70 -64 -126 -149q-36 -56 -59 -115t-30 -125.5t-8.5 -120t10.5 -132t21 -126t28 -136.5q4 -19 6 -28q51 -238 81 -329q57 -171 152 -275h-272q-48 0 -82 34t-34 82v1304q0 48 34 82t82 34zM1346 1408h308q48 0 82 -34t34 -82v-1304q0 -48 -34 -82t-82 -34
-h-178q212 210 196 565l-469 -101q-2 -45 -12 -82t-31 -72t-59.5 -59.5t-93.5 -36.5q-123 -26 -199 40q-32 27 -53 61t-51.5 129t-64.5 258q-35 163 -45.5 263t-5.5 139t23 77q20 41 62.5 73t102.5 45q45 12 83.5 6.5t67 -17t54 -35t43 -48t34.5 -56.5l468 100
-q-68 175 -180 287z" />
-    <glyph glyph-name="_584" unicode="&#xf26e;" 
-d="M1401 -11l-6 -6q-113 -113 -259 -175q-154 -64 -317 -64q-165 0 -317 64q-148 63 -259 175q-113 112 -175 258q-42 103 -54 189q-4 28 48 36q51 8 56 -20q1 -1 1 -4q18 -90 46 -159q50 -124 152 -226q98 -98 226 -152q132 -56 276 -56q143 0 276 56q128 55 225 152l6 6
-q10 10 25 6q12 -3 33 -22q36 -37 17 -58zM929 604l-66 -66l63 -63q21 -21 -7 -49q-17 -17 -32 -17q-10 0 -19 10l-62 61l-66 -66q-5 -5 -15 -5q-15 0 -31 16l-2 2q-18 15 -18 29q0 7 8 17l66 65l-66 66q-16 16 14 45q18 18 31 18q6 0 13 -5l65 -66l65 65q18 17 48 -13
-q27 -27 11 -44zM1400 547q0 -118 -46 -228q-45 -105 -126 -186q-80 -80 -187 -126t-228 -46t-228 46t-187 126q-82 82 -125 186q-15 33 -15 40h-1q-9 27 43 44q50 16 60 -12q37 -99 97 -167h1v339v2q3 136 102 232q105 103 253 103q147 0 251 -103t104 -249
-q0 -147 -104.5 -251t-250.5 -104q-58 0 -112 16q-28 11 -13 61q16 51 44 43l14 -3q14 -3 33 -6t30 -3q104 0 176 71.5t72 174.5q0 101 -72 171q-71 71 -175 71q-107 0 -178 -80q-64 -72 -64 -160v-413q110 -67 242 -67q96 0 185 36.5t156 103.5t103.5 155t36.5 183
-q0 198 -141 339q-140 140 -339 140q-200 0 -340 -140q-53 -53 -77 -87l-2 -2q-8 -11 -13 -15.5t-21.5 -9.5t-38.5 3q-21 5 -36.5 16.5t-15.5 26.5v680q0 15 10.5 26.5t27.5 11.5h877q30 0 30 -55t-30 -55h-811v-483h1q40 42 102 84t108 61q109 46 231 46q121 0 228 -46
-t187 -126q81 -81 126 -186q46 -112 46 -229zM1369 1128q9 -8 9 -18t-5.5 -18t-16.5 -21q-26 -26 -39 -26q-9 0 -16 7q-106 91 -207 133q-128 56 -276 56q-133 0 -262 -49q-27 -10 -45 37q-9 25 -8 38q3 16 16 20q130 57 299 57q164 0 316 -64q137 -58 235 -152z" />
-    <glyph glyph-name="_585" unicode="&#xf270;" horiz-adv-x="1792" 
-d="M1551 60q15 6 26 3t11 -17.5t-15 -33.5q-13 -16 -44 -43.5t-95.5 -68t-141 -74t-188 -58t-229.5 -24.5q-119 0 -238 31t-209 76.5t-172.5 104t-132.5 105t-84 87.5q-8 9 -10 16.5t1 12t8 7t11.5 2t11.5 -4.5q192 -117 300 -166q389 -176 799 -90q190 40 391 135z
-M1758 175q11 -16 2.5 -69.5t-28.5 -102.5q-34 -83 -85 -124q-17 -14 -26 -9t0 24q21 45 44.5 121.5t6.5 98.5q-5 7 -15.5 11.5t-27 6t-29.5 2.5t-35 0t-31.5 -2t-31 -3t-22.5 -2q-6 -1 -13 -1.5t-11 -1t-8.5 -1t-7 -0.5h-5.5h-4.5t-3 0.5t-2 1.5l-1.5 3q-6 16 47 40t103 30
-q46 7 108 1t76 -24zM1364 618q0 -31 13.5 -64t32 -58t37.5 -46t33 -32l13 -11l-227 -224q-40 37 -79 75.5t-58 58.5l-19 20q-11 11 -25 33q-38 -59 -97.5 -102.5t-127.5 -63.5t-140 -23t-137.5 21t-117.5 65.5t-83 113t-31 162.5q0 84 28 154t72 116.5t106.5 83t122.5 57
-t130 34.5t119.5 18.5t99.5 6.5v127q0 65 -21 97q-34 53 -121 53q-6 0 -16.5 -1t-40.5 -12t-56 -29.5t-56 -59.5t-48 -96l-294 27q0 60 22 119t67 113t108 95t151.5 65.5t190.5 24.5q100 0 181 -25t129.5 -61.5t81 -83t45 -86t12.5 -73.5v-589zM692 597q0 -86 70 -133
-q66 -44 139 -22q84 25 114 123q14 45 14 101v162q-59 -2 -111 -12t-106.5 -33.5t-87 -71t-32.5 -114.5z" />
-    <glyph glyph-name="_586" unicode="&#xf271;" horiz-adv-x="1792" 
-d="M1536 1280q52 0 90 -38t38 -90v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128zM1152 1376v-288q0 -14 9 -23t23 -9
-h64q14 0 23 9t9 23v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM384 1376v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM1536 -128v1024h-1408v-1024h1408zM896 448h224q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-224
-v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-224q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v224q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-224z" />
-    <glyph glyph-name="_587" unicode="&#xf272;" horiz-adv-x="1792" 
-d="M1152 416v-64q0 -14 -9 -23t-23 -9h-576q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h576q14 0 23 -9t9 -23zM128 -128h1408v1024h-1408v-1024zM512 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1280 1088v288q0 14 -9 23
-t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1664 1152v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47
-t47 -113v-96h128q52 0 90 -38t38 -90z" />
-    <glyph glyph-name="_588" unicode="&#xf273;" horiz-adv-x="1792" 
-d="M1111 151l-46 -46q-9 -9 -22 -9t-23 9l-188 189l-188 -189q-10 -9 -23 -9t-22 9l-46 46q-9 9 -9 22t9 23l189 188l-189 188q-9 10 -9 23t9 22l46 46q9 9 22 9t23 -9l188 -188l188 188q10 9 23 9t22 -9l46 -46q9 -9 9 -22t-9 -23l-188 -188l188 -188q9 -10 9 -23t-9 -22z
-M128 -128h1408v1024h-1408v-1024zM512 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1280 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1664 1152v-1280
-q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" />
-    <glyph glyph-name="_589" unicode="&#xf274;" horiz-adv-x="1792" 
-d="M1303 572l-512 -512q-10 -9 -23 -9t-23 9l-288 288q-9 10 -9 23t9 22l46 46q9 9 22 9t23 -9l220 -220l444 444q10 9 23 9t22 -9l46 -46q9 -9 9 -22t-9 -23zM128 -128h1408v1024h-1408v-1024zM512 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23
-t23 -9h64q14 0 23 9t9 23zM1280 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1664 1152v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47
-t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" />
-    <glyph glyph-name="_590" unicode="&#xf275;" horiz-adv-x="1792" 
-d="M448 1536q26 0 45 -19t19 -45v-891l536 429q17 14 40 14q26 0 45 -19t19 -45v-379l536 429q17 14 40 14q26 0 45 -19t19 -45v-1152q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v1664q0 26 19 45t45 19h384z" />
-    <glyph glyph-name="_591" unicode="&#xf276;" horiz-adv-x="1024" 
-d="M512 448q66 0 128 15v-655q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v655q62 -15 128 -15zM512 1536q212 0 362 -150t150 -362t-150 -362t-362 -150t-362 150t-150 362t150 362t362 150zM512 1312q14 0 23 9t9 23t-9 23t-23 9q-146 0 -249 -103t-103 -249
-q0 -14 9 -23t23 -9t23 9t9 23q0 119 84.5 203.5t203.5 84.5z" />
-    <glyph glyph-name="_592" unicode="&#xf277;" horiz-adv-x="1792" 
-d="M1745 1239q10 -10 10 -23t-10 -23l-141 -141q-28 -28 -68 -28h-1344q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h576v64q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-64h512q40 0 68 -28zM768 320h256v-512q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v512zM1600 768
-q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19h-1344q-40 0 -68 28l-141 141q-10 10 -10 23t10 23l141 141q28 28 68 28h512v192h256v-192h576z" />
-    <glyph glyph-name="_593" unicode="&#xf278;" horiz-adv-x="2048" 
-d="M2020 1525q28 -20 28 -53v-1408q0 -20 -11 -36t-29 -23l-640 -256q-24 -11 -48 0l-616 246l-616 -246q-10 -5 -24 -5q-19 0 -36 11q-28 20 -28 53v1408q0 20 11 36t29 23l640 256q24 11 48 0l616 -246l616 246q32 13 60 -6zM736 1390v-1270l576 -230v1270zM128 1173
-v-1270l544 217v1270zM1920 107v1270l-544 -217v-1270z" />
-    <glyph glyph-name="_594" unicode="&#xf279;" horiz-adv-x="1792" 
-d="M512 1536q13 0 22.5 -9.5t9.5 -22.5v-1472q0 -20 -17 -28l-480 -256q-7 -4 -15 -4q-13 0 -22.5 9.5t-9.5 22.5v1472q0 20 17 28l480 256q7 4 15 4zM1760 1536q13 0 22.5 -9.5t9.5 -22.5v-1472q0 -20 -17 -28l-480 -256q-7 -4 -15 -4q-13 0 -22.5 9.5t-9.5 22.5v1472
-q0 20 17 28l480 256q7 4 15 4zM640 1536q8 0 14 -3l512 -256q18 -10 18 -29v-1472q0 -13 -9.5 -22.5t-22.5 -9.5q-8 0 -14 3l-512 256q-18 10 -18 29v1472q0 13 9.5 22.5t22.5 9.5z" />
-    <glyph glyph-name="_595" unicode="&#xf27a;" horiz-adv-x="1792" 
-d="M640 640q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 640q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1408 640q0 53 -37.5 90.5t-90.5 37.5
-t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1792 640q0 -174 -120 -321.5t-326 -233t-450 -85.5q-110 0 -211 18q-173 -173 -435 -229q-52 -10 -86 -13q-12 -1 -22 6t-13 18q-4 15 20 37q5 5 23.5 21.5t25.5 23.5t23.5 25.5t24 31.5t20.5 37
-t20 48t14.5 57.5t12.5 72.5q-146 90 -229.5 216.5t-83.5 269.5q0 174 120 321.5t326 233t450 85.5t450 -85.5t326 -233t120 -321.5z" />
-    <glyph glyph-name="_596" unicode="&#xf27b;" horiz-adv-x="1792" 
-d="M640 640q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1024 640q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 -53 -37.5 -90.5t-90.5 -37.5
-t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM896 1152q-204 0 -381.5 -69.5t-282 -187.5t-104.5 -255q0 -112 71.5 -213.5t201.5 -175.5l87 -50l-27 -96q-24 -91 -70 -172q152 63 275 171l43 38l57 -6q69 -8 130 -8q204 0 381.5 69.5t282 187.5
-t104.5 255t-104.5 255t-282 187.5t-381.5 69.5zM1792 640q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22h-5q-15 0 -27 10.5t-16 27.5v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51
-t27 59t26 76q-157 89 -247.5 220t-90.5 281q0 130 71 248.5t191 204.5t286 136.5t348 50.5t348 -50.5t286 -136.5t191 -204.5t71 -248.5z" />
-    <glyph glyph-name="_597" unicode="&#xf27c;" horiz-adv-x="1024" 
-d="M512 345l512 295v-591l-512 -296v592zM0 640v-591l512 296zM512 1527v-591l-512 -296v591zM512 936l512 295v-591z" />
-    <glyph glyph-name="_598" unicode="&#xf27d;" horiz-adv-x="1792" 
-d="M1709 1018q-10 -236 -332 -651q-333 -431 -562 -431q-142 0 -240 263q-44 160 -132 482q-72 262 -157 262q-18 0 -127 -76l-77 98q24 21 108 96.5t130 115.5q156 138 241 146q95 9 153 -55.5t81 -203.5q44 -287 66 -373q55 -249 120 -249q51 0 154 161q101 161 109 246
-q13 139 -109 139q-57 0 -121 -26q120 393 459 382q251 -8 236 -326z" />
-    <glyph glyph-name="f27e" unicode="&#xf27e;" 
-d="M0 1408h1536v-1536h-1536v1536zM1085 293l-221 631l221 297h-634l221 -297l-221 -631l317 -304z" />
-    <glyph glyph-name="uniF280" unicode="&#xf280;" 
-d="M0 1408h1536v-1536h-1536v1536zM908 1088l-12 -33l75 -83l-31 -114l25 -25l107 57l107 -57l25 25l-31 114l75 83l-12 33h-95l-53 96h-32l-53 -96h-95zM641 925q32 0 44.5 -16t11.5 -63l174 21q0 55 -17.5 92.5t-50.5 56t-69 25.5t-85 7q-133 0 -199 -57.5t-66 -182.5v-72
-h-96v-128h76q20 0 20 -8v-382q0 -14 -5 -20t-18 -7l-73 -7v-88h448v86l-149 14q-6 1 -8.5 1.5t-3.5 2.5t-0.5 4t1 7t0.5 10v387h191l38 128h-231q-6 0 -2 6t4 9v80q0 27 1.5 40.5t7.5 28t19.5 20t36.5 5.5zM1248 96v86l-54 9q-7 1 -9.5 2.5t-2.5 3t1 7.5t1 12v520h-275
-l-23 -101l83 -22q23 -7 23 -27v-370q0 -14 -6 -18.5t-20 -6.5l-70 -9v-86h352z" />
-    <glyph glyph-name="uniF281" unicode="&#xf281;" horiz-adv-x="1792" 
-d="M1792 690q0 -58 -29.5 -105.5t-79.5 -72.5q12 -46 12 -96q0 -155 -106.5 -287t-290.5 -208.5t-400 -76.5t-399.5 76.5t-290 208.5t-106.5 287q0 47 11 94q-51 25 -82 73.5t-31 106.5q0 82 58 140.5t141 58.5q85 0 145 -63q218 152 515 162l116 521q3 13 15 21t26 5
-l369 -81q18 37 54 59.5t79 22.5q62 0 106 -43.5t44 -105.5t-44 -106t-106 -44t-105.5 43.5t-43.5 105.5l-334 74l-104 -472q300 -9 519 -160q58 61 143 61q83 0 141 -58.5t58 -140.5zM418 491q0 -62 43.5 -106t105.5 -44t106 44t44 106t-44 105.5t-106 43.5q-61 0 -105 -44
-t-44 -105zM1228 136q11 11 11 26t-11 26q-10 10 -25 10t-26 -10q-41 -42 -121 -62t-160 -20t-160 20t-121 62q-11 10 -26 10t-25 -10q-11 -10 -11 -25.5t11 -26.5q43 -43 118.5 -68t122.5 -29.5t91 -4.5t91 4.5t122.5 29.5t118.5 68zM1225 341q62 0 105.5 44t43.5 106
-q0 61 -44 105t-105 44q-62 0 -106 -43.5t-44 -105.5t44 -106t106 -44z" />
-    <glyph glyph-name="_602" unicode="&#xf282;" horiz-adv-x="1792" 
-d="M69 741h1q16 126 58.5 241.5t115 217t167.5 176t223.5 117.5t276.5 43q231 0 414 -105.5t294 -303.5q104 -187 104 -442v-188h-1125q1 -111 53.5 -192.5t136.5 -122.5t189.5 -57t213 -3t208 46.5t173.5 84.5v-377q-92 -55 -229.5 -92t-312.5 -38t-316 53
-q-189 73 -311.5 249t-124.5 372q-3 242 111 412t325 268q-48 -60 -78 -125.5t-46 -159.5h635q8 77 -8 140t-47 101.5t-70.5 66.5t-80.5 41t-75 20.5t-56 8.5l-22 1q-135 -5 -259.5 -44.5t-223.5 -104.5t-176 -140.5t-138 -163.5z" />
-    <glyph glyph-name="_603" unicode="&#xf283;" horiz-adv-x="2304" 
-d="M0 32v608h2304v-608q0 -66 -47 -113t-113 -47h-1984q-66 0 -113 47t-47 113zM640 256v-128h384v128h-384zM256 256v-128h256v128h-256zM2144 1408q66 0 113 -47t47 -113v-224h-2304v224q0 66 47 113t113 47h1984z" />
-    <glyph glyph-name="_604" unicode="&#xf284;" horiz-adv-x="1792" 
-d="M1584 246l-218 111q-74 -120 -196.5 -189t-263.5 -69q-147 0 -271 72t-196 196t-72 270q0 110 42.5 209.5t115 172t172 115t209.5 42.5q131 0 247.5 -60.5t192.5 -168.5l215 125q-110 169 -286.5 265t-378.5 96q-161 0 -308 -63t-253 -169t-169 -253t-63 -308t63 -308
-t169 -253t253 -169t308 -63q213 0 397.5 107t290.5 292zM1030 643l693 -352q-116 -253 -334.5 -400t-492.5 -147q-182 0 -348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71q260 0 470.5 -133.5t335.5 -366.5zM1543 640h-39v-160h-96v352h136q32 0 54.5 -20
-t28.5 -48t1 -56t-27.5 -48t-57.5 -20z" />
-    <glyph glyph-name="uniF285" unicode="&#xf285;" horiz-adv-x="1792" 
-d="M1427 827l-614 386l92 151h855zM405 562l-184 116v858l1183 -743zM1424 697l147 -95v-858l-532 335zM1387 718l-500 -802h-855l356 571z" />
-    <glyph glyph-name="uniF286" unicode="&#xf286;" horiz-adv-x="1792" 
-d="M640 528v224q0 16 -16 16h-96q-16 0 -16 -16v-224q0 -16 16 -16h96q16 0 16 16zM1152 528v224q0 16 -16 16h-96q-16 0 -16 -16v-224q0 -16 16 -16h96q16 0 16 16zM1664 496v-752h-640v320q0 80 -56 136t-136 56t-136 -56t-56 -136v-320h-640v752q0 16 16 16h96
-q16 0 16 -16v-112h128v624q0 16 16 16h96q16 0 16 -16v-112h128v112q0 16 16 16h96q16 0 16 -16v-112h128v112q0 6 2.5 9.5t8.5 5t9.5 2t11.5 0t9 -0.5v391q-32 15 -32 50q0 23 16.5 39t38.5 16t38.5 -16t16.5 -39q0 -35 -32 -50v-17q45 10 83 10q21 0 59.5 -7.5t54.5 -7.5
-q17 0 47 7.5t37 7.5q16 0 16 -16v-210q0 -15 -35 -21.5t-62 -6.5q-18 0 -54.5 7.5t-55.5 7.5q-40 0 -90 -12v-133q1 0 9 0.5t11.5 0t9.5 -2t8.5 -5t2.5 -9.5v-112h128v112q0 16 16 16h96q16 0 16 -16v-112h128v112q0 16 16 16h96q16 0 16 -16v-624h128v112q0 16 16 16h96
-q16 0 16 -16z" />
-    <glyph glyph-name="_607" unicode="&#xf287;" horiz-adv-x="2304" 
-d="M2288 731q16 -8 16 -27t-16 -27l-320 -192q-8 -5 -16 -5q-9 0 -16 4q-16 10 -16 28v128h-858q37 -58 83 -165q16 -37 24.5 -55t24 -49t27 -47t27 -34t31.5 -26t33 -8h96v96q0 14 9 23t23 9h320q14 0 23 -9t9 -23v-320q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23v96h-96
-q-32 0 -61 10t-51 23.5t-45 40.5t-37 46t-33.5 57t-28.5 57.5t-28 60.5q-23 53 -37 81.5t-36 65t-44.5 53.5t-46.5 17h-360q-22 -84 -91 -138t-157 -54q-106 0 -181 75t-75 181t75 181t181 75q88 0 157 -54t91 -138h104q24 0 46.5 17t44.5 53.5t36 65t37 81.5q19 41 28 60.5
-t28.5 57.5t33.5 57t37 46t45 40.5t51 23.5t61 10h107q21 57 70 92.5t111 35.5q80 0 136 -56t56 -136t-56 -136t-136 -56q-62 0 -111 35.5t-70 92.5h-107q-17 0 -33 -8t-31.5 -26t-27 -34t-27 -47t-24 -49t-24.5 -55q-46 -107 -83 -165h1114v128q0 18 16 28t32 -1z" />
-    <glyph glyph-name="_608" unicode="&#xf288;" horiz-adv-x="1792" 
-d="M1150 774q0 -56 -39.5 -95t-95.5 -39h-253v269h253q56 0 95.5 -39.5t39.5 -95.5zM1329 774q0 130 -91.5 222t-222.5 92h-433v-896h180v269h253q130 0 222 91.5t92 221.5zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348
-t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
-    <glyph glyph-name="_609" unicode="&#xf289;" horiz-adv-x="2304" 
-d="M1645 438q0 59 -34 106.5t-87 68.5q-7 -45 -23 -92q-7 -24 -27.5 -38t-44.5 -14q-12 0 -24 3q-31 10 -45 38.5t-4 58.5q23 71 23 143q0 123 -61 227.5t-166 165.5t-228 61q-134 0 -247 -73t-167 -194q108 -28 188 -106q22 -23 22 -55t-22 -54t-54 -22t-55 22
-q-75 75 -180 75q-106 0 -181 -74.5t-75 -180.5t75 -180.5t181 -74.5h1046q79 0 134.5 55.5t55.5 133.5zM1798 438q0 -142 -100.5 -242t-242.5 -100h-1046q-169 0 -289 119.5t-120 288.5q0 153 100 267t249 136q62 184 221 298t354 114q235 0 408.5 -158.5t196.5 -389.5
-q116 -25 192.5 -118.5t76.5 -214.5zM2048 438q0 -175 -97 -319q-23 -33 -64 -33q-24 0 -43 13q-26 17 -32 48.5t12 57.5q71 104 71 233t-71 233q-18 26 -12 57t32 49t57.5 11.5t49.5 -32.5q97 -142 97 -318zM2304 438q0 -244 -134 -443q-23 -34 -64 -34q-23 0 -42 13
-q-26 18 -32.5 49t11.5 57q108 164 108 358q0 195 -108 357q-18 26 -11.5 57.5t32.5 48.5q26 18 57 12t49 -33q134 -198 134 -442z" />
-    <glyph glyph-name="_610" unicode="&#xf28a;" 
-d="M1500 -13q0 -89 -63 -152.5t-153 -63.5t-153.5 63.5t-63.5 152.5q0 90 63.5 153.5t153.5 63.5t153 -63.5t63 -153.5zM1267 268q-115 -15 -192.5 -102.5t-77.5 -205.5q0 -74 33 -138q-146 -78 -379 -78q-109 0 -201 21t-153.5 54.5t-110.5 76.5t-76 85t-44.5 83
-t-23.5 66.5t-6 39.5q0 19 4.5 42.5t18.5 56t36.5 58t64 43.5t94.5 18t94 -17.5t63 -41t35.5 -53t17.5 -49t4 -33.5q0 -34 -23 -81q28 -27 82 -42t93 -17l40 -1q115 0 190 51t75 133q0 26 -9 48.5t-31.5 44.5t-49.5 41t-74 44t-93.5 47.5t-119.5 56.5q-28 13 -43 20
-q-116 55 -187 100t-122.5 102t-72 125.5t-20.5 162.5q0 78 20.5 150t66 137.5t112.5 114t166.5 77t221.5 28.5q120 0 220 -26t164.5 -67t109.5 -94t64 -105.5t19 -103.5q0 -46 -15 -82.5t-36.5 -58t-48.5 -36t-49 -19.5t-39 -5h-8h-32t-39 5t-44 14t-41 28t-37 46t-24 70.5
-t-10 97.5q-15 16 -59 25.5t-81 10.5l-37 1q-68 0 -117.5 -31t-70.5 -70t-21 -76q0 -24 5 -43t24 -46t53 -51t97 -53.5t150 -58.5q76 -25 138.5 -53.5t109 -55.5t83 -59t60.5 -59.5t41 -62.5t26.5 -62t14.5 -63.5t6 -62t1 -62.5z" />
-    <glyph glyph-name="_611" unicode="&#xf28b;" 
-d="M704 352v576q0 14 -9 23t-23 9h-256q-14 0 -23 -9t-9 -23v-576q0 -14 9 -23t23 -9h256q14 0 23 9t9 23zM1152 352v576q0 14 -9 23t-23 9h-256q-14 0 -23 -9t-9 -23v-576q0 -14 9 -23t23 -9h256q14 0 23 9t9 23zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103
-t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-    <glyph glyph-name="_612" unicode="&#xf28c;" 
-d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM768 96q148 0 273 73t198 198t73 273t-73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273
-t73 -273t198 -198t273 -73zM864 320q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-192zM480 320q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-192z" />
-    <glyph glyph-name="_613" unicode="&#xf28d;" 
-d="M1088 352v576q0 14 -9 23t-23 9h-576q-14 0 -23 -9t-9 -23v-576q0 -14 9 -23t23 -9h576q14 0 23 9t9 23zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5
-t103 -385.5z" />
-    <glyph glyph-name="_614" unicode="&#xf28e;" 
-d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM768 96q148 0 273 73t198 198t73 273t-73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273
-t73 -273t198 -198t273 -73zM480 320q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h576q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-576z" />
-    <glyph glyph-name="_615" unicode="&#xf290;" horiz-adv-x="1792" 
-d="M1757 128l35 -313q3 -28 -16 -50q-19 -21 -48 -21h-1664q-29 0 -48 21q-19 22 -16 50l35 313h1722zM1664 967l86 -775h-1708l86 775q3 24 21 40.5t43 16.5h256v-128q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5v128h384v-128q0 -53 37.5 -90.5t90.5 -37.5
-t90.5 37.5t37.5 90.5v128h256q25 0 43 -16.5t21 -40.5zM1280 1152v-256q0 -26 -19 -45t-45 -19t-45 19t-19 45v256q0 106 -75 181t-181 75t-181 -75t-75 -181v-256q0 -26 -19 -45t-45 -19t-45 19t-19 45v256q0 159 112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5z" />
-    <glyph glyph-name="_616" unicode="&#xf291;" horiz-adv-x="2048" 
-d="M1920 768q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5h-15l-115 -662q-8 -46 -44 -76t-82 -30h-1280q-46 0 -82 30t-44 76l-115 662h-15q-53 0 -90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5h1792zM485 -32q26 2 43.5 22.5t15.5 46.5l-32 416q-2 26 -22.5 43.5
-t-46.5 15.5t-43.5 -22.5t-15.5 -46.5l32 -416q2 -25 20.5 -42t43.5 -17h5zM896 32v416q0 26 -19 45t-45 19t-45 -19t-19 -45v-416q0 -26 19 -45t45 -19t45 19t19 45zM1280 32v416q0 26 -19 45t-45 19t-45 -19t-19 -45v-416q0 -26 19 -45t45 -19t45 19t19 45zM1632 27l32 416
-q2 26 -15.5 46.5t-43.5 22.5t-46.5 -15.5t-22.5 -43.5l-32 -416q-2 -26 15.5 -46.5t43.5 -22.5h5q25 0 43.5 17t20.5 42zM476 1244l-93 -412h-132l101 441q19 88 89 143.5t160 55.5h167q0 26 19 45t45 19h384q26 0 45 -19t19 -45h167q90 0 160 -55.5t89 -143.5l101 -441
-h-132l-93 412q-11 44 -45.5 72t-79.5 28h-167q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45h-167q-45 0 -79.5 -28t-45.5 -72z" />
-    <glyph glyph-name="_617" unicode="&#xf292;" horiz-adv-x="1792" 
-d="M991 512l64 256h-254l-64 -256h254zM1759 1016l-56 -224q-7 -24 -31 -24h-327l-64 -256h311q15 0 25 -12q10 -14 6 -28l-56 -224q-5 -24 -31 -24h-327l-81 -328q-7 -24 -31 -24h-224q-16 0 -26 12q-9 12 -6 28l78 312h-254l-81 -328q-7 -24 -31 -24h-225q-15 0 -25 12
-q-9 12 -6 28l78 312h-311q-15 0 -25 12q-9 12 -6 28l56 224q7 24 31 24h327l64 256h-311q-15 0 -25 12q-10 14 -6 28l56 224q5 24 31 24h327l81 328q7 24 32 24h224q15 0 25 -12q9 -12 6 -28l-78 -312h254l81 328q7 24 32 24h224q15 0 25 -12q9 -12 6 -28l-78 -312h311
-q15 0 25 -12q9 -12 6 -28z" />
-    <glyph glyph-name="_618" unicode="&#xf293;" 
-d="M841 483l148 -148l-149 -149zM840 1094l149 -149l-148 -148zM710 -130l464 464l-306 306l306 306l-464 464v-611l-255 255l-93 -93l320 -321l-320 -321l93 -93l255 255v-611zM1429 640q0 -209 -32 -365.5t-87.5 -257t-140.5 -162.5t-181.5 -86.5t-219.5 -24.5
-t-219.5 24.5t-181.5 86.5t-140.5 162.5t-87.5 257t-32 365.5t32 365.5t87.5 257t140.5 162.5t181.5 86.5t219.5 24.5t219.5 -24.5t181.5 -86.5t140.5 -162.5t87.5 -257t32 -365.5z" />
-    <glyph glyph-name="_619" unicode="&#xf294;" horiz-adv-x="1024" 
-d="M596 113l173 172l-173 172v-344zM596 823l173 172l-173 172v-344zM628 640l356 -356l-539 -540v711l-297 -296l-108 108l372 373l-372 373l108 108l297 -296v711l539 -540z" />
-    <glyph glyph-name="_620" unicode="&#xf295;" 
-d="M1280 256q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM512 1024q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM1536 256q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5
-t112.5 -271.5zM1440 1344q0 -20 -13 -38l-1056 -1408q-19 -26 -51 -26h-160q-26 0 -45 19t-19 45q0 20 13 38l1056 1408q19 26 51 26h160q26 0 45 -19t19 -45zM768 1024q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5
-t271.5 -112.5t112.5 -271.5z" />
-    <glyph glyph-name="_621" unicode="&#xf296;" horiz-adv-x="1792" 
-d="M104 830l792 -1015l-868 630q-18 13 -25 34.5t0 42.5l101 308v0zM566 830h660l-330 -1015v0zM368 1442l198 -612h-462l198 612q8 23 33 23t33 -23zM1688 830l101 -308q7 -21 0 -42.5t-25 -34.5l-868 -630l792 1015v0zM1688 830h-462l198 612q8 23 33 23t33 -23z" />
-    <glyph glyph-name="_622" unicode="&#xf297;" horiz-adv-x="1792" 
-d="M384 704h160v224h-160v-224zM1221 372v92q-104 -36 -243 -38q-135 -1 -259.5 46.5t-220.5 122.5l1 -96q88 -80 212 -128.5t272 -47.5q129 0 238 49zM640 704h640v224h-640v-224zM1792 736q0 -187 -99 -352q89 -102 89 -229q0 -157 -129.5 -268t-313.5 -111
-q-122 0 -225 52.5t-161 140.5q-19 -1 -57 -1t-57 1q-58 -88 -161 -140.5t-225 -52.5q-184 0 -313.5 111t-129.5 268q0 127 89 229q-99 165 -99 352q0 209 120 385.5t326.5 279.5t449.5 103t449.5 -103t326.5 -279.5t120 -385.5z" />
-    <glyph glyph-name="_623" unicode="&#xf298;" 
-d="M515 625v-128h-252v128h252zM515 880v-127h-252v127h252zM1273 369v-128h-341v128h341zM1273 625v-128h-672v128h672zM1273 880v-127h-672v127h672zM1408 20v1240q0 8 -6 14t-14 6h-32l-378 -256l-210 171l-210 -171l-378 256h-32q-8 0 -14 -6t-6 -14v-1240q0 -8 6 -14
-t14 -6h1240q8 0 14 6t6 14zM553 1130l185 150h-406zM983 1130l221 150h-406zM1536 1260v-1240q0 -62 -43 -105t-105 -43h-1240q-62 0 -105 43t-43 105v1240q0 62 43 105t105 43h1240q62 0 105 -43t43 -105z" />
-    <glyph glyph-name="_624" unicode="&#xf299;" horiz-adv-x="1792" 
-d="M896 720q-104 196 -160 278q-139 202 -347 318q-34 19 -70 36q-89 40 -94 32t34 -38l39 -31q62 -43 112.5 -93.5t94.5 -116.5t70.5 -113t70.5 -131q9 -17 13 -25q44 -84 84 -153t98 -154t115.5 -150t131 -123.5t148.5 -90.5q153 -66 154 -60q1 3 -49 37q-53 36 -81 57
-q-77 58 -179 211t-185 310zM549 177q-76 60 -132.5 125t-98 143.5t-71 154.5t-58.5 186t-52 209t-60.5 252t-76.5 289q273 0 497.5 -36t379 -92t271 -144.5t185.5 -172.5t110 -198.5t56 -199.5t12.5 -198.5t-9.5 -173t-20 -143.5t-13 -107l323 -327h-104l-281 285
-q-22 -2 -91.5 -14t-121.5 -19t-138 -6t-160.5 17t-167.5 59t-179 111z" />
-    <glyph glyph-name="_625" unicode="&#xf29a;" horiz-adv-x="1792" 
-d="M1374 879q-6 26 -28.5 39.5t-48.5 7.5q-261 -62 -401 -62t-401 62q-26 6 -48.5 -7.5t-28.5 -39.5t7.5 -48.5t39.5 -28.5q194 -46 303 -58q-2 -158 -15.5 -269t-26.5 -155.5t-41 -115.5l-9 -21q-10 -25 1 -49t36 -34q9 -4 23 -4q44 0 60 41l8 20q54 139 71 259h42
-q17 -120 71 -259l8 -20q16 -41 60 -41q14 0 23 4q25 10 36 34t1 49l-9 21q-28 71 -41 115.5t-26.5 155.5t-15.5 269q109 12 303 58q26 6 39.5 28.5t7.5 48.5zM1024 1024q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5z
-M1600 640q0 -143 -55.5 -273.5t-150 -225t-225 -150t-273.5 -55.5t-273.5 55.5t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5zM896 1408q-156 0 -298 -61t-245 -164t-164 -245t-61 -298t61 -298
-t164 -245t245 -164t298 -61t298 61t245 164t164 245t61 298t-61 298t-164 245t-245 164t-298 61zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
-    <glyph glyph-name="_626" unicode="&#xf29b;" 
-d="M1438 723q34 -35 29 -82l-44 -551q-4 -42 -34.5 -70t-71.5 -28q-6 0 -9 1q-44 3 -72.5 36.5t-25.5 77.5l35 429l-143 -8q55 -113 55 -240q0 -216 -148 -372l-137 137q91 101 91 235q0 145 -102.5 248t-247.5 103q-134 0 -236 -92l-137 138q120 114 284 141l264 300
-l-149 87l-181 -161q-33 -30 -77 -27.5t-73 35.5t-26.5 77t34.5 73l239 213q26 23 60 26.5t64 -14.5l488 -283q36 -21 48 -68q17 -67 -26 -117l-205 -232l371 20q49 3 83 -32zM1240 1180q-74 0 -126 52t-52 126t52 126t126 52t126.5 -52t52.5 -126t-52.5 -126t-126.5 -52z
-M613 -62q106 0 196 61l139 -139q-146 -116 -335 -116q-148 0 -273.5 73t-198.5 198t-73 273q0 188 116 336l139 -139q-60 -88 -60 -197q0 -145 102.5 -247.5t247.5 -102.5z" />
-    <glyph glyph-name="_627" unicode="&#xf29c;" 
-d="M880 336v-160q0 -14 -9 -23t-23 -9h-160q-14 0 -23 9t-9 23v160q0 14 9 23t23 9h160q14 0 23 -9t9 -23zM1136 832q0 -50 -15 -90t-45.5 -69t-52 -44t-59.5 -36q-32 -18 -46.5 -28t-26 -24t-11.5 -29v-32q0 -14 -9 -23t-23 -9h-160q-14 0 -23 9t-9 23v68q0 35 10.5 64.5
-t24 47.5t39 35.5t41 25.5t44.5 21q53 25 75 43t22 49q0 42 -43.5 71.5t-95.5 29.5q-56 0 -95 -27q-29 -20 -80 -83q-9 -12 -25 -12q-11 0 -19 6l-108 82q-10 7 -12 20t5 23q122 192 349 192q129 0 238.5 -89.5t109.5 -214.5zM768 1280q-130 0 -248.5 -51t-204 -136.5
-t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5t-51 248.5t-136.5 204t-204 136.5t-248.5 51zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5
-t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-    <glyph glyph-name="_628" unicode="&#xf29d;" horiz-adv-x="1408" 
-d="M366 1225q-64 0 -110 45.5t-46 110.5q0 64 46 109.5t110 45.5t109.5 -45.5t45.5 -109.5q0 -65 -45.5 -110.5t-109.5 -45.5zM917 583q0 -50 -30 -67.5t-63.5 -6.5t-47.5 34l-367 438q-7 12 -14 15.5t-11 1.5l-3 -3q-7 -8 4 -21l122 -139l1 -354l-161 -457
-q-67 -192 -92 -234q-15 -26 -28 -32q-50 -26 -103 -1q-29 13 -41.5 43t-9.5 57q2 17 197 618l5 416l-85 -164l35 -222q4 -24 -1 -42t-14 -27.5t-19 -16t-17 -7.5l-7 -2q-19 -3 -34.5 3t-24 16t-14 22t-7.5 19.5t-2 9.5l-46 299l211 381q23 34 113 34q75 0 107 -40l424 -521
-q7 -5 14 -17l3 -3l-1 -1q7 -13 7 -29zM514 433q43 -113 88.5 -225t69.5 -168l24 -55q36 -93 42 -125q11 -70 -36 -97q-35 -22 -66 -16t-51 22t-29 35h-1q-6 16 -8 25l-124 351zM1338 -159q31 -49 31 -57q0 -5 -3 -7q-9 -5 -14.5 0.5t-15.5 26t-16 30.5q-114 172 -423 661
-q3 -1 7 1t7 4l3 2q11 9 11 17z" />
-    <glyph glyph-name="_629" unicode="&#xf29e;" horiz-adv-x="2304" 
-d="M504 542h171l-1 265zM1530 641q0 87 -50.5 140t-146.5 53h-54v-388h52q91 0 145 57t54 138zM956 1018l1 -756q0 -14 -9.5 -24t-23.5 -10h-216q-14 0 -23.5 10t-9.5 24v62h-291l-55 -81q-10 -15 -28 -15h-267q-21 0 -30.5 18t3.5 35l556 757q9 14 27 14h332q14 0 24 -10
-t10 -24zM1783 641q0 -193 -125.5 -303t-324.5 -110h-270q-14 0 -24 10t-10 24v756q0 14 10 24t24 10h268q200 0 326 -109t126 -302zM1939 640q0 -11 -0.5 -29t-8 -71.5t-21.5 -102t-44.5 -108t-73.5 -102.5h-51q38 45 66.5 104.5t41.5 112t21 98t9 72.5l1 27q0 8 -0.5 22.5
-t-7.5 60t-20 91.5t-41 111.5t-66 124.5h43q41 -47 72 -107t45.5 -111.5t23 -96t10.5 -70.5zM2123 640q0 -11 -0.5 -29t-8 -71.5t-21.5 -102t-45 -108t-74 -102.5h-51q38 45 66.5 104.5t41.5 112t21 98t9 72.5l1 27q0 8 -0.5 22.5t-7.5 60t-19.5 91.5t-40.5 111.5t-66 124.5
-h43q41 -47 72 -107t45.5 -111.5t23 -96t10.5 -70.5zM2304 640q0 -11 -0.5 -29t-8 -71.5t-21.5 -102t-44.5 -108t-73.5 -102.5h-51q38 45 66 104.5t41 112t21 98t9 72.5l1 27q0 8 -0.5 22.5t-7.5 60t-19.5 91.5t-40.5 111.5t-66 124.5h43q41 -47 72 -107t45.5 -111.5t23 -96
-t9.5 -70.5z" />
-    <glyph glyph-name="uniF2A0" unicode="&#xf2a0;" horiz-adv-x="1408" 
-d="M617 -153q0 11 -13 58t-31 107t-20 69q-1 4 -5 26.5t-8.5 36t-13.5 21.5q-15 14 -51 14q-23 0 -70 -5.5t-71 -5.5q-34 0 -47 11q-6 5 -11 15.5t-7.5 20t-6.5 24t-5 18.5q-37 128 -37 255t37 255q1 4 5 18.5t6.5 24t7.5 20t11 15.5q13 11 47 11q24 0 71 -5.5t70 -5.5
-q36 0 51 14q9 8 13.5 21.5t8.5 36t5 26.5q2 9 20 69t31 107t13 58q0 22 -43.5 52.5t-75.5 42.5q-20 8 -45 8q-34 0 -98 -18q-57 -17 -96.5 -40.5t-71 -66t-46 -70t-45.5 -94.5q-6 -12 -9 -19q-49 -107 -68 -216t-19 -244t19 -244t68 -216q56 -122 83 -161q63 -91 179 -127
-l6 -2q64 -18 98 -18q25 0 45 8q32 12 75.5 42.5t43.5 52.5zM776 760q-26 0 -45 19t-19 45.5t19 45.5q37 37 37 90q0 52 -37 91q-19 19 -19 45t19 45t45 19t45 -19q75 -75 75 -181t-75 -181q-21 -19 -45 -19zM957 579q-27 0 -45 19q-19 19 -19 45t19 45q112 114 112 272
-t-112 272q-19 19 -19 45t19 45t45 19t45 -19q150 -150 150 -362t-150 -362q-18 -19 -45 -19zM1138 398q-27 0 -45 19q-19 19 -19 45t19 45q90 91 138.5 208t48.5 245t-48.5 245t-138.5 208q-19 19 -19 45t19 45t45 19t45 -19q109 -109 167 -249t58 -294t-58 -294t-167 -249
-q-18 -19 -45 -19z" />
-    <glyph glyph-name="uniF2A1" unicode="&#xf2a1;" horiz-adv-x="2176" 
-d="M192 352q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM704 352q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM704 864q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM1472 352
-q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM1984 352q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM1472 864q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM1984 864
-q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM1984 1376q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM384 192q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 192q0 -80 -56 -136
-t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM384 704q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 704q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM384 1216q0 -80 -56 -136t-136 -56
-t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1664 192q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 1216q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM2176 192q0 -80 -56 -136t-136 -56t-136 56
-t-56 136t56 136t136 56t136 -56t56 -136zM1664 704q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM2176 704q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1664 1216q0 -80 -56 -136t-136 -56t-136 56t-56 136
-t56 136t136 56t136 -56t56 -136zM2176 1216q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136z" />
-    <glyph glyph-name="uniF2A2" unicode="&#xf2a2;" horiz-adv-x="1792" 
-d="M128 -192q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45t45 19t45 -19t19 -45zM320 0q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45t45 19t45 -19t19 -45zM365 365l256 -256l-90 -90l-256 256zM704 384q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45t45 19t45 -19t19 -45z
-M1411 704q0 -59 -11.5 -108.5t-37.5 -93.5t-44 -67.5t-53 -64.5q-31 -35 -45.5 -54t-33.5 -50t-26.5 -64t-7.5 -74q0 -159 -112.5 -271.5t-271.5 -112.5q-26 0 -45 19t-19 45t19 45t45 19q106 0 181 75t75 181q0 57 11.5 105.5t37 91t43.5 66.5t52 63q40 46 59.5 72
-t37.5 74.5t18 103.5q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5q0 -26 -19 -45t-45 -19t-45 19t-19 45q0 117 45.5 223.5t123 184t184 123t223.5 45.5t223.5 -45.5t184 -123t123 -184t45.5 -223.5zM896 576q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45
-t45 19t45 -19t19 -45zM1184 704q0 -26 -19 -45t-45 -19t-45 19t-19 45q0 93 -65.5 158.5t-158.5 65.5q-92 0 -158 -65.5t-66 -158.5q0 -26 -19 -45t-45 -19t-45 19t-19 45q0 146 103 249t249 103t249 -103t103 -249zM1578 993q10 -25 -1 -49t-36 -34q-9 -4 -23 -4
-q-19 0 -35.5 11t-23.5 30q-68 178 -224 295q-21 16 -25 42t12 47q17 21 43 25t47 -12q183 -137 266 -351zM1788 1074q9 -25 -1.5 -49t-35.5 -34q-11 -4 -23 -4q-44 0 -60 41q-92 238 -297 393q-22 16 -25.5 42t12.5 47q16 22 42 25.5t47 -12.5q235 -175 341 -449z" />
-    <glyph glyph-name="uniF2A3" unicode="&#xf2a3;" horiz-adv-x="2304" 
-d="M1032 576q-59 2 -84 55q-17 34 -48 53.5t-68 19.5q-53 0 -90.5 -37.5t-37.5 -90.5q0 -56 36 -89l10 -8q34 -31 82 -31q37 0 68 19.5t48 53.5q25 53 84 55zM1600 704q0 56 -36 89l-10 8q-34 31 -82 31q-37 0 -68 -19.5t-48 -53.5q-25 -53 -84 -55q59 -2 84 -55
-q17 -34 48 -53.5t68 -19.5q53 0 90.5 37.5t37.5 90.5zM1174 925q-17 -35 -55 -48t-73 4q-62 31 -134 31q-51 0 -99 -17q3 0 9.5 0.5t9.5 0.5q92 0 170.5 -50t118.5 -133q17 -36 3.5 -73.5t-49.5 -54.5q-18 -9 -39 -9q21 0 39 -9q36 -17 49.5 -54.5t-3.5 -73.5
-q-40 -83 -118.5 -133t-170.5 -50h-6q-16 2 -44 4l-290 27l-239 -120q-14 -7 -29 -7q-40 0 -57 35l-160 320q-11 23 -4 47.5t29 37.5l209 119l148 267q17 155 91.5 291.5t195.5 236.5q31 25 70.5 21.5t64.5 -34.5t21.5 -70t-34.5 -65q-70 -59 -117 -128q123 84 267 101
-q40 5 71.5 -19t35.5 -64q5 -40 -19 -71.5t-64 -35.5q-84 -10 -159 -55q46 10 99 10q115 0 218 -50q36 -18 49 -55.5t-5 -73.5zM2137 1085l160 -320q11 -23 4 -47.5t-29 -37.5l-209 -119l-148 -267q-17 -155 -91.5 -291.5t-195.5 -236.5q-26 -22 -61 -22q-45 0 -74 35
-q-25 31 -21.5 70t34.5 65q70 59 117 128q-123 -84 -267 -101q-4 -1 -12 -1q-36 0 -63.5 24t-31.5 60q-5 40 19 71.5t64 35.5q84 10 159 55q-46 -10 -99 -10q-115 0 -218 50q-36 18 -49 55.5t5 73.5q17 35 55 48t73 -4q62 -31 134 -31q51 0 99 17q-3 0 -9.5 -0.5t-9.5 -0.5
-q-92 0 -170.5 50t-118.5 133q-17 36 -3.5 73.5t49.5 54.5q18 9 39 9q-21 0 -39 9q-36 17 -49.5 54.5t3.5 73.5q40 83 118.5 133t170.5 50h6h1q14 -2 42 -4l291 -27l239 120q14 7 29 7q40 0 57 -35z" />
-    <glyph glyph-name="uniF2A4" unicode="&#xf2a4;" horiz-adv-x="1792" 
-d="M1056 704q0 -26 19 -45t45 -19t45 19t19 45q0 146 -103 249t-249 103t-249 -103t-103 -249q0 -26 19 -45t45 -19t45 19t19 45q0 93 66 158.5t158 65.5t158 -65.5t66 -158.5zM835 1280q-117 0 -223.5 -45.5t-184 -123t-123 -184t-45.5 -223.5q0 -26 19 -45t45 -19t45 19
-t19 45q0 185 131.5 316.5t316.5 131.5t316.5 -131.5t131.5 -316.5q0 -55 -18 -103.5t-37.5 -74.5t-59.5 -72q-34 -39 -52 -63t-43.5 -66.5t-37 -91t-11.5 -105.5q0 -106 -75 -181t-181 -75q-26 0 -45 -19t-19 -45t19 -45t45 -19q159 0 271.5 112.5t112.5 271.5q0 41 7.5 74
-t26.5 64t33.5 50t45.5 54q35 41 53 64.5t44 67.5t37.5 93.5t11.5 108.5q0 117 -45.5 223.5t-123 184t-184 123t-223.5 45.5zM591 561l226 -226l-579 -579q-12 -12 -29 -12t-29 12l-168 168q-12 12 -12 29t12 29zM1612 1524l168 -168q12 -12 12 -29t-12 -30l-233 -233
-l-26 -25l-71 -71q-66 153 -195 258l91 91l207 207q13 12 30 12t29 -12z" />
-    <glyph glyph-name="uniF2A5" unicode="&#xf2a5;" 
-d="M866 1021q0 -27 -13 -94q-11 -50 -31.5 -150t-30.5 -150q-2 -11 -4.5 -12.5t-13.5 -2.5q-20 -2 -31 -2q-58 0 -84 49.5t-26 113.5q0 88 35 174t103 124q28 14 51 14q28 0 36.5 -16.5t8.5 -47.5zM1352 597q0 14 -39 75.5t-52 66.5q-21 8 -34 8q-91 0 -226 -77l-2 2
-q3 22 27.5 135t24.5 178q0 233 -242 233q-24 0 -68 -6q-94 -17 -168.5 -89.5t-111.5 -166.5t-37 -189q0 -146 80.5 -225t227.5 -79q25 0 25 -3t-1 -5q-4 -34 -26 -117q-14 -52 -51.5 -101t-82.5 -49q-42 0 -42 47q0 24 10.5 47.5t25 39.5t29.5 28.5t26 20t11 8.5q0 3 -7 10
-q-24 22 -58.5 36.5t-65.5 14.5q-35 0 -63.5 -34t-41 -75t-12.5 -75q0 -88 51.5 -142t138.5 -54q82 0 155 53t117.5 126t65.5 153q6 22 15.5 66.5t14.5 66.5q3 12 14 18q118 60 227 60q48 0 127 -18q1 -1 4 -1q5 0 9.5 4.5t4.5 8.5zM1536 1120v-960q0 -119 -84.5 -203.5
-t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-    <glyph glyph-name="uniF2A6" unicode="&#xf2a6;" horiz-adv-x="1535" 
-d="M744 1231q0 24 -2 38.5t-8.5 30t-21 23t-37.5 7.5q-39 0 -78 -23q-105 -58 -159 -190.5t-54 -269.5q0 -44 8.5 -85.5t26.5 -80.5t52.5 -62.5t81.5 -23.5q4 0 18 -0.5t20 0t16 3t15 8.5t7 16q16 77 48 231.5t48 231.5q19 91 19 146zM1498 575q0 -7 -7.5 -13.5t-15.5 -6.5
-l-6 1q-22 3 -62 11t-72 12.5t-63 4.5q-167 0 -351 -93q-15 -8 -21 -27q-10 -36 -24.5 -105.5t-22.5 -100.5q-23 -91 -70 -179.5t-112.5 -164.5t-154.5 -123t-185 -47q-135 0 -214.5 83.5t-79.5 219.5q0 53 19.5 117t63 116.5t97.5 52.5q38 0 120 -33.5t83 -61.5
-q0 -1 -16.5 -12.5t-39.5 -31t-46 -44.5t-39 -61t-16 -74q0 -33 16.5 -53t48.5 -20q45 0 85 31.5t66.5 78t48 105.5t32.5 107t16 90v9q0 2 -3.5 3.5t-8.5 1.5h-10t-10 -0.5t-6 -0.5q-227 0 -352 122.5t-125 348.5q0 108 34.5 221t96 210t156 167.5t204.5 89.5q52 9 106 9
-q374 0 374 -360q0 -98 -38 -273t-43 -211l3 -3q101 57 182.5 88t167.5 31q22 0 53 -13q19 -7 80 -102.5t61 -116.5z" />
-    <glyph glyph-name="uniF2A7" unicode="&#xf2a7;" horiz-adv-x="1664" 
-d="M831 863q32 0 59 -18l222 -148q61 -40 110 -97l146 -170q40 -46 29 -106l-72 -413q-6 -32 -29.5 -53.5t-55.5 -25.5l-527 -56l-352 -32h-9q-39 0 -67.5 28t-28.5 68q0 37 27 64t65 32l260 32h-448q-41 0 -69.5 30t-26.5 71q2 39 32 65t69 26l442 1l-521 64q-41 5 -66 37
-t-19 73q6 35 34.5 57.5t65.5 22.5h10l481 -60l-351 94q-38 10 -62 41.5t-18 68.5q6 36 33 58.5t62 22.5q6 0 20 -2l448 -96l217 -37q1 0 3 -0.5t3 -0.5q23 0 30.5 23t-12.5 36l-186 125q-35 23 -42 63.5t18 73.5q27 38 76 38zM761 661l186 -125l-218 37l-5 2l-36 38
-l-238 262q-1 1 -2.5 3.5t-2.5 3.5q-24 31 -18.5 70t37.5 64q31 23 68 17.5t64 -33.5l142 -147q-2 -1 -5 -3.5t-4 -4.5q-32 -45 -23 -99t55 -85zM1648 1115l15 -266q4 -73 -11 -147l-48 -219q-12 -59 -67 -87l-106 -54q2 62 -39 109l-146 170q-53 61 -117 103l-222 148
-q-34 23 -76 23q-51 0 -88 -37l-235 312q-25 33 -18 73.5t41 63.5q33 22 71.5 14t62.5 -40l266 -352l-262 455q-21 35 -10.5 75t47.5 59q35 18 72.5 6t57.5 -46l241 -420l-136 337q-15 35 -4.5 74t44.5 56q37 19 76 6t56 -51l193 -415l101 -196q8 -15 23 -17.5t27 7.5t11 26
-l-12 224q-2 41 26 71t69 31q39 0 67 -28.5t30 -67.5z" />
-    <glyph glyph-name="uniF2A8" unicode="&#xf2a8;" horiz-adv-x="1792" 
-d="M335 180q-2 0 -6 2q-86 57 -168.5 145t-139.5 180q-21 30 -21 69q0 9 2 19t4 18t7 18t8.5 16t10.5 17t10 15t12 15.5t11 14.5q184 251 452 365q-110 198 -110 211q0 19 17 29q116 64 128 64q18 0 28 -16l124 -229q92 19 192 19q266 0 497.5 -137.5t378.5 -369.5
-q20 -31 20 -69t-20 -69q-91 -142 -218.5 -253.5t-278.5 -175.5q110 -198 110 -211q0 -20 -17 -29q-116 -64 -127 -64q-19 0 -29 16l-124 229l-64 119l-444 820l7 7q-58 -24 -99 -47q3 -5 127 -234t243 -449t119 -223q0 -7 -9 -9q-13 -3 -72 -3q-57 0 -60 7l-456 841
-q-39 -28 -82 -68q24 -43 214 -393.5t190 -354.5q0 -10 -11 -10q-14 0 -82.5 22t-72.5 28l-106 197l-224 413q-44 -53 -78 -106q2 -3 18 -25t23 -34l176 -327q0 -10 -10 -10zM1165 282l49 -91q273 111 450 385q-180 277 -459 389q67 -64 103 -148.5t36 -176.5
-q0 -106 -47 -200.5t-132 -157.5zM848 896q0 -20 14 -34t34 -14q86 0 147 -61t61 -147q0 -20 14 -34t34 -14t34 14t14 34q0 126 -89 215t-215 89q-20 0 -34 -14t-14 -34zM1214 961l-9 4l7 -7z" />
-    <glyph glyph-name="uniF2A9" unicode="&#xf2a9;" horiz-adv-x="1280" 
-d="M1050 430q0 -215 -147 -374q-148 -161 -378 -161q-232 0 -378 161q-147 159 -147 374q0 147 68 270.5t189 196.5t268 73q96 0 182 -31q-32 -62 -39 -126q-66 28 -143 28q-167 0 -280.5 -123t-113.5 -291q0 -170 112.5 -288.5t281.5 -118.5t281 118.5t112 288.5
-q0 89 -32 166q66 13 123 49q41 -98 41 -212zM846 619q0 -192 -79.5 -345t-238.5 -253l-14 -1q-29 0 -62 5q83 32 146.5 102.5t99.5 154.5t58.5 189t30 192.5t7.5 178.5q0 69 -3 103q55 -160 55 -326zM791 947v-2q-73 214 -206 440q88 -59 142.5 -186.5t63.5 -251.5z
-M1035 744q-83 0 -160 75q218 120 290 247q19 37 21 56q-42 -94 -139.5 -166.5t-204.5 -97.5q-35 54 -35 113q0 37 17 79t43 68q46 44 157 74q59 16 106 58.5t74 100.5q74 -105 74 -253q0 -109 -24 -170q-32 -77 -88.5 -130.5t-130.5 -53.5z" />
-    <glyph glyph-name="uniF2AA" unicode="&#xf2aa;" 
-d="M1050 495q0 78 -28 147q-41 -25 -85 -34q22 -50 22 -114q0 -117 -77 -198.5t-193 -81.5t-193.5 81.5t-77.5 198.5q0 115 78 199.5t193 84.5q53 0 98 -19q4 43 27 87q-60 21 -125 21q-154 0 -257.5 -108.5t-103.5 -263.5t103.5 -261t257.5 -106t257.5 106.5t103.5 260.5z
-M872 850q2 -24 2 -71q0 -63 -5 -123t-20.5 -132.5t-40.5 -130t-68.5 -106t-100.5 -70.5q21 -3 42 -3h10q219 139 219 411q0 116 -38 225zM872 850q-4 80 -44 171.5t-98 130.5q92 -156 142 -302zM1207 955q0 102 -51 174q-41 -86 -124 -109q-69 -19 -109 -53.5t-40 -99.5
-q0 -40 24 -77q74 17 140.5 67t95.5 115q-4 -52 -74.5 -111.5t-138.5 -97.5q52 -52 110 -52q51 0 90 37t60 90q17 42 17 117zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5
-t84.5 -203.5z" />
-    <glyph glyph-name="uniF2AB" unicode="&#xf2ab;" 
-d="M1279 388q0 22 -22 27q-67 15 -118 59t-80 108q-7 19 -7 25q0 15 19.5 26t43 17t43 20.5t19.5 36.5q0 19 -18.5 31.5t-38.5 12.5q-12 0 -32 -8t-31 -8q-4 0 -12 2q5 95 5 114q0 79 -17 114q-36 78 -103 121.5t-152 43.5q-199 0 -275 -165q-17 -35 -17 -114q0 -19 5 -114
-q-4 -2 -14 -2q-12 0 -32 7.5t-30 7.5q-21 0 -38.5 -12t-17.5 -32q0 -21 19.5 -35.5t43 -20.5t43 -17t19.5 -26q0 -6 -7 -25q-64 -138 -198 -167q-22 -5 -22 -27q0 -46 137 -68q2 -5 6 -26t11.5 -30.5t23.5 -9.5q12 0 37.5 4.5t39.5 4.5q35 0 67 -15t54 -32.5t57.5 -32.5
-t76.5 -15q43 0 79 15t57.5 32.5t53.5 32.5t67 15q14 0 39.5 -4t38.5 -4q16 0 23 10t11 30t6 25q137 22 137 68zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5
-t103 -385.5z" />
-    <glyph glyph-name="uniF2AC" unicode="&#xf2ac;" horiz-adv-x="1664" 
-d="M848 1408q134 1 240.5 -68.5t163.5 -192.5q27 -58 27 -179q0 -47 -9 -191q14 -7 28 -7q18 0 51 13.5t51 13.5q29 0 56 -18t27 -46q0 -32 -31.5 -54t-69 -31.5t-69 -29t-31.5 -47.5q0 -15 12 -43q37 -82 102.5 -150t144.5 -101q28 -12 80 -23q28 -6 28 -35
-q0 -70 -219 -103q-7 -11 -11 -39t-14 -46.5t-33 -18.5q-20 0 -62 6.5t-64 6.5q-37 0 -62 -5q-32 -5 -63 -22.5t-58 -38t-58 -40.5t-76 -33.5t-99 -13.5q-52 0 -96.5 13.5t-75 33.5t-57.5 40.5t-58 38t-62 22.5q-26 5 -63 5q-24 0 -65.5 -7.5t-58.5 -7.5q-25 0 -35 18.5
-t-14 47.5t-11 40q-219 33 -219 103q0 29 28 35q52 11 80 23q78 32 144.5 101t102.5 150q12 28 12 43q0 28 -31.5 47.5t-69.5 29.5t-69.5 31.5t-31.5 52.5q0 27 26 45.5t55 18.5q15 0 48 -13t53 -13q18 0 32 7q-9 142 -9 190q0 122 27 180q64 137 172 198t264 63z" />
-    <glyph glyph-name="uniF2AD" unicode="&#xf2ad;" 
-d="M1280 388q0 22 -22 27q-67 14 -118 58t-80 109q-7 14 -7 25q0 15 19.5 26t42.5 17t42.5 20.5t19.5 36.5q0 19 -18.5 31.5t-38.5 12.5q-11 0 -31 -8t-32 -8q-4 0 -12 2q5 63 5 115q0 78 -17 114q-36 78 -102.5 121.5t-152.5 43.5q-198 0 -275 -165q-18 -38 -18 -115
-q0 -38 6 -114q-10 -2 -15 -2q-11 0 -31.5 8t-30.5 8q-20 0 -37.5 -12.5t-17.5 -32.5q0 -21 19.5 -35.5t42.5 -20.5t42.5 -17t19.5 -26q0 -11 -7 -25q-64 -138 -198 -167q-22 -5 -22 -27q0 -47 138 -69q2 -5 6 -26t11 -30.5t23 -9.5q13 0 38.5 5t38.5 5q35 0 67.5 -15
-t54.5 -32.5t57.5 -32.5t76.5 -15q43 0 79 15t57.5 32.5t54 32.5t67.5 15q13 0 39 -4.5t39 -4.5q15 0 22.5 9.5t11.5 31t5 24.5q138 22 138 69zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960
-q119 0 203.5 -84.5t84.5 -203.5z" />
-    <glyph glyph-name="uniF2AE" unicode="&#xf2ae;" horiz-adv-x="2304" 
-d="M2304 1536q-69 -46 -125 -92t-89 -81t-59.5 -71.5t-37.5 -57.5t-22 -44.5t-14 -29.5q-10 -18 -35.5 -136.5t-48.5 -164.5q-15 -29 -50 -60.5t-67.5 -50.5t-72.5 -41t-48 -28q-47 -31 -151 -231q-341 14 -630 -158q-92 -53 -303 -179q47 16 86 31t55 22l15 7
-q71 27 163 64.5t133.5 53.5t108 34.5t142.5 31.5q186 31 465 -7q1 0 10 -3q11 -6 14 -17t-3 -22l-194 -345q-15 -29 -47 -22q-128 24 -354 24q-146 0 -402 -44.5t-392 -46.5q-82 -1 -149 13t-107 37t-61 40t-33 34l-1 1v2q0 6 6 6q138 0 371 55q192 366 374.5 524t383.5 158
-q5 0 14.5 -0.5t38 -5t55 -12t61.5 -24.5t63 -39.5t54 -59t40 -82.5l102 177q2 4 21 42.5t44.5 86.5t61 109.5t84 133.5t100.5 137q66 82 128 141.5t121.5 96.5t92.5 53.5t88 39.5z" />
-    <glyph glyph-name="uniF2B0" unicode="&#xf2b0;" 
-d="M1322 640q0 -45 -5 -76l-236 14l224 -78q-19 -73 -58 -141l-214 103l177 -158q-44 -61 -107 -108l-157 178l103 -215q-61 -37 -140 -59l-79 228l14 -240q-38 -6 -76 -6t-76 6l14 238l-78 -226q-74 19 -140 59l103 215l-157 -178q-59 43 -108 108l178 158l-214 -104
-q-39 69 -58 141l224 79l-237 -14q-5 42 -5 76q0 35 5 77l238 -14l-225 79q19 73 58 140l214 -104l-177 159q46 61 107 108l158 -178l-103 215q67 39 140 58l77 -224l-13 236q36 6 75 6q38 0 76 -6l-14 -237l78 225q74 -19 140 -59l-103 -214l158 178q61 -47 107 -108
-l-177 -159l213 104q37 -62 58 -141l-224 -78l237 14q5 -31 5 -77zM1352 640q0 160 -78.5 295.5t-213 214t-292.5 78.5q-119 0 -227 -46.5t-186.5 -125t-124.5 -187.5t-46 -229q0 -119 46 -228t124.5 -187.5t186.5 -125t227 -46.5q158 0 292.5 78.5t213 214t78.5 294.5z
-M1425 1023v-766l-657 -383l-657 383v766l657 383zM768 -183l708 412v823l-708 411l-708 -411v-823zM1536 1088v-896l-768 -448l-768 448v896l768 448z" />
-    <glyph glyph-name="uniF2B1" unicode="&#xf2b1;" horiz-adv-x="1664" 
-d="M339 1318h691l-26 -72h-665q-110 0 -188.5 -79t-78.5 -189v-771q0 -95 60.5 -169.5t153.5 -93.5q23 -5 98 -5v-72h-45q-140 0 -239.5 100t-99.5 240v771q0 140 99.5 240t239.5 100zM1190 1536h247l-482 -1294q-23 -61 -40.5 -103.5t-45 -98t-54 -93.5t-64.5 -78.5
-t-79.5 -65t-95.5 -41t-116 -18.5v195q163 26 220 182q20 52 20 105q0 54 -20 106l-285 733h228l187 -585zM1664 978v-1111h-795q37 55 45 73h678v1038q0 85 -49.5 155t-129.5 99l25 67q101 -34 163.5 -123.5t62.5 -197.5z" />
-    <glyph glyph-name="uniF2B2" unicode="&#xf2b2;" horiz-adv-x="1792" 
-d="M852 1227q0 -29 -17 -52.5t-45 -23.5t-45 23.5t-17 52.5t17 52.5t45 23.5t45 -23.5t17 -52.5zM688 -149v114q0 30 -20.5 51.5t-50.5 21.5t-50 -21.5t-20 -51.5v-114q0 -30 20.5 -52t49.5 -22q30 0 50.5 22t20.5 52zM860 -149v114q0 30 -20 51.5t-50 21.5t-50.5 -21.5
-t-20.5 -51.5v-114q0 -30 20.5 -52t50.5 -22q29 0 49.5 22t20.5 52zM1034 -149v114q0 30 -20.5 51.5t-50.5 21.5t-50.5 -21.5t-20.5 -51.5v-114q0 -30 20.5 -52t50.5 -22t50.5 22t20.5 52zM1208 -149v114q0 30 -20.5 51.5t-50.5 21.5t-50.5 -21.5t-20.5 -51.5v-114
-q0 -30 20.5 -52t50.5 -22t50.5 22t20.5 52zM1476 535q-84 -160 -232 -259.5t-323 -99.5q-123 0 -229.5 51.5t-178.5 137t-113 197.5t-41 232q0 88 21 174q-104 -175 -104 -390q0 -162 65 -312t185 -251q30 57 91 57q56 0 86 -50q32 50 87 50q56 0 86 -50q32 50 87 50t87 -50
-q30 50 86 50q28 0 52.5 -15.5t37.5 -40.5q112 94 177 231.5t73 287.5zM1326 564q0 75 -72 75q-17 0 -47 -6q-95 -19 -149 -19q-226 0 -226 243q0 86 30 204q-83 -127 -83 -275q0 -150 89 -260.5t235 -110.5q111 0 210 70q13 48 13 79zM884 1223q0 50 -32 89.5t-81 39.5
-t-81 -39.5t-32 -89.5q0 -51 31.5 -90.5t81.5 -39.5t81.5 39.5t31.5 90.5zM1513 884q0 96 -37.5 179t-113 137t-173.5 54q-77 0 -149 -35t-127 -94q-48 -159 -48 -268q0 -104 45.5 -157t147.5 -53q53 0 142 19q36 6 53 6q51 0 77.5 -28t26.5 -80q0 -26 -4 -46
-q75 68 117.5 165.5t42.5 200.5zM1792 667q0 -111 -33.5 -249.5t-93.5 -204.5q-58 -64 -195 -142.5t-228 -104.5l-4 -1v-114q0 -43 -29.5 -75t-72.5 -32q-56 0 -86 50q-32 -50 -87 -50t-87 50q-30 -50 -86 -50q-55 0 -87 50q-30 -50 -86 -50q-47 0 -75 33.5t-28 81.5
-q-90 -68 -198 -68q-118 0 -211 80q54 1 106 20q-113 31 -182 127q32 -7 71 -7q89 0 164 46q-192 192 -240 306q-24 56 -24 160q0 57 9 125.5t31.5 146.5t55 141t86.5 105t120 42q59 0 81 -52q19 29 42 54q2 3 12 13t13 16q10 15 23 38t25 42t28 39q87 111 211.5 177
-t260.5 66q35 0 62 -4q59 64 146 64q83 0 140 -57q5 -5 5 -12q0 -5 -6 -13.5t-12.5 -16t-16 -17l-10.5 -10.5q17 -6 36 -18t19 -24q0 -6 -16 -25q157 -138 197 -378q25 30 60 30q45 0 100 -49q90 -80 90 -279z" />
-    <glyph glyph-name="uniF2B3" unicode="&#xf2b3;" 
-d="M917 631q0 33 -6 64h-362v-132h217q-12 -76 -74.5 -120.5t-142.5 -44.5q-99 0 -169 71.5t-70 170.5t70 170.5t169 71.5q93 0 153 -59l104 101q-108 100 -257 100q-160 0 -272 -112.5t-112 -271.5t112 -271.5t272 -112.5q165 0 266.5 105t101.5 270zM1262 585h109v110
-h-109v110h-110v-110h-110v-110h110v-110h110v110zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-    <glyph glyph-name="uniF2B4" unicode="&#xf2b4;" 
-d="M1536 1024v-839q0 -48 -49 -62q-174 -52 -338 -52q-73 0 -215.5 29.5t-227.5 29.5q-164 0 -370 -48v-338h-160v1368q-63 25 -101 81t-38 124q0 91 64 155t155 64t155 -64t64 -155q0 -68 -38 -124t-101 -81v-68q190 44 343 44q99 0 198 -15q14 -2 111.5 -22.5t149.5 -20.5
-q77 0 165 18q11 2 80 21t89 19q26 0 45 -19t19 -45z" />
-    <glyph glyph-name="uniF2B5" unicode="&#xf2b5;" horiz-adv-x="2304" 
-d="M192 384q40 0 56 32t0 64t-56 32t-56 -32t0 -64t56 -32zM1665 442q-10 13 -38.5 50t-41.5 54t-38 49t-42.5 53t-40.5 47t-45 49l-125 -140q-83 -94 -208.5 -92t-205.5 98q-57 69 -56.5 158t58.5 157l177 206q-22 11 -51 16.5t-47.5 6t-56.5 -0.5t-49 -1q-92 0 -158 -66
-l-158 -158h-155v-544q5 0 21 0.5t22 0t19.5 -2t20.5 -4.5t17.5 -8.5t18.5 -13.5l297 -292q115 -111 227 -111q78 0 125 47q57 -20 112.5 8t72.5 85q74 -6 127 44q20 18 36 45.5t14 50.5q10 -10 43 -10q43 0 77 21t49.5 53t12 71.5t-30.5 73.5zM1824 384h96v512h-93l-157 180
-q-66 76 -169 76h-167q-89 0 -146 -67l-209 -243q-28 -33 -28 -75t27 -75q43 -51 110 -52t111 49l193 218q25 23 53.5 21.5t47 -27t8.5 -56.5q16 -19 56 -63t60 -68q29 -36 82.5 -105.5t64.5 -84.5q52 -66 60 -140zM2112 384q40 0 56 32t0 64t-56 32t-56 -32t0 -64t56 -32z
-M2304 960v-640q0 -26 -19 -45t-45 -19h-434q-27 -65 -82 -106.5t-125 -51.5q-33 -48 -80.5 -81.5t-102.5 -45.5q-42 -53 -104.5 -81.5t-128.5 -24.5q-60 -34 -126 -39.5t-127.5 14t-117 53.5t-103.5 81l-287 282h-358q-26 0 -45 19t-19 45v672q0 26 19 45t45 19h421
-q14 14 47 48t47.5 48t44 40t50.5 37.5t51 25.5t62 19.5t68 5.5h117q99 0 181 -56q82 56 181 56h167q35 0 67 -6t56.5 -14.5t51.5 -26.5t44.5 -31t43 -39.5t39 -42t41 -48t41.5 -48.5h355q26 0 45 -19t19 -45z" />
-    <glyph glyph-name="uniF2B6" unicode="&#xf2b6;" horiz-adv-x="1792" 
-d="M1792 882v-978q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v978q0 15 11 24q8 7 39 34.5t41.5 36t45.5 37.5t70 55.5t96 73t143.5 107t192.5 140.5q5 4 52.5 40t71.5 52.5t64 35t69 18.5t69 -18.5t65 -35.5t71 -52t52 -40q110 -80 192.5 -140.5t143.5 -107
-t96 -73t70 -55.5t45.5 -37.5t41.5 -36t39 -34.5q11 -9 11 -24zM1228 297q263 191 345 252q11 8 12.5 20.5t-6.5 23.5l-38 52q-8 11 -21 12.5t-24 -6.5q-231 -169 -343 -250q-5 -3 -52 -39t-71.5 -52.5t-64.5 -35t-69 -18.5t-69 18.5t-64.5 35t-71.5 52.5t-52 39
-q-186 134 -343 250q-11 8 -24 6.5t-21 -12.5l-38 -52q-8 -11 -6.5 -23.5t12.5 -20.5q82 -61 345 -252q10 -8 50 -38t65 -47t64 -39.5t77.5 -33.5t75.5 -11t75.5 11t79 34.5t64.5 39.5t65 47.5t48 36.5z" />
-    <glyph glyph-name="uniF2B7" unicode="&#xf2b7;" horiz-adv-x="1792" 
-d="M1474 623l39 -51q8 -11 6.5 -23.5t-11.5 -20.5q-43 -34 -126.5 -98.5t-146.5 -113t-67 -51.5q-39 -32 -60 -48t-60.5 -41t-76.5 -36.5t-74 -11.5h-1h-1q-37 0 -74 11.5t-76 36.5t-61 41.5t-60 47.5q-5 4 -65 50.5t-143.5 111t-122.5 94.5q-11 8 -12.5 20.5t6.5 23.5
-l37 52q8 11 21.5 13t24.5 -7q94 -73 306 -236q5 -4 43.5 -35t60.5 -46.5t56.5 -32.5t58.5 -17h1h1q24 0 58.5 17t56.5 32.5t60.5 46.5t43.5 35q258 198 313 242q11 8 24 6.5t21 -12.5zM1664 -96v928q-90 83 -159 139q-91 74 -389 304q-3 2 -43 35t-61 48t-56 32.5t-59 17.5
-h-1h-1q-24 0 -59 -17.5t-56 -32.5t-61 -48t-43 -35q-215 -166 -315.5 -245.5t-129.5 -104t-82 -74.5q-14 -12 -21 -19v-928q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1792 832v-928q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v928q0 56 41 94
-q123 114 350 290.5t233 181.5q36 30 59 47.5t61.5 42t76 36.5t74.5 12h1h1q37 0 74.5 -12t76 -36.5t61.5 -42t59 -47.5q43 -36 156 -122t226 -177t201 -173q41 -38 41 -94z" />
-    <glyph glyph-name="uniF2B8" unicode="&#xf2b8;" 
-d="M330 1l202 -214l-34 236l-216 213zM556 -225l274 218l-11 245l-300 -215zM245 413l227 -213l-48 327l-245 204zM495 189l317 214l-14 324l-352 -200zM843 178l95 -80l-2 239l-103 79q0 -1 1 -8.5t0 -12t-5 -7.5l-78 -52l85 -70q7 -6 7 -88zM138 930l256 -200l-68 465
-l-279 173zM1173 267l15 234l-230 -164l2 -240zM417 722l373 194l-19 441l-423 -163zM1270 357l20 233l-226 142l-2 -105l144 -95q6 -4 4 -9l-7 -119zM1461 496l30 222l-179 -128l-20 -228zM1273 329l-71 49l-8 -117q0 -5 -4 -8l-234 -187q-7 -5 -14 0l-98 83l7 -161
-q0 -5 -4 -8l-293 -234q-4 -2 -6 -2q-8 2 -8 3l-228 242q-4 4 -59 277q-2 7 5 11l61 37q-94 86 -95 92l-72 351q-2 7 6 12l94 45q-133 100 -135 108l-96 466q-2 10 7 13l433 135q5 0 8 -1l317 -153q6 -4 6 -9l20 -463q0 -7 -6 -10l-118 -61l126 -85q5 -2 5 -8l5 -123l121 74
-q5 4 11 0l84 -56l3 110q0 6 5 9l206 126q6 3 11 0l245 -135q4 -4 5 -7t-6.5 -60t-17.5 -124.5t-10 -70.5q0 -5 -4 -7l-191 -153q-6 -5 -13 0z" />
-    <glyph glyph-name="uniF2B9" unicode="&#xf2b9;" horiz-adv-x="1664" 
-d="M1201 298q0 57 -5.5 107t-21 100.5t-39.5 86t-64 58t-91 22.5q-6 -4 -33.5 -20.5t-42.5 -24.5t-40.5 -20t-49 -17t-46.5 -5t-46.5 5t-49 17t-40.5 20t-42.5 24.5t-33.5 20.5q-51 0 -91 -22.5t-64 -58t-39.5 -86t-21 -100.5t-5.5 -107q0 -73 42 -121.5t103 -48.5h576
-q61 0 103 48.5t42 121.5zM1028 892q0 108 -76.5 184t-183.5 76t-183.5 -76t-76.5 -184q0 -107 76.5 -183t183.5 -76t183.5 76t76.5 183zM1664 352v-192q0 -14 -9 -23t-23 -9h-96v-224q0 -66 -47 -113t-113 -47h-1216q-66 0 -113 47t-47 113v1472q0 66 47 113t113 47h1216
-q66 0 113 -47t47 -113v-224h96q14 0 23 -9t9 -23v-192q0 -14 -9 -23t-23 -9h-96v-128h96q14 0 23 -9t9 -23v-192q0 -14 -9 -23t-23 -9h-96v-128h96q14 0 23 -9t9 -23z" />
-    <glyph glyph-name="uniF2BA" unicode="&#xf2ba;" horiz-adv-x="1664" 
-d="M1028 892q0 -107 -76.5 -183t-183.5 -76t-183.5 76t-76.5 183q0 108 76.5 184t183.5 76t183.5 -76t76.5 -184zM980 672q46 0 82.5 -17t60 -47.5t39.5 -67t24 -81t11.5 -82.5t3.5 -79q0 -67 -39.5 -118.5t-105.5 -51.5h-576q-66 0 -105.5 51.5t-39.5 118.5q0 48 4.5 93.5
-t18.5 98.5t36.5 91.5t63 64.5t93.5 26h5q7 -4 32 -19.5t35.5 -21t33 -17t37 -16t35 -9t39.5 -4.5t39.5 4.5t35 9t37 16t33 17t35.5 21t32 19.5zM1664 928q0 -13 -9.5 -22.5t-22.5 -9.5h-96v-128h96q13 0 22.5 -9.5t9.5 -22.5v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-96v-128h96
-q13 0 22.5 -9.5t9.5 -22.5v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-96v-224q0 -66 -47 -113t-113 -47h-1216q-66 0 -113 47t-47 113v1472q0 66 47 113t113 47h1216q66 0 113 -47t47 -113v-224h96q13 0 22.5 -9.5t9.5 -22.5v-192zM1408 -96v1472q0 13 -9.5 22.5t-22.5 9.5h-1216
-q-13 0 -22.5 -9.5t-9.5 -22.5v-1472q0 -13 9.5 -22.5t22.5 -9.5h1216q13 0 22.5 9.5t9.5 22.5z" />
-    <glyph glyph-name="uniF2BB" unicode="&#xf2bb;" horiz-adv-x="2048" 
-d="M1024 405q0 64 -9 117.5t-29.5 103t-60.5 78t-97 28.5q-6 -4 -30 -18t-37.5 -21.5t-35.5 -17.5t-43 -14.5t-42 -4.5t-42 4.5t-43 14.5t-35.5 17.5t-37.5 21.5t-30 18q-57 0 -97 -28.5t-60.5 -78t-29.5 -103t-9 -117.5t37 -106.5t91 -42.5h512q54 0 91 42.5t37 106.5z
-M867 925q0 94 -66.5 160.5t-160.5 66.5t-160.5 -66.5t-66.5 -160.5t66.5 -160.5t160.5 -66.5t160.5 66.5t66.5 160.5zM1792 416v64q0 14 -9 23t-23 9h-576q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h576q14 0 23 9t9 23zM1792 676v56q0 15 -10.5 25.5t-25.5 10.5h-568
-q-15 0 -25.5 -10.5t-10.5 -25.5v-56q0 -15 10.5 -25.5t25.5 -10.5h568q15 0 25.5 10.5t10.5 25.5zM1792 928v64q0 14 -9 23t-23 9h-576q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h576q14 0 23 9t9 23zM2048 1248v-1216q0 -66 -47 -113t-113 -47h-352v96q0 14 -9 23t-23 9
-h-64q-14 0 -23 -9t-9 -23v-96h-768v96q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-96h-352q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1728q66 0 113 -47t47 -113z" />
-    <glyph glyph-name="uniF2BC" unicode="&#xf2bc;" horiz-adv-x="2048" 
-d="M1024 405q0 -64 -37 -106.5t-91 -42.5h-512q-54 0 -91 42.5t-37 106.5t9 117.5t29.5 103t60.5 78t97 28.5q6 -4 30 -18t37.5 -21.5t35.5 -17.5t43 -14.5t42 -4.5t42 4.5t43 14.5t35.5 17.5t37.5 21.5t30 18q57 0 97 -28.5t60.5 -78t29.5 -103t9 -117.5zM867 925
-q0 -94 -66.5 -160.5t-160.5 -66.5t-160.5 66.5t-66.5 160.5t66.5 160.5t160.5 66.5t160.5 -66.5t66.5 -160.5zM1792 480v-64q0 -14 -9 -23t-23 -9h-576q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h576q14 0 23 -9t9 -23zM1792 732v-56q0 -15 -10.5 -25.5t-25.5 -10.5h-568
-q-15 0 -25.5 10.5t-10.5 25.5v56q0 15 10.5 25.5t25.5 10.5h568q15 0 25.5 -10.5t10.5 -25.5zM1792 992v-64q0 -14 -9 -23t-23 -9h-576q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h576q14 0 23 -9t9 -23zM1920 32v1216q0 13 -9.5 22.5t-22.5 9.5h-1728q-13 0 -22.5 -9.5
-t-9.5 -22.5v-1216q0 -13 9.5 -22.5t22.5 -9.5h352v96q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-96h768v96q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-96h352q13 0 22.5 9.5t9.5 22.5zM2048 1248v-1216q0 -66 -47 -113t-113 -47h-1728q-66 0 -113 47t-47 113v1216q0 66 47 113
-t113 47h1728q66 0 113 -47t47 -113z" />
-    <glyph glyph-name="uniF2BD" unicode="&#xf2bd;" horiz-adv-x="1792" 
-d="M1523 197q-22 155 -87.5 257.5t-184.5 118.5q-67 -74 -159.5 -115.5t-195.5 -41.5t-195.5 41.5t-159.5 115.5q-119 -16 -184.5 -118.5t-87.5 -257.5q106 -150 271 -237.5t356 -87.5t356 87.5t271 237.5zM1280 896q0 159 -112.5 271.5t-271.5 112.5t-271.5 -112.5
-t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM1792 640q0 -182 -71 -347.5t-190.5 -286t-285.5 -191.5t-349 -71q-182 0 -348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
-    <glyph glyph-name="uniF2BE" unicode="&#xf2be;" horiz-adv-x="1792" 
-d="M896 1536q182 0 348 -71t286 -191t191 -286t71 -348q0 -181 -70.5 -347t-190.5 -286t-286 -191.5t-349 -71.5t-349 71t-285.5 191.5t-190.5 286t-71 347.5t71 348t191 286t286 191t348 71zM1515 185q149 205 149 455q0 156 -61 298t-164 245t-245 164t-298 61t-298 -61
-t-245 -164t-164 -245t-61 -298q0 -250 149 -455q66 327 306 327q131 -128 313 -128t313 128q240 0 306 -327zM1280 832q0 159 -112.5 271.5t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5z" />
-    <glyph glyph-name="uniF2C0" unicode="&#xf2c0;" 
-d="M1201 752q47 -14 89.5 -38t89 -73t79.5 -115.5t55 -172t22 -236.5q0 -154 -100 -263.5t-241 -109.5h-854q-141 0 -241 109.5t-100 263.5q0 131 22 236.5t55 172t79.5 115.5t89 73t89.5 38q-79 125 -79 272q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5
-t198.5 -40.5t163.5 -109.5t109.5 -163.5t40.5 -198.5q0 -147 -79 -272zM768 1408q-159 0 -271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5t-112.5 271.5t-271.5 112.5zM1195 -128q88 0 150.5 71.5t62.5 173.5q0 239 -78.5 377t-225.5 145
-q-145 -127 -336 -127t-336 127q-147 -7 -225.5 -145t-78.5 -377q0 -102 62.5 -173.5t150.5 -71.5h854z" />
-    <glyph glyph-name="uniF2C1" unicode="&#xf2c1;" horiz-adv-x="1280" 
-d="M1024 278q0 -64 -37 -107t-91 -43h-512q-54 0 -91 43t-37 107t9 118t29.5 104t61 78.5t96.5 28.5q80 -75 188 -75t188 75q56 0 96.5 -28.5t61 -78.5t29.5 -104t9 -118zM870 797q0 -94 -67.5 -160.5t-162.5 -66.5t-162.5 66.5t-67.5 160.5t67.5 160.5t162.5 66.5
-t162.5 -66.5t67.5 -160.5zM1152 -96v1376h-1024v-1376q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5zM1280 1376v-1472q0 -66 -47 -113t-113 -47h-960q-66 0 -113 47t-47 113v1472q0 66 47 113t113 47h352v-96q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v96h352
-q66 0 113 -47t47 -113z" />
-    <glyph glyph-name="uniF2C2" unicode="&#xf2c2;" horiz-adv-x="2048" 
-d="M896 324q0 54 -7.5 100.5t-24.5 90t-51 68.5t-81 25q-64 -64 -156 -64t-156 64q-47 0 -81 -25t-51 -68.5t-24.5 -90t-7.5 -100.5q0 -55 31.5 -93.5t75.5 -38.5h426q44 0 75.5 38.5t31.5 93.5zM768 768q0 80 -56 136t-136 56t-136 -56t-56 -136t56 -136t136 -56t136 56
-t56 136zM1792 288v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23zM1408 544v64q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1792 544v64q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23
-v-64q0 -14 9 -23t23 -9h192q14 0 23 9t9 23zM1792 800v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23zM128 1152h1792v96q0 14 -9 23t-23 9h-1728q-14 0 -23 -9t-9 -23v-96zM2048 1248v-1216q0 -66 -47 -113t-113 -47h-1728
-q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1728q66 0 113 -47t47 -113z" />
-    <glyph glyph-name="uniF2C3" unicode="&#xf2c3;" horiz-adv-x="2048" 
-d="M896 324q0 -55 -31.5 -93.5t-75.5 -38.5h-426q-44 0 -75.5 38.5t-31.5 93.5q0 54 7.5 100.5t24.5 90t51 68.5t81 25q64 -64 156 -64t156 64q47 0 81 -25t51 -68.5t24.5 -90t7.5 -100.5zM768 768q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136z
-M1792 352v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704q14 0 23 -9t9 -23zM1408 608v-64q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h320q14 0 23 -9t9 -23zM1792 608v-64q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v64
-q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 864v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704q14 0 23 -9t9 -23zM1920 32v1120h-1792v-1120q0 -13 9.5 -22.5t22.5 -9.5h1728q13 0 22.5 9.5t9.5 22.5zM2048 1248v-1216q0 -66 -47 -113t-113 -47
-h-1728q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1728q66 0 113 -47t47 -113z" />
-    <glyph glyph-name="uniF2C4" unicode="&#xf2c4;" horiz-adv-x="1792" 
-d="M1255 749q0 318 -105 474.5t-330 156.5q-222 0 -326 -157t-104 -474q0 -316 104 -471.5t326 -155.5q74 0 131 17q-22 43 -39 73t-44 65t-53.5 56.5t-63 36t-77.5 14.5q-46 0 -79 -16l-49 97q105 91 276 91q132 0 215.5 -54t150.5 -155q67 149 67 402zM1645 117h117
-q3 -27 -2 -67t-26.5 -95t-58 -100.5t-107 -78t-162.5 -32.5q-71 0 -130.5 19t-105.5 56t-79 78t-66 96q-97 -27 -205 -27q-150 0 -292.5 58t-253 158.5t-178 249t-67.5 317.5q0 170 67.5 319.5t178.5 250.5t253.5 159t291.5 58q121 0 238.5 -36t217 -106t176 -164.5
-t119.5 -219t43 -261.5q0 -190 -80.5 -347.5t-218.5 -264.5q47 -70 93.5 -106.5t104.5 -36.5q61 0 94 37.5t38 85.5z" />
-    <glyph glyph-name="uniF2C5" unicode="&#xf2c5;" horiz-adv-x="2304" 
-d="M453 -101q0 -21 -16 -37.5t-37 -16.5q-1 0 -13 3q-63 15 -162 140q-225 284 -225 676q0 341 213 614q39 51 95 103.5t94 52.5q19 0 35 -13.5t16 -32.5q0 -27 -63 -90q-98 -102 -147 -184q-119 -199 -119 -449q0 -281 123 -491q50 -85 136 -173q2 -3 14.5 -16t19.5 -21
-t17 -20.5t14.5 -23.5t4.5 -21zM1796 33q0 -29 -17.5 -48.5t-46.5 -19.5h-1081q-26 0 -45 19t-19 45q0 29 17.5 48.5t46.5 19.5h1081q26 0 45 -19t19 -45zM1581 644q0 -134 -67 -233q-25 -38 -69.5 -78.5t-83.5 -60.5q-16 -10 -27 -10q-7 0 -15 6t-8 12q0 9 19 30t42 46
-t42 67.5t19 88.5q0 76 -35 130q-29 42 -46 42q-3 0 -3 -5q0 -12 7.5 -35.5t7.5 -36.5q0 -22 -21.5 -35t-44.5 -13q-66 0 -66 76q0 15 1.5 44t1.5 44q0 25 -10 46q-13 25 -42 53.5t-51 28.5q-5 0 -7 -0.5t-3.5 -2.5t-1.5 -6q0 -2 16 -26t16 -54q0 -37 -19 -68t-46 -54
-t-53.5 -46t-45.5 -54t-19 -68q0 -98 42 -160q29 -43 79 -63q16 -5 17 -10q1 -2 1 -5q0 -16 -18 -16q-6 0 -33 11q-119 43 -195 139.5t-76 218.5q0 55 24.5 115.5t60 115t70.5 108.5t59.5 113.5t24.5 111.5q0 53 -25 94q-29 48 -56 64q-19 9 -19 21q0 20 41 20q50 0 110 -29
-q41 -19 71 -44.5t49.5 -51t33.5 -62.5t22 -69t16 -80q0 -1 3 -17.5t4.5 -25t5.5 -25t9 -27t11 -21.5t14.5 -16.5t18.5 -5.5q23 0 37 14t14 37q0 25 -20 67t-20 52t10 10q27 0 93 -70q72 -76 102.5 -156t30.5 -186zM2304 615q0 -274 -138 -503q-19 -32 -48 -72t-68 -86.5
-t-81 -77t-74 -30.5q-16 0 -31 15.5t-15 31.5q0 15 29 50.5t68.5 77t48.5 52.5q183 230 183 531q0 131 -20.5 235t-72.5 211q-58 119 -163 228q-2 3 -13 13.5t-16.5 16.5t-15 17.5t-15 20t-9.5 18.5t-4 19q0 19 16 35.5t35 16.5q70 0 196 -169q98 -131 146 -273t60 -314
-q2 -42 2 -64z" />
-    <glyph glyph-name="uniF2C6" unicode="&#xf2c6;" horiz-adv-x="1792" 
-d="M1189 229l147 693q9 44 -10.5 63t-51.5 7l-864 -333q-29 -11 -39.5 -25t-2.5 -26.5t32 -19.5l221 -69l513 323q21 14 32 6q7 -5 -4 -15l-415 -375v0v0l-16 -228q23 0 45 22l108 104l224 -165q64 -36 81 38zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71
-t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
-    <glyph glyph-name="uniF2C7" unicode="&#xf2c7;" horiz-adv-x="1024" 
-d="M640 192q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 60 35 110t93 71v907h128v-907q58 -21 93 -71t35 -110zM768 192q0 77 -34 144t-94 112v768q0 80 -56 136t-136 56t-136 -56t-56 -136v-768q-60 -45 -94 -112t-34 -144q0 -133 93.5 -226.5t226.5 -93.5t226.5 93.5
-t93.5 226.5zM896 192q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 182 128 313v711q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5v-711q128 -131 128 -313zM1024 768v-128h-192v128h192zM1024 1024v-128h-192v128h192zM1024 1280v-128h-192
-v128h192z" />
-    <glyph glyph-name="uniF2C8" unicode="&#xf2c8;" horiz-adv-x="1024" 
-d="M640 192q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 60 35 110t93 71v651h128v-651q58 -21 93 -71t35 -110zM768 192q0 77 -34 144t-94 112v768q0 80 -56 136t-136 56t-136 -56t-56 -136v-768q-60 -45 -94 -112t-34 -144q0 -133 93.5 -226.5t226.5 -93.5t226.5 93.5
-t93.5 226.5zM896 192q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 182 128 313v711q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5v-711q128 -131 128 -313zM1024 768v-128h-192v128h192zM1024 1024v-128h-192v128h192zM1024 1280v-128h-192
-v128h192z" />
-    <glyph glyph-name="uniF2C9" unicode="&#xf2c9;" horiz-adv-x="1024" 
-d="M640 192q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 60 35 110t93 71v395h128v-395q58 -21 93 -71t35 -110zM768 192q0 77 -34 144t-94 112v768q0 80 -56 136t-136 56t-136 -56t-56 -136v-768q-60 -45 -94 -112t-34 -144q0 -133 93.5 -226.5t226.5 -93.5t226.5 93.5
-t93.5 226.5zM896 192q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 182 128 313v711q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5v-711q128 -131 128 -313zM1024 768v-128h-192v128h192zM1024 1024v-128h-192v128h192zM1024 1280v-128h-192
-v128h192z" />
-    <glyph glyph-name="uniF2CA" unicode="&#xf2ca;" horiz-adv-x="1024" 
-d="M640 192q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 60 35 110t93 71v139h128v-139q58 -21 93 -71t35 -110zM768 192q0 77 -34 144t-94 112v768q0 80 -56 136t-136 56t-136 -56t-56 -136v-768q-60 -45 -94 -112t-34 -144q0 -133 93.5 -226.5t226.5 -93.5t226.5 93.5
-t93.5 226.5zM896 192q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 182 128 313v711q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5v-711q128 -131 128 -313zM1024 768v-128h-192v128h192zM1024 1024v-128h-192v128h192zM1024 1280v-128h-192
-v128h192z" />
-    <glyph glyph-name="uniF2CB" unicode="&#xf2cb;" horiz-adv-x="1024" 
-d="M640 192q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 79 56 135.5t136 56.5t136 -56.5t56 -135.5zM768 192q0 77 -34 144t-94 112v768q0 80 -56 136t-136 56t-136 -56t-56 -136v-768q-60 -45 -94 -112t-34 -144q0 -133 93.5 -226.5t226.5 -93.5t226.5 93.5t93.5 226.5z
-M896 192q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 182 128 313v711q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5v-711q128 -131 128 -313zM1024 768v-128h-192v128h192zM1024 1024v-128h-192v128h192zM1024 1280v-128h-192v128h192z" />
-    <glyph glyph-name="uniF2CC" unicode="&#xf2cc;" horiz-adv-x="1920" 
-d="M1433 1287q10 -10 10 -23t-10 -23l-626 -626q-10 -10 -23 -10t-23 10l-82 82q-10 10 -10 23t10 23l44 44q-72 91 -81.5 207t46.5 215q-74 71 -176 71q-106 0 -181 -75t-75 -181v-1280h-256v1280q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5q106 0 201 -41
-t166 -115q94 39 197 24.5t185 -79.5l44 44q10 10 23 10t23 -10zM1344 1024q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1600 896q-26 0 -45 19t-19 45t19 45t45 19t45 -19t19 -45t-19 -45t-45 -19zM1856 1024q26 0 45 -19t19 -45t-19 -45t-45 -19
-t-45 19t-19 45t19 45t45 19zM1216 896q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1408 832q0 26 19 45t45 19t45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45zM1728 896q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1088 768
-q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1344 640q-26 0 -45 19t-19 45t19 45t45 19t45 -19t19 -45t-19 -45t-45 -19zM1600 768q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1216 512q-26 0 -45 19t-19 45t19 45t45 19t45 -19
-t19 -45t-19 -45t-45 -19zM1472 640q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1088 512q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1344 512q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1216 384
-q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1088 256q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19z" />
-    <glyph glyph-name="uniF2CD" unicode="&#xf2cd;" horiz-adv-x="1792" 
-d="M1664 448v-192q0 -169 -128 -286v-194q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v118q-63 -22 -128 -22h-768q-65 0 -128 22v-110q0 -17 -9.5 -28.5t-22.5 -11.5h-64q-13 0 -22.5 11.5t-9.5 28.5v186q-128 117 -128 286v192h1536zM704 864q0 -14 -9 -23t-23 -9t-23 9
-t-9 23t9 23t23 9t23 -9t9 -23zM768 928q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM704 992q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM832 992q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM768 1056q0 -14 -9 -23t-23 -9t-23 9
-t-9 23t9 23t23 9t23 -9t9 -23zM704 1120q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM1792 608v-64q0 -14 -9 -23t-23 -9h-1728q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v640q0 106 75 181t181 75q108 0 184 -78q46 19 98 12t93 -39l22 22q11 11 22 0l42 -42
-q11 -11 0 -22l-314 -314q-11 -11 -22 0l-42 42q-11 11 0 22l22 22q-36 46 -40.5 104t23.5 108q-37 35 -88 35q-53 0 -90.5 -37.5t-37.5 -90.5v-640h1504q14 0 23 -9t9 -23zM896 1056q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM832 1120q0 -14 -9 -23t-23 -9
-t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM768 1184q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM960 1120q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM896 1184q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM832 1248q0 -14 -9 -23
-t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM1024 1184q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM960 1248q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM1088 1248q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23z" />
-    <glyph glyph-name="uniF2CE" unicode="&#xf2ce;" 
-d="M994 344q0 -86 -17 -197q-31 -215 -55 -313q-22 -90 -152 -90t-152 90q-24 98 -55 313q-17 110 -17 197q0 168 224 168t224 -168zM1536 768q0 -240 -134 -434t-350 -280q-8 -3 -15 3t-6 15q7 48 10 66q4 32 6 47q1 9 9 12q159 81 255.5 234t96.5 337q0 180 -91 330.5
-t-247 234.5t-337 74q-124 -7 -237 -61t-193.5 -140.5t-128 -202t-46.5 -240.5q1 -184 99 -336.5t257 -231.5q7 -3 9 -12q3 -21 6 -45q1 -9 5 -32.5t6 -35.5q1 -9 -6.5 -15t-15.5 -2q-148 58 -261 169.5t-173.5 264t-52.5 319.5q7 143 66 273.5t154.5 227t225 157.5t272.5 70
-q164 10 315.5 -46.5t261 -160.5t175 -250.5t65.5 -308.5zM994 800q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5zM1282 768q0 -122 -53.5 -228.5t-146.5 -177.5q-8 -6 -16 -2t-10 14q-6 52 -29 92q-7 10 3 20
-q58 54 91 127t33 155q0 111 -58.5 204t-157.5 141.5t-212 36.5q-133 -15 -229 -113t-109 -231q-10 -92 23.5 -176t98.5 -144q10 -10 3 -20q-24 -41 -29 -93q-2 -9 -10 -13t-16 2q-95 74 -148.5 183t-51.5 234q3 131 69 244t177 181.5t241 74.5q144 7 268 -60t196.5 -187.5
-t72.5 -263.5z" />
-    <glyph glyph-name="uniF2D0" unicode="&#xf2d0;" horiz-adv-x="1792" 
-d="M256 128h1280v768h-1280v-768zM1792 1248v-1216q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z" />
-    <glyph glyph-name="uniF2D1" unicode="&#xf2d1;" horiz-adv-x="1792" 
-d="M1792 224v-192q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v192q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z" />
-    <glyph glyph-name="uniF2D2" unicode="&#xf2d2;" horiz-adv-x="2048" 
-d="M256 0h768v512h-768v-512zM1280 512h512v768h-768v-256h96q66 0 113 -47t47 -113v-352zM2048 1376v-960q0 -66 -47 -113t-113 -47h-608v-352q0 -66 -47 -113t-113 -47h-960q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h608v352q0 66 47 113t113 47h960q66 0 113 -47
-t47 -113z" />
-    <glyph glyph-name="uniF2D3" unicode="&#xf2d3;" horiz-adv-x="1792" 
-d="M1175 215l146 146q10 10 10 23t-10 23l-233 233l233 233q10 10 10 23t-10 23l-146 146q-10 10 -23 10t-23 -10l-233 -233l-233 233q-10 10 -23 10t-23 -10l-146 -146q-10 -10 -10 -23t10 -23l233 -233l-233 -233q-10 -10 -10 -23t10 -23l146 -146q10 -10 23 -10t23 10
-l233 233l233 -233q10 -10 23 -10t23 10zM1792 1248v-1216q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z" />
-    <glyph glyph-name="uniF2D4" unicode="&#xf2d4;" horiz-adv-x="1792" 
-d="M1257 425l-146 -146q-10 -10 -23 -10t-23 10l-169 169l-169 -169q-10 -10 -23 -10t-23 10l-146 146q-10 10 -10 23t10 23l169 169l-169 169q-10 10 -10 23t10 23l146 146q10 10 23 10t23 -10l169 -169l169 169q10 10 23 10t23 -10l146 -146q10 -10 10 -23t-10 -23
-l-169 -169l169 -169q10 -10 10 -23t-10 -23zM256 128h1280v1024h-1280v-1024zM1792 1248v-1216q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z" />
-    <glyph glyph-name="uniF2D5" unicode="&#xf2d5;" horiz-adv-x="1792" 
-d="M1070 358l306 564h-654l-306 -564h654zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
-    <glyph glyph-name="uniF2D6" unicode="&#xf2d6;" horiz-adv-x="1794" 
-d="M1291 1060q-15 17 -35 8.5t-26 -28.5t5 -38q14 -17 40 -14.5t34 20.5t-18 52zM895 814q-8 -8 -19.5 -8t-18.5 8q-8 8 -8 19t8 18q7 8 18.5 8t19.5 -8q7 -7 7 -18t-7 -19zM1060 740l-35 -35q-12 -13 -29.5 -13t-30.5 13l-38 38q-12 13 -12 30t12 30l35 35q12 12 29.5 12
-t30.5 -12l38 -39q12 -12 12 -29.5t-12 -29.5zM951 870q-7 -8 -18.5 -8t-19.5 8q-7 8 -7 19t7 19q8 8 19 8t19 -8t8 -19t-8 -19zM1354 968q-34 -64 -107.5 -85.5t-127.5 16.5q-38 28 -61 66.5t-21 87.5t39 92t75.5 53t70.5 -5t70 -51q2 -2 13 -12.5t14.5 -13.5t13 -13.5
-t12.5 -15.5t10 -15.5t8.5 -18t4 -18.5t1 -21t-5 -22t-9.5 -24zM1555 486q3 20 -8.5 34.5t-27.5 21.5t-33 17t-23 20q-40 71 -84 98.5t-113 11.5q19 13 40 18.5t33 4.5l12 -1q2 45 -34 90q6 20 6.5 40.5t-2.5 30.5l-3 10q43 24 71 65t34 91q10 84 -43 150.5t-137 76.5
-q-60 7 -114 -18.5t-82 -74.5q-30 -51 -33.5 -101t14.5 -87t43.5 -64t56.5 -42q-45 4 -88 36t-57 88q-28 108 32 222q-16 21 -29 32q-50 0 -89 -19q19 24 42 37t36 14l13 1q0 50 -13 78q-10 21 -32.5 28.5t-47 -3.5t-37.5 -40q2 4 4 7q-7 -28 -6.5 -75.5t19 -117t48.5 -122.5
-q-25 -14 -47 -36q-35 -16 -85.5 -70.5t-84.5 -101.5l-33 -46q-90 -34 -181 -125.5t-75 -162.5q1 -16 11 -27q-15 -12 -30 -30q-21 -25 -21 -54t21.5 -40t63.5 6q41 19 77 49.5t55 60.5q-2 2 -6.5 5t-20.5 7.5t-33 3.5q23 5 51 12.5t40 10t27.5 6t26 4t23.5 0.5q14 -7 22 34
-q7 37 7 90q0 102 -40 150q106 -103 101 -219q-1 -29 -15 -50t-27 -27l-13 -6q-4 -7 -19 -32t-26 -45.5t-26.5 -52t-25 -61t-17 -63t-6.5 -66.5t10 -63q-35 54 -37 80q-22 -24 -34.5 -39t-33.5 -42t-30.5 -46t-16.5 -41t-0.5 -38t25.5 -27q45 -25 144 64t190.5 221.5
-t122.5 228.5q86 52 145 115.5t86 119.5q47 -93 154 -178q104 -83 167 -80q39 2 46 43zM1794 640q0 -182 -71 -348t-191 -286t-286.5 -191t-348.5 -71t-348.5 71t-286.5 191t-191 286t-71 348t71 348t191 286t286.5 191t348.5 71t348.5 -71t286.5 -191t191 -286t71 -348z" />
-    <glyph glyph-name="uniF2D7" unicode="&#xf2d7;" 
-d="M518 1353v-655q103 -1 191.5 1.5t125.5 5.5l37 3q68 2 90.5 24.5t39.5 94.5l33 142h103l-14 -322l7 -319h-103l-29 127q-15 68 -45 93t-84 26q-87 8 -352 8v-556q0 -78 43.5 -115.5t133.5 -37.5h357q35 0 59.5 2t55 7.5t54 18t48.5 32t46 50.5t39 73l93 216h89
-q-6 -37 -31.5 -252t-30.5 -276q-146 5 -263.5 8t-162.5 4h-44h-628l-376 -12v102l127 25q67 13 91.5 37t25.5 79l8 643q3 402 -8 645q-2 61 -25.5 84t-91.5 36l-127 24v102l376 -12h702q139 0 374 27q-6 -68 -14 -194.5t-12 -219.5l-5 -92h-93l-32 124q-31 121 -74 179.5
-t-113 58.5h-548q-28 0 -35.5 -8.5t-7.5 -30.5z" />
-    <glyph glyph-name="uniF2D8" unicode="&#xf2d8;" 
-d="M922 739v-182q0 -4 0.5 -15t0 -15l-1.5 -12t-3.5 -11.5t-6.5 -7.5t-11 -5.5t-16 -1.5v309q9 0 16 -1t11 -5t6.5 -5.5t3.5 -9.5t1 -10.5v-13.5v-14zM1238 643v-121q0 -1 0.5 -12.5t0 -15.5t-2.5 -11.5t-7.5 -10.5t-13.5 -3q-9 0 -14 9q-4 10 -4 165v7v8.5v9t1.5 8.5l3.5 7
-t5 5.5t8 1.5q6 0 10 -1.5t6.5 -4.5t4 -6t2 -8.5t0.5 -8v-9.5v-9zM180 407h122v472h-122v-472zM614 407h106v472h-159l-28 -221q-20 148 -32 221h-158v-472h107v312l45 -312h76l43 319v-319zM1039 712q0 67 -5 90q-3 16 -11 28.5t-17 20.5t-25 14t-26.5 8.5t-31 4t-29 1.5
-h-29.5h-12h-91v-472h56q169 -1 197 24.5t25 180.5q-1 62 -1 100zM1356 515v133q0 29 -2 45t-9.5 33.5t-24.5 25t-46 7.5q-46 0 -77 -34v154h-117v-472h110l7 30q30 -36 77 -36q50 0 66 30.5t16 83.5zM1536 1248v-1216q0 -66 -47 -113t-113 -47h-1216q-66 0 -113 47t-47 113
-v1216q0 66 47 113t113 47h1216q66 0 113 -47t47 -113z" />
-    <glyph glyph-name="uniF2D9" unicode="&#xf2d9;" horiz-adv-x="2176" 
-d="M1143 -197q-6 1 -11 4q-13 8 -36 23t-86 65t-116.5 104.5t-112 140t-89.5 172.5q-17 3 -175 37q66 -213 235 -362t391 -184zM502 409l168 -28q-25 76 -41 167.5t-19 145.5l-4 53q-84 -82 -121 -224q5 -65 17 -114zM612 1018q-43 -64 -77 -148q44 46 74 68zM2049 584
-q0 161 -62 307t-167.5 252t-250.5 168.5t-304 62.5q-147 0 -281 -52.5t-240 -148.5q-30 -58 -45 -160q60 51 143 83.5t158.5 43t143 13.5t108.5 -1l40 -3q33 -1 53 -15.5t24.5 -33t6.5 -37t-1 -28.5q-126 11 -227.5 0.5t-183 -43.5t-142.5 -71.5t-131 -98.5
-q4 -36 11.5 -92.5t35.5 -178t62 -179.5q123 -6 247.5 14.5t214.5 53.5t162.5 67t109.5 59l37 24q22 16 39.5 20.5t30.5 -5t17 -34.5q14 -97 -39 -121q-208 -97 -467 -134q-135 -20 -317 -16q41 -96 110 -176.5t137 -127t130.5 -79t101.5 -43.5l39 -12q143 -23 263 15
-q195 99 314 289t119 418zM2123 621q-14 -135 -40 -212q-70 -208 -181.5 -346.5t-318.5 -253.5q-48 -33 -82 -44q-72 -26 -163 -16q-36 -3 -73 -3q-283 0 -504.5 173t-295.5 442q-1 0 -4 0.5t-5 0.5q-6 -50 2.5 -112.5t26 -115t36 -98t31.5 -71.5l14 -26q8 -12 54 -82
-q-71 38 -124.5 106.5t-78.5 140t-39.5 137t-17.5 107.5l-2 42q-5 2 -33.5 12.5t-48.5 18t-53 20.5t-57.5 25t-50 25.5t-42.5 27t-25 25.5q19 -10 50.5 -25.5t113 -45.5t145.5 -38l2 32q11 149 94 290q41 202 176 365q28 115 81 214q15 28 32 45t49 32q158 74 303.5 104
-t302 11t306.5 -97q220 -115 333 -336t87 -474z" />
-    <glyph glyph-name="uniF2DA" unicode="&#xf2da;" horiz-adv-x="1792" 
-d="M1341 752q29 44 -6.5 129.5t-121.5 142.5q-58 39 -125.5 53.5t-118 4.5t-68.5 -37q-12 -23 -4.5 -28t42.5 -10q23 -3 38.5 -5t44.5 -9.5t56 -17.5q36 -13 67.5 -31.5t53 -37t40 -38.5t30.5 -38t22 -34.5t16.5 -28.5t12 -18.5t10.5 -6t11 9.5zM1704 178
-q-52 -127 -148.5 -220t-214.5 -141.5t-253 -60.5t-266 13.5t-251 91t-210 161.5t-141.5 235.5t-46.5 303.5q1 41 8.5 84.5t12.5 64t24 80.5t23 73q-51 -208 1 -397t173 -318t291 -206t346 -83t349 74.5t289 244.5q20 27 18 14q0 -4 -4 -14zM1465 627q0 -104 -40.5 -199
-t-108.5 -164t-162 -109.5t-198 -40.5t-198 40.5t-162 109.5t-108.5 164t-40.5 199t40.5 199t108.5 164t162 109.5t198 40.5t198 -40.5t162 -109.5t108.5 -164t40.5 -199zM1752 915q-65 147 -180.5 251t-253 153.5t-292 53.5t-301 -36.5t-275.5 -129t-220 -211.5t-131 -297
-t-10 -373q-49 161 -51.5 311.5t35.5 272.5t109 227t165.5 180.5t207 126t232 71t242.5 9t236 -54t216 -124.5t178 -197q33 -50 62 -121t31 -112zM1690 573q12 244 -136.5 416t-396.5 240q-8 0 -10 5t24 8q125 -4 230 -50t173 -120t116 -168.5t58.5 -199t-1 -208
-t-61.5 -197.5t-122.5 -167t-185 -117.5t-248.5 -46.5q108 30 201.5 80t174 123t129.5 176.5t55 225.5z" />
-    <glyph glyph-name="uniF2DB" unicode="&#xf2db;" 
-d="M192 256v-128h-112q-16 0 -16 16v16h-48q-16 0 -16 16v32q0 16 16 16h48v16q0 16 16 16h112zM192 512v-128h-112q-16 0 -16 16v16h-48q-16 0 -16 16v32q0 16 16 16h48v16q0 16 16 16h112zM192 768v-128h-112q-16 0 -16 16v16h-48q-16 0 -16 16v32q0 16 16 16h48v16
-q0 16 16 16h112zM192 1024v-128h-112q-16 0 -16 16v16h-48q-16 0 -16 16v32q0 16 16 16h48v16q0 16 16 16h112zM192 1280v-128h-112q-16 0 -16 16v16h-48q-16 0 -16 16v32q0 16 16 16h48v16q0 16 16 16h112zM1280 1440v-1472q0 -40 -28 -68t-68 -28h-832q-40 0 -68 28
-t-28 68v1472q0 40 28 68t68 28h832q40 0 68 -28t28 -68zM1536 208v-32q0 -16 -16 -16h-48v-16q0 -16 -16 -16h-112v128h112q16 0 16 -16v-16h48q16 0 16 -16zM1536 464v-32q0 -16 -16 -16h-48v-16q0 -16 -16 -16h-112v128h112q16 0 16 -16v-16h48q16 0 16 -16zM1536 720v-32
-q0 -16 -16 -16h-48v-16q0 -16 -16 -16h-112v128h112q16 0 16 -16v-16h48q16 0 16 -16zM1536 976v-32q0 -16 -16 -16h-48v-16q0 -16 -16 -16h-112v128h112q16 0 16 -16v-16h48q16 0 16 -16zM1536 1232v-32q0 -16 -16 -16h-48v-16q0 -16 -16 -16h-112v128h112q16 0 16 -16v-16
-h48q16 0 16 -16z" />
-    <glyph glyph-name="uniF2DC" unicode="&#xf2dc;" horiz-adv-x="1664" 
-d="M1566 419l-167 -33l186 -107q23 -13 29.5 -38.5t-6.5 -48.5q-14 -23 -39 -29.5t-48 6.5l-186 106l55 -160q13 -38 -12 -63.5t-60.5 -20.5t-48.5 42l-102 300l-271 156v-313l208 -238q16 -18 17 -39t-11 -36.5t-28.5 -25t-37 -5.5t-36.5 22l-112 128v-214q0 -26 -19 -45
-t-45 -19t-45 19t-19 45v214l-112 -128q-16 -18 -36.5 -22t-37 5.5t-28.5 25t-11 36.5t17 39l208 238v313l-271 -156l-102 -300q-13 -37 -48.5 -42t-60.5 20.5t-12 63.5l55 160l-186 -106q-23 -13 -48 -6.5t-39 29.5q-13 23 -6.5 48.5t29.5 38.5l186 107l-167 33
-q-29 6 -42 29t-8.5 46.5t25.5 40t50 10.5l310 -62l271 157l-271 157l-310 -62q-4 -1 -13 -1q-27 0 -44 18t-19 40t11 43t40 26l167 33l-186 107q-23 13 -29.5 38.5t6.5 48.5t39 30t48 -7l186 -106l-55 160q-13 38 12 63.5t60.5 20.5t48.5 -42l102 -300l271 -156v313
-l-208 238q-16 18 -17 39t11 36.5t28.5 25t37 5.5t36.5 -22l112 -128v214q0 26 19 45t45 19t45 -19t19 -45v-214l112 128q16 18 36.5 22t37 -5.5t28.5 -25t11 -36.5t-17 -39l-208 -238v-313l271 156l102 300q13 37 48.5 42t60.5 -20.5t12 -63.5l-55 -160l186 106
-q23 13 48 6.5t39 -29.5q13 -23 6.5 -48.5t-29.5 -38.5l-186 -107l167 -33q27 -5 40 -26t11 -43t-19 -40t-44 -18q-9 0 -13 1l-310 62l-271 -157l271 -157l310 62q29 6 50 -10.5t25.5 -40t-8.5 -46.5t-42 -29z" />
-    <glyph glyph-name="uniF2DD" unicode="&#xf2dd;" horiz-adv-x="1792" 
-d="M1473 607q7 118 -33 226.5t-113 189t-177 131t-221 57.5q-116 7 -225.5 -32t-192 -110.5t-135 -175t-59.5 -220.5q-7 -118 33 -226.5t113 -189t177.5 -131t221.5 -57.5q155 -9 293 59t224 195.5t94 283.5zM1792 1536l-349 -348q120 -117 180.5 -272t50.5 -321
-q-11 -183 -102 -339t-241 -255.5t-332 -124.5l-999 -132l347 347q-120 116 -180.5 271.5t-50.5 321.5q11 184 102 340t241.5 255.5t332.5 124.5q167 22 500 66t500 66z" />
-    <glyph glyph-name="uniF2DE" unicode="&#xf2de;" horiz-adv-x="1792" 
-d="M948 508l163 -329h-51l-175 350l-171 -350h-49l179 374l-78 33l21 49l240 -102l-21 -50zM563 1100l304 -130l-130 -304l-304 130zM907 915l240 -103l-103 -239l-239 102zM1188 765l191 -81l-82 -190l-190 81zM1680 640q0 159 -62 304t-167.5 250.5t-250.5 167.5t-304 62
-t-304 -62t-250.5 -167.5t-167.5 -250.5t-62 -304t62 -304t167.5 -250.5t250.5 -167.5t304 -62t304 62t250.5 167.5t167.5 250.5t62 304zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71
-t286 -191t191 -286t71 -348z" />
-    <glyph glyph-name="uniF2E0" unicode="&#xf2e0;" horiz-adv-x="1920" 
-d="M1334 302q-4 24 -27.5 34t-49.5 10.5t-48.5 12.5t-25.5 38q-5 47 33 139.5t75 181t32 127.5q-14 101 -117 103q-45 1 -75 -16l-3 -2l-5 -2.5t-4.5 -2t-5 -2t-5 -0.5t-6 1.5t-6 3.5t-6.5 5q-3 2 -9 8.5t-9 9t-8.5 7.5t-9.5 7.5t-9.5 5.5t-11 4.5t-11.5 2.5q-30 5 -48 -3
-t-45 -31q-1 -1 -9 -8.5t-12.5 -11t-15 -10t-16.5 -5.5t-17 3q-54 27 -84 40q-41 18 -94 -5t-76 -65q-16 -28 -41 -98.5t-43.5 -132.5t-40 -134t-21.5 -73q-22 -69 18.5 -119t110.5 -46q30 2 50.5 15t38.5 46q7 13 79 199.5t77 194.5q6 11 21.5 18t29.5 0q27 -15 21 -53
-q-2 -18 -51 -139.5t-50 -132.5q-6 -38 19.5 -56.5t60.5 -7t55 49.5q4 8 45.5 92t81.5 163.5t46 88.5q20 29 41 28q29 0 25 -38q-2 -16 -65.5 -147.5t-70.5 -159.5q-12 -53 13 -103t74 -74q17 -9 51 -15.5t71.5 -8t62.5 14t20 48.5zM383 86q3 -15 -5 -27.5t-23 -15.5
-q-14 -3 -26.5 5t-15.5 23q-3 14 5 27t22 16t27 -5t16 -23zM953 -177q12 -17 8.5 -37.5t-20.5 -32.5t-37.5 -8t-32.5 21q-11 17 -7.5 37.5t20.5 32.5t37.5 8t31.5 -21zM177 635q-18 -27 -49.5 -33t-57.5 13q-26 18 -32 50t12 58q18 27 49.5 33t57.5 -12q26 -19 32 -50.5
-t-12 -58.5zM1467 -42q19 -28 13 -61.5t-34 -52.5t-60.5 -13t-51.5 34t-13 61t33 53q28 19 60.5 13t52.5 -34zM1579 562q69 -113 42.5 -244.5t-134.5 -207.5q-90 -63 -199 -60q-20 -80 -84.5 -127t-143.5 -44.5t-140 57.5q-12 -9 -13 -10q-103 -71 -225 -48.5t-193 126.5
-q-50 73 -53 164q-83 14 -142.5 70.5t-80.5 128t-2 152t81 138.5q-36 60 -38 128t24.5 125t79.5 98.5t121 50.5q32 85 99 148t146.5 91.5t168 17t159.5 -66.5q72 21 140 17.5t128.5 -36t104.5 -80t67.5 -115t17.5 -140.5q52 -16 87 -57t45.5 -89t-5.5 -99.5t-58 -87.5z
-M455 1222q14 -20 9.5 -44.5t-24.5 -38.5q-19 -14 -43.5 -9.5t-37.5 24.5q-14 20 -9.5 44.5t24.5 38.5q19 14 43.5 9.5t37.5 -24.5zM614 1503q4 -16 -5 -30.5t-26 -18.5t-31 5.5t-18 26.5q-3 17 6.5 31t25.5 18q17 4 31 -5.5t17 -26.5zM1800 555q4 -20 -6.5 -37t-30.5 -21
-q-19 -4 -36 6.5t-21 30.5t6.5 37t30.5 22q20 4 36.5 -7.5t20.5 -30.5zM1136 1448q16 -27 8.5 -58.5t-35.5 -47.5q-27 -16 -57.5 -8.5t-46.5 34.5q-16 28 -8.5 59t34.5 48t58 9t47 -36zM1882 792q4 -15 -4 -27.5t-23 -16.5q-15 -3 -27.5 5.5t-15.5 22.5q-3 15 5 28t23 16
-q14 3 26.5 -5t15.5 -23zM1691 1033q15 -22 10.5 -49t-26.5 -43q-22 -15 -49 -10t-42 27t-10 49t27 43t48.5 11t41.5 -28z" />
-    <glyph glyph-name="uniF2E1" unicode="&#xf2e1;" horiz-adv-x="1792" 
- />
-    <glyph glyph-name="uniF2E2" unicode="&#xf2e2;" horiz-adv-x="1792" 
- />
-    <glyph glyph-name="uniF2E3" unicode="&#xf2e3;" horiz-adv-x="1792" 
- />
-    <glyph glyph-name="uniF2E4" unicode="&#xf2e4;" horiz-adv-x="1792" 
- />
-    <glyph glyph-name="uniF2E5" unicode="&#xf2e5;" horiz-adv-x="1792" 
- />
-    <glyph glyph-name="uniF2E6" unicode="&#xf2e6;" horiz-adv-x="1792" 
- />
-    <glyph glyph-name="uniF2E7" unicode="&#xf2e7;" horiz-adv-x="1792" 
- />
-    <glyph glyph-name="_698" unicode="&#xf2e8;" horiz-adv-x="1792" 
- />
-    <glyph glyph-name="uniF2E9" unicode="&#xf2e9;" horiz-adv-x="1792" 
- />
-    <glyph glyph-name="uniF2EA" unicode="&#xf2ea;" horiz-adv-x="1792" 
- />
-    <glyph glyph-name="uniF2EB" unicode="&#xf2eb;" horiz-adv-x="1792" 
- />
-    <glyph glyph-name="uniF2EC" unicode="&#xf2ec;" horiz-adv-x="1792" 
- />
-    <glyph glyph-name="uniF2ED" unicode="&#xf2ed;" horiz-adv-x="1792" 
- />
-    <glyph glyph-name="uniF2EE" unicode="&#xf2ee;" horiz-adv-x="1792" 
- />
-    <glyph glyph-name="lessequal" unicode="&#xf500;" horiz-adv-x="1792" 
- />
-  </font>
-</defs></svg>
diff --git a/css/fontawesome/fonts/fontawesome-webfont.ttf b/css/fontawesome/fonts/fontawesome-webfont.ttf
deleted file mode 100644 (file)
index 35acda2..0000000
Binary files a/css/fontawesome/fonts/fontawesome-webfont.ttf and /dev/null differ
diff --git a/css/fontawesome/fonts/fontawesome-webfont.woff b/css/fontawesome/fonts/fontawesome-webfont.woff
deleted file mode 100644 (file)
index 400014a..0000000
Binary files a/css/fontawesome/fonts/fontawesome-webfont.woff and /dev/null differ
diff --git a/css/fontawesome/fonts/fontawesome-webfont.woff2 b/css/fontawesome/fonts/fontawesome-webfont.woff2
deleted file mode 100644 (file)
index 4d13fc6..0000000
Binary files a/css/fontawesome/fonts/fontawesome-webfont.woff2 and /dev/null differ
diff --git a/css/fonts/slick.eot b/css/fonts/slick.eot
deleted file mode 100644 (file)
index 2cbab9c..0000000
Binary files a/css/fonts/slick.eot and /dev/null differ
diff --git a/css/fonts/slick.svg b/css/fonts/slick.svg
deleted file mode 100644 (file)
index b36a66a..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg xmlns="http://www.w3.org/2000/svg">
-<metadata>Generated by Fontastic.me</metadata>
-<defs>
-<font id="slick" horiz-adv-x="512">
-<font-face font-family="slick" units-per-em="512" ascent="480" descent="-32"/>
-<missing-glyph horiz-adv-x="512" />
-
-<glyph unicode="&#8594;" d="M241 113l130 130c4 4 6 8 6 13 0 5-2 9-6 13l-130 130c-3 3-7 5-12 5-5 0-10-2-13-5l-29-30c-4-3-6-7-6-12 0-5 2-10 6-13l87-88-87-88c-4-3-6-8-6-13 0-5 2-9 6-12l29-30c3-3 8-5 13-5 5 0 9 2 12 5z m234 143c0-40-9-77-29-110-20-34-46-60-80-80-33-20-70-29-110-29-40 0-77 9-110 29-34 20-60 46-80 80-20 33-29 70-29 110 0 40 9 77 29 110 20 34 46 60 80 80 33 20 70 29 110 29 40 0 77-9 110-29 34-20 60-46 80-80 20-33 29-70 29-110z"/>
-<glyph unicode="&#8592;" d="M296 113l29 30c4 3 6 7 6 12 0 5-2 10-6 13l-87 88 87 88c4 3 6 8 6 13 0 5-2 9-6 12l-29 30c-3 3-8 5-13 5-5 0-9-2-12-5l-130-130c-4-4-6-8-6-13 0-5 2-9 6-13l130-130c3-3 7-5 12-5 5 0 10 2 13 5z m179 143c0-40-9-77-29-110-20-34-46-60-80-80-33-20-70-29-110-29-40 0-77 9-110 29-34 20-60 46-80 80-20 33-29 70-29 110 0 40 9 77 29 110 20 34 46 60 80 80 33 20 70 29 110 29 40 0 77-9 110-29 34-20 60-46 80-80 20-33 29-70 29-110z"/>
-<glyph unicode="&#8226;" d="M475 256c0-40-9-77-29-110-20-34-46-60-80-80-33-20-70-29-110-29-40 0-77 9-110 29-34 20-60 46-80 80-20 33-29 70-29 110 0 40 9 77 29 110 20 34 46 60 80 80 33 20 70 29 110 29 40 0 77-9 110-29 34-20 60-46 80-80 20-33 29-70 29-110z"/>
-<glyph unicode="&#97;" d="M475 439l0-128c0-5-1-9-5-13-4-4-8-5-13-5l-128 0c-8 0-13 3-17 11-3 7-2 14 4 20l40 39c-28 26-62 39-100 39-20 0-39-4-57-11-18-8-33-18-46-32-14-13-24-28-32-46-7-18-11-37-11-57 0-20 4-39 11-57 8-18 18-33 32-46 13-14 28-24 46-32 18-7 37-11 57-11 23 0 44 5 64 15 20 9 38 23 51 42 2 1 4 3 7 3 3 0 5-1 7-3l39-39c2-2 3-3 3-6 0-2-1-4-2-6-21-25-46-45-76-59-29-14-60-20-93-20-30 0-58 5-85 17-27 12-51 27-70 47-20 19-35 43-47 70-12 27-17 55-17 85 0 30 5 58 17 85 12 27 27 51 47 70 19 20 43 35 70 47 27 12 55 17 85 17 28 0 55-5 81-15 26-11 50-26 70-45l37 37c6 6 12 7 20 4 8-4 11-9 11-17z"/>
-</font></defs></svg>
diff --git a/css/fonts/slick.ttf b/css/fonts/slick.ttf
deleted file mode 100644 (file)
index 9d03461..0000000
Binary files a/css/fonts/slick.ttf and /dev/null differ
diff --git a/css/fonts/slick.woff b/css/fonts/slick.woff
deleted file mode 100644 (file)
index 8ee9972..0000000
Binary files a/css/fonts/slick.woff and /dev/null differ
diff --git a/css/images/caption-bg.png b/css/images/caption-bg.png
deleted file mode 100644 (file)
index 54ca139..0000000
Binary files a/css/images/caption-bg.png and /dev/null differ
diff --git a/css/images/close.png b/css/images/close.png
deleted file mode 100644 (file)
index e802c69..0000000
Binary files a/css/images/close.png and /dev/null differ
diff --git a/css/images/close@2x.png b/css/images/close@2x.png
deleted file mode 100644 (file)
index 60b37fa..0000000
Binary files a/css/images/close@2x.png and /dev/null differ
diff --git a/css/images/controls.png b/css/images/controls.png
deleted file mode 100644 (file)
index dbafdb5..0000000
Binary files a/css/images/controls.png and /dev/null differ
diff --git a/css/images/left-arrow.png b/css/images/left-arrow.png
deleted file mode 100644 (file)
index 51aed6e..0000000
Binary files a/css/images/left-arrow.png and /dev/null differ
diff --git a/css/images/loading.gif b/css/images/loading.gif
deleted file mode 100644 (file)
index 5b796c4..0000000
Binary files a/css/images/loading.gif and /dev/null differ
diff --git a/css/images/loading@2x.gif b/css/images/loading@2x.gif
deleted file mode 100644 (file)
index dc8aeff..0000000
Binary files a/css/images/loading@2x.gif and /dev/null differ
diff --git a/css/images/next.png b/css/images/next.png
deleted file mode 100644 (file)
index 462b64e..0000000
Binary files a/css/images/next.png and /dev/null differ
diff --git a/css/images/next@2x.png b/css/images/next@2x.png
deleted file mode 100644 (file)
index f246ae9..0000000
Binary files a/css/images/next@2x.png and /dev/null differ
diff --git a/css/images/prev.png b/css/images/prev.png
deleted file mode 100644 (file)
index eda62a7..0000000
Binary files a/css/images/prev.png and /dev/null differ
diff --git a/css/images/prev@2x.png b/css/images/prev@2x.png
deleted file mode 100644 (file)
index 49a2e4d..0000000
Binary files a/css/images/prev@2x.png and /dev/null differ
diff --git a/css/images/right-arrow.png b/css/images/right-arrow.png
deleted file mode 100644 (file)
index 315fcfd..0000000
Binary files a/css/images/right-arrow.png and /dev/null differ
diff --git a/css/nivo-lightbox.css b/css/nivo-lightbox.css
deleted file mode 100644 (file)
index a17535e..0000000
+++ /dev/null
@@ -1,293 +0,0 @@
-/*
- * Nivo Lightbox v1.1
- * http://dev7studios.com/nivo-lightbox
- *
- * Copyright 2013, Dev7studios
- * Free to use and abuse under the MIT license.
- * http://www.opensource.org/licenses/mit-license.php
- */
-
-.nivo-lightbox-overlay {
-       position: fixed;
-       top: 0;
-       left: 0;
-       z-index: 99998;
-       width: 100%;
-       height: 100%;
-       overflow: hidden;
-       visibility: hidden;
-       opacity: 0;
-       -webkit-box-sizing: border-box;
-       -moz-box-sizing: border-box;
-       box-sizing: border-box;
-}
-.nivo-lightbox-overlay.nivo-lightbox-open {
-       visibility: visible;
-       opacity: 1;
-}
-.nivo-lightbox-wrap  {
-       position: absolute;
-       top: 10%;
-       bottom: 10%;
-       left: 10%;
-       right: 10%;
-}
-.nivo-lightbox-content {
-       width: 100%;
-       height: 100%;
-}
-.nivo-lightbox-title-wrap {
-       position: absolute;
-       bottom: 0;
-       left: 0;
-       width: 100%;
-       z-index: 99999;
-       text-align: center;
-}
-.nivo-lightbox-nav { display: none; }
-.nivo-lightbox-prev {
-       position: absolute;
-       top: 50%;
-       left: 0;
-}
-.nivo-lightbox-next {
-       position: absolute;
-       top: 50%;
-       right: 0;
-}
-.nivo-lightbox-close {
-       position: absolute;
-       top: 2%;
-       right: 2%;
-}
-
-.nivo-lightbox-image { text-align: center; }
-.nivo-lightbox-image img {
-       max-width: 100%;
-       max-height: 100%;
-       width: auto;
-       height: auto;
-       vertical-align: middle;
-}
-.nivo-lightbox-content iframe {
-       width: 100%;
-       height: 100%;
-}
-.nivo-lightbox-inline,
-.nivo-lightbox-ajax {
-       max-height: 100%;
-       overflow: auto;
-       -webkit-box-sizing: border-box;
-       -moz-box-sizing: border-box;
-       box-sizing: border-box;
-       /* https://bugzilla.mozilla.org/show_bug.cgi?id=308801 */
-}
-.nivo-lightbox-error {
-       display: table;
-       text-align: center;
-       width: 100%;
-       height: 100%;
-       color: #fff;
-       text-shadow: 0 1px 1px #000;
-}
-.nivo-lightbox-error p {
-       display: table-cell;
-       vertical-align: middle;
-}
-
-/* Effects
- **********************************************/
-.nivo-lightbox-notouch .nivo-lightbox-effect-fade,
-.nivo-lightbox-notouch .nivo-lightbox-effect-fadeScale,
-.nivo-lightbox-notouch .nivo-lightbox-effect-slideLeft,
-.nivo-lightbox-notouch .nivo-lightbox-effect-slideRight,
-.nivo-lightbox-notouch .nivo-lightbox-effect-slideUp,
-.nivo-lightbox-notouch .nivo-lightbox-effect-slideDown,
-.nivo-lightbox-notouch .nivo-lightbox-effect-fall {
-       -webkit-transition: all 0.2s ease-in-out;
-          -moz-transition: all 0.2s ease-in-out;
-           -ms-transition: all 0.2s ease-in-out;
-            -o-transition: all 0.2s ease-in-out;
-               transition: all 0.2s ease-in-out;
-}
-
-/* fadeScale */
-.nivo-lightbox-effect-fadeScale .nivo-lightbox-wrap {
-       -webkit-transition: all 0.3s;
-          -moz-transition: all 0.3s;
-           -ms-transition: all 0.3s;
-            -o-transition: all 0.3s;
-               transition: all 0.3s;
-       -webkit-transform: scale(0.7);
-          -moz-transform: scale(0.7);
-           -ms-transform: scale(0.7);
-               transform: scale(0.7);
-}
-.nivo-lightbox-effect-fadeScale.nivo-lightbox-open .nivo-lightbox-wrap {
-       -webkit-transform: scale(1);
-          -moz-transform: scale(1);
-           -ms-transform: scale(1);
-               transform: scale(1);
-}
-
-/* slideLeft / slideRight / slideUp / slideDown */
-.nivo-lightbox-effect-slideLeft .nivo-lightbox-wrap,
-.nivo-lightbox-effect-slideRight .nivo-lightbox-wrap,
-.nivo-lightbox-effect-slideUp .nivo-lightbox-wrap,
-.nivo-lightbox-effect-slideDown .nivo-lightbox-wrap {
-       -webkit-transition: all 0.3s cubic-bezier(0.25, 0.5, 0.5, 0.9);
-          -moz-transition: all 0.3s cubic-bezier(0.25, 0.5, 0.5, 0.9);
-           -ms-transition: all 0.3s cubic-bezier(0.25, 0.5, 0.5, 0.9);
-            -o-transition: all 0.3s cubic-bezier(0.25, 0.5, 0.5, 0.9);
-               transition: all 0.3s cubic-bezier(0.25, 0.5, 0.5, 0.9);
-}
-.nivo-lightbox-effect-slideLeft .nivo-lightbox-wrap {
-       -webkit-transform: translateX(-10%);
-          -moz-transform: translateX(-10%);
-           -ms-transform: translateX(-10%);
-               transform: translateX(-10%);
-}
-.nivo-lightbox-effect-slideRight .nivo-lightbox-wrap {
-       -webkit-transform: translateX(10%);
-          -moz-transform: translateX(10%);
-           -ms-transform: translateX(10%);
-               transform: translateX(10%);
-}
-.nivo-lightbox-effect-slideLeft.nivo-lightbox-open .nivo-lightbox-wrap,
-.nivo-lightbox-effect-slideRight.nivo-lightbox-open .nivo-lightbox-wrap {
-       -webkit-transform: translateX(0);
-          -moz-transform: translateX(0);
-           -ms-transform: translateX(0);
-               transform: translateX(0);
-}
-.nivo-lightbox-effect-slideDown .nivo-lightbox-wrap {
-       -webkit-transform: translateY(-10%);
-          -moz-transform: translateY(-10%);
-           -ms-transform: translateY(-10%);
-               transform: translateY(-10%);
-}
-.nivo-lightbox-effect-slideUp .nivo-lightbox-wrap {
-       -webkit-transform: translateY(10%);
-          -moz-transform: translateY(10%);
-           -ms-transform: translateY(10%);
-               transform: translateY(10%);
-}
-.nivo-lightbox-effect-slideUp.nivo-lightbox-open .nivo-lightbox-wrap,
-.nivo-lightbox-effect-slideDown.nivo-lightbox-open .nivo-lightbox-wrap {
-       -webkit-transform: translateY(0);
-          -moz-transform: translateY(0);
-           -ms-transform: translateY(0);
-               transform: translateY(0);
-}
-
-/* fall */
-.nivo-lightbox-body-effect-fall .nivo-lightbox-effect-fall {
-       -webkit-perspective: 1000px;
-          -moz-perspective: 1000px;
-               perspective: 1000px;
-}
-.nivo-lightbox-effect-fall .nivo-lightbox-wrap {
-       -webkit-transition: all 0.3s ease-out;
-          -moz-transition: all 0.3s ease-out;
-           -ms-transition: all 0.3s ease-out;
-            -o-transition: all 0.3s ease-out;
-               transition: all 0.3s ease-out;
-       -webkit-transform: translateZ(300px);
-          -moz-transform: translateZ(300px);
-           -ms-transform: translateZ(300px);
-               transform: translateZ(300px);
-}
-.nivo-lightbox-effect-fall.nivo-lightbox-open .nivo-lightbox-wrap {
-       -webkit-transform: translateZ(0);
-          -moz-transform: translateZ(0);
-           -ms-transform: translateZ(0);
-               transform: translateZ(0);
-}
-
-.nivo-lightbox-theme-default.nivo-lightbox-overlay { 
-       background: #666;
-       background: rgba(0,0,0,0.6); 
-}
-.nivo-lightbox-theme-default .nivo-lightbox-content.nivo-lightbox-loading { background: url(images/loading.gif) no-repeat 50% 50%; }
-
-.nivo-lightbox-theme-default .nivo-lightbox-nav {
-       top: 10%;
-       width: 8%;
-       height: 80%;
-       text-indent: -9999px;
-       background-repeat: no-repeat;
-       background-position: 50% 50%;
-       opacity: 0.5;
-}
-.nivo-lightbox-theme-default .nivo-lightbox-nav:hover { 
-       opacity: 1; 
-       background-color: rgba(0,0,0,0.1);
-}
-.nivo-lightbox-theme-default .nivo-lightbox-prev { 
-       background-image: url(images/prev.png); 
-       border-radius: 0 3px 3px 0;
-}
-.nivo-lightbox-theme-default .nivo-lightbox-next { 
-       background-image: url(images/next.png); 
-       border-radius: 3px 0 0 3px;
-}
-
-.nivo-lightbox-theme-default .nivo-lightbox-close {
-       display: block;
-       background: url(images/close.png) no-repeat 5px 5px;
-       width: 16px;
-       height: 16px;
-       text-indent: -9999px;
-       padding: 5px;
-       opacity: 0.5;
-}
-.nivo-lightbox-theme-default .nivo-lightbox-close:hover { opacity: 1; }
-
-.nivo-lightbox-theme-default .nivo-lightbox-title-wrap { bottom: -7%; }
-.nivo-lightbox-theme-default .nivo-lightbox-title {
-       font: 14px/20px 'Helvetica Neue', Helvetica, Arial, sans-serif;
-       font-style: normal;
-       font-weight: normal;
-       background: #000;
-       color: #fff;
-       padding: 7px 15px;
-       border-radius: 30px;
-}
-
-.nivo-lightbox-theme-default .nivo-lightbox-image img {
-       background: #fff;
-    padding:8px;
-}
-.nivo-lightbox-theme-default .nivo-lightbox-ajax,
-.nivo-lightbox-theme-default .nivo-lightbox-inline {
-       background: #fff;
-       padding: 40px;
-       -webkit-box-shadow: 0px 1px 1px rgba(0,0,0,0.4);
-          -moz-box-shadow: 0px 1px 1px rgba(0,0,0,0.4);
-               box-shadow: 0px 1px 1px rgba(0,0,0,0.4);
-}
-
-@media (-webkit-min-device-pixel-ratio: 1.3),
-       (-o-min-device-pixel-ratio: 2.6/2),
-       (min--moz-device-pixel-ratio: 1.3),
-       (min-device-pixel-ratio: 1.3),
-       (min-resolution: 1.3dppx) {
-
-       .nivo-lightbox-theme-default .nivo-lightbox-content.nivo-lightbox-loading { 
-               background-image: url(images/loading@2x.gif); 
-               background-size: 32px 32px;
-       }
-       .nivo-lightbox-theme-default .nivo-lightbox-prev { 
-               background-image: url(images/prev@2x.png); 
-               background-size: 48px 48px;
-       }
-       .nivo-lightbox-theme-default .nivo-lightbox-next { 
-               background-image: url(images/next@2x.png); 
-               background-size: 48px 48px;
-       }
-       .nivo-lightbox-theme-default .nivo-lightbox-close { 
-               background-image: url(images/close@2x.png); 
-               background-size: 16px 16px;
-       }
-       
-}
\ No newline at end of file
diff --git a/css/responsive.css b/css/responsive.css
deleted file mode 100644 (file)
index 0af877d..0000000
+++ /dev/null
@@ -1,328 +0,0 @@
-/*
-Responsive CSS
-*/
-@media screen and (max-width: 1200px){
-    .page-template-default #page #content{
-        padding-left: 10px;
-        padding-right: 10px;
-    }
-       .mid-content{
-               width: 100%;
-               /* padding: 0 20px; */
-       }
-
-       .service-list .service-image{
-               width: 16%;
-               height: auto;
-       }
-       .service-list .service-detail{
-               width: 80%;
-       }
-
-       .team-tab{
-               padding: 0 50px;
-       }
-
-       .social-icons{
-               display: none;
-       }
-}
-
-@media screen and (max-width: 1000px){
-    #masthead .flex-box{
-        display: block;
-    }
-    #site-logo{
-        width: 30%;
-    }
-    .main-navigation{
-        width: 40px;
-    }
-       .main-navigation > ul{
-               display: none;
-       }
-       .menu-toggle{
-               display: block;
-               height: 40px;
-               width: 40px;
-               background: url(../images/menu.png) no-repeat center #00D3D1;
-               text-indent: -9999px;
-               cursor: pointer;
-       }
-       .logo-top #site-logo{
-               float: left;
-               text-align: left;
-       }
-       .logo-top .main-navigation{
-               float: right;
-       }
-
-       .logo-top .menu-toggle{
-               float: right;
-       }
-       .main-navigation{
-               text-align: center;
-       }
-       .main-navigation > ul{
-               position: absolute;
-               top: 100%;
-               left: 0;
-               width: 100%;
-               background: #F28B59;
-               padding: 10px 0;
-               text-align: center;
-       }
-       .main-navigation > ul > li{
-               display: inline-block;
-               float: none;
-       }
-       .main-navigation > ul > li > a{
-               color:#FFF;
-        padding: 10px;
-       }
-       .main-navigation > ul > li.current a, 
-       .main-navigation li:hover > a,
-       .main-navigation .current_page_item > a, 
-       .main-navigation .current-menu-item > a{
-               color: #EEE;
-       }
-       .slider-caption{
-               padding-left: 70px;
-               padding-right: 70px;
-       }
-       #main-slider{
-               min-height: 0;
-       }
-}
-
-@media screen and (max-width: 768px){
-
-       h1{
-          font-size: 24px;
-       }
-       h2{
-               font-size: 20px;
-       }
-       h3{
-               font-size: 18px;
-       }
-       h4{
-               font-size: 16px;
-       }
-       h5{
-               font-size: 14px;
-       }
-       h6{
-               font-size: 12px;
-       }
-       .parallax-section h1{
-               font-size: 34px;
-       }
-       .slider-caption .caption-title{
-               font-size: 30px;
-       }
-       .slider-caption .caption-description{
-               font-size: 20px;
-       }
-       .service-list{
-               width: 100%;
-       }
-       .portfolio-list{
-               width: 50%;
-       }
-
-       .team-image img{
-               width: 100%;
-       }
-
-       .portfolio-listing a:nth-child(3n+1){
-               clear: none;
-       }
-
-       .portfolio-listing a:nth-child(2n+1){
-               clear: both;
-       }
-
-       .blog-listing .blog-list{
-               width: 80%;
-               margin: 0 auto 20px;
-               float: none;
-               display: block;
-       }
-       .blog-list .blog-image{
-               text-align: center;
-       }
-       .parallax-section input[type="text"], 
-       .parallax-section input[type="email"], 
-       .parallax-section input[type="url"], 
-       .parallax-section input[type="password"], 
-       .parallax-section input[type="search"], 
-       .parallax-section input[type="tel"], 
-       .parallax-section textarea{
-               width: 80%;
-       }
-       .service-listing .service-list{
-               float: none;
-       }
-       .top-footer .top-footer-wrap{
-               margin-left: 0;
-       }
-       .footer-block{
-               width: 100% !important;
-               margin-left: 0 !important;
-               margin-bottom: 25px;
-               float: none;
-       }
-       .footer-block:last-child{
-               margin-bottom: 0;
-       }
-       .copy-right, .site-info{
-               float: none;
-               text-align: center;
-       }
-       .main-navigation > ul{
-               padding: 0;
-               z-index: 99;
-       }
-       .main-navigation > ul > li{
-               display: block;
-               border-bottom: 1px solid white;
-       }
-       .main-navigation ul ul {
-               background: #F28B59;
-               position: static;
-               font-size: 15px;
-               display: none;
-               float: none;
-       }
-       #primary, #secondary{
-               float: none;
-               width: 100%;
-       }
-       #main-slider .bx-wrapper .bx-controls-direction a{
-               display: none;
-       }
-       .next-page{
-               display: none;
-       }
-       .main-navigation ul ul a{
-               color: #FFF;
-       }
-       .main-navigation ul ul li a{
-               padding: 10px 0;
-               border: 0;
-       }
-       .main-navigation ul ul{
-               box-shadow: none;
-       }
-       .parallax-section{
-        /* background-attachment: scroll !important;
-        background-repeat: repeat !important; */
-    }
-    .parallax-section.blank_template{
-       height: 40vh;
-       min-height: none;
-    }
-    body.parallax-on #masthead{
-        position: relative;
-    }
-    #content{
-        padding-top: 0 !important;
-    }
-    #main-slider .slick-arrow{
-       display: none !important;
-    }
-    .slider-caption{
-       padding: 0;
-    }
-    .logo-top .main-navigation ul ul li{
-       text-align: center;
-    }
-}
-@media screen and (max-width: 480px){
-       .parallax-section h1{
-               font-size: 30px;
-       }
-       .service-list.odd .service-image{
-               float: left;
-       }
-       .service-list.odd .service-detail{
-               float: right;
-       }
-       .service-listing .service-list{
-               text-align: left;
-       }
-       .team-tab{
-               max-width: 250px;
-       margin: 0 auto;
-       }
-       .team-big-image{
-               display: none;
-       }
-       .team-detail{
-               float: none;
-               width: auto;
-       }
-       .team-image{
-               height: auto;
-       }
-       .team-tab .bx-wrapper .bx-viewport{
-               border-radius: 0;
-       }
-       .portfolio-list{
-               width: 100%;
-       }
-       .blog-listing .blog-list{
-               width: 100%;
-       }
-       .parallax-section input[type="text"], 
-       .parallax-section input[type="email"], 
-       .parallax-section input[type="url"], 
-       .parallax-section input[type="password"], 
-       .parallax-section input[type="search"], 
-       .parallax-section input[type="tel"], 
-       .parallax-section textarea{
-               width: 100%;
-       }
-
-       .team-content{
-               margin-top: 30px;
-       }
-       #site-logo,
-       .logo-top #site-logo{
-               width: 60%;
-               text-align:left;
-       }
-       .slider-caption{
-               display: none;
-       }
-    
-    .hentry,
-    #comments,
-    #secondary .widget{
-        padding: 20px;
-    }
-    
-    .entry-thumb{
-        margin: -20px -20px 30px;
-    }
-    
-    .comment-navigation [class*='nav-'], 
-    .paging-navigation [class*='nav-'], 
-    .post-navigation [class*='nav-'], 
-    .posts-navigation [class*='nav-']{
-        width: 100%;
-        float: none;
-    }
-       
-}
-
-
-@media screen and (min-width: 1001px){
-       .main-navigation > ul{
-               display: block !important;
-       }
-       .logo-top .main-navigation > ul{
-               display: inline-block !important;
-       }
-}
\ No newline at end of file
diff --git a/css/slick.css b/css/slick.css
deleted file mode 100644 (file)
index 57477e8..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-/* Slider */
-.slick-slider
-{
-    position: relative;
-
-    display: block;
-    box-sizing: border-box;
-
-    -webkit-user-select: none;
-       -moz-user-select: none;
-        -ms-user-select: none;
-            user-select: none;
-
-    -webkit-touch-callout: none;
-    -khtml-user-select: none;
-    -ms-touch-action: pan-y;
-        touch-action: pan-y;
-    -webkit-tap-highlight-color: transparent;
-}
-
-.slick-list
-{
-    position: relative;
-
-    display: block;
-    overflow: hidden;
-
-    margin: 0;
-    padding: 0;
-}
-.slick-list:focus
-{
-    outline: none;
-}
-.slick-list.dragging
-{
-    cursor: pointer;
-    cursor: hand;
-}
-
-.slick-slider .slick-track,
-.slick-slider .slick-list
-{
-    -webkit-transform: translate3d(0, 0, 0);
-       -moz-transform: translate3d(0, 0, 0);
-        -ms-transform: translate3d(0, 0, 0);
-         -o-transform: translate3d(0, 0, 0);
-            transform: translate3d(0, 0, 0);
-}
-
-.slick-track
-{
-    position: relative;
-    top: 0;
-    left: 0;
-
-    display: block;
-    margin-left: auto;
-    margin-right: auto;
-}
-.slick-track:before,
-.slick-track:after
-{
-    display: table;
-
-    content: '';
-}
-.slick-track:after
-{
-    clear: both;
-}
-.slick-loading .slick-track
-{
-    visibility: hidden;
-}
-
-.slick-slide
-{
-    display: none;
-    float: left;
-
-    height: 100%;
-    min-height: 1px;
-}
-[dir='rtl'] .slick-slide
-{
-    float: right;
-}
-.slick-slide img
-{
-    display: block;
-}
-.slick-slide.slick-loading img
-{
-    display: none;
-}
-.slick-slide.dragging img
-{
-    pointer-events: none;
-}
-.slick-initialized .slick-slide
-{
-    display: block;
-}
-.slick-loading .slick-slide
-{
-    visibility: hidden;
-}
-.slick-vertical .slick-slide
-{
-    display: block;
-
-    height: auto;
-
-    border: 1px solid transparent;
-}
-.slick-arrow.slick-hidden {
-    display: none;
-}
diff --git a/demo.php b/demo.php
deleted file mode 100644 (file)
index 42a89bc..0000000
--- a/demo.php
+++ /dev/null
@@ -1,460 +0,0 @@
-    <section class="parallax-section clearfix service_template" id="features">
-        <div class="mid-content">
-            <h2><span>Features</span></h2>
-            <div class="parallax-content">
-                <div class="page-content">
-                    <p style="text-align: center;"><?php _e('Curabitur eget interdum risus. Curabitur dictum, libero ut mattis consequat, lectus mauris congue risus, et volutpat nulla eros vel arcu.','accesspress-parallax'); ?></p>
-                </div>
-            </div> 
-            <div class="service-listing clearfix">
-                <div class="clearfix service-list odd wow fadeInLeft" data-wow-delay="0.25s">
-                    <div class="service-image">
-                        <img src="<?php echo get_template_directory_uri(); ?>/images/demo/icon1.png" alt="EASY THEME OPTION PANEL">
-                    </div>
-                    <div class="service-detail">
-                        <h3>EASY THEME OPTION PANEL</h3>
-                        <div class="service-content"><p><?php _e( 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec iaculis metus vitae ligula elementum ut luctus lorem facilisis.', 'accesspress-parallax' ); ?></p>
-                        </div>
-                    </div>
-                </div>
-                <div class="clearfix service-list even wow fadeInRight" data-wow-delay="0.5s">
-                    <div class="service-image">
-                        <img src="<?php
-                        echo get_template_directory_uri();
-                        ?>/images/demo/icon2.png" alt="EASY CUSTOMIZABLE">
-                    </div>
-                    <div class="service-detail">
-                        <h3>EASY CUSTOMIZABLE</h3>
-                        <div class="service-content"><p><?php _e( 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec iaculis metus vitae ligula elementum ut luctus lorem facilisis.', 'accesspress-parallax' ); ?></p>
-                        </div>
-                    </div>
-                </div>
-                <div class="clearfix service-list odd wow fadeInLeft" data-wow-delay="0.75s">
-                    <div class="service-image">
-                        <img src="<?php
-                        echo get_template_directory_uri();
-                        ?>/images/demo/icon3.png" alt="CLEAN CODING">
-                    </div>
-                    <div class="service-detail">
-                        <h3>CLEAN CODING</h3>
-                        <div class="service-content"><p><?php _e( 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec iaculis metus vitae ligula elementum ut luctus lorem facilisis.', 'accesspress-parallax' ); ?></p>
-                        </div>
-                    </div>
-                </div>
-                <div class="clearfix service-list even wow fadeInRight" data-wow-delay="1s">
-                    <div class="service-image">
-                        <img src="<?php
-                        echo get_template_directory_uri();
-                        ?>/images/demo/icon4.png" alt="HTML5 &#038; CSS3">
-                    </div>
-                    <div class="service-detail">
-                        <h3>HTML5 &#038; CSS3</h3>
-                        <div class="service-content"><p><?php _e( 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec iaculis metus vitae ligula elementum ut luctus lorem facilisis.', 'accesspress-parallax' ); ?></p>
-                        </div>
-                    </div>
-                </div>
-                <div class="clearfix service-list odd wow fadeInLeft" data-wow-delay="1.25s">
-                    <div class="service-image">
-                        <img src="<?php
-                        echo get_template_directory_uri();
-                        ?>/images/demo/icon5.png" alt="7X24 SUPPORT">
-                    </div>
-                    <div class="service-detail">
-                        <h3>7X24 SUPPORT</h3>
-                        <div class="service-content"><p><?php _e( 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec iaculis metus vitae ligula elementum ut luctus lorem facilisis.', 'accesspress-parallax' ); ?></p>
-                        </div>
-                    </div>
-                </div>
-                <div class="clearfix service-list even wow fadeInRight" data-wow-delay="1.5s">
-                    <div class="service-image">
-                        <img src="<?php
-                        echo get_template_directory_uri();
-                        ?>/images/demo/icon6.png" alt="MULTIPURPOSE">
-                    </div>
-                    <div class="service-detail">
-                        <h3>MULTIPURPOSE</h3>
-                        <div class="service-content"><p><?php _e( 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec iaculis metus vitae ligula elementum ut luctus lorem facilisis.', 'accesspress-parallax' ); ?></p>
-                        </div>
-                    </div>
-                </div>
-            </div><!-- #primary -->
-        </div>
-    </section>
-    <section class="parallax-section clearfix portfolio_template" id="portfolio">
-        <div class="overlay"></div>
-        <div class="mid-content">
-            <h2><span>Portfolio</span></h2>
-            <div class="parallax-content">
-                <div class="page-content">
-                    <p style="text-align: center;"><?php _e( 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec iaculis metus vitae ligula elementum ut luctus lorem facilisis.', 'accesspress-parallax' ); ?></p>
-                </div>
-            </div> 
-            <div class="portfolio-listing clearfix">
-                <a href="#" class="portfolio-list wow fadeInUp" data-wow-delay="0.25s">
-                    <div class="portfolio-wrap">
-                        <div class="portfolio-overlay"><span>+</span></div>
-                        <div class="portfolio-image">
-                            <img src="<?php echo get_template_directory_uri(); ?>/images/demo/portfolio1.jpg">
-                        </div>
-                        <h3><?php _e( 'Product 11', 'accesspress-parallax' ); ?></h3>
-                    </div>
-                </a>
-                <a href="#" class="portfolio-list wow fadeInUp" data-wow-delay="0.5s">
-                    <div class="portfolio-wrap">
-                        <div class="portfolio-overlay"><span>+</span></div>
-                        <div class="portfolio-image">
-                            <img src="<?php echo get_template_directory_uri(); ?>/images/demo/portfolio2.jpg">
-                        </div>
-                        <h3><?php _e( 'Product 10', 'accesspress-parallax' ); ?></h3>
-                    </div>
-                </a>
-                <a href="#" class="portfolio-list wow fadeInUp" data-wow-delay="0.75s">
-                    <div class="portfolio-wrap">
-                        <div class="portfolio-overlay"><span>+</span></div>
-                        <div class="portfolio-image">
-                            <img src="<?php  echo get_template_directory_uri(); ?>/images/demo/portfolio3.jpg">
-                        </div>
-                        <h3><?php _e( 'Product 9', 'accesspress-parallax' ); ?></h3>
-                    </div>
-                </a>
-                <a href="#" class="portfolio-list wow fadeInUp" data-wow-delay="1s">
-                    <div class="portfolio-wrap">
-                        <div class="portfolio-overlay"><span>+</span></div>
-                        <div class="portfolio-image">
-                            <img src="<?php echo get_template_directory_uri(); ?>/images/demo/portfolio4.jpg">
-                        </div>
-                        <h3><?php _e( 'Product 8', 'accesspress-parallax' ); ?></h3>
-                    </div>
-                </a>
-                <a href="#" class="portfolio-list wow fadeInUp" data-wow-delay="1.25s">
-                    <div class="portfolio-wrap">
-                        <div class="portfolio-overlay"><span>+</span></div>
-                        <div class="portfolio-image">
-                            <img src="<?php echo get_template_directory_uri(); ?>/images/demo/portfolio5.jpg">
-                        </div>
-                        <h3><?php _e( 'Product 7', 'accesspress-parallax' ); ?></h3>
-                    </div>
-                </a>
-                <a href="#" class="portfolio-list wow fadeInUp" data-wow-delay="1.5s">
-                    <div class="portfolio-wrap">
-                        <div class="portfolio-overlay"><span>+</span></div>
-                        <div class="portfolio-image">
-                            <img src="<?php echo get_template_directory_uri(); ?>/images/demo/portfolio6.jpg">
-                        </div>
-                        <h3><?php _e( 'Product 6', 'accesspress-parallax' ); ?></h3>
-                    </div>
-                </a>
-                <a href="#" class="portfolio-list wow fadeInUp" data-wow-delay="1.75s">
-                    <div class="portfolio-wrap">
-                        <div class="portfolio-overlay"><span>+</span></div>
-                        <div class="portfolio-image">
-                            <img src="<?php echo get_template_directory_uri(); ?>/images/demo/portfolio7.jpg">
-                        </div>
-                        <h3><?php _e( 'Product 5', 'accesspress-parallax' ); ?></h3>
-                    </div>
-                </a>
-                <a href="#" class="portfolio-list wow fadeInUp" data-wow-delay="2s">
-                    <div class="portfolio-wrap">
-                        <div class="portfolio-overlay"><span>+</span></div>
-                        <div class="portfolio-image">
-                            <img src="<?php echo get_template_directory_uri(); ?>/images/demo/portfolio8.jpg">
-                        </div>
-                        <h3><?php _e( 'Product 4', 'accesspress-parallax' ); ?></h3>
-                    </div>
-                </a>
-            </div><!-- #primary -->
-        </div>
-    </section>
-    <section class="parallax-section clearfix team_template" id="team">
-        <div class="mid-content">
-            <h2><span>Team</span></h2>
-            <div class="parallax-content">
-            </div> 
-            <div class="team-listing clearfix">
-                <div class="team-tab">
-                    <div class="team-slider">
-                        <div class="team-image wow fadeInLeft" data-wow-delay="0.25s">
-                            <img src="<?php echo get_template_directory_uri(); ?>/images/demo/team1.jpg" alt="Russel Clinton">
-                        </div>
-                        <div class="team-image wow fadeInLeft" data-wow-delay="0.5s">
-                            <img src="<?php echo get_template_directory_uri(); ?>/images/demo/team2.jpg" alt="Bibo Aurther">
-                        </div>
-                        <div class="team-image wow fadeInLeft" data-wow-delay="0.75s">
-                            <img src="<?php echo get_template_directory_uri(); ?>/images/demo/team3.jpg" alt="Rusel Misil">
-                        </div>
-                        <div class="team-image wow fadeInLeft" data-wow-delay="1s">
-                            <img src="<?php echo get_template_directory_uri(); ?>/images/demo/team4.jpg" alt="Linda Harley">
-                        </div>
-                        <div class="team-image wow fadeInLeft" data-wow-delay="1.25s">
-                            <img src="<?php echo get_template_directory_uri();?>/images/demo/team5.jpg" alt="John Doe">
-                        </div>
-                        <div class="team-image wow fadeInLeft" data-wow-delay="1.5s">
-                            <img src="<?php echo get_template_directory_uri();?>/images/demo/team6.jpg" alt="Jakson Biber">
-                        </div>
-                        <div class="team-image wow fadeInLeft" data-wow-delay="1.75s">
-                            <img src="<?php echo get_template_directory_uri(); ?>/images/demo/team7.jpg" alt="Jack Peterson">
-                        </div>
-                    </div>
-                </div>
-                <div class="team-content wow fadeIn" data-wow-delay="1.5s">
-                    <div class="clearfix team-list team-277">
-                        <div class="team-big-image">
-                            <img src="<?php
-                            echo get_template_directory_uri();
-                            ?>/images/demo/team1.jpg" alt="Russel Clinton">
-                        </div>
-                        <div class="team-detail">
-                            <h3><?php _e( 'Russel Clinton', 'accesspress-parallax' ); ?></h3>
-                            <h4><?php _e( 'Interior Head', 'accesspress-parallax' ); ?></h4>
-                            <p><?php _e( 'Duis luctus nisl vel rhoncus rhoncus. Nam vehicula maximus sagittis. Proin quis lobortis nisi. Etiam luctus auctor urna, a luctus metus blandit in. Nam quis facilisis nunc, nec scelerisque ligula. Aenean quis lacus bibendum, lobortis dolor sed, facilisis ipsum. Nunc feugiat augue ac ligula blandit, id maximus purus molestie.<br /><br />
-                                Duis luctus nisl vel rhoncus rhoncus. Nam vehicula maximus sagittis. Proin quis lobortis nisi. Etiam luctus auctor urna, a luctus metus blandit in. Nam quis facilisis nunc, nec scelerisque ligula. Aenean quis lacus bibendum, lobortis dolor sed, facilisis ipsum. Nunc feugiat augue ac ligula blandit, id maximus purus molestie.', 'accesspress-parallax' ); ?></p>
-                        </div>
-                    </div>
-                    <div class="clearfix team-list team-236">
-                        <div class="team-big-image">
-                            <img src="<?php echo get_template_directory_uri(); ?>/images/demo/team2.jpg" alt="Bibo Aurther">
-                        </div>
-                        <div class="team-detail">
-                            <h3><?php _e( 'Bibo Aurther', 'accesspress-parallax' ); ?></h3>
-                            <h4><?php _e( 'CEO', 'accesspress-parallax' ); ?></h4>
-                            <p><?php _e( 'Proin libero odio, ultrices et tincidunt vitae, consequat et sapien. Duis luctus nisl vel rhoncus rhoncus. Nam vehicula maximus sagittis. Proin quis lobortis nisi. Etiam luctus auctor urna, a luctus metus blandit in. Nam quis facilisis nunc, nec scelerisque ligula. Aenean quis lacus bibendum, lobortis dolor sed, facilisis ipsum. Nunc feugiat augue ac ligula blandit, id maximus purus molestie.<br /><br />
-                                Proin libero odio, ultrices et tincidunt vitae, consequat et sapien. Duis luctus nisl vel rhoncus rhoncus. Nam vehicula maximus sagittis. Proin quis lobortis nisi. Etiam luctus auctor urna, a luctus metus blandit in. Nam quis facilisis nunc, nec scelerisque ligula. Aenean quis lacus bibendum, lobortis dolor sed, facilisis ipsum. Nunc feugiat augue ac ligula blandit, id maximus purus molestie.', 'accesspress-parallax' ); ?></p>
-                        </div>
-                    </div>
-                    <div class="clearfix team-list team-233">
-                        <div class="team-big-image">
-                            <img src="<?php echo get_template_directory_uri(); ?>/images/demo/team3.jpg" alt="Rusel Misil">
-                        </div>
-                        <div class="team-detail">
-                            <h3><?php _e( 'Rusel Misil', 'accesspress-parallax' ); ?></h3>
-                            <h4><?php _e( 'Technician', 'accesspress-parallax' ); ?></h4>
-                            <p><?php _e( 'Etiam vestibulum pellentesque nisi, ac scelerisque metus aliquam non. Proin tincidunt tortor auctor, accumsan arcu id, congue felis. Curabitur vitae lorem at purus imperdiet commodo quis non sem. Donec magna odio, commodo eget rhoncus quis, facilisis et dolor.<br /><br />
-                                Proin libero odio, ultrices et tincidunt vitae, consequat et sapien. Duis luctus nisl vel rhoncus rhoncus. Nam vehicula maximus sagittis. Proin quis lobortis nisi. Etiam luctus auctor urna, a luctus metus blandit in. Nam quis facilisis nunc, nec scelerisque ligula. Aenean quis lacus bibendum, lobortis dolor sed, facilisis ipsum. Nunc feugiat augue ac ligula blandit, id maximus purus molestie.', 'accesspress-parallax' ); ?></p>
-                        </div>
-                    </div>
-                    <div class="clearfix team-list team-118">
-                        <div class="team-big-image">
-                            <img src="<?php echo get_template_directory_uri();?>/images/demo/team4.jpg" alt="Linda Harley">
-                        </div>
-                        <div class="team-detail">
-                            <h3><?php _e( 'Linda Harley', 'accesspress-parallax' ); ?></h3>
-                            <h4><?php _e( 'Staff', 'accesspress-parallax' ); ?></h4>
-                            <p><?php _e( 'Nulla facilisis sapien dui, vel faucibus risus consequat sit amet. Phasellus vestibulum vestibulum mi quis posuere. Aenean pretium purus ut purus vehicula dictum. Morbi elementum dignissim aliquet. Nullam et purus et mi finibus laoreet. Aliquam posuere erat eu lobortis vulputate. Phasellus pulvinar fringilla turpis in congue. Integer et felis fringilla, elementum lacus eu, tincidunt purus.<br/><br />
-                            Nulla facilisis sapien dui, vel faucibus risus consequat sit amet. Phasellus vestibulum vestibulum mi quis posuere. Aenean pretium purus ut purus vehicula dictum. Morbi elementum dignissim aliquet. Nullam et purus et mi finibus laoreet. Aliquam posuere erat eu lobortis vulputate. Phasellus pulvinar fringilla turpis in congue. Integer et felis fringilla, elementum lacus eu, tincidunt purus.', 'accesspress-parallax' ); ?></p>
-                        </div>
-                    </div>
-                    <div class="clearfix team-list team-116">
-                        <div class="team-big-image">
-                            <img src="<?php echo get_template_directory_uri();?>/images/demo/team5.jpg" alt="John Doe">
-                        </div>
-                        <div class="team-detail">
-                            <h3><?php _e( 'John Doe', 'accesspress-parallax' ); ?></h3>
-                            <h4><?php _e( 'Staff', 'accesspress-parallax' ); ?></h4>
-                            <p><?php _e( 'Donec ut neque placerat, euismod enim et, sodales magna. Sed sit amet nunc ullamcorper, semper nunc mattis, scelerisque urna. Donec dictum mattis malesuada. Suspendisse vestibulum enim eu nisi auctor, a mollis odio posuere. Ut scelerisque luctus arcu id tempus.<br/><br />
-                            Nulla facilisis sapien dui, vel faucibus risus consequat sit amet. Phasellus vestibulum vestibulum mi quis posuere. Aenean pretium purus ut purus vehicula dictum. Morbi elementum dignissim aliquet. Nullam et purus et mi finibus laoreet. Aliquam posuere erat eu lobortis vulputate. Phasellus pulvinar fringilla turpis in congue. Integer et felis fringilla, elementum lacus eu, tincidunt purus.', 'accesspress-parallax' ); ?></p>
-                        </div>
-                    </div>
-                    <div class="clearfix team-list team-114">
-                        <div class="team-big-image">
-                            <img src="<?php echo get_template_directory_uri();?>/images/demo/team6.jpg" alt="Jakson Biber">
-                        </div>
-                        <div class="team-detail">
-                            <h3><?php _e( 'Jakson Biber', 'accesspress-parallax' ); ?></h3>
-                            <h4><?php _e( 'Marketing Executive', 'accesspress-parallax' ); ?></h4>
-                            <p><?php _e( 'Fusce imperdiet enim eget neque auctor, venenatis feugiat neque dapibus. Nulla consequat, nunc sed vestibulum semper, nibh velit pellentesque lectus, ac lobortis elit massa hendrerit lacus. Nulla facilisis sapien dui, vel faucibus risus consequat sit amet. Phasellus vestibulum vestibulum mi quis posuere.<br/><br />
-                            Fusce imperdiet enim eget neque auctor, venenatis feugiat neque dapibus. Nulla consequat, nunc sed vestibulum semper, nibh velit pellentesque lectus, ac lobortis elit massa hendrerit lacus. Nulla facilisis sapien dui, vel faucibus risus consequat sit amet. Phasellus vestibulum vestibulum mi quis posuere.', 'accesspress-parallax' ); ?></p>
-                        </div>
-                    </div>
-                    <div class="clearfix team-list team-111">
-                        <div class="team-big-image">
-                            <img src="<?php echo get_template_directory_uri();?>/images/demo/team7.jpg" alt="Jack Peterson">
-                        </div>
-                        <div class="team-detail">
-                            <h3><?php _e( 'Jack Peterson', 'accesspress-parallax' ); ?></h3>
-                            <h4><?php _e( 'Sales Executive', 'accesspress-parallax' ); ?></h4>
-                            <p><?php _e( 'Donec ut neque placerat, euismod enim et, sodales magna. Sed sit amet nunc ullamcorper, semper nunc mattis, scelerisque urna. Donec dictum mattis malesuada. Suspendisse vestibulum enim eu nisi auctor, a mollis odio posuere. Ut scelerisque luctus arcu id tempus.<br/><br />
-                            Donec ut neque placerat, euismod enim et, sodales magna. Sed sit amet nunc ullamcorper, semper nunc mattis, scelerisque urna. Donec dictum mattis malesuada. Suspendisse vestibulum enim eu nisi auctor, a mollis odio posuere. Ut scelerisque luctus arcu id tempus.', 'accesspress-parallax' ); ?></p>
-                        </div>
-                    </div>
-                </div>
-            </div><!-- #primary -->
-        </div>
-    </section>
-    <section class="parallax-section clearfix blank_template" id="page-1">
-        <div class="mid-content">
-            <div class="content-area blank-section">
-            </div><!-- #primary -->
-        </div>
-    </section>
-    <section class="parallax-section clearfix testimonial_template" id="testimonials">
-        <div class="mid-content">
-            <h2><span><?php _e( 'Testimonials', 'accesspress-parallax' ); ?></span></h2>
-            <div class="parallax-content">
-            </div> 
-            <div class="testimonial-listing clearfix wow fadeInUp">
-                <div class="testimonial-slider">
-                    <div class="testimonial-list">
-                        <div class="testimonial-content"><p><?php _e( 'Thanks for delivering top quality services to your clients. It just takes a minute to get an answer from you when in difficulties. I use the chat service and I can say that the AccessPress Themes staff knows how to shorten the physical distance to its clients.<br />Thanks again for making our experience with AccessPress Themes the best one online!', 'accesspress-parallax' ); ?></p>
-                        </div>
-                        <h3><?php _e( 'Yanetxys Torreblanca', 'accesspress-parallax' ); ?></h3>
-                        <div class="testimonial-image">
-                            <img src="<?php echo get_template_directory_uri();?>/images/demo/testimonial1.jpg" alt="Yanetxys Torreblanca">
-                        </div>
-                    </div>
-                    <div class="testimonial-list">
-                        <div class="testimonial-content"><p><?php _e( 'Thank you very much the support team accesspress lite for service, are really wonderful in their care and in the resolution of the problem. Congratulations to facebook chat and Junu team.', 'accesspress-parallax' ); ?></p>
-                        </div>
-                        <h3><?php _e( 'David Soriano', 'accesspress-parallax' ); ?></h3>
-                        <div class="testimonial-image">
-                            <img src="<?php echo get_template_directory_uri(); ?>/images/demo/testimonial2.jpg" alt="David Soriano">
-                        </div>
-                    </div>
-                    <div class="testimonial-list">
-                        <div class="testimonial-content"><p><?php _e( 'Great Customer service and technical assistance!!!<br />
-                                The template is really good and nice, definitely worth going PRO', 'accesspress-parallax' ); ?></p>
-                        </div>
-                        <h3><?php _e( 'Stefano Roganti', 'accesspress-parallax' ); ?></h3>
-                        <div class="testimonial-image">
-                            <img src="<?php echo get_template_directory_uri();?>/images/demo/testimonial3.jpg" alt="Stefano Roganti">
-                        </div>
-                    </div>
-                </div>
-            </div><!-- #primary -->
-        </div>
-    </section>
-    <section class="parallax-section clearfix blog_template" id="blog">
-        <div class="overlay"></div>
-        <div class="mid-content">
-            <h2><span>Blog</span></h2>
-            <div class="parallax-content">
-                <div class="page-content">
-                    <p style="text-align: center;"><?php _e( 'Read our latest blog', 'accesspress-parallax' ); ?></p>
-                </div>
-            </div> 
-            <div class="blog-listing clearfix">
-                <a href="#" class="blog-list wow fadeInDown" data-wow-delay="0.25s">
-                    <div class="blog-image">
-                        <img src="<?php echo get_template_directory_uri()?>/images/demo/portfolio1.jpg" alt="Nulla pretium leo ac congue">
-                    </div>
-                    <div class="blog-excerpt">
-                        <h3><?php _e( 'Nulla pretium leo ac congue', 'accesspress-parallax' ); ?></h3>
-                        <h4 class="posted-date"><i class="fa fa-calendar"></i><?php _e( 'December 26, 2014', 'accesspress-parallax' ); ?></h4>
-                        <?php _e( 'Nulla pretium leo ac congue molestie. Aliquam ac velit laoreet, consectetur elit pulvinar, elementum lorem. Duis sed venenatis eros. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices po... ', 'accesspress-parallax' ); ?><br />
-                        <span><?php _e( 'Read More', 'accesspress-parallax' ); ?>&nbsp;&nbsp;<i class="fa fa-angle-right"></i></span>
-                    </div>
-                </a>
-                <a href="#" class="blog-list wow fadeInDown" data-wow-delay="0.5s">
-                    <div class="blog-image">
-                        <img src="<?php echo get_template_directory_uri();?>/images/demo/portfolio5.jpg" alt="Pellentesque cursus dolor quis">
-                    </div>
-                    <div class="blog-excerpt">
-                        <h3><?php _e( 'Pellentesque cursus dolor quis', 'accesspress-parallax' ); ?></h3>
-                        <h4 class="posted-date"><i class="fa fa-calendar"></i><?php _e( 'September 9, 2014', 'accesspress-parallax' ); ?></h4>
-                        <?php _e( 'Nullam faucibus mi at quam mattis egestas. Ut dapibus lectus at risus rhoncus finibus. Pellentesque sem risus, suscipit iaculis ex in, rutrum sodales enim. Vivamus non mauris tortor. Maecenas tellus n... ', 'accesspress-parallax' ); ?><br />
-                        <span><?php _e( 'Read More', 'accesspress-parallax' ); ?>&nbsp;&nbsp;<i class="fa fa-angle-right"></i></span>
-                    </div>
-                </a>
-                <a href="#/" class="blog-list wow fadeInDown" data-wow-delay="0.75s">
-                    <div class="blog-image">
-                        <img src="<?php echo get_template_directory_uri();?>/images/demo/portfolio7.jpg" alt="Lorem ipsum dolor">
-                    </div>
-                    <div class="blog-excerpt">
-                        <h3><?php _e( 'Lorem ipsum dolor', 'accesspress-parallax' ); ?></h3>
-                        <h4 class="posted-date"><i class="fa fa-calendar"></i><?php _e( 'September 9, 2014', 'accesspress-parallax' ); ?></h4>
-                        <?php _e( 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut ... ', 'accesspress-parallax' ); ?><br />
-                        <span><?php _e( 'Read More', 'accesspress-parallax' ); ?>&nbsp;&nbsp;<i class="fa fa-angle-right"></i></span>
-                    </div>
-                </a>
-            </div>
-            <div class="clearfix btn-wrap">
-                <a class="btn" href="#"><?php _e( 'Read All', 'accesspress-parallax' ); ?></a>
-            </div>
-        </div>
-    </section>
-    <section class="parallax-section clearfix action_template" id="for-news-and-updates-subscribe-us">
-        <div class="overlay"></div>
-        <div class="mid-content">
-            <div class="call-to-action">
-                <h2><?php _e( 'For News and Updates Subscribe us', 'accesspress-parallax' ); ?></h2>
-                <div class="parallax-content">
-                    <div class="page-content">
-                        <p><?php _e( 'Here can be some text as well', 'accesspress-parallax' ); ?></p>
-                        <p><a class="btn" href="#"><?php _e( 'Subscribe Us', 'accesspress-parallax' ); ?></a></p>
-                    </div>
-                </div>
-            </div><!-- #primary -->
-        </div>
-    </section>
-    <section class="parallax-section clearfix default_template" id="contact">
-    <div class="overlay"></div>
-        <div class="mid-content">
-            <h2><span>Contact</span></h2>
-            <div class="parallax-content">
-                <div class="page-content">
-                    <div class="row">
-                        <div class="span4 col">
-                            <div class="wpcf7" id="wpcf7-f131-o1" lang="en-US" dir="ltr">
-                                <div class="screen-reader-response"></div>
-                                <form name="" action="" method="post" class="wpcf7-form" novalidate="novalidate">
-                                    <div style="display: none;">
-                                        <input type="hidden" name="_wpcf7" value="131" /><br />
-                                        <input type="hidden" name="_wpcf7_version" value="4.0.3" /><br />
-                                        <input type="hidden" name="_wpcf7_locale" value="en_US" /><br />
-                                        <input type="hidden" name="_wpcf7_unit_tag" value="wpcf7-f131-o1" /><br />
-                                        <input type="hidden" name="_wpnonce" value="a9e31e0b59" />
-                                    </div>
-                                    <p><span class="wpcf7-form-control-wrap your-name"><input type="text" name="your-name" value="" size="40" class="wpcf7-form-control wpcf7-text wpcf7-validates-as-required" aria-required="true" aria-invalid="false" placeholder="Your Name *" /></span> </p>
-                                    <p><span class="wpcf7-form-control-wrap your-email"><input type="email" name="your-email" value="" size="40" class="wpcf7-form-control wpcf7-text wpcf7-email wpcf7-validates-as-required wpcf7-validates-as-email" aria-required="true" aria-invalid="false" placeholder="Your Email *" /></span> </p>
-                                    <p><span class="wpcf7-form-control-wrap your-subject"><input type="text" name="your-subject" value="" size="40" class="wpcf7-form-control wpcf7-text" aria-invalid="false" placeholder="Subject" /></span> </p>
-                                    <p><span class="wpcf7-form-control-wrap your-message"><textarea name="your-message" cols="40" rows="10" class="wpcf7-form-control wpcf7-textarea" aria-invalid="false" placeholder="Your Message"></textarea></span> </p>
-                                    <p><input type="submit" value="Send" class="wpcf7-form-control wpcf7-submit" /></p>
-                                    <div class="wpcf7-response-output wpcf7-display-none"></div>
-                                </form>
-                            </div>
-                        </div>
-                        <div class="span2 col">
-                            <?php _e( 'AccessPress Themes', 'accesspress-parallax' ); ?><br />
-                            <?php _e( '5th Floor, Mathuri Sadan', 'accesspress-parallax' ); ?><br />
-                            <?php _e( 'Rabi Bhawan, Kathmandu - Nepal', 'accesspress-parallax' ); ?><br />
-                            ---------------------------------------<br />
-                            <strong><?php _e( 'General enquiries:', 'accesspress-parallax' ); ?></strong> info@accesspressthemes.com<br />
-                            <strong><?php _e( 'Support:', 'accesspress-parallax' ); ?></strong> support@accesspressthemes.com<br />
-                            ---------------------------------------<br />
-                            <?php _e( 'Skype: access-keys', 'accesspress-parallax' ); ?>
-                        </div>
-                    </div>
-                </div>
-            </div> 
-            <div class="content-area">
-            </div><!-- #primary -->
-        </div>
-    </section>
-    <section class="parallax-section clearfix google-map googlemap_template" id="google-map">
-        <div class="content-area googlemap-section">
-            <div class="googlemap-toggle">Map</div>
-            <div class="googlemap-content">
-                <iframe src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d56516.31397712412!2d85.3261328!3d27.708960349999998!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x39eb198a307baabf%3A0xb5137c1bf18db1ea!2sKathmandu+44600%2C+Nepal!5e0!3m2!1sen!2s!4v1431407463100" width="600" height="450" frameborder="0" style="border:0"></iframe>
-            </div>
-    </section>
-</div>
-
-<style type='text/css' media='all'>#features{ background:url() no-repeat scroll top left #f6f6f6; background-size:cover; color:#333333}
-#features .overlay { background:url(<?php echo get_template_directory_uri(); ?>/images/overlay0.png);}
-#portfolio{ background:url(<?php echo get_template_directory_uri(); ?>/images/demo/bg1.jpg) no-repeat fixed bottom center #e3633b; background-size:auto; color:#ffffff}
-#portfolio .overlay { background:url(<?php echo get_template_directory_uri(); ?>/images/overlay3.png);}
-#team{ background:url() no-repeat scroll top left #f6f6f6; background-size:cover; color:#333333}
-#team .overlay { background:url(<?php echo get_template_directory_uri(); ?>/images/overlay0.png);}
-#page-1{ background:url(<?php echo get_template_directory_uri(); ?>/images/demo/bg2.jpg) no-repeat fixed top center #1e73be; background-size:auto; color:}
-#page-1 .overlay { background:url(<?php echo get_template_directory_uri(); ?>/images/overlay0.png);}
-#testimonials{ background:url() no-repeat fixed top left #f6f6f6; background-size:cover; color:#333333}
-#testimonials .overlay { background:url(<?php echo get_template_directory_uri(); ?>/images/overlay0.png);}
-#blog{ background:url(<?php echo get_template_directory_uri(); ?>/images/demo/bg3.jpg) no-repeat fixed center center ; background-size:cover; color:#ffffff}
-#blog .overlay { background:url(<?php echo get_template_directory_uri(); ?>/images/overlay3.png);}
-#for-news-and-updates-subscribe-us{ background:url() no-repeat fixed top left #F6F6F6; background-size:cover; color:#333}
-#contact{ background:url(<?php echo get_template_directory_uri(); ?>/images/demo/bg4.jpg) no-repeat scroll top left ; background-size:cover; color:#FFF}
-#contact .overlay { background:url(<?php echo get_template_directory_uri(); ?>/images/overlay3.png);}
-#google-map{ background:url() no-repeat scroll top left ; background-size:auto; color:}
-#google-map .overlay { background:url(<?php echo get_template_directory_uri(); ?>/images/overlay0.png);}
-#content{margin:0 !important}
-.portfolio-list img{width: 100%;}
-</style>
\ No newline at end of file
diff --git a/fancybox/README.md b/fancybox/README.md
new file mode 100644 (file)
index 0000000..983a304
--- /dev/null
@@ -0,0 +1,62 @@
+# fancyBox
+
+jQuery lightbox script for displaying images, videos and more.
+Touch enabled, responsive and fully customizable.
+
+See the [project page](http://fancyapps.com/fancybox/3/) for documentation and a demonstration.
+
+Follow [@thefancyapps](//twitter.com/thefancyapps) for updates.
+
+
+## Quick start
+
+1\.  Add latest jQuery and fancyBox files
+
+```html
+<script src="//code.jquery.com/jquery-3.2.1.min.js"></script>
+
+<link  href="/path/to/jquery.fancybox.min.css" rel="stylesheet">
+<script src="/path/to/jquery.fancybox.min.js"></script>
+```
+
+
+2\.  Create links
+
+```html
+<a data-fancybox="gallery" href="big_1.jpg">
+    <img src="small_1.jpg">
+</a>
+
+<a data-fancybox="gallery" href="big_2.jpg">
+    <img src="small_2.jpg">
+</a>
+```
+
+
+3\. Enjoy!
+
+
+## License
+
+fancyBox is licensed under the [GPLv3](http://choosealicense.com/licenses/gpl-3.0) license for all open source applications.
+A commercial license is required for all commercial applications (including sites, themes and apps you plan to sell).
+
+[Read more about fancyBox license](http://fancyapps.com/fancybox/#license).
+
+## Bugs and feature requests
+
+If you find a bug, please report it [here on Github](https://github.com/fancyapps/fancybox/issues).
+
+Guidelines for bug reports:
+
+1. Use the GitHub issue search — check if the issue has already been reported.
+2. Check if the issue has been fixed — try to reproduce it using the latest master or development branch in the repository.
+3. Isolate the problem — create a reduced test case and a live example. You can use CodePen to fork any demo found on documentation to use it as a template.
+
+A good bug report shouldn't leave others needing to chase you up for more information.
+Please try to be as detailed as possible in your report.
+
+
+Feature requests are welcome. Please look for existing ones and use GitHub's "reactions" feature to vote.
+
+Please do not use the issue tracker for personal support requests - use Stack Overflow ([fancybox-3](http://stackoverflow.com/questions/tagged/fancybox-3) tag) instead.
diff --git a/fancybox/bower.json b/fancybox/bower.json
new file mode 100644 (file)
index 0000000..dc50191
--- /dev/null
@@ -0,0 +1,23 @@
+{
+  "name": "fancybox",
+  "description": "Touch enabled, responsive and fully customizable jQuery lightbox script",
+  "keywords": [
+    "touch",
+    "responsive",
+    "lightbox",
+    "fancybox",
+    "gallery",
+    "jQuery",
+    "plugin"
+  ],
+  "homepage": "http://fancyapps.com/fancybox/",
+  "license": "GPL-3.0",
+  "moduleType": "globals",
+  "main": [
+    "dist/jquery.fancybox.min.css",
+    "dist/jquery.fancybox.min.js"
+  ],
+  "dependencies": {
+    "jquery": ">=1.9.0"
+  }
+}
diff --git a/fancybox/dist/jquery.fancybox.css b/fancybox/dist/jquery.fancybox.css
new file mode 100644 (file)
index 0000000..0ed0785
--- /dev/null
@@ -0,0 +1,740 @@
+@charset "UTF-8";
+.fancybox-enabled {
+  overflow: hidden; }
+
+.fancybox-enabled body {
+  overflow: visible;
+  height: 100%; }
+
+.fancybox-is-hidden {
+  position: absolute;
+  top: -9999px;
+  left: -9999px;
+  visibility: hidden; }
+
+.fancybox-container {
+  position: fixed;
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100%;
+  z-index: 99993;
+  -webkit-tap-highlight-color: transparent;
+  -webkit-backface-visibility: hidden;
+  backface-visibility: hidden;
+  -webkit-transform: translateZ(0);
+  transform: translateZ(0); }
+
+/* Make sure that the first one is on the top */
+.fancybox-container ~ .fancybox-container {
+  z-index: 99992; }
+
+.fancybox-outer,
+.fancybox-inner,
+.fancybox-bg,
+.fancybox-stage {
+  position: absolute;
+  top: 0;
+  right: 0;
+  bottom: 0;
+  left: 0; }
+
+.fancybox-outer {
+  overflow-y: auto;
+  -webkit-overflow-scrolling: touch; }
+
+.fancybox-bg {
+  background: #1e1e1e;
+  opacity: 0;
+  transition-duration: inherit;
+  transition-property: opacity;
+  transition-timing-function: cubic-bezier(0.47, 0, 0.74, 0.71); }
+
+.fancybox-is-open .fancybox-bg {
+  opacity: 0.87;
+  transition-timing-function: cubic-bezier(0.22, 0.61, 0.36, 1); }
+
+.fancybox-infobar,
+.fancybox-toolbar,
+.fancybox-caption-wrap {
+  position: absolute;
+  direction: ltr;
+  z-index: 99997;
+  opacity: 0;
+  visibility: hidden;
+  transition: opacity .25s, visibility 0s linear .25s;
+  box-sizing: border-box; }
+
+.fancybox-show-infobar .fancybox-infobar,
+.fancybox-show-toolbar .fancybox-toolbar,
+.fancybox-show-caption .fancybox-caption-wrap {
+  opacity: 1;
+  visibility: visible;
+  transition: opacity .25s, visibility 0s; }
+
+.fancybox-infobar {
+  top: 0;
+  left: 50%;
+  margin-left: -79px; }
+
+.fancybox-infobar__body {
+  display: inline-block;
+  width: 70px;
+  line-height: 44px;
+  font-size: 13px;
+  font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
+  text-align: center;
+  color: #ddd;
+  background-color: rgba(30, 30, 30, 0.7);
+  pointer-events: none;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+  -webkit-touch-callout: none;
+  -webkit-tap-highlight-color: transparent;
+  -webkit-font-smoothing: subpixel-antialiased; }
+
+.fancybox-toolbar {
+  top: 0;
+  right: 0; }
+
+.fancybox-stage {
+  overflow: hidden;
+  direction: ltr;
+  z-index: 99994;
+  -webkit-transform: translate3d(0, 0, 0); }
+
+.fancybox-slide {
+  position: absolute;
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100%;
+  margin: 0;
+  padding: 0;
+  overflow: auto;
+  outline: none;
+  white-space: normal;
+  box-sizing: border-box;
+  text-align: center;
+  z-index: 99994;
+  -webkit-overflow-scrolling: touch;
+  display: none;
+  -webkit-backface-visibility: hidden;
+  backface-visibility: hidden;
+  transition-property: opacity, -webkit-transform;
+  transition-property: transform, opacity;
+  transition-property: transform, opacity, -webkit-transform;
+  -webkit-transform-style: preserve-3d;
+  transform-style: preserve-3d; }
+
+.fancybox-slide::before {
+  content: '';
+  display: inline-block;
+  vertical-align: middle;
+  height: 100%;
+  width: 0; }
+
+.fancybox-is-sliding .fancybox-slide,
+.fancybox-slide--previous,
+.fancybox-slide--current,
+.fancybox-slide--next {
+  display: block; }
+
+.fancybox-slide--image {
+  overflow: visible; }
+
+.fancybox-slide--image::before {
+  display: none; }
+
+.fancybox-slide--video .fancybox-content,
+.fancybox-slide--video iframe {
+  background: #000; }
+
+.fancybox-slide--map .fancybox-content,
+.fancybox-slide--map iframe {
+  background: #E5E3DF; }
+
+.fancybox-slide--next {
+  z-index: 99995; }
+
+.fancybox-slide > * {
+  display: inline-block;
+  position: relative;
+  padding: 24px;
+  margin: 44px 0 44px;
+  border-width: 0;
+  vertical-align: middle;
+  text-align: left;
+  background-color: #fff;
+  overflow: auto;
+  box-sizing: border-box; }
+
+.fancybox-slide .fancybox-image-wrap {
+  position: absolute;
+  top: 0;
+  left: 0;
+  margin: 0;
+  padding: 0;
+  border: 0;
+  z-index: 99995;
+  background: transparent;
+  cursor: default;
+  overflow: visible;
+  -webkit-transform-origin: top left;
+  -ms-transform-origin: top left;
+  transform-origin: top left;
+  background-size: 100% 100%;
+  background-repeat: no-repeat;
+  -webkit-backface-visibility: hidden;
+  backface-visibility: hidden; }
+
+.fancybox-can-zoomOut .fancybox-image-wrap {
+  cursor: -webkit-zoom-out;
+  cursor: zoom-out; }
+
+.fancybox-can-zoomIn .fancybox-image-wrap {
+  cursor: -webkit-zoom-in;
+  cursor: zoom-in; }
+
+.fancybox-can-drag .fancybox-image-wrap {
+  cursor: -webkit-grab;
+  cursor: grab; }
+
+.fancybox-is-dragging .fancybox-image-wrap {
+  cursor: -webkit-grabbing;
+  cursor: grabbing; }
+
+.fancybox-image,
+.fancybox-spaceball {
+  position: absolute;
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100%;
+  margin: 0;
+  padding: 0;
+  border: 0;
+  max-width: none;
+  max-height: none; }
+
+.fancybox-spaceball {
+  z-index: 1; }
+
+.fancybox-slide--iframe .fancybox-content {
+  padding: 0;
+  width: 80%;
+  height: 80%;
+  max-width: calc(100% - 100px);
+  max-height: calc(100% - 88px);
+  overflow: visible;
+  background: #fff; }
+
+.fancybox-iframe {
+  display: block;
+  margin: 0;
+  padding: 0;
+  border: 0;
+  width: 100%;
+  height: 100%;
+  background: #fff; }
+
+.fancybox-error {
+  margin: 0;
+  padding: 40px;
+  width: 100%;
+  max-width: 380px;
+  background: #fff;
+  cursor: default; }
+
+.fancybox-error p {
+  margin: 0;
+  padding: 0;
+  color: #444;
+  font: 16px/20px "Helvetica Neue",Helvetica,Arial,sans-serif; }
+
+.fancybox-close-small {
+  position: absolute;
+  top: 0;
+  right: 0;
+  width: 44px;
+  height: 44px;
+  padding: 0;
+  margin: 0;
+  border: 0;
+  border-radius: 0;
+  outline: none;
+  background: transparent;
+  z-index: 10;
+  cursor: pointer; }
+
+.fancybox-close-small:after {
+  content: '×';
+  position: absolute;
+  top: 5px;
+  right: 5px;
+  width: 30px;
+  height: 30px;
+  font: 20px/30px Arial,"Helvetica Neue",Helvetica,sans-serif;
+  color: #888;
+  font-weight: 300;
+  text-align: center;
+  border-radius: 50%;
+  border-width: 0;
+  background: #fff;
+  transition: background .25s;
+  box-sizing: border-box;
+  z-index: 2; }
+
+.fancybox-close-small:focus:after {
+  outline: 1px dotted #888; }
+
+.fancybox-close-small:hover:after {
+  color: #555;
+  background: #eee; }
+
+.fancybox-slide--iframe .fancybox-close-small {
+  top: 0;
+  right: -44px; }
+
+.fancybox-slide--iframe .fancybox-close-small:after {
+  background: transparent;
+  font-size: 35px;
+  color: #aaa; }
+
+.fancybox-slide--iframe .fancybox-close-small:hover:after {
+  color: #fff; }
+
+/* Caption */
+.fancybox-caption-wrap {
+  bottom: 0;
+  left: 0;
+  right: 0;
+  padding: 60px 30px 0 30px;
+  background: linear-gradient(to bottom, transparent 0%, rgba(0, 0, 0, 0.1) 20%, rgba(0, 0, 0, 0.2) 40%, rgba(0, 0, 0, 0.6) 80%, rgba(0, 0, 0, 0.8) 100%);
+  pointer-events: none; }
+
+.fancybox-caption {
+  padding: 30px 0;
+  border-top: 1px solid rgba(255, 255, 255, 0.4);
+  font-size: 14px;
+  font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
+  color: #fff;
+  line-height: 20px;
+  -webkit-text-size-adjust: none; }
+
+.fancybox-caption a,
+.fancybox-caption button,
+.fancybox-caption select {
+  pointer-events: all; }
+
+.fancybox-caption a {
+  color: #fff;
+  text-decoration: underline; }
+
+/* Buttons */
+.fancybox-button {
+  display: inline-block;
+  position: relative;
+  margin: 0;
+  padding: 0;
+  border: 0;
+  width: 44px;
+  height: 44px;
+  line-height: 44px;
+  text-align: center;
+  background: transparent;
+  color: #ddd;
+  border-radius: 0;
+  cursor: pointer;
+  vertical-align: top;
+  outline: none; }
+
+.fancybox-button[disabled] {
+  cursor: default;
+  pointer-events: none; }
+
+.fancybox-infobar__body, .fancybox-button {
+  background: rgba(30, 30, 30, 0.6); }
+
+.fancybox-button:hover:not([disabled]) {
+  color: #fff;
+  background: rgba(0, 0, 0, 0.8); }
+
+.fancybox-button::before,
+.fancybox-button::after {
+  content: '';
+  pointer-events: none;
+  position: absolute;
+  background-color: currentColor;
+  color: currentColor;
+  opacity: 0.9;
+  box-sizing: border-box;
+  display: inline-block; }
+
+.fancybox-button[disabled]::before,
+.fancybox-button[disabled]::after {
+  opacity: 0.3; }
+
+.fancybox-button--left::after,
+.fancybox-button--right::after {
+  top: 18px;
+  width: 6px;
+  height: 6px;
+  background: transparent;
+  border-top: solid 2px currentColor;
+  border-right: solid 2px currentColor; }
+
+.fancybox-button--left::after {
+  left: 20px;
+  -webkit-transform: rotate(-135deg);
+  -ms-transform: rotate(-135deg);
+  transform: rotate(-135deg); }
+
+.fancybox-button--right::after {
+  right: 20px;
+  -webkit-transform: rotate(45deg);
+  -ms-transform: rotate(45deg);
+  transform: rotate(45deg); }
+
+.fancybox-button--left {
+  border-bottom-left-radius: 5px; }
+
+.fancybox-button--right {
+  border-bottom-right-radius: 5px; }
+
+.fancybox-button--close::before, .fancybox-button--close::after {
+  content: '';
+  display: inline-block;
+  position: absolute;
+  height: 2px;
+  width: 16px;
+  top: calc(50% - 1px);
+  left: calc(50% - 8px); }
+
+.fancybox-button--close::before {
+  -webkit-transform: rotate(45deg);
+  -ms-transform: rotate(45deg);
+  transform: rotate(45deg); }
+
+.fancybox-button--close::after {
+  -webkit-transform: rotate(-45deg);
+  -ms-transform: rotate(-45deg);
+  transform: rotate(-45deg); }
+
+/* Navigation arrows */
+.fancybox-arrow {
+  position: absolute;
+  top: 50%;
+  margin: -50px 0 0 0;
+  height: 100px;
+  width: 54px;
+  padding: 0;
+  border: 0;
+  outline: none;
+  background: none;
+  cursor: pointer;
+  z-index: 99995;
+  opacity: 0;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+  transition: opacity .25s; }
+
+.fancybox-arrow::after {
+  content: '';
+  position: absolute;
+  top: 28px;
+  width: 44px;
+  height: 44px;
+  background-color: rgba(30, 30, 30, 0.8);
+  background-image: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSIjRkZGRkZGIiBoZWlnaHQ9IjQ4IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSI0OCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4gICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPiAgICA8cGF0aCBkPSJNMTIgNGwtMS40MSAxLjQxTDE2LjE3IDExSDR2MmgxMi4xN2wtNS41OCA1LjU5TDEyIDIwbDgtOHoiLz48L3N2Zz4=);
+  background-repeat: no-repeat;
+  background-position: center center;
+  background-size: 24px 24px; }
+
+.fancybox-arrow--right {
+  right: 0; }
+
+.fancybox-arrow--left {
+  left: 0;
+  -webkit-transform: scaleX(-1);
+  -ms-transform: scaleX(-1);
+  transform: scaleX(-1); }
+
+.fancybox-arrow--right::after,
+.fancybox-arrow--left::after {
+  left: 0; }
+
+.fancybox-show-nav .fancybox-arrow {
+  opacity: 0.6; }
+
+.fancybox-show-nav .fancybox-arrow[disabled] {
+  opacity: 0.3; }
+
+/* Loading indicator */
+.fancybox-loading {
+  border: 6px solid rgba(100, 100, 100, 0.4);
+  border-top: 6px solid rgba(255, 255, 255, 0.6);
+  border-radius: 100%;
+  height: 50px;
+  width: 50px;
+  -webkit-animation: fancybox-rotate .8s infinite linear;
+  animation: fancybox-rotate .8s infinite linear;
+  background: transparent;
+  position: absolute;
+  top: 50%;
+  left: 50%;
+  margin-top: -25px;
+  margin-left: -25px;
+  z-index: 99999; }
+
+@-webkit-keyframes fancybox-rotate {
+  from {
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg); }
+  to {
+    -webkit-transform: rotate(359deg);
+    transform: rotate(359deg); } }
+
+@keyframes fancybox-rotate {
+  from {
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg); }
+  to {
+    -webkit-transform: rotate(359deg);
+    transform: rotate(359deg); } }
+
+/* Transition effects */
+.fancybox-animated {
+  transition-timing-function: cubic-bezier(0, 0, 0.25, 1); }
+
+/* transitionEffect: slide */
+.fancybox-fx-slide.fancybox-slide--previous {
+  -webkit-transform: translate3d(-100%, 0, 0);
+  transform: translate3d(-100%, 0, 0);
+  opacity: 0; }
+
+.fancybox-fx-slide.fancybox-slide--next {
+  -webkit-transform: translate3d(100%, 0, 0);
+  transform: translate3d(100%, 0, 0);
+  opacity: 0; }
+
+.fancybox-fx-slide.fancybox-slide--current {
+  -webkit-transform: translate3d(0, 0, 0);
+  transform: translate3d(0, 0, 0);
+  opacity: 1; }
+
+/* transitionEffect: fade */
+.fancybox-fx-fade.fancybox-slide--previous,
+.fancybox-fx-fade.fancybox-slide--next {
+  opacity: 0;
+  transition-timing-function: cubic-bezier(0.19, 1, 0.22, 1); }
+
+.fancybox-fx-fade.fancybox-slide--current {
+  opacity: 1; }
+
+/* transitionEffect: zoom-in-out */
+.fancybox-fx-zoom-in-out.fancybox-slide--previous {
+  -webkit-transform: scale3d(1.5, 1.5, 1.5);
+  transform: scale3d(1.5, 1.5, 1.5);
+  opacity: 0; }
+
+.fancybox-fx-zoom-in-out.fancybox-slide--next {
+  -webkit-transform: scale3d(0.5, 0.5, 0.5);
+  transform: scale3d(0.5, 0.5, 0.5);
+  opacity: 0; }
+
+.fancybox-fx-zoom-in-out.fancybox-slide--current {
+  -webkit-transform: scale3d(1, 1, 1);
+  transform: scale3d(1, 1, 1);
+  opacity: 1; }
+
+/* transitionEffect: rotate */
+.fancybox-fx-rotate.fancybox-slide--previous {
+  -webkit-transform: rotate(-360deg);
+  -ms-transform: rotate(-360deg);
+  transform: rotate(-360deg);
+  opacity: 0; }
+
+.fancybox-fx-rotate.fancybox-slide--next {
+  -webkit-transform: rotate(360deg);
+  -ms-transform: rotate(360deg);
+  transform: rotate(360deg);
+  opacity: 0; }
+
+.fancybox-fx-rotate.fancybox-slide--current {
+  -webkit-transform: rotate(0deg);
+  -ms-transform: rotate(0deg);
+  transform: rotate(0deg);
+  opacity: 1; }
+
+/* transitionEffect: circular */
+.fancybox-fx-circular.fancybox-slide--previous {
+  -webkit-transform: scale3d(0, 0, 0) translate3d(-100%, 0, 0);
+  transform: scale3d(0, 0, 0) translate3d(-100%, 0, 0);
+  opacity: 0; }
+
+.fancybox-fx-circular.fancybox-slide--next {
+  -webkit-transform: scale3d(0, 0, 0) translate3d(100%, 0, 0);
+  transform: scale3d(0, 0, 0) translate3d(100%, 0, 0);
+  opacity: 0; }
+
+.fancybox-fx-circular.fancybox-slide--current {
+  -webkit-transform: scale3d(1, 1, 1) translate3d(0, 0, 0);
+  transform: scale3d(1, 1, 1) translate3d(0, 0, 0);
+  opacity: 1; }
+
+/* transitionEffect: tube */
+.fancybox-fx-tube.fancybox-slide--previous {
+  -webkit-transform: translate3d(-100%, 0, 0) scale(0.1) skew(-10deg);
+  transform: translate3d(-100%, 0, 0) scale(0.1) skew(-10deg); }
+
+.fancybox-fx-tube.fancybox-slide--next {
+  -webkit-transform: translate3d(100%, 0, 0) scale(0.1) skew(10deg);
+  transform: translate3d(100%, 0, 0) scale(0.1) skew(10deg); }
+
+.fancybox-fx-tube.fancybox-slide--current {
+  -webkit-transform: translate3d(0, 0, 0) scale(1);
+  transform: translate3d(0, 0, 0) scale(1); }
+
+/* Styling for Small-Screen Devices */
+@media all and (max-width: 800px) {
+  .fancybox-infobar {
+    left: 0;
+    margin-left: 0; }
+  .fancybox-button--left,
+  .fancybox-button--right {
+    display: none !important; }
+  .fancybox-caption {
+    padding: 20px 0;
+    margin: 0; } }
+
+/* Fullscreen  */
+.fancybox-button--fullscreen::before {
+  width: 15px;
+  height: 11px;
+  left: calc(50% - 7px);
+  top: calc(50% - 6px);
+  border: 2px solid;
+  background: none; }
+
+/* Slideshow button */
+.fancybox-button--play::before,
+.fancybox-button--pause::before {
+  top: calc(50% - 6px);
+  left: calc(50% - 4px);
+  background: transparent; }
+
+.fancybox-button--play::before {
+  width: 0;
+  height: 0;
+  border-top: 6px inset transparent;
+  border-bottom: 6px inset transparent;
+  border-left: 10px solid;
+  border-radius: 1px; }
+
+.fancybox-button--pause::before {
+  width: 7px;
+  height: 11px;
+  border-style: solid;
+  border-width: 0 2px 0 2px; }
+
+/* Thumbs */
+.fancybox-thumbs {
+  display: none; }
+
+.fancybox-button--thumbs {
+  display: none; }
+
+@media all and (min-width: 800px) {
+  .fancybox-button--thumbs {
+    display: inline-block; }
+  .fancybox-button--thumbs span {
+    font-size: 23px; }
+  .fancybox-button--thumbs::before {
+    width: 3px;
+    height: 3px;
+    top: calc(50% - 2px);
+    left: calc(50% - 2px);
+    box-shadow: 0 -4px 0, -4px -4px 0, 4px -4px 0, 0 0 0 32px inset, -4px 0 0, 4px 0 0, 0 4px 0, -4px 4px 0, 4px 4px 0; }
+  .fancybox-thumbs {
+    position: absolute;
+    top: 0;
+    right: 0;
+    bottom: 0;
+    left: auto;
+    width: 220px;
+    margin: 0;
+    padding: 5px 5px 0 0;
+    background: #fff;
+    word-break: normal;
+    -webkit-tap-highlight-color: transparent;
+    -webkit-overflow-scrolling: touch;
+    -ms-overflow-style: -ms-autohiding-scrollbar;
+    box-sizing: border-box;
+    z-index: 99995; }
+  .fancybox-show-thumbs .fancybox-thumbs {
+    display: block; }
+  .fancybox-show-thumbs .fancybox-inner {
+    right: 220px; }
+  .fancybox-thumbs > ul {
+    list-style: none;
+    position: absolute;
+    position: relative;
+    width: 100%;
+    height: 100%;
+    margin: 0;
+    padding: 0;
+    overflow-x: hidden;
+    overflow-y: auto;
+    font-size: 0; }
+  .fancybox-thumbs > ul > li {
+    float: left;
+    overflow: hidden;
+    max-width: 50%;
+    padding: 0;
+    margin: 0;
+    width: 105px;
+    height: 75px;
+    position: relative;
+    cursor: pointer;
+    outline: none;
+    border: 5px solid transparent;
+    border-top-width: 0;
+    border-right-width: 0;
+    -webkit-tap-highlight-color: transparent;
+    -webkit-backface-visibility: hidden;
+    backface-visibility: hidden;
+    box-sizing: border-box; }
+  li.fancybox-thumbs-loading {
+    background: rgba(0, 0, 0, 0.1); }
+  .fancybox-thumbs > ul > li > img {
+    position: absolute;
+    top: 0;
+    left: 0;
+    min-width: 100%;
+    min-height: 100%;
+    max-width: none;
+    max-height: none;
+    -webkit-touch-callout: none;
+    -webkit-user-select: none;
+    -moz-user-select: none;
+    -ms-user-select: none;
+    user-select: none; }
+  .fancybox-thumbs > ul > li:before {
+    content: '';
+    position: absolute;
+    top: 0;
+    right: 0;
+    bottom: 0;
+    left: 0;
+    border-radius: 2px;
+    border: 4px solid #4ea7f9;
+    z-index: 99991;
+    opacity: 0;
+    transition: all 0.2s cubic-bezier(0.25, 0.46, 0.45, 0.94); }
+  .fancybox-thumbs > ul > li.fancybox-thumbs-active:before {
+    opacity: 1; } }
diff --git a/fancybox/dist/jquery.fancybox.js b/fancybox/dist/jquery.fancybox.js
new file mode 100644 (file)
index 0000000..f5ed361
--- /dev/null
@@ -0,0 +1,4936 @@
+// ==================================================
+// fancyBox v3.1.24
+//
+// Licensed GPLv3 for open source use
+// or fancyBox Commercial License for commercial use
+//
+// http://fancyapps.com/fancybox/
+// Copyright 2017 fancyApps
+//
+// ==================================================
+;(function (window, document, $, undefined) {
+    'use strict';
+
+    // If there's no jQuery, fancyBox can't work
+    // =========================================
+
+    if ( !$ ) {
+        return;
+    }
+
+    // Check if fancyBox is already initialized
+    // ========================================
+
+    if ( $.fn.fancybox ) {
+
+        $.error('fancyBox already initialized');
+
+        return;
+    }
+
+    // Private default settings
+    // ========================
+
+    var defaults = {
+
+        // Enable infinite gallery navigation
+        loop : false,
+
+        // Space around image, ignored if zoomed-in or viewport smaller than 800px
+        margin : [44, 0],
+
+        // Horizontal space between slides
+        gutter : 50,
+
+        // Enable keyboard navigation
+        keyboard : true,
+
+        // Should display navigation arrows at the screen edges
+        arrows : true,
+
+        // Should display infobar (counter and arrows at the top)
+        infobar : false,
+
+        // Should display toolbar (buttons at the top)
+        toolbar : true,
+
+        // What buttons should appear in the top right corner.
+        // Buttons will be created using templates from `btnTpl` option
+        // and they will be placed into toolbar (class="fancybox-toolbar"` element)
+        buttons : [
+            'slideShow',
+            'fullScreen',
+            'thumbs',
+            'close'
+        ],
+
+        // Detect "idle" time in seconds
+        idleTime : 4,
+
+        // Should display buttons at top right corner of the content
+        // If 'auto' - they will be created for content having type 'html', 'inline' or 'ajax'
+        // Use template from `btnTpl.smallBtn` for customization
+        smallBtn : 'auto',
+
+        // Disable right-click and use simple image protection for images
+        protect : false,
+
+        // Shortcut to make content "modal" - disable keyboard navigtion, hide buttons, etc
+        modal : false,
+
+        image : {
+
+            // Wait for images to load before displaying
+            // Requires predefined image dimensions
+            // If 'auto' - will zoom in thumbnail if 'width' and 'height' attributes are found
+            preload : "auto",
+
+        },
+
+        ajax : {
+
+            // Object containing settings for ajax request
+            settings : {
+
+                // This helps to indicate that request comes from the modal
+                // Feel free to change naming
+                data : {
+                    fancybox : true
+                }
+            }
+
+        },
+
+        iframe : {
+
+            // Iframe template
+            tpl : '<iframe id="fancybox-frame{rnd}" name="fancybox-frame{rnd}" class="fancybox-iframe" frameborder="0" vspace="0" hspace="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen allowtransparency="true" src=""></iframe>',
+
+            // Preload iframe before displaying it
+            // This allows to calculate iframe content width and height
+            // (note: Due to "Same Origin Policy", you can't get cross domain data).
+            preload : true,
+
+            // Custom CSS styling for iframe wrapping element
+            // You can use this to set custom iframe dimensions
+            css : {},
+
+            // Iframe tag attributes
+            attr : {
+                scrolling : 'auto'
+            }
+
+        },
+
+        // Open/close animation type
+        // Possible values:
+        //   false            - disable
+        //   "zoom"           - zoom images from/to thumbnail
+        //   "fade"
+        //   "zoom-in-out"
+        //
+        animationEffect : "zoom",
+
+        // Duration in ms for open/close animation
+        animationDuration : 366,
+
+        // Should image change opacity while zooming
+        // If opacity is 'auto', then opacity will be changed if image and thumbnail have different aspect ratios
+        zoomOpacity : 'auto',
+
+        // Transition effect between slides
+        //
+        // Possible values:
+        //   false            - disable
+        //   "fade'
+        //   "slide'
+        //   "circular'
+        //   "tube'
+        //   "zoom-in-out'
+        //   "rotate'
+        //
+        transitionEffect : "fade",
+
+        // Duration in ms for transition animation
+        transitionDuration : 366,
+
+        // Custom CSS class for slide element
+        slideClass : '',
+
+        // Custom CSS class for layout
+        baseClass : '',
+
+        // Base template for layout
+        baseTpl        :
+            '<div class="fancybox-container" role="dialog" tabindex="-1">' +
+                '<div class="fancybox-bg"></div>' +
+                '<div class="fancybox-inner">' +
+                    '<div class="fancybox-infobar">' +
+                        '<button data-fancybox-prev title="{{PREV}}" class="fancybox-button fancybox-button--left"></button>' +
+                        '<div class="fancybox-infobar__body">' +
+                            '<span data-fancybox-index></span>&nbsp;/&nbsp;<span data-fancybox-count></span>' +
+                        '</div>' +
+                        '<button data-fancybox-next title="{{NEXT}}" class="fancybox-button fancybox-button--right"></button>' +
+                    '</div>' +
+                    '<div class="fancybox-toolbar">' +
+                        '{{BUTTONS}}' +
+                    '</div>' +
+                    '<div class="fancybox-navigation">' +
+                        '<button data-fancybox-prev title="{{PREV}}" class="fancybox-arrow fancybox-arrow--left" />' +
+                        '<button data-fancybox-next title="{{NEXT}}" class="fancybox-arrow fancybox-arrow--right" />' +
+                    '</div>' +
+                    '<div class="fancybox-stage"></div>' +
+                    '<div class="fancybox-caption-wrap">' +
+                        '<div class="fancybox-caption"></div>' +
+                    '</div>' +
+                '</div>' +
+            '</div>',
+
+        // Loading indicator template
+        spinnerTpl : '<div class="fancybox-loading"></div>',
+
+        // Error message template
+        errorTpl : '<div class="fancybox-error"><p>{{ERROR}}<p></div>',
+
+        btnTpl : {
+            slideShow  : '<button data-fancybox-play class="fancybox-button fancybox-button--play" title="{{PLAY_START}}"></button>',
+            fullScreen : '<button data-fancybox-fullscreen class="fancybox-button fancybox-button--fullscreen" title="{{FULL_SCREEN}}"></button>',
+            thumbs     : '<button data-fancybox-thumbs class="fancybox-button fancybox-button--thumbs" title="{{THUMBS}}"></button>',
+            close      : '<button data-fancybox-close class="fancybox-button fancybox-button--close" title="{{CLOSE}}"></button>',
+
+            // This small close button will be appended to your html/inline/ajax content by default,
+            // if "smallBtn" option is not set to false
+            smallBtn   : '<button data-fancybox-close class="fancybox-close-small" title="{{CLOSE}}"></button>'
+        },
+
+        // Container is injected into this element
+        parentEl : 'body',
+
+
+        // Focus handling
+        // ==============
+
+        // Try to focus on the first focusable element after opening
+        autoFocus : true,
+
+        // Put focus back to active element after closing
+        backFocus : true,
+
+        // Do not let user to focus on element outside modal content
+        trapFocus : true,
+
+
+        // Module specific options
+        // =======================
+
+        fullScreen : {
+            autoStart : false,
+        },
+
+        touch : {
+            vertical : true,  // Allow to drag content vertically
+            momentum : true   // Continue movement after releasing mouse/touch when panning
+        },
+
+        // Hash value when initializing manually,
+        // set `false` to disable hash change
+        hash : null,
+
+        // Customize or add new media types
+        // Example:
+        /*
+        media : {
+            youtube : {
+                params : {
+                    autoplay : 0
+                }
+            }
+        }
+        */
+        media : {},
+
+        slideShow : {
+            autoStart : false,
+            speed     : 4000
+        },
+
+        thumbs : {
+            autoStart   : false,   // Display thumbnails on opening
+            hideOnClose : true     // Hide thumbnail grid when closing animation starts
+        },
+
+        // Callbacks
+        //==========
+
+        // See Documentation/API/Events for more information
+        // Example:
+        /*
+            afterShow: function( instance, current ) {
+                 console.info( 'Clicked element:' );
+                 console.info( current.opts.$orig );
+            }
+        */
+
+        onInit       : $.noop,  // When instance has been initialized
+
+        beforeLoad   : $.noop,  // Before the content of a slide is being loaded
+        afterLoad    : $.noop,  // When the content of a slide is done loading
+
+        beforeShow   : $.noop,  // Before open animation starts
+        afterShow    : $.noop,  // When content is done loading and animating
+
+        beforeClose  : $.noop,  // Before the instance attempts to close. Return false to cancel the close.
+        afterClose   : $.noop,  // After instance has been closed
+
+        onActivate   : $.noop,  // When instance is brought to front
+        onDeactivate : $.noop,  // When other instance has been activated
+
+
+        // Interaction
+        // ===========
+
+        // Use options below to customize taken action when user clicks or double clicks on the fancyBox area,
+        // each option can be string or method that returns value.
+        //
+        // Possible values:
+        //   "close"           - close instance
+        //   "next"            - move to next gallery item
+        //   "nextOrClose"     - move to next gallery item or close if gallery has only one item
+        //   "toggleControls"  - show/hide controls
+        //   "zoom"            - zoom image (if loaded)
+        //   false             - do nothing
+
+        // Clicked on the content
+        clickContent : function( current, event ) {
+            return current.type === 'image' ? 'zoom' : false;
+        },
+
+        // Clicked on the slide
+        clickSlide : 'close',
+
+        // Clicked on the background (backdrop) element
+        clickOutside : 'close',
+
+        // Same as previous two, but for double click
+        dblclickContent : false,
+        dblclickSlide   : false,
+        dblclickOutside : false,
+
+
+        // Custom options when mobile device is detected
+        // =============================================
+
+        mobile : {
+            clickContent : function( current, event ) {
+                return current.type === 'image' ? 'toggleControls' : false;
+            },
+            clickSlide : function( current, event ) {
+                return current.type === 'image' ? 'toggleControls' : "close";
+            },
+            dblclickContent : function( current, event ) {
+                return current.type === 'image' ? 'zoom' : false;
+            },
+            dblclickSlide : function( current, event ) {
+                return current.type === 'image' ? 'zoom' : false;
+            }
+        },
+
+
+        // Internationalization
+        // ============
+
+        lang : 'en',
+        i18n : {
+            'en' : {
+                CLOSE       : 'Close',
+                NEXT        : 'Next',
+                PREV        : 'Previous',
+                ERROR       : 'The requested content cannot be loaded. <br/> Please try again later.',
+                PLAY_START  : 'Start slideshow',
+                PLAY_STOP   : 'Pause slideshow',
+                FULL_SCREEN : 'Full screen',
+                THUMBS      : 'Thumbnails'
+            },
+            'de' : {
+                CLOSE       : 'Schliessen',
+                NEXT        : 'Weiter',
+                PREV        : 'Zurück',
+                ERROR       : 'Die angeforderten Daten konnten nicht geladen werden. <br/> Bitte versuchen Sie es später nochmal.',
+                PLAY_START  : 'Diaschau starten',
+                PLAY_STOP   : 'Diaschau beenden',
+                FULL_SCREEN : 'Vollbild',
+                THUMBS      : 'Vorschaubilder'
+            }
+        }
+
+    };
+
+    // Few useful variables and methods
+    // ================================
+
+    var $W = $(window);
+    var $D = $(document);
+
+    var called = 0;
+
+
+    // Check if an object is a jQuery object and not a native JavaScript object
+    // ========================================================================
+
+    var isQuery = function ( obj ) {
+        return obj && obj.hasOwnProperty && obj instanceof $;
+    };
+
+
+    // Handle multiple browsers for "requestAnimationFrame" and "cancelAnimationFrame"
+    // ===============================================================================
+
+    var requestAFrame = (function () {
+        return window.requestAnimationFrame ||
+                window.webkitRequestAnimationFrame ||
+                window.mozRequestAnimationFrame ||
+                window.oRequestAnimationFrame ||
+                // if all else fails, use setTimeout
+                function (callback) {
+                    return window.setTimeout(callback, 1000 / 60);
+                };
+    })();
+
+
+    // Detect the supported transition-end event property name
+    // =======================================================
+
+    var transitionEnd = (function () {
+        var t, el = document.createElement("fakeelement");
+
+        var transitions = {
+            "transition"      : "transitionend",
+            "OTransition"     : "oTransitionEnd",
+            "MozTransition"   : "transitionend",
+            "WebkitTransition": "webkitTransitionEnd"
+        };
+
+        for (t in transitions) {
+            if (el.style[t] !== undefined){
+                return transitions[t];
+            }
+        }
+    })();
+
+
+    // Force redraw on an element.
+    // This helps in cases where the browser doesn't redraw an updated element properly.
+    // =================================================================================
+
+    var forceRedraw = function( $el ) {
+        return ( $el && $el.length && $el[0].offsetHeight );
+    };
+
+
+    // Class definition
+    // ================
+
+    var FancyBox = function( content, opts, index ) {
+        var self = this;
+
+        self.opts  = $.extend( true, { index : index }, defaults, opts || {} );
+
+        // Exclude buttons option from deep merging
+        if ( opts && $.isArray( opts.buttons ) ) {
+            self.opts.buttons = opts.buttons;
+        }
+
+        self.id    = self.opts.id || ++called;
+        self.group = [];
+
+        self.currIndex = parseInt( self.opts.index, 10 ) || 0;
+        self.prevIndex = null;
+
+        self.prevPos = null;
+        self.currPos = 0;
+
+        self.firstRun = null;
+
+        // Create group elements from original item collection
+        self.createGroup( content );
+
+        if ( !self.group.length ) {
+            return;
+        }
+
+        // Save last active element and current scroll position
+        self.$lastFocus = $(document.activeElement).blur();
+
+        // Collection of gallery objects
+        self.slides = {};
+
+        self.init( content );
+
+    };
+
+    $.extend(FancyBox.prototype, {
+
+        // Create DOM structure
+        // ====================
+
+        init : function() {
+            var self = this;
+
+            var testWidth, $container, buttonStr;
+
+            var firstItemOpts = self.group[ self.currIndex ].opts;
+
+            self.scrollTop  = $D.scrollTop();
+            self.scrollLeft = $D.scrollLeft();
+
+
+            // Hide scrollbars
+            // ===============
+
+            if ( !$.fancybox.getInstance() && !$.fancybox.isMobile && $( 'body' ).css('overflow') !== 'hidden' ) {
+                testWidth = $( 'body' ).width();
+
+                $( 'html' ).addClass( 'fancybox-enabled' );
+
+                // Compare body width after applying "overflow: hidden"
+                testWidth = $( 'body' ).width() - testWidth;
+
+                // If width has changed - compensate missing scrollbars by adding right margin
+                if ( testWidth > 1 ) {
+                    $( 'head' ).append( '<style id="fancybox-style-noscroll" type="text/css">.compensate-for-scrollbar, .fancybox-enabled body { margin-right: ' + testWidth + 'px; }</style>' );
+                }
+            }
+
+
+            // Build html markup and set references
+            // ====================================
+
+            // Build html code for buttons and insert into main template
+            buttonStr = '';
+
+            $.each( firstItemOpts.buttons, function( index, value ) {
+                buttonStr += ( firstItemOpts.btnTpl[ value ] || '' );
+            });
+
+            // Create markup from base template, it will be initially hidden to
+            // avoid unnecessary work like painting while initializing is not complete
+            $container = $( self.translate( self, firstItemOpts.baseTpl.replace( '\{\{BUTTONS\}\}', buttonStr ) ) )
+                .addClass( 'fancybox-is-hidden' )
+                .attr('id', 'fancybox-container-' + self.id)
+                .addClass( firstItemOpts.baseClass )
+                .data( 'FancyBox', self )
+                .prependTo( firstItemOpts.parentEl );
+
+            // Create object holding references to jQuery wrapped nodes
+            self.$refs = {
+                container : $container
+            };
+
+            [ 'bg', 'inner', 'infobar', 'toolbar', 'stage', 'caption' ].forEach(function(item) {
+                self.$refs[ item ] = $container.find( '.fancybox-' + item );
+            });
+
+            // Check for redundant elements
+            if ( !firstItemOpts.arrows || self.group.length < 2 ) {
+                $container.find('.fancybox-navigation').remove();
+            }
+
+            if ( !firstItemOpts.infobar ) {
+                self.$refs.infobar.remove();
+            }
+
+            if ( !firstItemOpts.toolbar ) {
+                self.$refs.toolbar.remove();
+            }
+
+            self.trigger( 'onInit' );
+
+            // Bring to front and enable events
+            self.activate();
+
+            // Build slides, load and reveal content
+            self.jumpTo( self.currIndex );
+        },
+
+
+        // Simple i18n support - replaces object keys found in template
+        // with corresponding values
+        // ============================================================
+
+        translate : function( obj, str ) {
+            var arr = obj.opts.i18n[ obj.opts.lang ];
+
+            return str.replace(/\{\{(\w+)\}\}/g, function(match, n) {
+                var value = arr[n];
+
+                if ( value === undefined ) {
+                    return match;
+                }
+
+                return value;
+            });
+        },
+
+        // Create array of gally item objects
+        // Check if each object has valid type and content
+        // ===============================================
+
+        createGroup : function ( content ) {
+            var self  = this;
+            var items = $.makeArray( content );
+
+            $.each(items, function( i, item ) {
+                var obj  = {},
+                    opts = {},
+                    data = [],
+                    $item,
+                    type,
+                    src,
+                    srcParts;
+
+                // Step 1 - Make sure we have an object
+                // ====================================
+
+                if ( $.isPlainObject( item ) ) {
+
+                    // We probably have manual usage here, something like
+                    // $.fancybox.open( [ { src : "image.jpg", type : "image" } ] )
+
+                    obj  = item;
+                    opts = item.opts || item;
+
+                } else if ( $.type( item ) === 'object' && $( item ).length ) {
+
+                    // Here we propbably have jQuery collection returned by some selector
+
+                    $item = $( item );
+                    data  = $item.data();
+
+                    opts = 'options' in data ? data.options : {};
+                    opts = $.type( opts ) === 'object' ? opts : {};
+
+                    obj.src  = 'src' in data ? data.src : ( opts.src || $item.attr( 'href' ) );
+
+                    [ 'width', 'height', 'thumb', 'type', 'filter' ].forEach(function(item) {
+                        if ( item in data ) {
+                            opts[ item ] = data[ item ];
+                        }
+                    });
+
+                    if ( 'srcset' in data ) {
+                        opts.image = { srcset : data.srcset };
+                    }
+
+                    opts.$orig = $item;
+
+                    if ( !obj.type && !obj.src ) {
+                        obj.type = 'inline';
+                        obj.src  = item;
+                    }
+
+                } else {
+
+                    // Assume we have a simple html code, for example:
+                    // $.fancybox.open( '<div><h1>Hi!</h1></div>' );
+
+                    obj = {
+                        type : 'html',
+                        src  : item + ''
+                    };
+
+                }
+
+                // Each gallery object has full collection of options
+                obj.opts = $.extend( true, {}, self.opts, opts );
+
+                if ( $.fancybox.isMobile ) {
+                    obj.opts = $.extend( true, {}, obj.opts, obj.opts.mobile );
+                }
+
+
+                // Step 2 - Make sure we have content type, if not - try to guess
+                // ==============================================================
+
+                type = obj.type || obj.opts.type;
+                src  = obj.src || '';
+
+                if ( !type && src ) {
+                    if ( src.match(/(^data:image\/[a-z0-9+\/=]*,)|(\.(jp(e|g|eg)|gif|png|bmp|webp|svg|ico)((\?|#).*)?$)/i) ) {
+                        type = 'image';
+
+                    } else if ( src.match(/\.(pdf)((\?|#).*)?$/i) ) {
+                        type = 'pdf';
+
+                    } else if ( src.charAt(0) === '#' ) {
+                        type = 'inline';
+                    }
+                }
+
+                obj.type = type;
+
+
+                // Step 3 - Some adjustments
+                // =========================
+
+                obj.index = self.group.length;
+
+                // Check if $orig and $thumb objects exist
+                if ( obj.opts.$orig && !obj.opts.$orig.length ) {
+                    delete obj.opts.$orig;
+                }
+
+                if ( !obj.opts.$thumb && obj.opts.$orig ) {
+                    obj.opts.$thumb = obj.opts.$orig.find( 'img:first' );
+                }
+
+                if ( obj.opts.$thumb && !obj.opts.$thumb.length ) {
+                    delete obj.opts.$thumb;
+                }
+
+                // Caption is a "special" option, it can be passed as a method
+                if ( $.type( obj.opts.caption ) === 'function' ) {
+                    obj.opts.caption = obj.opts.caption.apply( item, [ self, obj ] );
+
+                } else if ( 'caption' in data ) {
+                    obj.opts.caption = data.caption;
+                }
+
+                // Make sure we have caption as a string
+                obj.opts.caption = obj.opts.caption === undefined ? '' : obj.opts.caption + '';
+
+                // Check if url contains "filter" used to filter the content
+                // Example: "ajax.html #something"
+                if ( type === 'ajax' ) {
+                    srcParts = src.split(/\s+/, 2);
+
+                    if ( srcParts.length > 1 ) {
+                        obj.src = srcParts.shift();
+
+                        obj.opts.filter = srcParts.shift();
+                    }
+                }
+
+                if ( obj.opts.smallBtn == 'auto' ) {
+
+                    if ( $.inArray( type, ['html', 'inline', 'ajax'] ) > -1 ) {
+                        obj.opts.toolbar  = false;
+                        obj.opts.smallBtn = true;
+
+                    } else {
+                        obj.opts.smallBtn = false;
+                    }
+
+                }
+
+                // If the type is "pdf", then simply load file into iframe
+                if ( type === 'pdf' ) {
+                    obj.type = 'iframe';
+
+                    obj.opts.iframe.preload = false;
+                }
+
+                // Hide all buttons and disable interactivity for modal items
+                if ( obj.opts.modal ) {
+
+                    obj.opts = $.extend(true, obj.opts, {
+                        // Remove buttons
+                        infobar : 0,
+                        toolbar : 0,
+
+                        smallBtn : 0,
+
+                        // Disable keyboard navigation
+                        keyboard : 0,
+
+                        // Disable some modules
+                        slideShow  : 0,
+                        fullScreen : 0,
+                        thumbs     : 0,
+                        touch      : 0,
+
+                        // Disable click event handlers
+                        clickContent    : false,
+                        clickSlide      : false,
+                        clickOutside    : false,
+                        dblclickContent : false,
+                        dblclickSlide   : false,
+                        dblclickOutside : false
+                    });
+
+                }
+
+                // Step 4 - Add processed object to group
+                // ======================================
+
+                self.group.push( obj );
+
+            });
+
+        },
+
+
+        // Attach an event handler functions for:
+        //   - navigation buttons
+        //   - browser scrolling, resizing;
+        //   - focusing
+        //   - keyboard
+        //   - detect idle
+        // ======================================
+
+        addEvents : function() {
+            var self = this;
+
+            self.removeEvents();
+
+            // Make navigation elements clickable
+            self.$refs.container.on('click.fb-close', '[data-fancybox-close]', function(e) {
+                e.stopPropagation();
+                e.preventDefault();
+
+                self.close( e );
+
+            }).on( 'click.fb-prev touchend.fb-prev', '[data-fancybox-prev]', function(e) {
+                e.stopPropagation();
+                e.preventDefault();
+
+                self.previous();
+
+            }).on( 'click.fb-next touchend.fb-next', '[data-fancybox-next]', function(e) {
+                e.stopPropagation();
+                e.preventDefault();
+
+                self.next();
+
+            });
+
+
+            // Handle page scrolling and browser resizing
+            $W.on('orientationchange.fb resize.fb', function(e) {
+
+                if ( e && e.originalEvent && e.originalEvent.type === "resize" ) {
+
+                    requestAFrame(function() {
+                        self.update();
+                    });
+
+                } else {
+
+                    self.$refs.stage.hide();
+
+                    setTimeout(function() {
+                        self.$refs.stage.show();
+
+                        self.update();
+                    }, 500);
+
+                }
+
+            });
+
+            // Trap keyboard focus inside of the modal, so the user does not accidentally tab outside of the modal
+            // (a.k.a. "escaping the modal")
+            $D.on('focusin.fb', function(e) {
+                var instance = $.fancybox ? $.fancybox.getInstance() : null;
+
+                if ( instance.isClosing || !instance.current || !instance.current.opts.trapFocus || $( e.target ).hasClass( 'fancybox-container' ) || $( e.target ).is( document ) ) {
+                    return;
+                }
+
+                if ( instance && $( e.target ).css( 'position' ) !== 'fixed' && !instance.$refs.container.has( e.target ).length ) {
+                    e.stopPropagation();
+
+                    instance.focus();
+
+                    // Sometimes page gets scrolled, set it back
+                    $W.scrollTop( self.scrollTop ).scrollLeft( self.scrollLeft );
+                }
+            });
+
+
+            // Enable keyboard navigation
+            $D.on('keydown.fb', function (e) {
+                var current = self.current,
+                    keycode = e.keyCode || e.which;
+
+                if ( !current || !current.opts.keyboard ) {
+                    return;
+                }
+
+                if ( $(e.target).is('input') || $(e.target).is('textarea') ) {
+                    return;
+                }
+
+                // Backspace and Esc keys
+                if ( keycode === 8 || keycode === 27 ) {
+                    e.preventDefault();
+
+                    self.close( e );
+
+                    return;
+                }
+
+                // Left arrow and Up arrow
+                if ( keycode === 37 || keycode === 38 ) {
+                    e.preventDefault();
+
+                    self.previous();
+
+                    return;
+                }
+
+                // Righ arrow and Down arrow
+                if ( keycode === 39 || keycode === 40 ) {
+                    e.preventDefault();
+
+                    self.next();
+
+                    return;
+                }
+
+                self.trigger('afterKeydown', e, keycode);
+            });
+
+
+            // Hide controls after some inactivity period
+            if ( self.group[ self.currIndex ].opts.idleTime ) {
+                self.idleSecondsCounter = 0;
+
+                $D.on('mousemove.fb-idle mouseenter.fb-idle mouseleave.fb-idle mousedown.fb-idle touchstart.fb-idle touchmove.fb-idle scroll.fb-idle keydown.fb-idle', function() {
+                    self.idleSecondsCounter = 0;
+
+                    if ( self.isIdle ) {
+                        self.showControls();
+                    }
+
+                    self.isIdle = false;
+                });
+
+                self.idleInterval = window.setInterval(function() {
+
+                    self.idleSecondsCounter++;
+
+                    if ( self.idleSecondsCounter >= self.group[ self.currIndex ].opts.idleTime ) {
+                        self.isIdle = true;
+                        self.idleSecondsCounter = 0;
+
+                        self.hideControls();
+                    }
+
+                }, 1000);
+            }
+
+        },
+
+
+        // Remove events added by the core
+        // ===============================
+
+        removeEvents : function () {
+            var self = this;
+
+            $W.off( 'orientationchange.fb resize.fb' );
+            $D.off( 'focusin.fb keydown.fb .fb-idle' );
+
+            this.$refs.container.off( '.fb-close .fb-prev .fb-next' );
+
+            if ( self.idleInterval ) {
+                window.clearInterval( self.idleInterval );
+
+                self.idleInterval = null;
+            }
+        },
+
+
+        // Change to previous gallery item
+        // ===============================
+
+        previous : function( duration ) {
+            return this.jumpTo( this.currPos - 1, duration );
+        },
+
+
+        // Change to next gallery item
+        // ===========================
+
+        next : function( duration ) {
+            return this.jumpTo( this.currPos + 1, duration );
+        },
+
+
+        // Switch to selected gallery item
+        // ===============================
+
+        jumpTo : function ( pos, duration, slide ) {
+            var self = this,
+                firstRun,
+                loop,
+                current,
+                previous,
+                canvasWidth,
+                currentPos,
+                transitionProps;
+
+            var groupLen = self.group.length;
+
+            if ( self.isSliding || self.isClosing || ( self.isAnimating && self.firstRun ) ) {
+                return;
+            }
+
+            pos  = parseInt( pos, 10 );
+            loop = self.current ? self.current.opts.loop : self.opts.loop;
+
+            if ( !loop && ( pos < 0 || pos >= groupLen ) ) {
+                return false;
+            }
+
+            firstRun = self.firstRun = ( self.firstRun === null );
+
+            if ( groupLen < 2 && !firstRun && !!self.isSliding ) {
+                return;
+            }
+
+            previous = self.current;
+
+            self.prevIndex = self.currIndex;
+            self.prevPos   = self.currPos;
+
+            // Create slides
+            current = self.createSlide( pos );
+
+            if ( groupLen > 1 ) {
+                if ( loop || current.index > 0 ) {
+                    self.createSlide( pos - 1 );
+                }
+
+                if ( loop || current.index < groupLen - 1 ) {
+                    self.createSlide( pos + 1 );
+                }
+            }
+
+            self.current   = current;
+            self.currIndex = current.index;
+            self.currPos   = current.pos;
+
+            self.trigger( 'beforeShow', firstRun );
+
+            self.updateControls();
+
+            currentPos = $.fancybox.getTranslate( current.$slide );
+
+            current.isMoved        = ( currentPos.left !== 0 || currentPos.top !== 0 ) && !current.$slide.hasClass( 'fancybox-animated' );
+            current.forcedDuration = undefined;
+
+            if ( $.isNumeric( duration ) ) {
+                current.forcedDuration = duration;
+            } else {
+                duration = current.opts[ firstRun ? 'animationDuration' : 'transitionDuration' ];
+            }
+
+            duration = parseInt( duration, 10 );
+
+            // Fresh start - reveal container, current slide and start loading content
+            if ( firstRun ) {
+
+                if ( current.opts.animationEffect && duration ) {
+                    self.$refs.container.css( 'transition-duration', duration + 'ms' );
+                }
+
+                self.$refs.container.removeClass( 'fancybox-is-hidden' );
+
+                forceRedraw( self.$refs.container );
+
+                self.$refs.container.addClass( 'fancybox-is-open' );
+
+                // Make first slide visible (to display loading icon, if needed)
+                current.$slide.addClass( 'fancybox-slide--current' );
+
+                self.loadSlide( current );
+
+                self.preload();
+
+                return;
+            }
+
+            // Clean up
+            $.each(self.slides, function( index, slide ) {
+                $.fancybox.stop( slide.$slide );
+            });
+
+            // Make current that slide is visible even if content is still loading
+            current.$slide.removeClass( 'fancybox-slide--next fancybox-slide--previous' ).addClass( 'fancybox-slide--current' );
+
+            // If slides have been dragged, animate them to correct position
+            if ( current.isMoved ) {
+                canvasWidth = Math.round( current.$slide.width() );
+
+                $.each(self.slides, function( index, slide ) {
+                    var pos = slide.pos - current.pos;
+
+                    $.fancybox.animate( slide.$slide, {
+                        top  : 0,
+                        left : ( pos * canvasWidth ) + ( pos * slide.opts.gutter )
+                    }, duration, function() {
+
+                        slide.$slide.removeAttr('style').removeClass( 'fancybox-slide--next fancybox-slide--previous' );
+
+                        if ( slide.pos === self.currPos ) {
+                            current.isMoved = false;
+
+                            self.complete();
+                        }
+                    });
+                });
+
+            } else {
+                self.$refs.stage.children().removeAttr( 'style' );
+            }
+
+            // Start transition that reveals current content
+            // or wait when it will be loaded
+
+            if ( current.isLoaded ) {
+                self.revealContent( current );
+
+            } else {
+                self.loadSlide( current );
+            }
+
+            self.preload();
+
+            if ( previous.pos === current.pos ) {
+                return;
+            }
+
+            // Handle previous slide
+            // =====================
+
+            transitionProps = 'fancybox-slide--' + ( previous.pos > current.pos ? 'next' : 'previous' );
+
+            previous.$slide.removeClass( 'fancybox-slide--complete fancybox-slide--current fancybox-slide--next fancybox-slide--previous' );
+
+            previous.isComplete = false;
+
+            if ( !duration || ( !current.isMoved && !current.opts.transitionEffect ) ) {
+                return;
+            }
+
+            if ( current.isMoved ) {
+                previous.$slide.addClass( transitionProps );
+
+            } else {
+
+                transitionProps = 'fancybox-animated ' + transitionProps + ' fancybox-fx-' + current.opts.transitionEffect;
+
+                $.fancybox.animate( previous.$slide, transitionProps, duration, function() {
+                    previous.$slide.removeClass( transitionProps ).removeAttr( 'style' );
+                });
+
+            }
+
+        },
+
+
+        // Create new "slide" element
+        // These are gallery items  that are actually added to DOM
+        // =======================================================
+
+        createSlide : function( pos ) {
+
+            var self = this;
+            var $slide;
+            var index;
+
+            index = pos % self.group.length;
+            index = index < 0 ? self.group.length + index : index;
+
+            if ( !self.slides[ pos ] && self.group[ index ] ) {
+                $slide = $('<div class="fancybox-slide"></div>').appendTo( self.$refs.stage );
+
+                self.slides[ pos ] = $.extend( true, {}, self.group[ index ], {
+                    pos      : pos,
+                    $slide   : $slide,
+                    isLoaded : false,
+                });
+
+                self.updateSlide( self.slides[ pos ] );
+            }
+
+            return self.slides[ pos ];
+        },
+
+
+        // Scale image to the actual size of the image
+        // ===========================================
+
+        scaleToActual : function( x, y, duration ) {
+
+            var self = this;
+
+            var current = self.current;
+            var $what   = current.$content;
+
+            var imgPos, posX, posY, scaleX, scaleY;
+
+            var canvasWidth  = parseInt( current.$slide.width(), 10 );
+            var canvasHeight = parseInt( current.$slide.height(), 10 );
+
+            var newImgWidth  = current.width;
+            var newImgHeight = current.height;
+
+            if ( !( current.type == 'image' && !current.hasError) || !$what || self.isAnimating) {
+                return;
+            }
+
+            $.fancybox.stop( $what );
+
+            self.isAnimating = true;
+
+            x = x === undefined ? canvasWidth  * 0.5  : x;
+            y = y === undefined ? canvasHeight * 0.5  : y;
+
+            imgPos = $.fancybox.getTranslate( $what );
+
+            scaleX  = newImgWidth  / imgPos.width;
+            scaleY  = newImgHeight / imgPos.height;
+
+            // Get center position for original image
+            posX = ( canvasWidth * 0.5  - newImgWidth * 0.5 );
+            posY = ( canvasHeight * 0.5 - newImgHeight * 0.5 );
+
+            // Make sure image does not move away from edges
+            if ( newImgWidth > canvasWidth ) {
+                posX = imgPos.left * scaleX - ( ( x * scaleX ) - x );
+
+                if ( posX > 0 ) {
+                    posX = 0;
+                }
+
+                if ( posX <  canvasWidth - newImgWidth ) {
+                    posX = canvasWidth - newImgWidth;
+                }
+            }
+
+            if ( newImgHeight > canvasHeight) {
+                posY = imgPos.top  * scaleY - ( ( y * scaleY ) - y );
+
+                if ( posY > 0 ) {
+                    posY = 0;
+                }
+
+                if ( posY <  canvasHeight - newImgHeight ) {
+                    posY = canvasHeight - newImgHeight;
+                }
+            }
+
+            self.updateCursor( newImgWidth, newImgHeight );
+
+            $.fancybox.animate( $what, {
+                top    : posY,
+                left   : posX,
+                scaleX : scaleX,
+                scaleY : scaleY
+            }, duration || 330, function() {
+                self.isAnimating = false;
+            });
+
+            // Stop slideshow
+            if ( self.SlideShow && self.SlideShow.isActive ) {
+                self.SlideShow.stop();
+            }
+        },
+
+
+        // Scale image to fit inside parent element
+        // ========================================
+
+        scaleToFit : function( duration ) {
+
+            var self = this;
+
+            var current = self.current;
+            var $what   = current.$content;
+            var end;
+
+            if ( !( current.type == 'image' && !current.hasError) || !$what || self.isAnimating ) {
+                return;
+            }
+
+            $.fancybox.stop( $what );
+
+            self.isAnimating = true;
+
+            end = self.getFitPos( current );
+
+            self.updateCursor( end.width, end.height );
+
+            $.fancybox.animate( $what, {
+                top    : end.top,
+                left   : end.left,
+                scaleX : end.width  / $what.width(),
+                scaleY : end.height / $what.height()
+            }, duration || 330, function() {
+                self.isAnimating = false;
+            });
+
+        },
+
+        // Calculate image size to fit inside viewport
+        // ===========================================
+
+        getFitPos : function( slide ) {
+            var self  = this;
+            var $what = slide.$content;
+
+            var imgWidth  = slide.width;
+            var imgHeight = slide.height;
+
+            var margin = slide.opts.margin;
+
+            var canvasWidth, canvasHeight, minRatio, width, height;
+
+            if ( !$what || !$what.length || ( !imgWidth && !imgHeight) ) {
+                return false;
+            }
+
+            // Convert "margin to CSS style: [ top, right, bottom, left ]
+            if ( $.type( margin ) === "number" ) {
+                margin = [ margin, margin ];
+            }
+
+            if ( margin.length == 2 ) {
+                margin = [ margin[0], margin[1], margin[0], margin[1] ];
+            }
+
+            if ( $W.width() < 800 ) {
+                margin = [ 0, 0, 0, 0 ];
+            }
+
+            // We can not use $slide width here, because it can have different diemensions while in transiton
+            canvasWidth  = parseInt( self.$refs.stage.width(), 10 )  - ( margin[ 1 ] + margin[ 3 ] );
+            canvasHeight = parseInt( self.$refs.stage.height(), 10 ) - ( margin[ 0 ] + margin[ 2 ] );
+
+            minRatio = Math.min(1, canvasWidth / imgWidth, canvasHeight / imgHeight );
+
+            width  = Math.floor( minRatio * imgWidth );
+            height = Math.floor( minRatio * imgHeight );
+
+            // Use floor rounding to make sure it really fits
+            return {
+                top    : Math.floor( ( canvasHeight - height ) * 0.5 ) + margin[ 0 ],
+                left   : Math.floor( ( canvasWidth  - width )  * 0.5 ) + margin[ 3 ],
+                width  : width,
+                height : height
+            };
+
+        },
+
+
+        // Update position and content of all slides
+        // =========================================
+
+        update : function() {
+
+            var self = this;
+
+            $.each( self.slides, function( key, slide ) {
+                self.updateSlide( slide );
+            });
+
+        },
+
+
+        // Update slide position and scale content to fit
+        // ==============================================
+
+        updateSlide : function( slide ) {
+
+            var self  = this;
+            var $what = slide.$content;
+
+            if ( $what && ( slide.width || slide.height ) ) {
+                $.fancybox.stop( $what );
+
+                $.fancybox.setTranslate( $what, self.getFitPos( slide ) );
+
+                if ( slide.pos === self.currPos ) {
+                    self.updateCursor();
+                }
+            }
+
+            slide.$slide.trigger( 'refresh' );
+
+            self.trigger( 'onUpdate', slide );
+
+        },
+
+        // Update cursor style depending if content can be zoomed
+        // ======================================================
+
+        updateCursor : function( nextWidth, nextHeight ) {
+
+            var self = this;
+            var isScaledDown;
+
+            var $container = self.$refs.container.removeClass('fancybox-is-zoomable fancybox-can-zoomIn fancybox-can-drag fancybox-can-zoomOut');
+
+            if ( !self.current || self.isClosing ) {
+                return;
+            }
+
+            if ( self.isZoomable() ) {
+
+                $container.addClass( 'fancybox-is-zoomable' );
+
+                if ( nextWidth !== undefined && nextHeight !== undefined ) {
+                    isScaledDown = nextWidth < self.current.width && nextHeight < self.current.height;
+
+                } else {
+                    isScaledDown = self.isScaledDown();
+                }
+
+                if ( isScaledDown ) {
+
+                    // If image is scaled down, then, obviously, it can be zoomed to full size
+                    $container.addClass('fancybox-can-zoomIn');
+
+                } else {
+
+                    if ( self.current.opts.touch ) {
+
+                        // If image size ir largen than available available and touch module is not disable,
+                        // then user can do panning
+                        $container.addClass('fancybox-can-drag');
+
+                    } else {
+                        $container.addClass('fancybox-can-zoomOut');
+                    }
+
+                }
+
+            } else if ( self.current.opts.touch ) {
+                $container.addClass('fancybox-can-drag');
+            }
+
+        },
+
+
+        // Check if current slide is zoomable
+        // ==================================
+
+        isZoomable : function() {
+
+            var self = this;
+
+            var current = self.current;
+            var fitPos;
+
+            if ( !current || self.isClosing ) {
+                return;
+            }
+
+            // Assume that slide is zoomable if
+            //   - image is loaded successfuly
+            //   - click action is "zoom"
+            //   - actual size of the image is smaller than available area
+            if ( current.type === 'image' && current.isLoaded && !current.hasError &&
+                ( current.opts.clickContent === 'zoom' || ( $.isFunction( current.opts.clickContent ) && current.opts.clickContent( current ) ===  "zoom" ) )
+            ) {
+
+                fitPos = self.getFitPos( current );
+
+                if ( current.width > fitPos.width || current.height > fitPos.height ) {
+                    return true;
+                }
+
+            }
+
+            return false;
+
+        },
+
+
+        // Check if current image dimensions are smaller than actual
+        // =========================================================
+
+        isScaledDown : function() {
+
+            var self = this;
+
+            var current = self.current;
+            var $what   = current.$content;
+
+            var rez = false;
+
+            if ( $what ) {
+                rez = $.fancybox.getTranslate( $what );
+                rez = rez.width < current.width || rez.height < current.height;
+            }
+
+            return rez;
+
+        },
+
+
+        // Check if image dimensions exceed parent element
+        // ===============================================
+
+        canPan : function() {
+
+            var self = this;
+
+            var current = self.current;
+            var $what   = current.$content;
+
+            var rez = false;
+
+            if ( $what ) {
+                rez = self.getFitPos( current );
+                rez = Math.abs( $what.width() - rez.width ) > 1  || Math.abs( $what.height() - rez.height ) > 1;
+
+            }
+
+            return rez;
+
+        },
+
+
+        // Load content into the slide
+        // ===========================
+
+        loadSlide : function( slide ) {
+
+            var self = this, type, $slide;
+            var ajaxLoad;
+
+            if ( slide.isLoading ) {
+                return;
+            }
+
+            if ( slide.isLoaded ) {
+                return;
+            }
+
+            slide.isLoading = true;
+
+            self.trigger( 'beforeLoad', slide );
+
+            type   = slide.type;
+            $slide = slide.$slide;
+
+            $slide
+                .off( 'refresh' )
+                .trigger( 'onReset' )
+                .addClass( 'fancybox-slide--' + ( type || 'unknown' ) )
+                .addClass( slide.opts.slideClass );
+
+            // Create content depending on the type
+
+            switch ( type ) {
+
+                case 'image':
+
+                    self.setImage( slide );
+
+                break;
+
+                case 'iframe':
+
+                    self.setIframe( slide );
+
+                break;
+
+                case 'html':
+
+                    self.setContent( slide, slide.src || slide.content );
+
+                break;
+
+                case 'inline':
+
+                    if ( $( slide.src ).length ) {
+                        self.setContent( slide, $( slide.src ) );
+
+                    } else {
+                        self.setError( slide );
+                    }
+
+                break;
+
+                case 'ajax':
+
+                    self.showLoading( slide );
+
+                    ajaxLoad = $.ajax( $.extend( {}, slide.opts.ajax.settings, {
+                        url : slide.src,
+                        success : function ( data, textStatus ) {
+
+                            if ( textStatus === 'success' ) {
+                                self.setContent( slide, data );
+                            }
+
+                        },
+                        error : function ( jqXHR, textStatus ) {
+
+                            if ( jqXHR && textStatus !== 'abort' ) {
+                                self.setError( slide );
+                            }
+
+                        }
+                    }));
+
+                    $slide.one( 'onReset', function () {
+                        ajaxLoad.abort();
+                    });
+
+                break;
+
+                default:
+
+                    self.setError( slide );
+
+                break;
+
+            }
+
+            return true;
+
+        },
+
+
+        // Use thumbnail image, if possible
+        // ================================
+
+        setImage : function( slide ) {
+
+            var self   = this;
+            var srcset = slide.opts.image.srcset;
+
+            var found, temp, pxRatio, windowWidth;
+
+            // If we have "srcset", then we need to find matching "src" value.
+            // This is necessary, because when you set an src attribute, the browser will preload the image
+            // before any javascript or even CSS is applied.
+            if ( srcset ) {
+                pxRatio     = window.devicePixelRatio || 1;
+                windowWidth = window.innerWidth  * pxRatio;
+
+                temp = srcset.split(',').map(function ( el ) {
+                       var ret = {};
+
+                       el.trim().split(/\s+/).forEach(function ( el, i ) {
+                        var value = parseInt( el.substring(0, el.length - 1), 10 );
+
+                               if ( i === 0 ) {
+                                       return ( ret.url = el );
+                               }
+
+                        if ( value ) {
+                            ret.value   = value;
+                            ret.postfix = el[ el.length - 1 ];
+                        }
+
+                       });
+
+                       return ret;
+               });
+
+                // Sort by value
+                temp.sort(function (a, b) {
+                  return a.value - b.value;
+                });
+
+                // Ok, now we have an array of all srcset values
+                for ( var j = 0; j < temp.length; j++ ) {
+                    var el = temp[ j ];
+
+                    if ( ( el.postfix === 'w' && el.value >= windowWidth ) || ( el.postfix === 'x' && el.value >= pxRatio ) ) {
+                        found = el;
+                        break;
+                    }
+                }
+
+                // If not found, take the last one
+                if ( !found && temp.length ) {
+                    found = temp[ temp.length - 1 ];
+                }
+
+                if ( found ) {
+                    slide.src = found.url;
+
+                    // If we have default width/height values, we can calculate height for matching source
+                    if ( slide.width && slide.height && found.postfix == 'w' ) {
+                        slide.height = ( slide.width / slide.height ) * found.value;
+                        slide.width  = found.value;
+                    }
+                }
+            }
+
+            // This will be wrapper containing both ghost and actual image
+            slide.$content = $('<div class="fancybox-image-wrap"></div>')
+                .addClass( 'fancybox-is-hidden' )
+                .appendTo( slide.$slide );
+
+
+            // If we have a thumbnail, we can display it while actual image is loading
+            // Users will not stare at black screen and actual image will appear gradually
+            if ( slide.opts.preload !== false && slide.opts.width && slide.opts.height && ( slide.opts.thumb || slide.opts.$thumb ) ) {
+
+                slide.width  = slide.opts.width;
+                slide.height = slide.opts.height;
+
+                slide.$ghost = $('<img />')
+                    .one('error', function() {
+
+                        $(this).remove();
+
+                        slide.$ghost = null;
+
+                        self.setBigImage( slide );
+
+                    })
+                    .one('load', function() {
+
+                        self.afterLoad( slide );
+
+                        self.setBigImage( slide );
+
+                    })
+                    .addClass( 'fancybox-image' )
+                    .appendTo( slide.$content )
+                    .attr( 'src', slide.opts.thumb || slide.opts.$thumb.attr( 'src' ) );
+
+            } else {
+
+                self.setBigImage( slide );
+
+            }
+
+        },
+
+
+        // Create full-size image
+        // ======================
+
+        setBigImage : function ( slide ) {
+            var self = this;
+            var $img = $('<img />');
+
+            slide.$image = $img
+                .one('error', function() {
+
+                    self.setError( slide );
+
+                })
+                .one('load', function() {
+
+                    // Clear timeout that checks if loading icon needs to be displayed
+                    clearTimeout( slide.timouts );
+
+                    slide.timouts = null;
+
+                    if ( self.isClosing ) {
+                        return;
+                    }
+
+                    slide.width  = this.naturalWidth;
+                    slide.height = this.naturalHeight;
+
+                    if ( slide.opts.image.srcset ) {
+                        $img.attr( 'sizes', '100vw' ).attr( 'srcset', slide.opts.image.srcset );
+                    }
+
+                    self.hideLoading( slide );
+
+                    if ( slide.$ghost ) {
+
+                        slide.timouts = setTimeout(function() {
+                            slide.timouts = null;
+
+                            slide.$ghost.hide();
+
+                        }, Math.min( 300, Math.max( 1000, slide.height / 1600 ) ) );
+
+                    } else {
+                        self.afterLoad( slide );
+                    }
+
+                })
+                .addClass( 'fancybox-image' )
+                .attr('src', slide.src)
+                .appendTo( slide.$content );
+
+            if ( $img[0].complete ) {
+                  $img.trigger( 'load' );
+
+            } else if( $img[0].error ) {
+                 $img.trigger( 'error' );
+
+            } else {
+
+                slide.timouts = setTimeout(function() {
+                    if ( !$img[0].complete && !slide.hasError ) {
+                        self.showLoading( slide );
+                    }
+
+                }, 100);
+
+            }
+
+        },
+
+
+        // Create iframe wrapper, iframe and bindings
+        // ==========================================
+
+        setIframe : function( slide ) {
+            var self   = this,
+                opts    = slide.opts.iframe,
+                $slide = slide.$slide,
+                $iframe;
+
+            slide.$content = $('<div class="fancybox-content' + ( opts.preload ? ' fancybox-is-hidden' : '' ) + '"></div>')
+                .css( opts.css )
+                .appendTo( $slide );
+
+            $iframe = $( opts.tpl.replace(/\{rnd\}/g, new Date().getTime()) )
+                .attr( opts.attr )
+                .appendTo( slide.$content );
+
+            if ( opts.preload ) {
+
+                self.showLoading( slide );
+
+                // Unfortunately, it is not always possible to determine if iframe is successfully loaded
+                // (due to browser security policy)
+
+                $iframe.on('load.fb error.fb', function(e) {
+                    this.isReady = 1;
+
+                    slide.$slide.trigger( 'refresh' );
+
+                    self.afterLoad( slide );
+                });
+
+                // Recalculate iframe content size
+                // ===============================
+
+                $slide.on('refresh.fb', function() {
+                    var $wrap = slide.$content,
+                        $contents,
+                        $body,
+                        scrollWidth,
+                        frameWidth,
+                        frameHeight;
+
+                    if ( $iframe[0].isReady !== 1 ) {
+                        return;
+                    }
+
+                    // Check if content is accessible,
+                    // it will fail if frame is not with the same origin
+
+                    try {
+                        $contents = $iframe.contents();
+                        $body     = $contents.find('body');
+
+                    } catch (ignore) {}
+
+                    // Calculate dimensions for the wrapper
+                    if ( $body && $body.length && !( opts.css.width !== undefined && opts.css.height !== undefined ) ) {
+
+                        scrollWidth = $iframe[0].contentWindow.document.documentElement.scrollWidth;
+
+                        frameWidth     = Math.ceil( $body.outerWidth(true) + ( $wrap.width() - scrollWidth ) );
+                        frameHeight    = Math.ceil( $body.outerHeight(true) );
+
+                        // Resize wrapper to fit iframe content
+                        $wrap.css({
+                            'width'  : opts.css.width  === undefined ? frameWidth  + ( $wrap.outerWidth()  - $wrap.innerWidth() )  : opts.css.width,
+                            'height' : opts.css.height === undefined ? frameHeight + ( $wrap.outerHeight() - $wrap.innerHeight() ) : opts.css.height
+                        });
+
+                    }
+
+                    $wrap.removeClass( 'fancybox-is-hidden' );
+
+                });
+
+            } else {
+
+                this.afterLoad( slide );
+
+            }
+
+            $iframe.attr( 'src', slide.src );
+
+            if ( slide.opts.smallBtn === true ) {
+                slide.$content.prepend( self.translate( slide, slide.opts.btnTpl.smallBtn ) );
+            }
+
+            // Remove iframe if closing or changing gallery item
+            $slide.one( 'onReset', function () {
+
+                // This helps IE not to throw errors when closing
+                try {
+
+                    $( this ).find( 'iframe' ).hide().attr( 'src', '//about:blank' );
+
+                } catch ( ignore ) {}
+
+                $( this ).empty();
+
+                slide.isLoaded = false;
+
+            });
+
+        },
+
+
+        // Wrap and append content to the slide
+        // ======================================
+
+        setContent : function ( slide, content ) {
+
+            var self = this;
+
+            if ( self.isClosing ) {
+                return;
+            }
+
+            self.hideLoading( slide );
+
+            slide.$slide.empty();
+
+            if ( isQuery( content ) && content.parent().length ) {
+
+                // If content is a jQuery object, then it will be moved to the slide.
+                // The placeholder is created so we will know where to put it back.
+                // If user is navigating gallery fast, then the content might be already inside fancyBox
+                // =====================================================================================
+
+                // Make sure content is not already moved to fancyBox
+                content.parent( '.fancybox-slide--inline' ).trigger( 'onReset' );
+
+                // Create temporary element marking original place of the content
+                slide.$placeholder = $( '<div></div>' ).hide().insertAfter( content );
+
+                // Make sure content is visible
+                content.css('display', 'inline-block');
+
+            } else if ( !slide.hasError ) {
+
+                // If content is just a plain text, try to convert it to html
+                if ( $.type( content ) === 'string' ) {
+                    content = $('<div>').append( $.trim( content ) ).contents();
+
+                    // If we have text node, then add wrapping element to make vertical alignment work
+                    if ( content[0].nodeType === 3 ) {
+                        content = $('<div>').html( content );
+                    }
+                }
+
+                // If "filter" option is provided, then filter content
+                if ( slide.opts.filter ) {
+                    content = $('<div>').html( content ).find( slide.opts.filter );
+                }
+
+            }
+
+            slide.$slide.one('onReset', function () {
+
+                // Put content back
+                if ( slide.$placeholder ) {
+                    slide.$placeholder.after( content.hide() ).remove();
+
+                    slide.$placeholder = null;
+                }
+
+                // Remove custom close button
+                if ( slide.$smallBtn ) {
+                    slide.$smallBtn.remove();
+
+                    slide.$smallBtn = null;
+                }
+
+                // Remove content and mark slide as not loaded
+                if ( !slide.hasError ) {
+                    $(this).empty();
+
+                    slide.isLoaded = false;
+                }
+
+            });
+
+            slide.$content = $( content ).appendTo( slide.$slide );
+
+            if ( slide.opts.smallBtn && !slide.$smallBtn ) {
+                slide.$smallBtn = $( self.translate( slide, slide.opts.btnTpl.smallBtn ) ).appendTo( slide.$content );
+            }
+
+            this.afterLoad( slide );
+        },
+
+        // Display error message
+        // =====================
+
+        setError : function ( slide ) {
+
+            slide.hasError = true;
+
+            slide.$slide.removeClass( 'fancybox-slide--' + slide.type );
+
+            this.setContent( slide, this.translate( slide, slide.opts.errorTpl ) );
+
+        },
+
+
+        // Show loading icon inside the slide
+        // ==================================
+
+        showLoading : function( slide ) {
+
+            var self = this;
+
+            slide = slide || self.current;
+
+            if ( slide && !slide.$spinner ) {
+                slide.$spinner = $( self.opts.spinnerTpl ).appendTo( slide.$slide );
+            }
+
+        },
+
+        // Remove loading icon from the slide
+        // ==================================
+
+        hideLoading : function( slide ) {
+
+            var self = this;
+
+            slide = slide || self.current;
+
+            if ( slide && slide.$spinner ) {
+                slide.$spinner.remove();
+
+                delete slide.$spinner;
+            }
+
+        },
+
+
+        // Adjustments after slide content has been loaded
+        // ===============================================
+
+        afterLoad : function( slide ) {
+
+            var self = this;
+
+            if ( self.isClosing ) {
+                return;
+            }
+
+            slide.isLoading = false;
+            slide.isLoaded  = true;
+
+            self.trigger( 'afterLoad', slide );
+
+            self.hideLoading( slide );
+
+            if ( slide.opts.protect && slide.$content && !slide.hasError ) {
+
+                // Disable right click
+                slide.$content.on( 'contextmenu.fb', function( e ) {
+                     if ( e.button == 2 ) {
+                         e.preventDefault();
+                     }
+
+                    return true;
+                });
+
+                // Add fake element on top of the image
+                // This makes a bit harder for user to select image
+                if ( slide.type === 'image' ) {
+                    $( '<div class="fancybox-spaceball"></div>' ).appendTo( slide.$content );
+                }
+
+            }
+
+            self.revealContent( slide );
+
+        },
+
+
+        // Make content visible
+        // This method is called right after content has been loaded or
+        // user navigates gallery and transition should start
+        // ============================================================
+
+        revealContent : function( slide ) {
+
+            var self   = this;
+            var $slide = slide.$slide;
+
+            var effect, effectClassName, duration, opacity, end, start = false;
+
+            effect   = slide.opts[ self.firstRun ? 'animationEffect'   : 'transitionEffect' ];
+            duration = slide.opts[ self.firstRun ? 'animationDuration' : 'transitionDuration' ];
+
+            duration = parseInt( slide.forcedDuration === undefined ? duration : slide.forcedDuration, 10 );
+
+            if ( slide.isMoved || slide.pos !== self.currPos || !duration ) {
+                effect = false;
+            }
+
+            // Check if can zoom
+            if ( effect === 'zoom' && !( slide.pos === self.currPos && duration && slide.type === 'image' && !slide.hasError && ( start = self.getThumbPos( slide ) ) ) ) {
+                effect = 'fade';
+            }
+
+
+            // Zoom animation
+            // ==============
+
+            if ( effect === 'zoom' ) {
+                end = self.getFitPos( slide );
+
+                end.scaleX = end.width  / start.width;
+                end.scaleY = end.height / start.height;
+
+                delete end.width;
+                delete end.height;
+
+                // Check if we need to animate opacity
+                opacity = slide.opts.zoomOpacity;
+
+                if ( opacity == 'auto' ) {
+                    opacity = Math.abs( slide.width / slide.height - start.width / start.height ) > 0.1;
+                }
+
+                if ( opacity ) {
+                    start.opacity = 0.1;
+                    end.opacity   = 1;
+                }
+
+                // Draw image at start position
+                $.fancybox.setTranslate( slide.$content.removeClass( 'fancybox-is-hidden' ), start );
+
+                forceRedraw( slide.$content );
+
+                // Start animation
+                $.fancybox.animate( slide.$content, end, duration, function() {
+                    self.complete();
+                });
+
+                return;
+            }
+
+
+            self.updateSlide( slide );
+
+
+            // Simply show content
+            // ===================
+
+            if ( !effect ) {
+                forceRedraw( $slide );
+
+                slide.$content.removeClass( 'fancybox-is-hidden' );
+
+                if ( slide.pos === self.currPos ) {
+                    self.complete();
+                }
+
+                return;
+            }
+
+            $.fancybox.stop( $slide );
+
+            effectClassName = 'fancybox-animated fancybox-slide--' + ( slide.pos > self.prevPos ? 'next' : 'previous' ) + ' fancybox-fx-' + effect;
+
+            $slide.removeAttr( 'style' ).removeClass( 'fancybox-slide--current fancybox-slide--next fancybox-slide--previous' ).addClass( effectClassName );
+
+            slide.$content.removeClass( 'fancybox-is-hidden' );
+
+            //Force reflow for CSS3 transitions
+            forceRedraw( $slide );
+
+            $.fancybox.animate( $slide, 'fancybox-slide--current', duration, function(e) {
+                $slide.removeClass( effectClassName ).removeAttr( 'style' );
+
+                if ( slide.pos === self.currPos ) {
+                    self.complete();
+                }
+
+            }, true);
+
+        },
+
+
+        // Check if we can and have to zoom from thumbnail
+        //================================================
+
+        getThumbPos : function( slide ) {
+
+            var self = this;
+            var rez  = false;
+
+            // Check if element is inside the viewport by at least 1 pixel
+            var isElementVisible = function( $el ) {
+                var element = $el[0];
+
+                var elementRect = element.getBoundingClientRect();
+                var parentRects = [];
+
+                var visibleInAllParents;
+
+                while ( element.parentElement !== null ) {
+                    if ( $(element.parentElement).css('overflow') === 'hidden'  || $(element.parentElement).css('overflow') === 'auto' ) {
+                        parentRects.push(element.parentElement.getBoundingClientRect());
+                    }
+
+                    element = element.parentElement;
+                }
+
+                visibleInAllParents = parentRects.every(function(parentRect){
+                    var visiblePixelX = Math.min(elementRect.right, parentRect.right) - Math.max(elementRect.left, parentRect.left);
+                    var visiblePixelY = Math.min(elementRect.bottom, parentRect.bottom) - Math.max(elementRect.top, parentRect.top);
+
+                    return visiblePixelX > 0 && visiblePixelY > 0;
+                });
+
+                return visibleInAllParents &&
+                    elementRect.bottom > 0 && elementRect.right > 0 &&
+                    elementRect.left < $(window).width() && elementRect.top < $(window).height();
+            };
+
+            var $thumb   = slide.opts.$thumb;
+            var thumbPos = $thumb ? $thumb.offset() : 0;
+            var slidePos;
+
+            if ( thumbPos && $thumb[0].ownerDocument === document && isElementVisible( $thumb ) ) {
+                slidePos = self.$refs.stage.offset();
+
+                rez = {
+                    top    : thumbPos.top  - slidePos.top  + parseFloat( $thumb.css( "border-top-width" ) || 0 ),
+                    left   : thumbPos.left - slidePos.left + parseFloat( $thumb.css( "border-left-width" ) || 0 ),
+                    width  : $thumb.width(),
+                    height : $thumb.height(),
+                    scaleX : 1,
+                    scaleY : 1
+                };
+            }
+
+            return rez;
+        },
+
+
+        // Final adjustments after current gallery item is moved to position
+        // and it`s content is loaded
+        // ==================================================================
+
+        complete : function() {
+
+            var self = this;
+
+            var current = self.current;
+            var slides  = {};
+
+            if ( current.isMoved || !current.isLoaded || current.isComplete ) {
+                return;
+            }
+
+            current.isComplete = true;
+
+            current.$slide.siblings().trigger( 'onReset' );
+
+            // Trigger any CSS3 transiton inside the slide
+            forceRedraw( current.$slide );
+
+            current.$slide.addClass( 'fancybox-slide--complete' );
+
+            // Remove unnecessary slides
+            $.each( self.slides, function( key, slide ) {
+                if ( slide.pos >= self.currPos - 1 && slide.pos <= self.currPos + 1 ) {
+                    slides[ slide.pos ] = slide;
+
+                } else if ( slide ) {
+
+                    $.fancybox.stop( slide.$slide );
+
+                    slide.$slide.unbind().remove();
+                }
+            });
+
+            self.slides = slides;
+
+            self.updateCursor();
+
+            self.trigger( 'afterShow' );
+
+            // Try to focus on the first focusable element
+            if ( $( document.activeElement ).is( '[disabled]' ) || ( current.opts.autoFocus && !( current.type == 'image' || current.type === 'iframe' ) ) ) {
+                self.focus();
+            }
+
+        },
+
+
+        // Preload next and previous slides
+        // ================================
+
+        preload : function() {
+            var self = this;
+            var next, prev;
+
+            if ( self.group.length < 2 ) {
+                return;
+            }
+
+            next  = self.slides[ self.currPos + 1 ];
+            prev  = self.slides[ self.currPos - 1 ];
+
+            if ( next && next.type === 'image' ) {
+                self.loadSlide( next );
+            }
+
+            if ( prev && prev.type === 'image' ) {
+                self.loadSlide( prev );
+            }
+
+        },
+
+
+        // Try to find and focus on the first focusable element
+        // ====================================================
+
+        focus : function() {
+            var current = this.current;
+            var $el;
+
+            if ( this.isClosing ) {
+                return;
+            }
+
+            // Skip for images and iframes
+            $el = current && current.isComplete ? current.$slide.find('button,:input,[tabindex],a').filter(':not([disabled]):visible:first') : null;
+            $el = $el && $el.length ? $el : this.$refs.container;
+
+            $el.focus();
+        },
+
+
+        // Activates current instance - brings container to the front and enables keyboard,
+        // notifies other instances about deactivating
+        // =================================================================================
+
+        activate : function () {
+            var self = this;
+
+            // Deactivate all instances
+            $( '.fancybox-container' ).each(function () {
+                var instance = $(this).data( 'FancyBox' );
+
+                // Skip self and closing instances
+                if (instance && instance.uid !== self.uid && !instance.isClosing) {
+                    instance.trigger( 'onDeactivate' );
+                }
+
+            });
+
+            if ( self.current ) {
+                if ( self.$refs.container.index() > 0 ) {
+                    self.$refs.container.prependTo( document.body );
+                }
+
+                self.updateControls();
+            }
+
+            self.trigger( 'onActivate' );
+
+            self.addEvents();
+
+        },
+
+
+        // Start closing procedure
+        // This will start "zoom-out" animation if needed and clean everything up afterwards
+        // =================================================================================
+
+        close : function( e, d ) {
+
+            var self    = this;
+            var current = self.current;
+
+            var effect, duration;
+            var $what, opacity, start, end;
+
+            var done = function() {
+                self.cleanUp( e );
+            };
+
+            if ( self.isClosing ) {
+                return false;
+            }
+
+            self.isClosing = true;
+
+            // If beforeClose callback prevents closing, make sure content is centered
+            if ( self.trigger( 'beforeClose', e ) === false ) {
+                self.isClosing = false;
+
+                requestAFrame(function() {
+                    self.update();
+                });
+
+                return false;
+            }
+
+            // Remove all events
+            // If there are multiple instances, they will be set again by "activate" method
+            self.removeEvents();
+
+            if ( current.timouts ) {
+                clearTimeout( current.timouts );
+            }
+
+            $what    = current.$content;
+            effect   = current.opts.animationEffect;
+            duration = $.isNumeric( d ) ? d : ( effect ? current.opts.animationDuration : 0 );
+
+            // Remove other slides
+            current.$slide.off( transitionEnd ).removeClass( 'fancybox-slide--complete fancybox-slide--next fancybox-slide--previous fancybox-animated' );
+
+            current.$slide.siblings().trigger( 'onReset' ).remove();
+
+            // Trigger animations
+            if ( duration ) {
+                self.$refs.container.removeClass( 'fancybox-is-open' ).addClass( 'fancybox-is-closing' );
+            }
+
+            // Clean up
+            self.hideLoading( current );
+
+            self.hideControls();
+
+            self.updateCursor();
+
+            // Check if possible to zoom-out
+            if ( effect === 'zoom' && !( e !== true && $what && duration && current.type === 'image' && !current.hasError && ( end = self.getThumbPos( current ) ) ) ) {
+                effect = 'fade';
+            }
+
+            if ( effect === 'zoom' ) {
+                $.fancybox.stop( $what );
+
+                start = $.fancybox.getTranslate( $what );
+
+                start.width  = start.width  * start.scaleX;
+                start.height = start.height * start.scaleY;
+
+                // Check if we need to animate opacity
+                opacity = current.opts.zoomOpacity;
+
+                if ( opacity == 'auto' ) {
+                    opacity = Math.abs( current.width / current.height - end.width / end.height ) > 0.1;
+                }
+
+                if ( opacity ) {
+                    end.opacity = 0;
+                }
+
+                start.scaleX = start.width  / end.width;
+                start.scaleY = start.height / end.height;
+
+                start.width  = end.width;
+                start.height = end.height;
+
+                $.fancybox.setTranslate( current.$content, start );
+
+                $.fancybox.animate( current.$content, end, duration, done );
+
+                return true;
+            }
+
+            if ( effect && duration ) {
+
+                // If skip animation
+                if ( e === true ) {
+                    setTimeout( done, duration );
+
+                } else {
+                    $.fancybox.animate( current.$slide.removeClass( 'fancybox-slide--current' ), 'fancybox-animated fancybox-slide--previous fancybox-fx-' + effect, duration, done );
+                }
+
+            } else {
+                done();
+            }
+
+            return true;
+        },
+
+
+        // Final adjustments after removing the instance
+        // =============================================
+
+        cleanUp : function( e ) {
+            var self = this,
+                instance;
+
+            self.current.$slide.trigger( 'onReset' );
+
+            self.$refs.container.empty().remove();
+
+            self.trigger( 'afterClose', e );
+
+            // Place back focus
+            if ( self.$lastFocus && !!self.current.opts.backFocus ) {
+                self.$lastFocus.focus();
+            }
+
+            self.current = null;
+
+            // Check if there are other instances
+            instance = $.fancybox.getInstance();
+
+            if ( instance ) {
+                instance.activate();
+
+            } else {
+
+                $W.scrollTop( self.scrollTop ).scrollLeft( self.scrollLeft );
+
+                $( 'html' ).removeClass( 'fancybox-enabled' );
+
+                $( '#fancybox-style-noscroll' ).remove();
+            }
+
+        },
+
+
+        // Call callback and trigger an event
+        // ==================================
+
+        trigger : function( name, slide ) {
+            var args  = Array.prototype.slice.call(arguments, 1),
+                self  = this,
+                obj   = slide && slide.opts ? slide : self.current,
+                rez;
+
+            if ( obj ) {
+                args.unshift( obj );
+
+            } else {
+                obj = self;
+            }
+
+            args.unshift( self );
+
+            if ( $.isFunction( obj.opts[ name ] ) ) {
+                rez = obj.opts[ name ].apply( obj, args );
+            }
+
+            if ( rez === false ) {
+                return rez;
+            }
+
+            if ( name === 'afterClose' ) {
+                $D.trigger( name + '.fb', args );
+
+            } else {
+                self.$refs.container.trigger( name + '.fb', args );
+            }
+
+        },
+
+
+        // Update infobar values, navigation button states and reveal caption
+        // ==================================================================
+
+        updateControls : function ( force ) {
+
+            var self = this;
+
+            var current  = self.current;
+            var index    = current.index;
+            var opts     = current.opts;
+            var caption  = opts.caption;
+            var $caption = self.$refs.caption;
+
+            // Recalculate content dimensions
+            current.$slide.trigger( 'refresh' );
+
+            self.$caption = caption && caption.length ? $caption.html( caption ) : null;
+
+            if ( !self.isHiddenControls ) {
+                self.showControls();
+            }
+
+            // Update info and navigation elements
+            $('[data-fancybox-count]').html( self.group.length );
+            $('[data-fancybox-index]').html( index + 1 );
+
+            $('[data-fancybox-prev]').prop('disabled', ( !opts.loop && index <= 0 ) );
+            $('[data-fancybox-next]').prop('disabled', ( !opts.loop && index >= self.group.length - 1 ) );
+
+        },
+
+        // Hide toolbar and caption
+        // ========================
+
+        hideControls : function () {
+
+            this.isHiddenControls = true;
+
+            this.$refs.container.removeClass('fancybox-show-infobar fancybox-show-toolbar fancybox-show-caption fancybox-show-nav');
+
+        },
+
+        showControls : function() {
+
+            var self = this;
+            var opts = self.current ? self.current.opts : self.opts;
+            var $container = self.$refs.container;
+
+            self.isHiddenControls   = false;
+            self.idleSecondsCounter = 0;
+
+            $container
+                .toggleClass('fancybox-show-toolbar', !!( opts.toolbar && opts.buttons ) )
+                .toggleClass('fancybox-show-infobar', !!( opts.infobar && self.group.length > 1 ) )
+                .toggleClass('fancybox-show-nav',     !!( opts.arrows && self.group.length > 1 ) )
+                .toggleClass('fancybox-is-modal',     !!opts.modal );
+
+            if ( self.$caption ) {
+                $container.addClass( 'fancybox-show-caption ');
+
+            } else {
+               $container.removeClass( 'fancybox-show-caption' );
+           }
+
+       },
+
+
+       // Toggle toolbar and caption
+       // ==========================
+
+       toggleControls : function() {
+
+           if ( this.isHiddenControls ) {
+               this.showControls();
+
+           } else {
+               this.hideControls();
+           }
+
+       },
+
+
+    });
+
+
+    $.fancybox = {
+
+        version  : "3.1.24",
+        defaults : defaults,
+
+
+        // Get current instance and execute a command.
+        //
+        // Examples of usage:
+        //
+        //   $instance = $.fancybox.getInstance();
+        //   $.fancybox.getInstance().jumpTo( 1 );
+        //   $.fancybox.getInstance( 'jumpTo', 1 );
+        //   $.fancybox.getInstance( function() {
+        //       console.info( this.currIndex );
+        //   });
+        // ======================================================
+
+        getInstance : function ( command ) {
+            var instance = $('.fancybox-container:not(".fancybox-is-closing"):first').data( 'FancyBox' );
+            var args     = Array.prototype.slice.call(arguments, 1);
+
+            if ( instance instanceof FancyBox ) {
+
+                if ( $.type( command ) === 'string' ) {
+                    instance[ command ].apply( instance, args );
+
+                } else if ( $.type( command ) === 'function' ) {
+                    command.apply( instance, args );
+
+                }
+
+                return instance;
+            }
+
+            return false;
+
+        },
+
+
+        // Create new instance
+        // ===================
+
+        open : function ( items, opts, index ) {
+            return new FancyBox( items, opts, index );
+        },
+
+
+        // Close current or all instances
+        // ==============================
+
+        close : function ( all ) {
+            var instance = this.getInstance();
+
+            if ( instance ) {
+                instance.close();
+
+                // Try to find and close next instance
+
+                if ( all === true ) {
+                    this.close();
+                }
+            }
+
+        },
+
+        // Close instances and unbind all events
+        // ==============================
+
+        destroy : function() {
+
+            this.close( true );
+
+            $D.off( 'click.fb-start' );
+
+        },
+
+
+        // Try to detect mobile devices
+        // ============================
+
+        isMobile : document.createTouch !== undefined && /Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.userAgent),
+
+
+        // Detect if 'translate3d' support is available
+        // ============================================
+
+        use3d : (function() {
+            var div = document.createElement('div');
+
+            return window.getComputedStyle && window.getComputedStyle( div ).getPropertyValue('transform') && !(document.documentMode && document.documentMode < 11);
+        }()),
+
+
+        // Helper function to get current visual state of an element
+        // returns array[ top, left, horizontal-scale, vertical-scale, opacity ]
+        // =====================================================================
+
+        getTranslate : function( $el ) {
+            var matrix;
+
+            if ( !$el || !$el.length ) {
+                return false;
+            }
+
+            matrix  = $el.eq( 0 ).css('transform');
+
+            if ( matrix && matrix.indexOf( 'matrix' ) !== -1 ) {
+                matrix = matrix.split('(')[1];
+                matrix = matrix.split(')')[0];
+                matrix = matrix.split(',');
+            } else {
+                matrix = [];
+            }
+
+            if ( matrix.length ) {
+
+                // If IE
+                if ( matrix.length > 10 ) {
+                    matrix = [ matrix[13], matrix[12], matrix[0], matrix[5] ];
+
+                } else {
+                    matrix = [ matrix[5], matrix[4], matrix[0], matrix[3]];
+                }
+
+                matrix = matrix.map(parseFloat);
+
+            } else {
+                matrix = [ 0, 0, 1, 1 ];
+
+                var transRegex = /\.*translate\((.*)px,(.*)px\)/i;
+                var transRez = transRegex.exec( $el.eq( 0 ).attr('style') );
+
+                if ( transRez ) {
+                    matrix[ 0 ] = parseFloat( transRez[2] );
+                    matrix[ 1 ] = parseFloat( transRez[1] );
+                }
+            }
+
+            return {
+                top     : matrix[ 0 ],
+                left    : matrix[ 1 ],
+                scaleX  : matrix[ 2 ],
+                scaleY  : matrix[ 3 ],
+                opacity : parseFloat( $el.css('opacity') ),
+                width   : $el.width(),
+                height  : $el.height()
+            };
+
+        },
+
+
+        // Shortcut for setting "translate3d" properties for element
+        // Can set be used to set opacity, too
+        // ========================================================
+
+        setTranslate : function( $el, props ) {
+            var str  = '';
+            var css  = {};
+
+            if ( !$el || !props ) {
+                return;
+            }
+
+            if ( props.left !== undefined || props.top !== undefined ) {
+                str = ( props.left === undefined ? $el.position().left : props.left )  + 'px, ' + ( props.top === undefined ? $el.position().top : props.top ) + 'px';
+
+                if ( this.use3d ) {
+                    str = 'translate3d(' + str + ', 0px)';
+
+                } else {
+                    str = 'translate(' + str + ')';
+                }
+            }
+
+            if ( props.scaleX !== undefined && props.scaleY !== undefined ) {
+                str = (str.length ? str + ' ' : '') + 'scale(' + props.scaleX + ', ' + props.scaleY + ')';
+            }
+
+            if ( str.length ) {
+                css.transform = str;
+            }
+
+            if ( props.opacity !== undefined ) {
+                css.opacity = props.opacity;
+            }
+
+            if ( props.width !== undefined ) {
+                css.width = props.width;
+            }
+
+            if ( props.height !== undefined ) {
+                css.height = props.height;
+            }
+
+            return $el.css( css );
+        },
+
+
+        // Simple CSS transition handler
+        // =============================
+
+        animate : function ( $el, to, duration, callback, leaveAnimationName ) {
+            var event = transitionEnd || 'transitionend';
+
+            if ( $.isFunction( duration ) ) {
+                callback = duration;
+                duration = null;
+            }
+
+            if ( !$.isPlainObject( to ) ) {
+                $el.removeAttr('style');
+            }
+
+            $el.on( event, function(e) {
+
+                // Skip events from child elements and z-index change
+                if ( e && e.originalEvent && ( !$el.is( e.originalEvent.target ) || e.originalEvent.propertyName == 'z-index' ) ) {
+                    return;
+                }
+
+                $el.off( event );
+
+                if ( $.isPlainObject( to ) ) {
+
+                    if ( to.scaleX !== undefined && to.scaleY !== undefined ) {
+                        $el.css( 'transition-duration', '0ms' );
+
+                        to.width  = Math.round( $el.width()  * to.scaleX );
+                        to.height = Math.round( $el.height() * to.scaleY );
+
+                        to.scaleX = 1;
+                        to.scaleY = 1;
+
+                        $.fancybox.setTranslate( $el, to );
+                    }
+
+                } else if ( leaveAnimationName !== true ) {
+                    $el.removeClass( to );
+                }
+
+                if ( $.isFunction( callback ) ) {
+                    callback( e );
+                }
+
+            });
+
+            if ( $.isNumeric( duration ) ) {
+                $el.css( 'transition-duration', duration + 'ms' );
+            }
+
+            if ( $.isPlainObject( to ) ) {
+                $.fancybox.setTranslate( $el, to );
+
+            } else {
+                $el.addClass( to );
+            }
+
+            $el.data("timer", setTimeout(function() {
+                $el.trigger( 'transitionend' );
+            }, duration + 16));
+
+        },
+
+        stop : function( $el ) {
+            clearTimeout( $el.data("timer") );
+
+            $el.off( transitionEnd );
+        }
+
+    };
+
+
+    // Default click handler for "fancyboxed" links
+    // ============================================
+
+    function _run( e ) {
+        var target     = e.currentTarget,
+            opts       = e.data ? e.data.options : {},
+            items      = opts.selector ? $( opts.selector ) : ( e.data ? e.data.items : [] ),
+            value      = $(target).attr( 'data-fancybox' ) || '',
+            index      = 0,
+            active  = $.fancybox.getInstance();
+
+        e.preventDefault();
+        e.stopPropagation();
+
+        // Avoid opening multiple times
+        if ( active && active.current.opts.$orig.is( target ) ) {
+            return;
+        }
+
+        // Get all related items and find index for clicked one
+        if ( value ) {
+            items = items.length ? items.filter( '[data-fancybox="' + value + '"]' ) : $( '[data-fancybox="' + value + '"]' );
+            index = items.index( target );
+
+            // Sometimes current item can not be found
+            // (for example, when slider clones items)
+            if ( index < 0 ) {
+                index = 0;
+            }
+
+        } else {
+            items = [ target ];
+        }
+
+        $.fancybox.open( items, opts, index );
+    }
+
+
+    // Create a jQuery plugin
+    // ======================
+
+    $.fn.fancybox = function (options) {
+        var selector;
+
+        options  = options || {};
+        selector = options.selector || false;
+
+        if ( selector ) {
+
+            $( 'body' ).off( 'click.fb-start', selector ).on( 'click.fb-start', selector, {
+                options : options
+            }, _run );
+
+        } else {
+
+            this.off( 'click.fb-start' ).on( 'click.fb-start', {
+                items   : this,
+                options : options
+            }, _run);
+
+        }
+
+        return this;
+    };
+
+
+    // Self initializing plugin
+    // ========================
+
+    $D.on( 'click.fb-start', '[data-fancybox]', _run );
+
+}( window, document, window.jQuery ));
+
+// ==========================================================================
+//
+// Media
+// Adds additional media type support
+//
+// ==========================================================================
+;(function ($) {
+
+       'use strict';
+
+       // Formats matching url to final form
+
+       var format = function (url, rez, params) {
+               if ( !url ) {
+                       return;
+               }
+
+               params = params || '';
+
+               if ( $.type(params) === "object" ) {
+                       params = $.param(params, true);
+               }
+
+               $.each(rez, function (key, value) {
+                       url = url.replace('$' + key, value || '');
+               });
+
+               if (params.length) {
+                       url += (url.indexOf('?') > 0 ? '&' : '?') + params;
+               }
+
+               return url;
+       };
+
+       // Object containing properties for each media type
+
+       var defaults = {
+               youtube : {
+                       matcher : /(youtube\.com|youtu\.be|youtube\-nocookie\.com)\/(watch\?(.*&)?v=|v\/|u\/|embed\/?)?(videoseries\?list=(.*)|[\w-]{11}|\?listType=(.*)&list=(.*))(.*)/i,
+                       params  : {
+                               autoplay : 1,
+                               autohide : 1,
+                               fs  : 1,
+                               rel : 0,
+                               hd  : 1,
+                               wmode : 'transparent',
+                               enablejsapi : 1,
+                               html5 : 1
+                       },
+                       paramPlace : 8,
+                       type  : 'iframe',
+                       url   : '//www.youtube.com/embed/$4',
+                       thumb : '//img.youtube.com/vi/$4/hqdefault.jpg'
+               },
+
+               vimeo : {
+                       matcher : /^.+vimeo.com\/(.*\/)?([\d]+)(.*)?/,
+                       params  : {
+                               autoplay : 1,
+                               hd : 1,
+                               show_title    : 1,
+                               show_byline   : 1,
+                               show_portrait : 0,
+                               fullscreen    : 1,
+                               api : 1
+                       },
+                       paramPlace : 3,
+                       type : 'iframe',
+                       url : '//player.vimeo.com/video/$2'
+               },
+
+               metacafe : {
+                       matcher : /metacafe.com\/watch\/(\d+)\/(.*)?/,
+                       type    : 'iframe',
+                       url     : '//www.metacafe.com/embed/$1/?ap=1'
+               },
+
+               dailymotion : {
+                       matcher : /dailymotion.com\/video\/(.*)\/?(.*)/,
+                       params : {
+                               additionalInfos : 0,
+                               autoStart : 1
+                       },
+                       type : 'iframe',
+                       url  : '//www.dailymotion.com/embed/video/$1'
+               },
+
+               vine : {
+                       matcher : /vine.co\/v\/([a-zA-Z0-9\?\=\-]+)/,
+                       type    : 'iframe',
+                       url     : '//vine.co/v/$1/embed/simple'
+               },
+
+               instagram : {
+                       matcher : /(instagr\.am|instagram\.com)\/p\/([a-zA-Z0-9_\-]+)\/?/i,
+                       type    : 'image',
+                       url     : '//$1/p/$2/media/?size=l'
+               },
+
+               // Examples:
+               // http://maps.google.com/?ll=48.857995,2.294297&spn=0.007666,0.021136&t=m&z=16
+               // https://www.google.com/maps/@37.7852006,-122.4146355,14.65z
+               // https://www.google.com/maps/place/Googleplex/@37.4220041,-122.0833494,17z/data=!4m5!3m4!1s0x0:0x6c296c66619367e0!8m2!3d37.4219998!4d-122.0840572
+               gmap_place : {
+                       matcher : /(maps\.)?google\.([a-z]{2,3}(\.[a-z]{2})?)\/(((maps\/(place\/(.*)\/)?\@(.*),(\d+.?\d+?)z))|(\?ll=))(.*)?/i,
+                       type    : 'iframe',
+                       url     : function (rez) {
+                               return '//maps.google.' + rez[2] + '/?ll=' + ( rez[9] ? rez[9] + '&z=' + Math.floor(  rez[10]  ) + ( rez[12] ? rez[12].replace(/^\//, "&") : '' )  : rez[12] ) + '&output=' + ( rez[12] && rez[12].indexOf('layer=c') > 0 ? 'svembed' : 'embed' );
+                       }
+               },
+
+               // Examples:
+               // https://www.google.com/maps/search/Empire+State+Building/
+               // https://www.google.com/maps/search/?api=1&query=centurylink+field
+               // https://www.google.com/maps/search/?api=1&query=47.5951518,-122.3316393
+               gmap_search : {
+                       matcher : /(maps\.)?google\.([a-z]{2,3}(\.[a-z]{2})?)\/(maps\/search\/)(.*)/i,
+                       type    : 'iframe',
+                       url     : function (rez) {
+                               return '//maps.google.' + rez[2] + '/maps?q=' + rez[5].replace('query=', 'q=').replace('api=1', '') + '&output=embed';
+                       }
+               }
+       };
+
+       $(document).on('onInit.fb', function (e, instance) {
+
+               $.each(instance.group, function( i, item ) {
+
+                       var url  = item.src || '',
+                               type = false,
+                               media,
+                               thumb,
+                               rez,
+                               params,
+                               urlParams,
+                               o,
+                               provider;
+
+                       // Skip items that already have content type
+                       if ( item.type ) {
+                               return;
+                       }
+
+                       media = $.extend( true, {}, defaults, item.opts.media );
+
+                       // Look for any matching media type
+                       $.each(media, function ( n, el ) {
+                               rez = url.match(el.matcher);
+                               o   = {};
+                               provider = n;
+
+                               if (!rez) {
+                                       return;
+                               }
+
+                               type = el.type;
+
+                               if ( el.paramPlace && rez[ el.paramPlace ] ) {
+                                       urlParams = rez[ el.paramPlace ];
+
+                                       if ( urlParams[ 0 ] == '?' ) {
+                                               urlParams = urlParams.substring(1);
+                                       }
+
+                                       urlParams = urlParams.split('&');
+
+                                       for ( var m = 0; m < urlParams.length; ++m ) {
+                                               var p = urlParams[ m ].split('=', 2);
+
+                                               if ( p.length == 2 ) {
+                                                       o[ p[0] ] = decodeURIComponent( p[1].replace(/\+/g, " ") );
+                                               }
+                                       }
+                               }
+
+                               params = $.extend( true, {}, el.params, item.opts[ n ], o );
+
+                               url   = $.type(el.url) === "function" ? el.url.call(this, rez, params, item) : format(el.url, rez, params);
+                               thumb = $.type(el.thumb) === "function" ? el.thumb.call(this, rez, params, item) : format(el.thumb, rez);
+
+                               if ( provider === 'vimeo' ) {
+                                       url = url.replace('&%23', '#');
+                               }
+
+                               return false;
+                       });
+
+                       // If it is found, then change content type and update the url
+
+                       if ( type ) {
+                               item.src  = url;
+                               item.type = type;
+
+                               if ( !item.opts.thumb && !( item.opts.$thumb && item.opts.$thumb.length ) ) {
+                                       item.opts.thumb = thumb;
+                               }
+
+                               if ( type === 'iframe' ) {
+                                       $.extend(true, item.opts, {
+                                               iframe : {
+                                                       preload : false,
+                                                       attr : {
+                                                               scrolling : "no"
+                                                       }
+                                               }
+                                       });
+
+                                       item.contentProvider = provider;
+
+                                       item.opts.slideClass += ' fancybox-slide--' + ( provider == 'gmap_place' || provider == 'gmap_search' ? 'map' : 'video' );
+                               }
+
+                       } else {
+
+                               // If no content type is found, then set it to `image` as fallback
+                               item.type = 'image';
+                       }
+
+               });
+
+       });
+
+}(window.jQuery));
+
+// ==========================================================================
+//
+// Guestures
+// Adds touch guestures, handles click and tap events
+//
+// ==========================================================================
+;(function (window, document, $) {
+       'use strict';
+
+       var requestAFrame = (function () {
+        return window.requestAnimationFrame ||
+                window.webkitRequestAnimationFrame ||
+                window.mozRequestAnimationFrame ||
+                window.oRequestAnimationFrame ||
+                // if all else fails, use setTimeout
+                function (callback) {
+                    return window.setTimeout(callback, 1000 / 60);
+                };
+    })();
+
+
+    var cancelAFrame = (function () {
+        return window.cancelAnimationFrame ||
+                window.webkitCancelAnimationFrame ||
+                window.mozCancelAnimationFrame ||
+                window.oCancelAnimationFrame ||
+                function (id) {
+                    window.clearTimeout(id);
+                };
+    })();
+
+
+       var pointers = function( e ) {
+               var result = [];
+
+               e = e.originalEvent || e || window.e;
+               e = e.touches && e.touches.length ? e.touches : ( e.changedTouches && e.changedTouches.length ? e.changedTouches : [ e ] );
+
+               for ( var key in e ) {
+
+                       if ( e[ key ].pageX ) {
+                               result.push( { x : e[ key ].pageX, y : e[ key ].pageY } );
+
+                       } else if ( e[ key ].clientX ) {
+                               result.push( { x : e[ key ].clientX, y : e[ key ].clientY } );
+                       }
+               }
+
+               return result;
+       };
+
+       var distance = function( point2, point1, what ) {
+               if ( !point1 || !point2 ) {
+                       return 0;
+               }
+
+               if ( what === 'x' ) {
+                       return point2.x - point1.x;
+
+               } else if ( what === 'y' ) {
+                       return point2.y - point1.y;
+               }
+
+               return Math.sqrt( Math.pow( point2.x - point1.x, 2 ) + Math.pow( point2.y - point1.y, 2 ) );
+       };
+
+       var isClickable = function( $el ) {
+               if ( $el.is('a,button,input,select,textarea') || $.isFunction( $el.get(0).onclick ) ) {
+                       return true;
+               }
+
+               // Check for attributes like data-fancybox-next or data-fancybox-close
+               for ( var i = 0, atts = $el[0].attributes, n = atts.length; i < n; i++ ) {
+            if ( atts[i].nodeName.substr(0, 14) === 'data-fancybox-' ) {
+                return true;
+            }
+        }
+
+               return false;
+       };
+
+       var hasScrollbars = function( el ) {
+               var overflowY = window.getComputedStyle( el )['overflow-y'];
+               var overflowX = window.getComputedStyle( el )['overflow-x'];
+
+               var vertical   = (overflowY === 'scroll' || overflowY === 'auto') && el.scrollHeight > el.clientHeight;
+               var horizontal = (overflowX === 'scroll' || overflowX === 'auto') && el.scrollWidth > el.clientWidth;
+
+               return vertical || horizontal;
+       };
+
+       var isScrollable = function ( $el ) {
+               var rez = false;
+
+               while ( true ) {
+                       rez     = hasScrollbars( $el.get(0) );
+
+                       if ( rez ) {
+                               break;
+                       }
+
+                       $el = $el.parent();
+
+                       if ( !$el.length || $el.hasClass( 'fancybox-stage' ) || $el.is( 'body' ) ) {
+                               break;
+                       }
+               }
+
+               return rez;
+       };
+
+
+       var Guestures = function ( instance ) {
+               var self = this;
+
+               self.instance = instance;
+
+               self.$bg        = instance.$refs.bg;
+               self.$stage     = instance.$refs.stage;
+               self.$container = instance.$refs.container;
+
+               self.destroy();
+
+               self.$container.on( 'touchstart.fb.touch mousedown.fb.touch', $.proxy(self, 'ontouchstart') );
+       };
+
+       Guestures.prototype.destroy = function() {
+               this.$container.off( '.fb.touch' );
+       };
+
+       Guestures.prototype.ontouchstart = function( e ) {
+               var self = this;
+
+               var $target  = $( e.target );
+               var instance = self.instance;
+               var current  = instance.current;
+               var $content = current.$content;
+
+               var isTouchDevice = ( e.type == 'touchstart' );
+
+               // Do not respond to both events
+               if ( isTouchDevice ) {
+               self.$container.off( 'mousedown.fb.touch' );
+           }
+
+               // Ignore clicks while zooming or closing
+               if ( !current || self.instance.isAnimating || self.instance.isClosing ) {
+                       e.stopPropagation();
+                       e.preventDefault();
+
+                       return;
+               }
+
+               // Ignore right click
+               if ( e.originalEvent && e.originalEvent.button == 2 ) {
+                       return;
+               }
+
+               // Ignore taping on links, buttons, input elements
+               if ( !$target.length || isClickable( $target ) || isClickable( $target.parent() ) ) {
+                       return;
+               }
+
+               // Ignore clicks on the scrollbar
+               if ( e.originalEvent.clientX > $target[0].clientWidth + $target.offset().left ) {
+                       return;
+               }
+
+               self.startPoints = pointers( e );
+
+               // Prevent zooming if already swiping
+               if ( !self.startPoints || ( self.startPoints.length > 1 && instance.isSliding ) ) {
+                       return;
+               }
+
+               self.$target  = $target;
+               self.$content = $content;
+               self.canTap   = true;
+
+               $(document).off( '.fb.touch' );
+
+               $(document).on( isTouchDevice ? 'touchend.fb.touch touchcancel.fb.touch' : 'mouseup.fb.touch mouseleave.fb.touch',  $.proxy(self, "ontouchend"));
+               $(document).on( isTouchDevice ? 'touchmove.fb.touch' : 'mousemove.fb.touch',  $.proxy(self, "ontouchmove"));
+
+               e.stopPropagation();
+
+               if ( !(instance.current.opts.touch || instance.canPan() ) || !( $target.is( self.$stage ) || self.$stage.find( $target ).length ) ) {
+
+                       // Prevent ghosting
+                       if ( $target.is('img') ) {
+                               e.preventDefault();
+                       }
+
+                       return;
+               }
+
+               if ( !( $.fancybox.isMobile && ( isScrollable( self.$target ) || isScrollable( self.$target.parent() ) ) ) ) {
+                       e.preventDefault();
+               }
+
+               self.canvasWidth  = Math.round( current.$slide[0].clientWidth );
+               self.canvasHeight = Math.round( current.$slide[0].clientHeight );
+
+               self.startTime = new Date().getTime();
+               self.distanceX = self.distanceY = self.distance = 0;
+
+               self.isPanning = false;
+               self.isSwiping = false;
+               self.isZooming = false;
+
+               self.sliderStartPos  = self.sliderLastPos || { top: 0, left: 0 };
+               self.contentStartPos = $.fancybox.getTranslate( self.$content );
+               self.contentLastPos  = null;
+
+               if ( self.startPoints.length === 1 && !self.isZooming ) {
+                       self.canTap = !instance.isSliding;
+
+                       if ( current.type === 'image' && ( self.contentStartPos.width > self.canvasWidth + 1 || self.contentStartPos.height > self.canvasHeight + 1 ) ) {
+
+                               $.fancybox.stop( self.$content );
+
+                               self.$content.css( 'transition-duration', '0ms' );
+
+                               self.isPanning = true;
+
+                       } else {
+
+                               self.isSwiping = true;
+                       }
+
+                       self.$container.addClass('fancybox-controls--isGrabbing');
+               }
+
+               if ( self.startPoints.length === 2 && !instance.isAnimating && !current.hasError && current.type === 'image' && ( current.isLoaded || current.$ghost ) ) {
+                       self.isZooming = true;
+
+                       self.isSwiping = false;
+                       self.isPanning = false;
+
+                       $.fancybox.stop( self.$content );
+
+                       self.$content.css( 'transition-duration', '0ms' );
+
+                       self.centerPointStartX = ( ( self.startPoints[0].x + self.startPoints[1].x ) * 0.5 ) - $(window).scrollLeft();
+                       self.centerPointStartY = ( ( self.startPoints[0].y + self.startPoints[1].y ) * 0.5 ) - $(window).scrollTop();
+
+                       self.percentageOfImageAtPinchPointX = ( self.centerPointStartX - self.contentStartPos.left ) / self.contentStartPos.width;
+                       self.percentageOfImageAtPinchPointY = ( self.centerPointStartY - self.contentStartPos.top  ) / self.contentStartPos.height;
+
+                       self.startDistanceBetweenFingers = distance( self.startPoints[0], self.startPoints[1] );
+               }
+
+       };
+
+       Guestures.prototype.ontouchmove = function( e ) {
+
+               var self = this;
+
+               self.newPoints = pointers( e );
+
+               if ( $.fancybox.isMobile && ( isScrollable( self.$target ) || isScrollable( self.$target.parent() ) ) ) {
+                       e.stopPropagation();
+
+                       self.canTap = false;
+
+                       return;
+               }
+
+               if ( !( self.instance.current.opts.touch || self.instance.canPan() ) || !self.newPoints || !self.newPoints.length ) {
+                       return;
+               }
+
+               self.distanceX = distance( self.newPoints[0], self.startPoints[0], 'x' );
+               self.distanceY = distance( self.newPoints[0], self.startPoints[0], 'y' );
+
+               self.distance = distance( self.newPoints[0], self.startPoints[0] );
+
+               // Skip false ontouchmove events (Chrome)
+               if ( self.distance > 0 ) {
+
+                       if ( !( self.$target.is( self.$stage ) || self.$stage.find( self.$target ).length ) ) {
+                               return;
+                       }
+
+                       e.stopPropagation();
+                       e.preventDefault();
+
+                       if ( self.isSwiping ) {
+                               self.onSwipe();
+
+                       } else if ( self.isPanning ) {
+                               self.onPan();
+
+                       } else if ( self.isZooming ) {
+                               self.onZoom();
+                       }
+
+               }
+
+       };
+
+       Guestures.prototype.onSwipe = function() {
+
+               var self = this;
+
+               var swiping = self.isSwiping;
+               var left    = self.sliderStartPos.left || 0;
+               var angle;
+
+               if ( swiping === true ) {
+
+                       if ( Math.abs( self.distance ) > 10 )  {
+
+                               self.canTap = false;
+
+                               if ( self.instance.group.length < 2 && self.instance.opts.touch.vertical ) {
+                                       self.isSwiping  = 'y';
+
+                               } else if ( self.instance.isSliding || self.instance.opts.touch.vertical === false || ( self.instance.opts.touch.vertical === 'auto' && $( window ).width() > 800 ) ) {
+                                       self.isSwiping  = 'x';
+
+                               } else {
+                                       angle = Math.abs( Math.atan2( self.distanceY, self.distanceX ) * 180 / Math.PI );
+
+                                       self.isSwiping = ( angle > 45 && angle < 135 ) ? 'y' : 'x';
+                               }
+
+                               self.instance.isSliding = self.isSwiping;
+
+                               // Reset points to avoid jumping, because we dropped first swipes to calculate the angle
+                               self.startPoints = self.newPoints;
+
+                               $.each(self.instance.slides, function( index, slide ) {
+                                       $.fancybox.stop( slide.$slide );
+
+                                       slide.$slide.css( 'transition-duration', '0ms' );
+
+                                       slide.inTransition = false;
+
+                                       if ( slide.pos === self.instance.current.pos ) {
+                                               self.sliderStartPos.left = $.fancybox.getTranslate( slide.$slide ).left;
+                                       }
+                               });
+
+                               //self.instance.current.isMoved = true;
+
+                               // Stop slideshow
+                               if ( self.instance.SlideShow && self.instance.SlideShow.isActive ) {
+                                       self.instance.SlideShow.stop();
+                               }
+                       }
+
+               } else {
+
+                       if ( swiping == 'x' ) {
+
+                               // Sticky edges
+                               if ( self.distanceX > 0 && ( self.instance.group.length < 2 || ( self.instance.current.index === 0 && !self.instance.current.opts.loop ) ) ) {
+                                       left = left + Math.pow( self.distanceX, 0.8 );
+
+                               } else if ( self.distanceX < 0 && ( self.instance.group.length < 2 || ( self.instance.current.index === self.instance.group.length - 1 && !self.instance.current.opts.loop ) ) ) {
+                                       left = left - Math.pow( -self.distanceX, 0.8 );
+
+                               } else {
+                                       left = left + self.distanceX;
+                               }
+
+                       }
+
+                       self.sliderLastPos = {
+                               top  : swiping == 'x' ? 0 : self.sliderStartPos.top + self.distanceY,
+                               left : left
+                       };
+
+                       if ( self.requestId ) {
+                               cancelAFrame( self.requestId );
+
+                               self.requestId = null;
+                       }
+
+                       self.requestId = requestAFrame(function() {
+
+                               if ( self.sliderLastPos ) {
+                                       $.each(self.instance.slides, function( index, slide ) {
+                                               var pos = slide.pos - self.instance.currPos;
+
+                                               $.fancybox.setTranslate( slide.$slide, {
+                                                       top  : self.sliderLastPos.top,
+                                                       left : self.sliderLastPos.left + ( pos * self.canvasWidth ) + ( pos * slide.opts.gutter )
+                                               });
+                                       });
+
+                                       self.$container.addClass( 'fancybox-is-sliding' );
+                               }
+
+                       });
+
+               }
+
+       };
+
+       Guestures.prototype.onPan = function() {
+
+               var self = this;
+
+               var newOffsetX, newOffsetY, newPos;
+
+               self.canTap = false;
+
+               if ( self.contentStartPos.width > self.canvasWidth ) {
+                       newOffsetX = self.contentStartPos.left + self.distanceX;
+
+               } else {
+                       newOffsetX = self.contentStartPos.left;
+               }
+
+               newOffsetY = self.contentStartPos.top + self.distanceY;
+
+               newPos = self.limitMovement( newOffsetX, newOffsetY, self.contentStartPos.width, self.contentStartPos.height );
+
+               newPos.scaleX = self.contentStartPos.scaleX;
+               newPos.scaleY = self.contentStartPos.scaleY;
+
+               self.contentLastPos = newPos;
+
+               if ( self.requestId ) {
+                       cancelAFrame( self.requestId );
+
+                       self.requestId = null;
+               }
+
+               self.requestId = requestAFrame(function() {
+                       $.fancybox.setTranslate( self.$content, self.contentLastPos );
+               });
+       };
+
+       // Make panning sticky to the edges
+       Guestures.prototype.limitMovement = function( newOffsetX, newOffsetY, newWidth, newHeight ) {
+
+               var self = this;
+
+               var minTranslateX, minTranslateY, maxTranslateX, maxTranslateY;
+
+               var canvasWidth  = self.canvasWidth;
+               var canvasHeight = self.canvasHeight;
+
+               var currentOffsetX = self.contentStartPos.left;
+               var currentOffsetY = self.contentStartPos.top;
+
+               var distanceX = self.distanceX;
+               var distanceY = self.distanceY;
+
+               // Slow down proportionally to traveled distance
+
+               minTranslateX = Math.max(0, canvasWidth  * 0.5 - newWidth  * 0.5 );
+               minTranslateY = Math.max(0, canvasHeight * 0.5 - newHeight * 0.5 );
+
+               maxTranslateX = Math.min( canvasWidth  - newWidth,  canvasWidth  * 0.5 - newWidth  * 0.5 );
+               maxTranslateY = Math.min( canvasHeight - newHeight, canvasHeight * 0.5 - newHeight * 0.5 );
+
+               if ( newWidth > canvasWidth ) {
+
+                       //   ->
+                       if ( distanceX > 0 && newOffsetX > minTranslateX ) {
+                               newOffsetX = minTranslateX - 1 + Math.pow( -minTranslateX + currentOffsetX + distanceX, 0.8 ) || 0;
+                       }
+
+                       //    <-
+                       if ( distanceX  < 0 && newOffsetX < maxTranslateX ) {
+                               newOffsetX = maxTranslateX + 1 - Math.pow( maxTranslateX - currentOffsetX - distanceX, 0.8 ) || 0;
+                       }
+
+               }
+
+               if ( newHeight > canvasHeight ) {
+
+                       //   \/
+                       if ( distanceY > 0 && newOffsetY > minTranslateY ) {
+                               newOffsetY = minTranslateY - 1 + Math.pow(-minTranslateY + currentOffsetY + distanceY, 0.8 ) || 0;
+                       }
+
+                       //   /\
+                       if ( distanceY < 0 && newOffsetY < maxTranslateY ) {
+                               newOffsetY = maxTranslateY + 1 - Math.pow ( maxTranslateY - currentOffsetY - distanceY, 0.8 ) || 0;
+                       }
+
+               }
+
+               return {
+                       top  : newOffsetY,
+                       left : newOffsetX
+               };
+
+       };
+
+
+       Guestures.prototype.limitPosition = function( newOffsetX, newOffsetY, newWidth, newHeight ) {
+
+               var self = this;
+
+               var canvasWidth  = self.canvasWidth;
+               var canvasHeight = self.canvasHeight;
+
+               if ( newWidth > canvasWidth ) {
+                       newOffsetX = newOffsetX > 0 ? 0 : newOffsetX;
+                       newOffsetX = newOffsetX < canvasWidth - newWidth ? canvasWidth - newWidth : newOffsetX;
+
+               } else {
+
+                       // Center horizontally
+                       newOffsetX = Math.max( 0, canvasWidth / 2 - newWidth / 2 );
+
+               }
+
+               if ( newHeight > canvasHeight ) {
+                       newOffsetY = newOffsetY > 0 ? 0 : newOffsetY;
+                       newOffsetY = newOffsetY < canvasHeight - newHeight ? canvasHeight - newHeight : newOffsetY;
+
+               } else {
+
+                       // Center vertically
+                       newOffsetY = Math.max( 0, canvasHeight / 2 - newHeight / 2 );
+
+               }
+
+               return {
+                       top  : newOffsetY,
+                       left : newOffsetX
+               };
+
+       };
+
+       Guestures.prototype.onZoom = function() {
+
+               var self = this;
+
+               // Calculate current distance between points to get pinch ratio and new width and height
+
+               var currentWidth  = self.contentStartPos.width;
+               var currentHeight = self.contentStartPos.height;
+
+               var currentOffsetX = self.contentStartPos.left;
+               var currentOffsetY = self.contentStartPos.top;
+
+               var endDistanceBetweenFingers = distance( self.newPoints[0], self.newPoints[1] );
+
+               var pinchRatio = endDistanceBetweenFingers / self.startDistanceBetweenFingers;
+
+               var newWidth  = Math.floor( currentWidth  * pinchRatio );
+               var newHeight = Math.floor( currentHeight * pinchRatio );
+
+               // This is the translation due to pinch-zooming
+               var translateFromZoomingX = (currentWidth  - newWidth)  * self.percentageOfImageAtPinchPointX;
+               var translateFromZoomingY = (currentHeight - newHeight) * self.percentageOfImageAtPinchPointY;
+
+               //Point between the two touches
+
+               var centerPointEndX = ((self.newPoints[0].x + self.newPoints[1].x) / 2) - $(window).scrollLeft();
+               var centerPointEndY = ((self.newPoints[0].y + self.newPoints[1].y) / 2) - $(window).scrollTop();
+
+               // And this is the translation due to translation of the centerpoint
+               // between the two fingers
+
+               var translateFromTranslatingX = centerPointEndX - self.centerPointStartX;
+               var translateFromTranslatingY = centerPointEndY - self.centerPointStartY;
+
+               // The new offset is the old/current one plus the total translation
+
+               var newOffsetX = currentOffsetX + ( translateFromZoomingX + translateFromTranslatingX );
+               var newOffsetY = currentOffsetY + ( translateFromZoomingY + translateFromTranslatingY );
+
+               var newPos = {
+                       top    : newOffsetY,
+                       left   : newOffsetX,
+                       scaleX : self.contentStartPos.scaleX * pinchRatio,
+                       scaleY : self.contentStartPos.scaleY * pinchRatio
+               };
+
+               self.canTap = false;
+
+               self.newWidth  = newWidth;
+               self.newHeight = newHeight;
+
+               self.contentLastPos = newPos;
+
+               if ( self.requestId ) {
+                       cancelAFrame( self.requestId );
+
+                       self.requestId = null;
+               }
+
+               self.requestId = requestAFrame(function() {
+                       $.fancybox.setTranslate( self.$content, self.contentLastPos );
+               });
+
+       };
+
+       Guestures.prototype.ontouchend = function( e ) {
+
+               var self = this;
+               var dMs  = Math.max( (new Date().getTime() ) - self.startTime, 1);
+
+               var swiping = self.isSwiping;
+               var panning = self.isPanning;
+               var zooming = self.isZooming;
+
+               self.endPoints = pointers( e );
+
+               self.$container.removeClass( 'fancybox-controls--isGrabbing' );
+
+               $(document).off( '.fb.touch' );
+
+               if ( self.requestId ) {
+                       cancelAFrame( self.requestId );
+
+                       self.requestId = null;
+               }
+
+               self.isSwiping = false;
+               self.isPanning = false;
+               self.isZooming = false;
+
+               if ( self.canTap )  {
+                       return self.onTap( e );
+               }
+
+               self.speed = 366;
+
+               // Speed in px/ms
+               self.velocityX = self.distanceX / dMs * 0.5;
+               self.velocityY = self.distanceY / dMs * 0.5;
+
+               self.speedX = Math.max( self.speed * 0.5, Math.min( self.speed * 1.5, ( 1 / Math.abs( self.velocityX ) ) * self.speed ) );
+
+               if ( panning ) {
+                       self.endPanning();
+
+               } else if ( zooming ) {
+                       self.endZooming();
+
+               } else {
+                       self.endSwiping( swiping );
+               }
+
+               return;
+       };
+
+       Guestures.prototype.endSwiping = function( swiping ) {
+
+               var self = this;
+               var ret = false;
+
+               self.instance.isSliding = false;
+               self.sliderLastPos      = null;
+
+               // Close if swiped vertically / navigate if horizontally
+               if ( swiping == 'y' && Math.abs( self.distanceY ) > 50 ) {
+
+                       // Continue vertical movement
+                       $.fancybox.animate( self.instance.current.$slide, {
+                               top     : self.sliderStartPos.top + self.distanceY + ( self.velocityY * 150 ),
+                               opacity : 0
+                       }, 150 );
+
+                       ret = self.instance.close( true, 300 );
+
+               } else if ( swiping == 'x' && self.distanceX > 50 && self.instance.group.length > 1 ) {
+                       ret = self.instance.previous( self.speedX );
+
+               } else if ( swiping == 'x' && self.distanceX < -50  && self.instance.group.length > 1 ) {
+                       ret = self.instance.next( self.speedX );
+               }
+
+               if ( ret === false && ( swiping == 'x' || swiping == 'y' ) ) {
+                       self.instance.jumpTo( self.instance.current.index, 150 );
+               }
+
+               self.$container.removeClass( 'fancybox-is-sliding' );
+
+       };
+
+       // Limit panning from edges
+       // ========================
+
+       Guestures.prototype.endPanning = function() {
+
+               var self = this;
+               var newOffsetX, newOffsetY, newPos;
+
+               if ( !self.contentLastPos ) {
+                       return;
+               }
+
+               if ( self.instance.current.opts.touch.momentum === false ) {
+                       newOffsetX = self.contentLastPos.left;
+                       newOffsetY = self.contentLastPos.top;
+
+               } else {
+
+                       // Continue movement
+                       newOffsetX = self.contentLastPos.left + ( self.velocityX * self.speed );
+                       newOffsetY = self.contentLastPos.top  + ( self.velocityY * self.speed );
+               }
+
+               newPos = self.limitPosition( newOffsetX, newOffsetY, self.contentStartPos.width, self.contentStartPos.height );
+
+                newPos.width  = self.contentStartPos.width;
+                newPos.height = self.contentStartPos.height;
+
+               $.fancybox.animate( self.$content, newPos, 330 );
+       };
+
+
+       Guestures.prototype.endZooming = function() {
+
+               var self = this;
+
+               var current = self.instance.current;
+
+               var newOffsetX, newOffsetY, newPos, reset;
+
+               var newWidth  = self.newWidth;
+               var newHeight = self.newHeight;
+
+               if ( !self.contentLastPos ) {
+                       return;
+               }
+
+               newOffsetX = self.contentLastPos.left;
+               newOffsetY = self.contentLastPos.top;
+
+               reset = {
+                       top    : newOffsetY,
+                       left   : newOffsetX,
+                       width  : newWidth,
+                       height : newHeight,
+                       scaleX : 1,
+                       scaleY : 1
+          };
+
+          // Reset scalex/scaleY values; this helps for perfomance and does not break animation
+          $.fancybox.setTranslate( self.$content, reset );
+
+               if ( newWidth < self.canvasWidth && newHeight < self.canvasHeight ) {
+                       self.instance.scaleToFit( 150 );
+
+               } else if ( newWidth > current.width || newHeight > current.height ) {
+                       self.instance.scaleToActual( self.centerPointStartX, self.centerPointStartY, 150 );
+
+               } else {
+
+                       newPos = self.limitPosition( newOffsetX, newOffsetY, newWidth, newHeight );
+
+                       // Switch from scale() to width/height or animation will not work correctly
+                       $.fancybox.setTranslate( self.content, $.fancybox.getTranslate( self.$content ) );
+
+                       $.fancybox.animate( self.$content, newPos, 150 );
+               }
+
+       };
+
+       Guestures.prototype.onTap = function(e) {
+               var self    = this;
+               var $target = $( e.target );
+
+               var instance = self.instance;
+               var current  = instance.current;
+
+               var endPoints = ( e && pointers( e ) ) || self.startPoints;
+
+               var tapX = endPoints[0] ? endPoints[0].x - self.$stage.offset().left : 0;
+               var tapY = endPoints[0] ? endPoints[0].y - self.$stage.offset().top  : 0;
+
+               var where;
+
+               var process = function ( prefix ) {
+
+                       var action = current.opts[ prefix ];
+
+                       if ( $.isFunction( action ) ) {
+                               action = action.apply( instance, [ current, e ] );
+                       }
+
+                       if ( !action) {
+                               return;
+                       }
+
+                       switch ( action ) {
+
+                               case "close" :
+
+                                       instance.close( self.startEvent );
+
+                               break;
+
+                               case "toggleControls" :
+
+                                       instance.toggleControls( true );
+
+                               break;
+
+                               case "next" :
+
+                                       instance.next();
+
+                               break;
+
+                               case "nextOrClose" :
+
+                                       if ( instance.group.length > 1 ) {
+                                               instance.next();
+
+                                       } else {
+                                               instance.close( self.startEvent );
+                                       }
+
+                               break;
+
+                               case "zoom" :
+
+                                       if ( current.type == 'image' && ( current.isLoaded || current.$ghost ) ) {
+
+                                               if ( instance.canPan() ) {
+                                                       instance.scaleToFit();
+
+                                               } else if ( instance.isScaledDown() ) {
+                                                       instance.scaleToActual( tapX, tapY );
+
+                                               } else if ( instance.group.length < 2 ) {
+                                                       instance.close( self.startEvent );
+                                               }
+                                       }
+
+                               break;
+                       }
+
+               };
+
+               // Ignore right click
+               if ( e.originalEvent && e.originalEvent.button == 2 ) {
+                       return;
+               }
+
+               // Skip if current slide is not in the center
+               if ( instance.isSliding ) {
+                       return;
+               }
+
+               // Skip if clicked on the scrollbar
+               if ( tapX > $target[0].clientWidth + $target.offset().left ) {
+                       return;
+               }
+
+               // Check where is clicked
+               if ( $target.is( '.fancybox-bg,.fancybox-inner,.fancybox-outer,.fancybox-container' ) ) {
+                       where = 'Outside';
+
+               } else if ( $target.is( '.fancybox-slide' ) ) {
+                       where = 'Slide';
+
+               } else if  ( instance.current.$content && instance.current.$content.has( e.target ).length ) {
+                       where = 'Content';
+
+               } else {
+                       return;
+               }
+
+               // Check if this is a double tap
+               if ( self.tapped ) {
+
+                       // Stop previously created single tap
+                       clearTimeout( self.tapped );
+                       self.tapped = null;
+
+                       // Skip if distance between taps is too big
+                       if ( Math.abs( tapX - self.tapX ) > 50 || Math.abs( tapY - self.tapY ) > 50 || instance.isSliding ) {
+                               return this;
+                       }
+
+                       // OK, now we assume that this is a double-tap
+                       process( 'dblclick' + where );
+
+               } else {
+
+                       // Single tap will be processed if user has not clicked second time within 300ms
+                       // or there is no need to wait for double-tap
+                       self.tapX = tapX;
+                       self.tapY = tapY;
+
+                       if ( current.opts[ 'dblclick' + where ] && current.opts[ 'dblclick' + where ] !== current.opts[ 'click' + where ] ) {
+                               self.tapped = setTimeout(function() {
+                                       self.tapped = null;
+
+                                       process( 'click' + where );
+
+                               }, 300);
+
+                       } else {
+                               process( 'click' + where );
+                       }
+
+               }
+
+               return this;
+       };
+
+       $(document).on('onActivate.fb', function (e, instance) {
+               if ( instance && !instance.Guestures ) {
+                       instance.Guestures = new Guestures( instance );
+               }
+       });
+
+       $(document).on('beforeClose.fb', function (e, instance) {
+               if ( instance && instance.Guestures ) {
+                       instance.Guestures.destroy();
+               }
+       });
+
+
+}(window, document, window.jQuery));
+
+// ==========================================================================
+//
+// SlideShow
+// Enables slideshow functionality
+//
+// Example of usage:
+// $.fancybox.getInstance().SlideShow.start()
+//
+// ==========================================================================
+;(function (document, $) {
+       'use strict';
+
+       var SlideShow = function( instance ) {
+               this.instance = instance;
+               this.init();
+       };
+
+       $.extend( SlideShow.prototype, {
+               timer    : null,
+               isActive : false,
+               $button  : null,
+               speed    : 3000,
+
+               init : function() {
+                       var self = this;
+
+                       self.$button = self.instance.$refs.toolbar.find('[data-fancybox-play]').on('click', function() {
+                               self.toggle();
+                       });
+
+                       if ( self.instance.group.length < 2 || !self.instance.group[ self.instance.currIndex ].opts.slideShow ) {
+                               self.$button.hide();
+                       }
+               },
+
+               set : function() {
+                       var self = this;
+
+                       // Check if reached last element
+                       if ( self.instance && self.instance.current && (self.instance.current.opts.loop || self.instance.currIndex < self.instance.group.length - 1 )) {
+                               self.timer = setTimeout(function() {
+                                       self.instance.next();
+
+                               }, self.instance.current.opts.slideShow.speed || self.speed);
+
+                       } else {
+                               self.stop();
+                               self.instance.idleSecondsCounter = 0;
+                               self.instance.showControls();
+                       }
+
+               },
+
+               clear : function() {
+                       var self = this;
+
+                       clearTimeout( self.timer );
+
+                       self.timer = null;
+               },
+
+               start : function() {
+                       var self = this;
+                       var current = self.instance.current;
+
+                       if ( self.instance && current && ( current.opts.loop || current.index < self.instance.group.length - 1 )) {
+
+                               self.isActive = true;
+
+                               self.$button
+                                       .attr( 'title', current.opts.i18n[ current.opts.lang ].PLAY_STOP )
+                                       .addClass( 'fancybox-button--pause' );
+
+                               if ( current.isComplete ) {
+                                       self.set();
+                               }
+                       }
+               },
+
+               stop : function() {
+                       var self = this;
+                       var current = self.instance.current;
+
+                       self.clear();
+
+                       self.$button
+                               .attr( 'title', current.opts.i18n[ current.opts.lang ].PLAY_START )
+                               .removeClass( 'fancybox-button--pause' );
+
+                       self.isActive = false;
+               },
+
+               toggle : function() {
+                       var self = this;
+
+                       if ( self.isActive ) {
+                               self.stop();
+
+                       } else {
+                               self.start();
+                       }
+               }
+
+       });
+
+       $(document).on({
+               'onInit.fb' : function(e, instance) {
+                       if ( instance && !instance.SlideShow ) {
+                               instance.SlideShow = new SlideShow( instance );
+                       }
+               },
+
+               'beforeShow.fb' : function(e, instance, current, firstRun) {
+                       var SlideShow = instance && instance.SlideShow;
+
+                       if ( firstRun ) {
+
+                               if ( SlideShow && current.opts.slideShow.autoStart ) {
+                                       SlideShow.start();
+                               }
+
+                       } else if ( SlideShow && SlideShow.isActive )  {
+                               SlideShow.clear();
+                       }
+               },
+
+               'afterShow.fb' : function(e, instance, current) {
+                       var SlideShow = instance && instance.SlideShow;
+
+                       if ( SlideShow && SlideShow.isActive ) {
+                               SlideShow.set();
+                       }
+               },
+
+               'afterKeydown.fb' : function(e, instance, current, keypress, keycode) {
+                       var SlideShow = instance && instance.SlideShow;
+
+                       // "P" or Spacebar
+                       if ( SlideShow && current.opts.slideShow && ( keycode === 80 || keycode === 32 ) && !$(document.activeElement).is( 'button,a,input' ) ) {
+                               keypress.preventDefault();
+
+                               SlideShow.toggle();
+                       }
+               },
+
+               'beforeClose.fb onDeactivate.fb' : function(e, instance) {
+                       var SlideShow = instance && instance.SlideShow;
+
+                       if ( SlideShow ) {
+                               SlideShow.stop();
+                       }
+               }
+       });
+
+       // Page Visibility API to pause slideshow when window is not active
+       $(document).on("visibilitychange", function() {
+               var instance  = $.fancybox.getInstance();
+               var SlideShow = instance && instance.SlideShow;
+
+               if ( SlideShow && SlideShow.isActive ) {
+                       if ( document.hidden ) {
+                               SlideShow.clear();
+
+                       } else {
+                               SlideShow.set();
+                       }
+               }
+       });
+
+}(document, window.jQuery));
+
+// ==========================================================================
+//
+// FullScreen
+// Adds fullscreen functionality
+//
+// ==========================================================================
+;(function (document, $) {
+       'use strict';
+
+       // Collection of methods supported by user browser
+       var fn = (function () {
+
+               var fnMap = [
+                       [
+                               'requestFullscreen',
+                               'exitFullscreen',
+                               'fullscreenElement',
+                               'fullscreenEnabled',
+                               'fullscreenchange',
+                               'fullscreenerror'
+                       ],
+                       // new WebKit
+                       [
+                               'webkitRequestFullscreen',
+                               'webkitExitFullscreen',
+                               'webkitFullscreenElement',
+                               'webkitFullscreenEnabled',
+                               'webkitfullscreenchange',
+                               'webkitfullscreenerror'
+
+                       ],
+                       // old WebKit (Safari 5.1)
+                       [
+                               'webkitRequestFullScreen',
+                               'webkitCancelFullScreen',
+                               'webkitCurrentFullScreenElement',
+                               'webkitCancelFullScreen',
+                               'webkitfullscreenchange',
+                               'webkitfullscreenerror'
+
+                       ],
+                       [
+                               'mozRequestFullScreen',
+                               'mozCancelFullScreen',
+                               'mozFullScreenElement',
+                               'mozFullScreenEnabled',
+                               'mozfullscreenchange',
+                               'mozfullscreenerror'
+                       ],
+                       [
+                               'msRequestFullscreen',
+                               'msExitFullscreen',
+                               'msFullscreenElement',
+                               'msFullscreenEnabled',
+                               'MSFullscreenChange',
+                               'MSFullscreenError'
+                       ]
+               ];
+
+               var val;
+               var ret = {};
+               var i, j;
+
+               for ( i = 0; i < fnMap.length; i++ ) {
+                       val = fnMap[ i ];
+
+                       if ( val && val[ 1 ] in document ) {
+                               for ( j = 0; j < val.length; j++ ) {
+                                       ret[ fnMap[ 0 ][ j ] ] = val[ j ];
+                               }
+
+                               return ret;
+                       }
+               }
+
+               return false;
+       })();
+
+       // If browser does not have Full Screen API, then simply unset default button template and stop
+       if ( !fn ) {
+               $.fancybox.defaults.btnTpl.fullScreen = false;
+
+               return;
+       }
+
+       var FullScreen = {
+               request : function ( elem ) {
+
+                       elem = elem || document.documentElement;
+
+                       elem[ fn.requestFullscreen ]( elem.ALLOW_KEYBOARD_INPUT );
+
+               },
+               exit : function () {
+
+                       document[ fn.exitFullscreen ]();
+
+               },
+               toggle : function ( elem ) {
+
+                       elem = elem || document.documentElement;
+
+                       if ( this.isFullscreen() ) {
+                               this.exit();
+
+                       } else {
+                               this.request( elem );
+                       }
+
+               },
+               isFullscreen : function()  {
+
+                       return Boolean( document[ fn.fullscreenElement ] );
+
+               },
+               enabled : function()  {
+
+                       return Boolean( document[ fn.fullscreenEnabled ] );
+
+               }
+       };
+
+       $(document).on({
+               'onInit.fb' : function(e, instance) {
+                       var $container;
+
+                       var $button = instance.$refs.toolbar.find('[data-fancybox-fullscreen]');
+
+                       if ( instance && !instance.FullScreen && instance.group[ instance.currIndex ].opts.fullScreen ) {
+                               $container = instance.$refs.container;
+
+                               $container.on('click.fb-fullscreen', '[data-fancybox-fullscreen]', function(e) {
+
+                                       e.stopPropagation();
+                                       e.preventDefault();
+
+                                       FullScreen.toggle( $container[ 0 ] );
+
+                               });
+
+                               if ( instance.opts.fullScreen && instance.opts.fullScreen.autoStart === true ) {
+                                       FullScreen.request( $container[ 0 ] );
+                               }
+
+                               // Expose API
+                               instance.FullScreen = FullScreen;
+
+                       } else {
+                               $button.hide();
+                       }
+
+               },
+
+               'afterKeydown.fb' : function(e, instance, current, keypress, keycode) {
+
+                       // "P" or Spacebar
+                       if ( instance && instance.FullScreen && keycode === 70 ) {
+                               keypress.preventDefault();
+
+                               instance.FullScreen.toggle( instance.$refs.container[ 0 ] );
+                       }
+
+               },
+
+               'beforeClose.fb' : function( instance ) {
+                       if ( instance && instance.FullScreen ) {
+                               FullScreen.exit();
+                       }
+               }
+       });
+
+       $(document).on(fn.fullscreenchange, function() {
+               var instance = $.fancybox.getInstance();
+
+               // If image is zooming, then force to stop and reposition properly
+               if ( instance.current && instance.current.type === 'image' && instance.isAnimating ) {
+                       instance.current.$content.css( 'transition', 'none' );
+
+                       instance.isAnimating = false;
+
+                       instance.update( true, true, 0 );
+               }
+
+       });
+
+}(document, window.jQuery));
+
+// ==========================================================================
+//
+// Thumbs
+// Displays thumbnails in a grid
+//
+// ==========================================================================
+;(function (document, $) {
+       'use strict';
+
+       var FancyThumbs = function( instance ) {
+               this.instance = instance;
+               this.init();
+       };
+
+       $.extend( FancyThumbs.prototype, {
+
+               $button         : null,
+               $grid           : null,
+               $list           : null,
+               isVisible       : false,
+
+               init : function() {
+                       var self = this;
+
+                       var first  = self.instance.group[0],
+                               second = self.instance.group[1];
+
+                       self.$button = self.instance.$refs.toolbar.find( '[data-fancybox-thumbs]' );
+
+                       if ( self.instance.group.length > 1 && self.instance.group[ self.instance.currIndex ].opts.thumbs && (
+                               ( first.type == 'image'  || first.opts.thumb  || first.opts.$thumb ) &&
+                               ( second.type == 'image' || second.opts.thumb || second.opts.$thumb )
+                       )) {
+
+                               self.$button.on('click', function() {
+                                       self.toggle();
+                               });
+
+                               self.isActive = true;
+
+                       } else {
+                               self.$button.hide();
+
+                               self.isActive = false;
+                       }
+
+               },
+
+               create : function() {
+                       var instance = this.instance,
+                               list,
+                               src;
+
+                       this.$grid = $('<div class="fancybox-thumbs"></div>').appendTo( instance.$refs.container );
+
+                       list = '<ul>';
+
+                       $.each(instance.group, function( i, item ) {
+
+                               src = item.opts.thumb || ( item.opts.$thumb ? item.opts.$thumb.attr('src') : null );
+
+                               if ( !src && item.type === 'image' ) {
+                                       src = item.src;
+                               }
+
+                               if ( src && src.length ) {
+                                       list += '<li data-index="' + i + '"  tabindex="0" class="fancybox-thumbs-loading"><img data-src="' + src + '" /></li>';
+                               }
+
+                       });
+
+                       list += '</ul>';
+
+                       this.$list = $( list ).appendTo( this.$grid ).on('click', 'li', function() {
+                               instance.jumpTo( $(this).data('index') );
+                       });
+
+                       this.$list.find('img').hide().one('load', function() {
+
+                               var $parent             = $(this).parent().removeClass('fancybox-thumbs-loading'),
+                                       thumbWidth      = $parent.outerWidth(),
+                                       thumbHeight     = $parent.outerHeight(),
+                                       width,
+                                       height,
+                                       widthRatio,
+                                       heightRatio;
+
+                               width  = this.naturalWidth      || this.width;
+                               height = this.naturalHeight     || this.height;
+
+                               //Calculate thumbnail width/height and center it
+
+                               widthRatio  = width  / thumbWidth;
+                               heightRatio = height / thumbHeight;
+
+                               if (widthRatio >= 1 && heightRatio >= 1) {
+                                       if (widthRatio > heightRatio) {
+                                               width  = width / heightRatio;
+                                               height = thumbHeight;
+
+                                       } else {
+                                               width  = thumbWidth;
+                                               height = height / widthRatio;
+                                       }
+                               }
+
+                               $(this).css({
+                                       width         : Math.floor(width),
+                                       height        : Math.floor(height),
+                                       'margin-top'  : Math.min( 0, Math.floor(thumbHeight * 0.3 - height * 0.3 ) ),
+                                       'margin-left' : Math.min( 0, Math.floor(thumbWidth  * 0.5 - width  * 0.5 ) )
+                               }).show();
+
+                       })
+                       .each(function() {
+                               this.src = $( this ).data( 'src' );
+                       });
+
+               },
+
+               focus : function() {
+
+                       if ( this.instance.current ) {
+                               this.$list
+                                       .children()
+                                       .removeClass('fancybox-thumbs-active')
+                                       .filter('[data-index="' + this.instance.current.index  + '"]')
+                                       .addClass('fancybox-thumbs-active')
+                                       .focus();
+                       }
+
+               },
+
+               close : function() {
+                       this.$grid.hide();
+               },
+
+               update : function() {
+
+                       this.instance.$refs.container.toggleClass( 'fancybox-show-thumbs', this.isVisible );
+
+                       if ( this.isVisible ) {
+
+                               if ( !this.$grid ) {
+                                       this.create();
+                               }
+
+                               this.instance.trigger( 'onThumbsShow' );
+
+                               this.focus();
+
+                       } else if ( this.$grid ) {
+                               this.instance.trigger( 'onThumbsHide' );
+                       }
+
+                       // Update content position
+                       this.instance.update();
+
+               },
+
+               hide : function() {
+                       this.isVisible = false;
+                       this.update();
+               },
+
+               show : function() {
+                       this.isVisible = true;
+                       this.update();
+               },
+
+               toggle : function() {
+                       this.isVisible = !this.isVisible;
+                       this.update();
+               }
+
+       });
+
+       $(document).on({
+
+               'onInit.fb' : function(e, instance) {
+                       if ( instance && !instance.Thumbs ) {
+                               instance.Thumbs = new FancyThumbs( instance );
+                       }
+               },
+
+               'beforeShow.fb' : function(e, instance, item, firstRun) {
+                       var Thumbs = instance && instance.Thumbs;
+
+                       if ( !Thumbs || !Thumbs.isActive ) {
+                               return;
+                       }
+
+                       if ( item.modal ) {
+                               Thumbs.$button.hide();
+
+                               Thumbs.hide();
+
+                               return;
+                       }
+
+                       if ( firstRun && instance.opts.thumbs.autoStart === true ) {
+                               Thumbs.show();
+                       }
+
+                       if ( Thumbs.isVisible ) {
+                               Thumbs.focus();
+                       }
+               },
+
+               'afterKeydown.fb' : function(e, instance, current, keypress, keycode) {
+                       var Thumbs = instance && instance.Thumbs;
+
+                       // "G"
+                       if ( Thumbs && Thumbs.isActive && keycode === 71 ) {
+                               keypress.preventDefault();
+
+                               Thumbs.toggle();
+                       }
+               },
+
+               'beforeClose.fb' : function( e, instance ) {
+                       var Thumbs = instance && instance.Thumbs;
+
+                       if ( Thumbs && Thumbs.isVisible && instance.opts.thumbs.hideOnClose !== false ) {
+                               Thumbs.close();
+                       }
+               }
+
+       });
+
+}(document, window.jQuery));
+
+// ==========================================================================
+//
+// Hash
+// Enables linking to each modal
+//
+// ==========================================================================
+;(function (document, window, $) {
+       'use strict';
+
+       // Simple $.escapeSelector polyfill (for jQuery prior v3)
+       if ( !$.escapeSelector ) {
+               $.escapeSelector = function( sel ) {
+                       var rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g;
+                       var fcssescape = function( ch, asCodePoint ) {
+                               if ( asCodePoint ) {
+                                       // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER
+                                       if ( ch === "\0" ) {
+                                               return "\uFFFD";
+                                       }
+
+                                       // Control characters and (dependent upon position) numbers get escaped as code points
+                                       return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " ";
+                               }
+
+                               // Other potentially-special ASCII characters get backslash-escaped
+                               return "\\" + ch;
+                       };
+
+                       return ( sel + "" ).replace( rcssescape, fcssescape );
+               };
+       }
+
+       // Create new history entry only once
+       var shouldCreateHistory = true;
+
+       // Variable containing last hash value set by fancyBox
+       // It will be used to determine if fancyBox needs to close after hash change is detected
+    var currentHash = null;
+
+       // Throttling the history change
+       var timerID = null;
+
+       // Get info about gallery name and current index from url
+    function parseUrl() {
+        var hash    = window.location.hash.substr( 1 );
+        var rez     = hash.split( '-' );
+        var index   = rez.length > 1 && /^\+?\d+$/.test( rez[ rez.length - 1 ] ) ? parseInt( rez.pop( -1 ), 10 ) || 1 : 1;
+        var gallery = rez.join( '-' );
+
+               // Index is starting from 1
+               if ( index < 1 ) {
+                       index = 1;
+               }
+
+        return {
+            hash    : hash,
+            index   : index,
+            gallery : gallery
+        };
+    }
+
+       // Trigger click evnt on links to open new fancyBox instance
+       function triggerFromUrl( url ) {
+               var $el;
+
+        if ( url.gallery !== '' ) {
+
+                       // If we can find element matching 'data-fancybox' atribute, then trigger click event for that ..
+                       $el = $( "[data-fancybox='" + $.escapeSelector( url.gallery ) + "']" ).eq( url.index - 1 );
+
+            if ( !$el.length ) {
+                               // .. if not, try finding element by ID
+                               $el = $( "#" + $.escapeSelector( url.gallery ) + "" );
+                       }
+
+                       if ( $el.length ) {
+                               shouldCreateHistory = false;
+
+                               $el.trigger( 'click' );
+                       }
+
+        }
+       }
+
+       // Get gallery name from current instance
+       function getGallery( instance ) {
+               var opts;
+
+               if ( !instance ) {
+                       return false;
+               }
+
+               opts = instance.current ? instance.current.opts : instance.opts;
+
+               return opts.$orig ? opts.$orig.data( 'fancybox' ) : ( opts.hash || '' );
+       }
+
+       // Star when DOM becomes ready
+    $(function() {
+
+               // Small delay is used to allow other scripts to process "dom ready" event
+               setTimeout(function() {
+
+                       // Check if this module is not disabled
+                       if ( $.fancybox.defaults.hash === false ) {
+                               return;
+                       }
+
+                       // Update hash when opening/closing fancyBox
+                   $(document).on({
+                               'onInit.fb' : function( e, instance ) {
+                                       var url, gallery;
+
+                                       if ( instance.group[ instance.currIndex ].opts.hash === false ) {
+                                               return;
+                                       }
+
+                                       url     = parseUrl();
+                                       gallery = getGallery( instance );
+
+                                       // Make sure gallery start index matches index from hash
+                                       if ( gallery && url.gallery && gallery == url.gallery ) {
+                                               instance.currIndex = url.index - 1;
+                                       }
+
+                               },
+
+                               'beforeShow.fb' : function( e, instance, current ) {
+                                       var gallery;
+
+                                       if ( current.opts.hash === false ) {
+                                               return;
+                                       }
+
+                           gallery = getGallery( instance );
+
+                           // Update window hash
+                           if ( gallery && gallery !== '' ) {
+
+                                               if ( window.location.hash.indexOf( gallery ) < 0 ) {
+                                       instance.opts.origHash = window.location.hash;
+                                   }
+
+                                               currentHash = gallery + ( instance.group.length > 1 ? '-' + ( current.index + 1 ) : '' );
+
+                                               if ( 'replaceState' in window.history ) {
+                                                       if ( timerID ) {
+                                                               clearTimeout( timerID );
+                                                       }
+
+                                                       timerID = setTimeout(function() {
+                                                               window.history[ shouldCreateHistory ? 'pushState' : 'replaceState' ]( {} , document.title, window.location.pathname + window.location.search + '#' +  currentHash );
+
+                                                               timerID = null;
+
+                                                               shouldCreateHistory = false;
+
+                                                       }, 300);
+
+                                               } else {
+                                                       window.location.hash = currentHash;
+                                               }
+
+                           }
+
+                       },
+
+                               'beforeClose.fb' : function( e, instance, current ) {
+                                       var gallery, origHash;
+
+                                       if ( timerID ) {
+                                               clearTimeout( timerID );
+                                       }
+
+                                       if ( current.opts.hash === false ) {
+                                               return;
+                                       }
+
+                                       gallery  = getGallery( instance );
+                                       origHash = instance && instance.opts.origHash ? instance.opts.origHash : '';
+
+                           // Remove hash from location bar
+                           if ( gallery && gallery !== '' ) {
+
+                               if ( 'replaceState' in history ) {
+                                                       window.history.replaceState( {} , document.title, window.location.pathname + window.location.search + origHash );
+
+                               } else {
+                                                       window.location.hash = origHash;
+
+                                                       // Keep original scroll position
+                                                       $( window ).scrollTop( instance.scrollTop ).scrollLeft( instance.scrollLeft );
+                               }
+                           }
+
+                                       currentHash = null;
+                       }
+                   });
+
+                       // Check if need to close after url has changed
+                       $(window).on('hashchange.fb', function() {
+                               var url = parseUrl();
+
+                               if ( $.fancybox.getInstance() ) {
+                                       if ( currentHash && currentHash !== url.gallery + '-' + url.index && !( url.index === 1 && currentHash == url.gallery ) ) {
+                                               currentHash = null;
+
+                                               $.fancybox.close();
+
+                                               shouldCreateHistory = true;
+                                       }
+
+                               } else if ( url.gallery !== '' ) {
+                                       triggerFromUrl( url );
+                               }
+                       });
+
+                       // Check current hash and trigger click event on matching element to start fancyBox, if needed
+                       triggerFromUrl( parseUrl() );
+
+               }, 50);
+
+    });
+
+
+}(document, window, window.jQuery));
diff --git a/fancybox/dist/jquery.fancybox.min.css b/fancybox/dist/jquery.fancybox.min.css
new file mode 100644 (file)
index 0000000..ab39c7a
--- /dev/null
@@ -0,0 +1 @@
+@charset "UTF-8";.fancybox-enabled{overflow:hidden}.fancybox-enabled body{overflow:visible;height:100%}.fancybox-is-hidden{position:absolute;top:-9999px;left:-9999px;visibility:hidden}.fancybox-container{position:fixed;top:0;left:0;width:100%;height:100%;z-index:99993;-webkit-tap-highlight-color:transparent;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform:translateZ(0);transform:translateZ(0)}.fancybox-container~.fancybox-container{z-index:99992}.fancybox-bg,.fancybox-inner,.fancybox-outer,.fancybox-stage{position:absolute;top:0;right:0;bottom:0;left:0}.fancybox-outer{overflow-y:auto;-webkit-overflow-scrolling:touch}.fancybox-bg{background:#1e1e1e;opacity:0;transition-duration:inherit;transition-property:opacity;transition-timing-function:cubic-bezier(.47,0,.74,.71)}.fancybox-is-open .fancybox-bg{opacity:.87;transition-timing-function:cubic-bezier(.22,.61,.36,1)}.fancybox-caption-wrap,.fancybox-infobar,.fancybox-toolbar{position:absolute;direction:ltr;z-index:99997;opacity:0;visibility:hidden;transition:opacity .25s,visibility 0s linear .25s;box-sizing:border-box}.fancybox-show-caption .fancybox-caption-wrap,.fancybox-show-infobar .fancybox-infobar,.fancybox-show-toolbar .fancybox-toolbar{opacity:1;visibility:visible;transition:opacity .25s,visibility 0s}.fancybox-infobar{top:0;left:50%;margin-left:-79px}.fancybox-infobar__body{display:inline-block;width:70px;line-height:44px;font-size:13px;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;text-align:center;color:#ddd;background-color:rgba(30,30,30,.7);pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-touch-callout:none;-webkit-tap-highlight-color:transparent;-webkit-font-smoothing:subpixel-antialiased}.fancybox-toolbar{top:0;right:0}.fancybox-stage{overflow:hidden;direction:ltr;z-index:99994;-webkit-transform:translateZ(0)}.fancybox-slide{position:absolute;top:0;left:0;width:100%;height:100%;margin:0;padding:0;overflow:auto;outline:none;white-space:normal;box-sizing:border-box;text-align:center;z-index:99994;-webkit-overflow-scrolling:touch;display:none;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}.fancybox-slide:before{content:"";display:inline-block;vertical-align:middle;height:100%;width:0}.fancybox-is-sliding .fancybox-slide,.fancybox-slide--current,.fancybox-slide--next,.fancybox-slide--previous{display:block}.fancybox-slide--image{overflow:visible}.fancybox-slide--image:before{display:none}.fancybox-slide--video .fancybox-content,.fancybox-slide--video iframe{background:#000}.fancybox-slide--map .fancybox-content,.fancybox-slide--map iframe{background:#e5e3df}.fancybox-slide--next{z-index:99995}.fancybox-slide>*{display:inline-block;position:relative;padding:24px;margin:44px 0;border-width:0;vertical-align:middle;text-align:left;background-color:#fff;overflow:auto;box-sizing:border-box}.fancybox-slide .fancybox-image-wrap{position:absolute;top:0;left:0;margin:0;padding:0;border:0;z-index:99995;background:transparent;cursor:default;overflow:visible;-webkit-transform-origin:top left;transform-origin:top left;background-size:100% 100%;background-repeat:no-repeat;-webkit-backface-visibility:hidden;backface-visibility:hidden}.fancybox-can-zoomOut .fancybox-image-wrap{cursor:zoom-out}.fancybox-can-zoomIn .fancybox-image-wrap{cursor:zoom-in}.fancybox-can-drag .fancybox-image-wrap{cursor:-webkit-grab;cursor:grab}.fancybox-is-dragging .fancybox-image-wrap{cursor:-webkit-grabbing;cursor:grabbing}.fancybox-image,.fancybox-spaceball{position:absolute;top:0;left:0;width:100%;height:100%;margin:0;padding:0;border:0;max-width:none;max-height:none}.fancybox-spaceball{z-index:1}.fancybox-slide--iframe .fancybox-content{padding:0;width:80%;height:80%;max-width:calc(100% - 100px);max-height:calc(100% - 88px);overflow:visible;background:#fff}.fancybox-iframe{display:block;padding:0;border:0;height:100%}.fancybox-error,.fancybox-iframe{margin:0;width:100%;background:#fff}.fancybox-error{padding:40px;max-width:380px;cursor:default}.fancybox-error p{margin:0;padding:0;color:#444;font:16px/20px Helvetica Neue,Helvetica,Arial,sans-serif}.fancybox-close-small{position:absolute;top:0;right:0;width:44px;height:44px;padding:0;margin:0;border:0;border-radius:0;outline:none;background:transparent;z-index:10;cursor:pointer}.fancybox-close-small:after{content:"×";position:absolute;top:5px;right:5px;width:30px;height:30px;font:20px/30px Arial,Helvetica Neue,Helvetica,sans-serif;color:#888;font-weight:300;text-align:center;border-radius:50%;border-width:0;background:#fff;transition:background .25s;box-sizing:border-box;z-index:2}.fancybox-close-small:focus:after{outline:1px dotted #888}.fancybox-close-small:hover:after{color:#555;background:#eee}.fancybox-slide--iframe .fancybox-close-small{top:0;right:-44px}.fancybox-slide--iframe .fancybox-close-small:after{background:transparent;font-size:35px;color:#aaa}.fancybox-slide--iframe .fancybox-close-small:hover:after{color:#fff}.fancybox-caption-wrap{bottom:0;left:0;right:0;padding:60px 30px 0;background:linear-gradient(180deg,transparent 0,rgba(0,0,0,.1) 20%,rgba(0,0,0,.2) 40%,rgba(0,0,0,.6) 80%,rgba(0,0,0,.8));pointer-events:none}.fancybox-caption{padding:30px 0;border-top:1px solid hsla(0,0%,100%,.4);font-size:14px;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;color:#fff;line-height:20px;-webkit-text-size-adjust:none}.fancybox-caption a,.fancybox-caption button,.fancybox-caption select{pointer-events:all}.fancybox-caption a{color:#fff;text-decoration:underline}.fancybox-button{display:inline-block;position:relative;margin:0;padding:0;border:0;width:44px;height:44px;line-height:44px;text-align:center;background:transparent;color:#ddd;border-radius:0;cursor:pointer;vertical-align:top;outline:none}.fancybox-button[disabled]{cursor:default;pointer-events:none}.fancybox-button,.fancybox-infobar__body{background:rgba(30,30,30,.6)}.fancybox-button:hover:not([disabled]){color:#fff;background:rgba(0,0,0,.8)}.fancybox-button:after,.fancybox-button:before{content:"";pointer-events:none;position:absolute;background-color:currentColor;color:currentColor;opacity:.9;box-sizing:border-box;display:inline-block}.fancybox-button[disabled]:after,.fancybox-button[disabled]:before{opacity:.3}.fancybox-button--left:after,.fancybox-button--right:after{top:18px;width:6px;height:6px;background:transparent;border-top:2px solid currentColor;border-right:2px solid currentColor}.fancybox-button--left:after{left:20px;-webkit-transform:rotate(-135deg);transform:rotate(-135deg)}.fancybox-button--right:after{right:20px;-webkit-transform:rotate(45deg);transform:rotate(45deg)}.fancybox-button--left{border-bottom-left-radius:5px}.fancybox-button--right{border-bottom-right-radius:5px}.fancybox-button--close:after,.fancybox-button--close:before{content:"";display:inline-block;position:absolute;height:2px;width:16px;top:calc(50% - 1px);left:calc(50% - 8px)}.fancybox-button--close:before{-webkit-transform:rotate(45deg);transform:rotate(45deg)}.fancybox-button--close:after{-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.fancybox-arrow{position:absolute;top:50%;margin:-50px 0 0;height:100px;width:54px;padding:0;border:0;outline:none;background:none;cursor:pointer;z-index:99995;opacity:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;transition:opacity .25s}.fancybox-arrow:after{content:"";position:absolute;top:28px;width:44px;height:44px;background-color:rgba(30,30,30,.8);background-image:url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSIjRkZGRkZGIiBoZWlnaHQ9IjQ4IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSI0OCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4gICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPiAgICA8cGF0aCBkPSJNMTIgNGwtMS40MSAxLjQxTDE2LjE3IDExSDR2MmgxMi4xN2wtNS41OCA1LjU5TDEyIDIwbDgtOHoiLz48L3N2Zz4=);background-repeat:no-repeat;background-position:50%;background-size:24px 24px}.fancybox-arrow--right{right:0}.fancybox-arrow--left{left:0;-webkit-transform:scaleX(-1);transform:scaleX(-1)}.fancybox-arrow--left:after,.fancybox-arrow--right:after{left:0}.fancybox-show-nav .fancybox-arrow{opacity:.6}.fancybox-show-nav .fancybox-arrow[disabled]{opacity:.3}.fancybox-loading{border:6px solid hsla(0,0%,39%,.4);border-top:6px solid hsla(0,0%,100%,.6);border-radius:100%;height:50px;width:50px;-webkit-animation:a .8s infinite linear;animation:a .8s infinite linear;background:transparent;position:absolute;top:50%;left:50%;margin-top:-25px;margin-left:-25px;z-index:99999}@-webkit-keyframes a{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes a{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fancybox-animated{transition-timing-function:cubic-bezier(0,0,.25,1)}.fancybox-fx-slide.fancybox-slide--previous{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);opacity:0}.fancybox-fx-slide.fancybox-slide--next{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);opacity:0}.fancybox-fx-slide.fancybox-slide--current{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}.fancybox-fx-fade.fancybox-slide--next,.fancybox-fx-fade.fancybox-slide--previous{opacity:0;transition-timing-function:cubic-bezier(.19,1,.22,1)}.fancybox-fx-fade.fancybox-slide--current{opacity:1}.fancybox-fx-zoom-in-out.fancybox-slide--previous{-webkit-transform:scale3d(1.5,1.5,1.5);transform:scale3d(1.5,1.5,1.5);opacity:0}.fancybox-fx-zoom-in-out.fancybox-slide--next{-webkit-transform:scale3d(.5,.5,.5);transform:scale3d(.5,.5,.5);opacity:0}.fancybox-fx-zoom-in-out.fancybox-slide--current{-webkit-transform:scaleX(1);transform:scaleX(1);opacity:1}.fancybox-fx-rotate.fancybox-slide--previous{-webkit-transform:rotate(-1turn);transform:rotate(-1turn);opacity:0}.fancybox-fx-rotate.fancybox-slide--next{-webkit-transform:rotate(1turn);transform:rotate(1turn);opacity:0}.fancybox-fx-rotate.fancybox-slide--current{-webkit-transform:rotate(0deg);transform:rotate(0deg);opacity:1}.fancybox-fx-circular.fancybox-slide--previous{-webkit-transform:scale3d(0,0,0) translate3d(-100%,0,0);transform:scale3d(0,0,0) translate3d(-100%,0,0);opacity:0}.fancybox-fx-circular.fancybox-slide--next{-webkit-transform:scale3d(0,0,0) translate3d(100%,0,0);transform:scale3d(0,0,0) translate3d(100%,0,0);opacity:0}.fancybox-fx-circular.fancybox-slide--current{-webkit-transform:scaleX(1) translateZ(0);transform:scaleX(1) translateZ(0);opacity:1}.fancybox-fx-tube.fancybox-slide--previous{-webkit-transform:translate3d(-100%,0,0) scale(.1) skew(-10deg);transform:translate3d(-100%,0,0) scale(.1) skew(-10deg)}.fancybox-fx-tube.fancybox-slide--next{-webkit-transform:translate3d(100%,0,0) scale(.1) skew(10deg);transform:translate3d(100%,0,0) scale(.1) skew(10deg)}.fancybox-fx-tube.fancybox-slide--current{-webkit-transform:translateZ(0) scale(1);transform:translateZ(0) scale(1)}@media (max-width:800px){.fancybox-infobar{left:0;margin-left:0}.fancybox-button--left,.fancybox-button--right{display:none!important}.fancybox-caption{padding:20px 0;margin:0}}.fancybox-button--fullscreen:before{width:15px;height:11px;left:calc(50% - 7px);top:calc(50% - 6px);border:2px solid;background:none}.fancybox-button--pause:before,.fancybox-button--play:before{top:calc(50% - 6px);left:calc(50% - 4px);background:transparent}.fancybox-button--play:before{width:0;height:0;border-top:6px inset transparent;border-bottom:6px inset transparent;border-left:10px solid;border-radius:1px}.fancybox-button--pause:before{width:7px;height:11px;border-style:solid;border-width:0 2px}.fancybox-button--thumbs,.fancybox-thumbs{display:none}@media (min-width:800px){.fancybox-button--thumbs{display:inline-block}.fancybox-button--thumbs span{font-size:23px}.fancybox-button--thumbs:before{width:3px;height:3px;top:calc(50% - 2px);left:calc(50% - 2px);box-shadow:0 -4px 0,-4px -4px 0,4px -4px 0,inset 0 0 0 32px,-4px 0 0,4px 0 0,0 4px 0,-4px 4px 0,4px 4px 0}.fancybox-thumbs{position:absolute;top:0;right:0;bottom:0;left:auto;width:220px;margin:0;padding:5px 5px 0 0;background:#fff;word-break:normal;-webkit-tap-highlight-color:transparent;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar;box-sizing:border-box;z-index:99995}.fancybox-show-thumbs .fancybox-thumbs{display:block}.fancybox-show-thumbs .fancybox-inner{right:220px}.fancybox-thumbs>ul{list-style:none;position:absolute;position:relative;width:100%;height:100%;margin:0;padding:0;overflow-x:hidden;overflow-y:auto;font-size:0}.fancybox-thumbs>ul>li{float:left;overflow:hidden;max-width:50%;padding:0;margin:0;width:105px;height:75px;position:relative;cursor:pointer;outline:none;border:5px solid transparent;border-top-width:0;border-right-width:0;-webkit-tap-highlight-color:transparent;-webkit-backface-visibility:hidden;backface-visibility:hidden;box-sizing:border-box}li.fancybox-thumbs-loading{background:rgba(0,0,0,.1)}.fancybox-thumbs>ul>li>img{position:absolute;top:0;left:0;min-width:100%;min-height:100%;max-width:none;max-height:none;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.fancybox-thumbs>ul>li:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;border-radius:2px;border:4px solid #4ea7f9;z-index:99991;opacity:0;transition:all .2s cubic-bezier(.25,.46,.45,.94)}.fancybox-thumbs>ul>li.fancybox-thumbs-active:before{opacity:1}}
\ No newline at end of file
diff --git a/fancybox/dist/jquery.fancybox.min.js b/fancybox/dist/jquery.fancybox.min.js
new file mode 100644 (file)
index 0000000..ab95714
--- /dev/null
@@ -0,0 +1,12 @@
+// ==================================================
+// fancyBox v3.1.24
+//
+// Licensed GPLv3 for open source use
+// or fancyBox Commercial License for commercial use
+//
+// http://fancyapps.com/fancybox/
+// Copyright 2017 fancyApps
+//
+// ==================================================
+!function(t,e,n,o){"use strict";function i(t){var e=t.currentTarget,o=t.data?t.data.options:{},i=o.selector?n(o.selector):t.data?t.data.items:[],a=n(e).attr("data-fancybox")||"",s=0,r=n.fancybox.getInstance();t.preventDefault(),t.stopPropagation(),r&&r.current.opts.$orig.is(e)||(a?(i=i.length?i.filter('[data-fancybox="'+a+'"]'):n('[data-fancybox="'+a+'"]'),s=i.index(e),s<0&&(s=0)):i=[e],n.fancybox.open(i,o,s))}if(n){if(n.fn.fancybox)return void n.error("fancyBox already initialized");var a={loop:!1,margin:[44,0],gutter:50,keyboard:!0,arrows:!0,infobar:!1,toolbar:!0,buttons:["slideShow","fullScreen","thumbs","close"],idleTime:4,smallBtn:"auto",protect:!1,modal:!1,image:{preload:"auto"},ajax:{settings:{data:{fancybox:!0}}},iframe:{tpl:'<iframe id="fancybox-frame{rnd}" name="fancybox-frame{rnd}" class="fancybox-iframe" frameborder="0" vspace="0" hspace="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen allowtransparency="true" src=""></iframe>',preload:!0,css:{},attr:{scrolling:"auto"}},animationEffect:"zoom",animationDuration:366,zoomOpacity:"auto",transitionEffect:"fade",transitionDuration:366,slideClass:"",baseClass:"",baseTpl:'<div class="fancybox-container" role="dialog" tabindex="-1"><div class="fancybox-bg"></div><div class="fancybox-inner"><div class="fancybox-infobar"><button data-fancybox-prev title="{{PREV}}" class="fancybox-button fancybox-button--left"></button><div class="fancybox-infobar__body"><span data-fancybox-index></span>&nbsp;/&nbsp;<span data-fancybox-count></span></div><button data-fancybox-next title="{{NEXT}}" class="fancybox-button fancybox-button--right"></button></div><div class="fancybox-toolbar">{{BUTTONS}}</div><div class="fancybox-navigation"><button data-fancybox-prev title="{{PREV}}" class="fancybox-arrow fancybox-arrow--left" /><button data-fancybox-next title="{{NEXT}}" class="fancybox-arrow fancybox-arrow--right" /></div><div class="fancybox-stage"></div><div class="fancybox-caption-wrap"><div class="fancybox-caption"></div></div></div></div>',spinnerTpl:'<div class="fancybox-loading"></div>',errorTpl:'<div class="fancybox-error"><p>{{ERROR}}<p></div>',btnTpl:{slideShow:'<button data-fancybox-play class="fancybox-button fancybox-button--play" title="{{PLAY_START}}"></button>',fullScreen:'<button data-fancybox-fullscreen class="fancybox-button fancybox-button--fullscreen" title="{{FULL_SCREEN}}"></button>',thumbs:'<button data-fancybox-thumbs class="fancybox-button fancybox-button--thumbs" title="{{THUMBS}}"></button>',close:'<button data-fancybox-close class="fancybox-button fancybox-button--close" title="{{CLOSE}}"></button>',smallBtn:'<button data-fancybox-close class="fancybox-close-small" title="{{CLOSE}}"></button>'},parentEl:"body",autoFocus:!0,backFocus:!0,trapFocus:!0,fullScreen:{autoStart:!1},touch:{vertical:!0,momentum:!0},hash:null,media:{},slideShow:{autoStart:!1,speed:4e3},thumbs:{autoStart:!1,hideOnClose:!0},onInit:n.noop,beforeLoad:n.noop,afterLoad:n.noop,beforeShow:n.noop,afterShow:n.noop,beforeClose:n.noop,afterClose:n.noop,onActivate:n.noop,onDeactivate:n.noop,clickContent:function(t,e){return"image"===t.type&&"zoom"},clickSlide:"close",clickOutside:"close",dblclickContent:!1,dblclickSlide:!1,dblclickOutside:!1,mobile:{clickContent:function(t,e){return"image"===t.type&&"toggleControls"},clickSlide:function(t,e){return"image"===t.type?"toggleControls":"close"},dblclickContent:function(t,e){return"image"===t.type&&"zoom"},dblclickSlide:function(t,e){return"image"===t.type&&"zoom"}},lang:"en",i18n:{en:{CLOSE:"Close",NEXT:"Next",PREV:"Previous",ERROR:"The requested content cannot be loaded. <br/> Please try again later.",PLAY_START:"Start slideshow",PLAY_STOP:"Pause slideshow",FULL_SCREEN:"Full screen",THUMBS:"Thumbnails"},de:{CLOSE:"Schliessen",NEXT:"Weiter",PREV:"Zurück",ERROR:"Die angeforderten Daten konnten nicht geladen werden. <br/> Bitte versuchen Sie es später nochmal.",PLAY_START:"Diaschau starten",PLAY_STOP:"Diaschau beenden",FULL_SCREEN:"Vollbild",THUMBS:"Vorschaubilder"}}},s=n(t),r=n(e),c=0,l=function(t){return t&&t.hasOwnProperty&&t instanceof n},u=function(){return t.requestAnimationFrame||t.webkitRequestAnimationFrame||t.mozRequestAnimationFrame||t.oRequestAnimationFrame||function(e){return t.setTimeout(e,1e3/60)}}(),d=function(){var t,n=e.createElement("fakeelement"),i={transition:"transitionend",OTransition:"oTransitionEnd",MozTransition:"transitionend",WebkitTransition:"webkitTransitionEnd"};for(t in i)if(n.style[t]!==o)return i[t]}(),f=function(t){return t&&t.length&&t[0].offsetHeight},h=function(t,o,i){var s=this;s.opts=n.extend(!0,{index:i},a,o||{}),o&&n.isArray(o.buttons)&&(s.opts.buttons=o.buttons),s.id=s.opts.id||++c,s.group=[],s.currIndex=parseInt(s.opts.index,10)||0,s.prevIndex=null,s.prevPos=null,s.currPos=0,s.firstRun=null,s.createGroup(t),s.group.length&&(s.$lastFocus=n(e.activeElement).blur(),s.slides={},s.init(t))};n.extend(h.prototype,{init:function(){var t,e,o,i=this,a=i.group[i.currIndex].opts;i.scrollTop=r.scrollTop(),i.scrollLeft=r.scrollLeft(),n.fancybox.getInstance()||n.fancybox.isMobile||"hidden"===n("body").css("overflow")||(t=n("body").width(),n("html").addClass("fancybox-enabled"),t=n("body").width()-t,t>1&&n("head").append('<style id="fancybox-style-noscroll" type="text/css">.compensate-for-scrollbar, .fancybox-enabled body { margin-right: '+t+"px; }</style>")),o="",n.each(a.buttons,function(t,e){o+=a.btnTpl[e]||""}),e=n(i.translate(i,a.baseTpl.replace("{{BUTTONS}}",o))).addClass("fancybox-is-hidden").attr("id","fancybox-container-"+i.id).addClass(a.baseClass).data("FancyBox",i).prependTo(a.parentEl),i.$refs={container:e},["bg","inner","infobar","toolbar","stage","caption"].forEach(function(t){i.$refs[t]=e.find(".fancybox-"+t)}),(!a.arrows||i.group.length<2)&&e.find(".fancybox-navigation").remove(),a.infobar||i.$refs.infobar.remove(),a.toolbar||i.$refs.toolbar.remove(),i.trigger("onInit"),i.activate(),i.jumpTo(i.currIndex)},translate:function(t,e){var n=t.opts.i18n[t.opts.lang];return e.replace(/\{\{(\w+)\}\}/g,function(t,e){var i=n[e];return i===o?t:i})},createGroup:function(t){var e=this,i=n.makeArray(t);n.each(i,function(t,i){var a,s,r,c,l={},u={},d=[];n.isPlainObject(i)?(l=i,u=i.opts||i):"object"===n.type(i)&&n(i).length?(a=n(i),d=a.data(),u="options"in d?d.options:{},u="object"===n.type(u)?u:{},l.src="src"in d?d.src:u.src||a.attr("href"),["width","height","thumb","type","filter"].forEach(function(t){t in d&&(u[t]=d[t])}),"srcset"in d&&(u.image={srcset:d.srcset}),u.$orig=a,l.type||l.src||(l.type="inline",l.src=i)):l={type:"html",src:i+""},l.opts=n.extend(!0,{},e.opts,u),n.fancybox.isMobile&&(l.opts=n.extend(!0,{},l.opts,l.opts.mobile)),s=l.type||l.opts.type,r=l.src||"",!s&&r&&(r.match(/(^data:image\/[a-z0-9+\/=]*,)|(\.(jp(e|g|eg)|gif|png|bmp|webp|svg|ico)((\?|#).*)?$)/i)?s="image":r.match(/\.(pdf)((\?|#).*)?$/i)?s="pdf":"#"===r.charAt(0)&&(s="inline")),l.type=s,l.index=e.group.length,l.opts.$orig&&!l.opts.$orig.length&&delete l.opts.$orig,!l.opts.$thumb&&l.opts.$orig&&(l.opts.$thumb=l.opts.$orig.find("img:first")),l.opts.$thumb&&!l.opts.$thumb.length&&delete l.opts.$thumb,"function"===n.type(l.opts.caption)?l.opts.caption=l.opts.caption.apply(i,[e,l]):"caption"in d&&(l.opts.caption=d.caption),l.opts.caption=l.opts.caption===o?"":l.opts.caption+"","ajax"===s&&(c=r.split(/\s+/,2),c.length>1&&(l.src=c.shift(),l.opts.filter=c.shift())),"auto"==l.opts.smallBtn&&(n.inArray(s,["html","inline","ajax"])>-1?(l.opts.toolbar=!1,l.opts.smallBtn=!0):l.opts.smallBtn=!1),"pdf"===s&&(l.type="iframe",l.opts.iframe.preload=!1),l.opts.modal&&(l.opts=n.extend(!0,l.opts,{infobar:0,toolbar:0,smallBtn:0,keyboard:0,slideShow:0,fullScreen:0,thumbs:0,touch:0,clickContent:!1,clickSlide:!1,clickOutside:!1,dblclickContent:!1,dblclickSlide:!1,dblclickOutside:!1})),e.group.push(l)})},addEvents:function(){var o=this;o.removeEvents(),o.$refs.container.on("click.fb-close","[data-fancybox-close]",function(t){t.stopPropagation(),t.preventDefault(),o.close(t)}).on("click.fb-prev touchend.fb-prev","[data-fancybox-prev]",function(t){t.stopPropagation(),t.preventDefault(),o.previous()}).on("click.fb-next touchend.fb-next","[data-fancybox-next]",function(t){t.stopPropagation(),t.preventDefault(),o.next()}),s.on("orientationchange.fb resize.fb",function(t){t&&t.originalEvent&&"resize"===t.originalEvent.type?u(function(){o.update()}):(o.$refs.stage.hide(),setTimeout(function(){o.$refs.stage.show(),o.update()},500))}),r.on("focusin.fb",function(t){var i=n.fancybox?n.fancybox.getInstance():null;i.isClosing||!i.current||!i.current.opts.trapFocus||n(t.target).hasClass("fancybox-container")||n(t.target).is(e)||i&&"fixed"!==n(t.target).css("position")&&!i.$refs.container.has(t.target).length&&(t.stopPropagation(),i.focus(),s.scrollTop(o.scrollTop).scrollLeft(o.scrollLeft))}),r.on("keydown.fb",function(t){var e=o.current,i=t.keyCode||t.which;if(e&&e.opts.keyboard&&!n(t.target).is("input")&&!n(t.target).is("textarea"))return 8===i||27===i?(t.preventDefault(),void o.close(t)):37===i||38===i?(t.preventDefault(),void o.previous()):39===i||40===i?(t.preventDefault(),void o.next()):void o.trigger("afterKeydown",t,i)}),o.group[o.currIndex].opts.idleTime&&(o.idleSecondsCounter=0,r.on("mousemove.fb-idle mouseenter.fb-idle mouseleave.fb-idle mousedown.fb-idle touchstart.fb-idle touchmove.fb-idle scroll.fb-idle keydown.fb-idle",function(){o.idleSecondsCounter=0,o.isIdle&&o.showControls(),o.isIdle=!1}),o.idleInterval=t.setInterval(function(){o.idleSecondsCounter++,o.idleSecondsCounter>=o.group[o.currIndex].opts.idleTime&&(o.isIdle=!0,o.idleSecondsCounter=0,o.hideControls())},1e3))},removeEvents:function(){var e=this;s.off("orientationchange.fb resize.fb"),r.off("focusin.fb keydown.fb .fb-idle"),this.$refs.container.off(".fb-close .fb-prev .fb-next"),e.idleInterval&&(t.clearInterval(e.idleInterval),e.idleInterval=null)},previous:function(t){return this.jumpTo(this.currPos-1,t)},next:function(t){return this.jumpTo(this.currPos+1,t)},jumpTo:function(t,e,i){var a,s,r,c,l,u,d,h=this,p=h.group.length;if(!(h.isSliding||h.isClosing||h.isAnimating&&h.firstRun)){if(t=parseInt(t,10),s=h.current?h.current.opts.loop:h.opts.loop,!s&&(t<0||t>=p))return!1;if(a=h.firstRun=null===h.firstRun,!(p<2&&!a&&h.isSliding)){if(c=h.current,h.prevIndex=h.currIndex,h.prevPos=h.currPos,r=h.createSlide(t),p>1&&((s||r.index>0)&&h.createSlide(t-1),(s||r.index<p-1)&&h.createSlide(t+1)),h.current=r,h.currIndex=r.index,h.currPos=r.pos,h.trigger("beforeShow",a),h.updateControls(),u=n.fancybox.getTranslate(r.$slide),r.isMoved=(0!==u.left||0!==u.top)&&!r.$slide.hasClass("fancybox-animated"),r.forcedDuration=o,n.isNumeric(e)?r.forcedDuration=e:e=r.opts[a?"animationDuration":"transitionDuration"],e=parseInt(e,10),a)return r.opts.animationEffect&&e&&h.$refs.container.css("transition-duration",e+"ms"),h.$refs.container.removeClass("fancybox-is-hidden"),f(h.$refs.container),h.$refs.container.addClass("fancybox-is-open"),r.$slide.addClass("fancybox-slide--current"),h.loadSlide(r),void h.preload();n.each(h.slides,function(t,e){n.fancybox.stop(e.$slide)}),r.$slide.removeClass("fancybox-slide--next fancybox-slide--previous").addClass("fancybox-slide--current"),r.isMoved?(l=Math.round(r.$slide.width()),n.each(h.slides,function(t,o){var i=o.pos-r.pos;n.fancybox.animate(o.$slide,{top:0,left:i*l+i*o.opts.gutter},e,function(){o.$slide.removeAttr("style").removeClass("fancybox-slide--next fancybox-slide--previous"),o.pos===h.currPos&&(r.isMoved=!1,h.complete())})})):h.$refs.stage.children().removeAttr("style"),r.isLoaded?h.revealContent(r):h.loadSlide(r),h.preload(),c.pos!==r.pos&&(d="fancybox-slide--"+(c.pos>r.pos?"next":"previous"),c.$slide.removeClass("fancybox-slide--complete fancybox-slide--current fancybox-slide--next fancybox-slide--previous"),c.isComplete=!1,e&&(r.isMoved||r.opts.transitionEffect)&&(r.isMoved?c.$slide.addClass(d):(d="fancybox-animated "+d+" fancybox-fx-"+r.opts.transitionEffect,n.fancybox.animate(c.$slide,d,e,function(){c.$slide.removeClass(d).removeAttr("style")}))))}}},createSlide:function(t){var e,o,i=this;return o=t%i.group.length,o=o<0?i.group.length+o:o,!i.slides[t]&&i.group[o]&&(e=n('<div class="fancybox-slide"></div>').appendTo(i.$refs.stage),i.slides[t]=n.extend(!0,{},i.group[o],{pos:t,$slide:e,isLoaded:!1}),i.updateSlide(i.slides[t])),i.slides[t]},scaleToActual:function(t,e,i){var a,s,r,c,l,u=this,d=u.current,f=d.$content,h=parseInt(d.$slide.width(),10),p=parseInt(d.$slide.height(),10),g=d.width,b=d.height;"image"!=d.type||d.hasError||!f||u.isAnimating||(n.fancybox.stop(f),u.isAnimating=!0,t=t===o?.5*h:t,e=e===o?.5*p:e,a=n.fancybox.getTranslate(f),c=g/a.width,l=b/a.height,s=.5*h-.5*g,r=.5*p-.5*b,g>h&&(s=a.left*c-(t*c-t),s>0&&(s=0),s<h-g&&(s=h-g)),b>p&&(r=a.top*l-(e*l-e),r>0&&(r=0),r<p-b&&(r=p-b)),u.updateCursor(g,b),n.fancybox.animate(f,{top:r,left:s,scaleX:c,scaleY:l},i||330,function(){u.isAnimating=!1}),u.SlideShow&&u.SlideShow.isActive&&u.SlideShow.stop())},scaleToFit:function(t){var e,o=this,i=o.current,a=i.$content;"image"!=i.type||i.hasError||!a||o.isAnimating||(n.fancybox.stop(a),o.isAnimating=!0,e=o.getFitPos(i),o.updateCursor(e.width,e.height),n.fancybox.animate(a,{top:e.top,left:e.left,scaleX:e.width/a.width(),scaleY:e.height/a.height()},t||330,function(){o.isAnimating=!1}))},getFitPos:function(t){var e,o,i,a,r,c=this,l=t.$content,u=t.width,d=t.height,f=t.opts.margin;return!(!l||!l.length||!u&&!d)&&("number"===n.type(f)&&(f=[f,f]),2==f.length&&(f=[f[0],f[1],f[0],f[1]]),s.width()<800&&(f=[0,0,0,0]),e=parseInt(c.$refs.stage.width(),10)-(f[1]+f[3]),o=parseInt(c.$refs.stage.height(),10)-(f[0]+f[2]),i=Math.min(1,e/u,o/d),a=Math.floor(i*u),r=Math.floor(i*d),{top:Math.floor(.5*(o-r))+f[0],left:Math.floor(.5*(e-a))+f[3],width:a,height:r})},update:function(){var t=this;n.each(t.slides,function(e,n){t.updateSlide(n)})},updateSlide:function(t){var e=this,o=t.$content;o&&(t.width||t.height)&&(n.fancybox.stop(o),n.fancybox.setTranslate(o,e.getFitPos(t)),t.pos===e.currPos&&e.updateCursor()),t.$slide.trigger("refresh"),e.trigger("onUpdate",t)},updateCursor:function(t,e){var n,i=this,a=i.$refs.container.removeClass("fancybox-is-zoomable fancybox-can-zoomIn fancybox-can-drag fancybox-can-zoomOut");i.current&&!i.isClosing&&(i.isZoomable()?(a.addClass("fancybox-is-zoomable"),n=t!==o&&e!==o?t<i.current.width&&e<i.current.height:i.isScaledDown(),n?a.addClass("fancybox-can-zoomIn"):i.current.opts.touch?a.addClass("fancybox-can-drag"):a.addClass("fancybox-can-zoomOut")):i.current.opts.touch&&a.addClass("fancybox-can-drag"))},isZoomable:function(){var t,e=this,o=e.current;if(o&&!e.isClosing)return!!("image"===o.type&&o.isLoaded&&!o.hasError&&("zoom"===o.opts.clickContent||n.isFunction(o.opts.clickContent)&&"zoom"===o.opts.clickContent(o))&&(t=e.getFitPos(o),o.width>t.width||o.height>t.height))},isScaledDown:function(){var t=this,e=t.current,o=e.$content,i=!1;return o&&(i=n.fancybox.getTranslate(o),i=i.width<e.width||i.height<e.height),i},canPan:function(){var t=this,e=t.current,n=e.$content,o=!1;return n&&(o=t.getFitPos(e),o=Math.abs(n.width()-o.width)>1||Math.abs(n.height()-o.height)>1),o},loadSlide:function(t){var e,o,i,a=this;if(!t.isLoading&&!t.isLoaded){switch(t.isLoading=!0,a.trigger("beforeLoad",t),e=t.type,o=t.$slide,o.off("refresh").trigger("onReset").addClass("fancybox-slide--"+(e||"unknown")).addClass(t.opts.slideClass),e){case"image":a.setImage(t);break;case"iframe":a.setIframe(t);break;case"html":a.setContent(t,t.src||t.content);break;case"inline":n(t.src).length?a.setContent(t,n(t.src)):a.setError(t);break;case"ajax":a.showLoading(t),i=n.ajax(n.extend({},t.opts.ajax.settings,{url:t.src,success:function(e,n){"success"===n&&a.setContent(t,e)},error:function(e,n){e&&"abort"!==n&&a.setError(t)}})),o.one("onReset",function(){i.abort()});break;default:a.setError(t)}return!0}},setImage:function(e){var o,i,a,s,r=this,c=e.opts.image.srcset;if(c){a=t.devicePixelRatio||1,s=t.innerWidth*a,i=c.split(",").map(function(t){var e={};return t.trim().split(/\s+/).forEach(function(t,n){var o=parseInt(t.substring(0,t.length-1),10);return 0===n?e.url=t:void(o&&(e.value=o,e.postfix=t[t.length-1]))}),e}),i.sort(function(t,e){return t.value-e.value});for(var l=0;l<i.length;l++){var u=i[l];if("w"===u.postfix&&u.value>=s||"x"===u.postfix&&u.value>=a){o=u;break}}!o&&i.length&&(o=i[i.length-1]),o&&(e.src=o.url,e.width&&e.height&&"w"==o.postfix&&(e.height=e.width/e.height*o.value,e.width=o.value))}e.$content=n('<div class="fancybox-image-wrap"></div>').addClass("fancybox-is-hidden").appendTo(e.$slide),e.opts.preload!==!1&&e.opts.width&&e.opts.height&&(e.opts.thumb||e.opts.$thumb)?(e.width=e.opts.width,e.height=e.opts.height,e.$ghost=n("<img />").one("error",function(){n(this).remove(),e.$ghost=null,r.setBigImage(e)}).one("load",function(){r.afterLoad(e),r.setBigImage(e)}).addClass("fancybox-image").appendTo(e.$content).attr("src",e.opts.thumb||e.opts.$thumb.attr("src"))):r.setBigImage(e)},setBigImage:function(t){var e=this,o=n("<img />");t.$image=o.one("error",function(){e.setError(t)}).one("load",function(){clearTimeout(t.timouts),t.timouts=null,e.isClosing||(t.width=this.naturalWidth,t.height=this.naturalHeight,t.opts.image.srcset&&o.attr("sizes","100vw").attr("srcset",t.opts.image.srcset),e.hideLoading(t),t.$ghost?t.timouts=setTimeout(function(){t.timouts=null,t.$ghost.hide()},Math.min(300,Math.max(1e3,t.height/1600))):e.afterLoad(t))}).addClass("fancybox-image").attr("src",t.src).appendTo(t.$content),o[0].complete?o.trigger("load"):o[0].error?o.trigger("error"):t.timouts=setTimeout(function(){o[0].complete||t.hasError||e.showLoading(t)},100)},setIframe:function(t){var e,i=this,a=t.opts.iframe,s=t.$slide;t.$content=n('<div class="fancybox-content'+(a.preload?" fancybox-is-hidden":"")+'"></div>').css(a.css).appendTo(s),e=n(a.tpl.replace(/\{rnd\}/g,(new Date).getTime())).attr(a.attr).appendTo(t.$content),a.preload?(i.showLoading(t),e.on("load.fb error.fb",function(e){this.isReady=1,t.$slide.trigger("refresh"),i.afterLoad(t)}),s.on("refresh.fb",function(){var n,i,s,r,c,l=t.$content;if(1===e[0].isReady){try{n=e.contents(),i=n.find("body")}catch(t){}i&&i.length&&(a.css.width===o||a.css.height===o)&&(s=e[0].contentWindow.document.documentElement.scrollWidth,r=Math.ceil(i.outerWidth(!0)+(l.width()-s)),c=Math.ceil(i.outerHeight(!0)),l.css({width:a.css.width===o?r+(l.outerWidth()-l.innerWidth()):a.css.width,height:a.css.height===o?c+(l.outerHeight()-l.innerHeight()):a.css.height})),l.removeClass("fancybox-is-hidden")}})):this.afterLoad(t),e.attr("src",t.src),t.opts.smallBtn===!0&&t.$content.prepend(i.translate(t,t.opts.btnTpl.smallBtn)),s.one("onReset",function(){try{n(this).find("iframe").hide().attr("src","//about:blank")}catch(t){}n(this).empty(),t.isLoaded=!1})},setContent:function(t,e){var o=this;o.isClosing||(o.hideLoading(t),t.$slide.empty(),l(e)&&e.parent().length?(e.parent(".fancybox-slide--inline").trigger("onReset"),t.$placeholder=n("<div></div>").hide().insertAfter(e),e.css("display","inline-block")):t.hasError||("string"===n.type(e)&&(e=n("<div>").append(n.trim(e)).contents(),3===e[0].nodeType&&(e=n("<div>").html(e))),t.opts.filter&&(e=n("<div>").html(e).find(t.opts.filter))),t.$slide.one("onReset",function(){t.$placeholder&&(t.$placeholder.after(e.hide()).remove(),t.$placeholder=null),t.$smallBtn&&(t.$smallBtn.remove(),t.$smallBtn=null),t.hasError||(n(this).empty(),t.isLoaded=!1)}),t.$content=n(e).appendTo(t.$slide),t.opts.smallBtn&&!t.$smallBtn&&(t.$smallBtn=n(o.translate(t,t.opts.btnTpl.smallBtn)).appendTo(t.$content)),this.afterLoad(t))},setError:function(t){t.hasError=!0,t.$slide.removeClass("fancybox-slide--"+t.type),this.setContent(t,this.translate(t,t.opts.errorTpl))},showLoading:function(t){var e=this;t=t||e.current,t&&!t.$spinner&&(t.$spinner=n(e.opts.spinnerTpl).appendTo(t.$slide))},hideLoading:function(t){var e=this;t=t||e.current,t&&t.$spinner&&(t.$spinner.remove(),delete t.$spinner)},afterLoad:function(t){var e=this;e.isClosing||(t.isLoading=!1,t.isLoaded=!0,e.trigger("afterLoad",t),e.hideLoading(t),t.opts.protect&&t.$content&&!t.hasError&&(t.$content.on("contextmenu.fb",function(t){return 2==t.button&&t.preventDefault(),!0}),"image"===t.type&&n('<div class="fancybox-spaceball"></div>').appendTo(t.$content)),e.revealContent(t))},revealContent:function(t){var e,i,a,s,r,c=this,l=t.$slide,u=!1;return e=t.opts[c.firstRun?"animationEffect":"transitionEffect"],a=t.opts[c.firstRun?"animationDuration":"transitionDuration"],a=parseInt(t.forcedDuration===o?a:t.forcedDuration,10),!t.isMoved&&t.pos===c.currPos&&a||(e=!1),"zoom"!==e||t.pos===c.currPos&&a&&"image"===t.type&&!t.hasError&&(u=c.getThumbPos(t))||(e="fade"),"zoom"===e?(r=c.getFitPos(t),r.scaleX=r.width/u.width,r.scaleY=r.height/u.height,delete r.width,delete r.height,s=t.opts.zoomOpacity,"auto"==s&&(s=Math.abs(t.width/t.height-u.width/u.height)>.1),s&&(u.opacity=.1,r.opacity=1),n.fancybox.setTranslate(t.$content.removeClass("fancybox-is-hidden"),u),f(t.$content),void n.fancybox.animate(t.$content,r,a,function(){c.complete()})):(c.updateSlide(t),e?(n.fancybox.stop(l),i="fancybox-animated fancybox-slide--"+(t.pos>c.prevPos?"next":"previous")+" fancybox-fx-"+e,l.removeAttr("style").removeClass("fancybox-slide--current fancybox-slide--next fancybox-slide--previous").addClass(i),t.$content.removeClass("fancybox-is-hidden"),f(l),void n.fancybox.animate(l,"fancybox-slide--current",a,function(e){l.removeClass(i).removeAttr("style"),t.pos===c.currPos&&c.complete()},!0)):(f(l),t.$content.removeClass("fancybox-is-hidden"),void(t.pos===c.currPos&&c.complete())))},getThumbPos:function(o){var i,a=this,s=!1,r=function(e){for(var o,i=e[0],a=i.getBoundingClientRect(),s=[];null!==i.parentElement;)"hidden"!==n(i.parentElement).css("overflow")&&"auto"!==n(i.parentElement).css("overflow")||s.push(i.parentElement.getBoundingClientRect()),i=i.parentElement;return o=s.every(function(t){var e=Math.min(a.right,t.right)-Math.max(a.left,t.left),n=Math.min(a.bottom,t.bottom)-Math.max(a.top,t.top);return e>0&&n>0}),o&&a.bottom>0&&a.right>0&&a.left<n(t).width()&&a.top<n(t).height()},c=o.opts.$thumb,l=c?c.offset():0;return l&&c[0].ownerDocument===e&&r(c)&&(i=a.$refs.stage.offset(),s={top:l.top-i.top+parseFloat(c.css("border-top-width")||0),left:l.left-i.left+parseFloat(c.css("border-left-width")||0),width:c.width(),height:c.height(),scaleX:1,scaleY:1}),s},complete:function(){var t=this,o=t.current,i={};o.isMoved||!o.isLoaded||o.isComplete||(o.isComplete=!0,o.$slide.siblings().trigger("onReset"),f(o.$slide),o.$slide.addClass("fancybox-slide--complete"),n.each(t.slides,function(e,o){o.pos>=t.currPos-1&&o.pos<=t.currPos+1?i[o.pos]=o:o&&(n.fancybox.stop(o.$slide),o.$slide.unbind().remove())}),t.slides=i,t.updateCursor(),t.trigger("afterShow"),(n(e.activeElement).is("[disabled]")||o.opts.autoFocus&&"image"!=o.type&&"iframe"!==o.type)&&t.focus())},preload:function(){var t,e,n=this;n.group.length<2||(t=n.slides[n.currPos+1],e=n.slides[n.currPos-1],t&&"image"===t.type&&n.loadSlide(t),e&&"image"===e.type&&n.loadSlide(e))},focus:function(){var t,e=this.current;this.isClosing||(t=e&&e.isComplete?e.$slide.find("button,:input,[tabindex],a").filter(":not([disabled]):visible:first"):null,t=t&&t.length?t:this.$refs.container,t.focus())},activate:function(){var t=this;n(".fancybox-container").each(function(){var e=n(this).data("FancyBox");e&&e.uid!==t.uid&&!e.isClosing&&e.trigger("onDeactivate")}),t.current&&(t.$refs.container.index()>0&&t.$refs.container.prependTo(e.body),t.updateControls()),t.trigger("onActivate"),t.addEvents()},close:function(t,e){var o,i,a,s,r,c,l=this,f=l.current,h=function(){l.cleanUp(t)};return!l.isClosing&&(l.isClosing=!0,l.trigger("beforeClose",t)===!1?(l.isClosing=!1,u(function(){l.update()}),!1):(l.removeEvents(),f.timouts&&clearTimeout(f.timouts),a=f.$content,o=f.opts.animationEffect,i=n.isNumeric(e)?e:o?f.opts.animationDuration:0,f.$slide.off(d).removeClass("fancybox-slide--complete fancybox-slide--next fancybox-slide--previous fancybox-animated"),f.$slide.siblings().trigger("onReset").remove(),i&&l.$refs.container.removeClass("fancybox-is-open").addClass("fancybox-is-closing"),l.hideLoading(f),l.hideControls(),l.updateCursor(),"zoom"!==o||t!==!0&&a&&i&&"image"===f.type&&!f.hasError&&(c=l.getThumbPos(f))||(o="fade"),"zoom"===o?(n.fancybox.stop(a),r=n.fancybox.getTranslate(a),r.width=r.width*r.scaleX,r.height=r.height*r.scaleY,s=f.opts.zoomOpacity,"auto"==s&&(s=Math.abs(f.width/f.height-c.width/c.height)>.1),s&&(c.opacity=0),r.scaleX=r.width/c.width,r.scaleY=r.height/c.height,r.width=c.width,r.height=c.height,n.fancybox.setTranslate(f.$content,r),n.fancybox.animate(f.$content,c,i,h),!0):(o&&i?t===!0?setTimeout(h,i):n.fancybox.animate(f.$slide.removeClass("fancybox-slide--current"),"fancybox-animated fancybox-slide--previous fancybox-fx-"+o,i,h):h(),!0)))},cleanUp:function(t){var e,o=this;o.current.$slide.trigger("onReset"),o.$refs.container.empty().remove(),o.trigger("afterClose",t),o.$lastFocus&&o.current.opts.backFocus&&o.$lastFocus.focus(),o.current=null,e=n.fancybox.getInstance(),e?e.activate():(s.scrollTop(o.scrollTop).scrollLeft(o.scrollLeft),n("html").removeClass("fancybox-enabled"),n("#fancybox-style-noscroll").remove())},trigger:function(t,e){var o,i=Array.prototype.slice.call(arguments,1),a=this,s=e&&e.opts?e:a.current;return s?i.unshift(s):s=a,i.unshift(a),n.isFunction(s.opts[t])&&(o=s.opts[t].apply(s,i)),o===!1?o:void("afterClose"===t?r.trigger(t+".fb",i):a.$refs.container.trigger(t+".fb",i))},updateControls:function(t){var e=this,o=e.current,i=o.index,a=o.opts,s=a.caption,r=e.$refs.caption;o.$slide.trigger("refresh"),e.$caption=s&&s.length?r.html(s):null,e.isHiddenControls||e.showControls(),n("[data-fancybox-count]").html(e.group.length),n("[data-fancybox-index]").html(i+1),n("[data-fancybox-prev]").prop("disabled",!a.loop&&i<=0),n("[data-fancybox-next]").prop("disabled",!a.loop&&i>=e.group.length-1)},hideControls:function(){this.isHiddenControls=!0,this.$refs.container.removeClass("fancybox-show-infobar fancybox-show-toolbar fancybox-show-caption fancybox-show-nav")},showControls:function(){var t=this,e=t.current?t.current.opts:t.opts,n=t.$refs.container;t.isHiddenControls=!1,t.idleSecondsCounter=0,n.toggleClass("fancybox-show-toolbar",!(!e.toolbar||!e.buttons)).toggleClass("fancybox-show-infobar",!!(e.infobar&&t.group.length>1)).toggleClass("fancybox-show-nav",!!(e.arrows&&t.group.length>1)).toggleClass("fancybox-is-modal",!!e.modal),t.$caption?n.addClass("fancybox-show-caption "):n.removeClass("fancybox-show-caption")},toggleControls:function(){this.isHiddenControls?this.showControls():this.hideControls()}}),n.fancybox={version:"3.1.24",defaults:a,getInstance:function(t){var e=n('.fancybox-container:not(".fancybox-is-closing"):first').data("FancyBox"),o=Array.prototype.slice.call(arguments,1);return e instanceof h&&("string"===n.type(t)?e[t].apply(e,o):"function"===n.type(t)&&t.apply(e,o),e)},open:function(t,e,n){return new h(t,e,n)},close:function(t){var e=this.getInstance();e&&(e.close(),t===!0&&this.close())},destroy:function(){this.close(!0),r.off("click.fb-start")},isMobile:e.createTouch!==o&&/Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.userAgent),use3d:function(){var n=e.createElement("div");return t.getComputedStyle&&t.getComputedStyle(n).getPropertyValue("transform")&&!(e.documentMode&&e.documentMode<11)}(),getTranslate:function(t){var e;if(!t||!t.length)return!1;if(e=t.eq(0).css("transform"),e&&e.indexOf("matrix")!==-1?(e=e.split("(")[1],e=e.split(")")[0],e=e.split(",")):e=[],e.length)e=e.length>10?[e[13],e[12],e[0],e[5]]:[e[5],e[4],e[0],e[3]],e=e.map(parseFloat);else{e=[0,0,1,1];var n=/\.*translate\((.*)px,(.*)px\)/i,o=n.exec(t.eq(0).attr("style"));o&&(e[0]=parseFloat(o[2]),e[1]=parseFloat(o[1]))}return{top:e[0],left:e[1],scaleX:e[2],scaleY:e[3],opacity:parseFloat(t.css("opacity")),width:t.width(),height:t.height()}},setTranslate:function(t,e){var n="",i={};if(t&&e)return e.left===o&&e.top===o||(n=(e.left===o?t.position().left:e.left)+"px, "+(e.top===o?t.position().top:e.top)+"px",n=this.use3d?"translate3d("+n+", 0px)":"translate("+n+")"),e.scaleX!==o&&e.scaleY!==o&&(n=(n.length?n+" ":"")+"scale("+e.scaleX+", "+e.scaleY+")"),n.length&&(i.transform=n),e.opacity!==o&&(i.opacity=e.opacity),e.width!==o&&(i.width=e.width),e.height!==o&&(i.height=e.height),t.css(i)},animate:function(t,e,i,a,s){var r=d||"transitionend";n.isFunction(i)&&(a=i,i=null),n.isPlainObject(e)||t.removeAttr("style"),t.on(r,function(i){(!i||!i.originalEvent||t.is(i.originalEvent.target)&&"z-index"!=i.originalEvent.propertyName)&&(t.off(r),n.isPlainObject(e)?e.scaleX!==o&&e.scaleY!==o&&(t.css("transition-duration","0ms"),e.width=Math.round(t.width()*e.scaleX),e.height=Math.round(t.height()*e.scaleY),e.scaleX=1,e.scaleY=1,n.fancybox.setTranslate(t,e)):s!==!0&&t.removeClass(e),n.isFunction(a)&&a(i))}),n.isNumeric(i)&&t.css("transition-duration",i+"ms"),n.isPlainObject(e)?n.fancybox.setTranslate(t,e):t.addClass(e),t.data("timer",setTimeout(function(){t.trigger("transitionend")},i+16))},stop:function(t){clearTimeout(t.data("timer")),t.off(d)}},n.fn.fancybox=function(t){var e;return t=t||{},e=t.selector||!1,e?n("body").off("click.fb-start",e).on("click.fb-start",e,{options:t},i):this.off("click.fb-start").on("click.fb-start",{items:this,options:t},i),this},r.on("click.fb-start","[data-fancybox]",i)}}(window,document,window.jQuery),function(t){"use strict";var e=function(e,n,o){if(e)return o=o||"","object"===t.type(o)&&(o=t.param(o,!0)),t.each(n,function(t,n){e=e.replace("$"+t,n||"")}),o.length&&(e+=(e.indexOf("?")>0?"&":"?")+o),e},n={youtube:{matcher:/(youtube\.com|youtu\.be|youtube\-nocookie\.com)\/(watch\?(.*&)?v=|v\/|u\/|embed\/?)?(videoseries\?list=(.*)|[\w-]{11}|\?listType=(.*)&list=(.*))(.*)/i,params:{autoplay:1,autohide:1,fs:1,rel:0,hd:1,wmode:"transparent",enablejsapi:1,html5:1},paramPlace:8,type:"iframe",url:"//www.youtube.com/embed/$4",thumb:"//img.youtube.com/vi/$4/hqdefault.jpg"},vimeo:{matcher:/^.+vimeo.com\/(.*\/)?([\d]+)(.*)?/,params:{autoplay:1,hd:1,show_title:1,show_byline:1,show_portrait:0,fullscreen:1,api:1},paramPlace:3,type:"iframe",url:"//player.vimeo.com/video/$2"},metacafe:{matcher:/metacafe.com\/watch\/(\d+)\/(.*)?/,type:"iframe",url:"//www.metacafe.com/embed/$1/?ap=1"},dailymotion:{matcher:/dailymotion.com\/video\/(.*)\/?(.*)/,params:{additionalInfos:0,autoStart:1},type:"iframe",url:"//www.dailymotion.com/embed/video/$1"},vine:{matcher:/vine.co\/v\/([a-zA-Z0-9\?\=\-]+)/,type:"iframe",url:"//vine.co/v/$1/embed/simple"},instagram:{matcher:/(instagr\.am|instagram\.com)\/p\/([a-zA-Z0-9_\-]+)\/?/i,type:"image",url:"//$1/p/$2/media/?size=l"},gmap_place:{matcher:/(maps\.)?google\.([a-z]{2,3}(\.[a-z]{2})?)\/(((maps\/(place\/(.*)\/)?\@(.*),(\d+.?\d+?)z))|(\?ll=))(.*)?/i,type:"iframe",url:function(t){return"//maps.google."+t[2]+"/?ll="+(t[9]?t[9]+"&z="+Math.floor(t[10])+(t[12]?t[12].replace(/^\//,"&"):""):t[12])+"&output="+(t[12]&&t[12].indexOf("layer=c")>0?"svembed":"embed")}},gmap_search:{matcher:/(maps\.)?google\.([a-z]{2,3}(\.[a-z]{2})?)\/(maps\/search\/)(.*)/i,type:"iframe",url:function(t){return"//maps.google."+t[2]+"/maps?q="+t[5].replace("query=","q=").replace("api=1","")+"&output=embed"}}};t(document).on("onInit.fb",function(o,i){t.each(i.group,function(o,i){var a,s,r,c,l,u,d,f=i.src||"",h=!1;i.type||(a=t.extend(!0,{},n,i.opts.media),t.each(a,function(n,o){if(r=f.match(o.matcher),u={},d=n,r){if(h=o.type,o.paramPlace&&r[o.paramPlace]){l=r[o.paramPlace],"?"==l[0]&&(l=l.substring(1)),l=l.split("&");for(var a=0;a<l.length;++a){var p=l[a].split("=",2);2==p.length&&(u[p[0]]=decodeURIComponent(p[1].replace(/\+/g," ")))}}return c=t.extend(!0,{},o.params,i.opts[n],u),f="function"===t.type(o.url)?o.url.call(this,r,c,i):e(o.url,r,c),s="function"===t.type(o.thumb)?o.thumb.call(this,r,c,i):e(o.thumb,r),"vimeo"===d&&(f=f.replace("&%23","#")),!1}}),h?(i.src=f,i.type=h,i.opts.thumb||i.opts.$thumb&&i.opts.$thumb.length||(i.opts.thumb=s),"iframe"===h&&(t.extend(!0,i.opts,{iframe:{preload:!1,attr:{scrolling:"no"}}}),i.contentProvider=d,
+i.opts.slideClass+=" fancybox-slide--"+("gmap_place"==d||"gmap_search"==d?"map":"video"))):i.type="image")})})}(window.jQuery),function(t,e,n){"use strict";var o=function(){return t.requestAnimationFrame||t.webkitRequestAnimationFrame||t.mozRequestAnimationFrame||t.oRequestAnimationFrame||function(e){return t.setTimeout(e,1e3/60)}}(),i=function(){return t.cancelAnimationFrame||t.webkitCancelAnimationFrame||t.mozCancelAnimationFrame||t.oCancelAnimationFrame||function(e){t.clearTimeout(e)}}(),a=function(e){var n=[];e=e.originalEvent||e||t.e,e=e.touches&&e.touches.length?e.touches:e.changedTouches&&e.changedTouches.length?e.changedTouches:[e];for(var o in e)e[o].pageX?n.push({x:e[o].pageX,y:e[o].pageY}):e[o].clientX&&n.push({x:e[o].clientX,y:e[o].clientY});return n},s=function(t,e,n){return e&&t?"x"===n?t.x-e.x:"y"===n?t.y-e.y:Math.sqrt(Math.pow(t.x-e.x,2)+Math.pow(t.y-e.y,2)):0},r=function(t){if(t.is("a,button,input,select,textarea")||n.isFunction(t.get(0).onclick))return!0;for(var e=0,o=t[0].attributes,i=o.length;e<i;e++)if("data-fancybox-"===o[e].nodeName.substr(0,14))return!0;return!1},c=function(e){var n=t.getComputedStyle(e)["overflow-y"],o=t.getComputedStyle(e)["overflow-x"],i=("scroll"===n||"auto"===n)&&e.scrollHeight>e.clientHeight,a=("scroll"===o||"auto"===o)&&e.scrollWidth>e.clientWidth;return i||a},l=function(t){for(var e=!1;;){if(e=c(t.get(0)))break;if(t=t.parent(),!t.length||t.hasClass("fancybox-stage")||t.is("body"))break}return e},u=function(t){var e=this;e.instance=t,e.$bg=t.$refs.bg,e.$stage=t.$refs.stage,e.$container=t.$refs.container,e.destroy(),e.$container.on("touchstart.fb.touch mousedown.fb.touch",n.proxy(e,"ontouchstart"))};u.prototype.destroy=function(){this.$container.off(".fb.touch")},u.prototype.ontouchstart=function(o){var i=this,c=n(o.target),u=i.instance,d=u.current,f=d.$content,h="touchstart"==o.type;if(h&&i.$container.off("mousedown.fb.touch"),!d||i.instance.isAnimating||i.instance.isClosing)return o.stopPropagation(),void o.preventDefault();if((!o.originalEvent||2!=o.originalEvent.button)&&c.length&&!r(c)&&!r(c.parent())&&!(o.originalEvent.clientX>c[0].clientWidth+c.offset().left)&&(i.startPoints=a(o),i.startPoints&&!(i.startPoints.length>1&&u.isSliding))){if(i.$target=c,i.$content=f,i.canTap=!0,n(e).off(".fb.touch"),n(e).on(h?"touchend.fb.touch touchcancel.fb.touch":"mouseup.fb.touch mouseleave.fb.touch",n.proxy(i,"ontouchend")),n(e).on(h?"touchmove.fb.touch":"mousemove.fb.touch",n.proxy(i,"ontouchmove")),o.stopPropagation(),!u.current.opts.touch&&!u.canPan()||!c.is(i.$stage)&&!i.$stage.find(c).length)return void(c.is("img")&&o.preventDefault());n.fancybox.isMobile&&(l(i.$target)||l(i.$target.parent()))||o.preventDefault(),i.canvasWidth=Math.round(d.$slide[0].clientWidth),i.canvasHeight=Math.round(d.$slide[0].clientHeight),i.startTime=(new Date).getTime(),i.distanceX=i.distanceY=i.distance=0,i.isPanning=!1,i.isSwiping=!1,i.isZooming=!1,i.sliderStartPos=i.sliderLastPos||{top:0,left:0},i.contentStartPos=n.fancybox.getTranslate(i.$content),i.contentLastPos=null,1!==i.startPoints.length||i.isZooming||(i.canTap=!u.isSliding,"image"===d.type&&(i.contentStartPos.width>i.canvasWidth+1||i.contentStartPos.height>i.canvasHeight+1)?(n.fancybox.stop(i.$content),i.$content.css("transition-duration","0ms"),i.isPanning=!0):i.isSwiping=!0,i.$container.addClass("fancybox-controls--isGrabbing")),2!==i.startPoints.length||u.isAnimating||d.hasError||"image"!==d.type||!d.isLoaded&&!d.$ghost||(i.isZooming=!0,i.isSwiping=!1,i.isPanning=!1,n.fancybox.stop(i.$content),i.$content.css("transition-duration","0ms"),i.centerPointStartX=.5*(i.startPoints[0].x+i.startPoints[1].x)-n(t).scrollLeft(),i.centerPointStartY=.5*(i.startPoints[0].y+i.startPoints[1].y)-n(t).scrollTop(),i.percentageOfImageAtPinchPointX=(i.centerPointStartX-i.contentStartPos.left)/i.contentStartPos.width,i.percentageOfImageAtPinchPointY=(i.centerPointStartY-i.contentStartPos.top)/i.contentStartPos.height,i.startDistanceBetweenFingers=s(i.startPoints[0],i.startPoints[1]))}},u.prototype.ontouchmove=function(t){var e=this;if(e.newPoints=a(t),n.fancybox.isMobile&&(l(e.$target)||l(e.$target.parent())))return t.stopPropagation(),void(e.canTap=!1);if((e.instance.current.opts.touch||e.instance.canPan())&&e.newPoints&&e.newPoints.length&&(e.distanceX=s(e.newPoints[0],e.startPoints[0],"x"),e.distanceY=s(e.newPoints[0],e.startPoints[0],"y"),e.distance=s(e.newPoints[0],e.startPoints[0]),e.distance>0)){if(!e.$target.is(e.$stage)&&!e.$stage.find(e.$target).length)return;t.stopPropagation(),t.preventDefault(),e.isSwiping?e.onSwipe():e.isPanning?e.onPan():e.isZooming&&e.onZoom()}},u.prototype.onSwipe=function(){var e,a=this,s=a.isSwiping,r=a.sliderStartPos.left||0;s===!0?Math.abs(a.distance)>10&&(a.canTap=!1,a.instance.group.length<2&&a.instance.opts.touch.vertical?a.isSwiping="y":a.instance.isSliding||a.instance.opts.touch.vertical===!1||"auto"===a.instance.opts.touch.vertical&&n(t).width()>800?a.isSwiping="x":(e=Math.abs(180*Math.atan2(a.distanceY,a.distanceX)/Math.PI),a.isSwiping=e>45&&e<135?"y":"x"),a.instance.isSliding=a.isSwiping,a.startPoints=a.newPoints,n.each(a.instance.slides,function(t,e){n.fancybox.stop(e.$slide),e.$slide.css("transition-duration","0ms"),e.inTransition=!1,e.pos===a.instance.current.pos&&(a.sliderStartPos.left=n.fancybox.getTranslate(e.$slide).left)}),a.instance.SlideShow&&a.instance.SlideShow.isActive&&a.instance.SlideShow.stop()):("x"==s&&(a.distanceX>0&&(a.instance.group.length<2||0===a.instance.current.index&&!a.instance.current.opts.loop)?r+=Math.pow(a.distanceX,.8):a.distanceX<0&&(a.instance.group.length<2||a.instance.current.index===a.instance.group.length-1&&!a.instance.current.opts.loop)?r-=Math.pow(-a.distanceX,.8):r+=a.distanceX),a.sliderLastPos={top:"x"==s?0:a.sliderStartPos.top+a.distanceY,left:r},a.requestId&&(i(a.requestId),a.requestId=null),a.requestId=o(function(){a.sliderLastPos&&(n.each(a.instance.slides,function(t,e){var o=e.pos-a.instance.currPos;n.fancybox.setTranslate(e.$slide,{top:a.sliderLastPos.top,left:a.sliderLastPos.left+o*a.canvasWidth+o*e.opts.gutter})}),a.$container.addClass("fancybox-is-sliding"))}))},u.prototype.onPan=function(){var t,e,a,s=this;s.canTap=!1,t=s.contentStartPos.width>s.canvasWidth?s.contentStartPos.left+s.distanceX:s.contentStartPos.left,e=s.contentStartPos.top+s.distanceY,a=s.limitMovement(t,e,s.contentStartPos.width,s.contentStartPos.height),a.scaleX=s.contentStartPos.scaleX,a.scaleY=s.contentStartPos.scaleY,s.contentLastPos=a,s.requestId&&(i(s.requestId),s.requestId=null),s.requestId=o(function(){n.fancybox.setTranslate(s.$content,s.contentLastPos)})},u.prototype.limitMovement=function(t,e,n,o){var i,a,s,r,c=this,l=c.canvasWidth,u=c.canvasHeight,d=c.contentStartPos.left,f=c.contentStartPos.top,h=c.distanceX,p=c.distanceY;return i=Math.max(0,.5*l-.5*n),a=Math.max(0,.5*u-.5*o),s=Math.min(l-n,.5*l-.5*n),r=Math.min(u-o,.5*u-.5*o),n>l&&(h>0&&t>i&&(t=i-1+Math.pow(-i+d+h,.8)||0),h<0&&t<s&&(t=s+1-Math.pow(s-d-h,.8)||0)),o>u&&(p>0&&e>a&&(e=a-1+Math.pow(-a+f+p,.8)||0),p<0&&e<r&&(e=r+1-Math.pow(r-f-p,.8)||0)),{top:e,left:t}},u.prototype.limitPosition=function(t,e,n,o){var i=this,a=i.canvasWidth,s=i.canvasHeight;return n>a?(t=t>0?0:t,t=t<a-n?a-n:t):t=Math.max(0,a/2-n/2),o>s?(e=e>0?0:e,e=e<s-o?s-o:e):e=Math.max(0,s/2-o/2),{top:e,left:t}},u.prototype.onZoom=function(){var e=this,a=e.contentStartPos.width,r=e.contentStartPos.height,c=e.contentStartPos.left,l=e.contentStartPos.top,u=s(e.newPoints[0],e.newPoints[1]),d=u/e.startDistanceBetweenFingers,f=Math.floor(a*d),h=Math.floor(r*d),p=(a-f)*e.percentageOfImageAtPinchPointX,g=(r-h)*e.percentageOfImageAtPinchPointY,b=(e.newPoints[0].x+e.newPoints[1].x)/2-n(t).scrollLeft(),m=(e.newPoints[0].y+e.newPoints[1].y)/2-n(t).scrollTop(),y=b-e.centerPointStartX,v=m-e.centerPointStartY,x=c+(p+y),w=l+(g+v),$={top:w,left:x,scaleX:e.contentStartPos.scaleX*d,scaleY:e.contentStartPos.scaleY*d};e.canTap=!1,e.newWidth=f,e.newHeight=h,e.contentLastPos=$,e.requestId&&(i(e.requestId),e.requestId=null),e.requestId=o(function(){n.fancybox.setTranslate(e.$content,e.contentLastPos)})},u.prototype.ontouchend=function(t){var o=this,s=Math.max((new Date).getTime()-o.startTime,1),r=o.isSwiping,c=o.isPanning,l=o.isZooming;return o.endPoints=a(t),o.$container.removeClass("fancybox-controls--isGrabbing"),n(e).off(".fb.touch"),o.requestId&&(i(o.requestId),o.requestId=null),o.isSwiping=!1,o.isPanning=!1,o.isZooming=!1,o.canTap?o.onTap(t):(o.speed=366,o.velocityX=o.distanceX/s*.5,o.velocityY=o.distanceY/s*.5,o.speedX=Math.max(.5*o.speed,Math.min(1.5*o.speed,1/Math.abs(o.velocityX)*o.speed)),void(c?o.endPanning():l?o.endZooming():o.endSwiping(r)))},u.prototype.endSwiping=function(t){var e=this,o=!1;e.instance.isSliding=!1,e.sliderLastPos=null,"y"==t&&Math.abs(e.distanceY)>50?(n.fancybox.animate(e.instance.current.$slide,{top:e.sliderStartPos.top+e.distanceY+150*e.velocityY,opacity:0},150),o=e.instance.close(!0,300)):"x"==t&&e.distanceX>50&&e.instance.group.length>1?o=e.instance.previous(e.speedX):"x"==t&&e.distanceX<-50&&e.instance.group.length>1&&(o=e.instance.next(e.speedX)),o!==!1||"x"!=t&&"y"!=t||e.instance.jumpTo(e.instance.current.index,150),e.$container.removeClass("fancybox-is-sliding")},u.prototype.endPanning=function(){var t,e,o,i=this;i.contentLastPos&&(i.instance.current.opts.touch.momentum===!1?(t=i.contentLastPos.left,e=i.contentLastPos.top):(t=i.contentLastPos.left+i.velocityX*i.speed,e=i.contentLastPos.top+i.velocityY*i.speed),o=i.limitPosition(t,e,i.contentStartPos.width,i.contentStartPos.height),o.width=i.contentStartPos.width,o.height=i.contentStartPos.height,n.fancybox.animate(i.$content,o,330))},u.prototype.endZooming=function(){var t,e,o,i,a=this,s=a.instance.current,r=a.newWidth,c=a.newHeight;a.contentLastPos&&(t=a.contentLastPos.left,e=a.contentLastPos.top,i={top:e,left:t,width:r,height:c,scaleX:1,scaleY:1},n.fancybox.setTranslate(a.$content,i),r<a.canvasWidth&&c<a.canvasHeight?a.instance.scaleToFit(150):r>s.width||c>s.height?a.instance.scaleToActual(a.centerPointStartX,a.centerPointStartY,150):(o=a.limitPosition(t,e,r,c),n.fancybox.setTranslate(a.content,n.fancybox.getTranslate(a.$content)),n.fancybox.animate(a.$content,o,150)))},u.prototype.onTap=function(t){var e,o=this,i=n(t.target),s=o.instance,r=s.current,c=t&&a(t)||o.startPoints,l=c[0]?c[0].x-o.$stage.offset().left:0,u=c[0]?c[0].y-o.$stage.offset().top:0,d=function(e){var i=r.opts[e];if(n.isFunction(i)&&(i=i.apply(s,[r,t])),i)switch(i){case"close":s.close(o.startEvent);break;case"toggleControls":s.toggleControls(!0);break;case"next":s.next();break;case"nextOrClose":s.group.length>1?s.next():s.close(o.startEvent);break;case"zoom":"image"==r.type&&(r.isLoaded||r.$ghost)&&(s.canPan()?s.scaleToFit():s.isScaledDown()?s.scaleToActual(l,u):s.group.length<2&&s.close(o.startEvent))}};if(!(t.originalEvent&&2==t.originalEvent.button||s.isSliding||l>i[0].clientWidth+i.offset().left)){if(i.is(".fancybox-bg,.fancybox-inner,.fancybox-outer,.fancybox-container"))e="Outside";else if(i.is(".fancybox-slide"))e="Slide";else{if(!s.current.$content||!s.current.$content.has(t.target).length)return;e="Content"}if(o.tapped){if(clearTimeout(o.tapped),o.tapped=null,Math.abs(l-o.tapX)>50||Math.abs(u-o.tapY)>50||s.isSliding)return this;d("dblclick"+e)}else o.tapX=l,o.tapY=u,r.opts["dblclick"+e]&&r.opts["dblclick"+e]!==r.opts["click"+e]?o.tapped=setTimeout(function(){o.tapped=null,d("click"+e)},300):d("click"+e);return this}},n(e).on("onActivate.fb",function(t,e){e&&!e.Guestures&&(e.Guestures=new u(e))}),n(e).on("beforeClose.fb",function(t,e){e&&e.Guestures&&e.Guestures.destroy()})}(window,document,window.jQuery),function(t,e){"use strict";var n=function(t){this.instance=t,this.init()};e.extend(n.prototype,{timer:null,isActive:!1,$button:null,speed:3e3,init:function(){var t=this;t.$button=t.instance.$refs.toolbar.find("[data-fancybox-play]").on("click",function(){t.toggle()}),(t.instance.group.length<2||!t.instance.group[t.instance.currIndex].opts.slideShow)&&t.$button.hide()},set:function(){var t=this;t.instance&&t.instance.current&&(t.instance.current.opts.loop||t.instance.currIndex<t.instance.group.length-1)?t.timer=setTimeout(function(){t.instance.next()},t.instance.current.opts.slideShow.speed||t.speed):(t.stop(),t.instance.idleSecondsCounter=0,t.instance.showControls())},clear:function(){var t=this;clearTimeout(t.timer),t.timer=null},start:function(){var t=this,e=t.instance.current;t.instance&&e&&(e.opts.loop||e.index<t.instance.group.length-1)&&(t.isActive=!0,t.$button.attr("title",e.opts.i18n[e.opts.lang].PLAY_STOP).addClass("fancybox-button--pause"),e.isComplete&&t.set())},stop:function(){var t=this,e=t.instance.current;t.clear(),t.$button.attr("title",e.opts.i18n[e.opts.lang].PLAY_START).removeClass("fancybox-button--pause"),t.isActive=!1},toggle:function(){var t=this;t.isActive?t.stop():t.start()}}),e(t).on({"onInit.fb":function(t,e){e&&!e.SlideShow&&(e.SlideShow=new n(e))},"beforeShow.fb":function(t,e,n,o){var i=e&&e.SlideShow;o?i&&n.opts.slideShow.autoStart&&i.start():i&&i.isActive&&i.clear()},"afterShow.fb":function(t,e,n){var o=e&&e.SlideShow;o&&o.isActive&&o.set()},"afterKeydown.fb":function(n,o,i,a,s){var r=o&&o.SlideShow;!r||!i.opts.slideShow||80!==s&&32!==s||e(t.activeElement).is("button,a,input")||(a.preventDefault(),r.toggle())},"beforeClose.fb onDeactivate.fb":function(t,e){var n=e&&e.SlideShow;n&&n.stop()}}),e(t).on("visibilitychange",function(){var n=e.fancybox.getInstance(),o=n&&n.SlideShow;o&&o.isActive&&(t.hidden?o.clear():o.set())})}(document,window.jQuery),function(t,e){"use strict";var n=function(){var e,n,o,i=[["requestFullscreen","exitFullscreen","fullscreenElement","fullscreenEnabled","fullscreenchange","fullscreenerror"],["webkitRequestFullscreen","webkitExitFullscreen","webkitFullscreenElement","webkitFullscreenEnabled","webkitfullscreenchange","webkitfullscreenerror"],["webkitRequestFullScreen","webkitCancelFullScreen","webkitCurrentFullScreenElement","webkitCancelFullScreen","webkitfullscreenchange","webkitfullscreenerror"],["mozRequestFullScreen","mozCancelFullScreen","mozFullScreenElement","mozFullScreenEnabled","mozfullscreenchange","mozfullscreenerror"],["msRequestFullscreen","msExitFullscreen","msFullscreenElement","msFullscreenEnabled","MSFullscreenChange","MSFullscreenError"]],a={};for(n=0;n<i.length;n++)if(e=i[n],e&&e[1]in t){for(o=0;o<e.length;o++)a[i[0][o]]=e[o];return a}return!1}();if(!n)return void(e.fancybox.defaults.btnTpl.fullScreen=!1);var o={request:function(e){e=e||t.documentElement,e[n.requestFullscreen](e.ALLOW_KEYBOARD_INPUT)},exit:function(){t[n.exitFullscreen]()},toggle:function(e){e=e||t.documentElement,this.isFullscreen()?this.exit():this.request(e)},isFullscreen:function(){return Boolean(t[n.fullscreenElement])},enabled:function(){return Boolean(t[n.fullscreenEnabled])}};e(t).on({"onInit.fb":function(t,e){var n,i=e.$refs.toolbar.find("[data-fancybox-fullscreen]");e&&!e.FullScreen&&e.group[e.currIndex].opts.fullScreen?(n=e.$refs.container,n.on("click.fb-fullscreen","[data-fancybox-fullscreen]",function(t){t.stopPropagation(),t.preventDefault(),o.toggle(n[0])}),e.opts.fullScreen&&e.opts.fullScreen.autoStart===!0&&o.request(n[0]),e.FullScreen=o):i.hide()},"afterKeydown.fb":function(t,e,n,o,i){e&&e.FullScreen&&70===i&&(o.preventDefault(),e.FullScreen.toggle(e.$refs.container[0]))},"beforeClose.fb":function(t){t&&t.FullScreen&&o.exit()}}),e(t).on(n.fullscreenchange,function(){var t=e.fancybox.getInstance();t.current&&"image"===t.current.type&&t.isAnimating&&(t.current.$content.css("transition","none"),t.isAnimating=!1,t.update(!0,!0,0))})}(document,window.jQuery),function(t,e){"use strict";var n=function(t){this.instance=t,this.init()};e.extend(n.prototype,{$button:null,$grid:null,$list:null,isVisible:!1,init:function(){var t=this,e=t.instance.group[0],n=t.instance.group[1];t.$button=t.instance.$refs.toolbar.find("[data-fancybox-thumbs]"),t.instance.group.length>1&&t.instance.group[t.instance.currIndex].opts.thumbs&&("image"==e.type||e.opts.thumb||e.opts.$thumb)&&("image"==n.type||n.opts.thumb||n.opts.$thumb)?(t.$button.on("click",function(){t.toggle()}),t.isActive=!0):(t.$button.hide(),t.isActive=!1)},create:function(){var t,n,o=this.instance;this.$grid=e('<div class="fancybox-thumbs"></div>').appendTo(o.$refs.container),t="<ul>",e.each(o.group,function(e,o){n=o.opts.thumb||(o.opts.$thumb?o.opts.$thumb.attr("src"):null),n||"image"!==o.type||(n=o.src),n&&n.length&&(t+='<li data-index="'+e+'"  tabindex="0" class="fancybox-thumbs-loading"><img data-src="'+n+'" /></li>')}),t+="</ul>",this.$list=e(t).appendTo(this.$grid).on("click","li",function(){o.jumpTo(e(this).data("index"))}),this.$list.find("img").hide().one("load",function(){var t,n,o,i,a=e(this).parent().removeClass("fancybox-thumbs-loading"),s=a.outerWidth(),r=a.outerHeight();t=this.naturalWidth||this.width,n=this.naturalHeight||this.height,o=t/s,i=n/r,o>=1&&i>=1&&(o>i?(t/=i,n=r):(t=s,n/=o)),e(this).css({width:Math.floor(t),height:Math.floor(n),"margin-top":Math.min(0,Math.floor(.3*r-.3*n)),"margin-left":Math.min(0,Math.floor(.5*s-.5*t))}).show()}).each(function(){this.src=e(this).data("src")})},focus:function(){this.instance.current&&this.$list.children().removeClass("fancybox-thumbs-active").filter('[data-index="'+this.instance.current.index+'"]').addClass("fancybox-thumbs-active").focus()},close:function(){this.$grid.hide()},update:function(){this.instance.$refs.container.toggleClass("fancybox-show-thumbs",this.isVisible),this.isVisible?(this.$grid||this.create(),this.instance.trigger("onThumbsShow"),this.focus()):this.$grid&&this.instance.trigger("onThumbsHide"),this.instance.update()},hide:function(){this.isVisible=!1,this.update()},show:function(){this.isVisible=!0,this.update()},toggle:function(){this.isVisible=!this.isVisible,this.update()}}),e(t).on({"onInit.fb":function(t,e){e&&!e.Thumbs&&(e.Thumbs=new n(e))},"beforeShow.fb":function(t,e,n,o){var i=e&&e.Thumbs;if(i&&i.isActive){if(n.modal)return i.$button.hide(),void i.hide();o&&e.opts.thumbs.autoStart===!0&&i.show(),i.isVisible&&i.focus()}},"afterKeydown.fb":function(t,e,n,o,i){var a=e&&e.Thumbs;a&&a.isActive&&71===i&&(o.preventDefault(),a.toggle())},"beforeClose.fb":function(t,e){var n=e&&e.Thumbs;n&&n.isVisible&&e.opts.thumbs.hideOnClose!==!1&&n.close()}})}(document,window.jQuery),function(t,e,n){"use strict";function o(){var t=e.location.hash.substr(1),n=t.split("-"),o=n.length>1&&/^\+?\d+$/.test(n[n.length-1])?parseInt(n.pop(-1),10)||1:1,i=n.join("-");return o<1&&(o=1),{hash:t,index:o,gallery:i}}function i(t){var e;""!==t.gallery&&(e=n("[data-fancybox='"+n.escapeSelector(t.gallery)+"']").eq(t.index-1),e.length||(e=n("#"+n.escapeSelector(t.gallery))),e.length&&(s=!1,e.trigger("click")))}function a(t){var e;return!!t&&(e=t.current?t.current.opts:t.opts,e.$orig?e.$orig.data("fancybox"):e.hash||"")}n.escapeSelector||(n.escapeSelector=function(t){var e=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g,n=function(t,e){return e?"\0"===t?"�":t.slice(0,-1)+"\\"+t.charCodeAt(t.length-1).toString(16)+" ":"\\"+t};return(t+"").replace(e,n)});var s=!0,r=null,c=null;n(function(){setTimeout(function(){n.fancybox.defaults.hash!==!1&&(n(t).on({"onInit.fb":function(t,e){var n,i;e.group[e.currIndex].opts.hash!==!1&&(n=o(),i=a(e),i&&n.gallery&&i==n.gallery&&(e.currIndex=n.index-1))},"beforeShow.fb":function(n,o,i){var l;i.opts.hash!==!1&&(l=a(o),l&&""!==l&&(e.location.hash.indexOf(l)<0&&(o.opts.origHash=e.location.hash),r=l+(o.group.length>1?"-"+(i.index+1):""),"replaceState"in e.history?(c&&clearTimeout(c),c=setTimeout(function(){e.history[s?"pushState":"replaceState"]({},t.title,e.location.pathname+e.location.search+"#"+r),c=null,s=!1},300)):e.location.hash=r))},"beforeClose.fb":function(o,i,s){var l,u;c&&clearTimeout(c),s.opts.hash!==!1&&(l=a(i),u=i&&i.opts.origHash?i.opts.origHash:"",l&&""!==l&&("replaceState"in history?e.history.replaceState({},t.title,e.location.pathname+e.location.search+u):(e.location.hash=u,n(e).scrollTop(i.scrollTop).scrollLeft(i.scrollLeft))),r=null)}}),n(e).on("hashchange.fb",function(){var t=o();n.fancybox.getInstance()?!r||r===t.gallery+"-"+t.index||1===t.index&&r==t.gallery||(r=null,n.fancybox.close(),s=!0):""!==t.gallery&&i(t)}),i(o()))},50)})}(document,window,window.jQuery);
\ No newline at end of file
diff --git a/fancybox/docs/index.html b/fancybox/docs/index.html
new file mode 100644 (file)
index 0000000..bb5fc1d
--- /dev/null
@@ -0,0 +1,1827 @@
+<!doctype html>
+<html>
+<head>
+       <title>fancyBox - touch enabled, responsive and fully customizable lightbox script</title>
+
+       <meta name="viewport" content="user-scalable=no, width=device-width, initial-scale=1.0, maximum-scale=1.0">
+       <meta content="text/html;charset=utf-8" http-equiv="Content-Type">
+
+       <link href="https://fonts.googleapis.com/css?family=Montserrat:400,700|Open+Sans:400,700" rel="stylesheet" />
+
+       <script src="//code.jquery.com/jquery-3.2.1.min.js"></script>
+
+       <style>
+               /* Reset */
+
+               html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video {
+                       margin: 0;
+                       padding: 0;
+                       border: 0;
+                       font-size: 100%;
+                       font: inherit;
+                       vertical-align: baseline;
+               }
+
+               html {
+                       box-sizing: border-box;
+               }
+
+               *, *:before, *:after {
+                       box-sizing: inherit;
+               }
+
+               article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section {
+                       display: block;
+               }
+
+               table {
+                       border-collapse: collapse;
+                       border-spacing: 0;
+               }
+
+               /* Common styling */
+
+               body {
+                       -webkit-text-size-adjust: none;
+                       font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif;
+                       font-size: 16px;
+                       line-height: 1.6;
+                       color: #333;
+               }
+
+               h1, h2, h3 {
+                       font-family: 'Montserrat', 'Helvetica Neue', Helvetica, Arial, sans-serif;
+                       font-weight: 700;
+                       color: #333;
+               }
+
+               a {
+                       color: #FF6666;
+                       text-decoration: none;
+               }
+
+               a:hover {
+                       text-decoration: underline;
+               }
+
+               a.active {
+                       font-weight: bold;
+               }
+
+               h1, h2, h3 {
+                   font-family: 'Montserrat', sans-serif;
+                   font-weight: 700;
+                   color: #333;
+               }
+
+               h1 {
+                       font-size: 2.5em;
+                       font-weight: bold;
+                       letter-spacing: -1px;
+               }
+
+               h1 a:hover {
+                       text-decoration: none;
+               }
+
+               h2 {
+                       margin: 3em 0 1em 0;
+                       padding-bottom: 0.25em;
+                       font-size: 2em;
+                       border-bottom: 1px solid #eee;
+               }
+
+               h2:first-of-type {
+                       margin-top: 0;
+               }
+
+               h3 {
+                       margin-top: 2em;
+                       font-size: 1.25em;
+               }
+
+               h4 {
+                       margin-top: 1em;
+                       font-weight: bold;
+                       font-size: 1em;
+               }
+
+               .important {
+                       color: #fff;
+                       background: #FF6666;
+                       display: inline-block;
+                       padding: 0 10px;
+                       border-radius: 5px;
+               }
+
+               b {
+                       font-weight: 700;
+               }
+
+               p {
+                       margin: 0.5em 0 1.5em 0;
+               }
+
+               p:last-child {
+                       margin-bottom: 0;
+               }
+
+               ul {
+                   padding-left: 2em;
+                   margin: 0.5em 0 1.5em 0;
+               }
+
+               pre, code, .demo {
+                       font-family: Consolas,"Liberation Mono",Courier,monospace;
+               }
+
+               pre, code {
+                       background: #F4F5F6;
+                       color: #66676E;
+               }
+
+               pre {
+                       padding: 1em;
+                       margin-bottom: 1.5em;
+                       overflow: auto;
+                       min-height: 56px;
+                       max-height: 70vh;
+                       -moz-tab-size: 4;
+                       tab-size: 4;
+               }
+
+               code {
+                       padding: 2px 5px;
+               }
+
+               pre code {
+                       padding: 0;
+               }
+
+               .demo {
+                       margin-top: -1em;
+                       text-align: right;
+               }
+
+
+               /* Layout */
+
+               header {
+                       position: relative;
+                       padding: 6em 0 6em 0;
+                       margin-bottom: 3em;
+                       background: #FF6666;
+                       color: #fff;
+                       text-align: right;
+               }
+
+               header:before {
+                       content: '';
+                       position: absolute;
+                       left: 0;
+                       right: 0;
+                       top: 100%;
+                       height: 500px;
+                       background: #fff;
+                       -webkit-transform-origin: right;
+                           -ms-transform-origin: right;
+                              transform-origin: right;
+                       -webkit-transform: skewY(2deg);
+                           -ms-transform: skewY(2deg);
+                               transform: skewY(2deg);
+               }
+
+               .content {
+                       position: relative;
+                       max-width: 1020px;
+                       margin: 0 auto;
+                       padding: 0 50px;
+               }
+
+               section .content {
+                       padding-left: 250px;
+               }
+
+               footer .content {
+                       padding: 6em 50px 3em 240px;
+               }
+
+               aside {
+                       position: absolute;
+                       top: 0;
+                       left : 50px;
+                       width: 200px;
+               }
+
+               /* Header */
+
+               header h1, header h1 a {
+                       color: #fff;
+               }
+
+               header ul {
+                       margin: 0;
+                       padding: 0;
+                       list-style: none;
+               }
+
+               header ul li {
+                       display: inline-block;
+                       margin-right: 0.5em;
+               }
+
+               header ul li a {
+                       font-size: 1.125em;
+                       color: #fff;
+               }
+
+               /* Sidebar */
+
+               aside ul {
+                       position: relative;;
+                       top: 0;
+                       list-style: none;
+                       padding: 1.5em 0;
+                       margin: 0;
+               }
+
+               aside ul ul {
+                       padding: 0 0 0.5em 1.5em;
+                       font-size: 90%;
+               }
+
+               @media all and (max-width: 800px) {
+
+                       aside {
+                               position: relative;
+                               left: 0;
+                       }
+
+                       .content {
+                               padding: 0 25px;
+                       }
+
+                       section .content,
+                       footer .content {
+                               padding-left: 25px;
+                       }
+
+               }
+
+       </style>
+</head>
+<body>
+
+       <header>
+               <div class="content">
+                       <h1><a href="http://fancyapps.com/fancybox/3/">fancyBox3</a> Documentation</h1>
+
+                       <ul>
+                               <li><a href="http://fancyapps.com/fancybox/3/">Homepage</a></li>
+                               <li><a href="http://fancyapps.com/fancybox/3/docs/">Documentation</a></li>
+                               <li><a href="http://fancyapps.com/store/">Store</a></li>
+                               <li><a href="https://github.com/fancyapps/fancybox">Github</a></li>
+                       </ul>
+               </div>
+       </header>
+
+       <section>
+               <div class="content">
+
+                       <aside>
+                               <ul class="sticky">
+                                       <li><a href="#introduction">Introduction</a></li>
+                                       <li><a href="#setup">Setup</a></li>
+                                       <li><a href="#usage">How to Use</a></li>
+                                       <li>
+                                               <a href="#media_types">Media types</a>
+
+                                               <ul>
+                                                       <li><a href="#images">Images</a></li>
+                                                       <li><a href="#inline">Inline</a></li>
+                                                       <li><a href="#ajax">Ajax</a></li>
+                                                       <li><a href="#iframe">Iframe</a></li>
+                                               </ul>
+                                       </li>
+                                       <li><a href="#embedding">Embedding</a></li>
+                                       <li><a href="#options">Options</a></li>
+                                       <li><a href="#api">Api</a></li>
+                                       <li><a href="#modules">Modules</a></li>
+                                       <li><a href="#faq">FAQ</a></li>
+                               </ul>
+                       </aside>
+<!--
+
+       Introduction
+       =====
+
+-->
+                       <h2 id="introduction">Introduction</h2>
+
+                       <p>
+                               fancyBox is a JavaScript library used to present images, videos and any html content in an elegant way.
+                               It has all features you would expect - touch enabled, responsive and fully customizable.
+                       <p>
+
+                       </p>
+
+                       <h3>
+                               Dependencies
+                       </h3>
+
+                       <p>
+                                jQuery 3+ is preferred, but fancyBox works with jQuery 1.9.1+ and jQuery 2+
+                       </p>
+
+                       <h3>Compatibility</h3>
+
+                       <p>
+                               fancyBox includes support for touch gestures and even supports pinch gestures for zooming.
+                               It is perfectly suited for both mobile and desktop browsers.
+                       </p>
+
+                       <p>
+                               fancyBox has been tested in following browsers/devices:
+                       </p>
+
+                       <ul>
+                               <li>Chrome</li>
+                               <li>Firefox</li>
+                               <li>IE10/11</li>
+                               <li>Edge</li>
+                               <li>iOS Safari</li>
+                               <li>Nexus 7 Chrome</li>
+                       </ul>
+<!--
+
+       Setup
+       =====
+
+-->
+                       <h2 id="setup">Setup</h2>
+
+                       <p>
+                               You can install fancyBox by linking <code>.css</code> and <code>.js</code> to your html file.
+
+                               Make sure you also load the jQuery library.
+                               Below is a basic HTML template to use as an example:
+                       </p>
+
+                       <pre>&lt;!DOCTYPE html&gt;
+&lt;html&gt;
+&lt;head&gt;
+       &lt;meta charset=&quot;utf-8&quot;&gt;
+       &lt;title&gt;My page&lt;/title&gt;
+
+       &lt;!-- CSS --&gt;
+       &lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;jquery.fancybox.min.css&quot;&gt;
+&lt;/head&gt;
+&lt;body&gt;
+
+       &lt;!-- Your HTML content goes here --&gt;
+
+       &lt;!-- JS --&gt;
+       &lt;script src=&quot;//code.jquery.com/jquery-3.2.1.min.js&quot;&gt;&lt;/script&gt;
+       &lt;script src=&quot;jquery.fancybox.min.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
+</pre>
+
+                       <h4 class="important">Important</h4>
+
+                       <ul>
+                               <li>Make sure you add the jQuery library first</li>
+                               <li>If you already have jQuery on your page, you shouldn't include it second time</li>
+                               <li>Do not include both fancybox.js and fancybox.min.js files</li>
+                               <li>
+                                       Some functionality (ajax, iframes, etc) will not work when you're opening local files on your computer,
+                                       the code must be running on a web server
+                               </li>
+                       </ul>
+
+                       <h3>Download fancyBox</h3>
+
+                       <p>
+                               You can download the latest version of fancyBox on <a href="https://github.com/fancyapps/fancybox" target="_blank">GitHub</a>.
+                               <br />
+                               Or just link directly to fancyBox files on cdnjs - <a href="https://cdnjs.com/libraries/fancybox" target="_blank">https://cdnjs.com/libraries/fancybox</a>.
+                       </p>
+
+
+                       <h3>Package Managers</h3>
+
+                       <p>
+                               fancyBox can also be installed via Bower or npm.
+                       </p>
+
+<pre><code># Bower
+bower install fancybox --save
+
+# NPM
+npm install @fancyapps/fancybox --save
+</code></pre>
+
+
+<!--
+
+       How To Use
+       ==========
+
+-->
+                       <h2 id="usage">How to Use</h2>
+
+                       <h3>Initialize with data attributes</h3>
+
+                       <p>
+                               The most basic way to use fancyBox is by adding the <code>data-fancybox</code> attribute to a link.
+                               A caption can be added using the <code>data-caption</code> attribute. Example:
+                       </p>
+
+                       <pre>&lt;a href="image.jpg" data-fancybox data-caption="My caption"&gt;
+       &lt;img src="thumbnail.jpg" alt="" /&gt;
+&lt;/a&gt;</pre>
+
+                       <p>
+                               If you choose this method, default settings will be applied.
+                               See <a href="#options">Options</a> section for examples how to customize by changing defaults or using <code>data-options</code> attribute.
+                       </p>
+
+                       <h3>Initialize with JavaScript</h3>
+
+                       <p>
+                               Select elements with a jQuery selector and call the <code>fancybox</code> method:
+                       </p>
+
+                       <pre><code>&lt;script type=&quot;text/javascript&quot;&gt;
+       $(&quot;[data-fancybox]&quot;).fancybox({
+               // Options will go here
+       });
+&lt;/script&gt;</code></pre>
+
+
+                       <p>
+                               Using this method, click event handler is attached only to the currently selected elements.
+                               <br />
+                               To attach click event listener for elements that exist now or in the future, use <code>selector</code> option. Example:
+                       </p>
+
+                       <pre><code>$().fancybox({
+  selector : '[data-fancybox="images"]',
+  loop     : true
+});</code></pre>
+
+                       <p class="demo">
+                               <a href="https://codepen.io/fancyapps/pen/gWvorB?editors=1010" target="_blank">View demo on CodePen</a>
+                       </p>
+
+                       <h3>Manual calling of fancyBox</h3>
+
+                       <p>
+                               fancyBox can be activated at any point within Javascript and therefore does not necessarily need a trigger element.
+
+                               Example of displaying a simple message:
+                       </p>
+
+                       <pre><code>$.fancybox.open('&lt;div class=&quot;message&quot;&gt;&lt;h2&gt;Hello!&lt;/h2&gt;&lt;p&gt;You are awesome!&lt;/p&gt;&lt;/div&gt;');</code></pre>
+
+                       <p>
+                               See <a href="#api">API</a> section for more information and examples.
+                       </p>
+
+                       <h3>Grouping</h3>
+
+                       <p>
+                               If you have a group of items, you can use the same attribute <code>data-fancybox</code> value for each of them to create a gallery.
+                               Each group should have a unique value:
+                       </p>
+
+<pre>&lt;a href="image_1.jpg" data-fancybox="group" data-caption="Caption #1"&gt;
+       &lt;img src="thumbnail_1.jpg" alt="" /&gt;
+&lt;/a&gt;
+
+&lt;a href="image_2.jpg" data-fancybox="group" data-caption="Caption #2"&gt;
+       &lt;img src="thumbnail_2.jpg" alt="" /&gt;
+&lt;/a&gt;
+</pre>
+
+
+<h4 class="important">Important</h4>
+
+<p>
+       fancyBox attempts to automatically detect the type of content based on the given url.
+
+       If it cannot be detected, the type can also be set manually using <code>data-type</code> attribute:
+
+       <pre>&lt;a href="images.php?id=123" data-type="image" data-caption="Caption"&gt;
+       Show image
+&lt;/a&gt;</pre>
+</p>
+
+
+
+<!--
+
+       Examples
+       =========
+
+-->
+                       <h2 id="media_types">Media types</h2>
+
+
+                       <h3 id="images">Images</h3>
+
+                       <p>
+                               The standard way of using fancyBox is with a number of thumbnail images that link to larger images:
+                       </p>
+
+                       <pre><code>&lt;a href="image.jpg" data-fancybox="images" data-caption="My caption"&gt;
+       &lt;img src="thumbnail.jpg" alt="" /&gt;
+&lt;/a&gt;</code></pre>
+
+                       <p class="demo">
+                               <a href="https://codepen.io/fancyapps/pen/WjVXyx?editors=1000" target="_blank">View demo on CodePen</a>
+                       </p>
+
+                       <p>
+                               By default, fancyBox fully preloads an image before displaying it.
+                               You can choose to display the image right away.
+                               It will render and show the full size image while the data is being received.
+                               To do so, some attributes are necessary:
+                       </p>
+
+                       <ul>
+                               <li><code>data-width</code>  - the real width of the image</li>
+                               <li><code>data-height</code> - the real height of the image</li>
+                       </ul>
+
+                       <pre><code>&lt;a href=&quot;image.jpg&quot; data-fancybox=&quot;images&quot; data-width=&quot;2048&quot; data-height=&quot;1365&quot;&gt;
+    &lt;img src=&quot;thumbnail.jpg&quot; /&gt;
+&lt;/a&gt;</code></pre>
+                       <p class="demo">
+                               <a href="https://codepen.io/fancyapps/pen/JNgggo?editors=1000" target="_blank">View demo on CodePen</a>
+                       </p>
+
+                       <p>
+                               fancyBox supports "scrset" so I can display different images based on viewport width. You can use this to improve download times for mobile users and over time save bandwidth.
+                               Example:
+                       </p>
+
+                       <pre><code>&lt;a href=&quot;medium.jpg&quot; data-fancybox=&quot;images&quot; data-srcset=&quot;large.jpg 1600w, medium.jpg 1200w, small.jpg 640w&quot;&gt;
+       &lt;img src=&quot;thumbnail.jpg&quot; /&gt;
+&lt;/a&gt;</code></pre>
+                       <p class="demo">
+                               <a href="https://codepen.io/fancyapps/pen/YQKKYx?editors=1000" target="_blank">View demo on CodePen</a>
+                       </p>
+
+                       <p>
+                               It is also possible to protect images from downloading by right-click.
+                               While this does not protect from truly determined users, it should discourage the vast majority from ripping off your files.
+                       </p>
+
+                       <pre><code>$('[data-fancybox]').fancybox({
+       protect: true
+});</code></pre>
+
+                       <p class="demo">
+                               <a href="https://codepen.io/fancyapps/pen/jwNNZJ" target="_blank">View demo on CodePen</a>
+                       </p>
+
+                       <h3 id="inline">Inline HTML</h3>
+
+                       <p>
+                               For inline content, create a hidden element with unique id:
+                       </p>
+
+                       <pre><code>&lt;div style=&quot;display: none;&quot; id=&quot;hidden-content&quot;&gt;
+       &lt;h2&gt;Hello&lt;/h2&gt;
+       &lt;p&gt;You are awesome.&lt;/p&gt;
+&lt;/div&gt;</code></pre>
+
+                       <p>
+                               And then simply create a link having <code>data-src</code> attribute that matches ID of the element you want to open (preceded by a hash mark (#); in this example - <code>#hidden-content</code>):
+                       </p>
+
+                       <pre><code>&lt;a data-fancybox data-src=&quot;#hidden-content&quot; href=&quot;javascript:;&quot;&gt;
+       Hidden div
+&lt;/a&gt;</code></pre>
+                       <p class="demo">
+                               <a href="https://codepen.io/fancyapps/pen/NjXbXw" target="_blank">View demo on CodePen</a>
+                       </p>
+
+                       <p>
+                               The script will append small close button (if you have not disabled by <code>smallBtn:false</code>)
+                               and will not apply any styles except for centering. Therefore you can easily set custom dimensions using CSS.
+                       </p>
+
+                       <h3 id="ajax">Ajax</h3>
+
+                       <p>
+                               To load content via AJAX, you need to add a <code>data-type="ajax"</code> attribute to your link:
+                       </p>
+
+                       <pre><code>&lt;a data-fancybox data-type=&quot;ajax&quot; data-src=&quot;my_page.com/path/to/ajax/&quot; href=&quot;javascript:;&quot;&gt;
+       AJAX content
+&lt;/a&gt;</code></pre>
+                       <p class="demo">
+                               <a href="https://codepen.io/fancyapps/pen/RgbwrY?editors=1100" target="_blank">View demo on CodePen</a>
+                       </p>
+
+                       <p>
+                               Additionally it is possible to define a selector with the <code>data-filter</code> attribute to show only a part of the response. The selector can be any string, that is a valid jQuery selector:
+                       </p>
+
+                       <pre><code>&lt;a data-fancybox data-type=&quot;ajax&quot; data-src=&quot;my_page.com/path/to/ajax/&quot; data-filter=&quot;#two&quot; href=&quot;javascript:;&quot;&gt;
+       AJAX content
+&lt;/a&gt;
+</code></pre>
+                       <p class="demo">
+                               <a href="https://codepen.io/fancyapps/pen/xrKxXp?editors=1100" target="_blank">View demo on CodePen</a>
+                       </p>
+
+                       <h3 id="iframe">Iframe</h3>
+
+                       <p>
+                               If the content can be shown on a page, and placement in an iframe is not blocked by script or security configuration of that page,
+                               it can be presented in a fancyBox:
+                       </p>
+
+                       <pre><code>&lt;a data-fancybox data-type="iframe" data-src=&quot;http://codepen.io/fancyapps/full/jyEGGG/&quot; href=&quot;javascript:;&quot;&gt;
+       Webpage
+&lt;/a&gt;
+
+&lt;a data-fancybox data-type="iframe" data-src=&quot;https://mozilla.github.io/pdf.js/web/viewer.html&quot; href=&quot;javascript:;&quot;&gt;
+       Sample PDF
+&lt;/a&gt;
+</code></pre>
+                       <p class="demo">
+                               <a href="https://codepen.io/fancyapps/pen/LLPYXg?editors=1000" target="_blank">View demo on CodePen</a>
+                       </p>
+
+
+                       <p>
+                               To access and control fancyBox in parent window from inside an iframe:
+                       </p>
+
+                       <pre><code>// Adjust iframe height according to the contents
+parent.jQuery.fancybox.getInstance().update();
+
+// Close current fancyBox instance
+parent.jQuery.fancybox.getInstance().close();</code></pre>
+
+
+                       <p>
+                               Iframe dimensions can be controlled by CSS:
+                       </p>
+
+                       <pre><code>.fancybox-slide--iframe .fancybox-content {
+       width  : 800px;
+       height : 600px;
+       max-width  : 80%;
+       max-height : 80%;
+       margin: 0;
+}</code></pre>
+
+
+                       <p>
+                               These CSS rules can be overridden by JS, if needed:
+                       </p>
+
+                       <pre><code>$(&quot;[data-fancybox]&quot;).fancybox({
+       iframe : {
+               css : {
+                       width : '600px'
+               }
+       }
+});</code></pre>
+
+
+                       <p>
+                               If you have not disabled iframe preloading (using <code>preload</code> option), then the script will atempt to
+                               calculate content dimensions and will adjust width/height of iframe to fit with content in it.
+                               Keep in mind, that due to <a href="https://en.wikipedia.org/wiki/Same-origin_policy" target="_blank">same origin policy</a>,
+                               there are some limitations.
+                       </p>
+
+                       <p>
+                               This example will disable iframe preloading and will display small close button next to iframe instead of the toolbar:
+                       </p>
+
+                       <pre><code>$('[data-fancybox]').fancybox({
+       toolbar  : false,
+       smallBtn : true,
+       iframe : {
+               preload : false
+       }
+})
+</code></pre>
+                       <p class="demo">
+                               <a href="https://codepen.io/fancyapps/pen/eRzwye?editors=1010" target="_blank">View demo on CodePen</a>
+                       </p>
+
+
+<!--
+
+       Embedding
+       =======
+
+-->
+                       <h2 id="embedding">Embedding</h2>
+
+                       <p>
+                               Supported sites can be used with fancyBox by just providing the page URL:
+                       </p>
+
+                       <pre><code>&lt;a data-fancybox href="https://www.youtube.com/watch?v=_sI_Ps7JSEk"&gt;
+  YouTube video
+&lt;/a&gt;
+
+&lt;a data-fancybox href="https://vimeo.com/191947042"&gt;
+  Vimeo video
+&lt;/a&gt;
+
+&lt;a data-fancybox href=&quot;https://www.google.com/maps/place/Googleplex/@37.4220041,-122.0833494,17z/data=!4m5!3m4!1s0x0:0x6c296c66619367e0!8m2!3d37.4219998!4d-122.0840572&quot;&gt;
+       Google Map
+&lt;/a&gt;
+
+&lt;a data-fancybox href=&quot;https://www.instagram.com/p/BNXYW8-goPI/?taken-by=jamesrelfdyer&quot; data-caption=&quot;&lt;span title=&amp;quot;Edited&amp;quot;&gt;balloon rides at dawn ✨🎈&lt;br&gt;was such a magical experience floating over napa valley as the golden light hit the hills.&lt;br&gt;&lt;a href=&amp;quot;https://www.instagram.com/jamesrelfdyer/&amp;quot;&gt;@jamesrelfdyer&lt;/a&gt;&lt;/span&gt;&quot;&gt;
+       Instagram photo
+&lt;/a&gt;</code></pre>
+                       <p class="demo">
+                               <a href="https://codepen.io/fancyapps/pen/pwzvvr?editors=1000" target="_blank">View demo on CodePen</a>
+                       </p>
+
+                       <h3>Video dimensions</h3>
+
+                       <p>
+                               Resize video display with the following CSS:
+                       </p>
+
+                       <pre><code>.fancybox-slide--video .fancybox-content {
+       width  : 800px;
+       height : 600px;
+       max-width  : 80%;
+       max-height : 80%;
+}</code></pre>
+                       <p class="demo">
+                               <a href="https://codepen.io/fancyapps/pen/zzOrBL?editors=1100" target="_blank">View demo on CodePen</a>
+                       </p>
+
+                       <p>
+                               Obviously, you can choose any size you like, any combination with <code>min</code>/<code>max</code> values.
+                               <br />
+                               Aspect ratio lock for videos is not implemented yet, but if you wish, <a href="https://codepen.io/fancyapps/pen/NgKNRz?editors=1010" target="_blank">you can use this snippet</a>.
+                       </p>
+
+
+
+                       <h3>Video parameters</h3>
+
+                       <p>
+                               Controlling a video via URL parameters:
+                       </p>
+
+                       <pre><code>&lt;a data-fancybox href=&quot;https://www.youtube.com/watch?v=_sI_Ps7JSEk&amp;amp;autoplay=1&amp;amp;rel=0&amp;amp;controls=0&amp;amp;showinfo=0&quot;&gt;
+  YouTube video - hide controls and info
+&lt;/a&gt;
+
+&lt;a data-fancybox href=&quot;https://vimeo.com/191947042?color=f00&quot;&gt;
+  Vimeo video - custom color
+&lt;/a&gt;</code></pre>
+                       <p class="demo">
+                               <a href="http://codepen.io/fancyapps/pen/mRVNyO?editors=1000" target="_blank">View demo on CodePen</a>
+                       </p>
+
+
+                       <p>
+                               Via JavaScript:
+                       </p>
+
+                       <pre><code>$('[data-fancybox]').fancybox({
+       youtube : {
+               controls : 0,
+               showinfo : 0
+       },
+       vimeo : {
+               color : 'f00'
+       }
+});</code></pre>
+                       <p class="demo">
+                               <a href="http://codepen.io/fancyapps/pen/Qdyeyr?editors=1010" target="_blank">View demo on CodePen</a>
+                       </p>
+
+<!--
+
+       Options
+       =======
+
+-->
+                       <h2 id="options">Options</h2>
+
+                       <p>
+                               Quick reference for all default options as defined in the source:
+                       </p>
+
+                       <pre>defaults = {
+
+       // Enable infinite gallery navigation
+       loop : false,
+
+       // Space around image, ignored if zoomed-in or viewport smaller than 800px
+       margin : [44, 0],
+
+       // Horizontal space between slides
+       gutter : 50,
+
+       // Enable keyboard navigation
+       keyboard : true,
+
+       // Should display navigation arrows at the screen edges
+       arrows : true,
+
+       // Should display infobar (counter and arrows at the top)
+       infobar : false,
+
+       // Should display toolbar (buttons at the top)
+       toolbar : true,
+
+       // What buttons should appear in the top right corner.
+       // Buttons will be created using templates from `btnTpl` option
+       // and they will be placed into toolbar (class=&quot;fancybox-toolbar&quot;` element)
+       buttons : [
+               'slideShow',
+               'fullScreen',
+               'thumbs',
+               'close'
+       ],
+
+       // Detect &quot;idle&quot; time in seconds
+       idleTime : 4,
+
+       // Should display buttons at top right corner of the content
+       // If 'auto' - they will be created for content having type 'html', 'inline' or 'ajax'
+       // Use template from `btnTpl.smallBtn` for customization
+       smallBtn : 'auto',
+
+       // Disable right-click and use simple image protection for images
+       protect : false,
+
+       // Shortcut to make content &quot;modal&quot; - disable keyboard navigtion, hide buttons, etc
+       modal : false,
+
+       image : {
+
+               // Wait for images to load before displaying
+               // Requires predefined image dimensions
+               // If 'auto' - will zoom in thumbnail if 'width' and 'height' attributes are found
+               preload : &quot;auto&quot;,
+
+       },
+
+       ajax : {
+
+               // Object containing settings for ajax request
+               settings : {
+
+                       // This helps to indicate that request comes from the modal
+                       // Feel free to change naming
+                       data : {
+                               fancybox : true
+                       }
+               }
+
+       },
+
+       iframe : {
+
+               // Iframe template
+               tpl : '&lt;iframe id=&quot;fancybox-frame{rnd}&quot; name=&quot;fancybox-frame{rnd}&quot; class=&quot;fancybox-iframe&quot; frameborder=&quot;0&quot; vspace=&quot;0&quot; hspace=&quot;0&quot; webkitAllowFullScreen mozallowfullscreen allowFullScreen allowtransparency=&quot;true&quot; src=&quot;&quot;&gt;&lt;/iframe&gt;',
+
+               // Preload iframe before displaying it
+               // This allows to calculate iframe content width and height
+               // (note: Due to &quot;Same Origin Policy&quot;, you can't get cross domain data).
+               preload : true,
+
+               // Custom CSS styling for iframe wrapping element
+               // You can use this to set custom iframe dimensions
+               css : {},
+
+               // Iframe tag attributes
+               attr : {
+                       scrolling : 'auto'
+               }
+
+       },
+
+       // Open/close animation type
+       // Possible values:
+       //   false            - disable
+       //   &quot;zoom&quot;           - zoom images from/to thumbnail
+       //   &quot;fade&quot;
+       //   &quot;zoom-in-out&quot;
+       //
+       animationEffect : &quot;zoom&quot;,
+
+       // Duration in ms for open/close animation
+       animationDuration : 366,
+
+       // Should image change opacity while zooming
+       // If opacity is 'auto', then opacity will be changed if image and thumbnail have different aspect ratios
+       zoomOpacity : 'auto',
+
+       // Transition effect between slides
+       //
+       // Possible values:
+       //   false            - disable
+       //   &quot;fade'
+       //   &quot;slide'
+       //   &quot;circular'
+       //   &quot;tube'
+       //   &quot;zoom-in-out'
+       //   &quot;rotate'
+       //
+       transitionEffect : &quot;fade&quot;,
+
+       // Duration in ms for transition animation
+       transitionDuration : 366,
+
+       // Custom CSS class for slide element
+       slideClass : '',
+
+       // Custom CSS class for layout
+       baseClass : '',
+
+       // Base template for layout
+       baseTpl :
+               '&lt;div class=&quot;fancybox-container&quot; role=&quot;dialog&quot; tabindex=&quot;-1&quot;&gt;' +
+                       '&lt;div class=&quot;fancybox-bg&quot;&gt;&lt;/div&gt;' +
+                       '&lt;div class=&quot;fancybox-inner&quot;&gt;' +
+                               '&lt;div class=&quot;fancybox-infobar&quot;&gt;' +
+                                       '&lt;button data-fancybox-prev title=&quot;{{PREV}}&quot; class=&quot;fancybox-button fancybox-button--left&quot;&gt;&lt;/button&gt;' +
+                                       '&lt;div class=&quot;fancybox-infobar__body&quot;&gt;' +
+                                               '&lt;span data-fancybox-index&gt;&lt;/span&gt;&amp;nbsp;/&amp;nbsp;&lt;span data-fancybox-count&gt;&lt;/span&gt;' +
+                                       '&lt;/div&gt;' +
+                                       '&lt;button data-fancybox-next title=&quot;{{NEXT}}&quot; class=&quot;fancybox-button fancybox-button--right&quot;&gt;&lt;/button&gt;' +
+                               '&lt;/div&gt;' +
+                               '&lt;div class=&quot;fancybox-toolbar&quot;&gt;' +
+                                       '{{BUTTONS}}' +
+                               '&lt;/div&gt;' +
+                               '&lt;div class=&quot;fancybox-navigation&quot;&gt;' +
+                                       '&lt;button data-fancybox-prev title=&quot;{{PREV}}&quot; class=&quot;fancybox-arrow fancybox-arrow--left&quot; /&gt;' +
+                                       '&lt;button data-fancybox-next title=&quot;{{NEXT}}&quot; class=&quot;fancybox-arrow fancybox-arrow--right&quot; /&gt;' +
+                               '&lt;/div&gt;' +
+                               '&lt;div class=&quot;fancybox-stage&quot;&gt;&lt;/div&gt;' +
+                               '&lt;div class=&quot;fancybox-caption-wrap&quot;&gt;' +
+                                       '&lt;div class=&quot;fancybox-caption&quot;&gt;&lt;/div&gt;' +
+                               '&lt;/div&gt;' +
+                       '&lt;/div&gt;' +
+               '&lt;/div&gt;',
+
+       // Loading indicator template
+       spinnerTpl : '&lt;div class=&quot;fancybox-loading&quot;&gt;&lt;/div&gt;',
+
+       // Error message template
+       errorTpl : '&lt;div class=&quot;fancybox-error&quot;&gt;&lt;p&gt;{{ERROR}}&lt;p&gt;&lt;/div&gt;',
+
+       btnTpl : {
+               slideShow  : '&lt;button data-fancybox-play class=&quot;fancybox-button fancybox-button--play&quot; title=&quot;{{PLAY_START}}&quot;&gt;&lt;/button&gt;',
+               fullScreen : '&lt;button data-fancybox-fullscreen class=&quot;fancybox-button fancybox-button--fullscreen&quot; title=&quot;{{FULL_SCREEN}}&quot;&gt;&lt;/button&gt;',
+               thumbs     : '&lt;button data-fancybox-thumbs class=&quot;fancybox-button fancybox-button--thumbs&quot; title=&quot;{{THUMBS}}&quot;&gt;&lt;/button&gt;',
+               close      : '&lt;button data-fancybox-close class=&quot;fancybox-button fancybox-button--close&quot; title=&quot;{{CLOSE}}&quot;&gt;&lt;/button&gt;',
+
+               // This small close button will be appended to your html/inline/ajax content by default,
+               // if &quot;smallBtn&quot; option is not set to false
+               smallBtn   : '&lt;button data-fancybox-close class=&quot;fancybox-close-small&quot; title=&quot;{{CLOSE}}&quot;&gt;&lt;/button&gt;'
+       },
+
+       // Container is injected into this element
+       parentEl : 'body',
+
+
+       // Focus handling
+       // ==============
+
+       // Try to focus on the first focusable element after opening
+       autoFocus : true,
+
+       // Put focus back to active element after closing
+       backFocus : true,
+
+       // Do not let user to focus on element outside modal content
+       trapFocus : true,
+
+
+       // Module specific options
+       // =======================
+
+       fullScreen : {
+               autoStart : false,
+       },
+
+       touch : {
+               vertical : true,  // Allow to drag content vertically
+               momentum : true   // Continue movement after releasing mouse/touch when panning
+       },
+
+       // Hash value when initializing manually,
+       // set `false` to disable hash change
+       hash : null,
+
+       // Customize or add new media types
+       // Example:
+       /*
+       media : {
+               youtube : {
+                       params : {
+                               autoplay : 0
+                       }
+               }
+       }
+       */
+       media : {},
+
+       slideShow : {
+               autoStart : false,
+               speed     : 4000
+       },
+
+       thumbs : {
+               autoStart   : false,   // Display thumbnails on opening
+               hideOnClose : true     // Hide thumbnail grid when closing animation starts
+       },
+
+       // Callbacks
+       //==========
+
+       // See Documentation/API/Events for more information
+       // Example:
+       /*
+               afterShow: function( instance, current ) {
+                        console.info( 'Clicked element:' );
+                        console.info( current.opts.$orig );
+               }
+       */
+
+       onInit       : $.noop,  // When instance has been initialized
+
+       beforeLoad   : $.noop,  // Before the content of a slide is being loaded
+       afterLoad    : $.noop,  // When the content of a slide is done loading
+
+       beforeShow   : $.noop,  // Before open animation starts
+       afterShow    : $.noop,  // When content is done loading and animating
+
+       beforeClose  : $.noop,  // Before the instance attempts to close. Return false to cancel the close.
+       afterClose   : $.noop,  // After instance has been closed
+
+       onActivate   : $.noop,  // When instance is brought to front
+       onDeactivate : $.noop,  // When other instance has been activated
+
+
+       // Interaction
+       // ===========
+
+       // Use options below to customize taken action when user clicks or double clicks on the fancyBox area,
+       // each option can be string or method that returns value.
+       //
+       // Possible values:
+       //   &quot;close&quot;           - close instance
+       //   &quot;next&quot;            - move to next gallery item
+       //   &quot;nextOrClose&quot;     - move to next gallery item or close if gallery has only one item
+       //   &quot;toggleControls&quot;  - show/hide controls
+       //   &quot;zoom&quot;            - zoom image (if loaded)
+       //   false             - do nothing
+
+       // Clicked on the content
+       clickContent : function( current, event ) {
+               return current.type === 'image' ? 'zoom' : false;
+       },
+
+       // Clicked on the slide
+       clickSlide : 'close',
+
+       // Clicked on the background (backdrop) element
+       clickOutside : 'close',
+
+       // Same as previous two, but for double click
+       dblclickContent : false,
+       dblclickSlide   : false,
+       dblclickOutside : false,
+
+
+       // Custom options when mobile device is detected
+       // =============================================
+
+       mobile : {
+               clickContent : function( current, event ) {
+                       return current.type === 'image' ? 'toggleControls' : false;
+               },
+               clickSlide : function( current, event ) {
+                       return current.type === 'image' ? 'toggleControls' : &quot;close&quot;;
+               },
+               dblclickContent : function( current, event ) {
+                       return current.type === 'image' ? 'zoom' : false;
+               },
+               dblclickSlide : function( current, event ) {
+                       return current.type === 'image' ? 'zoom' : false;
+               }
+       },
+
+
+       // Internationalization
+       // ============
+
+       lang : 'en',
+       i18n : {
+               'en' : {
+                       CLOSE       : 'Close',
+                       NEXT        : 'Next',
+                       PREV        : 'Previous',
+                       ERROR       : 'The requested content cannot be loaded. &lt;br/&gt; Please try again later.',
+                       PLAY_START  : 'Start slideshow',
+                       PLAY_STOP   : 'Pause slideshow',
+                       FULL_SCREEN : 'Full screen',
+                       THUMBS      : 'Thumbnails'
+               },
+               'de' : {
+                       CLOSE       : 'Schliessen',
+                       NEXT        : 'Weiter',
+                       PREV        : 'Zurück',
+                       ERROR       : 'Die angeforderten Daten konnten nicht geladen werden. &lt;br/&gt; Bitte versuchen Sie es später nochmal.',
+                       PLAY_START  : 'Diaschau starten',
+                       PLAY_STOP   : 'Diaschau beenden',
+                       FULL_SCREEN : 'Vollbild',
+                       THUMBS      : 'Vorschaubilder'
+               }
+       }
+
+}
+</pre>
+
+
+                               <p>
+                                       Set instance options by passing a valid object to <code>fancybox()</code> method:
+                               </p>
+
+                               <pre><code>$(&quot;[data-fancybox]&quot;).fancybox({
+       thumbs : {
+               autoStart : true
+       }
+});</code></pre>
+
+
+                               <p>
+                                       Plugin options / defaults are exposed in <code>$.fancybox.defaults</code> namespace so you can easily adjust them globally:
+
+                               </p>
+
+                               <pre><code>$.fancybox.defaults.animationEffect = "fade";</code></pre>
+
+                               <p>
+                                       Custom options for each element individually can be set by adding a <code>data-options</code>
+                                       attribute to the element.
+
+                                       This attribute should contain the properly formatted JSON object:
+                               </p>
+
+                               <pre><code>&lt;a data-fancybox data-options='{&quot;caption&quot; : &quot;My caption&quot;, &quot;src&quot; : &quot;https://codepen.io/about/&quot;, &quot;type&quot; : &quot;iframe&quot;}' href=&quot;javascript:;&quot; class=&quot;btn&quot;&gt;
+       Open external page
+&lt;/a&gt;
+</code></pre>
+                               <p class="demo">
+                                       <a href="https://codepen.io/fancyapps/pen/vZxLyb?editors=1000" target="_blank">View demo on CodePen</a>
+                               </p>
+
+
+
+<!--
+
+API
+===
+
+-->
+                               <h2 id="api">API</h2>
+
+                               <p>
+                                       The fancyBox API offers a couple of methods to control fancyBox.
+
+                                       This gives you the ability to extend the plugin and to integrate it with other web application components.
+                               </p>
+
+                               <h3 id="core_methods">Core methods</h3>
+
+                               <p>
+                                       Core methods are methods which affect/handle instances:
+                               </p>
+
+
+                               <pre><code>// Close only the currently active or all fancyBox instances
+$.fancybox.close( all );
+
+// Open the fancyBox right away
+$.fancybox.open( items, opts, index );
+</code></pre>
+
+
+                               <p>
+                                       Gallery items can be collection of jQuery objects or array containing plain objects. This can be used, for example, to create content filter.
+                               </p>
+
+                               <pre><code>var $links = $('.fancybox');
+
+$links.on('click', function() {
+
+       $.fancybox.open( $links, {
+               // Custom options
+       }, $links.index( this ) );
+
+       return false;
+});</code></pre>
+                       <p class="demo">
+                               <a href="https://codepen.io/fancyapps/pen/YQKPYX?editors=1010" target="_blank">View demo on CodePen</a>
+                       </p>
+
+
+
+                               <p>
+                                       When creating group objects manually, each item should follow this pattern:
+                               </p>
+
+                               <pre><code>{
+       src  : '' // Source of the content
+       type : '' // Content type: image|inline|ajax|iframe|html (optional)
+       opts : {} // Object containing item options (optional)
+}
+</code></pre>
+
+
+                               <p>
+                                       Example of opening image gallery:
+                               </p>
+
+                               <pre><code>$.fancybox.open([
+       {
+               src  : '1_b.jpg',
+               opts : {
+                       caption : 'First caption'
+               }
+       },
+       {
+               src  : '2_b.jpg',
+               opts : {
+                       caption : 'Second caption'
+               }
+       }
+], {
+       loop : false
+});</code></pre>
+                               <p class="demo">
+                                       <a href="https://codepen.io/fancyapps/pen/GEKgjp?editors=1010" target="_blank">View demo on CodePen</a>
+                               </p>
+
+                               <p>
+                                       It is also possible to pass only one object. Example of opening inline content:
+                               </p>
+
+                               <pre><code>$.fancybox.open({
+       src  : '#hidden-content',
+       type : 'inline',
+       opts : {
+               afterShow : function( instance, current ) {
+                       console.info( 'done!' );
+               }
+       }
+});
+</code></pre>
+                               <p class="demo">
+                                       <a href="https://codepen.io/fancyapps/pen/ZyzYXR?editors=1010" target="_blank">View demo on CodePen</a>
+                               </p>
+
+                               <p>
+                                       If you wish to display some html content (for example, a message), then you can use a simpler syntax.
+                                       It is advised to use a wrapper around your content.
+                               </p>
+
+                               <pre><code>$.fancybox.open('&lt;div class=&quot;message&quot;&gt;&lt;h2&gt;Hello!&lt;/h2&gt;&lt;p&gt;You are awesome!&lt;/p&gt;&lt;/div&gt;');</code></pre>
+                               <p class="demo">
+                                       <a href="https://codepen.io/fancyapps/pen/QgLbQY" target="_blank">View demo on CodePen</a>
+                               </p>
+
+
+
+                               <h3 id="instance_methods">Instance methods</h3>
+
+                               <p>
+                                       In order to use these methods, you need an instance of the plugin's object.
+                               </p>
+
+                               <pre><code>var instance = $.fancybox.open(
+       // Your content and options
+);</code></pre>
+
+                               <p>
+                                       Get reference to currently active instance:
+                               </p>
+
+                               <pre><code>var instance = $.fancybox.getInstance();</code></pre>
+
+                               <p>
+                                       The first argument of the callback is reference to instance:
+                               </p>
+
+                               <pre><code>$("[data-fancybox]").fancybox({
+       afterShow : function( instance, current ) {
+               console.info( instance );
+       }
+});</code></pre>
+                               <p>
+                                       Once you have a reference to fancyBox instance the following methods are available:
+                               </p>
+
+
+                               <pre><code>// Go to next gallery item
+instance.next( duration );
+
+// Go to previous gallery item
+instance.previous( duration );
+
+// Switch to selected gallery item
+instance.jumpTo( index, duration );
+
+// Check if current image dimensions are smaller than actual
+instance.isScaledDown();
+
+// Scale image to the actual size of the image
+instance.scaleToActual( x, y, duration );
+
+// Check if image dimensions exceed parent element
+instance.canPan();
+
+// Scale image to fit inside parent element
+instance.scaleToFit( duration );
+
+// Update position and content of all slides
+instance.update();
+
+// Update slide position and scale content to fit
+instance.updateSlide( slide );
+
+// Update infobar values, navigation button states and reveal caption
+instance.updateControls( force );
+
+// Load custom content into the slide
+instance.setContent( slide, content );
+
+// Show loading icon inside the slide
+instance.showLoading( slide );
+
+// Remove loading icon from the slide
+instance.hideLoading( slide );
+
+// Try to find and focus on the first focusable element
+instance.focus();
+
+// Activates current instance, brings it to the front
+instance.activate();
+
+// Close instance
+instance.close();
+</code></pre>
+
+
+                               <p>
+                                       You can also do something like this:
+                               </p>
+
+                               <pre><code>$.fancybox.getInstance().jumpTo(1);</code></pre>
+
+                               <p>
+                                       or simply:
+                               </p>
+
+                               <pre><code>$.fancybox.getInstance('jumpTo', 1);</code></pre>
+
+
+
+
+                               <h3 id="events">Events</h3>
+
+                               <p>
+                                       fancyBox fires several events:
+                               </p>
+
+                               <pre><code>beforeLoad   : Before the content of a slide is being loaded
+afterLoad    : When the content of a slide is done loading
+
+beforeShow   : Before open animation starts
+afterShow    : When content is done loading and animating
+
+beforeClose  : Before the instance attempts to close. Return false to cancel the close.
+afterClose   : After instance has been closed
+
+onInit       : When instance has been initialized
+onActivate   : When instance is brought to front
+onDeactivate : When other instance has been activated</code></pre>
+
+
+                               <p>
+                                       Event callbacks can be set as function properties of the options object passed to fancyBox initialization function:
+                               </p>
+
+                               <pre><code>&lt;script type=&quot;text/javascript&quot;&gt;
+       $(&quot;[data-fancybox]&quot;).fancybox({
+               afterShow: function( instance, slide ) {
+
+                       // Tip: Each event passes useful information within the event object:
+
+                       // Object containing references to interface elements
+                       // (background, buttons, caption, etc)
+                       // console.info( instance.$refs );
+
+                       // Current slide options
+                       // console.info( slide.opts );
+
+                       // Clicked element
+                       // console.info( slide.opts.$orig );
+
+                       // Reference to DOM element of the slide
+                       // console.info( slide.$slide );
+
+               }
+       });
+&lt;/script&gt;</code></pre>
+
+                               <p>
+                                       Each callback receives two parameters - current fancyBox instance and current gallery object, if exists.
+                               </p>
+
+                               <p>
+                                       It is also possible to attach event handler for all instances.
+                                       To prevent interfering with other scripts, these events have been namespaced to <code>.fb</code>.
+                                       These handlers receive 3 parameters - event, current fancyBox instance and current gallery object.
+                               </p>
+                               <p>
+                                       Here is an example of binding to the <code>afterShow</code> event:
+                               </p>
+
+                               <pre><code>$(document).on('afterShow.fb', function( e, instance, slide ) {
+       // Your code goes here
+});</code></pre>
+
+
+                               <p>
+                                       If you wish to prevent closing of the modal (for example, after form submit), you can use <code>beforeClose</code>
+                                       callback. Simply return <code>false</code>:
+                               </p>
+
+                               <pre><code>beforeClose : function( instance, current, e ) {
+       if ( $('#my-field').val() == '' ) {
+               return false;
+       }
+}
+</code></pre>
+
+                               <h2 id="modules">Modules</h2>
+
+                               <p>
+                                       fancyBox code is split into several files (modules) that extend core functionality.
+                                       You can build your own fancyBox version by excluding unnecessary modules, if needed.
+                                       Each one has their own <code>js</code> and/or <code>css</code> files.
+                               </p>
+
+                               <p>
+                                       Some modules can be customized and controlled programmatically.
+                                       List of all possible options:
+                               </p>
+
+                               <pre><code>fullScreen : {
+       autoStart : false,
+},
+
+touch : {
+       vertical : true,  // Allow to drag content vertically
+       momentum : true   // Continuous movement when panning
+},
+
+// Hash value when initializing manually,
+// set `false` to disable hash change
+hash : null,
+
+// Customize or add new media types
+// Example:
+/*
+media : {
+       youtube : {
+               params : {
+                       autoplay : 0
+               }
+       }
+}
+*/
+media : {},
+
+slideShow : {
+       autoStart : false,
+       speed     : 4000
+},
+
+thumbs : {
+       autoStart   : false, // Display thumbnails on opening
+       hideOnClose : true   // Hide thumbnail grid when closing animation starts
+}
+
+</code></pre>
+
+                               <p>
+                                       Example (show thumbnails on start):
+                               </p>
+
+                               <pre><code>$('[data-fancybox="images"]').fancybox({
+       thumbs : {
+               autoStart : true
+       }
+})</code></pre>
+                               <p class="demo">
+                                       <a href="https://codepen.io/fancyapps/pen/WOeQMQ?editors=1010" target="_blank">View demo on CodePen</a>
+                               </p>
+
+                               <p>
+                                       If you would inspect fancyBox instance object, you would find that same keys ar captialized - these are references for each module object.
+                                       Also, you would notice that fancyBox uses common naming convention to prefix jQuery objects with <code>$</code>.
+                               </p>
+
+                               <p>
+                                       This is how you, for example, can access thumbnail grid element:
+                               </p>
+
+                               <pre><code>$.fancybox.getInstance().Thumbs.$grid</code></pre>
+
+                               <p>
+                                       This example shows how to call method that toggles thumbnails:
+                               </p>
+
+                               <pre><code>$.fancybox.getInstance().Thumbs.toggle();</code></pre>
+
+                               <p>
+                                       List of available methods:
+                               </p>
+
+                               <pre><code>Thumbs.focus()
+Thumbs.update();
+Thumbs.hide();
+Thumbs.show();
+Thumbs.toggle();
+
+FullScreen.request( elem );
+FullScreen.exit();
+FullScreen.toggle( elem );
+FullScreen.isFullscreen();
+FullScreen.enabled();
+
+SlideShow.start();
+SlideShow.stop();
+SlideShow.toggle();
+</code></pre>
+
+                               <p>
+                                       If you wish to disable hash module, use this snippet (after including JS file):
+                               </p>
+
+                               <pre><code>$.fancybox.defaults.hash = false;</code></pre>
+
+<!--
+
+FAQ
+===
+
+-->
+                               <h2 id="faq">FAQ</h2>
+
+                               <h3>Opening/closing causes fixed element to jump</h3>
+
+                               <p>
+                                       Simply add <code>compensate-for-scrollbar</code> CSS class to your fixed positioned elements.
+                                       Example of using Bootstrap navbar component:
+                               </p>
+
+                               <pre><code>&lt;nav class=&quot;navbar navbar-inverse navbar-fixed-top compensate-for-scrollbar&quot;&gt;
+       &lt;div class=&quot;container&quot;&gt;
+               ..
+       &lt;/div&gt;
+&lt;/nav&gt;</code></pre>
+
+                               <p>
+                                       The script measures width of the scrollbar and creates <code>compensate-for-scrollbar</code> CSS class
+                                       that uses this value for <code>margin-right</code> property.
+                                       Therefore, if your element has <code>width:100%</code>, you should positon it using <code>left</code> and <code>right</code> properties instead. Example:
+                               </p>
+
+                               <pre><code>.navbar {
+       position: fixed;
+       top: 0;
+       left: 0;
+       right: 0;
+}</code></pre>
+
+                               <h3>How to customize caption</h3>
+
+                               <p>
+                                       You can use <code>caption</code> option that accepts a function and is called for each group element. Example of appending image download link:
+                               </p>
+
+                               <pre><code>$( '[data-fancybox]' ).fancybox({
+       caption : function( instance, item ) {
+               var caption = $(this).data('caption') || '';
+
+               if ( item.type === 'image' ) {
+                       caption = (caption.length ? caption + '&lt;br /&gt;' : '') + '&lt;a href=&quot;' + item.src + '&quot;&gt;Download image&lt;/a&gt;' ;
+               }
+
+               return caption;
+       }
+});</code></pre>
+                               <p class="demo">
+                                       <a href="https://codepen.io/fancyapps/pen/jwNbaW?editors=1010" target="_blank">View demo on CodePen</a>
+                               </p>
+
+
+                               <p>
+                                       Add current image index and image count (the total number of images in the gallery) right in the caption:
+                               </p>
+
+                               <pre><code>$( '[data-fancybox]' ).fancybox({
+       caption : function( instance, item ) {
+               var caption = $(this).data('caption') || '';
+
+               return '(&lt;span data-fancybox-index&gt;&lt;/span&gt;/&lt;span data-fancybox-count&gt;&lt;/span&gt;)' + ( caption.length ? ' ' + caption : '' );
+       }
+});
+</code></pre>
+                                                               <p class="demo">
+                                                                       <a href="https://codepen.io/fancyapps/pen/LLWpgO?editors=1010" target="_blank">View demo on CodePen</a>
+                                                               </p>
+
+
+
+                               <p>
+                                       Inside <code>caption</code> method, <code>this</code> refers to the clicked element. Example of using different source for caption:
+                               </p>
+
+                               <pre><code>$( '[data-fancybox]' ).fancybox({
+       caption : function( instance, item ) {
+               return $(this).find('figcaption').html();
+       }
+});</code></pre>
+                               <p class="demo">
+                                       <a href="https://codepen.io/fancyapps/pen/bRbVaG?editors=1010" target="_blank">View demo on CodePen</a>
+                               </p>
+
+
+                               <h3>How to create custom button in the toolbar</h3>
+
+                               <p>
+                                       Example of creating reusable button and changing <code>href</code> property dynamically
+                               </p>
+
+                               <pre><code>// Create template for download button
+$.fancybox.defaults.btnTpl.download = '&lt;a download class=&quot;fancybox-button fancybox-download&quot;&gt;&lt;/a&gt;';
+
+// Choose what buttons to display by default
+$.fancybox.defaults.buttons = [
+  'slideShow',
+  'fullScreen',
+  'thumbs',
+  'download',
+  'close'
+];
+
+// Dynamically update download url
+$( '[data-fancybox]' ).fancybox({
+       beforeShow : function( instance, current ) {
+               $('.fancybox-download').attr('href', current.src);
+       }
+});
+</code></pre>
+
+                               <p class="demo">
+                                       <a href="https://codepen.io/fancyapps/pen/JJPYLL" target="_blank">View demo on CodePen</a>
+                               </p>
+
+                               <h3>How to reposition thumbnail grid</h3>
+
+                               <p>
+                                       There is currenty no JS option to change thumbnail grid position.
+                                       But fancyBox is designed so that you can use CSS to change position or dimension for each block
+                                       (e.g., content area, caption or thumbnail grid).
+                                       This gives you freedom to completely change the look and feel of the modal window, if needed.
+                                       <a href="https://codepen.io/fancyapps/pen/PjYPMw" target="_blank">View demo on CodePen</a>
+                               </p>
+
+                       </div>
+
+
+               </div>
+       </section>
+
+       <footer>
+               <div class="content">
+                       <p>
+                               <a href="javascript:;" onClick="javascript:$('html, body').animate({ scrollTop: 0 }, 0);return false;">Back to Top</a>
+                       </p>
+               </div>
+       </footer>
+       <script>
+
+               /* Sticky nvigation */
+
+               var sticky = {
+                       $sticky      : $( '.sticky' ),
+                       offsets      : [],
+                       targets      : [],
+                       stickyTop    : null,
+
+                       set : function() {
+                               var self = this;
+
+                               self.offsets = [];
+                               self.targets = [];
+
+                               // Get current top position of sticky element
+
+                               self.stickyTop = self.$sticky.css( 'position', 'relative' ).offset().top;
+
+                               // Cache all targets and their top positions
+
+                               self.$sticky.find( 'a' ).map(function () {
+                                       var $el         = $( this ),
+                                               href    = $el.data('target') || $el.attr( 'href' ),
+                                               $href   = /^#./.test(href) && $( href );
+
+                                       return $href && $href.length && $href.is( ':visible' ) ? [ [ Math.floor( $href.offset().top - parseInt( $href.css('margin-top') ) ), href ] ] : null;
+                               })
+                               .sort(function (a, b) { return a[0] - b[0] })
+                               .each(function () {
+                                       self.offsets.push( this[ 0 ] );
+                                       self.targets.push( this[ 1 ] );
+                               });
+
+                       },
+
+                       update : function() {
+                               var self = this;
+
+                               var windowTop       = Math.floor( $(window).scrollTop() );
+                               var $stickyLinks    = self.$sticky.find( 'a' ).removeClass( 'active' );
+                               var stickyPosition  = 'fixed';
+                               var currentIndex    = 0;
+
+                               // Toggle fixed position depending on visibility
+
+                               if ( $(window).width() < 800 || self.stickyTop > windowTop ) {
+                                       stickyPosition = 'relative';
+
+                               } else {
+
+                                       for ( var i = self.offsets.length; i--; ) {
+                                               if ( windowTop >= self.offsets[ i ] && ( self.offsets[ i + 1 ] === undefined || windowTop <= self.offsets[ i + 1 ]) ) {
+                                                       currentIndex = i;
+
+                                                       break;
+                                               }
+                                       }
+
+                               }
+
+                               self.$sticky.css( 'position', stickyPosition );
+
+                               $stickyLinks.eq( currentIndex ).addClass( 'active' );
+
+                       },
+
+                       init : function() {
+                               var self = this;
+
+                               $(window).on('resize', function() {
+
+                                       self.set();
+
+                                       self.update();
+
+                               });
+
+                               $(window).on('scroll', function() {
+
+                                       self.update();
+
+                               });
+
+                               self.set();
+
+                               self.update();
+
+                       }
+               }
+
+               sticky.init();
+
+       </script>
+</body>
+</html>
diff --git a/fancybox/gulpfile.js b/fancybox/gulpfile.js
new file mode 100644 (file)
index 0000000..137dcfa
--- /dev/null
@@ -0,0 +1,66 @@
+var gulp = require('gulp'),
+    livereload = require('gulp-livereload'),
+    concat = require('gulp-concat'),
+    uglify = require('gulp-uglify'),
+    rename = require('gulp-rename'),
+    cssnano = require('gulp-cssnano'),
+    sass = require('gulp-sass'),
+    autoprefixer = require('gulp-autoprefixer'),
+    header = require('gulp-header'),
+    replace = require('gulp-replace'),
+    gutil = require('gulp-util');
+
+var pkg = require('./package.json');
+var banner = ['// ==================================================',
+    '// fancyBox v${pkg.version}',
+    '//',
+    '// Licensed GPLv3 for open source use',
+    '// or fancyBox Commercial License for commercial use',
+    '//',
+    '// http://fancyapps.com/fancybox/',
+    '// Copyright ${new Date().getFullYear()} fancyApps',
+    '//',
+    '// ==================================================',
+    ''].join('\n');
+
+// Concatenate & Minify JS
+
+gulp.task('scripts', function() {
+    return gulp.src([
+            'src/js/core.js',
+            'src/js/media.js',
+            'src/js/guestures.js',
+            'src/js/slideshow.js',
+            'src/js/fullscreen.js',
+            'src/js/thumbs.js',
+            'src/js/hash.js',
+        ])
+        .pipe(concat('jquery.fancybox.js'))
+        .pipe(replace(/({fancybox-version})/g, pkg.version))
+        .pipe(header(banner, { pkg : pkg } ))
+        .pipe(gulp.dest('dist'))
+        .pipe(rename({suffix: '.min'}))
+        .pipe(uglify())
+        .pipe(header(banner, { pkg : pkg } ))
+        .pipe(gulp.dest('dist'));
+    });
+
+
+// Compile CSS
+
+gulp.task('css', function() {
+    return gulp.src('src/css/*.css') // Gets all files src/css
+        .pipe(sass())
+        .pipe(autoprefixer({
+            browsers: ['last 5 versions'],
+            cascade: false
+        }))
+        .pipe(concat('jquery.fancybox.css'))
+        .pipe(gulp.dest('dist'))
+        .pipe(rename({suffix: '.min'}))
+        .pipe(cssnano({zindex: false}))
+        .pipe(gulp.dest('dist'));
+});
+
+// Default Task
+gulp.task('default', ['scripts', 'css']);
diff --git a/fancybox/package.json b/fancybox/package.json
new file mode 100644 (file)
index 0000000..8344787
--- /dev/null
@@ -0,0 +1,51 @@
+{
+  "name": "@fancyapps/fancybox",
+  "description": "Touch enabled, responsive and fully customizable jQuery lightbox script",
+  "version": "3.1.24",
+  "homepage": "http://fancyapps.com/fancybox/",
+  "main": "./dist/jquery.fancybox.min.js",
+  "author": "fancyApps",
+  "license": "GPL-3.0",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/fancyapps/fancybox.git"
+  },
+  "peerDependencies": {
+    "jquery": ">=1.9.0"
+  },
+  "devDependencies": {
+    "del": "^2.2.2",
+    "gulp": "^3.9.1",
+    "gulp-autoprefixer": "^3.1.1",
+    "gulp-concat": "^2.6.1",
+    "gulp-cssnano": "^2.1.2",
+    "gulp-header": "^1.8.8",
+    "gulp-jshint": "^2.0.4",
+    "gulp-livereload": "^3.8.1",
+    "gulp-notify": "^2.2.0",
+    "gulp-rename": "^1.2.2",
+    "gulp-replace": "^0.5.4",
+    "gulp-sass": "^3.0.0",
+    "gulp-uglify": "^2.0.0",
+    "gulp-util": "^3.0.8",
+    "jshint": "^2.9.4"
+  },
+  "keywords": [
+    "touch",
+    "responsive",
+    "lightbox",
+    "fancybox",
+    "gallery",
+    "jQuery",
+    "plugin"
+  ],
+  "bugs": {
+    "url": "https://github.com/fancyapps/fancybox/issues"
+  },
+  "directories": {
+    "doc": "docs"
+  },
+  "scripts": {
+    "test": "echo \"Error: no test specified\" && exit 1"
+  }
+}
diff --git a/fancybox/src/css/core.css b/fancybox/src/css/core.css
new file mode 100644 (file)
index 0000000..1060d13
--- /dev/null
@@ -0,0 +1,664 @@
+.fancybox-enabled {
+       overflow: hidden;
+}
+
+.fancybox-enabled body {
+    overflow: visible;
+       height: 100%;
+}
+
+.fancybox-is-hidden {
+       position: absolute;
+       top: -9999px;
+       left: -9999px;
+       visibility: hidden;
+}
+
+.fancybox-container {
+       position: fixed;
+       top: 0;
+       left: 0;
+       width: 100%;
+       height: 100%;
+       z-index: 99993;
+       -webkit-tap-highlight-color: rgba(0,0,0,0);
+       backface-visibility: hidden;
+       transform: translateZ(0);
+}
+
+/* Make sure that the first one is on the top */
+.fancybox-container ~ .fancybox-container {
+       z-index: 99992;
+}
+
+.fancybox-outer,
+.fancybox-inner,
+.fancybox-bg,
+.fancybox-stage {
+       position: absolute;
+       top: 0;
+       right: 0;
+       bottom: 0;
+       left: 0;
+}
+
+.fancybox-outer {
+       overflow-y: auto;
+       -webkit-overflow-scrolling: touch;
+}
+
+.fancybox-bg {
+       background: rgb(30,30,30);
+       opacity: 0;
+       transition-duration: inherit;
+       transition-property: opacity;
+       transition-timing-function: cubic-bezier(.47,0,.74,.71);
+}
+
+.fancybox-is-open .fancybox-bg {
+       opacity: 0.87;
+       transition-timing-function: cubic-bezier(.22,.61,.36,1);
+}
+
+.fancybox-infobar,
+.fancybox-toolbar,
+.fancybox-caption-wrap {
+       position: absolute;
+       direction: ltr;
+       z-index: 99997;
+       opacity: 0;
+       visibility: hidden;
+       transition: opacity .25s, visibility 0s linear .25s;
+       box-sizing: border-box;
+}
+
+.fancybox-show-infobar .fancybox-infobar,
+.fancybox-show-toolbar .fancybox-toolbar,
+.fancybox-show-caption .fancybox-caption-wrap {
+       opacity: 1;
+       visibility: visible;
+       transition: opacity .25s, visibility 0s;
+}
+
+.fancybox-infobar {
+       top: 0;
+       left : 50%;
+       margin-left: -79px;
+}
+
+.fancybox-infobar__body {
+       display: inline-block;
+       width: 70px;
+       line-height: 44px;
+       font-size: 13px;
+       font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
+       text-align: center;
+       color: #ddd;
+       background-color: rgba(30,30,30,0.7);
+       pointer-events: none;
+       user-select: none;
+       -webkit-touch-callout: none;
+       -webkit-tap-highlight-color: rgba(0,0,0,0);
+       -webkit-font-smoothing: subpixel-antialiased;
+}
+
+.fancybox-toolbar {
+       top: 0;
+       right: 0;
+}
+
+.fancybox-stage {
+       overflow: hidden;
+       direction: ltr;
+       z-index: 99994;
+       -webkit-transform: translate3d(0, 0, 0);
+}
+
+.fancybox-slide {
+       position: absolute;
+       top: 0;
+       left: 0;
+       width: 100%;
+       height: 100%;
+       margin: 0;
+       padding: 0;
+       overflow: auto;
+       outline: none;
+       white-space: normal;
+       box-sizing: border-box;
+       text-align: center;
+       z-index: 99994;
+       -webkit-overflow-scrolling: touch;
+       display: none;
+       backface-visibility: hidden;
+       transition-property: transform, opacity;
+       transform-style: preserve-3d;
+}
+
+.fancybox-slide::before {
+       content: '';
+       display: inline-block;
+       vertical-align: middle;
+       height: 100%;
+       width: 0;
+}
+
+.fancybox-is-sliding .fancybox-slide,
+.fancybox-slide--previous,
+.fancybox-slide--current,
+.fancybox-slide--next {
+       display: block;
+}
+
+.fancybox-slide--image {
+       overflow: visible;
+}
+
+.fancybox-slide--image::before {
+       display: none;
+}
+
+.fancybox-slide--video .fancybox-content,
+.fancybox-slide--video iframe {
+       background: #000;
+}
+
+.fancybox-slide--map .fancybox-content,
+.fancybox-slide--map iframe {
+       background: #E5E3DF;
+}
+
+.fancybox-slide--next {
+       z-index: 99995;
+}
+
+.fancybox-slide > * {
+       display: inline-block;
+       position: relative;
+       padding: 24px;
+       margin: 44px 0 44px;
+       border-width: 0;
+       vertical-align: middle;
+       text-align: left;
+       background-color: #fff;
+       overflow: auto;
+       box-sizing: border-box;
+}
+
+.fancybox-slide .fancybox-image-wrap {
+       position: absolute;
+       top: 0;
+       left: 0;
+       margin: 0;
+       padding: 0;
+       border: 0;
+       z-index: 99995;
+       background: transparent;
+       cursor: default;
+       overflow: visible;
+       transform-origin: top left;
+       background-size: 100% 100%;
+       background-repeat: no-repeat;
+       backface-visibility: hidden;
+}
+
+.fancybox-can-zoomOut .fancybox-image-wrap {
+       cursor: zoom-out;
+}
+
+.fancybox-can-zoomIn .fancybox-image-wrap {
+       cursor: zoom-in;
+}
+
+.fancybox-can-drag .fancybox-image-wrap {
+       cursor: grab;
+}
+
+.fancybox-is-dragging .fancybox-image-wrap {
+       cursor: grabbing;
+}
+
+.fancybox-image,
+.fancybox-spaceball {
+       position: absolute;
+       top: 0;
+       left: 0;
+       width: 100%;
+       height: 100%;
+       margin: 0;
+       padding: 0;
+       border: 0;
+       max-width: none;
+       max-height: none;
+}
+
+ .fancybox-spaceball {
+       z-index: 1;
+}
+
+.fancybox-slide--iframe .fancybox-content {
+       padding: 0;
+       width: 80%;
+       height: 80%;
+       max-width: calc(100% - 100px);
+       max-height: calc(100% - 88px);
+       overflow: visible;
+       background: #fff;
+}
+
+.fancybox-iframe {
+       display: block;
+       margin: 0;
+       padding: 0;
+       border: 0;
+       width: 100%;
+       height: 100%;
+       background: #fff;
+}
+
+.fancybox-error {
+       margin: 0;
+       padding: 40px;
+       width: 100%;
+       max-width: 380px;
+       background: #fff;
+       cursor: default;
+}
+
+.fancybox-error p {
+       margin: 0;
+       padding: 0;
+       color: #444;
+       font: 16px/20px "Helvetica Neue",Helvetica,Arial,sans-serif;
+}
+
+.fancybox-close-small {
+       position: absolute;
+       top: 0;
+       right: 0;
+       width: 44px;
+       height: 44px;
+       padding: 0;
+       margin: 0;
+       border: 0;
+       border-radius: 0;
+       outline: none;
+       background: transparent;
+       z-index: 10;
+       cursor: pointer;
+}
+
+.fancybox-close-small:after {
+       content: '×';
+       position: absolute;
+       top : 5px;
+       right: 5px;
+       width: 30px;
+       height: 30px;
+       font: 20px/30px Arial,"Helvetica Neue",Helvetica,sans-serif;
+       color: #888;
+       font-weight: 300;
+       text-align: center;
+       border-radius: 50%;
+       border-width: 0;
+       background: #fff;
+       transition: background .25s;
+       box-sizing: border-box;
+       z-index: 2;
+}
+
+.fancybox-close-small:focus:after {
+       outline: 1px dotted #888;
+}
+
+.fancybox-close-small:hover:after {
+       color: #555;
+       background: #eee;
+}
+
+.fancybox-slide--iframe .fancybox-close-small {
+       top : 0;
+       right : -44px;
+}
+
+.fancybox-slide--iframe .fancybox-close-small:after {
+       background: transparent;
+       font-size: 35px;
+       color: #aaa;
+}
+
+.fancybox-slide--iframe .fancybox-close-small:hover:after {
+       color: #fff;
+}
+
+
+/* Caption */
+
+.fancybox-caption-wrap {
+       bottom: 0;
+       left: 0;
+       right: 0;
+       padding: 60px 30px 0 30px;
+       background: linear-gradient(to bottom, rgba(0,0,0,0) 0%, rgba(0,0,0,0.1) 20%, rgba(0,0,0,0.2) 40%,rgba(0,0,0,0.6) 80%, rgba(0,0,0,0.8) 100%);
+       pointer-events: none;
+}
+
+.fancybox-caption {
+       padding: 30px 0;
+       border-top: 1px solid rgba(255,255,255,0.4);
+       font-size: 14px;
+       font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
+       color: #fff;
+       line-height: 20px;
+       -webkit-text-size-adjust: none;
+}
+
+.fancybox-caption a,
+.fancybox-caption button,
+.fancybox-caption select {
+       pointer-events: all;
+}
+
+.fancybox-caption a {
+       color: #fff;
+       text-decoration: underline;
+}
+
+
+/* Buttons */
+
+.fancybox-button {
+       display: inline-block;
+       position: relative;
+       margin: 0;
+       padding: 0;
+       border: 0;
+       width: 44px;
+       height: 44px;
+       line-height: 44px;
+       text-align: center;
+       background: transparent;
+       color: #ddd;
+       border-radius: 0;
+       cursor: pointer;
+       vertical-align: top;
+       outline: none;
+}
+
+.fancybox-button[disabled] {
+       cursor: default;
+       pointer-events: none;
+}
+
+.fancybox-infobar__body, .fancybox-button {
+       background: rgba(30,30,30,0.6);
+}
+
+.fancybox-button:hover:not([disabled]) {
+       color: #fff;
+       background: rgba(0,0,0,0.8);
+}
+
+.fancybox-button::before,
+.fancybox-button::after {
+       content: '';
+       pointer-events: none;
+       position: absolute;
+       background-color: currentColor;
+       color: currentColor;
+       opacity: 0.9;
+       box-sizing: border-box;
+       display: inline-block;
+}
+
+.fancybox-button[disabled]::before,
+.fancybox-button[disabled]::after {
+       opacity: 0.3;
+}
+
+.fancybox-button--left::after,
+.fancybox-button--right::after {
+       top: 18px;
+       width: 6px;
+       height: 6px;
+       background: transparent;
+       border-top: solid 2px currentColor;
+       border-right: solid 2px currentColor;
+}
+
+.fancybox-button--left::after {
+       left: 20px;
+       transform: rotate(-135deg);
+}
+
+.fancybox-button--right::after {
+       right: 20px;
+       transform: rotate(45deg);
+}
+
+.fancybox-button--left {
+       border-bottom-left-radius: 5px;
+}
+
+.fancybox-button--right {
+       border-bottom-right-radius: 5px;
+}
+
+.fancybox-button--close::before, .fancybox-button--close::after {
+       content: '';
+       display: inline-block;
+       position: absolute;
+       height: 2px;
+       width: 16px;
+       top: calc(50% - 1px);
+       left: calc(50% - 8px);
+}
+
+.fancybox-button--close::before {
+       transform: rotate(45deg);
+}
+
+.fancybox-button--close::after {
+       transform: rotate(-45deg);
+}
+
+
+/* Navigation arrows */
+
+.fancybox-arrow {
+       position: absolute;
+       top: 50%;
+       margin: -50px 0 0 0;
+       height: 100px;
+       width: 54px;
+       padding: 0;
+       border: 0;
+       outline: none;
+       background: none;
+       cursor: pointer;
+       z-index: 99995;
+       opacity: 0;
+       user-select: none;
+       transition: opacity .25s;
+}
+
+.fancybox-arrow::after {
+       content : '';
+       position: absolute;
+       top: 28px;
+       width: 44px;
+       height: 44px;
+       background-color: rgba(30,30,30,0.8);
+       background-image: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSIjRkZGRkZGIiBoZWlnaHQ9IjQ4IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSI0OCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4gICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPiAgICA8cGF0aCBkPSJNMTIgNGwtMS40MSAxLjQxTDE2LjE3IDExSDR2MmgxMi4xN2wtNS41OCA1LjU5TDEyIDIwbDgtOHoiLz48L3N2Zz4=);
+       background-repeat: no-repeat;
+       background-position: center center;
+       background-size: 24px 24px;
+}
+
+.fancybox-arrow--right {
+       right: 0;
+}
+
+.fancybox-arrow--left {
+       left: 0;
+       transform: scaleX(-1);
+}
+
+.fancybox-arrow--right::after,
+.fancybox-arrow--left::after {
+       left: 0;
+}
+
+.fancybox-show-nav .fancybox-arrow {
+       opacity: 0.6;
+}
+
+.fancybox-show-nav .fancybox-arrow[disabled] {
+       opacity: 0.3;
+}
+
+
+/* Loading indicator */
+
+.fancybox-loading {
+       border: 6px solid rgba(100, 100, 100, .4);
+       border-top: 6px solid rgba(255, 255, 255, .6);
+       border-radius: 100%;
+       height: 50px;
+       width: 50px;
+       animation: fancybox-rotate .8s infinite linear;
+       background: transparent;
+       position: absolute;
+       top: 50%;
+       left: 50%;
+       margin-top: -25px;
+       margin-left: -25px;
+       z-index: 99999;
+}
+
+@keyframes fancybox-rotate {
+       from { transform: rotate( 0deg ); }
+       to   { transform: rotate( 359deg ); }
+}
+
+
+/* Transition effects */
+
+.fancybox-animated {
+       transition-timing-function: cubic-bezier(0, 0, 0.25, 1);
+}
+
+/* transitionEffect: slide */
+
+.fancybox-fx-slide.fancybox-slide--previous {
+       transform: translate3d(-100%, 0, 0);
+       opacity: 0;
+}
+
+.fancybox-fx-slide.fancybox-slide--next {
+       transform: translate3d(100%, 0, 0);
+       opacity: 0;
+}
+
+.fancybox-fx-slide.fancybox-slide--current {
+       transform: translate3d(0, 0, 0);
+       opacity: 1;
+}
+
+/* transitionEffect: fade */
+
+.fancybox-fx-fade.fancybox-slide--previous,
+.fancybox-fx-fade.fancybox-slide--next {
+       opacity: 0;
+       transition-timing-function: cubic-bezier(.19,1,.22,1);
+}
+
+.fancybox-fx-fade.fancybox-slide--current {
+       opacity: 1;
+}
+
+/* transitionEffect: zoom-in-out */
+
+.fancybox-fx-zoom-in-out.fancybox-slide--previous {
+       transform: scale3d(1.5, 1.5, 1.5);
+       opacity: 0;
+}
+
+.fancybox-fx-zoom-in-out.fancybox-slide--next {
+       transform: scale3d(0.5, 0.5, 0.5);
+       opacity: 0;
+}
+
+.fancybox-fx-zoom-in-out.fancybox-slide--current {
+       transform: scale3d(1, 1, 1);
+       opacity: 1;
+}
+
+/* transitionEffect: rotate */
+
+.fancybox-fx-rotate.fancybox-slide--previous {
+       transform: rotate(-360deg);
+       opacity: 0;
+}
+
+.fancybox-fx-rotate.fancybox-slide--next {
+       transform: rotate(360deg);
+       opacity: 0;
+}
+
+.fancybox-fx-rotate.fancybox-slide--current {
+       transform: rotate(0deg);
+       opacity: 1;
+}
+
+/* transitionEffect: circular */
+
+.fancybox-fx-circular.fancybox-slide--previous {
+       transform: scale3d(0, 0, 0) translate3d(-100%, 0, 0);
+       opacity: 0;
+}
+
+.fancybox-fx-circular.fancybox-slide--next {
+       transform: scale3d(0, 0, 0) translate3d(100%, 0, 0);
+       opacity: 0;
+}
+
+.fancybox-fx-circular.fancybox-slide--current {
+       transform: scale3d(1, 1, 1) translate3d(0, 0, 0);
+       opacity: 1;
+}
+
+/* transitionEffect: tube */
+
+.fancybox-fx-tube.fancybox-slide--previous {
+       transform: translate3d(-100%, 0, 0) scale(0.1) skew(-10deg);
+}
+
+.fancybox-fx-tube.fancybox-slide--next {
+       transform: translate3d(100%, 0, 0) scale(0.1) skew(10deg);
+}
+
+.fancybox-fx-tube.fancybox-slide--current {
+       transform: translate3d(0, 0, 0) scale(1);
+}
+
+
+/* Styling for Small-Screen Devices */
+
+@media all and (max-width: 800px) {
+
+       .fancybox-infobar {
+               left: 0;
+               margin-left: 0;
+       }
+
+       .fancybox-button--left,
+       .fancybox-button--right {
+               display: none !important;
+       }
+
+       .fancybox-caption {
+               padding: 20px 0;
+               margin: 0;
+       }
+}
diff --git a/fancybox/src/css/fullscreen.css b/fancybox/src/css/fullscreen.css
new file mode 100644 (file)
index 0000000..a4bd316
--- /dev/null
@@ -0,0 +1,11 @@
+
+/* Fullscreen  */
+
+.fancybox-button--fullscreen::before {
+       width: 15px;
+       height: 11px;
+       left: calc(50% - 7px);
+       top: calc(50% - 6px);
+       border: 2px solid;
+       background: none;
+}
diff --git a/fancybox/src/css/slideshow.css b/fancybox/src/css/slideshow.css
new file mode 100644 (file)
index 0000000..b663619
--- /dev/null
@@ -0,0 +1,26 @@
+/* Slideshow button */
+
+.fancybox-button--play {}
+
+.fancybox-button--play::before,
+.fancybox-button--pause::before {
+       top: calc(50% - 6px);
+       left: calc(50% - 4px);
+       background: transparent;
+}
+
+.fancybox-button--play::before {
+       width: 0;
+       height: 0;
+       border-top: 6px inset transparent;
+       border-bottom: 6px inset transparent;
+       border-left: 10px solid;
+       border-radius: 1px;
+}
+
+.fancybox-button--pause::before {
+       width: 7px;
+       height: 11px;
+       border-style: solid;
+       border-width: 0 2px 0 2px;
+}
diff --git a/fancybox/src/css/thumbs.css b/fancybox/src/css/thumbs.css
new file mode 100644 (file)
index 0000000..215e5f7
--- /dev/null
@@ -0,0 +1,122 @@
+
+/* Thumbs */
+
+.fancybox-thumbs {
+    display: none;
+}
+
+.fancybox-button--thumbs {
+       display: none;
+}
+
+@media all and (min-width: 800px) {
+
+       .fancybox-button--thumbs {
+               display: inline-block;
+       }
+
+       .fancybox-button--thumbs span {
+               font-size: 23px;
+       }
+
+       .fancybox-button--thumbs::before {
+               width: 3px;
+               height: 3px;
+               top: calc(50% - 2px);
+               left: calc(50% - 2px);
+               box-shadow: 0 -4px 0, -4px -4px 0, 4px -4px 0, 0 0 0 32px inset, -4px 0 0, 4px 0 0, 0 4px 0, -4px 4px 0, 4px 4px 0;
+       }
+
+       .fancybox-thumbs {
+               position: absolute;
+               top: 0;
+               right: 0;
+               bottom: 0;
+               left: auto;
+               width: 220px;
+               margin: 0;
+               padding: 5px 5px 0 0;
+               background: #fff;
+               word-break: normal;
+               -webkit-tap-highlight-color: rgba(0,0,0,0);
+               -webkit-overflow-scrolling: touch;
+               -ms-overflow-style: -ms-autohiding-scrollbar;
+               box-sizing: border-box;
+               z-index: 99995;
+       }
+
+       .fancybox-show-thumbs .fancybox-thumbs {
+               display: block;
+       }
+
+       .fancybox-show-thumbs .fancybox-inner {
+               right: 220px;
+       }
+
+       .fancybox-thumbs > ul {
+               list-style: none;
+               position: absolute;
+               position: relative;
+               width: 100%;
+               height: 100%;
+               margin: 0;
+               padding: 0;
+               overflow-x: hidden;
+               overflow-y: auto;
+               font-size: 0;
+       }
+
+       .fancybox-thumbs > ul > li {
+               float: left;
+               overflow: hidden;
+               max-width: 50%;
+               padding: 0;
+               margin: 0;
+               width: 105px;
+               height: 75px;
+               position: relative;
+               cursor: pointer;
+               outline: none;
+               border: 5px solid transparent;
+               border-top-width: 0;
+               border-right-width: 0;
+               -webkit-tap-highlight-color: transparent;
+           backface-visibility: hidden;
+           box-sizing: border-box;
+       }
+
+       li.fancybox-thumbs-loading {
+               background: rgba(0,0,0,0.1);
+       }
+
+       .fancybox-thumbs > ul > li > img {
+               position: absolute;
+               top: 0;
+               left: 0;
+               min-width: 100%;
+               min-height: 100%;
+               max-width: none;
+               max-height: none;
+               -webkit-touch-callout: none;
+               user-select: none;
+       }
+
+       .fancybox-thumbs > ul > li:before {
+               content:'';
+               position: absolute;
+               top: 0;
+               right: 0;
+               bottom: 0;
+               left: 0;
+               border-radius: 2px;
+               border: 4px solid #4ea7f9;
+               z-index: 99991;
+               opacity: 0;
+               transition: all 0.2s cubic-bezier(.25,.46,.45,.94);
+       }
+
+       .fancybox-thumbs > ul > li.fancybox-thumbs-active:before {
+               opacity: 1;
+       }
+
+}
diff --git a/fancybox/src/js/core.js b/fancybox/src/js/core.js
new file mode 100644 (file)
index 0000000..b381c61
--- /dev/null
@@ -0,0 +1,2964 @@
+;(function (window, document, $, undefined) {
+    'use strict';
+
+    // If there's no jQuery, fancyBox can't work
+    // =========================================
+
+    if ( !$ ) {
+        return;
+    }
+
+    // Check if fancyBox is already initialized
+    // ========================================
+
+    if ( $.fn.fancybox ) {
+
+        $.error('fancyBox already initialized');
+
+        return;
+    }
+
+    // Private default settings
+    // ========================
+
+    var defaults = {
+
+        // Enable infinite gallery navigation
+        loop : false,
+
+        // Space around image, ignored if zoomed-in or viewport smaller than 800px
+        margin : [44, 0],
+
+        // Horizontal space between slides
+        gutter : 50,
+
+        // Enable keyboard navigation
+        keyboard : true,
+
+        // Should display navigation arrows at the screen edges
+        arrows : true,
+
+        // Should display infobar (counter and arrows at the top)
+        infobar : false,
+
+        // Should display toolbar (buttons at the top)
+        toolbar : true,
+
+        // What buttons should appear in the top right corner.
+        // Buttons will be created using templates from `btnTpl` option
+        // and they will be placed into toolbar (class="fancybox-toolbar"` element)
+        buttons : [
+            'slideShow',
+            'fullScreen',
+            'thumbs',
+            'close'
+        ],
+
+        // Detect "idle" time in seconds
+        idleTime : 4,
+
+        // Should display buttons at top right corner of the content
+        // If 'auto' - they will be created for content having type 'html', 'inline' or 'ajax'
+        // Use template from `btnTpl.smallBtn` for customization
+        smallBtn : 'auto',
+
+        // Disable right-click and use simple image protection for images
+        protect : false,
+
+        // Shortcut to make content "modal" - disable keyboard navigtion, hide buttons, etc
+        modal : false,
+
+        image : {
+
+            // Wait for images to load before displaying
+            // Requires predefined image dimensions
+            // If 'auto' - will zoom in thumbnail if 'width' and 'height' attributes are found
+            preload : "auto",
+
+        },
+
+        ajax : {
+
+            // Object containing settings for ajax request
+            settings : {
+
+                // This helps to indicate that request comes from the modal
+                // Feel free to change naming
+                data : {
+                    fancybox : true
+                }
+            }
+
+        },
+
+        iframe : {
+
+            // Iframe template
+            tpl : '<iframe id="fancybox-frame{rnd}" name="fancybox-frame{rnd}" class="fancybox-iframe" frameborder="0" vspace="0" hspace="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen allowtransparency="true" src=""></iframe>',
+
+            // Preload iframe before displaying it
+            // This allows to calculate iframe content width and height
+            // (note: Due to "Same Origin Policy", you can't get cross domain data).
+            preload : true,
+
+            // Custom CSS styling for iframe wrapping element
+            // You can use this to set custom iframe dimensions
+            css : {},
+
+            // Iframe tag attributes
+            attr : {
+                scrolling : 'auto'
+            }
+
+        },
+
+        // Open/close animation type
+        // Possible values:
+        //   false            - disable
+        //   "zoom"           - zoom images from/to thumbnail
+        //   "fade"
+        //   "zoom-in-out"
+        //
+        animationEffect : "zoom",
+
+        // Duration in ms for open/close animation
+        animationDuration : 366,
+
+        // Should image change opacity while zooming
+        // If opacity is 'auto', then opacity will be changed if image and thumbnail have different aspect ratios
+        zoomOpacity : 'auto',
+
+        // Transition effect between slides
+        //
+        // Possible values:
+        //   false            - disable
+        //   "fade'
+        //   "slide'
+        //   "circular'
+        //   "tube'
+        //   "zoom-in-out'
+        //   "rotate'
+        //
+        transitionEffect : "fade",
+
+        // Duration in ms for transition animation
+        transitionDuration : 366,
+
+        // Custom CSS class for slide element
+        slideClass : '',
+
+        // Custom CSS class for layout
+        baseClass : '',
+
+        // Base template for layout
+        baseTpl        :
+            '<div class="fancybox-container" role="dialog" tabindex="-1">' +
+                '<div class="fancybox-bg"></div>' +
+                '<div class="fancybox-inner">' +
+                    '<div class="fancybox-infobar">' +
+                        '<button data-fancybox-prev title="{{PREV}}" class="fancybox-button fancybox-button--left"></button>' +
+                        '<div class="fancybox-infobar__body">' +
+                            '<span data-fancybox-index></span>&nbsp;/&nbsp;<span data-fancybox-count></span>' +
+                        '</div>' +
+                        '<button data-fancybox-next title="{{NEXT}}" class="fancybox-button fancybox-button--right"></button>' +
+                    '</div>' +
+                    '<div class="fancybox-toolbar">' +
+                        '{{BUTTONS}}' +
+                    '</div>' +
+                    '<div class="fancybox-navigation">' +
+                        '<button data-fancybox-prev title="{{PREV}}" class="fancybox-arrow fancybox-arrow--left" />' +
+                        '<button data-fancybox-next title="{{NEXT}}" class="fancybox-arrow fancybox-arrow--right" />' +
+                    '</div>' +
+                    '<div class="fancybox-stage"></div>' +
+                    '<div class="fancybox-caption-wrap">' +
+                        '<div class="fancybox-caption"></div>' +
+                    '</div>' +
+                '</div>' +
+            '</div>',
+
+        // Loading indicator template
+        spinnerTpl : '<div class="fancybox-loading"></div>',
+
+        // Error message template
+        errorTpl : '<div class="fancybox-error"><p>{{ERROR}}<p></div>',
+
+        btnTpl : {
+            slideShow  : '<button data-fancybox-play class="fancybox-button fancybox-button--play" title="{{PLAY_START}}"></button>',
+            fullScreen : '<button data-fancybox-fullscreen class="fancybox-button fancybox-button--fullscreen" title="{{FULL_SCREEN}}"></button>',
+            thumbs     : '<button data-fancybox-thumbs class="fancybox-button fancybox-button--thumbs" title="{{THUMBS}}"></button>',
+            close      : '<button data-fancybox-close class="fancybox-button fancybox-button--close" title="{{CLOSE}}"></button>',
+
+            // This small close button will be appended to your html/inline/ajax content by default,
+            // if "smallBtn" option is not set to false
+            smallBtn   : '<button data-fancybox-close class="fancybox-close-small" title="{{CLOSE}}"></button>'
+        },
+
+        // Container is injected into this element
+        parentEl : 'body',
+
+
+        // Focus handling
+        // ==============
+
+        // Try to focus on the first focusable element after opening
+        autoFocus : true,
+
+        // Put focus back to active element after closing
+        backFocus : true,
+
+        // Do not let user to focus on element outside modal content
+        trapFocus : true,
+
+
+        // Module specific options
+        // =======================
+
+        fullScreen : {
+            autoStart : false,
+        },
+
+        touch : {
+            vertical : true,  // Allow to drag content vertically
+            momentum : true   // Continue movement after releasing mouse/touch when panning
+        },
+
+        // Hash value when initializing manually,
+        // set `false` to disable hash change
+        hash : null,
+
+        // Customize or add new media types
+        // Example:
+        /*
+        media : {
+            youtube : {
+                params : {
+                    autoplay : 0
+                }
+            }
+        }
+        */
+        media : {},
+
+        slideShow : {
+            autoStart : false,
+            speed     : 4000
+        },
+
+        thumbs : {
+            autoStart   : false,   // Display thumbnails on opening
+            hideOnClose : true     // Hide thumbnail grid when closing animation starts
+        },
+
+        // Callbacks
+        //==========
+
+        // See Documentation/API/Events for more information
+        // Example:
+        /*
+            afterShow: function( instance, current ) {
+                 console.info( 'Clicked element:' );
+                 console.info( current.opts.$orig );
+            }
+        */
+
+        onInit       : $.noop,  // When instance has been initialized
+
+        beforeLoad   : $.noop,  // Before the content of a slide is being loaded
+        afterLoad    : $.noop,  // When the content of a slide is done loading
+
+        beforeShow   : $.noop,  // Before open animation starts
+        afterShow    : $.noop,  // When content is done loading and animating
+
+        beforeClose  : $.noop,  // Before the instance attempts to close. Return false to cancel the close.
+        afterClose   : $.noop,  // After instance has been closed
+
+        onActivate   : $.noop,  // When instance is brought to front
+        onDeactivate : $.noop,  // When other instance has been activated
+
+
+        // Interaction
+        // ===========
+
+        // Use options below to customize taken action when user clicks or double clicks on the fancyBox area,
+        // each option can be string or method that returns value.
+        //
+        // Possible values:
+        //   "close"           - close instance
+        //   "next"            - move to next gallery item
+        //   "nextOrClose"     - move to next gallery item or close if gallery has only one item
+        //   "toggleControls"  - show/hide controls
+        //   "zoom"            - zoom image (if loaded)
+        //   false             - do nothing
+
+        // Clicked on the content
+        clickContent : function( current, event ) {
+            return current.type === 'image' ? 'zoom' : false;
+        },
+
+        // Clicked on the slide
+        clickSlide : 'close',
+
+        // Clicked on the background (backdrop) element
+        clickOutside : 'close',
+
+        // Same as previous two, but for double click
+        dblclickContent : false,
+        dblclickSlide   : false,
+        dblclickOutside : false,
+
+
+        // Custom options when mobile device is detected
+        // =============================================
+
+        mobile : {
+            clickContent : function( current, event ) {
+                return current.type === 'image' ? 'toggleControls' : false;
+            },
+            clickSlide : function( current, event ) {
+                return current.type === 'image' ? 'toggleControls' : "close";
+            },
+            dblclickContent : function( current, event ) {
+                return current.type === 'image' ? 'zoom' : false;
+            },
+            dblclickSlide : function( current, event ) {
+                return current.type === 'image' ? 'zoom' : false;
+            }
+        },
+
+
+        // Internationalization
+        // ============
+
+        lang : 'en',
+        i18n : {
+            'en' : {
+                CLOSE       : 'Close',
+                NEXT        : 'Next',
+                PREV        : 'Previous',
+                ERROR       : 'The requested content cannot be loaded. <br/> Please try again later.',
+                PLAY_START  : 'Start slideshow',
+                PLAY_STOP   : 'Pause slideshow',
+                FULL_SCREEN : 'Full screen',
+                THUMBS      : 'Thumbnails'
+            },
+            'de' : {
+                CLOSE       : 'Schliessen',
+                NEXT        : 'Weiter',
+                PREV        : 'Zurück',
+                ERROR       : 'Die angeforderten Daten konnten nicht geladen werden. <br/> Bitte versuchen Sie es später nochmal.',
+                PLAY_START  : 'Diaschau starten',
+                PLAY_STOP   : 'Diaschau beenden',
+                FULL_SCREEN : 'Vollbild',
+                THUMBS      : 'Vorschaubilder'
+            }
+        }
+
+    };
+
+    // Few useful variables and methods
+    // ================================
+
+    var $W = $(window);
+    var $D = $(document);
+
+    var called = 0;
+
+
+    // Check if an object is a jQuery object and not a native JavaScript object
+    // ========================================================================
+
+    var isQuery = function ( obj ) {
+        return obj && obj.hasOwnProperty && obj instanceof $;
+    };
+
+
+    // Handle multiple browsers for "requestAnimationFrame" and "cancelAnimationFrame"
+    // ===============================================================================
+
+    var requestAFrame = (function () {
+        return window.requestAnimationFrame ||
+                window.webkitRequestAnimationFrame ||
+                window.mozRequestAnimationFrame ||
+                window.oRequestAnimationFrame ||
+                // if all else fails, use setTimeout
+                function (callback) {
+                    return window.setTimeout(callback, 1000 / 60);
+                };
+    })();
+
+
+    // Detect the supported transition-end event property name
+    // =======================================================
+
+    var transitionEnd = (function () {
+        var t, el = document.createElement("fakeelement");
+
+        var transitions = {
+            "transition"      : "transitionend",
+            "OTransition"     : "oTransitionEnd",
+            "MozTransition"   : "transitionend",
+            "WebkitTransition": "webkitTransitionEnd"
+        };
+
+        for (t in transitions) {
+            if (el.style[t] !== undefined){
+                return transitions[t];
+            }
+        }
+    })();
+
+
+    // Force redraw on an element.
+    // This helps in cases where the browser doesn't redraw an updated element properly.
+    // =================================================================================
+
+    var forceRedraw = function( $el ) {
+        return ( $el && $el.length && $el[0].offsetHeight );
+    };
+
+
+    // Class definition
+    // ================
+
+    var FancyBox = function( content, opts, index ) {
+        var self = this;
+
+        self.opts  = $.extend( true, { index : index }, defaults, opts || {} );
+
+        // Exclude buttons option from deep merging
+        if ( opts && $.isArray( opts.buttons ) ) {
+            self.opts.buttons = opts.buttons;
+        }
+
+        self.id    = self.opts.id || ++called;
+        self.group = [];
+
+        self.currIndex = parseInt( self.opts.index, 10 ) || 0;
+        self.prevIndex = null;
+
+        self.prevPos = null;
+        self.currPos = 0;
+
+        self.firstRun = null;
+
+        // Create group elements from original item collection
+        self.createGroup( content );
+
+        if ( !self.group.length ) {
+            return;
+        }
+
+        // Save last active element and current scroll position
+        self.$lastFocus = $(document.activeElement).blur();
+
+        // Collection of gallery objects
+        self.slides = {};
+
+        self.init( content );
+
+    };
+
+    $.extend(FancyBox.prototype, {
+
+        // Create DOM structure
+        // ====================
+
+        init : function() {
+            var self = this;
+
+            var testWidth, $container, buttonStr;
+
+            var firstItemOpts = self.group[ self.currIndex ].opts;
+
+            self.scrollTop  = $D.scrollTop();
+            self.scrollLeft = $D.scrollLeft();
+
+
+            // Hide scrollbars
+            // ===============
+
+            if ( !$.fancybox.getInstance() && !$.fancybox.isMobile && $( 'body' ).css('overflow') !== 'hidden' ) {
+                testWidth = $( 'body' ).width();
+
+                $( 'html' ).addClass( 'fancybox-enabled' );
+
+                // Compare body width after applying "overflow: hidden"
+                testWidth = $( 'body' ).width() - testWidth;
+
+                // If width has changed - compensate missing scrollbars by adding right margin
+                if ( testWidth > 1 ) {
+                    $( 'head' ).append( '<style id="fancybox-style-noscroll" type="text/css">.compensate-for-scrollbar, .fancybox-enabled body { margin-right: ' + testWidth + 'px; }</style>' );
+                }
+            }
+
+
+            // Build html markup and set references
+            // ====================================
+
+            // Build html code for buttons and insert into main template
+            buttonStr = '';
+
+            $.each( firstItemOpts.buttons, function( index, value ) {
+                buttonStr += ( firstItemOpts.btnTpl[ value ] || '' );
+            });
+
+            // Create markup from base template, it will be initially hidden to
+            // avoid unnecessary work like painting while initializing is not complete
+            $container = $( self.translate( self, firstItemOpts.baseTpl.replace( '\{\{BUTTONS\}\}', buttonStr ) ) )
+                .addClass( 'fancybox-is-hidden' )
+                .attr('id', 'fancybox-container-' + self.id)
+                .addClass( firstItemOpts.baseClass )
+                .data( 'FancyBox', self )
+                .prependTo( firstItemOpts.parentEl );
+
+            // Create object holding references to jQuery wrapped nodes
+            self.$refs = {
+                container : $container
+            };
+
+            [ 'bg', 'inner', 'infobar', 'toolbar', 'stage', 'caption' ].forEach(function(item) {
+                self.$refs[ item ] = $container.find( '.fancybox-' + item );
+            });
+
+            // Check for redundant elements
+            if ( !firstItemOpts.arrows || self.group.length < 2 ) {
+                $container.find('.fancybox-navigation').remove();
+            }
+
+            if ( !firstItemOpts.infobar ) {
+                self.$refs.infobar.remove();
+            }
+
+            if ( !firstItemOpts.toolbar ) {
+                self.$refs.toolbar.remove();
+            }
+
+            self.trigger( 'onInit' );
+
+            // Bring to front and enable events
+            self.activate();
+
+            // Build slides, load and reveal content
+            self.jumpTo( self.currIndex );
+        },
+
+
+        // Simple i18n support - replaces object keys found in template
+        // with corresponding values
+        // ============================================================
+
+        translate : function( obj, str ) {
+            var arr = obj.opts.i18n[ obj.opts.lang ];
+
+            return str.replace(/\{\{(\w+)\}\}/g, function(match, n) {
+                var value = arr[n];
+
+                if ( value === undefined ) {
+                    return match;
+                }
+
+                return value;
+            });
+        },
+
+        // Create array of gally item objects
+        // Check if each object has valid type and content
+        // ===============================================
+
+        createGroup : function ( content ) {
+            var self  = this;
+            var items = $.makeArray( content );
+
+            $.each(items, function( i, item ) {
+                var obj  = {},
+                    opts = {},
+                    data = [],
+                    $item,
+                    type,
+                    src,
+                    srcParts;
+
+                // Step 1 - Make sure we have an object
+                // ====================================
+
+                if ( $.isPlainObject( item ) ) {
+
+                    // We probably have manual usage here, something like
+                    // $.fancybox.open( [ { src : "image.jpg", type : "image" } ] )
+
+                    obj  = item;
+                    opts = item.opts || item;
+
+                } else if ( $.type( item ) === 'object' && $( item ).length ) {
+
+                    // Here we propbably have jQuery collection returned by some selector
+
+                    $item = $( item );
+                    data  = $item.data();
+
+                    opts = 'options' in data ? data.options : {};
+                    opts = $.type( opts ) === 'object' ? opts : {};
+
+                    obj.src  = 'src' in data ? data.src : ( opts.src || $item.attr( 'href' ) );
+
+                    [ 'width', 'height', 'thumb', 'type', 'filter' ].forEach(function(item) {
+                        if ( item in data ) {
+                            opts[ item ] = data[ item ];
+                        }
+                    });
+
+                    if ( 'srcset' in data ) {
+                        opts.image = { srcset : data.srcset };
+                    }
+
+                    opts.$orig = $item;
+
+                    if ( !obj.type && !obj.src ) {
+                        obj.type = 'inline';
+                        obj.src  = item;
+                    }
+
+                } else {
+
+                    // Assume we have a simple html code, for example:
+                    // $.fancybox.open( '<div><h1>Hi!</h1></div>' );
+
+                    obj = {
+                        type : 'html',
+                        src  : item + ''
+                    };
+
+                }
+
+                // Each gallery object has full collection of options
+                obj.opts = $.extend( true, {}, self.opts, opts );
+
+                if ( $.fancybox.isMobile ) {
+                    obj.opts = $.extend( true, {}, obj.opts, obj.opts.mobile );
+                }
+
+
+                // Step 2 - Make sure we have content type, if not - try to guess
+                // ==============================================================
+
+                type = obj.type || obj.opts.type;
+                src  = obj.src || '';
+
+                if ( !type && src ) {
+                    if ( src.match(/(^data:image\/[a-z0-9+\/=]*,)|(\.(jp(e|g|eg)|gif|png|bmp|webp|svg|ico)((\?|#).*)?$)/i) ) {
+                        type = 'image';
+
+                    } else if ( src.match(/\.(pdf)((\?|#).*)?$/i) ) {
+                        type = 'pdf';
+
+                    } else if ( src.charAt(0) === '#' ) {
+                        type = 'inline';
+                    }
+                }
+
+                obj.type = type;
+
+
+                // Step 3 - Some adjustments
+                // =========================
+
+                obj.index = self.group.length;
+
+                // Check if $orig and $thumb objects exist
+                if ( obj.opts.$orig && !obj.opts.$orig.length ) {
+                    delete obj.opts.$orig;
+                }
+
+                if ( !obj.opts.$thumb && obj.opts.$orig ) {
+                    obj.opts.$thumb = obj.opts.$orig.find( 'img:first' );
+                }
+
+                if ( obj.opts.$thumb && !obj.opts.$thumb.length ) {
+                    delete obj.opts.$thumb;
+                }
+
+                // Caption is a "special" option, it can be passed as a method
+                if ( $.type( obj.opts.caption ) === 'function' ) {
+                    obj.opts.caption = obj.opts.caption.apply( item, [ self, obj ] );
+
+                } else if ( 'caption' in data ) {
+                    obj.opts.caption = data.caption;
+                }
+
+                // Make sure we have caption as a string
+                obj.opts.caption = obj.opts.caption === undefined ? '' : obj.opts.caption + '';
+
+                // Check if url contains "filter" used to filter the content
+                // Example: "ajax.html #something"
+                if ( type === 'ajax' ) {
+                    srcParts = src.split(/\s+/, 2);
+
+                    if ( srcParts.length > 1 ) {
+                        obj.src = srcParts.shift();
+
+                        obj.opts.filter = srcParts.shift();
+                    }
+                }
+
+                if ( obj.opts.smallBtn == 'auto' ) {
+
+                    if ( $.inArray( type, ['html', 'inline', 'ajax'] ) > -1 ) {
+                        obj.opts.toolbar  = false;
+                        obj.opts.smallBtn = true;
+
+                    } else {
+                        obj.opts.smallBtn = false;
+                    }
+
+                }
+
+                // If the type is "pdf", then simply load file into iframe
+                if ( type === 'pdf' ) {
+                    obj.type = 'iframe';
+
+                    obj.opts.iframe.preload = false;
+                }
+
+                // Hide all buttons and disable interactivity for modal items
+                if ( obj.opts.modal ) {
+
+                    obj.opts = $.extend(true, obj.opts, {
+                        // Remove buttons
+                        infobar : 0,
+                        toolbar : 0,
+
+                        smallBtn : 0,
+
+                        // Disable keyboard navigation
+                        keyboard : 0,
+
+                        // Disable some modules
+                        slideShow  : 0,
+                        fullScreen : 0,
+                        thumbs     : 0,
+                        touch      : 0,
+
+                        // Disable click event handlers
+                        clickContent    : false,
+                        clickSlide      : false,
+                        clickOutside    : false,
+                        dblclickContent : false,
+                        dblclickSlide   : false,
+                        dblclickOutside : false
+                    });
+
+                }
+
+                // Step 4 - Add processed object to group
+                // ======================================
+
+                self.group.push( obj );
+
+            });
+
+        },
+
+
+        // Attach an event handler functions for:
+        //   - navigation buttons
+        //   - browser scrolling, resizing;
+        //   - focusing
+        //   - keyboard
+        //   - detect idle
+        // ======================================
+
+        addEvents : function() {
+            var self = this;
+
+            self.removeEvents();
+
+            // Make navigation elements clickable
+            self.$refs.container.on('click.fb-close', '[data-fancybox-close]', function(e) {
+                e.stopPropagation();
+                e.preventDefault();
+
+                self.close( e );
+
+            }).on( 'click.fb-prev touchend.fb-prev', '[data-fancybox-prev]', function(e) {
+                e.stopPropagation();
+                e.preventDefault();
+
+                self.previous();
+
+            }).on( 'click.fb-next touchend.fb-next', '[data-fancybox-next]', function(e) {
+                e.stopPropagation();
+                e.preventDefault();
+
+                self.next();
+
+            });
+
+
+            // Handle page scrolling and browser resizing
+            $W.on('orientationchange.fb resize.fb', function(e) {
+
+                if ( e && e.originalEvent && e.originalEvent.type === "resize" ) {
+
+                    requestAFrame(function() {
+                        self.update();
+                    });
+
+                } else {
+
+                    self.$refs.stage.hide();
+
+                    setTimeout(function() {
+                        self.$refs.stage.show();
+
+                        self.update();
+                    }, 500);
+
+                }
+
+            });
+
+            // Trap keyboard focus inside of the modal, so the user does not accidentally tab outside of the modal
+            // (a.k.a. "escaping the modal")
+            $D.on('focusin.fb', function(e) {
+                var instance = $.fancybox ? $.fancybox.getInstance() : null;
+
+                if ( instance.isClosing || !instance.current || !instance.current.opts.trapFocus || $( e.target ).hasClass( 'fancybox-container' ) || $( e.target ).is( document ) ) {
+                    return;
+                }
+
+                if ( instance && $( e.target ).css( 'position' ) !== 'fixed' && !instance.$refs.container.has( e.target ).length ) {
+                    e.stopPropagation();
+
+                    instance.focus();
+
+                    // Sometimes page gets scrolled, set it back
+                    $W.scrollTop( self.scrollTop ).scrollLeft( self.scrollLeft );
+                }
+            });
+
+
+            // Enable keyboard navigation
+            $D.on('keydown.fb', function (e) {
+                var current = self.current,
+                    keycode = e.keyCode || e.which;
+
+                if ( !current || !current.opts.keyboard ) {
+                    return;
+                }
+
+                if ( $(e.target).is('input') || $(e.target).is('textarea') ) {
+                    return;
+                }
+
+                // Backspace and Esc keys
+                if ( keycode === 8 || keycode === 27 ) {
+                    e.preventDefault();
+
+                    self.close( e );
+
+                    return;
+                }
+
+                // Left arrow and Up arrow
+                if ( keycode === 37 || keycode === 38 ) {
+                    e.preventDefault();
+
+                    self.previous();
+
+                    return;
+                }
+
+                // Righ arrow and Down arrow
+                if ( keycode === 39 || keycode === 40 ) {
+                    e.preventDefault();
+
+                    self.next();
+
+                    return;
+                }
+
+                self.trigger('afterKeydown', e, keycode);
+            });
+
+
+            // Hide controls after some inactivity period
+            if ( self.group[ self.currIndex ].opts.idleTime ) {
+                self.idleSecondsCounter = 0;
+
+                $D.on('mousemove.fb-idle mouseenter.fb-idle mouseleave.fb-idle mousedown.fb-idle touchstart.fb-idle touchmove.fb-idle scroll.fb-idle keydown.fb-idle', function() {
+                    self.idleSecondsCounter = 0;
+
+                    if ( self.isIdle ) {
+                        self.showControls();
+                    }
+
+                    self.isIdle = false;
+                });
+
+                self.idleInterval = window.setInterval(function() {
+
+                    self.idleSecondsCounter++;
+
+                    if ( self.idleSecondsCounter >= self.group[ self.currIndex ].opts.idleTime ) {
+                        self.isIdle = true;
+                        self.idleSecondsCounter = 0;
+
+                        self.hideControls();
+                    }
+
+                }, 1000);
+            }
+
+        },
+
+
+        // Remove events added by the core
+        // ===============================
+
+        removeEvents : function () {
+            var self = this;
+
+            $W.off( 'orientationchange.fb resize.fb' );
+            $D.off( 'focusin.fb keydown.fb .fb-idle' );
+
+            this.$refs.container.off( '.fb-close .fb-prev .fb-next' );
+
+            if ( self.idleInterval ) {
+                window.clearInterval( self.idleInterval );
+
+                self.idleInterval = null;
+            }
+        },
+
+
+        // Change to previous gallery item
+        // ===============================
+
+        previous : function( duration ) {
+            return this.jumpTo( this.currPos - 1, duration );
+        },
+
+
+        // Change to next gallery item
+        // ===========================
+
+        next : function( duration ) {
+            return this.jumpTo( this.currPos + 1, duration );
+        },
+
+
+        // Switch to selected gallery item
+        // ===============================
+
+        jumpTo : function ( pos, duration, slide ) {
+            var self = this,
+                firstRun,
+                loop,
+                current,
+                previous,
+                canvasWidth,
+                currentPos,
+                transitionProps;
+
+            var groupLen = self.group.length;
+
+            if ( self.isSliding || self.isClosing || ( self.isAnimating && self.firstRun ) ) {
+                return;
+            }
+
+            pos  = parseInt( pos, 10 );
+            loop = self.current ? self.current.opts.loop : self.opts.loop;
+
+            if ( !loop && ( pos < 0 || pos >= groupLen ) ) {
+                return false;
+            }
+
+            firstRun = self.firstRun = ( self.firstRun === null );
+
+            if ( groupLen < 2 && !firstRun && !!self.isSliding ) {
+                return;
+            }
+
+            previous = self.current;
+
+            self.prevIndex = self.currIndex;
+            self.prevPos   = self.currPos;
+
+            // Create slides
+            current = self.createSlide( pos );
+
+            if ( groupLen > 1 ) {
+                if ( loop || current.index > 0 ) {
+                    self.createSlide( pos - 1 );
+                }
+
+                if ( loop || current.index < groupLen - 1 ) {
+                    self.createSlide( pos + 1 );
+                }
+            }
+
+            self.current   = current;
+            self.currIndex = current.index;
+            self.currPos   = current.pos;
+
+            self.trigger( 'beforeShow', firstRun );
+
+            self.updateControls();
+
+            currentPos = $.fancybox.getTranslate( current.$slide );
+
+            current.isMoved        = ( currentPos.left !== 0 || currentPos.top !== 0 ) && !current.$slide.hasClass( 'fancybox-animated' );
+            current.forcedDuration = undefined;
+
+            if ( $.isNumeric( duration ) ) {
+                current.forcedDuration = duration;
+            } else {
+                duration = current.opts[ firstRun ? 'animationDuration' : 'transitionDuration' ];
+            }
+
+            duration = parseInt( duration, 10 );
+
+            // Fresh start - reveal container, current slide and start loading content
+            if ( firstRun ) {
+
+                if ( current.opts.animationEffect && duration ) {
+                    self.$refs.container.css( 'transition-duration', duration + 'ms' );
+                }
+
+                self.$refs.container.removeClass( 'fancybox-is-hidden' );
+
+                forceRedraw( self.$refs.container );
+
+                self.$refs.container.addClass( 'fancybox-is-open' );
+
+                // Make first slide visible (to display loading icon, if needed)
+                current.$slide.addClass( 'fancybox-slide--current' );
+
+                self.loadSlide( current );
+
+                self.preload();
+
+                return;
+            }
+
+            // Clean up
+            $.each(self.slides, function( index, slide ) {
+                $.fancybox.stop( slide.$slide );
+            });
+
+            // Make current that slide is visible even if content is still loading
+            current.$slide.removeClass( 'fancybox-slide--next fancybox-slide--previous' ).addClass( 'fancybox-slide--current' );
+
+            // If slides have been dragged, animate them to correct position
+            if ( current.isMoved ) {
+                canvasWidth = Math.round( current.$slide.width() );
+
+                $.each(self.slides, function( index, slide ) {
+                    var pos = slide.pos - current.pos;
+
+                    $.fancybox.animate( slide.$slide, {
+                        top  : 0,
+                        left : ( pos * canvasWidth ) + ( pos * slide.opts.gutter )
+                    }, duration, function() {
+
+                        slide.$slide.removeAttr('style').removeClass( 'fancybox-slide--next fancybox-slide--previous' );
+
+                        if ( slide.pos === self.currPos ) {
+                            current.isMoved = false;
+
+                            self.complete();
+                        }
+                    });
+                });
+
+            } else {
+                self.$refs.stage.children().removeAttr( 'style' );
+            }
+
+            // Start transition that reveals current content
+            // or wait when it will be loaded
+
+            if ( current.isLoaded ) {
+                self.revealContent( current );
+
+            } else {
+                self.loadSlide( current );
+            }
+
+            self.preload();
+
+            if ( previous.pos === current.pos ) {
+                return;
+            }
+
+            // Handle previous slide
+            // =====================
+
+            transitionProps = 'fancybox-slide--' + ( previous.pos > current.pos ? 'next' : 'previous' );
+
+            previous.$slide.removeClass( 'fancybox-slide--complete fancybox-slide--current fancybox-slide--next fancybox-slide--previous' );
+
+            previous.isComplete = false;
+
+            if ( !duration || ( !current.isMoved && !current.opts.transitionEffect ) ) {
+                return;
+            }
+
+            if ( current.isMoved ) {
+                previous.$slide.addClass( transitionProps );
+
+            } else {
+
+                transitionProps = 'fancybox-animated ' + transitionProps + ' fancybox-fx-' + current.opts.transitionEffect;
+
+                $.fancybox.animate( previous.$slide, transitionProps, duration, function() {
+                    previous.$slide.removeClass( transitionProps ).removeAttr( 'style' );
+                });
+
+            }
+
+        },
+
+
+        // Create new "slide" element
+        // These are gallery items  that are actually added to DOM
+        // =======================================================
+
+        createSlide : function( pos ) {
+
+            var self = this;
+            var $slide;
+            var index;
+
+            index = pos % self.group.length;
+            index = index < 0 ? self.group.length + index : index;
+
+            if ( !self.slides[ pos ] && self.group[ index ] ) {
+                $slide = $('<div class="fancybox-slide"></div>').appendTo( self.$refs.stage );
+
+                self.slides[ pos ] = $.extend( true, {}, self.group[ index ], {
+                    pos      : pos,
+                    $slide   : $slide,
+                    isLoaded : false,
+                });
+
+                self.updateSlide( self.slides[ pos ] );
+            }
+
+            return self.slides[ pos ];
+        },
+
+
+        // Scale image to the actual size of the image
+        // ===========================================
+
+        scaleToActual : function( x, y, duration ) {
+
+            var self = this;
+
+            var current = self.current;
+            var $what   = current.$content;
+
+            var imgPos, posX, posY, scaleX, scaleY;
+
+            var canvasWidth  = parseInt( current.$slide.width(), 10 );
+            var canvasHeight = parseInt( current.$slide.height(), 10 );
+
+            var newImgWidth  = current.width;
+            var newImgHeight = current.height;
+
+            if ( !( current.type == 'image' && !current.hasError) || !$what || self.isAnimating) {
+                return;
+            }
+
+            $.fancybox.stop( $what );
+
+            self.isAnimating = true;
+
+            x = x === undefined ? canvasWidth  * 0.5  : x;
+            y = y === undefined ? canvasHeight * 0.5  : y;
+
+            imgPos = $.fancybox.getTranslate( $what );
+
+            scaleX  = newImgWidth  / imgPos.width;
+            scaleY  = newImgHeight / imgPos.height;
+
+            // Get center position for original image
+            posX = ( canvasWidth * 0.5  - newImgWidth * 0.5 );
+            posY = ( canvasHeight * 0.5 - newImgHeight * 0.5 );
+
+            // Make sure image does not move away from edges
+            if ( newImgWidth > canvasWidth ) {
+                posX = imgPos.left * scaleX - ( ( x * scaleX ) - x );
+
+                if ( posX > 0 ) {
+                    posX = 0;
+                }
+
+                if ( posX <  canvasWidth - newImgWidth ) {
+                    posX = canvasWidth - newImgWidth;
+                }
+            }
+
+            if ( newImgHeight > canvasHeight) {
+                posY = imgPos.top  * scaleY - ( ( y * scaleY ) - y );
+
+                if ( posY > 0 ) {
+                    posY = 0;
+                }
+
+                if ( posY <  canvasHeight - newImgHeight ) {
+                    posY = canvasHeight - newImgHeight;
+                }
+            }
+
+            self.updateCursor( newImgWidth, newImgHeight );
+
+            $.fancybox.animate( $what, {
+                top    : posY,
+                left   : posX,
+                scaleX : scaleX,
+                scaleY : scaleY
+            }, duration || 330, function() {
+                self.isAnimating = false;
+            });
+
+            // Stop slideshow
+            if ( self.SlideShow && self.SlideShow.isActive ) {
+                self.SlideShow.stop();
+            }
+        },
+
+
+        // Scale image to fit inside parent element
+        // ========================================
+
+        scaleToFit : function( duration ) {
+
+            var self = this;
+
+            var current = self.current;
+            var $what   = current.$content;
+            var end;
+
+            if ( !( current.type == 'image' && !current.hasError) || !$what || self.isAnimating ) {
+                return;
+            }
+
+            $.fancybox.stop( $what );
+
+            self.isAnimating = true;
+
+            end = self.getFitPos( current );
+
+            self.updateCursor( end.width, end.height );
+
+            $.fancybox.animate( $what, {
+                top    : end.top,
+                left   : end.left,
+                scaleX : end.width  / $what.width(),
+                scaleY : end.height / $what.height()
+            }, duration || 330, function() {
+                self.isAnimating = false;
+            });
+
+        },
+
+        // Calculate image size to fit inside viewport
+        // ===========================================
+
+        getFitPos : function( slide ) {
+            var self  = this;
+            var $what = slide.$content;
+
+            var imgWidth  = slide.width;
+            var imgHeight = slide.height;
+
+            var margin = slide.opts.margin;
+
+            var canvasWidth, canvasHeight, minRatio, width, height;
+
+            if ( !$what || !$what.length || ( !imgWidth && !imgHeight) ) {
+                return false;
+            }
+
+            // Convert "margin to CSS style: [ top, right, bottom, left ]
+            if ( $.type( margin ) === "number" ) {
+                margin = [ margin, margin ];
+            }
+
+            if ( margin.length == 2 ) {
+                margin = [ margin[0], margin[1], margin[0], margin[1] ];
+            }
+
+            if ( $W.width() < 800 ) {
+                margin = [ 0, 0, 0, 0 ];
+            }
+
+            // We can not use $slide width here, because it can have different diemensions while in transiton
+            canvasWidth  = parseInt( self.$refs.stage.width(), 10 )  - ( margin[ 1 ] + margin[ 3 ] );
+            canvasHeight = parseInt( self.$refs.stage.height(), 10 ) - ( margin[ 0 ] + margin[ 2 ] );
+
+            minRatio = Math.min(1, canvasWidth / imgWidth, canvasHeight / imgHeight );
+
+            width  = Math.floor( minRatio * imgWidth );
+            height = Math.floor( minRatio * imgHeight );
+
+            // Use floor rounding to make sure it really fits
+            return {
+                top    : Math.floor( ( canvasHeight - height ) * 0.5 ) + margin[ 0 ],
+                left   : Math.floor( ( canvasWidth  - width )  * 0.5 ) + margin[ 3 ],
+                width  : width,
+                height : height
+            };
+
+        },
+
+
+        // Update position and content of all slides
+        // =========================================
+
+        update : function() {
+
+            var self = this;
+
+            $.each( self.slides, function( key, slide ) {
+                self.updateSlide( slide );
+            });
+
+        },
+
+
+        // Update slide position and scale content to fit
+        // ==============================================
+
+        updateSlide : function( slide ) {
+
+            var self  = this;
+            var $what = slide.$content;
+
+            if ( $what && ( slide.width || slide.height ) ) {
+                $.fancybox.stop( $what );
+
+                $.fancybox.setTranslate( $what, self.getFitPos( slide ) );
+
+                if ( slide.pos === self.currPos ) {
+                    self.updateCursor();
+                }
+            }
+
+            slide.$slide.trigger( 'refresh' );
+
+            self.trigger( 'onUpdate', slide );
+
+        },
+
+        // Update cursor style depending if content can be zoomed
+        // ======================================================
+
+        updateCursor : function( nextWidth, nextHeight ) {
+
+            var self = this;
+            var isScaledDown;
+
+            var $container = self.$refs.container.removeClass('fancybox-is-zoomable fancybox-can-zoomIn fancybox-can-drag fancybox-can-zoomOut');
+
+            if ( !self.current || self.isClosing ) {
+                return;
+            }
+
+            if ( self.isZoomable() ) {
+
+                $container.addClass( 'fancybox-is-zoomable' );
+
+                if ( nextWidth !== undefined && nextHeight !== undefined ) {
+                    isScaledDown = nextWidth < self.current.width && nextHeight < self.current.height;
+
+                } else {
+                    isScaledDown = self.isScaledDown();
+                }
+
+                if ( isScaledDown ) {
+
+                    // If image is scaled down, then, obviously, it can be zoomed to full size
+                    $container.addClass('fancybox-can-zoomIn');
+
+                } else {
+
+                    if ( self.current.opts.touch ) {
+
+                        // If image size ir largen than available available and touch module is not disable,
+                        // then user can do panning
+                        $container.addClass('fancybox-can-drag');
+
+                    } else {
+                        $container.addClass('fancybox-can-zoomOut');
+                    }
+
+                }
+
+            } else if ( self.current.opts.touch ) {
+                $container.addClass('fancybox-can-drag');
+            }
+
+        },
+
+
+        // Check if current slide is zoomable
+        // ==================================
+
+        isZoomable : function() {
+
+            var self = this;
+
+            var current = self.current;
+            var fitPos;
+
+            if ( !current || self.isClosing ) {
+                return;
+            }
+
+            // Assume that slide is zoomable if
+            //   - image is loaded successfuly
+            //   - click action is "zoom"
+            //   - actual size of the image is smaller than available area
+            if ( current.type === 'image' && current.isLoaded && !current.hasError &&
+                ( current.opts.clickContent === 'zoom' || ( $.isFunction( current.opts.clickContent ) && current.opts.clickContent( current ) ===  "zoom" ) )
+            ) {
+
+                fitPos = self.getFitPos( current );
+
+                if ( current.width > fitPos.width || current.height > fitPos.height ) {
+                    return true;
+                }
+
+            }
+
+            return false;
+
+        },
+
+
+        // Check if current image dimensions are smaller than actual
+        // =========================================================
+
+        isScaledDown : function() {
+
+            var self = this;
+
+            var current = self.current;
+            var $what   = current.$content;
+
+            var rez = false;
+
+            if ( $what ) {
+                rez = $.fancybox.getTranslate( $what );
+                rez = rez.width < current.width || rez.height < current.height;
+            }
+
+            return rez;
+
+        },
+
+
+        // Check if image dimensions exceed parent element
+        // ===============================================
+
+        canPan : function() {
+
+            var self = this;
+
+            var current = self.current;
+            var $what   = current.$content;
+
+            var rez = false;
+
+            if ( $what ) {
+                rez = self.getFitPos( current );
+                rez = Math.abs( $what.width() - rez.width ) > 1  || Math.abs( $what.height() - rez.height ) > 1;
+
+            }
+
+            return rez;
+
+        },
+
+
+        // Load content into the slide
+        // ===========================
+
+        loadSlide : function( slide ) {
+
+            var self = this, type, $slide;
+            var ajaxLoad;
+
+            if ( slide.isLoading ) {
+                return;
+            }
+
+            if ( slide.isLoaded ) {
+                return;
+            }
+
+            slide.isLoading = true;
+
+            self.trigger( 'beforeLoad', slide );
+
+            type   = slide.type;
+            $slide = slide.$slide;
+
+            $slide
+                .off( 'refresh' )
+                .trigger( 'onReset' )
+                .addClass( 'fancybox-slide--' + ( type || 'unknown' ) )
+                .addClass( slide.opts.slideClass );
+
+            // Create content depending on the type
+
+            switch ( type ) {
+
+                case 'image':
+
+                    self.setImage( slide );
+
+                break;
+
+                case 'iframe':
+
+                    self.setIframe( slide );
+
+                break;
+
+                case 'html':
+
+                    self.setContent( slide, slide.src || slide.content );
+
+                break;
+
+                case 'inline':
+
+                    if ( $( slide.src ).length ) {
+                        self.setContent( slide, $( slide.src ) );
+
+                    } else {
+                        self.setError( slide );
+                    }
+
+                break;
+
+                case 'ajax':
+
+                    self.showLoading( slide );
+
+                    ajaxLoad = $.ajax( $.extend( {}, slide.opts.ajax.settings, {
+                        url : slide.src,
+                        success : function ( data, textStatus ) {
+
+                            if ( textStatus === 'success' ) {
+                                self.setContent( slide, data );
+                            }
+
+                        },
+                        error : function ( jqXHR, textStatus ) {
+
+                            if ( jqXHR && textStatus !== 'abort' ) {
+                                self.setError( slide );
+                            }
+
+                        }
+                    }));
+
+                    $slide.one( 'onReset', function () {
+                        ajaxLoad.abort();
+                    });
+
+                break;
+
+                default:
+
+                    self.setError( slide );
+
+                break;
+
+            }
+
+            return true;
+
+        },
+
+
+        // Use thumbnail image, if possible
+        // ================================
+
+        setImage : function( slide ) {
+
+            var self   = this;
+            var srcset = slide.opts.image.srcset;
+
+            var found, temp, pxRatio, windowWidth;
+
+            // If we have "srcset", then we need to find matching "src" value.
+            // This is necessary, because when you set an src attribute, the browser will preload the image
+            // before any javascript or even CSS is applied.
+            if ( srcset ) {
+                pxRatio     = window.devicePixelRatio || 1;
+                windowWidth = window.innerWidth  * pxRatio;
+
+                temp = srcset.split(',').map(function ( el ) {
+                       var ret = {};
+
+                       el.trim().split(/\s+/).forEach(function ( el, i ) {
+                        var value = parseInt( el.substring(0, el.length - 1), 10 );
+
+                               if ( i === 0 ) {
+                                       return ( ret.url = el );
+                               }
+
+                        if ( value ) {
+                            ret.value   = value;
+                            ret.postfix = el[ el.length - 1 ];
+                        }
+
+                       });
+
+                       return ret;
+               });
+
+                // Sort by value
+                temp.sort(function (a, b) {
+                  return a.value - b.value;
+                });
+
+                // Ok, now we have an array of all srcset values
+                for ( var j = 0; j < temp.length; j++ ) {
+                    var el = temp[ j ];
+
+                    if ( ( el.postfix === 'w' && el.value >= windowWidth ) || ( el.postfix === 'x' && el.value >= pxRatio ) ) {
+                        found = el;
+                        break;
+                    }
+                }
+
+                // If not found, take the last one
+                if ( !found && temp.length ) {
+                    found = temp[ temp.length - 1 ];
+                }
+
+                if ( found ) {
+                    slide.src = found.url;
+
+                    // If we have default width/height values, we can calculate height for matching source
+                    if ( slide.width && slide.height && found.postfix == 'w' ) {
+                        slide.height = ( slide.width / slide.height ) * found.value;
+                        slide.width  = found.value;
+                    }
+                }
+            }
+
+            // This will be wrapper containing both ghost and actual image
+            slide.$content = $('<div class="fancybox-image-wrap"></div>')
+                .addClass( 'fancybox-is-hidden' )
+                .appendTo( slide.$slide );
+
+
+            // If we have a thumbnail, we can display it while actual image is loading
+            // Users will not stare at black screen and actual image will appear gradually
+            if ( slide.opts.preload !== false && slide.opts.width && slide.opts.height && ( slide.opts.thumb || slide.opts.$thumb ) ) {
+
+                slide.width  = slide.opts.width;
+                slide.height = slide.opts.height;
+
+                slide.$ghost = $('<img />')
+                    .one('error', function() {
+
+                        $(this).remove();
+
+                        slide.$ghost = null;
+
+                        self.setBigImage( slide );
+
+                    })
+                    .one('load', function() {
+
+                        self.afterLoad( slide );
+
+                        self.setBigImage( slide );
+
+                    })
+                    .addClass( 'fancybox-image' )
+                    .appendTo( slide.$content )
+                    .attr( 'src', slide.opts.thumb || slide.opts.$thumb.attr( 'src' ) );
+
+            } else {
+
+                self.setBigImage( slide );
+
+            }
+
+        },
+
+
+        // Create full-size image
+        // ======================
+
+        setBigImage : function ( slide ) {
+            var self = this;
+            var $img = $('<img />');
+
+            slide.$image = $img
+                .one('error', function() {
+
+                    self.setError( slide );
+
+                })
+                .one('load', function() {
+
+                    // Clear timeout that checks if loading icon needs to be displayed
+                    clearTimeout( slide.timouts );
+
+                    slide.timouts = null;
+
+                    if ( self.isClosing ) {
+                        return;
+                    }
+
+                    slide.width  = this.naturalWidth;
+                    slide.height = this.naturalHeight;
+
+                    if ( slide.opts.image.srcset ) {
+                        $img.attr( 'sizes', '100vw' ).attr( 'srcset', slide.opts.image.srcset );
+                    }
+
+                    self.hideLoading( slide );
+
+                    if ( slide.$ghost ) {
+
+                        slide.timouts = setTimeout(function() {
+                            slide.timouts = null;
+
+                            slide.$ghost.hide();
+
+                        }, Math.min( 300, Math.max( 1000, slide.height / 1600 ) ) );
+
+                    } else {
+                        self.afterLoad( slide );
+                    }
+
+                })
+                .addClass( 'fancybox-image' )
+                .attr('src', slide.src)
+                .appendTo( slide.$content );
+
+            if ( $img[0].complete ) {
+                  $img.trigger( 'load' );
+
+            } else if( $img[0].error ) {
+                 $img.trigger( 'error' );
+
+            } else {
+
+                slide.timouts = setTimeout(function() {
+                    if ( !$img[0].complete && !slide.hasError ) {
+                        self.showLoading( slide );
+                    }
+
+                }, 100);
+
+            }
+
+        },
+
+
+        // Create iframe wrapper, iframe and bindings
+        // ==========================================
+
+        setIframe : function( slide ) {
+            var self   = this,
+                opts    = slide.opts.iframe,
+                $slide = slide.$slide,
+                $iframe;
+
+            slide.$content = $('<div class="fancybox-content' + ( opts.preload ? ' fancybox-is-hidden' : '' ) + '"></div>')
+                .css( opts.css )
+                .appendTo( $slide );
+
+            $iframe = $( opts.tpl.replace(/\{rnd\}/g, new Date().getTime()) )
+                .attr( opts.attr )
+                .appendTo( slide.$content );
+
+            if ( opts.preload ) {
+
+                self.showLoading( slide );
+
+                // Unfortunately, it is not always possible to determine if iframe is successfully loaded
+                // (due to browser security policy)
+
+                $iframe.on('load.fb error.fb', function(e) {
+                    this.isReady = 1;
+
+                    slide.$slide.trigger( 'refresh' );
+
+                    self.afterLoad( slide );
+                });
+
+                // Recalculate iframe content size
+                // ===============================
+
+                $slide.on('refresh.fb', function() {
+                    var $wrap = slide.$content,
+                        $contents,
+                        $body,
+                        scrollWidth,
+                        frameWidth,
+                        frameHeight;
+
+                    if ( $iframe[0].isReady !== 1 ) {
+                        return;
+                    }
+
+                    // Check if content is accessible,
+                    // it will fail if frame is not with the same origin
+
+                    try {
+                        $contents = $iframe.contents();
+                        $body     = $contents.find('body');
+
+                    } catch (ignore) {}
+
+                    // Calculate dimensions for the wrapper
+                    if ( $body && $body.length && !( opts.css.width !== undefined && opts.css.height !== undefined ) ) {
+
+                        scrollWidth = $iframe[0].contentWindow.document.documentElement.scrollWidth;
+
+                        frameWidth     = Math.ceil( $body.outerWidth(true) + ( $wrap.width() - scrollWidth ) );
+                        frameHeight    = Math.ceil( $body.outerHeight(true) );
+
+                        // Resize wrapper to fit iframe content
+                        $wrap.css({
+                            'width'  : opts.css.width  === undefined ? frameWidth  + ( $wrap.outerWidth()  - $wrap.innerWidth() )  : opts.css.width,
+                            'height' : opts.css.height === undefined ? frameHeight + ( $wrap.outerHeight() - $wrap.innerHeight() ) : opts.css.height
+                        });
+
+                    }
+
+                    $wrap.removeClass( 'fancybox-is-hidden' );
+
+                });
+
+            } else {
+
+                this.afterLoad( slide );
+
+            }
+
+            $iframe.attr( 'src', slide.src );
+
+            if ( slide.opts.smallBtn === true ) {
+                slide.$content.prepend( self.translate( slide, slide.opts.btnTpl.smallBtn ) );
+            }
+
+            // Remove iframe if closing or changing gallery item
+            $slide.one( 'onReset', function () {
+
+                // This helps IE not to throw errors when closing
+                try {
+
+                    $( this ).find( 'iframe' ).hide().attr( 'src', '//about:blank' );
+
+                } catch ( ignore ) {}
+
+                $( this ).empty();
+
+                slide.isLoaded = false;
+
+            });
+
+        },
+
+
+        // Wrap and append content to the slide
+        // ======================================
+
+        setContent : function ( slide, content ) {
+
+            var self = this;
+
+            if ( self.isClosing ) {
+                return;
+            }
+
+            self.hideLoading( slide );
+
+            slide.$slide.empty();
+
+            if ( isQuery( content ) && content.parent().length ) {
+
+                // If content is a jQuery object, then it will be moved to the slide.
+                // The placeholder is created so we will know where to put it back.
+                // If user is navigating gallery fast, then the content might be already inside fancyBox
+                // =====================================================================================
+
+                // Make sure content is not already moved to fancyBox
+                content.parent( '.fancybox-slide--inline' ).trigger( 'onReset' );
+
+                // Create temporary element marking original place of the content
+                slide.$placeholder = $( '<div></div>' ).hide().insertAfter( content );
+
+                // Make sure content is visible
+                content.css('display', 'inline-block');
+
+            } else if ( !slide.hasError ) {
+
+                // If content is just a plain text, try to convert it to html
+                if ( $.type( content ) === 'string' ) {
+                    content = $('<div>').append( $.trim( content ) ).contents();
+
+                    // If we have text node, then add wrapping element to make vertical alignment work
+                    if ( content[0].nodeType === 3 ) {
+                        content = $('<div>').html( content );
+                    }
+                }
+
+                // If "filter" option is provided, then filter content
+                if ( slide.opts.filter ) {
+                    content = $('<div>').html( content ).find( slide.opts.filter );
+                }
+
+            }
+
+            slide.$slide.one('onReset', function () {
+
+                // Put content back
+                if ( slide.$placeholder ) {
+                    slide.$placeholder.after( content.hide() ).remove();
+
+                    slide.$placeholder = null;
+                }
+
+                // Remove custom close button
+                if ( slide.$smallBtn ) {
+                    slide.$smallBtn.remove();
+
+                    slide.$smallBtn = null;
+                }
+
+                // Remove content and mark slide as not loaded
+                if ( !slide.hasError ) {
+                    $(this).empty();
+
+                    slide.isLoaded = false;
+                }
+
+            });
+
+            slide.$content = $( content ).appendTo( slide.$slide );
+
+            if ( slide.opts.smallBtn && !slide.$smallBtn ) {
+                slide.$smallBtn = $( self.translate( slide, slide.opts.btnTpl.smallBtn ) ).appendTo( slide.$content );
+            }
+
+            this.afterLoad( slide );
+        },
+
+        // Display error message
+        // =====================
+
+        setError : function ( slide ) {
+
+            slide.hasError = true;
+
+            slide.$slide.removeClass( 'fancybox-slide--' + slide.type );
+
+            this.setContent( slide, this.translate( slide, slide.opts.errorTpl ) );
+
+        },
+
+
+        // Show loading icon inside the slide
+        // ==================================
+
+        showLoading : function( slide ) {
+
+            var self = this;
+
+            slide = slide || self.current;
+
+            if ( slide && !slide.$spinner ) {
+                slide.$spinner = $( self.opts.spinnerTpl ).appendTo( slide.$slide );
+            }
+
+        },
+
+        // Remove loading icon from the slide
+        // ==================================
+
+        hideLoading : function( slide ) {
+
+            var self = this;
+
+            slide = slide || self.current;
+
+            if ( slide && slide.$spinner ) {
+                slide.$spinner.remove();
+
+                delete slide.$spinner;
+            }
+
+        },
+
+
+        // Adjustments after slide content has been loaded
+        // ===============================================
+
+        afterLoad : function( slide ) {
+
+            var self = this;
+
+            if ( self.isClosing ) {
+                return;
+            }
+
+            slide.isLoading = false;
+            slide.isLoaded  = true;
+
+            self.trigger( 'afterLoad', slide );
+
+            self.hideLoading( slide );
+
+            if ( slide.opts.protect && slide.$content && !slide.hasError ) {
+
+                // Disable right click
+                slide.$content.on( 'contextmenu.fb', function( e ) {
+                     if ( e.button == 2 ) {
+                         e.preventDefault();
+                     }
+
+                    return true;
+                });
+
+                // Add fake element on top of the image
+                // This makes a bit harder for user to select image
+                if ( slide.type === 'image' ) {
+                    $( '<div class="fancybox-spaceball"></div>' ).appendTo( slide.$content );
+                }
+
+            }
+
+            self.revealContent( slide );
+
+        },
+
+
+        // Make content visible
+        // This method is called right after content has been loaded or
+        // user navigates gallery and transition should start
+        // ============================================================
+
+        revealContent : function( slide ) {
+
+            var self   = this;
+            var $slide = slide.$slide;
+
+            var effect, effectClassName, duration, opacity, end, start = false;
+
+            effect   = slide.opts[ self.firstRun ? 'animationEffect'   : 'transitionEffect' ];
+            duration = slide.opts[ self.firstRun ? 'animationDuration' : 'transitionDuration' ];
+
+            duration = parseInt( slide.forcedDuration === undefined ? duration : slide.forcedDuration, 10 );
+
+            if ( slide.isMoved || slide.pos !== self.currPos || !duration ) {
+                effect = false;
+            }
+
+            // Check if can zoom
+            if ( effect === 'zoom' && !( slide.pos === self.currPos && duration && slide.type === 'image' && !slide.hasError && ( start = self.getThumbPos( slide ) ) ) ) {
+                effect = 'fade';
+            }
+
+
+            // Zoom animation
+            // ==============
+
+            if ( effect === 'zoom' ) {
+                end = self.getFitPos( slide );
+
+                end.scaleX = end.width  / start.width;
+                end.scaleY = end.height / start.height;
+
+                delete end.width;
+                delete end.height;
+
+                // Check if we need to animate opacity
+                opacity = slide.opts.zoomOpacity;
+
+                if ( opacity == 'auto' ) {
+                    opacity = Math.abs( slide.width / slide.height - start.width / start.height ) > 0.1;
+                }
+
+                if ( opacity ) {
+                    start.opacity = 0.1;
+                    end.opacity   = 1;
+                }
+
+                // Draw image at start position
+                $.fancybox.setTranslate( slide.$content.removeClass( 'fancybox-is-hidden' ), start );
+
+                forceRedraw( slide.$content );
+
+                // Start animation
+                $.fancybox.animate( slide.$content, end, duration, function() {
+                    self.complete();
+                });
+
+                return;
+            }
+
+
+            self.updateSlide( slide );
+
+
+            // Simply show content
+            // ===================
+
+            if ( !effect ) {
+                forceRedraw( $slide );
+
+                slide.$content.removeClass( 'fancybox-is-hidden' );
+
+                if ( slide.pos === self.currPos ) {
+                    self.complete();
+                }
+
+                return;
+            }
+
+            $.fancybox.stop( $slide );
+
+            effectClassName = 'fancybox-animated fancybox-slide--' + ( slide.pos > self.prevPos ? 'next' : 'previous' ) + ' fancybox-fx-' + effect;
+
+            $slide.removeAttr( 'style' ).removeClass( 'fancybox-slide--current fancybox-slide--next fancybox-slide--previous' ).addClass( effectClassName );
+
+            slide.$content.removeClass( 'fancybox-is-hidden' );
+
+            //Force reflow for CSS3 transitions
+            forceRedraw( $slide );
+
+            $.fancybox.animate( $slide, 'fancybox-slide--current', duration, function(e) {
+                $slide.removeClass( effectClassName ).removeAttr( 'style' );
+
+                if ( slide.pos === self.currPos ) {
+                    self.complete();
+                }
+
+            }, true);
+
+        },
+
+
+        // Check if we can and have to zoom from thumbnail
+        //================================================
+
+        getThumbPos : function( slide ) {
+
+            var self = this;
+            var rez  = false;
+
+            // Check if element is inside the viewport by at least 1 pixel
+            var isElementVisible = function( $el ) {
+                var element = $el[0];
+
+                var elementRect = element.getBoundingClientRect();
+                var parentRects = [];
+
+                var visibleInAllParents;
+
+                while ( element.parentElement !== null ) {
+                    if ( $(element.parentElement).css('overflow') === 'hidden'  || $(element.parentElement).css('overflow') === 'auto' ) {
+                        parentRects.push(element.parentElement.getBoundingClientRect());
+                    }
+
+                    element = element.parentElement;
+                }
+
+                visibleInAllParents = parentRects.every(function(parentRect){
+                    var visiblePixelX = Math.min(elementRect.right, parentRect.right) - Math.max(elementRect.left, parentRect.left);
+                    var visiblePixelY = Math.min(elementRect.bottom, parentRect.bottom) - Math.max(elementRect.top, parentRect.top);
+
+                    return visiblePixelX > 0 && visiblePixelY > 0;
+                });
+
+                return visibleInAllParents &&
+                    elementRect.bottom > 0 && elementRect.right > 0 &&
+                    elementRect.left < $(window).width() && elementRect.top < $(window).height();
+            };
+
+            var $thumb   = slide.opts.$thumb;
+            var thumbPos = $thumb ? $thumb.offset() : 0;
+            var slidePos;
+
+            if ( thumbPos && $thumb[0].ownerDocument === document && isElementVisible( $thumb ) ) {
+                slidePos = self.$refs.stage.offset();
+
+                rez = {
+                    top    : thumbPos.top  - slidePos.top  + parseFloat( $thumb.css( "border-top-width" ) || 0 ),
+                    left   : thumbPos.left - slidePos.left + parseFloat( $thumb.css( "border-left-width" ) || 0 ),
+                    width  : $thumb.width(),
+                    height : $thumb.height(),
+                    scaleX : 1,
+                    scaleY : 1
+                };
+            }
+
+            return rez;
+        },
+
+
+        // Final adjustments after current gallery item is moved to position
+        // and it`s content is loaded
+        // ==================================================================
+
+        complete : function() {
+
+            var self = this;
+
+            var current = self.current;
+            var slides  = {};
+
+            if ( current.isMoved || !current.isLoaded || current.isComplete ) {
+                return;
+            }
+
+            current.isComplete = true;
+
+            current.$slide.siblings().trigger( 'onReset' );
+
+            // Trigger any CSS3 transiton inside the slide
+            forceRedraw( current.$slide );
+
+            current.$slide.addClass( 'fancybox-slide--complete' );
+
+            // Remove unnecessary slides
+            $.each( self.slides, function( key, slide ) {
+                if ( slide.pos >= self.currPos - 1 && slide.pos <= self.currPos + 1 ) {
+                    slides[ slide.pos ] = slide;
+
+                } else if ( slide ) {
+
+                    $.fancybox.stop( slide.$slide );
+
+                    slide.$slide.unbind().remove();
+                }
+            });
+
+            self.slides = slides;
+
+            self.updateCursor();
+
+            self.trigger( 'afterShow' );
+
+            // Try to focus on the first focusable element
+            if ( $( document.activeElement ).is( '[disabled]' ) || ( current.opts.autoFocus && !( current.type == 'image' || current.type === 'iframe' ) ) ) {
+                self.focus();
+            }
+
+        },
+
+
+        // Preload next and previous slides
+        // ================================
+
+        preload : function() {
+            var self = this;
+            var next, prev;
+
+            if ( self.group.length < 2 ) {
+                return;
+            }
+
+            next  = self.slides[ self.currPos + 1 ];
+            prev  = self.slides[ self.currPos - 1 ];
+
+            if ( next && next.type === 'image' ) {
+                self.loadSlide( next );
+            }
+
+            if ( prev && prev.type === 'image' ) {
+                self.loadSlide( prev );
+            }
+
+        },
+
+
+        // Try to find and focus on the first focusable element
+        // ====================================================
+
+        focus : function() {
+            var current = this.current;
+            var $el;
+
+            if ( this.isClosing ) {
+                return;
+            }
+
+            // Skip for images and iframes
+            $el = current && current.isComplete ? current.$slide.find('button,:input,[tabindex],a').filter(':not([disabled]):visible:first') : null;
+            $el = $el && $el.length ? $el : this.$refs.container;
+
+            $el.focus();
+        },
+
+
+        // Activates current instance - brings container to the front and enables keyboard,
+        // notifies other instances about deactivating
+        // =================================================================================
+
+        activate : function () {
+            var self = this;
+
+            // Deactivate all instances
+            $( '.fancybox-container' ).each(function () {
+                var instance = $(this).data( 'FancyBox' );
+
+                // Skip self and closing instances
+                if (instance && instance.uid !== self.uid && !instance.isClosing) {
+                    instance.trigger( 'onDeactivate' );
+                }
+
+            });
+
+            if ( self.current ) {
+                if ( self.$refs.container.index() > 0 ) {
+                    self.$refs.container.prependTo( document.body );
+                }
+
+                self.updateControls();
+            }
+
+            self.trigger( 'onActivate' );
+
+            self.addEvents();
+
+        },
+
+
+        // Start closing procedure
+        // This will start "zoom-out" animation if needed and clean everything up afterwards
+        // =================================================================================
+
+        close : function( e, d ) {
+
+            var self    = this;
+            var current = self.current;
+
+            var effect, duration;
+            var $what, opacity, start, end;
+
+            var done = function() {
+                self.cleanUp( e );
+            };
+
+            if ( self.isClosing ) {
+                return false;
+            }
+
+            self.isClosing = true;
+
+            // If beforeClose callback prevents closing, make sure content is centered
+            if ( self.trigger( 'beforeClose', e ) === false ) {
+                self.isClosing = false;
+
+                requestAFrame(function() {
+                    self.update();
+                });
+
+                return false;
+            }
+
+            // Remove all events
+            // If there are multiple instances, they will be set again by "activate" method
+            self.removeEvents();
+
+            if ( current.timouts ) {
+                clearTimeout( current.timouts );
+            }
+
+            $what    = current.$content;
+            effect   = current.opts.animationEffect;
+            duration = $.isNumeric( d ) ? d : ( effect ? current.opts.animationDuration : 0 );
+
+            // Remove other slides
+            current.$slide.off( transitionEnd ).removeClass( 'fancybox-slide--complete fancybox-slide--next fancybox-slide--previous fancybox-animated' );
+
+            current.$slide.siblings().trigger( 'onReset' ).remove();
+
+            // Trigger animations
+            if ( duration ) {
+                self.$refs.container.removeClass( 'fancybox-is-open' ).addClass( 'fancybox-is-closing' );
+            }
+
+            // Clean up
+            self.hideLoading( current );
+
+            self.hideControls();
+
+            self.updateCursor();
+
+            // Check if possible to zoom-out
+            if ( effect === 'zoom' && !( e !== true && $what && duration && current.type === 'image' && !current.hasError && ( end = self.getThumbPos( current ) ) ) ) {
+                effect = 'fade';
+            }
+
+            if ( effect === 'zoom' ) {
+                $.fancybox.stop( $what );
+
+                start = $.fancybox.getTranslate( $what );
+
+                start.width  = start.width  * start.scaleX;
+                start.height = start.height * start.scaleY;
+
+                // Check if we need to animate opacity
+                opacity = current.opts.zoomOpacity;
+
+                if ( opacity == 'auto' ) {
+                    opacity = Math.abs( current.width / current.height - end.width / end.height ) > 0.1;
+                }
+
+                if ( opacity ) {
+                    end.opacity = 0;
+                }
+
+                start.scaleX = start.width  / end.width;
+                start.scaleY = start.height / end.height;
+
+                start.width  = end.width;
+                start.height = end.height;
+
+                $.fancybox.setTranslate( current.$content, start );
+
+                $.fancybox.animate( current.$content, end, duration, done );
+
+                return true;
+            }
+
+            if ( effect && duration ) {
+
+                // If skip animation
+                if ( e === true ) {
+                    setTimeout( done, duration );
+
+                } else {
+                    $.fancybox.animate( current.$slide.removeClass( 'fancybox-slide--current' ), 'fancybox-animated fancybox-slide--previous fancybox-fx-' + effect, duration, done );
+                }
+
+            } else {
+                done();
+            }
+
+            return true;
+        },
+
+
+        // Final adjustments after removing the instance
+        // =============================================
+
+        cleanUp : function( e ) {
+            var self = this,
+                instance;
+
+            self.current.$slide.trigger( 'onReset' );
+
+            self.$refs.container.empty().remove();
+
+            self.trigger( 'afterClose', e );
+
+            // Place back focus
+            if ( self.$lastFocus && !!self.current.opts.backFocus ) {
+                self.$lastFocus.focus();
+            }
+
+            self.current = null;
+
+            // Check if there are other instances
+            instance = $.fancybox.getInstance();
+
+            if ( instance ) {
+                instance.activate();
+
+            } else {
+
+                $W.scrollTop( self.scrollTop ).scrollLeft( self.scrollLeft );
+
+                $( 'html' ).removeClass( 'fancybox-enabled' );
+
+                $( '#fancybox-style-noscroll' ).remove();
+            }
+
+        },
+
+
+        // Call callback and trigger an event
+        // ==================================
+
+        trigger : function( name, slide ) {
+            var args  = Array.prototype.slice.call(arguments, 1),
+                self  = this,
+                obj   = slide && slide.opts ? slide : self.current,
+                rez;
+
+            if ( obj ) {
+                args.unshift( obj );
+
+            } else {
+                obj = self;
+            }
+
+            args.unshift( self );
+
+            if ( $.isFunction( obj.opts[ name ] ) ) {
+                rez = obj.opts[ name ].apply( obj, args );
+            }
+
+            if ( rez === false ) {
+                return rez;
+            }
+
+            if ( name === 'afterClose' ) {
+                $D.trigger( name + '.fb', args );
+
+            } else {
+                self.$refs.container.trigger( name + '.fb', args );
+            }
+
+        },
+
+
+        // Update infobar values, navigation button states and reveal caption
+        // ==================================================================
+
+        updateControls : function ( force ) {
+
+            var self = this;
+
+            var current  = self.current;
+            var index    = current.index;
+            var opts     = current.opts;
+            var caption  = opts.caption;
+            var $caption = self.$refs.caption;
+
+            // Recalculate content dimensions
+            current.$slide.trigger( 'refresh' );
+
+            self.$caption = caption && caption.length ? $caption.html( caption ) : null;
+
+            if ( !self.isHiddenControls ) {
+                self.showControls();
+            }
+
+            // Update info and navigation elements
+            $('[data-fancybox-count]').html( self.group.length );
+            $('[data-fancybox-index]').html( index + 1 );
+
+            $('[data-fancybox-prev]').prop('disabled', ( !opts.loop && index <= 0 ) );
+            $('[data-fancybox-next]').prop('disabled', ( !opts.loop && index >= self.group.length - 1 ) );
+
+        },
+
+        // Hide toolbar and caption
+        // ========================
+
+        hideControls : function () {
+
+            this.isHiddenControls = true;
+
+            this.$refs.container.removeClass('fancybox-show-infobar fancybox-show-toolbar fancybox-show-caption fancybox-show-nav');
+
+        },
+
+        showControls : function() {
+
+            var self = this;
+            var opts = self.current ? self.current.opts : self.opts;
+            var $container = self.$refs.container;
+
+            self.isHiddenControls   = false;
+            self.idleSecondsCounter = 0;
+
+            $container
+                .toggleClass('fancybox-show-toolbar', !!( opts.toolbar && opts.buttons ) )
+                .toggleClass('fancybox-show-infobar', !!( opts.infobar && self.group.length > 1 ) )
+                .toggleClass('fancybox-show-nav',     !!( opts.arrows && self.group.length > 1 ) )
+                .toggleClass('fancybox-is-modal',     !!opts.modal );
+
+            if ( self.$caption ) {
+                $container.addClass( 'fancybox-show-caption ');
+
+            } else {
+               $container.removeClass( 'fancybox-show-caption' );
+           }
+
+       },
+
+
+       // Toggle toolbar and caption
+       // ==========================
+
+       toggleControls : function() {
+
+           if ( this.isHiddenControls ) {
+               this.showControls();
+
+           } else {
+               this.hideControls();
+           }
+
+       },
+
+
+    });
+
+
+    $.fancybox = {
+
+        version  : "{fancybox-version}",
+        defaults : defaults,
+
+
+        // Get current instance and execute a command.
+        //
+        // Examples of usage:
+        //
+        //   $instance = $.fancybox.getInstance();
+        //   $.fancybox.getInstance().jumpTo( 1 );
+        //   $.fancybox.getInstance( 'jumpTo', 1 );
+        //   $.fancybox.getInstance( function() {
+        //       console.info( this.currIndex );
+        //   });
+        // ======================================================
+
+        getInstance : function ( command ) {
+            var instance = $('.fancybox-container:not(".fancybox-is-closing"):first').data( 'FancyBox' );
+            var args     = Array.prototype.slice.call(arguments, 1);
+
+            if ( instance instanceof FancyBox ) {
+
+                if ( $.type( command ) === 'string' ) {
+                    instance[ command ].apply( instance, args );
+
+                } else if ( $.type( command ) === 'function' ) {
+                    command.apply( instance, args );
+
+                }
+
+                return instance;
+            }
+
+            return false;
+
+        },
+
+
+        // Create new instance
+        // ===================
+
+        open : function ( items, opts, index ) {
+            return new FancyBox( items, opts, index );
+        },
+
+
+        // Close current or all instances
+        // ==============================
+
+        close : function ( all ) {
+            var instance = this.getInstance();
+
+            if ( instance ) {
+                instance.close();
+
+                // Try to find and close next instance
+
+                if ( all === true ) {
+                    this.close();
+                }
+            }
+
+        },
+
+        // Close instances and unbind all events
+        // ==============================
+
+        destroy : function() {
+
+            this.close( true );
+
+            $D.off( 'click.fb-start' );
+
+        },
+
+
+        // Try to detect mobile devices
+        // ============================
+
+        isMobile : document.createTouch !== undefined && /Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.userAgent),
+
+
+        // Detect if 'translate3d' support is available
+        // ============================================
+
+        use3d : (function() {
+            var div = document.createElement('div');
+
+            return window.getComputedStyle && window.getComputedStyle( div ).getPropertyValue('transform') && !(document.documentMode && document.documentMode < 11);
+        }()),
+
+
+        // Helper function to get current visual state of an element
+        // returns array[ top, left, horizontal-scale, vertical-scale, opacity ]
+        // =====================================================================
+
+        getTranslate : function( $el ) {
+            var matrix;
+
+            if ( !$el || !$el.length ) {
+                return false;
+            }
+
+            matrix  = $el.eq( 0 ).css('transform');
+
+            if ( matrix && matrix.indexOf( 'matrix' ) !== -1 ) {
+                matrix = matrix.split('(')[1];
+                matrix = matrix.split(')')[0];
+                matrix = matrix.split(',');
+            } else {
+                matrix = [];
+            }
+
+            if ( matrix.length ) {
+
+                // If IE
+                if ( matrix.length > 10 ) {
+                    matrix = [ matrix[13], matrix[12], matrix[0], matrix[5] ];
+
+                } else {
+                    matrix = [ matrix[5], matrix[4], matrix[0], matrix[3]];
+                }
+
+                matrix = matrix.map(parseFloat);
+
+            } else {
+                matrix = [ 0, 0, 1, 1 ];
+
+                var transRegex = /\.*translate\((.*)px,(.*)px\)/i;
+                var transRez = transRegex.exec( $el.eq( 0 ).attr('style') );
+
+                if ( transRez ) {
+                    matrix[ 0 ] = parseFloat( transRez[2] );
+                    matrix[ 1 ] = parseFloat( transRez[1] );
+                }
+            }
+
+            return {
+                top     : matrix[ 0 ],
+                left    : matrix[ 1 ],
+                scaleX  : matrix[ 2 ],
+                scaleY  : matrix[ 3 ],
+                opacity : parseFloat( $el.css('opacity') ),
+                width   : $el.width(),
+                height  : $el.height()
+            };
+
+        },
+
+
+        // Shortcut for setting "translate3d" properties for element
+        // Can set be used to set opacity, too
+        // ========================================================
+
+        setTranslate : function( $el, props ) {
+            var str  = '';
+            var css  = {};
+
+            if ( !$el || !props ) {
+                return;
+            }
+
+            if ( props.left !== undefined || props.top !== undefined ) {
+                str = ( props.left === undefined ? $el.position().left : props.left )  + 'px, ' + ( props.top === undefined ? $el.position().top : props.top ) + 'px';
+
+                if ( this.use3d ) {
+                    str = 'translate3d(' + str + ', 0px)';
+
+                } else {
+                    str = 'translate(' + str + ')';
+                }
+            }
+
+            if ( props.scaleX !== undefined && props.scaleY !== undefined ) {
+                str = (str.length ? str + ' ' : '') + 'scale(' + props.scaleX + ', ' + props.scaleY + ')';
+            }
+
+            if ( str.length ) {
+                css.transform = str;
+            }
+
+            if ( props.opacity !== undefined ) {
+                css.opacity = props.opacity;
+            }
+
+            if ( props.width !== undefined ) {
+                css.width = props.width;
+            }
+
+            if ( props.height !== undefined ) {
+                css.height = props.height;
+            }
+
+            return $el.css( css );
+        },
+
+
+        // Simple CSS transition handler
+        // =============================
+
+        animate : function ( $el, to, duration, callback, leaveAnimationName ) {
+            var event = transitionEnd || 'transitionend';
+
+            if ( $.isFunction( duration ) ) {
+                callback = duration;
+                duration = null;
+            }
+
+            if ( !$.isPlainObject( to ) ) {
+                $el.removeAttr('style');
+            }
+
+            $el.on( event, function(e) {
+
+                // Skip events from child elements and z-index change
+                if ( e && e.originalEvent && ( !$el.is( e.originalEvent.target ) || e.originalEvent.propertyName == 'z-index' ) ) {
+                    return;
+                }
+
+                $el.off( event );
+
+                if ( $.isPlainObject( to ) ) {
+
+                    if ( to.scaleX !== undefined && to.scaleY !== undefined ) {
+                        $el.css( 'transition-duration', '0ms' );
+
+                        to.width  = Math.round( $el.width()  * to.scaleX );
+                        to.height = Math.round( $el.height() * to.scaleY );
+
+                        to.scaleX = 1;
+                        to.scaleY = 1;
+
+                        $.fancybox.setTranslate( $el, to );
+                    }
+
+                } else if ( leaveAnimationName !== true ) {
+                    $el.removeClass( to );
+                }
+
+                if ( $.isFunction( callback ) ) {
+                    callback( e );
+                }
+
+            });
+
+            if ( $.isNumeric( duration ) ) {
+                $el.css( 'transition-duration', duration + 'ms' );
+            }
+
+            if ( $.isPlainObject( to ) ) {
+                $.fancybox.setTranslate( $el, to );
+
+            } else {
+                $el.addClass( to );
+            }
+
+            $el.data("timer", setTimeout(function() {
+                $el.trigger( 'transitionend' );
+            }, duration + 16));
+
+        },
+
+        stop : function( $el ) {
+            clearTimeout( $el.data("timer") );
+
+            $el.off( transitionEnd );
+        }
+
+    };
+
+
+    // Default click handler for "fancyboxed" links
+    // ============================================
+
+    function _run( e ) {
+        var target     = e.currentTarget,
+            opts       = e.data ? e.data.options : {},
+            items      = opts.selector ? $( opts.selector ) : ( e.data ? e.data.items : [] ),
+            value      = $(target).attr( 'data-fancybox' ) || '',
+            index      = 0,
+            active  = $.fancybox.getInstance();
+
+        e.preventDefault();
+        e.stopPropagation();
+
+        // Avoid opening multiple times
+        if ( active && active.current.opts.$orig.is( target ) ) {
+            return;
+        }
+
+        // Get all related items and find index for clicked one
+        if ( value ) {
+            items = items.length ? items.filter( '[data-fancybox="' + value + '"]' ) : $( '[data-fancybox="' + value + '"]' );
+            index = items.index( target );
+
+            // Sometimes current item can not be found
+            // (for example, when slider clones items)
+            if ( index < 0 ) {
+                index = 0;
+            }
+
+        } else {
+            items = [ target ];
+        }
+
+        $.fancybox.open( items, opts, index );
+    }
+
+
+    // Create a jQuery plugin
+    // ======================
+
+    $.fn.fancybox = function (options) {
+        var selector;
+
+        options  = options || {};
+        selector = options.selector || false;
+
+        if ( selector ) {
+
+            $( 'body' ).off( 'click.fb-start', selector ).on( 'click.fb-start', selector, {
+                options : options
+            }, _run );
+
+        } else {
+
+            this.off( 'click.fb-start' ).on( 'click.fb-start', {
+                items   : this,
+                options : options
+            }, _run);
+
+        }
+
+        return this;
+    };
+
+
+    // Self initializing plugin
+    // ========================
+
+    $D.on( 'click.fb-start', '[data-fancybox]', _run );
+
+}( window, document, window.jQuery ));
diff --git a/fancybox/src/js/fullscreen.js b/fancybox/src/js/fullscreen.js
new file mode 100644 (file)
index 0000000..360595c
--- /dev/null
@@ -0,0 +1,186 @@
+// ==========================================================================
+//
+// FullScreen
+// Adds fullscreen functionality
+//
+// ==========================================================================
+;(function (document, $) {
+       'use strict';
+
+       // Collection of methods supported by user browser
+       var fn = (function () {
+
+               var fnMap = [
+                       [
+                               'requestFullscreen',
+                               'exitFullscreen',
+                               'fullscreenElement',
+                               'fullscreenEnabled',
+                               'fullscreenchange',
+                               'fullscreenerror'
+                       ],
+                       // new WebKit
+                       [
+                               'webkitRequestFullscreen',
+                               'webkitExitFullscreen',
+                               'webkitFullscreenElement',
+                               'webkitFullscreenEnabled',
+                               'webkitfullscreenchange',
+                               'webkitfullscreenerror'
+
+                       ],
+                       // old WebKit (Safari 5.1)
+                       [
+                               'webkitRequestFullScreen',
+                               'webkitCancelFullScreen',
+                               'webkitCurrentFullScreenElement',
+                               'webkitCancelFullScreen',
+                               'webkitfullscreenchange',
+                               'webkitfullscreenerror'
+
+                       ],
+                       [
+                               'mozRequestFullScreen',
+                               'mozCancelFullScreen',
+                               'mozFullScreenElement',
+                               'mozFullScreenEnabled',
+                               'mozfullscreenchange',
+                               'mozfullscreenerror'
+                       ],
+                       [
+                               'msRequestFullscreen',
+                               'msExitFullscreen',
+                               'msFullscreenElement',
+                               'msFullscreenEnabled',
+                               'MSFullscreenChange',
+                               'MSFullscreenError'
+                       ]
+               ];
+
+               var val;
+               var ret = {};
+               var i, j;
+
+               for ( i = 0; i < fnMap.length; i++ ) {
+                       val = fnMap[ i ];
+
+                       if ( val && val[ 1 ] in document ) {
+                               for ( j = 0; j < val.length; j++ ) {
+                                       ret[ fnMap[ 0 ][ j ] ] = val[ j ];
+                               }
+
+                               return ret;
+                       }
+               }
+
+               return false;
+       })();
+
+       // If browser does not have Full Screen API, then simply unset default button template and stop
+       if ( !fn ) {
+               $.fancybox.defaults.btnTpl.fullScreen = false;
+
+               return;
+       }
+
+       var FullScreen = {
+               request : function ( elem ) {
+
+                       elem = elem || document.documentElement;
+
+                       elem[ fn.requestFullscreen ]( elem.ALLOW_KEYBOARD_INPUT );
+
+               },
+               exit : function () {
+
+                       document[ fn.exitFullscreen ]();
+
+               },
+               toggle : function ( elem ) {
+
+                       elem = elem || document.documentElement;
+
+                       if ( this.isFullscreen() ) {
+                               this.exit();
+
+                       } else {
+                               this.request( elem );
+                       }
+
+               },
+               isFullscreen : function()  {
+
+                       return Boolean( document[ fn.fullscreenElement ] );
+
+               },
+               enabled : function()  {
+
+                       return Boolean( document[ fn.fullscreenEnabled ] );
+
+               }
+       };
+
+       $(document).on({
+               'onInit.fb' : function(e, instance) {
+                       var $container;
+
+                       var $button = instance.$refs.toolbar.find('[data-fancybox-fullscreen]');
+
+                       if ( instance && !instance.FullScreen && instance.group[ instance.currIndex ].opts.fullScreen ) {
+                               $container = instance.$refs.container;
+
+                               $container.on('click.fb-fullscreen', '[data-fancybox-fullscreen]', function(e) {
+
+                                       e.stopPropagation();
+                                       e.preventDefault();
+
+                                       FullScreen.toggle( $container[ 0 ] );
+
+                               });
+
+                               if ( instance.opts.fullScreen && instance.opts.fullScreen.autoStart === true ) {
+                                       FullScreen.request( $container[ 0 ] );
+                               }
+
+                               // Expose API
+                               instance.FullScreen = FullScreen;
+
+                       } else {
+                               $button.hide();
+                       }
+
+               },
+
+               'afterKeydown.fb' : function(e, instance, current, keypress, keycode) {
+
+                       // "P" or Spacebar
+                       if ( instance && instance.FullScreen && keycode === 70 ) {
+                               keypress.preventDefault();
+
+                               instance.FullScreen.toggle( instance.$refs.container[ 0 ] );
+                       }
+
+               },
+
+               'beforeClose.fb' : function( instance ) {
+                       if ( instance && instance.FullScreen ) {
+                               FullScreen.exit();
+                       }
+               }
+       });
+
+       $(document).on(fn.fullscreenchange, function() {
+               var instance = $.fancybox.getInstance();
+
+               // If image is zooming, then force to stop and reposition properly
+               if ( instance.current && instance.current.type === 'image' && instance.isAnimating ) {
+                       instance.current.$content.css( 'transition', 'none' );
+
+                       instance.isAnimating = false;
+
+                       instance.update( true, true, 0 );
+               }
+
+       });
+
+}(document, window.jQuery));
diff --git a/fancybox/src/js/guestures.js b/fancybox/src/js/guestures.js
new file mode 100644 (file)
index 0000000..d31ca16
--- /dev/null
@@ -0,0 +1,920 @@
+// ==========================================================================
+//
+// Guestures
+// Adds touch guestures, handles click and tap events
+//
+// ==========================================================================
+;(function (window, document, $) {
+       'use strict';
+
+       var requestAFrame = (function () {
+        return window.requestAnimationFrame ||
+                window.webkitRequestAnimationFrame ||
+                window.mozRequestAnimationFrame ||
+                window.oRequestAnimationFrame ||
+                // if all else fails, use setTimeout
+                function (callback) {
+                    return window.setTimeout(callback, 1000 / 60);
+                };
+    })();
+
+
+    var cancelAFrame = (function () {
+        return window.cancelAnimationFrame ||
+                window.webkitCancelAnimationFrame ||
+                window.mozCancelAnimationFrame ||
+                window.oCancelAnimationFrame ||
+                function (id) {
+                    window.clearTimeout(id);
+                };
+    })();
+
+
+       var pointers = function( e ) {
+               var result = [];
+
+               e = e.originalEvent || e || window.e;
+               e = e.touches && e.touches.length ? e.touches : ( e.changedTouches && e.changedTouches.length ? e.changedTouches : [ e ] );
+
+               for ( var key in e ) {
+
+                       if ( e[ key ].pageX ) {
+                               result.push( { x : e[ key ].pageX, y : e[ key ].pageY } );
+
+                       } else if ( e[ key ].clientX ) {
+                               result.push( { x : e[ key ].clientX, y : e[ key ].clientY } );
+                       }
+               }
+
+               return result;
+       };
+
+       var distance = function( point2, point1, what ) {
+               if ( !point1 || !point2 ) {
+                       return 0;
+               }
+
+               if ( what === 'x' ) {
+                       return point2.x - point1.x;
+
+               } else if ( what === 'y' ) {
+                       return point2.y - point1.y;
+               }
+
+               return Math.sqrt( Math.pow( point2.x - point1.x, 2 ) + Math.pow( point2.y - point1.y, 2 ) );
+       };
+
+       var isClickable = function( $el ) {
+               if ( $el.is('a,button,input,select,textarea') || $.isFunction( $el.get(0).onclick ) ) {
+                       return true;
+               }
+
+               // Check for attributes like data-fancybox-next or data-fancybox-close
+               for ( var i = 0, atts = $el[0].attributes, n = atts.length; i < n; i++ ) {
+            if ( atts[i].nodeName.substr(0, 14) === 'data-fancybox-' ) {
+                return true;
+            }
+        }
+
+               return false;
+       };
+
+       var hasScrollbars = function( el ) {
+               var overflowY = window.getComputedStyle( el )['overflow-y'];
+               var overflowX = window.getComputedStyle( el )['overflow-x'];
+
+               var vertical   = (overflowY === 'scroll' || overflowY === 'auto') && el.scrollHeight > el.clientHeight;
+               var horizontal = (overflowX === 'scroll' || overflowX === 'auto') && el.scrollWidth > el.clientWidth;
+
+               return vertical || horizontal;
+       };
+
+       var isScrollable = function ( $el ) {
+               var rez = false;
+
+               while ( true ) {
+                       rez     = hasScrollbars( $el.get(0) );
+
+                       if ( rez ) {
+                               break;
+                       }
+
+                       $el = $el.parent();
+
+                       if ( !$el.length || $el.hasClass( 'fancybox-stage' ) || $el.is( 'body' ) ) {
+                               break;
+                       }
+               }
+
+               return rez;
+       };
+
+
+       var Guestures = function ( instance ) {
+               var self = this;
+
+               self.instance = instance;
+
+               self.$bg        = instance.$refs.bg;
+               self.$stage     = instance.$refs.stage;
+               self.$container = instance.$refs.container;
+
+               self.destroy();
+
+               self.$container.on( 'touchstart.fb.touch mousedown.fb.touch', $.proxy(self, 'ontouchstart') );
+       };
+
+       Guestures.prototype.destroy = function() {
+               this.$container.off( '.fb.touch' );
+       };
+
+       Guestures.prototype.ontouchstart = function( e ) {
+               var self = this;
+
+               var $target  = $( e.target );
+               var instance = self.instance;
+               var current  = instance.current;
+               var $content = current.$content;
+
+               var isTouchDevice = ( e.type == 'touchstart' );
+
+               // Do not respond to both events
+               if ( isTouchDevice ) {
+               self.$container.off( 'mousedown.fb.touch' );
+           }
+
+               // Ignore clicks while zooming or closing
+               if ( !current || self.instance.isAnimating || self.instance.isClosing ) {
+                       e.stopPropagation();
+                       e.preventDefault();
+
+                       return;
+               }
+
+               // Ignore right click
+               if ( e.originalEvent && e.originalEvent.button == 2 ) {
+                       return;
+               }
+
+               // Ignore taping on links, buttons, input elements
+               if ( !$target.length || isClickable( $target ) || isClickable( $target.parent() ) ) {
+                       return;
+               }
+
+               // Ignore clicks on the scrollbar
+               if ( e.originalEvent.clientX > $target[0].clientWidth + $target.offset().left ) {
+                       return;
+               }
+
+               self.startPoints = pointers( e );
+
+               // Prevent zooming if already swiping
+               if ( !self.startPoints || ( self.startPoints.length > 1 && instance.isSliding ) ) {
+                       return;
+               }
+
+               self.$target  = $target;
+               self.$content = $content;
+               self.canTap   = true;
+
+               $(document).off( '.fb.touch' );
+
+               $(document).on( isTouchDevice ? 'touchend.fb.touch touchcancel.fb.touch' : 'mouseup.fb.touch mouseleave.fb.touch',  $.proxy(self, "ontouchend"));
+               $(document).on( isTouchDevice ? 'touchmove.fb.touch' : 'mousemove.fb.touch',  $.proxy(self, "ontouchmove"));
+
+               e.stopPropagation();
+
+               if ( !(instance.current.opts.touch || instance.canPan() ) || !( $target.is( self.$stage ) || self.$stage.find( $target ).length ) ) {
+
+                       // Prevent ghosting
+                       if ( $target.is('img') ) {
+                               e.preventDefault();
+                       }
+
+                       return;
+               }
+
+               if ( !( $.fancybox.isMobile && ( isScrollable( self.$target ) || isScrollable( self.$target.parent() ) ) ) ) {
+                       e.preventDefault();
+               }
+
+               self.canvasWidth  = Math.round( current.$slide[0].clientWidth );
+               self.canvasHeight = Math.round( current.$slide[0].clientHeight );
+
+               self.startTime = new Date().getTime();
+               self.distanceX = self.distanceY = self.distance = 0;
+
+               self.isPanning = false;
+               self.isSwiping = false;
+               self.isZooming = false;
+
+               self.sliderStartPos  = self.sliderLastPos || { top: 0, left: 0 };
+               self.contentStartPos = $.fancybox.getTranslate( self.$content );
+               self.contentLastPos  = null;
+
+               if ( self.startPoints.length === 1 && !self.isZooming ) {
+                       self.canTap = !instance.isSliding;
+
+                       if ( current.type === 'image' && ( self.contentStartPos.width > self.canvasWidth + 1 || self.contentStartPos.height > self.canvasHeight + 1 ) ) {
+
+                               $.fancybox.stop( self.$content );
+
+                               self.$content.css( 'transition-duration', '0ms' );
+
+                               self.isPanning = true;
+
+                       } else {
+
+                               self.isSwiping = true;
+                       }
+
+                       self.$container.addClass('fancybox-controls--isGrabbing');
+               }
+
+               if ( self.startPoints.length === 2 && !instance.isAnimating && !current.hasError && current.type === 'image' && ( current.isLoaded || current.$ghost ) ) {
+                       self.isZooming = true;
+
+                       self.isSwiping = false;
+                       self.isPanning = false;
+
+                       $.fancybox.stop( self.$content );
+
+                       self.$content.css( 'transition-duration', '0ms' );
+
+                       self.centerPointStartX = ( ( self.startPoints[0].x + self.startPoints[1].x ) * 0.5 ) - $(window).scrollLeft();
+                       self.centerPointStartY = ( ( self.startPoints[0].y + self.startPoints[1].y ) * 0.5 ) - $(window).scrollTop();
+
+                       self.percentageOfImageAtPinchPointX = ( self.centerPointStartX - self.contentStartPos.left ) / self.contentStartPos.width;
+                       self.percentageOfImageAtPinchPointY = ( self.centerPointStartY - self.contentStartPos.top  ) / self.contentStartPos.height;
+
+                       self.startDistanceBetweenFingers = distance( self.startPoints[0], self.startPoints[1] );
+               }
+
+       };
+
+       Guestures.prototype.ontouchmove = function( e ) {
+
+               var self = this;
+
+               self.newPoints = pointers( e );
+
+               if ( $.fancybox.isMobile && ( isScrollable( self.$target ) || isScrollable( self.$target.parent() ) ) ) {
+                       e.stopPropagation();
+
+                       self.canTap = false;
+
+                       return;
+               }
+
+               if ( !( self.instance.current.opts.touch || self.instance.canPan() ) || !self.newPoints || !self.newPoints.length ) {
+                       return;
+               }
+
+               self.distanceX = distance( self.newPoints[0], self.startPoints[0], 'x' );
+               self.distanceY = distance( self.newPoints[0], self.startPoints[0], 'y' );
+
+               self.distance = distance( self.newPoints[0], self.startPoints[0] );
+
+               // Skip false ontouchmove events (Chrome)
+               if ( self.distance > 0 ) {
+
+                       if ( !( self.$target.is( self.$stage ) || self.$stage.find( self.$target ).length ) ) {
+                               return;
+                       }
+
+                       e.stopPropagation();
+                       e.preventDefault();
+
+                       if ( self.isSwiping ) {
+                               self.onSwipe();
+
+                       } else if ( self.isPanning ) {
+                               self.onPan();
+
+                       } else if ( self.isZooming ) {
+                               self.onZoom();
+                       }
+
+               }
+
+       };
+
+       Guestures.prototype.onSwipe = function() {
+
+               var self = this;
+
+               var swiping = self.isSwiping;
+               var left    = self.sliderStartPos.left || 0;
+               var angle;
+
+               if ( swiping === true ) {
+
+                       if ( Math.abs( self.distance ) > 10 )  {
+
+                               self.canTap = false;
+
+                               if ( self.instance.group.length < 2 && self.instance.opts.touch.vertical ) {
+                                       self.isSwiping  = 'y';
+
+                               } else if ( self.instance.isSliding || self.instance.opts.touch.vertical === false || ( self.instance.opts.touch.vertical === 'auto' && $( window ).width() > 800 ) ) {
+                                       self.isSwiping  = 'x';
+
+                               } else {
+                                       angle = Math.abs( Math.atan2( self.distanceY, self.distanceX ) * 180 / Math.PI );
+
+                                       self.isSwiping = ( angle > 45 && angle < 135 ) ? 'y' : 'x';
+                               }
+
+                               self.instance.isSliding = self.isSwiping;
+
+                               // Reset points to avoid jumping, because we dropped first swipes to calculate the angle
+                               self.startPoints = self.newPoints;
+
+                               $.each(self.instance.slides, function( index, slide ) {
+                                       $.fancybox.stop( slide.$slide );
+
+                                       slide.$slide.css( 'transition-duration', '0ms' );
+
+                                       slide.inTransition = false;
+
+                                       if ( slide.pos === self.instance.current.pos ) {
+                                               self.sliderStartPos.left = $.fancybox.getTranslate( slide.$slide ).left;
+                                       }
+                               });
+
+                               //self.instance.current.isMoved = true;
+
+                               // Stop slideshow
+                               if ( self.instance.SlideShow && self.instance.SlideShow.isActive ) {
+                                       self.instance.SlideShow.stop();
+                               }
+                       }
+
+               } else {
+
+                       if ( swiping == 'x' ) {
+
+                               // Sticky edges
+                               if ( self.distanceX > 0 && ( self.instance.group.length < 2 || ( self.instance.current.index === 0 && !self.instance.current.opts.loop ) ) ) {
+                                       left = left + Math.pow( self.distanceX, 0.8 );
+
+                               } else if ( self.distanceX < 0 && ( self.instance.group.length < 2 || ( self.instance.current.index === self.instance.group.length - 1 && !self.instance.current.opts.loop ) ) ) {
+                                       left = left - Math.pow( -self.distanceX, 0.8 );
+
+                               } else {
+                                       left = left + self.distanceX;
+                               }
+
+                       }
+
+                       self.sliderLastPos = {
+                               top  : swiping == 'x' ? 0 : self.sliderStartPos.top + self.distanceY,
+                               left : left
+                       };
+
+                       if ( self.requestId ) {
+                               cancelAFrame( self.requestId );
+
+                               self.requestId = null;
+                       }
+
+                       self.requestId = requestAFrame(function() {
+
+                               if ( self.sliderLastPos ) {
+                                       $.each(self.instance.slides, function( index, slide ) {
+                                               var pos = slide.pos - self.instance.currPos;
+
+                                               $.fancybox.setTranslate( slide.$slide, {
+                                                       top  : self.sliderLastPos.top,
+                                                       left : self.sliderLastPos.left + ( pos * self.canvasWidth ) + ( pos * slide.opts.gutter )
+                                               });
+                                       });
+
+                                       self.$container.addClass( 'fancybox-is-sliding' );
+                               }
+
+                       });
+
+               }
+
+       };
+
+       Guestures.prototype.onPan = function() {
+
+               var self = this;
+
+               var newOffsetX, newOffsetY, newPos;
+
+               self.canTap = false;
+
+               if ( self.contentStartPos.width > self.canvasWidth ) {
+                       newOffsetX = self.contentStartPos.left + self.distanceX;
+
+               } else {
+                       newOffsetX = self.contentStartPos.left;
+               }
+
+               newOffsetY = self.contentStartPos.top + self.distanceY;
+
+               newPos = self.limitMovement( newOffsetX, newOffsetY, self.contentStartPos.width, self.contentStartPos.height );
+
+               newPos.scaleX = self.contentStartPos.scaleX;
+               newPos.scaleY = self.contentStartPos.scaleY;
+
+               self.contentLastPos = newPos;
+
+               if ( self.requestId ) {
+                       cancelAFrame( self.requestId );
+
+                       self.requestId = null;
+               }
+
+               self.requestId = requestAFrame(function() {
+                       $.fancybox.setTranslate( self.$content, self.contentLastPos );
+               });
+       };
+
+       // Make panning sticky to the edges
+       Guestures.prototype.limitMovement = function( newOffsetX, newOffsetY, newWidth, newHeight ) {
+
+               var self = this;
+
+               var minTranslateX, minTranslateY, maxTranslateX, maxTranslateY;
+
+               var canvasWidth  = self.canvasWidth;
+               var canvasHeight = self.canvasHeight;
+
+               var currentOffsetX = self.contentStartPos.left;
+               var currentOffsetY = self.contentStartPos.top;
+
+               var distanceX = self.distanceX;
+               var distanceY = self.distanceY;
+
+               // Slow down proportionally to traveled distance
+
+               minTranslateX = Math.max(0, canvasWidth  * 0.5 - newWidth  * 0.5 );
+               minTranslateY = Math.max(0, canvasHeight * 0.5 - newHeight * 0.5 );
+
+               maxTranslateX = Math.min( canvasWidth  - newWidth,  canvasWidth  * 0.5 - newWidth  * 0.5 );
+               maxTranslateY = Math.min( canvasHeight - newHeight, canvasHeight * 0.5 - newHeight * 0.5 );
+
+               if ( newWidth > canvasWidth ) {
+
+                       //   ->
+                       if ( distanceX > 0 && newOffsetX > minTranslateX ) {
+                               newOffsetX = minTranslateX - 1 + Math.pow( -minTranslateX + currentOffsetX + distanceX, 0.8 ) || 0;
+                       }
+
+                       //    <-
+                       if ( distanceX  < 0 && newOffsetX < maxTranslateX ) {
+                               newOffsetX = maxTranslateX + 1 - Math.pow( maxTranslateX - currentOffsetX - distanceX, 0.8 ) || 0;
+                       }
+
+               }
+
+               if ( newHeight > canvasHeight ) {
+
+                       //   \/
+                       if ( distanceY > 0 && newOffsetY > minTranslateY ) {
+                               newOffsetY = minTranslateY - 1 + Math.pow(-minTranslateY + currentOffsetY + distanceY, 0.8 ) || 0;
+                       }
+
+                       //   /\
+                       if ( distanceY < 0 && newOffsetY < maxTranslateY ) {
+                               newOffsetY = maxTranslateY + 1 - Math.pow ( maxTranslateY - currentOffsetY - distanceY, 0.8 ) || 0;
+                       }
+
+               }
+
+               return {
+                       top  : newOffsetY,
+                       left : newOffsetX
+               };
+
+       };
+
+
+       Guestures.prototype.limitPosition = function( newOffsetX, newOffsetY, newWidth, newHeight ) {
+
+               var self = this;
+
+               var canvasWidth  = self.canvasWidth;
+               var canvasHeight = self.canvasHeight;
+
+               if ( newWidth > canvasWidth ) {
+                       newOffsetX = newOffsetX > 0 ? 0 : newOffsetX;
+                       newOffsetX = newOffsetX < canvasWidth - newWidth ? canvasWidth - newWidth : newOffsetX;
+
+               } else {
+
+                       // Center horizontally
+                       newOffsetX = Math.max( 0, canvasWidth / 2 - newWidth / 2 );
+
+               }
+
+               if ( newHeight > canvasHeight ) {
+                       newOffsetY = newOffsetY > 0 ? 0 : newOffsetY;
+                       newOffsetY = newOffsetY < canvasHeight - newHeight ? canvasHeight - newHeight : newOffsetY;
+
+               } else {
+
+                       // Center vertically
+                       newOffsetY = Math.max( 0, canvasHeight / 2 - newHeight / 2 );
+
+               }
+
+               return {
+                       top  : newOffsetY,
+                       left : newOffsetX
+               };
+
+       };
+
+       Guestures.prototype.onZoom = function() {
+
+               var self = this;
+
+               // Calculate current distance between points to get pinch ratio and new width and height
+
+               var currentWidth  = self.contentStartPos.width;
+               var currentHeight = self.contentStartPos.height;
+
+               var currentOffsetX = self.contentStartPos.left;
+               var currentOffsetY = self.contentStartPos.top;
+
+               var endDistanceBetweenFingers = distance( self.newPoints[0], self.newPoints[1] );
+
+               var pinchRatio = endDistanceBetweenFingers / self.startDistanceBetweenFingers;
+
+               var newWidth  = Math.floor( currentWidth  * pinchRatio );
+               var newHeight = Math.floor( currentHeight * pinchRatio );
+
+               // This is the translation due to pinch-zooming
+               var translateFromZoomingX = (currentWidth  - newWidth)  * self.percentageOfImageAtPinchPointX;
+               var translateFromZoomingY = (currentHeight - newHeight) * self.percentageOfImageAtPinchPointY;
+
+               //Point between the two touches
+
+               var centerPointEndX = ((self.newPoints[0].x + self.newPoints[1].x) / 2) - $(window).scrollLeft();
+               var centerPointEndY = ((self.newPoints[0].y + self.newPoints[1].y) / 2) - $(window).scrollTop();
+
+               // And this is the translation due to translation of the centerpoint
+               // between the two fingers
+
+               var translateFromTranslatingX = centerPointEndX - self.centerPointStartX;
+               var translateFromTranslatingY = centerPointEndY - self.centerPointStartY;
+
+               // The new offset is the old/current one plus the total translation
+
+               var newOffsetX = currentOffsetX + ( translateFromZoomingX + translateFromTranslatingX );
+               var newOffsetY = currentOffsetY + ( translateFromZoomingY + translateFromTranslatingY );
+
+               var newPos = {
+                       top    : newOffsetY,
+                       left   : newOffsetX,
+                       scaleX : self.contentStartPos.scaleX * pinchRatio,
+                       scaleY : self.contentStartPos.scaleY * pinchRatio
+               };
+
+               self.canTap = false;
+
+               self.newWidth  = newWidth;
+               self.newHeight = newHeight;
+
+               self.contentLastPos = newPos;
+
+               if ( self.requestId ) {
+                       cancelAFrame( self.requestId );
+
+                       self.requestId = null;
+               }
+
+               self.requestId = requestAFrame(function() {
+                       $.fancybox.setTranslate( self.$content, self.contentLastPos );
+               });
+
+       };
+
+       Guestures.prototype.ontouchend = function( e ) {
+
+               var self = this;
+               var dMs  = Math.max( (new Date().getTime() ) - self.startTime, 1);
+
+               var swiping = self.isSwiping;
+               var panning = self.isPanning;
+               var zooming = self.isZooming;
+
+               self.endPoints = pointers( e );
+
+               self.$container.removeClass( 'fancybox-controls--isGrabbing' );
+
+               $(document).off( '.fb.touch' );
+
+               if ( self.requestId ) {
+                       cancelAFrame( self.requestId );
+
+                       self.requestId = null;
+               }
+
+               self.isSwiping = false;
+               self.isPanning = false;
+               self.isZooming = false;
+
+               if ( self.canTap )  {
+                       return self.onTap( e );
+               }
+
+               self.speed = 366;
+
+               // Speed in px/ms
+               self.velocityX = self.distanceX / dMs * 0.5;
+               self.velocityY = self.distanceY / dMs * 0.5;
+
+               self.speedX = Math.max( self.speed * 0.5, Math.min( self.speed * 1.5, ( 1 / Math.abs( self.velocityX ) ) * self.speed ) );
+
+               if ( panning ) {
+                       self.endPanning();
+
+               } else if ( zooming ) {
+                       self.endZooming();
+
+               } else {
+                       self.endSwiping( swiping );
+               }
+
+               return;
+       };
+
+       Guestures.prototype.endSwiping = function( swiping ) {
+
+               var self = this;
+               var ret = false;
+
+               self.instance.isSliding = false;
+               self.sliderLastPos      = null;
+
+               // Close if swiped vertically / navigate if horizontally
+               if ( swiping == 'y' && Math.abs( self.distanceY ) > 50 ) {
+
+                       // Continue vertical movement
+                       $.fancybox.animate( self.instance.current.$slide, {
+                               top     : self.sliderStartPos.top + self.distanceY + ( self.velocityY * 150 ),
+                               opacity : 0
+                       }, 150 );
+
+                       ret = self.instance.close( true, 300 );
+
+               } else if ( swiping == 'x' && self.distanceX > 50 && self.instance.group.length > 1 ) {
+                       ret = self.instance.previous( self.speedX );
+
+               } else if ( swiping == 'x' && self.distanceX < -50  && self.instance.group.length > 1 ) {
+                       ret = self.instance.next( self.speedX );
+               }
+
+               if ( ret === false && ( swiping == 'x' || swiping == 'y' ) ) {
+                       self.instance.jumpTo( self.instance.current.index, 150 );
+               }
+
+               self.$container.removeClass( 'fancybox-is-sliding' );
+
+       };
+
+       // Limit panning from edges
+       // ========================
+
+       Guestures.prototype.endPanning = function() {
+
+               var self = this;
+               var newOffsetX, newOffsetY, newPos;
+
+               if ( !self.contentLastPos ) {
+                       return;
+               }
+
+               if ( self.instance.current.opts.touch.momentum === false ) {
+                       newOffsetX = self.contentLastPos.left;
+                       newOffsetY = self.contentLastPos.top;
+
+               } else {
+
+                       // Continue movement
+                       newOffsetX = self.contentLastPos.left + ( self.velocityX * self.speed );
+                       newOffsetY = self.contentLastPos.top  + ( self.velocityY * self.speed );
+               }
+
+               newPos = self.limitPosition( newOffsetX, newOffsetY, self.contentStartPos.width, self.contentStartPos.height );
+
+                newPos.width  = self.contentStartPos.width;
+                newPos.height = self.contentStartPos.height;
+
+               $.fancybox.animate( self.$content, newPos, 330 );
+       };
+
+
+       Guestures.prototype.endZooming = function() {
+
+               var self = this;
+
+               var current = self.instance.current;
+
+               var newOffsetX, newOffsetY, newPos, reset;
+
+               var newWidth  = self.newWidth;
+               var newHeight = self.newHeight;
+
+               if ( !self.contentLastPos ) {
+                       return;
+               }
+
+               newOffsetX = self.contentLastPos.left;
+               newOffsetY = self.contentLastPos.top;
+
+               reset = {
+                       top    : newOffsetY,
+                       left   : newOffsetX,
+                       width  : newWidth,
+                       height : newHeight,
+                       scaleX : 1,
+                       scaleY : 1
+          };
+
+          // Reset scalex/scaleY values; this helps for perfomance and does not break animation
+          $.fancybox.setTranslate( self.$content, reset );
+
+               if ( newWidth < self.canvasWidth && newHeight < self.canvasHeight ) {
+                       self.instance.scaleToFit( 150 );
+
+               } else if ( newWidth > current.width || newHeight > current.height ) {
+                       self.instance.scaleToActual( self.centerPointStartX, self.centerPointStartY, 150 );
+
+               } else {
+
+                       newPos = self.limitPosition( newOffsetX, newOffsetY, newWidth, newHeight );
+
+                       // Switch from scale() to width/height or animation will not work correctly
+                       $.fancybox.setTranslate( self.content, $.fancybox.getTranslate( self.$content ) );
+
+                       $.fancybox.animate( self.$content, newPos, 150 );
+               }
+
+       };
+
+       Guestures.prototype.onTap = function(e) {
+               var self    = this;
+               var $target = $( e.target );
+
+               var instance = self.instance;
+               var current  = instance.current;
+
+               var endPoints = ( e && pointers( e ) ) || self.startPoints;
+
+               var tapX = endPoints[0] ? endPoints[0].x - self.$stage.offset().left : 0;
+               var tapY = endPoints[0] ? endPoints[0].y - self.$stage.offset().top  : 0;
+
+               var where;
+
+               var process = function ( prefix ) {
+
+                       var action = current.opts[ prefix ];
+
+                       if ( $.isFunction( action ) ) {
+                               action = action.apply( instance, [ current, e ] );
+                       }
+
+                       if ( !action) {
+                               return;
+                       }
+
+                       switch ( action ) {
+
+                               case "close" :
+
+                                       instance.close( self.startEvent );
+
+                               break;
+
+                               case "toggleControls" :
+
+                                       instance.toggleControls( true );
+
+                               break;
+
+                               case "next" :
+
+                                       instance.next();
+
+                               break;
+
+                               case "nextOrClose" :
+
+                                       if ( instance.group.length > 1 ) {
+                                               instance.next();
+
+                                       } else {
+                                               instance.close( self.startEvent );
+                                       }
+
+                               break;
+
+                               case "zoom" :
+
+                                       if ( current.type == 'image' && ( current.isLoaded || current.$ghost ) ) {
+
+                                               if ( instance.canPan() ) {
+                                                       instance.scaleToFit();
+
+                                               } else if ( instance.isScaledDown() ) {
+                                                       instance.scaleToActual( tapX, tapY );
+
+                                               } else if ( instance.group.length < 2 ) {
+                                                       instance.close( self.startEvent );
+                                               }
+                                       }
+
+                               break;
+                       }
+
+               };
+
+               // Ignore right click
+               if ( e.originalEvent && e.originalEvent.button == 2 ) {
+                       return;
+               }
+
+               // Skip if current slide is not in the center
+               if ( instance.isSliding ) {
+                       return;
+               }
+
+               // Skip if clicked on the scrollbar
+               if ( tapX > $target[0].clientWidth + $target.offset().left ) {
+                       return;
+               }
+
+               // Check where is clicked
+               if ( $target.is( '.fancybox-bg,.fancybox-inner,.fancybox-outer,.fancybox-container' ) ) {
+                       where = 'Outside';
+
+               } else if ( $target.is( '.fancybox-slide' ) ) {
+                       where = 'Slide';
+
+               } else if  ( instance.current.$content && instance.current.$content.has( e.target ).length ) {
+                       where = 'Content';
+
+               } else {
+                       return;
+               }
+
+               // Check if this is a double tap
+               if ( self.tapped ) {
+
+                       // Stop previously created single tap
+                       clearTimeout( self.tapped );
+                       self.tapped = null;
+
+                       // Skip if distance between taps is too big
+                       if ( Math.abs( tapX - self.tapX ) > 50 || Math.abs( tapY - self.tapY ) > 50 || instance.isSliding ) {
+                               return this;
+                       }
+
+                       // OK, now we assume that this is a double-tap
+                       process( 'dblclick' + where );
+
+               } else {
+
+                       // Single tap will be processed if user has not clicked second time within 300ms
+                       // or there is no need to wait for double-tap
+                       self.tapX = tapX;
+                       self.tapY = tapY;
+
+                       if ( current.opts[ 'dblclick' + where ] && current.opts[ 'dblclick' + where ] !== current.opts[ 'click' + where ] ) {
+                               self.tapped = setTimeout(function() {
+                                       self.tapped = null;
+
+                                       process( 'click' + where );
+
+                               }, 300);
+
+                       } else {
+                               process( 'click' + where );
+                       }
+
+               }
+
+               return this;
+       };
+
+       $(document).on('onActivate.fb', function (e, instance) {
+               if ( instance && !instance.Guestures ) {
+                       instance.Guestures = new Guestures( instance );
+               }
+       });
+
+       $(document).on('beforeClose.fb', function (e, instance) {
+               if ( instance && instance.Guestures ) {
+                       instance.Guestures.destroy();
+               }
+       });
+
+
+}(window, document, window.jQuery));
diff --git a/fancybox/src/js/hash.js b/fancybox/src/js/hash.js
new file mode 100644 (file)
index 0000000..8cfc5bf
--- /dev/null
@@ -0,0 +1,223 @@
+// ==========================================================================
+//
+// Hash
+// Enables linking to each modal
+//
+// ==========================================================================
+;(function (document, window, $) {
+       'use strict';
+
+       // Simple $.escapeSelector polyfill (for jQuery prior v3)
+       if ( !$.escapeSelector ) {
+               $.escapeSelector = function( sel ) {
+                       var rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g;
+                       var fcssescape = function( ch, asCodePoint ) {
+                               if ( asCodePoint ) {
+                                       // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER
+                                       if ( ch === "\0" ) {
+                                               return "\uFFFD";
+                                       }
+
+                                       // Control characters and (dependent upon position) numbers get escaped as code points
+                                       return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " ";
+                               }
+
+                               // Other potentially-special ASCII characters get backslash-escaped
+                               return "\\" + ch;
+                       };
+
+                       return ( sel + "" ).replace( rcssescape, fcssescape );
+               };
+       }
+
+       // Variable containing last hash value set by fancyBox
+       // It will be used to determine if fancyBox needs to close after hash change is detected
+    var currentHash = null;
+
+       // Throtlling the history change
+       var timerID = null;
+
+       // Get info about gallery name and current index from url
+    function parseUrl() {
+        var hash    = window.location.hash.substr( 1 );
+        var rez     = hash.split( '-' );
+        var index   = rez.length > 1 && /^\+?\d+$/.test( rez[ rez.length - 1 ] ) ? parseInt( rez.pop( -1 ), 10 ) || 1 : 1;
+        var gallery = rez.join( '-' );
+
+               // Index is starting from 1
+               if ( index < 1 ) {
+                       index = 1;
+               }
+
+        return {
+            hash    : hash,
+            index   : index,
+            gallery : gallery
+        };
+    }
+
+       // Trigger click evnt on links to open new fancyBox instance
+       function triggerFromUrl( url ) {
+               var $el;
+
+        if ( url.gallery !== '' ) {
+
+                       // If we can find element matching 'data-fancybox' atribute, then trigger click event for that ..
+                       $el = $( "[data-fancybox='" + $.escapeSelector( url.gallery ) + "']" ).eq( url.index - 1 );
+
+            if ( $el.length ) {
+                               $el.trigger( 'click' );
+
+                       } else {
+
+                               // .. if not, try finding element by ID
+                               $( "#" + $.escapeSelector( url.gallery ) + "" ).trigger( 'click' );
+
+                       }
+
+        }
+       }
+
+       // Get gallery name from current instance
+       function getGallery( instance ) {
+               var opts;
+
+               if ( !instance ) {
+                       return false;
+               }
+
+               opts = instance.current ? instance.current.opts : instance.opts;
+
+               return opts.$orig ? opts.$orig.data( 'fancybox' ) : ( opts.hash || '' );
+       }
+
+       // Star when DOM becomes ready
+    $(function() {
+
+               // Small delay is used to allow other scripts to process "dom ready" event
+               setTimeout(function() {
+
+                       // Check if this module is not disabled
+                       if ( $.fancybox.defaults.hash === false ) {
+                               return;
+                       }
+
+                       // Update hash when opening/closing fancyBox
+                   $(document).on({
+                               'onInit.fb' : function( e, instance ) {
+                                       var url, gallery;
+
+                                       if ( instance.group[ instance.currIndex ].opts.hash === false ) {
+                                               return;
+                                       }
+
+                                       url     = parseUrl();
+                                       gallery = getGallery( instance );
+
+                                       // Make sure gallery start index matches index from hash
+                                       if ( gallery && url.gallery && gallery == url.gallery ) {
+                                               instance.currIndex = url.index - 1;
+                                       }
+
+                               },
+
+                               'beforeShow.fb' : function( e, instance, current, firstRun ) {
+                                       var gallery;
+
+                                       if ( current.opts.hash === false ) {
+                                               return;
+                                       }
+
+                           gallery = getGallery( instance );
+
+                           // Update window hash
+                           if ( gallery && gallery !== '' ) {
+
+                                               if ( window.location.hash.indexOf( gallery ) < 0 ) {
+                                       instance.opts.origHash = window.location.hash;
+                                   }
+
+                                               currentHash = gallery + ( instance.group.length > 1 ? '-' + ( current.index + 1 ) : '' );
+
+                                               if ( 'replaceState' in window.history ) {
+                                                       if ( timerID ) {
+                                                               clearTimeout( timerID );
+                                                       }
+
+                                                       timerID = setTimeout(function() {
+                                                               window.history[ firstRun ? 'pushState' : 'replaceState' ]( {} , document.title, window.location.pathname + window.location.search + '#' +  currentHash );
+
+                                                               timerID = null;
+
+                                                       }, 300);
+
+                                               } else {
+                                                       window.location.hash = currentHash;
+                                               }
+
+                           }
+
+                       },
+
+                               'beforeClose.fb' : function( e, instance, current ) {
+                                       var gallery, origHash;
+
+                                       if ( timerID ) {
+                                               clearTimeout( timerID );
+                                       }
+
+                                       if ( current.opts.hash === false ) {
+                                               return;
+                                       }
+
+                                       gallery  = getGallery( instance );
+                                       origHash = instance && instance.opts.origHash ? instance.opts.origHash : '';
+
+                           // Remove hash from location bar
+                           if ( gallery && gallery !== '' ) {
+
+                               if ( 'replaceState' in history ) {
+                                                       window.history.replaceState( {} , document.title, window.location.pathname + window.location.search + origHash );
+
+                               } else {
+                                                       window.location.hash = origHash;
+
+                                                       // Keep original scroll position
+                                                       $( window ).scrollTop( instance.scrollTop ).scrollLeft( instance.scrollLeft );
+                               }
+                           }
+
+                                       currentHash = null;
+                       }
+                   });
+
+                       // Check if need to close after url has changed
+                       $(window).on('hashchange.fb', function() {
+                               var url = parseUrl();
+
+                               if ( $.fancybox.getInstance() ) {
+                                       if ( currentHash && currentHash !== url.gallery + '-' + url.index && !( url.index === 1 && currentHash == url.gallery ) ) {
+                                               currentHash = null;
+
+                                               $.fancybox.close();
+                                       }
+
+                               } else if ( url.gallery !== '' ) {
+                                       triggerFromUrl( url );
+                               }
+                       });
+
+                       // If navigating away from current page
+                       $(window).one('unload.fb popstate.fb', function() {
+                               $.fancybox.getInstance( 'close', true, 0 );
+                       });
+
+                       // Check current hash and trigger click event on matching element to start fancyBox, if needed
+                       triggerFromUrl( parseUrl() );
+
+               }, 50);
+
+    });
+
+
+}(document, window, window.jQuery));
diff --git a/fancybox/src/js/media.js b/fancybox/src/js/media.js
new file mode 100644 (file)
index 0000000..fb99347
--- /dev/null
@@ -0,0 +1,223 @@
+// ==========================================================================
+//
+// Media
+// Adds additional media type support
+//
+// ==========================================================================
+;(function ($) {
+
+       'use strict';
+
+       // Formats matching url to final form
+
+       var format = function (url, rez, params) {
+               if ( !url ) {
+                       return;
+               }
+
+               params = params || '';
+
+               if ( $.type(params) === "object" ) {
+                       params = $.param(params, true);
+               }
+
+               $.each(rez, function (key, value) {
+                       url = url.replace('$' + key, value || '');
+               });
+
+               if (params.length) {
+                       url += (url.indexOf('?') > 0 ? '&' : '?') + params;
+               }
+
+               return url;
+       };
+
+       // Object containing properties for each media type
+
+       var defaults = {
+               youtube : {
+                       matcher : /(youtube\.com|youtu\.be|youtube\-nocookie\.com)\/(watch\?(.*&)?v=|v\/|u\/|embed\/?)?(videoseries\?list=(.*)|[\w-]{11}|\?listType=(.*)&list=(.*))(.*)/i,
+                       params  : {
+                               autoplay : 1,
+                               autohide : 1,
+                               fs  : 1,
+                               rel : 0,
+                               hd  : 1,
+                               wmode : 'transparent',
+                               enablejsapi : 1,
+                               html5 : 1
+                       },
+                       paramPlace : 8,
+                       type  : 'iframe',
+                       url   : '//www.youtube.com/embed/$4',
+                       thumb : '//img.youtube.com/vi/$4/hqdefault.jpg'
+               },
+
+               vimeo : {
+                       matcher : /^.+vimeo.com\/(.*\/)?([\d]+)(.*)?/,
+                       params  : {
+                               autoplay : 1,
+                               hd : 1,
+                               show_title    : 1,
+                               show_byline   : 1,
+                               show_portrait : 0,
+                               fullscreen    : 1,
+                               api : 1
+                       },
+                       paramPlace : 3,
+                       type : 'iframe',
+                       url : '//player.vimeo.com/video/$2'
+               },
+
+               metacafe : {
+                       matcher : /metacafe.com\/watch\/(\d+)\/(.*)?/,
+                       type    : 'iframe',
+                       url     : '//www.metacafe.com/embed/$1/?ap=1'
+               },
+
+               dailymotion : {
+                       matcher : /dailymotion.com\/video\/(.*)\/?(.*)/,
+                       params : {
+                               additionalInfos : 0,
+                               autoStart : 1
+                       },
+                       type : 'iframe',
+                       url  : '//www.dailymotion.com/embed/video/$1'
+               },
+
+               vine : {
+                       matcher : /vine.co\/v\/([a-zA-Z0-9\?\=\-]+)/,
+                       type    : 'iframe',
+                       url     : '//vine.co/v/$1/embed/simple'
+               },
+
+               instagram : {
+                       matcher : /(instagr\.am|instagram\.com)\/p\/([a-zA-Z0-9_\-]+)\/?/i,
+                       type    : 'image',
+                       url     : '//$1/p/$2/media/?size=l'
+               },
+
+               // Examples:
+               // http://maps.google.com/?ll=48.857995,2.294297&spn=0.007666,0.021136&t=m&z=16
+               // https://www.google.com/maps/@37.7852006,-122.4146355,14.65z
+               // https://www.google.com/maps/place/Googleplex/@37.4220041,-122.0833494,17z/data=!4m5!3m4!1s0x0:0x6c296c66619367e0!8m2!3d37.4219998!4d-122.0840572
+               gmap_place : {
+                       matcher : /(maps\.)?google\.([a-z]{2,3}(\.[a-z]{2})?)\/(((maps\/(place\/(.*)\/)?\@(.*),(\d+.?\d+?)z))|(\?ll=))(.*)?/i,
+                       type    : 'iframe',
+                       url     : function (rez) {
+                               return '//maps.google.' + rez[2] + '/?ll=' + ( rez[9] ? rez[9] + '&z=' + Math.floor(  rez[10]  ) + ( rez[12] ? rez[12].replace(/^\//, "&") : '' )  : rez[12] ) + '&output=' + ( rez[12] && rez[12].indexOf('layer=c') > 0 ? 'svembed' : 'embed' );
+                       }
+               },
+
+               // Examples:
+               // https://www.google.com/maps/search/Empire+State+Building/
+               // https://www.google.com/maps/search/?api=1&query=centurylink+field
+               // https://www.google.com/maps/search/?api=1&query=47.5951518,-122.3316393
+               gmap_search : {
+                       matcher : /(maps\.)?google\.([a-z]{2,3}(\.[a-z]{2})?)\/(maps\/search\/)(.*)/i,
+                       type    : 'iframe',
+                       url     : function (rez) {
+                               return '//maps.google.' + rez[2] + '/maps?q=' + rez[5].replace('query=', 'q=').replace('api=1', '') + '&output=embed';
+                       }
+               }
+       };
+
+       $(document).on('onInit.fb', function (e, instance) {
+
+               $.each(instance.group, function( i, item ) {
+
+                       var url  = item.src || '',
+                               type = false,
+                               media,
+                               thumb,
+                               rez,
+                               params,
+                               urlParams,
+                               o,
+                               provider;
+
+                       // Skip items that already have content type
+                       if ( item.type ) {
+                               return;
+                       }
+
+                       media = $.extend( true, {}, defaults, item.opts.media );
+
+                       // Look for any matching media type
+                       $.each(media, function ( n, el ) {
+                               rez = url.match(el.matcher);
+                               o   = {};
+                               provider = n;
+
+                               if (!rez) {
+                                       return;
+                               }
+
+                               type = el.type;
+
+                               if ( el.paramPlace && rez[ el.paramPlace ] ) {
+                                       urlParams = rez[ el.paramPlace ];
+
+                                       if ( urlParams[ 0 ] == '?' ) {
+                                               urlParams = urlParams.substring(1);
+                                       }
+
+                                       urlParams = urlParams.split('&');
+
+                                       for ( var m = 0; m < urlParams.length; ++m ) {
+                                               var p = urlParams[ m ].split('=', 2);
+
+                                               if ( p.length == 2 ) {
+                                                       o[ p[0] ] = decodeURIComponent( p[1].replace(/\+/g, " ") );
+                                               }
+                                       }
+                               }
+
+                               params = $.extend( true, {}, el.params, item.opts[ n ], o );
+
+                               url   = $.type(el.url) === "function" ? el.url.call(this, rez, params, item) : format(el.url, rez, params);
+                               thumb = $.type(el.thumb) === "function" ? el.thumb.call(this, rez, params, item) : format(el.thumb, rez);
+
+                               if ( provider === 'vimeo' ) {
+                                       url = url.replace('&%23', '#');
+                               }
+
+                               return false;
+                       });
+
+                       // If it is found, then change content type and update the url
+
+                       if ( type ) {
+                               item.src  = url;
+                               item.type = type;
+
+                               if ( !item.opts.thumb && !( item.opts.$thumb && item.opts.$thumb.length ) ) {
+                                       item.opts.thumb = thumb;
+                               }
+
+                               if ( type === 'iframe' ) {
+                                       $.extend(true, item.opts, {
+                                               iframe : {
+                                                       preload : false,
+                                                       attr : {
+                                                               scrolling : "no"
+                                                       }
+                                               }
+                                       });
+
+                                       item.contentProvider = provider;
+
+                                       item.opts.slideClass += ' fancybox-slide--' + ( provider == 'gmap_place' || provider == 'gmap_search' ? 'map' : 'video' );
+                               }
+
+                       } else {
+
+                               // If no content type is found, then set it to `image` as fallback
+                               item.type = 'image';
+                       }
+
+               });
+
+       });
+
+}(window.jQuery));
diff --git a/fancybox/src/js/slideshow.js b/fancybox/src/js/slideshow.js
new file mode 100644 (file)
index 0000000..b839cf4
--- /dev/null
@@ -0,0 +1,170 @@
+// ==========================================================================
+//
+// SlideShow
+// Enables slideshow functionality
+//
+// Example of usage:
+// $.fancybox.getInstance().SlideShow.start()
+//
+// ==========================================================================
+;(function (document, $) {
+       'use strict';
+
+       var SlideShow = function( instance ) {
+               this.instance = instance;
+               this.init();
+       };
+
+       $.extend( SlideShow.prototype, {
+               timer    : null,
+               isActive : false,
+               $button  : null,
+               speed    : 3000,
+
+               init : function() {
+                       var self = this;
+
+                       self.$button = self.instance.$refs.toolbar.find('[data-fancybox-play]').on('click', function() {
+                               self.toggle();
+                       });
+
+                       if ( self.instance.group.length < 2 || !self.instance.group[ self.instance.currIndex ].opts.slideShow ) {
+                               self.$button.hide();
+                       }
+               },
+
+               set : function() {
+                       var self = this;
+
+                       // Check if reached last element
+                       if ( self.instance && self.instance.current && (self.instance.current.opts.loop || self.instance.currIndex < self.instance.group.length - 1 )) {
+                               self.timer = setTimeout(function() {
+                                       self.instance.next();
+
+                               }, self.instance.current.opts.slideShow.speed || self.speed);
+
+                       } else {
+                               self.stop();
+                               self.instance.idleSecondsCounter = 0;
+                               self.instance.showControls();
+                       }
+
+               },
+
+               clear : function() {
+                       var self = this;
+
+                       clearTimeout( self.timer );
+
+                       self.timer = null;
+               },
+
+               start : function() {
+                       var self = this;
+                       var current = self.instance.current;
+
+                       if ( self.instance && current && ( current.opts.loop || current.index < self.instance.group.length - 1 )) {
+
+                               self.isActive = true;
+
+                               self.$button
+                                       .attr( 'title', current.opts.i18n[ current.opts.lang ].PLAY_STOP )
+                                       .addClass( 'fancybox-button--pause' );
+
+                               if ( current.isComplete ) {
+                                       self.set();
+                               }
+                       }
+               },
+
+               stop : function() {
+                       var self = this;
+                       var current = self.instance.current;
+
+                       self.clear();
+
+                       self.$button
+                               .attr( 'title', current.opts.i18n[ current.opts.lang ].PLAY_START )
+                               .removeClass( 'fancybox-button--pause' );
+
+                       self.isActive = false;
+               },
+
+               toggle : function() {
+                       var self = this;
+
+                       if ( self.isActive ) {
+                               self.stop();
+
+                       } else {
+                               self.start();
+                       }
+               }
+
+       });
+
+       $(document).on({
+               'onInit.fb' : function(e, instance) {
+                       if ( instance && !instance.SlideShow ) {
+                               instance.SlideShow = new SlideShow( instance );
+                       }
+               },
+
+               'beforeShow.fb' : function(e, instance, current, firstRun) {
+                       var SlideShow = instance && instance.SlideShow;
+
+                       if ( firstRun ) {
+
+                               if ( SlideShow && current.opts.slideShow.autoStart ) {
+                                       SlideShow.start();
+                               }
+
+                       } else if ( SlideShow && SlideShow.isActive )  {
+                               SlideShow.clear();
+                       }
+               },
+
+               'afterShow.fb' : function(e, instance, current) {
+                       var SlideShow = instance && instance.SlideShow;
+
+                       if ( SlideShow && SlideShow.isActive ) {
+                               SlideShow.set();
+                       }
+               },
+
+               'afterKeydown.fb' : function(e, instance, current, keypress, keycode) {
+                       var SlideShow = instance && instance.SlideShow;
+
+                       // "P" or Spacebar
+                       if ( SlideShow && current.opts.slideShow && ( keycode === 80 || keycode === 32 ) && !$(document.activeElement).is( 'button,a,input' ) ) {
+                               keypress.preventDefault();
+
+                               SlideShow.toggle();
+                       }
+               },
+
+               'beforeClose.fb onDeactivate.fb' : function(e, instance) {
+                       var SlideShow = instance && instance.SlideShow;
+
+                       if ( SlideShow ) {
+                               SlideShow.stop();
+                       }
+               }
+       });
+
+       // Page Visibility API to pause slideshow when window is not active
+       $(document).on("visibilitychange", function() {
+               var instance  = $.fancybox.getInstance();
+               var SlideShow = instance && instance.SlideShow;
+
+               if ( SlideShow && SlideShow.isActive ) {
+                       if ( document.hidden ) {
+                               SlideShow.clear();
+
+                       } else {
+                               SlideShow.set();
+                       }
+               }
+       });
+
+}(document, window.jQuery));
diff --git a/fancybox/src/js/thumbs.js b/fancybox/src/js/thumbs.js
new file mode 100644 (file)
index 0000000..abbd2f4
--- /dev/null
@@ -0,0 +1,231 @@
+// ==========================================================================
+//
+// Thumbs
+// Displays thumbnails in a grid
+//
+// ==========================================================================
+;(function (document, $) {
+       'use strict';
+
+       var FancyThumbs = function( instance ) {
+               this.instance = instance;
+               this.init();
+       };
+
+       $.extend( FancyThumbs.prototype, {
+
+               $button         : null,
+               $grid           : null,
+               $list           : null,
+               isVisible       : false,
+
+               init : function() {
+                       var self = this;
+
+                       var first  = self.instance.group[0],
+                               second = self.instance.group[1];
+
+                       self.$button = self.instance.$refs.toolbar.find( '[data-fancybox-thumbs]' );
+
+                       if ( self.instance.group.length > 1 && self.instance.group[ self.instance.currIndex ].opts.thumbs && (
+                               ( first.type == 'image'  || first.opts.thumb  || first.opts.$thumb ) &&
+                               ( second.type == 'image' || second.opts.thumb || second.opts.$thumb )
+                       )) {
+
+                               self.$button.on('click', function() {
+                                       self.toggle();
+                               });
+
+                               self.isActive = true;
+
+                       } else {
+                               self.$button.hide();
+
+                               self.isActive = false;
+                       }
+
+               },
+
+               create : function() {
+                       var instance = this.instance,
+                               list,
+                               src;
+
+                       this.$grid = $('<div class="fancybox-thumbs"></div>').appendTo( instance.$refs.container );
+
+                       list = '<ul>';
+
+                       $.each(instance.group, function( i, item ) {
+
+                               src = item.opts.thumb || ( item.opts.$thumb ? item.opts.$thumb.attr('src') : null );
+
+                               if ( !src && item.type === 'image' ) {
+                                       src = item.src;
+                               }
+
+                               if ( src && src.length ) {
+                                       list += '<li data-index="' + i + '"  tabindex="0" class="fancybox-thumbs-loading"><img data-src="' + src + '" /></li>';
+                               }
+
+                       });
+
+                       list += '</ul>';
+
+                       this.$list = $( list ).appendTo( this.$grid ).on('click', 'li', function() {
+                               instance.jumpTo( $(this).data('index') );
+                       });
+
+                       this.$list.find('img').hide().one('load', function() {
+
+                               var $parent             = $(this).parent().removeClass('fancybox-thumbs-loading'),
+                                       thumbWidth      = $parent.outerWidth(),
+                                       thumbHeight     = $parent.outerHeight(),
+                                       width,
+                                       height,
+                                       widthRatio,
+                                       heightRatio;
+
+                               width  = this.naturalWidth      || this.width;
+                               height = this.naturalHeight     || this.height;
+
+                               //Calculate thumbnail width/height and center it
+
+                               widthRatio  = width  / thumbWidth;
+                               heightRatio = height / thumbHeight;
+
+                               if (widthRatio >= 1 && heightRatio >= 1) {
+                                       if (widthRatio > heightRatio) {
+                                               width  = width / heightRatio;
+                                               height = thumbHeight;
+
+                                       } else {
+                                               width  = thumbWidth;
+                                               height = height / widthRatio;
+                                       }
+                               }
+
+                               $(this).css({
+                                       width         : Math.floor(width),
+                                       height        : Math.floor(height),
+                                       'margin-top'  : Math.min( 0, Math.floor(thumbHeight * 0.3 - height * 0.3 ) ),
+                                       'margin-left' : Math.min( 0, Math.floor(thumbWidth  * 0.5 - width  * 0.5 ) )
+                               }).show();
+
+                       })
+                       .each(function() {
+                               this.src = $( this ).data( 'src' );
+                       });
+
+               },
+
+               focus : function() {
+
+                       if ( this.instance.current ) {
+                               this.$list
+                                       .children()
+                                       .removeClass('fancybox-thumbs-active')
+                                       .filter('[data-index="' + this.instance.current.index  + '"]')
+                                       .addClass('fancybox-thumbs-active')
+                                       .focus();
+                       }
+
+               },
+
+               close : function() {
+                       this.$grid.hide();
+               },
+
+               update : function() {
+
+                       this.instance.$refs.container.toggleClass( 'fancybox-show-thumbs', this.isVisible );
+
+                       if ( this.isVisible ) {
+
+                               if ( !this.$grid ) {
+                                       this.create();
+                               }
+
+                               this.instance.trigger( 'onThumbsShow' );
+
+                               this.focus();
+
+                       } else if ( this.$grid ) {
+                               this.instance.trigger( 'onThumbsHide' );
+                       }
+
+                       // Update content position
+                       this.instance.update();
+
+               },
+
+               hide : function() {
+                       this.isVisible = false;
+                       this.update();
+               },
+
+               show : function() {
+                       this.isVisible = true;
+                       this.update();
+               },
+
+               toggle : function() {
+                       this.isVisible = !this.isVisible;
+                       this.update();
+               }
+
+       });
+
+       $(document).on({
+
+               'onInit.fb' : function(e, instance) {
+                       if ( instance && !instance.Thumbs ) {
+                               instance.Thumbs = new FancyThumbs( instance );
+                       }
+               },
+
+               'beforeShow.fb' : function(e, instance, item, firstRun) {
+                       var Thumbs = instance && instance.Thumbs;
+
+                       if ( !Thumbs || !Thumbs.isActive ) {
+                               return;
+                       }
+
+                       if ( item.modal ) {
+                               Thumbs.$button.hide();
+
+                               Thumbs.hide();
+
+                               return;
+                       }
+
+                       if ( firstRun && instance.opts.thumbs.autoStart === true ) {
+                               Thumbs.show();
+                       }
+
+                       if ( Thumbs.isVisible ) {
+                               Thumbs.focus();
+                       }
+               },
+
+               'afterKeydown.fb' : function(e, instance, current, keypress, keycode) {
+                       var Thumbs = instance && instance.Thumbs;
+
+                       // "G"
+                       if ( Thumbs && Thumbs.isActive && keycode === 71 ) {
+                               keypress.preventDefault();
+
+                               Thumbs.toggle();
+                       }
+               },
+
+               'beforeClose.fb' : function( e, instance ) {
+                       var Thumbs = instance && instance.Thumbs;
+
+                       if ( Thumbs && Thumbs.isVisible && instance.opts.thumbs.hideOnClose !== false ) {
+                               Thumbs.close();
+                       }
+               }
+
+       });
+
+}(document, window.jQuery));
diff --git a/favicon.ico b/favicon.ico
new file mode 100644 (file)
index 0000000..3eb16e9
Binary files /dev/null and b/favicon.ico differ
diff --git a/footer.php b/footer.php
deleted file mode 100644 (file)
index a813b20..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-<?php
-/**
- * The template for displaying the footer.
- *
- * Contains the closing of the #content div and all content after
- *
- * @package accesspress_parallax
- */
-?>
-
-       </div><!-- #content -->
-
-       <footer id="colophon" class="site-footer">
-        <div id="footer-overlay"></div>
-               <div class="bottom-footer">
-            
-                       <div class="footer-content clearfix">
-                <div class="site-info">
-                    
-                               </div><!-- .site-info -->
-                               <div  class="copy-right">
-                <?php get_template_part('parts/glm-client-info'); ?>
-                               </div><!-- .copy-right -->
-                               
-                       </div>
-               </div>
-       </footer><!-- #colophon -->
-</div><!-- #page -->
-
-<div id="go-top"><a href="#page"><i class="fa fa-angle-up"></i></a></div>
-
-<?php wp_footer(); ?>
-</body>
-</html>
\ No newline at end of file
index cd04ab8..7fb5f80 100644 (file)
 <?php
-/**
- * accesspress_parallax functions and definitions
- *
- * @package accesspress_parallax
- */
-
-/**
- * Set the content width based on the theme's design and stylesheet.
- */
-if ( ! isset( $content_width ) ) {
-       $content_width = 640; /* pixels */
-}
-
-if ( ! function_exists( 'accesspress_parallax_setup' ) ) :
-/**
- * Sets up theme defaults and registers support for various WordPress features.
- *
- * Note that this function is hooked into the after_setup_theme hook, which
- * runs before the init hook. The init hook is too late for some features, such
- * as indicating support for post thumbnails.
- */
-function accesspress_parallax_setup() {
-
-       /*
-        * Make theme available for translation.
-        * Translations can be filed in the /languages/ directory.
-        * If you're building a theme based on accesspress_parallax, use a find and replace
-        * to change 'accesspress_parallax' to the name of your theme in all the template files
-        */
-       load_theme_textdomain( 'accesspress-parallax', get_template_directory() . '/languages' );
-
-       // Add default posts and comments RSS feed links to head.
-       add_theme_support( 'automatic-feed-links' );
+require_once 'lib/defines.php';
+require_once 'lib/menu-walker.php';
+require_once 'lib/navigation.php';
+require_once 'lib/plugins.php';
 
-       /*
-        * Let WordPress manage the document title.
-        * By adding theme support, we declare that this theme does not use a
-        * hard-coded <title> tag in the document head, and expect WordPress to
-        * provide it for us.
-        */
-       add_theme_support( 'title-tag' );
+$ancestorId   = null;
+$includePages = array();
+$frontPageId  = get_option('page_on_front');
+add_action('widgets_init', 'glm_quicksite_widget_init');
 
-       // Add Support WooCommerce
-       add_theme_support( 'woocommerce' );
-    add_theme_support( 'wc-product-gallery-zoom' );
-    add_theme_support( 'wc-product-gallery-lightbox' );
-    add_theme_support( 'wc-product-gallery-slider' );
+if (!function_exists('glm_quicksite_widget_init')) {
 
-       /**
-        * Add callback for custom TinyMCE editor stylesheets. (editor-style.css)
-        * @see http://codex.wordpress.org/Function_Reference/add_editor_style
-        */
-       add_editor_style('css/editor-style.css');
-
-       /*
-        * Enable support for Post Thumbnails on posts and pages.
-        *
-        * @link http://codex.wordpress.org/Function_Reference/add_theme_support#Post_Thumbnails
-        */
-       add_theme_support( 'post-thumbnails' );
-       add_image_size( 'blog-header', 900, 300, array('center','center')); //blog Image
-       add_image_size( 'portfolio-thumbnail', 560, 450, array('center','center')); //Portfolio Image
-    add_image_size( 'blog-thumbnail', 480, 300, array('center','center')); //Blog Image        
-       add_image_size( 'team-thumbnail', 380, 380, array('top','center')); //Portfolio Image
-
-       // This theme uses wp_nav_menu() in one location.
-       register_nav_menus( array(
-        'primary' => __( 'Primary Menu', 'accesspress-parallax' ),
-        'main' => __( 'Main Menu', 'accesspress-parallax' ),
-        
-       ) );
-       
-       /*
-        * Switch default core markup for search form, comment form, and comments
-        * to output valid HTML5.
-        */
-       add_theme_support( 'html5', array(
-               'search-form', 'comment-form', 'comment-list', 'gallery', 'caption'
-       ) );
+    function glm_quicksite_widget_init()
+    {
+        register_sidebar(array(
+            'name'        => __('Slideshow'),
+            'id'          => 'slideshow',
+            'description' => __('Meta Slider/Slideshow Area')
+        ));
+    }
 
-       // Setup the WordPress core custom background feature.
-       add_theme_support( 'custom-background', apply_filters( 'accesspress_parallax_custom_background_args', array(
-               'default-color' => 'ffffff',
-               'default-image' => '',
-       ) ) );
 }
-endif; // accesspress_parallax_setup
-add_action( 'after_setup_theme', 'accesspress_parallax_setup' );
 
 /**
- * Register widget area.
+ * Return the client info option for the given key
+ *
+ * @param type $name Name of the client info option to return
  *
- * @link http://codex.wordpress.org/Function_Reference/register_sidebar
+ * @return string Option
  */
-function accesspress_parallax_widgets_init() {
-       register_sidebar( array(
-               'name'          => __( 'Sidebar', 'accesspress-parallax' ),
-               'id'            => 'sidebar-1',
-               'description'   => '',
-               'before_widget' => '<aside id="%1$s" class="widget %2$s">',
-               'after_widget'  => '</aside>',
-               'before_title'  => '<h2 class="widget-title"><span>',
-               'after_title'   => '</span></h2>',
-       ) );
-
-       register_sidebar( array(
-               'name'          => __( 'Footer One', 'accesspress-parallax' ),
-               'id'            => 'footer-1',
-               'description'   => '',
-               'before_widget' => '<aside id="%1$s" class="widget %2$s">',
-               'after_widget'  => '</aside>',
-               'before_title'  => '<h2 class="widget-title">',
-               'after_title'   => '</h2>',
-       ) );
-
-       register_sidebar( array(
-               'name'          => __( 'Footer Two', 'accesspress-parallax' ),
-               'id'            => 'footer-2',
-               'description'   => '',
-               'before_widget' => '<aside id="%1$s" class="widget %2$s">',
-               'after_widget'  => '</aside>',
-               'before_title'  => '<h2 class="widget-title">',
-               'after_title'   => '</h2>',
-       ) );
-
-       register_sidebar( array(
-               'name'          => __( 'Footer Three', 'accesspress-parallax' ),
-               'id'            => 'footer-3',
-               'description'   => '',
-               'before_widget' => '<aside id="%1$s" class="widget %2$s">',
-               'after_widget'  => '</aside>',
-               'before_title'  => '<h2 class="widget-title">',
-               'after_title'   => '</h2>',
-       ) );
-
-       register_sidebar( array(
-               'name'          => __( 'Footer Four', 'accesspress-parallax' ),
-               'id'            => 'footer-4',
-               'description'   => '',
-               'before_widget' => '<aside id="%1$s" class="widget %2$s">',
-               'after_widget'  => '</aside>',
-               'before_title'  => '<h2 class="widget-title">',
-               'after_title'   => '</h2>',
-       ) );
+if (!function_exists('glm_get_clientinfo_option')) {
+    function glm_get_clientinfo_option($name)
+    {
+        $settings = get_option('glmclientinfo_settings');
+        $states   = get_option('glmclientinfo_states');
+        if ($name == 'stateFull' && $settings['state']) {
+            return $states[$settings['state']];
+        }
+        if ($name == 'state2Full' && $settings['state2']) {
+            return $states[$settings['state2']];
+        }
+        return ($settings && $settings[$name])
+            ? $settings[$name]
+            : null;
+    }
 }
-add_action( 'widgets_init', 'accesspress_parallax_widgets_init' );
 
+add_theme_support('post-thumbnails');
+set_post_thumbnail_size(120, 100, true);
 /**
- * Enqueue scripts and styles.
+ * glm_site_scripts
+ *
+ * Add the scripts that we'll need for any home page stuff
  */
-function accesspress_parallax_scripts() {
-       $query_args = array(
-               'family' => 'Roboto:400,300,500,700|Oxygen:400,300,700',
-       );
+function glm_site_scripts()
+{
+    wp_enqueue_script(
+        'modernizr',
+        get_template_directory_uri() . '/js/modernizr/modernizr.min.js'
+    );
+    wp_enqueue_script('jquery');
+    wp_enqueue_script(
+        'glm_foundation',
+        get_template_directory_uri() . '/js/app.js',
+        'jquery',
+        '1.0',
+        true
+    );
+    wp_enqueue_script('slick_script', get_template_directory_uri() . '/slick/slick/slick.min.js', array('jquery'), null, false);
+
+    wp_enqueue_style('slick-style', get_template_directory_uri() . '/slick/slick/slick.css');
+
+    wp_enqueue_style('slick-theme', get_template_directory_uri() . '/slick/slick/slick-theme.css');
+
+    wp_enqueue_style('fancyStyle', get_template_directory_uri() . '/fancybox/dist/jquery.fancybox.min.css');
+//    wp_enqueue_style('fancyStyleButtons', get_template_directory_uri()  . '/fancybox/source/helpers/jquery.fancybox-buttons.css?v=1.0.5');
+//    wp_enqueue_style('fancyStyleThumbs', get_template_directory_uri()  . '/fancybox/source/helpers/jquery.fancybox-thumbs.css?v=1.0.7');
+
+    wp_enqueue_script('fancyScript', get_template_directory_uri()  . '/fancybox/dist/jquery.fancybox.min.js', array('jquery'), '', true );
+//    wp_enqueue_script('fancyMouse', get_template_directory_uri()  . '/fancybox/lib/jquery.mousewheel-3.0.6.pack.js', array('jquery'), '', true );
+//    wp_enqueue_script('fancyThumbs', get_template_directory_uri()  . '/fancybox/source/helpers/jquery.fancybox-thumbs.js?v=1.0.7', array('jquery'), '', true );
+//    wp_enqueue_script('fancyButtons', get_template_directory_uri()  . '/fancybox/source/helpers/jquery.fancybox-buttons.js?v=1.0.5', array('jquery'), '', true );
+//    wp_enqueue_script('fancyMedia', get_template_directory_uri()  . '/fancybox/source/helpers/jquery.fancybox-media.js?v=1.0.6', array('jquery'), '', true );
 
-       $slider_parameters = array(
-               'accesspress_show_pager' => (!of_get_option('show_pager') || of_get_option('show_pager') == "yes") ? "true" : "false",
-               'accesspress_show_controls' => (!of_get_option('show_controls') || of_get_option('show_controls') == "yes") ? "true" : "false",
-               'accesspress_auto_transition' => (!of_get_option('auto_transition') || of_get_option('auto_transition') == "yes") ? "true" : "false",
-               'accesspress_slider_transition' => of_get_option('slider_transition') == "fade" ? "true" : "false",
-               'accesspress_slider_speed' => (!of_get_option('slider_speed')) ? "1000" : of_get_option('slider_speed'),
-               'accesspress_slider_pause' => (!of_get_option('slider_pause')) ? "5000" : of_get_option('slider_pause'),
-       );
-       
 
-       wp_enqueue_style( 'accesspress-parallax-google-fonts', add_query_arg( $query_args, "//fonts.googleapis.com/css" ) );
-       wp_enqueue_style( 'font-awesome', get_template_directory_uri() . '/css/fontawesome/css/font-awesome.min.css' );
-       wp_enqueue_style( 'nivo-lightbox', get_template_directory_uri() . '/css/nivo-lightbox.css' );
-       wp_enqueue_style( 'animate', get_template_directory_uri() . '/css/animate.css' );
-       wp_enqueue_style( 'slick', get_template_directory_uri() . '/css/slick.css' );
-  wp_enqueue_style('accesspress-parallax-woocommerce',get_template_directory_uri().'/woocommerce/ap-parallax-style.css');
-       wp_enqueue_style( 'accesspress-parallax-style', get_stylesheet_uri() );
-       wp_enqueue_style( 'accesspress-parallax-responsive', get_template_directory_uri() . '/css/responsive.css' );
+}
 
-       if (of_get_option('enable_animation') == '1' && is_front_page()) :
-        wp_enqueue_script('wow', get_template_directory_uri() . '/js/wow.js', array('jquery'), '1.0', true);
-    endif;
+// Adding theme support for post excerpts, to be used for the frontpage SVG map
+add_post_type_support( 'page', 'excerpt' );
 
-       wp_enqueue_script( 'smoothscroll', get_template_directory_uri() . '/js/SmoothScroll.js', array('jquery'), '1.2.1', true );
-    wp_enqueue_script( 'parallax', get_template_directory_uri() . '/js/parallax.js', array('jquery'), '1.1.3', true );
-       wp_enqueue_script( 'scrollto', get_template_directory_uri() . '/js/jquery.scrollTo.min.js', array('jquery'), '1.4.14', true );
-       wp_enqueue_script( 'jquery-localscroll', get_template_directory_uri() . '/js/jquery.localScroll.min.js', array('jquery'), '1.3.5', true );
-       wp_enqueue_script( 'accesspress-parallax-parallax-nav', get_template_directory_uri() . '/js/jquery.nav.js', array('jquery'), '2.2.0', true );
-       wp_enqueue_script( 'jquery-easing', get_template_directory_uri() . '/js/jquery.easing.min.js', array('jquery'), '1.3', true );
-       wp_enqueue_script( 'jquery-fitvid', get_template_directory_uri() . '/js/jquery.fitvids.js', array('jquery'), '1.0', true );
-       wp_enqueue_script( 'nivo-lightbox', get_template_directory_uri() . '/js/nivo-lightbox.min.js', array('jquery'), '1.2.0', true );
-       wp_enqueue_script( 'slick', get_template_directory_uri() . '/js/slick.js', array('jquery'), '1.8.0', true );
-       wp_enqueue_script( 'accesspress-parallax-custom', get_template_directory_uri() . '/js/custom.js', array('jquery'), '1.0', true );
-    wp_localize_script( 'accesspress-parallax-custom', 'ap_params', $slider_parameters );
-    wp_enqueue_script( 'glm-dev', get_template_directory_uri() . '/assets/js/glm-dev.js', array(), '1.0.0', true );
-       wp_enqueue_style( 'glm-style', get_template_directory_uri() . '/assets/css/glm-dev.css', false, "1.0.0" );
+function get_excerpt_by_id($post_id, $length = 35){
+   $the_post = get_post($post_id); //Gets post ID
+   if( $the_post->post_excerpt ){
+       $the_excerpt = $the_post->post_excerpt;
+    } else {
+        $the_excerpt = $the_post->post_content;
+    }
+   $excerpt_length = $length; //Sets excerpt length by word count
+   $the_excerpt = strip_tags(strip_shortcodes($the_excerpt)); //Strips tags and images
+   $words = explode(' ', $the_excerpt, $excerpt_length + 1);    if(count($words) > $excerpt_length) :
+       array_pop($words);
+       array_push($words, '…');
+       $the_excerpt = implode(' ', $words);
+   endif;
+   return $the_excerpt;
 
-       if ( is_singular() && comments_open() && get_option( 'thread_comments' ) ) {
-               wp_enqueue_script( 'comment-reply' );
-       }
 }
-add_action( 'wp_enqueue_scripts', 'accesspress_parallax_scripts' );
-
-/**
- * Implement the Custom Header feature.
- */
-require get_template_directory() . '/inc/accesspress-header.php';
 
-/**
- * Custom functions that act independently of the theme templates.
- */
-require get_template_directory() . '/inc/accesspress-functions.php';
+/* Header for posts*/
+function glm_get_header() {
+    if ( is_front_page() ) {
+        echo "<div id='slideshow'>";
+        if ( is_active_sidebar( 'slideshow' ) ) :
+           dynamic_sidebar( 'slideshow' );
+        endif;
+       echo '</div>';
+    } else {
+        echo '<div';
+        if (has_post_thumbnail() && !is_post_type('post') && !is_home()) {
+                $image_data = wp_get_attachment_image_src(get_post_thumbnail_id(), "full");
+            echo ' style="background-image: url('.$image_data[0].');height:0;padding:0;padding-bottom:30%;background-position:center center;background-size: 100%;background-repeat:no-repeat;max-height: 300px; "';
+                echo ' class="featured-image no-featured"';
+        } else {
+                echo ' style="background-image: url('.get_template_directory_uri().'/assets/default-header.jpg);height:0;padding:0;padding-bottom:30%;background-position:center center;background-size: 100%;background-repeat:no-repeat;max-height: 300px;"';
+                echo ' class="featured-image no-featured"';
+        }
+        echo '>';
+        echo '</div>';
+    }
+}
 
-/**
- * Custom template tags for this theme.
- */
-require get_template_directory() . '/inc/template-tags.php';
+// // The code below is useful when you want the image to resize to
+//    if (has_post_thumbnail()) {
+//            $image_data = wp_get_attachment_image_src(get_post_thumbnail_id(), "full");
+//            echo '<img src="'.$image_data[0].'" style="no-repeat;max-height:400px;">';
+//    } else {
+//            echo '<img src="'.get_template_directory_uri().'/assets/default-header.gif" style="max-height:400px;">';
+//    }
+//    echo '<div class="row">';
+//    echo '<div class="small-12 columns">';
+//    echo '</div>';
+//    echo '</div>';
 
-/**
- * Customizer additions.
- */
-require get_template_directory() . '/inc/customizer.php';
+add_action('wp_enqueue_scripts', 'glm_site_scripts');
 
-/**
- * Load Jetpack compatibility file.
- */
-require get_template_directory() . '/inc/jetpack.php';
 
-/**
- * Load Theme Option Frame work files
- */
-require get_template_directory() . '/inc/options-framework/options-framework.php';
+// Start of the Contextual/Highlight Search functions
+function mytheme_init() {
+   remove_action('thematic_searchloop', 'thematic_search_loop');
+}
 
-/**
- * Load woocommerce function
- * */
-require get_template_directory().'/woocommerce/ap-parallax-woocommerce-function.php';
+add_action('init', 'mytheme_init', 10);
 
-require get_template_directory().'/inc/class-tgm-plugin-activation.php';
+function wpse_setup_theme() {
+    add_image_size('glm-block-image', 290, 190,true);
+}
+// add_image_size('subcat_image', 250,125,true);
+add_action( 'after_setup_theme', 'wpse_setup_theme' );
+function mytheme_search_loop() {
+  while ( have_posts() ) : the_post(); ?>
 
-/**
- * Load Welcome Page
- * */
-require get_template_directory().'/welcome/welcome.php';
+    <div id="post-<?php the_ID() ?>" class="<?php thematic_post_class() ?>">
+      <?php thematic_postheader(); ?>
+      <div class="entry-content">
+        <?php thematic_content(); /* We will replace this next */ ?>
 
-function accesspress_parallax_ajax_script(){
-        wp_localize_script( 'accesspress-parallax-ajax', 'ajax_script', array( 'ajaxurl' => admin_url( 'admin-ajax.php' )) );
-     wp_enqueue_script( 'accesspress-parallax-ajax', get_template_directory_uri().'/inc/options-framework/js/ajax.js', 'jquery', true);
+      </div>
+      <?php thematic_postfooter(); ?>
+  </div><!-- .post -->
 
+  <?php endwhile;
 }
-add_action('admin_enqueue_scripts', 'accesspress_parallax_ajax_script');
 
-function accesspress_parallax_get_my_option(){
-       require get_template_directory() . '/inc/ajax.php';
-       die();
+function is_post_type($type){
+    global $wp_query;
+    if($type == get_post_type($wp_query->post->ID)) return true;
+    return false;
 }
 
-add_action("wp_ajax_get_my_option", "accesspress_parallax_get_my_option");
-
-define( 'OPTIONS_FRAMEWORK_DIRECTORY', get_template_directory_uri() . '/inc/options-framework/' );
-
-/* Header for posts*/
-function glm_get_header() {
-    echo '<div';
-
-    if (has_post_thumbnail()  && (!(is_home()) ) && (!(is_single())) && (!(is_archive())) && (!(is_search()))) {
-            $image_data = wp_get_attachment_image_src(get_post_thumbnail_id(), "full");
-            echo ' style="background-image: url('.$image_data[0].');height:300px;padding:0;padding-bottom:300px;background-position:center center;background-size: cover;background-repeat:no-repeat;max-height: 300px; "';
-    
-    } else {
-            echo ' style="background-image: url('.get_template_directory_uri().'/assets/stay.jpg);height:0px;padding:0;padding-bottom:0px;background-position:center center;background-size: cover;background-repeat:no-repeat;max-height: 300px; "';
-            echo ' class="no-featured"';
-    }
-    echo '>';
-    echo '</div>';
-}
-/**
- * Return the client info option for the given key
- *
- * @param type $name Name of the client info option to return
- *
- * @return string Option
- */
-if (!function_exists('glm_get_clientinfo_option')) {
-    function glm_get_clientinfo_option($name)
-    {
-        $settings = get_option('glmclientinfo_settings');
-        $states   = get_option('glmclientinfo_states');
-        if ($name == 'stateFull' && $settings['state']) {
-            return $states[$settings['state']];
-        }
-        if ($name == 'state2Full' && $settings['state2']) {
-            return $states[$settings['state2']];
-        }
-        return ($settings && $settings[$name])
-            ? $settings[$name]
-            : null;
-    }
-}
\ No newline at end of file
+add_action('thematic_searchloop', 'mytheme_search_loop');
+// End of the Contextual/Highlight Search functions
+?>
diff --git a/glm-dev/js/glm-dev.js b/glm-dev/js/glm-dev.js
deleted file mode 100644 (file)
index e8f2ae2..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-jQuery(function($){
-   
-    
-});
\ No newline at end of file
diff --git a/glm-dev/scss/_body.scss b/glm-dev/scss/_body.scss
deleted file mode 100644 (file)
index 6d11b03..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-body{
-    footer#colophon.site-footer{
-        position: relative;
-        #footer-overlay{
-
-        }
-        .bottom-footer{
-            .footer-content{
-                position: relative;
-                max-width: 325px;
-                margin: 0 auto;
-                text-align: center;
-            }
-        }
-    }
-    .main-navigation{
-        ul#menu-main{
-
-            
-        }
-    }
-}
-body.page{
-    #page{
-        #content{
-            @media (min-width: 770px){
-                padding-top: 150px !important;
-            }
-            @media (max-width: 774px){
-                padding-top: 50px !important;
-            }
-            .mid-content{
-                background-color: white;
-                box-shadow: 5px 5px 25px 0 rgba(46,61,73,.2);
-                margin-bottom: 25px ;
-                #primary{
-                    width: 100%;
-                }
-            }
-        }
-    }
-}
\ No newline at end of file
diff --git a/glm-dev/scss/_settings.scss b/glm-dev/scss/_settings.scss
deleted file mode 100644 (file)
index c8fc556..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-$navy : #1B2650;
-$grey : #231F20;
-$blue : #00D3D1;
-$peach: #F28B59;
\ No newline at end of file
diff --git a/glm-dev/scss/glm-dev.scss b/glm-dev/scss/glm-dev.scss
deleted file mode 100644 (file)
index 42b8e06..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-@import 'settings';
-@import 'body';
\ No newline at end of file
diff --git a/glm-member-db-events/views/front/events/eventsFeed.html b/glm-member-db-events/views/front/events/eventsFeed.html
new file mode 100644 (file)
index 0000000..fed0a58
--- /dev/null
@@ -0,0 +1,36 @@
+{if $events}
+<div class="small-12 medium-9 large-10 columns">
+    <h1 id="front-event-feed-title">Featured Events</h1>
+</div>
+<!--<div class="small-12 medium-3 large-2 columns">
+    <a href="{$mainEventUrl}"><button class="view-events-btn">VIEW ALL EVENTS</button></a>
+</div>-->
+<div class="small-12 columns main-events-container">
+    <div id="feed" class="row collapse">
+        {foreach $events as $event}
+        <div class="event small-12 text-left medium-6 large-4 columns">
+            <a href="{$siteBaseUrl}event-detail/{$event.name_slug}/"> <a href="{$siteBaseUrl}event-detail/{$event.name_slug}/"><div style='background: url("{$mainImgUrl}{$event.image}") no-repeat center center;background-size: contain;' class='image-container'></div></a></a>
+            <a class="front-event-link" href="{$siteBaseUrl}event-detail/{$event.name_slug}/"><h6 class="front-event-title">{$event.name}</h6></a>
+
+<!--            <p>{$event.intro}</p>-->
+            <div class="front-event-date-container">
+             {foreach from=$event.times key=myId item=i name=time}
+                {if $smarty.foreach.time.first}
+                    <span class="front-event-date">{$i.start_time.timestamp|date_format:"%b %e"}</span>
+                    {assign var=first value=$i.start_time.timestamp}
+
+                {/if}
+                {if $smarty.foreach.time.last}
+                    {if $first != $i.start_time.timestamp}
+                       <span class="front-event-date"> - {$i.start_time.timestamp|date_format:"%b %e, %Y"} </span>
+                    {/if}
+                {/if}
+             {/foreach}
+            </div>
+            <a class="front-event-button" href="{$siteBaseUrl}event-detail/{$event.name_slug}/">MORE</a>
+            <div class="front-event-border"></div>
+        </div>
+        {/foreach}
+    </div>
+</div>
+{/if}
diff --git a/gulpfile.js b/gulpfile.js
deleted file mode 100644 (file)
index eebce99..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-var gulp = require('gulp');
-var rename = require('gulp-rename');
-var sass = require('gulp-sass');
-var concat = require('gulp-concat');
-var copy = require('gulp-copy');
-var uglify = require('gulp-uglify');
-var jshint = require('gulp-jshint');
-var clean = require('gulp-clean');
-var maps = require('gulp-sourcemaps');
-var babel = require("gulp-babel");
-var jade = require('gulp-jade-php');
-
-var sassPaths = [
-  'bower_components/foundation-sites/scss',
-];
-
-function swallowError (error) {
-  // If you want details of the error in the console
-  console.log(error.toString())
-  this.emit('end')
-}
-
-function swallowError (error) {
-  // If you want details of the error in the console
-  console.log(error.toString());
-  this.emit('end');
-}
-gulp.task('sass', function() {
-  return gulp.src('glm-dev/scss/glm-dev.scss')
-    .pipe(maps.init())
-    .on('error', swallowError)
-    .pipe(sass({
-    //   includePaths: sassPaths ,
-      outputStyle: 'compressed'
-  })).on('error', swallowError)
-    .pipe(maps.write('.'))
-    .pipe(gulp.dest('assets/css'));
-});
-
-gulp.task('lint', function (){
-    return gulp.src('glm-dev/js/*.js')
-        .pipe(jshint())
-        .on('error', swallowError)
-        .pipe(jshint.reporter('default'));
-});
-
-gulp.task("concat-uglify", function (){
-    return gulp.src(['glm-dev/js/**/*.js'])
-        .pipe(concat('glm-dev.js'))
-        .pipe(uglify())
-        .pipe(gulp.dest('assets/js'));
-});
-// gulp.task('clean', function (){
-//    return gulp.src(['js/foundation.min.js', 'js/motion-ui.min.js', 'js/what-input.min.js','js/custom/dist.js' ,'js/app.js','css/app.css','css/app.css.map','js/transpiled/dist.js'], {read: false})
-//         .pipe(clean());
-// });
-gulp.task('watch', function () {
-  gulp.watch('glm-dev/js/**/*.js',['concat-uglify', 'lint']);
-  gulp.watch('glm-dev/scss/**/*.{scss,sass}', ['sass']);
-});
-gulp.task('build', ["copy-bower","sass"]);
-gulp.task('runwatch', ["sass", "concat-uglify","lint"]);
-gulp.task('default', ["runwatch","watch"]);
\ No newline at end of file
diff --git a/header.php b/header.php
deleted file mode 100644 (file)
index 456a9a9..0000000
+++ /dev/null
@@ -1,113 +0,0 @@
-<?php
-/**
- * The header for our theme.
- *
- * Displays all of the <head> section and everything up till <div id="content">
- *
- * @package accesspress_parallax
- */
-?>
-<!DOCTYPE html>
-<html <?php language_attributes(); ?>>
-<head>
-<meta charset="<?php bloginfo( 'charset' ); ?>">
-<meta name="viewport" content="width=device-width, initial-scale=1">
-<link rel="profile" href="http://gmpg.org/xfn/11">
-<link rel="pingback" href="<?php bloginfo( 'pingback_url' ); ?>">
-<!--[if lt IE 9]>
-       <script src="<?php echo get_template_directory_uri(); ?>/js/html5shiv.js"></script>
-<![endif]-->
-<link href='https://fonts.googleapis.com/css?family=Montserrat:400,400italic,700' rel='stylesheet' type='text/css'>
-<?php wp_head(); ?>
-</head>
-
-<body <?php body_class(); ?>>
-<div id="page" class="hfeed site">
-    
-       <header id="masthead" class="<?php echo of_get_option('header_layout'); ?>">
-               <div class="mid-content clearfix">
-        
-        <div class="flex-box">
-               <div id="site-logo">
-               <?php if ( get_header_image() ) : ?>
-               <a href="<?php echo esc_url( home_url( '/' ) ); ?>" rel="home">
-                       <img src="<?php header_image(); ?>" alt="<?php bloginfo( 'name' ); ?>">
-               </a>
-               <?php else:?>
-                       <h1 class="site-title"><a href="<?php echo esc_url( home_url( '/' ) ); ?>" rel="home"><?php bloginfo( 'name' ); ?></a></h1>
-                       <h2 class="site-description"><?php bloginfo( 'description' ); ?></h2>
-               <?php endif; ?>
-               </div>
-
-               <nav id="site-navigation" class="main-navigation">
-        
-               <div class="menu-toggle"><?php _e( 'Menu', 'accesspress-parallax' ); ?></div>
-                                       
-                       <?php 
-                       $sections = of_get_option('parallax_section');
-            // if((of_get_option('enable_parallax') == 1 && of_get_option('enable_parallax_nav') == 1) || (is_page_template('home-page.php') && of_get_option('enable_parallax_nav') == 1)):
-            if(false):
-                       ?>
-                       <ul class="nav single-page-nav">
-            
-                               <?php
-                               $home_text = of_get_option('home_text');
-                               if(of_get_option('show_slider')== "yes" && !empty($home_text)) : 
-                                       if(function_exists('pll__')){
-                                               $home_text = pll__($home_text);
-                                       }
-                                       ?>
-                                       <li class="current"><a href="<?php echo esc_url( home_url( '/' ) ); ?>#main-slider"><?php echo esc_html($home_text); ?></a></li>
-                               <?php endif;
-                               
-                               if(!empty($sections)):
-                               foreach ($sections as $single_sections): 
-                                       if($single_sections['layout'] != "action_template" && $single_sections['layout'] != "blank_template" && $single_sections['layout'] != "googlemap_template" && !empty($single_sections['page'])) :
-                                               if(function_exists('pll_get_post')){
-                                                       $title_id = pll_get_post($single_sections['page']);
-                                                       $title = empty($title_id) ? get_the_title($single_sections['page']) : get_the_title($title_id);
-                                               }else{
-                                                       $title = get_the_title($single_sections['page']); 
-                                               }       
-                                               ?>
-                                               <li><a href="<?php echo esc_url( home_url( '/' ) ); ?>#section-<?php echo $single_sections['page']; ?>"><?php echo esc_html($title); ?></a></li>
-                                       <?php 
-                                       endif;
-                               endforeach; 
-                               endif; ?>
-                       </ul>
-            
-                       <?php   
-                       else: 
-                               wp_nav_menu( array( 
-                               'theme_location' => 'primary' , 
-                               'container'      => false
-                               ) );
-                       endif; ?>
-            
-        </nav><!-- #site-navigation -->
-        </div>
-               </div>
-
-
-               <?php 
-               if(of_get_option('show_social') == 1):
-                       do_action('accesspress_social');
-               endif; ?>
-        
-       </header><!-- #masthead -->
-
-       <?php 
-       $accesspress_show_slider = of_get_option('show_slider') ;
-       $content_class = "";
-       if(empty($accesspress_show_slider) || $accesspress_show_slider == "no"):
-               $content_class = "no-slider";
-       endif;
-       ?>
-    <div id="content" class="site-content <?php echo esc_attr($content_class); ?>">
-    <div class="content-overlay"></div>
-       <?php 
-       if(is_home() || is_front_page()) :
-               do_action('accesspress_bxslider'); 
-       endif;
-       ?>
diff --git a/home-page.php b/home-page.php
deleted file mode 100644 (file)
index d4d67d8..0000000
+++ /dev/null
@@ -1,111 +0,0 @@
-<?php
-/**
- * Template Name: Home Page
- *
- * @package accesspress_parallax
- */
-
-get_header();
-       $sections = of_get_option('parallax_section');
-    $count = 0;
-       if(!empty($sections)):
-       foreach ($sections as $section) :
-               $page = get_post( $section['page'] ); 
-               $overlay = $section['overlay'];
-               $image = $section['image'];
-               $layout = $section['layout'];
-               $category = $section['category']; 
-               $googlemapclass = $layout == "googlemap_template" ? " google-map" : "";
-       ?>
-
-       <?php if(!empty($section['page'])): ?>
-               <section class="parallax-section clearfix<?php echo esc_attr($googlemapclass)." ".esc_attr($layout);  ?>" id="<?php echo "section-".absint($page->ID); ?>">
-               <?php if(!empty($image) && $overlay!="overlay0") : ?>
-                       <div class="overlay"></div>
-               <?php endif; ?>
-
-               <?php if($layout != "googlemap_template") :?>
-                       <div class="mid-content">
-               <?php endif; ?>
-                       <?php  
-                   $query = new WP_Query( 'page_id='.$section['page'] );
-                   while ( $query->have_posts() ) : $query->the_post();
-               ?>
-                               <?php 
-                               if($layout != "action_template" && $layout != "blank_template" && $layout != "googlemap_template"): ?>
-                                       <h2><span><?php the_title(); ?></span></h2>
-
-                                       <div class="parallax-content">
-                                       <?php if(get_the_content() != "") : ?>
-                                               <div class="page-content">
-                                               <?php the_content(); ?>
-                                               </div>
-                                       <?php endif; ?>
-                                       </div> 
-                               <?php endif; ?>
-                       <?php 
-                       endwhile;    
-               ?>
-
-                                       <?php 
-                                               switch ($layout) {
-                                                       case 'default_template':
-                                                               $template = "layouts/default";
-                                                               break;
-
-                                                       case 'service_template':
-                                                               $template = "layouts/service";
-                                                               break;
-
-                                                       case 'team_template':
-                                                               $template = "layouts/team";
-                                                               break;
-
-                                                       case 'portfolio_template':
-                                                               $template = "layouts/portfolio";
-                                                               break;
-
-                                                       case 'testimonial_template':
-                                                               $template = "layouts/testimonial";
-                                                               break;
-
-                                                       case 'action_template':
-                                                               $template = "layouts/action";
-                                                               break;
-
-                                                       case 'blank_template':
-                                                               $template = "layouts/blank";
-                                                               break;
-
-                                                       case 'googlemap_template':
-                                                               $template = "layouts/googlemap";
-                                                               break;
-
-                                                       case 'blog_template':
-                                                               $template = "layouts/blog";
-                                                               break;
-                                                       
-                                                       default:
-                                                               $template = "layouts/default";
-                                                               break;
-                                               }
-                                       ?>
-
-                                       <?php include(locate_template($template."-section.php"));?>
-                       
-                       <?php if($layout != "googlemap_template") :?>
-                       </div>
-            <?php endif; ?>
-            <?php  if($count === 0){ ?>
-            <?php } ?>
-               </section>
-       <?php
-    endif; 
-    $count++;
-       endforeach;
-       endif;
-?>
-
-<?php get_footer();
\ No newline at end of file
diff --git a/images/bg.png b/images/bg.png
deleted file mode 100644 (file)
index 684447f..0000000
Binary files a/images/bg.png and /dev/null differ
diff --git a/images/controls.png b/images/controls.png
deleted file mode 100644 (file)
index dbafdb5..0000000
Binary files a/images/controls.png and /dev/null differ
diff --git a/images/demo/bg1.jpg b/images/demo/bg1.jpg
deleted file mode 100644 (file)
index 2ad462c..0000000
Binary files a/images/demo/bg1.jpg and /dev/null differ
diff --git a/images/demo/bg2.jpg b/images/demo/bg2.jpg
deleted file mode 100644 (file)
index b6ce00d..0000000
Binary files a/images/demo/bg2.jpg and /dev/null differ
diff --git a/images/demo/bg3.jpg b/images/demo/bg3.jpg
deleted file mode 100644 (file)
index 34eca5a..0000000
Binary files a/images/demo/bg3.jpg and /dev/null differ
diff --git a/images/demo/bg4.jpg b/images/demo/bg4.jpg
deleted file mode 100644 (file)
index 2ea3f00..0000000
Binary files a/images/demo/bg4.jpg and /dev/null differ
diff --git a/images/demo/icon1.png b/images/demo/icon1.png
deleted file mode 100644 (file)
index b16d3ba..0000000
Binary files a/images/demo/icon1.png and /dev/null differ
diff --git a/images/demo/icon2.png b/images/demo/icon2.png
deleted file mode 100644 (file)
index d65df7c..0000000
Binary files a/images/demo/icon2.png and /dev/null differ
diff --git a/images/demo/icon3.png b/images/demo/icon3.png
deleted file mode 100644 (file)
index 81541d2..0000000
Binary files a/images/demo/icon3.png and /dev/null differ
diff --git a/images/demo/icon4.png b/images/demo/icon4.png
deleted file mode 100644 (file)
index 712a1c2..0000000
Binary files a/images/demo/icon4.png and /dev/null differ
diff --git a/images/demo/icon5.png b/images/demo/icon5.png
deleted file mode 100644 (file)
index f0c417e..0000000
Binary files a/images/demo/icon5.png and /dev/null differ
diff --git a/images/demo/icon6.png b/images/demo/icon6.png
deleted file mode 100644 (file)
index bae29c9..0000000
Binary files a/images/demo/icon6.png and /dev/null differ
diff --git a/images/demo/portfolio1.jpg b/images/demo/portfolio1.jpg
deleted file mode 100644 (file)
index a0d85a8..0000000
Binary files a/images/demo/portfolio1.jpg and /dev/null differ
diff --git a/images/demo/portfolio2.jpg b/images/demo/portfolio2.jpg
deleted file mode 100644 (file)
index 7b83f59..0000000
Binary files a/images/demo/portfolio2.jpg and /dev/null differ
diff --git a/images/demo/portfolio3.jpg b/images/demo/portfolio3.jpg
deleted file mode 100644 (file)
index f1c2674..0000000
Binary files a/images/demo/portfolio3.jpg and /dev/null differ
diff --git a/images/demo/portfolio4.jpg b/images/demo/portfolio4.jpg
deleted file mode 100644 (file)
index 1022b6d..0000000
Binary files a/images/demo/portfolio4.jpg and /dev/null differ
diff --git a/images/demo/portfolio5.jpg b/images/demo/portfolio5.jpg
deleted file mode 100644 (file)
index 6a95d01..0000000
Binary files a/images/demo/portfolio5.jpg and /dev/null differ
diff --git a/images/demo/portfolio6.jpg b/images/demo/portfolio6.jpg
deleted file mode 100644 (file)
index 94dfa5a..0000000
Binary files a/images/demo/portfolio6.jpg and /dev/null differ
diff --git a/images/demo/portfolio7.jpg b/images/demo/portfolio7.jpg
deleted file mode 100644 (file)
index 9fad1bf..0000000
Binary files a/images/demo/portfolio7.jpg and /dev/null differ
diff --git a/images/demo/portfolio8.jpg b/images/demo/portfolio8.jpg
deleted file mode 100644 (file)
index 45dc756..0000000
Binary files a/images/demo/portfolio8.jpg and /dev/null differ
diff --git a/images/demo/slider1.jpg b/images/demo/slider1.jpg
deleted file mode 100644 (file)
index ef1ee93..0000000
Binary files a/images/demo/slider1.jpg and /dev/null differ
diff --git a/images/demo/slider2.jpg b/images/demo/slider2.jpg
deleted file mode 100644 (file)
index f552f3f..0000000
Binary files a/images/demo/slider2.jpg and /dev/null differ
diff --git a/images/demo/team1.jpg b/images/demo/team1.jpg
deleted file mode 100644 (file)
index 8acc1ab..0000000
Binary files a/images/demo/team1.jpg and /dev/null differ
diff --git a/images/demo/team2.jpg b/images/demo/team2.jpg
deleted file mode 100644 (file)
index eb64cc2..0000000
Binary files a/images/demo/team2.jpg and /dev/null differ
diff --git a/images/demo/team3.jpg b/images/demo/team3.jpg
deleted file mode 100644 (file)
index a994c68..0000000
Binary files a/images/demo/team3.jpg and /dev/null differ
diff --git a/images/demo/team4.jpg b/images/demo/team4.jpg
deleted file mode 100644 (file)
index b9c54ca..0000000
Binary files a/images/demo/team4.jpg and /dev/null differ
diff --git a/images/demo/team5.jpg b/images/demo/team5.jpg
deleted file mode 100644 (file)
index cde703f..0000000
Binary files a/images/demo/team5.jpg and /dev/null differ
diff --git a/images/demo/team6.jpg b/images/demo/team6.jpg
deleted file mode 100644 (file)
index 0b0427b..0000000
Binary files a/images/demo/team6.jpg and /dev/null differ
diff --git a/images/demo/team7.jpg b/images/demo/team7.jpg
deleted file mode 100644 (file)
index 38a71d1..0000000
Binary files a/images/demo/team7.jpg and /dev/null differ
diff --git a/images/demo/testimonial1.jpg b/images/demo/testimonial1.jpg
deleted file mode 100644 (file)
index 1d34924..0000000
Binary files a/images/demo/testimonial1.jpg and /dev/null differ
diff --git a/images/demo/testimonial2.jpg b/images/demo/testimonial2.jpg
deleted file mode 100644 (file)
index 35561e9..0000000
Binary files a/images/demo/testimonial2.jpg and /dev/null differ
diff --git a/images/demo/testimonial3.jpg b/images/demo/testimonial3.jpg
deleted file mode 100644 (file)
index bf1a006..0000000
Binary files a/images/demo/testimonial3.jpg and /dev/null differ
diff --git a/images/down-arrow.png b/images/down-arrow.png
deleted file mode 100644 (file)
index 194b9ba..0000000
Binary files a/images/down-arrow.png and /dev/null differ
diff --git a/images/dummy.png b/images/dummy.png
deleted file mode 100644 (file)
index 8268b0d..0000000
Binary files a/images/dummy.png and /dev/null differ
diff --git a/images/menu.png b/images/menu.png
deleted file mode 100644 (file)
index cbb7a69..0000000
Binary files a/images/menu.png and /dev/null differ
diff --git a/images/no-image.jpg b/images/no-image.jpg
deleted file mode 100644 (file)
index 995d940..0000000
Binary files a/images/no-image.jpg and /dev/null differ
diff --git a/images/overlay1.png b/images/overlay1.png
deleted file mode 100644 (file)
index 53b5f3d..0000000
Binary files a/images/overlay1.png and /dev/null differ
diff --git a/images/overlay2.png b/images/overlay2.png
deleted file mode 100644 (file)
index 9364047..0000000
Binary files a/images/overlay2.png and /dev/null differ
diff --git a/images/overlay3.png b/images/overlay3.png
deleted file mode 100644 (file)
index e556eb4..0000000
Binary files a/images/overlay3.png and /dev/null differ
diff --git a/images/overlay4.png b/images/overlay4.png
deleted file mode 100644 (file)
index cd5ac78..0000000
Binary files a/images/overlay4.png and /dev/null differ
diff --git a/images/portfolio-text-bg.png b/images/portfolio-text-bg.png
deleted file mode 100644 (file)
index b777e67..0000000
Binary files a/images/portfolio-text-bg.png and /dev/null differ
diff --git a/images/zoom.png b/images/zoom.png
deleted file mode 100644 (file)
index 6741a9a..0000000
Binary files a/images/zoom.png and /dev/null differ
diff --git a/inc/accesspress-functions.php b/inc/accesspress-functions.php
deleted file mode 100644 (file)
index 064fafc..0000000
+++ /dev/null
@@ -1,330 +0,0 @@
-<?php
-/**
- * Custom functions that act independently of the theme templates
- *
- * Eventually, some of the functionality here could be replaced by core features
- *
- * @package accesspress_parallax
- */
-
-/**
- * Get our wp_nav_menu() fallback, wp_page_menu(), to show a home link.
- *
- * @param array $args Configuration arguments.
- * @return array
- */
-function accesspress_parallax_page_menu_args( $args ) {
-       $args['show_home'] = true;
-       return $args;
-}
-add_filter( 'wp_page_menu_args', 'accesspress_parallax_page_menu_args' );
-
-/**
- * Adds custom classes to the array of body classes.
- *
- * @param array $classes Classes for the body element.
- * @return array
- */
-function accesspress_parallax_body_classes( $classes ) {
-       // Adds a class of group-blog to blogs with more than 1 published author.
-       if ( is_multi_author() ) {
-               $classes[] = 'group-blog';
-       }
-
-       return $classes;
-}
-add_filter( 'body_class', 'accesspress_parallax_body_classes' );
-
-/**
- * Sets the authordata global when viewing an author archive.
- *
- * This provides backwards compatibility with
- * http://core.trac.wordpress.org/changeset/25574
- *
- * It removes the need to call the_post() and rewind_posts() in an author
- * template to print information about the author.
- *
- * @global WP_Query $wp_query WordPress Query object.
- * @return void
- */
-function accesspress_parallax_setup_author() {
-       global $wp_query;
-
-       if ( $wp_query->is_author() && isset( $wp_query->post ) ) {
-               $GLOBALS['authordata'] = get_userdata( $wp_query->post->post_author );
-       }
-}
-add_action( 'wp', 'accesspress_parallax_setup_author' );
-
-//bxSlider Callback for do action
-function accesspress_parallax_bxslidercb(){
-               global $post;
-               $accesspress_parallax = of_get_option('parallax_section');
-               if(!empty($accesspress_parallax)) :
-                       $accesspress_parallax_first_page_array = array_slice($accesspress_parallax, 0, 1);
-                       $accesspress_parallax_first_page = $accesspress_parallax_first_page_array[0]['page'];
-               endif;
-               $accesspress_slider_category = of_get_option('slider_category');
-               $accesspress_slider_full_window = of_get_option('slider_full_window') ;
-               $accesspress_show_slider = of_get_option('show_slider') ;
-               $accesspress_show_caption = of_get_option('show_caption') ;
-               $accesspress_enable_parallax = of_get_option('enable_parallax');
-               ?>
-
-               <?php if( $accesspress_show_slider == "yes" || empty($accesspress_show_slider)) : ?>
-               <section id="main-slider" class="full-screen-<?php echo $accesspress_slider_full_window; ?>">
-
-               <?php if(!empty($accesspress_parallax_first_page) && $accesspress_enable_parallax == 1): ?>
-               <div class="next-page"><a href="<?php echo esc_url( home_url( '/' ) ); ?>#section-<?php echo esc_attr($accesspress_parallax_first_page); ?>"></a></div>
-               <?php endif;
-               
-               if( !empty($accesspress_slider_category)) :
-
-                               $loop = new WP_Query(array(
-                                               'cat' => $accesspress_slider_category,
-                                               'posts_per_page' => -1
-                                       ));
-                                       if($loop->have_posts()) : ?>
-
-                                       <div class="bx-slider">
-                                       <?php
-                                       while($loop->have_posts()) : $loop-> the_post(); 
-                                       $image = wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), 'full', false ); 
-                                       $image_url = "";
-                                       if($accesspress_slider_full_window == "yes") : 
-                                               $image_url =  "style = 'background-image:url(".esc_url($image[0]).");'";
-                                   endif;
-                                       ?>
-                                       <div class="main-slides" <?php echo $image_url; ?>>
-                                       
-                                       <?php if($accesspress_slider_full_window == "no") : ?>          
-                                               <img src="<?php echo esc_url($image[0]); ?>">
-                                       <?php endif; ?>
-                                                               
-                                               <?php if($accesspress_show_caption == 'yes'): ?>
-                                               <div class="slider-caption">
-                                                       <div class="mid-content">
-                                                               <div class="caption-title"><?php the_title();?></div>
-                                                               <div class="caption-description"><?php the_content();?></div>
-                                                       </div>
-                                               </div>
-                                               <?php endif; ?>
-                               
-                               </div>
-                                       <?php endwhile; ?>
-                                       </div>
-                                       <?php endif; ?>
-                       <?php else: ?>
-
-            <div class="bx-slider">
-                               <div class="main-slides">
-                                       <img src="<?php echo get_template_directory_uri(); ?>/images/demo/slider1.jpg" alt="slider1">
-                                       <div class="slider-caption">
-                                               <div class="mid-content">
-                                                       <h1 class="caption-title"><?php _e('Welcome to AccessPress Parallax!','accesspress-parallax'); ?></h1>
-                                                       <h2 class="caption-description">
-                                                       <p><?php _e('A full featured parallax theme - and its absolutely free!','accesspress-parallax'); ?></p>
-                                                       <p><a href="#"><?php _e('Read More','accesspress-parallax'); ?></a></p>
-                                                       </h2>
-                                               </div>
-                                       </div>
-                               </div>
-                                               
-                               <div class="main-slides">
-                                       <img src="<?php echo get_template_directory_uri(); ?>/images/demo/slider2.jpg" alt="slider2">
-                                       <div class="slider-caption">
-                                               <div class="ak-container">
-                                                       <h1 class="caption-title"><?php _e('Amazing multi-purpose parallax theme','accesspress-parallax'); ?></h1>
-                                                       <h2 class="caption-description">
-                                                       <p><?php _e('Travel, corporate, small biz, portfolio, agencies, photography, health, creative - useful for anyone and everyone','accesspress-parallax'); ?></p>
-                                                       <p><a href="#"><?php _e('Read More','accesspress-parallax'); ?></a></p>
-                                                       </h2>
-                                                       </div>
-                                       </div>
-                               </div>
-                       </div>
-
-                       <?php  endif; ?>
-               </section>
-               <?php endif; ?>
-<?php
-}
-
-add_action('accesspress_bxslider','accesspress_parallax_bxslidercb', 10);
-
-
-//add class for parallax
-function accesspress_is_parallax($class){
-       $is_parallax = of_get_option('enable_parallax');
-       if($is_parallax=='1' || is_page_template('home-page.php')):
-               $class[] = "parallax-on"; 
-       endif;
-       return $class;
-}
-
-add_filter('body_class','accesspress_is_parallax');
-
-
-//Dynamic styles on header
-function accesspress_header_styles_scripts(){
-       $sections = array();
-       $sections = of_get_option('parallax_section');
-       $favicon = of_get_option('fav_icon');
-       $custom_css = of_get_option('custom_css');
-       $slider_overlay = of_get_option('slider_overlay');
-       $image_url = get_template_directory_uri()."/images/";
-       $dyamic_style = "";
-       echo "<link type='image/png' rel='icon' href='".esc_url($favicon)."'/>\n";
-       echo "<style type='text/css' media='all'>"; 
-
-       if(!empty($sections)){
-       foreach ($sections as $section) {
-               $dyamic_style .= "#section-".$section['page']."{ background:url(".$section['image'].") ".$section['repeat']." ".$section['attachment']." ".$section['position']." ".$section['color']."; background-size:".$section['size']."; color:".$section['font_color']."}\n";
-               $dyamic_style .= "#section-".$section['page']." .overlay { background:url(".$image_url.$section['overlay'].".png);}\n";
-       }
-       }
-
-       if($slider_overlay == "yes"){
-               $dyamic_style .= "#main-slider .main-slides:after{display:none};";
-       }
-       echo esc_textarea($dyamic_style);
-       echo esc_textarea($custom_css);
-
-       echo "</style>\n"; 
-
-       echo "<script>\n";
-       if(of_get_option('enable_animation') == '1' && is_front_page()) : ?>
-    jQuery(document).ready(function($){
-       wow = new WOW(
-        {
-          offset:  200 
-        }
-      )
-      wow.init();
-    });
-    <?php endif;
-       echo "</script>\n";
-}
-
-add_action('wp_head','accesspress_header_styles_scripts');
-
-function accesspress_footer_count(){
-       $count = 0;
-       if(is_active_sidebar('footer-1'))
-       $count++;
-
-       if(is_active_sidebar('footer-2'))
-       $count++;
-
-       if(is_active_sidebar('footer-3'))
-       $count++;
-
-       if(is_active_sidebar('footer-4'))
-       $count++;
-
-       return $count;
-}
-
-
-function accesspress_social_cb(){
-       $facebooklink = of_get_option('facebook');
-       $twitterlink = of_get_option('twitter');
-       $google_pluslink = of_get_option('google_plus');
-       $youtubelink = of_get_option('youtube');
-       $pinterestlink = of_get_option('pinterest');
-       $linkedinlink = of_get_option('linkedin');
-       $flickrlink = of_get_option('flickr');
-       $vimeolink = of_get_option('vimeo');
-       $instagramlink = of_get_option('instagram');
-       $skypelink = of_get_option('skype');
-       ?>
-       <div class="social-icons">
-               <?php if(!empty($facebooklink)){ ?>
-               <a href="<?php echo esc_url($facebooklink); ?>" class="facebook" data-title="Facebook" target="_blank"><i class="fa fa-facebook"></i><span></span></a>
-               <?php } ?>
-
-               <?php if(!empty($twitterlink)){ ?>
-               <a href="<?php echo esc_url($twitterlink); ?>" class="twitter" data-title="Twitter" target="_blank"><i class="fa fa-twitter"></i><span></span></a>
-               <?php } ?>
-
-               <?php if(!empty($google_pluslink)){ ?>
-               <a href="<?php echo esc_url($google_pluslink); ?>" class="gplus" data-title="Google Plus" target="_blank"><i class="fa fa-google-plus"></i><span></span></a>
-               <?php } ?>
-
-               <?php if(!empty($youtubelink)){ ?>
-               <a href="<?php echo esc_url($youtubelink); ?>" class="youtube" data-title="Youtube" target="_blank"><i class="fa fa-youtube"></i><span></span></a>
-               <?php } ?>
-
-               <?php if(!empty($pinterestlink)){ ?>
-               <a href="<?php echo esc_url($pinterestlink); ?>" class="pinterest" data-title="Pinterest" target="_blank"><i class="fa fa-pinterest"></i><span></span></a>
-               <?php } ?>
-
-               <?php if(!empty($linkedinlink)){ ?>
-               <a href="<?php echo esc_url($linkedinlink); ?>" class="linkedin" data-title="Linkedin" target="_blank"><i class="fa fa-linkedin"></i><span></span></a>
-               <?php } ?>
-
-               <?php if(!empty($flickrlink)){ ?>
-               <a href="<?php echo esc_url($flickrlink); ?>" class="flickr" data-title="Flickr" target="_blank"><i class="fa fa-flickr"></i><span></span></a>
-               <?php } ?>
-
-               <?php if(!empty($vimeolink)){ ?>
-               <a href="<?php echo esc_url($vimeolink); ?>" class="vimeo" data-title="Vimeo" target="_blank"><i class="fa fa-vimeo-square"></i><span></span></a>
-               <?php } ?>
-
-               <?php if(!empty($instagramlink)){ ?>
-               <a href="<?php echo esc_url($instagramlink); ?>" class="instagram" data-title="instagram" target="_blank"><i class="fa fa-instagram"></i><span></span></a>
-               <?php } ?>
-               
-               <?php if(!empty($skypelink)){ ?>
-               <a href="<?php echo "skype:".esc_attr($skypelink) ?>" class="skype" data-title="Skype"><i class="fa fa-skype"></i><span></span></a>
-               <?php } ?>
-       </div>
-
-       <script>
-       jQuery(document).ready(function($){
-               $(window).resize(function(){
-                        var socialHeight = $('.social-icons').outerHeight();
-                        $('.social-icons').css('margin-top',-(socialHeight/2));
-               }).resize();
-       });
-       </script>
-<?php
-}
-add_action('accesspress_social','accesspress_social_cb', 10);
-
-function accesspress_remove_page_menu_div( $menu ){
-    return preg_replace( array( '#^<div[^>]*>#', '#</div>$#' ), '', $menu );
-}
-add_filter( 'wp_page_menu', 'accesspress_remove_page_menu_div' );
-
-function accesspress_customize_excerpt_more( $more ) {
-       return '...';
-}
-add_filter('excerpt_more', 'accesspress_customize_excerpt_more');
-
-function accesspress_word_count($string, $limit) {
-       $words = explode(' ', $string);
-       return implode(' ', array_slice($words, 0, $limit));
-}
-
-function accesspress_letter_count($content, $limit) {
-       $striped_content = strip_tags($content);
-       $striped_content = strip_shortcodes($striped_content);
-       $limit_content = mb_substr($striped_content, 0 , $limit );
-
-       if( strlen($limit_content) < strlen($content) ){
-               $limit_content .= "..."; 
-       }
-       return $limit_content;
-}
-
-
-
-function accesspress_register_string(){
-       if(function_exists('pll_register_string')){
-               $home_text = of_get_option('home_text');
-               pll_register_string('Menu: Home Text', $home_text ,'Theme Option Text');
-       }
-}
-
-add_action('after_setup_theme','accesspress_register_string');
diff --git a/inc/accesspress-header.php b/inc/accesspress-header.php
deleted file mode 100644 (file)
index c3e3ca1..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
-<?php
-/**
- * Sample implementation of the Custom Header feature
- * http://codex.wordpress.org/Custom_Headers
- *
- * @package accesspress_parallax
- */
-
-/**
- * Setup the WordPress core custom header feature.
- *
- * @uses accesspress_parallax_header_style()
- * @uses accesspress_parallax_admin_header_style()
- * @uses accesspress_parallax_admin_header_image()
- */
-function accesspress_parallax_custom_header_setup() {
-       add_theme_support( 'custom-header', apply_filters( 'accesspress_parallax_custom_header_args', array(
-               'default-image'          => '',
-               'default-text-color'     => '000000',
-               'width'                  => 250,
-               'height'                 => 170,
-               'flex-width'             => true,
-               'flex-height'            => true,
-               'wp-head-callback'       => 'accesspress_parallax_header_style',
-               'admin-head-callback'    => 'accesspress_parallax_admin_header_style',
-               'admin-preview-callback' => 'accesspress_parallax_admin_header_image',
-       ) ) );
-}
-add_action( 'after_setup_theme', 'accesspress_parallax_custom_header_setup' );
-
-if ( ! function_exists( 'accesspress_parallax_header_style' ) ) :
-/**
- * Styles the header image and text displayed on the blog
- *
- * @see accesspress_parallax_custom_header_setup().
- */
-function accesspress_parallax_header_style() {
-       $header_text_color = get_header_textcolor();
-
-       // If no custom options for text are set, let's bail
-       // get_header_textcolor() options: HEADER_TEXTCOLOR is default, hide text (returns 'blank') or any hex value
-       if ( HEADER_TEXTCOLOR == $header_text_color ) {
-               return;
-       }
-
-       // If we get this far, we have custom styles. Let's do this.
-       ?>
-       <style type="text/css">
-       <?php
-               // Has the text been hidden?
-               if ( 'blank' == $header_text_color ) :
-       ?>
-               .site-title,
-               .site-description {
-                       position: absolute;
-                       clip: rect(1px, 1px, 1px, 1px);
-               }
-       <?php
-               // If the user has set a custom color for the text use that
-               else :
-       ?>
-               .site-title a,
-               .site-description {
-                       color: #<?php echo $header_text_color; ?>;
-               }
-       <?php endif; ?>
-       </style>
-       <?php
-}
-endif; // accesspress_parallax_header_style
-
-if ( ! function_exists( 'accesspress_parallax_admin_header_style' ) ) :
-/**
- * Styles the header image displayed on the Appearance > Header admin panel.
- *
- * @see accesspress_parallax_custom_header_setup().
- */
-function accesspress_parallax_admin_header_style() {
-?>
-       <style type="text/css">
-               .appearance_page_custom-header #headimg {
-                       border: none;
-               }
-               #headimg h1,
-               #desc {
-               }
-               #headimg h1 {
-               }
-               #headimg h1 a {
-               }
-               #desc {
-               }
-               #headimg img {
-               }
-       </style>
-<?php
-}
-endif; // accesspress_parallax_admin_header_style
-
-if ( ! function_exists( 'accesspress_parallax_admin_header_image' ) ) :
-/**
- * Custom header image markup displayed on the Appearance > Header admin panel.
- *
- * @see accesspress_parallax_custom_header_setup().
- */
-function accesspress_parallax_admin_header_image() {
-       $style = sprintf( ' style="color:#%s;"', get_header_textcolor() );
-?>
-       <div id="headimg">
-               <h1 class="displaying-header-text"><a id="name"<?php echo $style; ?> onclick="return false;" href="<?php echo esc_url( home_url( '/' ) ); ?>"><?php bloginfo( 'name' ); ?></a></h1>
-               <div class="displaying-header-text" id="desc"<?php echo $style; ?>><?php bloginfo( 'description' ); ?></div>
-               <?php if ( get_header_image() ) : ?>
-               <img src="<?php header_image(); ?>" alt="">
-               <?php endif; ?>
-       </div>
-<?php
-}
-endif; // accesspress_parallax_admin_header_image
diff --git a/inc/accesspress-options.php b/inc/accesspress-options.php
deleted file mode 100644 (file)
index d9ae622..0000000
+++ /dev/null
@@ -1,355 +0,0 @@
-<?php
-/**
- * Defines an array of options that will be used to generate the settings page and be saved in the database.
- * When creating the 'id' fields, make sure to use all lowercase and no spaces.
- *
- * If you are making your theme translatable, you should replace 'accesspress_parallax'
- * with the actual text domain for your theme.  Read more:
- * http://codex.wordpress.org/Function_Reference/load_theme_textdomain
- */
-
-function optionsframework_options() {
-
-       // Test data
-       $transitions = array(
-               'fade' => __('Fade', 'accesspress-parallax'),
-               'horizontal' => __('Slide Horizontal', 'accesspress-parallax'),
-       );
-
-       $overlay = array(
-               'overlay0' => __( 'No Overlay', 'accesspress-parallax' ),
-               'overlay1' => __( 'Small Dotted', 'accesspress-parallax' ),
-               'overlay2'  => __( 'Large Dotted', 'accesspress-parallax'),
-               'overlay3'  => __( 'Light Black', 'accesspress-parallax'),
-               'overlay4'  => __( 'Black Dotted', 'accesspress-parallax')
-       );
-
-       $section_template = array(
-               'default_template' => __('Default Section', 'accesspress-parallax'),
-               'service_template' => __('Service Section', 'accesspress-parallax'),
-               'team_template' => __('Team Section', 'accesspress-parallax'),
-               'portfolio_template' => __('Portfolio Section', 'accesspress-parallax'),
-               'testimonial_template' => __('Testimonial Section', 'accesspress-parallax'),
-               'blog_template' => __('Blog Section', 'accesspress-parallax'),
-               'action_template' => __('Call to Action Section', 'accesspress-parallax'),
-               'googlemap_template' => __('Google Map Section', 'accesspress-parallax'),
-               'blank_template' => __('Blank Section', 'accesspress-parallax'),
-       );
-
-       $check = array(
-               'yes' => __('Yes', 'accesspress-parallax'),
-               'no' => __('No', 'accesspress-parallax')
-       );
-
-       // Background Defaults
-       $background_defaults = array(
-               'color' => '',
-               'image' => '',
-               'repeat' => 'repeat',
-               'position' => 'top center',
-               'attachment'=>'scroll',
-               'size' => 'cover',
-                );
-
-       // Parallax Defaults
-       $parallax_defaults = NULL;
-
-    
-       // Pull all the categories into an array
-       $options_categories = array();
-       $options_categories_obj = get_categories();
-       $options_categories[''] = 'Select a Category:';
-       foreach ($options_categories_obj as $category) {
-               $options_categories[$category->cat_ID] = $category->cat_name;
-       }
-
-       // Pull all tags into an array
-       $options_tags = array();
-       $options_tags_obj = get_tags();
-       foreach ( $options_tags_obj as $tag ) {
-               $options_tags[$tag->term_id] = $tag->name;
-       }
-
-
-       // Pull all the pages into an array
-       $options_pages = array();
-       $options_pages_obj = get_pages('sort_column=post_parent,menu_order');
-       $options_pages[''] = 'Select a page:';
-       foreach ($options_pages_obj as $page) {
-               $options_pages[$page->ID] = $page->post_title;
-       }
-
-       // If using image radio buttons, define a directory path
-       $imagepath =  get_template_directory_uri() . '/inc/options-framework/images/';
-
-       $options = array();
-
-       $options[] = array(
-               'name' => __('General Settings', 'accesspress-parallax'),
-               'type' => 'heading');
-
-       $options[] = array(
-               'name' => __('Enable Single Page Parallax Home Page - if disabled, will show Blog-roll/Static-page', 'accesspress-parallax'),
-               'desc' => __('Check To enable', 'accesspress-parallax'),
-               'id' => 'enable_parallax',
-               'std' => '1',
-               'type' => 'checkbox');
-
-       $options[] = array(
-               'name' => __('Enable Single Page Nav(Menu) - if disabled, will show primary menu', 'accesspress-parallax'),
-               'desc' => __('Check To enable', 'accesspress-parallax'),
-               'id' => 'enable_parallax_nav',
-               'std' => '1',
-               'type' => 'checkbox');
-
-       $options[] = array(
-               'name' => __('Home Menu Text - Single Page Nav(Menu)', 'accesspress-parallax'),
-               'id' => 'home_text',
-               'desc' => __('Leave blank if you do not want to show', 'accesspress-parallax'),
-               'std' => 'Home',
-               'type' => 'text');
-
-       $options[] = array(
-               'name' => __('Enable Animation on scroll - Page Elements will show with some animation only in home page.', 'accesspress-parallax'),
-               'desc' => __('Check To enable', 'accesspress-parallax'),
-               'id' => 'enable_animation',
-               'std' => '1',
-               'type' => 'checkbox');
-
-
-       $options[] = array(
-               'name' => __('Upload Logo', 'accesspress-parallax'),
-               'desc' => '<a target="_blank" href="'.admin_url().'themes.php?page=custom-header" class="button">'.__('Upload', 'accesspress-parallax').'</a>',
-               'type' => 'info');
-
-       $options[] = array(
-               'name' => __('Upload Fav Icon', 'accesspress-parallax'),
-               'id' => 'fav_icon',
-               'class' => 'sub-option',
-               'type' => 'upload');
-
-       $options[] = array(
-               'name' =>  __('Select Header Layout', 'accesspress-parallax'),
-               'id' => "header_layout",
-               'std' => "logo-side",
-               'type' => "images",
-               'options' => array(
-                       'logo-side' => $imagepath . 'logo-side.jpg',
-                       'logo-top' => $imagepath . 'logo-top.jpg')
-       );
-
-       $options[] = array(
-               'name' => __('Parallax Sections', 'accesspress-parallax'),
-               'type' => 'heading');
-
-       $options[] = array(
-               'desc' => __('<strong>Note: Please make a new page before you create a section. Each Section should have unique Page.</strong>', 'accesspress-parallax'),
-               'id' => 'parallax_info',
-               'type' => 'info');
-
-       $options[] = array(
-               'id' => 'parallax_section',
-               'std' => $parallax_defaults,
-               'options' => $options_pages,
-               'overlay' => $overlay,
-               'category' => $options_categories,
-               'layout' => $section_template,
-               'type' => 'parallaxsection' );
-
-       $options[] = array(
-               'id' => 'parallax_count',
-               'type' => 'hidden',
-               'std' => '50'
-               );
-
-       $options[] = array(
-               'id' => 'add_new_section',
-               'type' => 'button' );
-
-       /*Post Section Ends*/
-       $options[] = array(
-               'name' => __('Post Settings', 'accesspress-parallax'),
-               'type' => 'heading');
-
-       $options[] = array(
-               'name' => __('Show Posted Date', 'accesspress-parallax'),
-               'desc' => __('Check To enable', 'accesspress-parallax'),
-               'id' => 'post_date',
-               'std' => '1',
-               'type' => 'checkbox');
-
-       $options[] = array(
-               'name' => __('Show Post Author', 'accesspress-parallax'),
-               'desc' => __('Check To enable', 'accesspress-parallax'),
-               'id' => 'post_author',
-               'std' => '1',
-               'type' => 'checkbox');
-
-       $options[] = array(
-               'name' => __('Show Post Footer text', 'accesspress-parallax'),
-               'desc' => __('Check To enable', 'accesspress-parallax'),
-               'id' => 'post_footer',
-               'std' => '1',
-               'type' => 'checkbox');
-
-       $options[] = array(
-               'name' => __('Show Prev Next Pagination', 'accesspress-parallax'),
-               'desc' => __('Check To enable', 'accesspress-parallax'),
-               'id' => 'post_pagination',
-               'std' => '1',
-               'type' => 'checkbox');
-       
-       /*Parallax Section Ends*/
-       $options[] = array(
-               'name' => __('Slider Settings', 'accesspress-parallax'),
-               'type' => 'heading');
-
-       $options[] = array(
-               'name' => __('Show Slider', 'accesspress-parallax'),
-               'id' => 'show_slider',
-               'std' => 'yes',
-               'type' => 'radio',
-               'options' => $check);
-
-       if ( $options_categories ) {
-       $options[] = array(
-               'name' => __('Select a Category', 'accesspress-parallax'),
-               'id' => 'slider_category',
-               'type' => 'select',
-               'options' => $options_categories);
-       }
-
-       $options[] = array(
-               'name' => __('Show full window', 'accesspress-parallax'),
-               'id' => 'slider_full_window',
-               'std' => 'yes',
-               'type' => 'radio',
-               'options' => $check);
-
-       $options[] = array(
-               'name' => __('Remove Slider overlay - Black Dots', 'accesspress-parallax'),
-               'id' => 'slider_overlay',
-               'std' => 'no',
-               'type' => 'radio',
-               'options' => $check);
-
-       $options[] = array(
-               'name' => __('Show Slider Dots', 'accesspress-parallax'),
-               'id' => 'show_pager',
-               'std' => 'yes',
-               'type' => 'radio',
-               'options' => $check);
-
-       $options[] = array(
-               'name' => __('Show Slider Arrows', 'accesspress-parallax'),
-               'id' => 'show_controls',
-               'std' => 'yes',
-               'type' => 'radio',
-               'options' => $check);
-
-       $options[] = array(
-               'name' => __('Auto Transition', 'accesspress-parallax'),
-               'id' => 'auto_transition',
-               'std' => 'yes',
-               'type' => 'radio',
-               'options' => $check);
-
-       $options[] = array(
-               'name' => __('Slider Transition', 'accesspress-parallax'),
-               'id' => 'slider_transition',
-               'std' => 'fade',
-               'type' => 'radio',
-               'options' => $transitions);
-
-       $options[] = array(
-               'name' => __('Slider Transition Speed', 'accesspress-parallax'),
-               'id' => 'slider_speed',
-               'std' => '1000',
-               'type' => 'text');
-
-       $options[] = array(
-               'name' => __('Slider Pause Duration', 'accesspress-parallax'),
-               'id' => 'slider_pause',
-               'std' => '5000',
-               'type' => 'text');
-
-       $options[] = array(
-               'name' => __('Show Caption', 'accesspress-parallax'),
-               'id' => 'show_caption',
-               'std' => 'yes',
-               'type' => 'radio',
-               'options' => $check);
-
-       $options[] = array(
-               'name' => __('Social Links', 'accesspress-parallax'),
-               'type' => 'heading');
-
-       $options[] = array(
-               'name' => __('Show Social Icon', 'accesspress-parallax'),
-               'desc' => __('Check To enable', 'accesspress-parallax'),
-               'id' => 'show_social',
-               'std' => '1',
-               'type' => 'checkbox');
-
-       $options[] = array(
-               'name' => __('Facebook', 'accesspress-parallax'),
-               'id' => 'facebook',
-               'type' => 'url');
-
-       $options[] = array(
-               'name' => __('Twitter', 'accesspress-parallax'),
-               'id' => 'twitter',
-               'type' => 'url');
-
-       $options[] = array(
-               'name' => __('Google Plus', 'accesspress-parallax'),
-               'id' => 'google_plus',
-               'type' => 'url');
-
-       $options[] = array(
-               'name' => __('Youtube', 'accesspress-parallax'),
-               'id' => 'youtube',
-               'type' => 'url');
-
-       $options[] = array(
-               'name' => __('Pinterest', 'accesspress-parallax'),
-               'id' => 'pinterest',
-               'type' => 'url');
-
-       $options[] = array(
-               'name' => __('Linkedin', 'accesspress-parallax'),
-               'id' => 'linkedin',
-               'type' => 'url');
-
-       $options[] = array(
-               'name' => __('Fickr', 'accesspress-parallax'),
-               'id' => 'flickr',
-               'type' => 'url');
-
-       $options[] = array(
-               'name' => __('Vimeo', 'accesspress-parallax'),
-               'id' => 'vimeo',
-               'type' => 'url');
-
-       $options[] = array(
-               'name' => __('Instagram', 'accesspress-parallax'),
-               'id' => 'instagram',
-               'type' => 'url');
-
-       $options[] = array(
-               'name' => __('Skype', 'accesspress-parallax'),
-               'id' => 'skype',
-               'type' => 'text');
-
-       $options[] = array(
-               'name' => __('Tools', 'accesspress-parallax'),
-               'type' => 'heading');
-
-       $options[] = array(
-               'name' => __('Custom CSS', 'accesspress-parallax'),
-               'id' => 'custom_css',
-               'type' => 'textarea',
-               'desc' => __('Put your custom CSS here', 'accesspress-parallax') );
-
-return $options;
-}
diff --git a/inc/ajax.php b/inc/ajax.php
deleted file mode 100644 (file)
index 5a11b76..0000000
+++ /dev/null
@@ -1,122 +0,0 @@
-<?php  
-       
-       // Parallax Defaults
-       $parallax_defaults = NULL;
-
-       // Pull all the pages into an array
-       $options_pages_obj = get_pages('sort_column=post_parent,menu_order');
-
-       $options_categories_obj = get_categories();
-
-       $countsettings = esc_attr( $_REQUEST['count_section'] );
-?>     
-
-<div class="sub-option clearfix" data-id="<?php echo $countsettings; ?>">
-<h3 class="title"><?php _e('Page Title:', 'accesspress-parallax') ?> <span></span><div class="section-toggle"><i class="fa fa-chevron-down"></i></div></h3>
-<div class="sub-option-inner">
-
-<div class="inline-label">
-<label><?php _e('Page', 'accesspress-parallax') ?></label>
-<select class="parallax_section_page" name="accesspress_parallax[parallax_section][<?php echo $countsettings; ?>][page]" class="of-input">
-<option value=""><?php _e('Select a page:', 'accesspress-parallax') ?></option>
-<?php foreach ($options_pages_obj as $page) { ?>
-       <option value="<?php echo absint($page->ID); ?>"><?php echo esc_html($page->post_title); ?></option>
-<?php } ?>
-</select>
-</div>
-
-<div class="color-picker inline-label">
-<label><?php _e('Font Color', 'accesspress-parallax') ?></label>
-<input name="accesspress_parallax[parallax_section][<?php echo $countsettings; ?>][font_color]" class="of-color" type="text">
-</div>
-
-<div class="color-picker inline-label">
-<label><?php _e('Background Color', 'accesspress-parallax') ?></label>
-<input name="accesspress_parallax[parallax_section][<?php echo $countsettings; ?>][color]" class="of-color" type="text">
-</div>
-
-<div class="inline-label">
-<label><?php _e('Layout', 'accesspress-parallax') ?></label>
-<select class="of-section of-section-layout" name="accesspress_parallax[parallax_section][<?php echo $countsettings; ?>][layout]">
-       <option value="default_template"><?php _e('Default Section', 'accesspress-parallax') ?></option>
-       <option value="service_template"><?php _e('Service Section', 'accesspress-parallax') ?></option>
-       <option value="team_template"><?php _e('Team Section', 'accesspress-parallax') ?></option>
-       <option value="portfolio_template"><?php _e('Portfolio Section', 'accesspress-parallax') ?></option>
-       <option value="testimonial_template"><?php _e('Testimonial Section', 'accesspress-parallax') ?></option>
-       <option value="blog_template"><?php _e('Blog Section', 'accesspress-parallax') ?></option>
-       <option value="action_template"><?php _e('Call to Action Section', 'accesspress-parallax') ?></option>
-       <option value="googlemap_template"><?php _e('Google Map Section', 'accesspress-parallax') ?></option>
-       <option value="blank_template"><?php _e('Blank Section', 'accesspress-parallax') ?></option>
-</select>
-</div>
-
-<div class="inline-label toggle-category" style="display:none">
-<label class=""><?php _e('Category', 'accesspress-parallax') ?></label>
-<select name="accesspress_parallax[parallax_section][<?php echo $countsettings; ?>][category]" class="of-input">
-       <option value=""><?php _e('Select a Category:', 'accesspress-parallax') ?></option>
-<?php foreach ($options_categories_obj as $category) { ?>
-       <option value="<?php echo absint( $category->cat_ID ); ?>"><?php echo esc_html( $category->cat_name ); ?></option>
-<?php } ?>
-</select>
-</div>
-
-<div class="inline-label">
-<label class=""><?php _e('Background Image', 'accesspress-parallax') ?></label>
-<input type="text" placeholder="No file chosen" value="" name="accesspress_parallax[parallax_section][<?php echo $countsettings; ?>][image]" class="upload" id="parallax_section">
-<input type="button" value="<?php _e('Upload', 'accesspress-parallax') ?>" class="upload-button button" id="upload-parallax_section">
-<div id="parallax_section-image" class="screenshot"></div>
-</div>
-
-
-<div class="of-background-properties hide inline-label">
-<label><?php _e('Background Settings', 'accesspress-parallax') ?></label>
-
-<div class="background-settings">
-<div class="clearfix">
-<select id="parallax_section_repeat" name="accesspress_parallax[parallax_section][<?php echo $countsettings; ?>][repeat]" class="of-background of-background-repeat">
-       <option value="no-repeat"><?php _e('No Repeat', 'accesspress-parallax') ?></option>
-       <option value="repeat-x"><?php _e('Repeat Horizontally', 'accesspress-parallax') ?></option>
-       <option value="repeat-y"><?php _e('Repeat Vertically', 'accesspress-parallax') ?></option>
-       <option value="repeat"><?php _e('Repeat All', 'accesspress-parallax') ?></option>
-</select>
-
-<select id="parallax_section_position" name="accesspress_parallax[parallax_section][<?php echo $countsettings; ?>][position]" class="of-background of-background-position">
-<option value="top left"><?php _e('Top Left', 'accesspress-parallax') ?></option>
-<option value="top center"><?php _e('Top Center', 'accesspress-parallax') ?></option>
-<option value="top right"><?php _e('Top Right', 'accesspress-parallax') ?></option>
-<option value="center left"><?php _e('Middle Left', 'accesspress-parallax') ?></option>
-<option value="center center"><?php _e('Middle Center', 'accesspress-parallax') ?></option>
-<option value="center right"><?php _e('Middle Right', 'accesspress-parallax') ?></option>
-<option value="bottom left"><?php _e('Bottom Left', 'accesspress-parallax') ?></option>
-<option value="bottom center"><?php _e('Bottom Center', 'accesspress-parallax') ?></option>
-<option value="bottom right"><?php _e('Bottom Right', 'accesspress-parallax') ?></option>
-</select>
-
-<select id="parallax_section_attachment" name="accesspress_parallax[parallax_section][<?php echo $countsettings; ?>][attachment]" class="of-background of-background-attachment">
-<option value="scroll"><?php _e('Scroll Normally', 'accesspress-parallax') ?></option>
-<option value="fixed"><?php _e('Fixed in Place', 'accesspress-parallax') ?></option>
-</select>
-
-<select id="parallax_section_size" name="accesspress_parallax[parallax_section][<?php echo $countsettings; ?>][size]" class="of-background of-background-size">
-<option value="auto"><?php _e('Auto', 'accesspress-parallax') ?></option>
-<option value="cover"><?php _e('Cover', 'accesspress-parallax') ?></option>
-<option value="contain"><?php _e('Contain', 'accesspress-parallax') ?></option>
-</select>
-</div>
-</div>
-
-<div class="inline-label">
-<label><?php _e('Overlay', 'accesspress-parallax') ?></label>
-<select id="parallax_section_overlay" class="of-background of-background-overlay" name="accesspress_parallax[parallax_section][<?php echo $countsettings; ?>][overlay]">
-<option value="overlay0"><?php _e('No Overlay', 'accesspress-parallax') ?></option>
-<option value="overlay1"><?php _e('Small Dotted', 'accesspress-parallax') ?></option>
-<option value="overlay2"><?php _e('Large Dotted', 'accesspress-parallax') ?></option>
-<option value="overlay3"><?php _e('Light Black', 'accesspress-parallax') ?></option>
-<option value="overlay4"><?php _e('Black Dotted', 'accesspress-parallax') ?></option>
-</select>
-</div>
-</div>
-<div class="remove-parallax button-primary"><?php _e('Remove', 'accesspress-parallax') ?></div>
-</div>
-</div>
-
diff --git a/inc/class-tgm-plugin-activation.php b/inc/class-tgm-plugin-activation.php
deleted file mode 100644 (file)
index f423998..0000000
+++ /dev/null
@@ -1,3760 +0,0 @@
-<?php
-/**
- * Plugin installation and activation for WordPress themes.
- *
- * Please note that this is a drop-in library for a theme or plugin.
- * The authors of this library (Thomas, Gary and Juliette) are NOT responsible
- * for the support of your plugin or theme. Please contact the plugin
- * or theme author for support.
- *
- * @package   TGM-Plugin-Activation
- * @version   2.6.1 for parent theme Accesspress Parallax for publication on WordPress.org
- * @link      http://tgmpluginactivation.com/
- * @author    Thomas Griffin, Gary Jones, Juliette Reinders Folmer
- * @copyright Copyright (c) 2011, Thomas Griffin
- * @license   GPL-2.0+
- */
-
-/*
-       Copyright 2011 Thomas Griffin (thomasgriffinmedia.com)
-
-       This program is free software; you can redistribute it and/or modify
-       it under the terms of the GNU General Public License, version 2, as
-       published by the Free Software Foundation.
-
-       This program is distributed in the hope that it will be useful,
-       but WITHOUT ANY WARRANTY; without even the implied warranty of
-       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-       GNU General Public License for more details.
-
-       You should have received a copy of the GNU General Public License
-       along with this program; if not, write to the Free Software
-       Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
-*/
-
-if ( ! class_exists( 'TGM_Plugin_Activation' ) ) {
-
-       /**
-        * Automatic plugin installation and activation library.
-        *
-        * Creates a way to automatically install and activate plugins from within themes.
-        * The plugins can be either bundled, downloaded from the WordPress
-        * Plugin Repository or downloaded from another external source.
-        *
-        * @since 1.0.0
-        *
-        * @package TGM-Plugin-Activation
-        * @author  Thomas Griffin
-        * @author  Gary Jones
-        */
-       class TGM_Plugin_Activation {
-               /**
-                * TGMPA version number.
-                *
-                * @since 2.5.0
-                *
-                * @const string Version number.
-                */
-               const TGMPA_VERSION = '2.6.1';
-
-               /**
-                * Regular expression to test if a URL is a WP plugin repo URL.
-                *
-                * @const string Regex.
-                *
-                * @since 2.5.0
-                */
-               const WP_REPO_REGEX = '|^http[s]?://wordpress\.org/(?:extend/)?plugins/|';
-
-               /**
-                * Arbitrary regular expression to test if a string starts with a URL.
-                *
-                * @const string Regex.
-                *
-                * @since 2.5.0
-                */
-               const IS_URL_REGEX = '|^http[s]?://|';
-
-               /**
-                * Holds a copy of itself, so it can be referenced by the class name.
-                *
-                * @since 1.0.0
-                *
-                * @var TGM_Plugin_Activation
-                */
-               public static $instance;
-
-               /**
-                * Holds arrays of plugin details.
-                *
-                * @since 1.0.0
-                * @since 2.5.0 the array has the plugin slug as an associative key.
-                *
-                * @var array
-                */
-               public $plugins = array();
-
-               /**
-                * Holds arrays of plugin names to use to sort the plugins array.
-                *
-                * @since 2.5.0
-                *
-                * @var array
-                */
-               protected $sort_order = array();
-
-               /**
-                * Whether any plugins have the 'force_activation' setting set to true.
-                *
-                * @since 2.5.0
-                *
-                * @var bool
-                */
-               protected $has_forced_activation = false;
-
-               /**
-                * Whether any plugins have the 'force_deactivation' setting set to true.
-                *
-                * @since 2.5.0
-                *
-                * @var bool
-                */
-               protected $has_forced_deactivation = false;
-
-               /**
-                * Name of the unique ID to hash notices.
-                *
-                * @since 2.4.0
-                *
-                * @var string
-                */
-               public $id = 'tgmpa';
-
-               /**
-                * Name of the query-string argument for the admin page.
-                *
-                * @since 1.0.0
-                *
-                * @var string
-                */
-               protected $menu = 'tgmpa-install-plugins';
-
-               /**
-                * Parent menu file slug.
-                *
-                * @since 2.5.0
-                *
-                * @var string
-                */
-               public $parent_slug = 'themes.php';
-
-               /**
-                * Capability needed to view the plugin installation menu item.
-                *
-                * @since 2.5.0
-                *
-                * @var string
-                */
-               public $capability = 'edit_theme_options';
-
-               /**
-                * Default absolute path to folder containing bundled plugin zip files.
-                *
-                * @since 2.0.0
-                *
-                * @var string Absolute path prefix to zip file location for bundled plugins. Default is empty string.
-                */
-               public $default_path = '';
-
-               /**
-                * Flag to show admin notices or not.
-                *
-                * @since 2.1.0
-                *
-                * @var boolean
-                */
-               public $has_notices = true;
-
-               /**
-                * Flag to determine if the user can dismiss the notice nag.
-                *
-                * @since 2.4.0
-                *
-                * @var boolean
-                */
-               public $dismissable = true;
-
-               /**
-                * Message to be output above nag notice if dismissable is false.
-                *
-                * @since 2.4.0
-                *
-                * @var string
-                */
-               public $dismiss_msg = '';
-
-               /**
-                * Flag to set automatic activation of plugins. Off by default.
-                *
-                * @since 2.2.0
-                *
-                * @var boolean
-                */
-               public $is_automatic = false;
-
-               /**
-                * Optional message to display before the plugins table.
-                *
-                * @since 2.2.0
-                *
-                * @var string Message filtered by wp_kses_post(). Default is empty string.
-                */
-               public $message = '';
-
-               /**
-                * Holds configurable array of strings.
-                *
-                * Default values are added in the constructor.
-                *
-                * @since 2.0.0
-                *
-                * @var array
-                */
-               public $strings = array();
-
-               /**
-                * Holds the version of WordPress.
-                *
-                * @since 2.4.0
-                *
-                * @var int
-                */
-               public $wp_version;
-
-               /**
-                * Holds the hook name for the admin page.
-                *
-                * @since 2.5.0
-                *
-                * @var string
-                */
-               public $page_hook;
-
-               /**
-                * Adds a reference of this object to $instance, populates default strings,
-                * does the tgmpa_init action hook, and hooks in the interactions to init.
-                *
-                * {@internal This method should be `protected`, but as too many TGMPA implementations
-                * haven't upgraded beyond v2.3.6 yet, this gives backward compatibility issues.
-                * Reverted back to public for the time being.}}
-                *
-                * @since 1.0.0
-                *
-                * @see TGM_Plugin_Activation::init()
-                */
-               public function __construct() {
-                       // Set the current WordPress version.
-                       $this->wp_version = $GLOBALS['wp_version'];
-
-                       // Announce that the class is ready, and pass the object (for advanced use).
-                       do_action_ref_array( 'tgmpa_init', array( $this ) );
-
-
-
-                       // When the rest of WP has loaded, kick-start the rest of the class.
-                       add_action( 'init', array( $this, 'init' ) );
-               }
-
-               /**
-                * Magic method to (not) set protected properties from outside of this class.
-                *
-                * {@internal hackedihack... There is a serious bug in v2.3.2 - 2.3.6  where the `menu` property
-                * is being assigned rather than tested in a conditional, effectively rendering it useless.
-                * This 'hack' prevents this from happening.}}
-                *
-                * @see https://github.com/TGMPA/TGM-Plugin-Activation/blob/2.3.6/tgm-plugin-activation/class-tgm-plugin-activation.php#L1593
-                *
-                * @since 2.5.2
-                *
-                * @param string $name  Name of an inaccessible property.
-                * @param mixed  $value Value to assign to the property.
-                * @return void  Silently fail to set the property when this is tried from outside of this class context.
-                *               (Inside this class context, the __set() method if not used as there is direct access.)
-                */
-               public function __set( $name, $value ) {
-                       return;
-               }
-
-               /**
-                * Magic method to get the value of a protected property outside of this class context.
-                *
-                * @since 2.5.2
-                *
-                * @param string $name Name of an inaccessible property.
-                * @return mixed The property value.
-                */
-               public function __get( $name ) {
-                       return $this->{$name};
-               }
-
-               /**
-                * Initialise the interactions between this class and WordPress.
-                *
-                * Hooks in three new methods for the class: admin_menu, notices and styles.
-                *
-                * @since 2.0.0
-                *
-                * @see TGM_Plugin_Activation::admin_menu()
-                * @see TGM_Plugin_Activation::notices()
-                * @see TGM_Plugin_Activation::styles()
-                */
-               public function init() {
-                       /**
-                        * By default TGMPA only loads on the WP back-end and not in an Ajax call. Using this filter
-                        * you can overrule that behaviour.
-                        *
-                        * @since 2.5.0
-                        *
-                        * @param bool $load Whether or not TGMPA should load.
-                        *                   Defaults to the return of `is_admin() && ! defined( 'DOING_AJAX' )`.
-                        */
-                       if ( true !== apply_filters( 'tgmpa_load', ( is_admin() && ! defined( 'DOING_AJAX' ) ) ) ) {
-                               return;
-                       }
-
-                       // Load class strings.
-                       $this->strings = array(
-                               'page_title'                      => __( 'Install Required Plugins', 'accesspress-parallax' ),
-                               'menu_title'                      => __( 'Install Plugins', 'accesspress-parallax' ),
-                               /* translators: %s: plugin name. */
-                               'installing'                      => __( 'Installing Plugin: %s', 'accesspress-parallax' ),
-                               /* translators: %s: plugin name. */
-                               'updating'                        => __( 'Updating Plugin: %s', 'accesspress-parallax' ),
-                               'oops'                            => __( 'Something went wrong with the plugin API.', 'accesspress-parallax' ),
-                               'notice_can_install_required'     => _n_noop(
-                                       /* translators: 1: plugin name(s). */
-                                       'This theme requires the following plugin: %1$s.',
-                                       'This theme requires the following plugins: %1$s.',
-                                       'accesspress-parallax'
-                               ),
-                               'notice_can_install_recommended'  => _n_noop(
-                                       /* translators: 1: plugin name(s). */
-                                       'This theme recommends the following plugin: %1$s.',
-                                       'This theme recommends the following plugins: %1$s.',
-                                       'accesspress-parallax'
-                               ),
-                               'notice_ask_to_update'            => _n_noop(
-                                       /* translators: 1: plugin name(s). */
-                                       'The following plugin needs to be updated to its latest version to ensure maximum compatibility with this theme: %1$s.',
-                                       'The following plugins need to be updated to their latest version to ensure maximum compatibility with this theme: %1$s.',
-                                       'accesspress-parallax'
-                               ),
-                               'notice_ask_to_update_maybe'      => _n_noop(
-                                       /* translators: 1: plugin name(s). */
-                                       'There is an update available for: %1$s.',
-                                       'There are updates available for the following plugins: %1$s.',
-                                       'accesspress-parallax'
-                               ),
-                               'notice_can_activate_required'    => _n_noop(
-                                       /* translators: 1: plugin name(s). */
-                                       'The following required plugin is currently inactive: %1$s.',
-                                       'The following required plugins are currently inactive: %1$s.',
-                                       'accesspress-parallax'
-                               ),
-                               'notice_can_activate_recommended' => _n_noop(
-                                       /* translators: 1: plugin name(s). */
-                                       'The following recommended plugin is currently inactive: %1$s.',
-                                       'The following recommended plugins are currently inactive: %1$s.',
-                                       'accesspress-parallax'
-                               ),
-                               'install_link'                    => _n_noop(
-                                       'Begin installing plugin',
-                                       'Begin installing plugins',
-                                       'accesspress-parallax'
-                               ),
-                               'update_link'                     => _n_noop(
-                                       'Begin updating plugin',
-                                       'Begin updating plugins',
-                                       'accesspress-parallax'
-                               ),
-                               'activate_link'                   => _n_noop(
-                                       'Begin activating plugin',
-                                       'Begin activating plugins',
-                                       'accesspress-parallax'
-                               ),
-                               'return'                          => __( 'Return to Required Plugins Installer', 'accesspress-parallax' ),
-                               'dashboard'                       => __( 'Return to the Dashboard', 'accesspress-parallax' ),
-                               'plugin_activated'                => __( 'Plugin activated successfully.', 'accesspress-parallax' ),
-                               'activated_successfully'          => __( 'The following plugin was activated successfully:', 'accesspress-parallax' ),
-                               /* translators: 1: plugin name. */
-                               'plugin_already_active'           => __( 'No action taken. Plugin %1$s was already active.', 'accesspress-parallax' ),
-                               /* translators: 1: plugin name. */
-                               'plugin_needs_higher_version'     => __( 'Plugin not activated. A higher version of %s is needed for this theme. Please update the plugin.', 'accesspress-parallax' ),
-                               /* translators: 1: dashboard link. */
-                               'complete'                        => __( 'All plugins installed and activated successfully. %1$s', 'accesspress-parallax' ),
-                               'dismiss'                         => __( 'Dismiss this notice', 'accesspress-parallax' ),
-                               'notice_cannot_install_activate'  => __( 'There are one or more required or recommended plugins to install, update or activate.', 'accesspress-parallax' ),
-                               'contact_admin'                   => __( 'Please contact the administrator of this site for help.', 'accesspress-parallax' ),
-                       );
-
-                       do_action( 'tgmpa_register' );
-
-                       /* After this point, the plugins should be registered and the configuration set. */
-
-                       // Proceed only if we have plugins to handle.
-                       if ( empty( $this->plugins ) || ! is_array( $this->plugins ) ) {
-                               return;
-                       }
-
-                       // Set up the menu and notices if we still have outstanding actions.
-                       if ( true !== $this->is_tgmpa_complete() ) {
-                               // Sort the plugins.
-                               array_multisort( $this->sort_order, SORT_ASC, $this->plugins );
-
-                               add_action( 'admin_menu', array( $this, 'admin_menu' ) );
-                               add_action( 'admin_head', array( $this, 'dismiss' ) );
-
-                               // Prevent the normal links from showing underneath a single install/update page.
-                               add_filter( 'install_plugin_complete_actions', array( $this, 'actions' ) );
-                               add_filter( 'update_plugin_complete_actions', array( $this, 'actions' ) );
-
-                               if ( $this->has_notices ) {
-                                       add_action( 'admin_notices', array( $this, 'notices' ) );
-                                       add_action( 'admin_init', array( $this, 'admin_init' ), 1 );
-                                       add_action( 'admin_enqueue_scripts', array( $this, 'thickbox' ) );
-                               }
-                       }
-
-                       // If needed, filter plugin action links.
-                       add_action( 'load-plugins.php', array( $this, 'add_plugin_action_link_filters' ), 1 );
-
-                       // Make sure things get reset on switch theme.
-                       add_action( 'switch_theme', array( $this, 'flush_plugins_cache' ) );
-
-                       if ( $this->has_notices ) {
-                               add_action( 'switch_theme', array( $this, 'update_dismiss' ) );
-                       }
-
-                       // Setup the force activation hook.
-                       if ( true === $this->has_forced_activation ) {
-                               add_action( 'admin_init', array( $this, 'force_activation' ) );
-                       }
-
-                       // Setup the force deactivation hook.
-                       if ( true === $this->has_forced_deactivation ) {
-                               add_action( 'switch_theme', array( $this, 'force_deactivation' ) );
-                       }
-               }
-
-
-
-
-
-
-
-               /**
-                * Hook in plugin action link filters for the WP native plugins page.
-                *
-                * - Prevent activation of plugins which don't meet the minimum version requirements.
-                * - Prevent deactivation of force-activated plugins.
-                * - Add update notice if update available.
-                *
-                * @since 2.5.0
-                */
-               public function add_plugin_action_link_filters() {
-                       foreach ( $this->plugins as $slug => $plugin ) {
-                               if ( false === $this->can_plugin_activate( $slug ) ) {
-                                       add_filter( 'plugin_action_links_' . $plugin['file_path'], array( $this, 'filter_plugin_action_links_activate' ), 20 );
-                               }
-
-                               if ( true === $plugin['force_activation'] ) {
-                                       add_filter( 'plugin_action_links_' . $plugin['file_path'], array( $this, 'filter_plugin_action_links_deactivate' ), 20 );
-                               }
-
-                               if ( false !== $this->does_plugin_require_update( $slug ) ) {
-                                       add_filter( 'plugin_action_links_' . $plugin['file_path'], array( $this, 'filter_plugin_action_links_update' ), 20 );
-                               }
-                       }
-               }
-
-               /**
-                * Remove the 'Activate' link on the WP native plugins page if the plugin does not meet the
-                * minimum version requirements.
-                *
-                * @since 2.5.0
-                *
-                * @param array $actions Action links.
-                * @return array
-                */
-               public function filter_plugin_action_links_activate( $actions ) {
-                       unset( $actions['activate'] );
-
-                       return $actions;
-               }
-
-               /**
-                * Remove the 'Deactivate' link on the WP native plugins page if the plugin has been set to force activate.
-                *
-                * @since 2.5.0
-                *
-                * @param array $actions Action links.
-                * @return array
-                */
-               public function filter_plugin_action_links_deactivate( $actions ) {
-                       unset( $actions['deactivate'] );
-
-                       return $actions;
-               }
-
-               /**
-                * Add a 'Requires update' link on the WP native plugins page if the plugin does not meet the
-                * minimum version requirements.
-                *
-                * @since 2.5.0
-                *
-                * @param array $actions Action links.
-                * @return array
-                */
-               public function filter_plugin_action_links_update( $actions ) {
-                       $actions['update'] = sprintf(
-                               '<a href="%1$s" title="%2$s" class="edit">%3$s</a>',
-                               esc_url( $this->get_tgmpa_status_url( 'update' ) ),
-                               esc_attr__( 'This plugin needs to be updated to be compatible with your theme.', 'accesspress-parallax' ),
-                               esc_html__( 'Update Required', 'accesspress-parallax' )
-                       );
-
-                       return $actions;
-               }
-
-               /**
-                * Handles calls to show plugin information via links in the notices.
-                *
-                * We get the links in the admin notices to point to the TGMPA page, rather
-                * than the typical plugin-install.php file, so we can prepare everything
-                * beforehand.
-                *
-                * WP does not make it easy to show the plugin information in the thickbox -
-                * here we have to require a file that includes a function that does the
-                * main work of displaying it, enqueue some styles, set up some globals and
-                * finally call that function before exiting.
-                *
-                * Down right easy once you know how...
-                *
-                * Returns early if not the TGMPA page.
-                *
-                * @since 2.1.0
-                *
-                * @global string $tab Used as iframe div class names, helps with styling
-                * @global string $body_id Used as the iframe body ID, helps with styling
-                *
-                * @return null Returns early if not the TGMPA page.
-                */
-               public function admin_init() {
-                       if ( ! $this->is_tgmpa_page() ) {
-                               return;
-                       }
-
-                       if ( isset( $_REQUEST['tab'] ) && 'plugin-information' === $_REQUEST['tab'] ) {
-                               // Needed for install_plugin_information().
-                               require_once ABSPATH . 'wp-admin/includes/plugin-install.php';
-
-                               wp_enqueue_style( 'plugin-install' );
-
-                               global $tab, $body_id;
-                               $body_id = 'plugin-information';
-                               // @codingStandardsIgnoreStart
-                               $tab     = 'plugin-information';
-                               // @codingStandardsIgnoreEnd
-
-                               install_plugin_information();
-
-                               exit;
-                       }
-               }
-
-               /**
-                * Enqueue thickbox scripts/styles for plugin info.
-                *
-                * Thickbox is not automatically included on all admin pages, so we must
-                * manually enqueue it for those pages.
-                *
-                * Thickbox is only loaded if the user has not dismissed the admin
-                * notice or if there are any plugins left to install and activate.
-                *
-                * @since 2.1.0
-                */
-               public function thickbox() {
-                       if ( ! get_user_meta( get_current_user_id(), 'tgmpa_dismissed_notice_' . $this->id, true ) ) {
-                               add_thickbox();
-                       }
-               }
-
-               /**
-                * Adds submenu page if there are plugin actions to take.
-                *
-                * This method adds the submenu page letting users know that a required
-                * plugin needs to be installed.
-                *
-                * This page disappears once the plugin has been installed and activated.
-                *
-                * @since 1.0.0
-                *
-                * @see TGM_Plugin_Activation::init()
-                * @see TGM_Plugin_Activation::install_plugins_page()
-                *
-                * @return null Return early if user lacks capability to install a plugin.
-                */
-               public function admin_menu() {
-                       // Make sure privileges are correct to see the page.
-                       if ( ! current_user_can( 'install_plugins' ) ) {
-                               return;
-                       }
-
-                       $args = apply_filters(
-                               'tgmpa_admin_menu_args',
-                               array(
-                                       'parent_slug' => $this->parent_slug,                     // Parent Menu slug.
-                                       'page_title'  => $this->strings['page_title'],           // Page title.
-                                       'menu_title'  => $this->strings['menu_title'],           // Menu title.
-                                       'capability'  => $this->capability,                      // Capability.
-                                       'menu_slug'   => $this->menu,                            // Menu slug.
-                                       'function'    => array( $this, 'install_plugins_page' ), // Callback.
-                               )
-                       );
-
-                       $this->add_admin_menu( $args );
-               }
-
-               /**
-                * Add the menu item.
-                *
-                * {@internal IMPORTANT! If this function changes, review the regex in the custom TGMPA
-                * generator on the website.}}
-                *
-                * @since 2.5.0
-                *
-                * @param array $args Menu item configuration.
-                */
-               protected function add_admin_menu( array $args ) {
-                       $this->page_hook = add_theme_page( $args['page_title'], $args['menu_title'], $args['capability'], $args['menu_slug'], $args['function'] );
-               }
-
-               /**
-                * Echoes plugin installation form.
-                *
-                * This method is the callback for the admin_menu method function.
-                * This displays the admin page and form area where the user can select to install and activate the plugin.
-                * Aborts early if we're processing a plugin installation action.
-                *
-                * @since 1.0.0
-                *
-                * @return null Aborts early if we're processing a plugin installation action.
-                */
-               public function install_plugins_page() {
-                       // Store new instance of plugin table in object.
-                       $plugin_table = new TGMPA_List_Table;
-
-                       // Return early if processing a plugin installation action.
-                       if ( ( ( 'tgmpa-bulk-install' === $plugin_table->current_action() || 'tgmpa-bulk-update' === $plugin_table->current_action() ) && $plugin_table->process_bulk_actions() ) || $this->do_plugin_install() ) {
-                               return;
-                       }
-
-                       // Force refresh of available plugin information so we'll know about manual updates/deletes.
-                       wp_clean_plugins_cache( false );
-
-                       ?>
-                       <div class="tgmpa wrap">
-                               <h1><?php echo esc_html( get_admin_page_title() ); ?></h1>
-                               <?php $plugin_table->prepare_items(); ?>
-
-                               <?php
-                               if ( ! empty( $this->message ) && is_string( $this->message ) ) {
-                                       echo wp_kses_post( $this->message );
-                               }
-                               ?>
-                               <?php $plugin_table->views(); ?>
-
-                               <form id="tgmpa-plugins" action="" method="post">
-                                       <input type="hidden" name="tgmpa-page" value="<?php echo esc_attr( $this->menu ); ?>" />
-                                       <input type="hidden" name="plugin_status" value="<?php echo esc_attr( $plugin_table->view_context ); ?>" />
-                                       <?php $plugin_table->display(); ?>
-                               </form>
-                       </div>
-                       <?php
-               }
-
-               /**
-                * Installs, updates or activates a plugin depending on the action link clicked by the user.
-                *
-                * Checks the $_GET variable to see which actions have been
-                * passed and responds with the appropriate method.
-                *
-                * Uses WP_Filesystem to process and handle the plugin installation
-                * method.
-                *
-                * @since 1.0.0
-                *
-                * @uses WP_Filesystem
-                * @uses WP_Error
-                * @uses WP_Upgrader
-                * @uses Plugin_Upgrader
-                * @uses Plugin_Installer_Skin
-                * @uses Plugin_Upgrader_Skin
-                *
-                * @return boolean True on success, false on failure.
-                */
-               protected function do_plugin_install() {
-                       if ( empty( $_GET['plugin'] ) ) {
-                               return false;
-                       }
-
-                       // All plugin information will be stored in an array for processing.
-                       $slug = $this->sanitize_key( urldecode( $_GET['plugin'] ) );
-
-                       if ( ! isset( $this->plugins[ $slug ] ) ) {
-                               return false;
-                       }
-
-                       // Was an install or upgrade action link clicked?
-                       if ( ( isset( $_GET['tgmpa-install'] ) && 'install-plugin' === $_GET['tgmpa-install'] ) || ( isset( $_GET['tgmpa-update'] ) && 'update-plugin' === $_GET['tgmpa-update'] ) ) {
-
-                               $install_type = 'install';
-                               if ( isset( $_GET['tgmpa-update'] ) && 'update-plugin' === $_GET['tgmpa-update'] ) {
-                                       $install_type = 'update';
-                               }
-
-                               check_admin_referer( 'tgmpa-' . $install_type, 'tgmpa-nonce' );
-
-                               // Pass necessary information via URL if WP_Filesystem is needed.
-                               $url = wp_nonce_url(
-                                       add_query_arg(
-                                               array(
-                                                       'plugin'                 => urlencode( $slug ),
-                                                       'tgmpa-' . $install_type => $install_type . '-plugin',
-                                               ),
-                                               $this->get_tgmpa_url()
-                                       ),
-                                       'tgmpa-' . $install_type,
-                                       'tgmpa-nonce'
-                               );
-
-                               $method = ''; // Leave blank so WP_Filesystem can populate it as necessary.
-
-                               if ( false === ( $creds = request_filesystem_credentials( esc_url_raw( $url ), $method, false, false, array() ) ) ) {
-                                       return true;
-                               }
-
-                               if ( ! WP_Filesystem( $creds ) ) {
-                                       request_filesystem_credentials( esc_url_raw( $url ), $method, true, false, array() ); // Setup WP_Filesystem.
-                                       return true;
-                               }
-
-                               /* If we arrive here, we have the filesystem. */
-
-                               // Prep variables for Plugin_Installer_Skin class.
-                               $extra         = array();
-                               $extra['slug'] = $slug; // Needed for potentially renaming of directory name.
-                               $source        = $this->get_download_url( $slug );
-                               $api           = ( 'repo' === $this->plugins[ $slug ]['source_type'] ) ? $this->get_plugins_api( $slug ) : null;
-                               $api           = ( false !== $api ) ? $api : null;
-
-                               $url = add_query_arg(
-                                       array(
-                                               'action' => $install_type . '-plugin',
-                                               'plugin' => urlencode( $slug ),
-                                       ),
-                                       'update.php'
-                               );
-
-                               if ( ! class_exists( 'Plugin_Upgrader', false ) ) {
-                                       require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
-                               }
-
-                               $title     = ( 'update' === $install_type ) ? $this->strings['updating'] : $this->strings['installing'];
-                               $skin_args = array(
-                                       'type'   => ( 'bundled' !== $this->plugins[ $slug ]['source_type'] ) ? 'web' : 'upload',
-                                       'title'  => sprintf( $title, $this->plugins[ $slug ]['name'] ),
-                                       'url'    => esc_url_raw( $url ),
-                                       'nonce'  => $install_type . '-plugin_' . $slug,
-                                       'plugin' => '',
-                                       'api'    => $api,
-                                       'extra'  => $extra,
-                               );
-                               unset( $title );
-
-                               if ( 'update' === $install_type ) {
-                                       $skin_args['plugin'] = $this->plugins[ $slug ]['file_path'];
-                                       $skin                = new Plugin_Upgrader_Skin( $skin_args );
-                               } else {
-                                       $skin = new Plugin_Installer_Skin( $skin_args );
-                               }
-
-                               // Create a new instance of Plugin_Upgrader.
-                               $upgrader = new Plugin_Upgrader( $skin );
-
-                               // Perform the action and install the plugin from the $source urldecode().
-                               add_filter( 'upgrader_source_selection', array( $this, 'maybe_adjust_source_dir' ), 1, 3 );
-
-                               if ( 'update' === $install_type ) {
-                                       // Inject our info into the update transient.
-                                       $to_inject                    = array( $slug => $this->plugins[ $slug ] );
-                                       $to_inject[ $slug ]['source'] = $source;
-                                       $this->inject_update_info( $to_inject );
-
-                                       $upgrader->upgrade( $this->plugins[ $slug ]['file_path'] );
-                               } else {
-                                       $upgrader->install( $source );
-                               }
-
-                               remove_filter( 'upgrader_source_selection', array( $this, 'maybe_adjust_source_dir' ), 1 );
-
-                               // Make sure we have the correct file path now the plugin is installed/updated.
-                               $this->populate_file_path( $slug );
-
-                               // Only activate plugins if the config option is set to true and the plugin isn't
-                               // already active (upgrade).
-                               if ( $this->is_automatic && ! $this->is_plugin_active( $slug ) ) {
-                                       $plugin_activate = $upgrader->plugin_info(); // Grab the plugin info from the Plugin_Upgrader method.
-                                       if ( false === $this->activate_single_plugin( $plugin_activate, $slug, true ) ) {
-                                               return true; // Finish execution of the function early as we encountered an error.
-                                       }
-                               }
-
-                               $this->show_tgmpa_version();
-
-                               // Display message based on if all plugins are now active or not.
-                               if ( $this->is_tgmpa_complete() ) {
-                                       echo '<p>', sprintf( esc_html( $this->strings['complete'] ), '<a href="' . esc_url( self_admin_url() ) . '">' . esc_html__( 'Return to the Dashboard', 'accesspress-parallax' ) . '</a>' ), '</p>';
-                                       echo '<style type="text/css">#adminmenu .wp-submenu li.current { display: none !important; }</style>';
-                               } else {
-                                       echo '<p><a href="', esc_url( $this->get_tgmpa_url() ), '" target="_parent">', esc_html( $this->strings['return'] ), '</a></p>';
-                               }
-
-                               return true;
-                       } elseif ( isset( $this->plugins[ $slug ]['file_path'], $_GET['tgmpa-activate'] ) && 'activate-plugin' === $_GET['tgmpa-activate'] ) {
-                               // Activate action link was clicked.
-                               check_admin_referer( 'tgmpa-activate', 'tgmpa-nonce' );
-
-                               if ( false === $this->activate_single_plugin( $this->plugins[ $slug ]['file_path'], $slug ) ) {
-                                       return true; // Finish execution of the function early as we encountered an error.
-                               }
-                       }
-
-                       return false;
-               }
-
-               /**
-                * Inject information into the 'update_plugins' site transient as WP checks that before running an update.
-                *
-                * @since 2.5.0
-                *
-                * @param array $plugins The plugin information for the plugins which are to be updated.
-                */
-               public function inject_update_info( $plugins ) {
-                       $repo_updates = get_site_transient( 'update_plugins' );
-
-                       if ( ! is_object( $repo_updates ) ) {
-                               $repo_updates = new stdClass;
-                       }
-
-                       foreach ( $plugins as $slug => $plugin ) {
-                               $file_path = $plugin['file_path'];
-
-                               if ( empty( $repo_updates->response[ $file_path ] ) ) {
-                                       $repo_updates->response[ $file_path ] = new stdClass;
-                               }
-
-                               // We only really need to set package, but let's do all we can in case WP changes something.
-                               $repo_updates->response[ $file_path ]->slug        = $slug;
-                               $repo_updates->response[ $file_path ]->plugin      = $file_path;
-                               $repo_updates->response[ $file_path ]->new_version = $plugin['version'];
-                               $repo_updates->response[ $file_path ]->package     = $plugin['source'];
-                               if ( empty( $repo_updates->response[ $file_path ]->url ) && ! empty( $plugin['external_url'] ) ) {
-                                       $repo_updates->response[ $file_path ]->url = $plugin['external_url'];
-                               }
-                       }
-
-                       set_site_transient( 'update_plugins', $repo_updates );
-               }
-
-               /**
-                * Adjust the plugin directory name if necessary.
-                *
-                * The final destination directory of a plugin is based on the subdirectory name found in the
-                * (un)zipped source. In some cases - most notably GitHub repository plugin downloads -, this
-                * subdirectory name is not the same as the expected slug and the plugin will not be recognized
-                * as installed. This is fixed by adjusting the temporary unzipped source subdirectory name to
-                * the expected plugin slug.
-                *
-                * @since 2.5.0
-                *
-                * @param string       $source        Path to upgrade/zip-file-name.tmp/subdirectory/.
-                * @param string       $remote_source Path to upgrade/zip-file-name.tmp.
-                * @param \WP_Upgrader $upgrader      Instance of the upgrader which installs the plugin.
-                * @return string $source
-                */
-               public function maybe_adjust_source_dir( $source, $remote_source, $upgrader ) {
-                       if ( ! $this->is_tgmpa_page() || ! is_object( $GLOBALS['wp_filesystem'] ) ) {
-                               return $source;
-                       }
-
-                       // Check for single file plugins.
-                       $source_files = array_keys( $GLOBALS['wp_filesystem']->dirlist( $remote_source ) );
-                       if ( 1 === count( $source_files ) && false === $GLOBALS['wp_filesystem']->is_dir( $source ) ) {
-                               return $source;
-                       }
-
-                       // Multi-file plugin, let's see if the directory is correctly named.
-                       $desired_slug = '';
-
-                       // Figure out what the slug is supposed to be.
-                       if ( false === $upgrader->bulk && ! empty( $upgrader->skin->options['extra']['slug'] ) ) {
-                               $desired_slug = $upgrader->skin->options['extra']['slug'];
-                       } else {
-                               // Bulk installer contains less info, so fall back on the info registered here.
-                               foreach ( $this->plugins as $slug => $plugin ) {
-                                       if ( ! empty( $upgrader->skin->plugin_names[ $upgrader->skin->i ] ) && $plugin['name'] === $upgrader->skin->plugin_names[ $upgrader->skin->i ] ) {
-                                               $desired_slug = $slug;
-                                               break;
-                                       }
-                               }
-                               unset( $slug, $plugin );
-                       }
-
-                       if ( ! empty( $desired_slug ) ) {
-                               $subdir_name = untrailingslashit( str_replace( trailingslashit( $remote_source ), '', $source ) );
-
-                               if ( ! empty( $subdir_name ) && $subdir_name !== $desired_slug ) {
-                                       $from_path = untrailingslashit( $source );
-                                       $to_path   = trailingslashit( $remote_source ) . $desired_slug;
-
-                                       if ( true === $GLOBALS['wp_filesystem']->move( $from_path, $to_path ) ) {
-                                               return trailingslashit( $to_path );
-                                       } else {
-                                               return new WP_Error( 'rename_failed', esc_html__( 'The remote plugin package does not contain a folder with the desired slug and renaming did not work.', 'accesspress-parallax' ) . ' ' . esc_html__( 'Please contact the plugin provider and ask them to package their plugin according to the WordPress guidelines.', 'accesspress-parallax' ), array( 'found' => $subdir_name, 'expected' => $desired_slug ) );
-                                       }
-                               } elseif ( empty( $subdir_name ) ) {
-                                       return new WP_Error( 'packaged_wrong', esc_html__( 'The remote plugin package consists of more than one file, but the files are not packaged in a folder.', 'accesspress-parallax' ) . ' ' . esc_html__( 'Please contact the plugin provider and ask them to package their plugin according to the WordPress guidelines.', 'accesspress-parallax' ), array( 'found' => $subdir_name, 'expected' => $desired_slug ) );
-                               }
-                       }
-
-                       return $source;
-               }
-
-               /**
-                * Activate a single plugin and send feedback about the result to the screen.
-                *
-                * @since 2.5.0
-                *
-                * @param string $file_path Path within wp-plugins/ to main plugin file.
-                * @param string $slug      Plugin slug.
-                * @param bool   $automatic Whether this is an automatic activation after an install. Defaults to false.
-                *                          This determines the styling of the output messages.
-                * @return bool False if an error was encountered, true otherwise.
-                */
-               protected function activate_single_plugin( $file_path, $slug, $automatic = false ) {
-                       if ( $this->can_plugin_activate( $slug ) ) {
-                               $activate = activate_plugin( $file_path );
-
-                               if ( is_wp_error( $activate ) ) {
-                                       echo '<div id="message" class="error"><p>', wp_kses_post( $activate->get_error_message() ), '</p></div>',
-                                               '<p><a href="', esc_url( $this->get_tgmpa_url() ), '" target="_parent">', esc_html( $this->strings['return'] ), '</a></p>';
-
-                                       return false; // End it here if there is an error with activation.
-                               } else {
-                                       if ( ! $automatic ) {
-                                               // Make sure message doesn't display again if bulk activation is performed
-                                               // immediately after a single activation.
-                                               if ( ! isset( $_POST['action'] ) ) { // WPCS: CSRF OK.
-                                                       echo '<div id="message" class="updated"><p>', esc_html( $this->strings['activated_successfully'] ), ' <strong>', esc_html( $this->plugins[ $slug ]['name'] ), '.</strong></p></div>';
-                                               }
-                                       } else {
-                                               // Simpler message layout for use on the plugin install page.
-                                               echo '<p>', esc_html( $this->strings['plugin_activated'] ), '</p>';
-                                       }
-                               }
-                       } elseif ( $this->is_plugin_active( $slug ) ) {
-                               // No simpler message format provided as this message should never be encountered
-                               // on the plugin install page.
-                               echo '<div id="message" class="error"><p>',
-                                       sprintf(
-                                               esc_html( $this->strings['plugin_already_active'] ),
-                                               '<strong>' . esc_html( $this->plugins[ $slug ]['name'] ) . '</strong>'
-                                       ),
-                                       '</p></div>';
-                       } elseif ( $this->does_plugin_require_update( $slug ) ) {
-                               if ( ! $automatic ) {
-                                       // Make sure message doesn't display again if bulk activation is performed
-                                       // immediately after a single activation.
-                                       if ( ! isset( $_POST['action'] ) ) { // WPCS: CSRF OK.
-                                               echo '<div id="message" class="error"><p>',
-                                                       sprintf(
-                                                               esc_html( $this->strings['plugin_needs_higher_version'] ),
-                                                               '<strong>' . esc_html( $this->plugins[ $slug ]['name'] ) . '</strong>'
-                                                       ),
-                                                       '</p></div>';
-                                       }
-                               } else {
-                                       // Simpler message layout for use on the plugin install page.
-                                       echo '<p>', sprintf( esc_html( $this->strings['plugin_needs_higher_version'] ), esc_html( $this->plugins[ $slug ]['name'] ) ), '</p>';
-                               }
-                       }
-
-                       return true;
-               }
-
-               /**
-                * Echoes required plugin notice.
-                *
-                * Outputs a message telling users that a specific plugin is required for
-                * their theme. If appropriate, it includes a link to the form page where
-                * users can install and activate the plugin.
-                *
-                * Returns early if we're on the Install page.
-                *
-                * @since 1.0.0
-                *
-                * @global object $current_screen
-                *
-                * @return null Returns early if we're on the Install page.
-                */
-               public function notices() {
-                       // Remove nag on the install page / Return early if the nag message has been dismissed or user < author.
-                       if ( ( $this->is_tgmpa_page() || $this->is_core_update_page() ) || get_user_meta( get_current_user_id(), 'tgmpa_dismissed_notice_' . $this->id, true ) || ! current_user_can( apply_filters( 'tgmpa_show_admin_notice_capability', 'publish_posts' ) ) ) {
-                               return;
-                       }
-
-                       // Store for the plugin slugs by message type.
-                       $message = array();
-
-                       // Initialize counters used to determine plurality of action link texts.
-                       $install_link_count          = 0;
-                       $update_link_count           = 0;
-                       $activate_link_count         = 0;
-                       $total_required_action_count = 0;
-
-                       foreach ( $this->plugins as $slug => $plugin ) {
-                               if ( $this->is_plugin_active( $slug ) && false === $this->does_plugin_have_update( $slug ) ) {
-                                       continue;
-                               }
-
-                               if ( ! $this->is_plugin_installed( $slug ) ) {
-                                       if ( current_user_can( 'install_plugins' ) ) {
-                                               $install_link_count++;
-
-                                               if ( true === $plugin['required'] ) {
-                                                       $message['notice_can_install_required'][] = $slug;
-                                               } else {
-                                                       $message['notice_can_install_recommended'][] = $slug;
-                                               }
-                                       }
-                                       if ( true === $plugin['required'] ) {
-                                               $total_required_action_count++;
-                                       }
-                               } else {
-                                       if ( ! $this->is_plugin_active( $slug ) && $this->can_plugin_activate( $slug ) ) {
-                                               if ( current_user_can( 'activate_plugins' ) ) {
-                                                       $activate_link_count++;
-
-                                                       if ( true === $plugin['required'] ) {
-                                                               $message['notice_can_activate_required'][] = $slug;
-                                                       } else {
-                                                               $message['notice_can_activate_recommended'][] = $slug;
-                                                       }
-                                               }
-                                               if ( true === $plugin['required'] ) {
-                                                       $total_required_action_count++;
-                                               }
-                                       }
-
-                                       if ( $this->does_plugin_require_update( $slug ) || false !== $this->does_plugin_have_update( $slug ) ) {
-
-                                               if ( current_user_can( 'update_plugins' ) ) {
-                                                       $update_link_count++;
-
-                                                       if ( $this->does_plugin_require_update( $slug ) ) {
-                                                               $message['notice_ask_to_update'][] = $slug;
-                                                       } elseif ( false !== $this->does_plugin_have_update( $slug ) ) {
-                                                               $message['notice_ask_to_update_maybe'][] = $slug;
-                                                       }
-                                               }
-                                               if ( true === $plugin['required'] ) {
-                                                       $total_required_action_count++;
-                                               }
-                                       }
-                               }
-                       }
-                       unset( $slug, $plugin );
-
-                       // If we have notices to display, we move forward.
-                       if ( ! empty( $message ) || $total_required_action_count > 0 ) {
-                               krsort( $message ); // Sort messages.
-                               $rendered = '';
-
-                               // As add_settings_error() wraps the final message in a <p> and as the final message can't be
-                               // filtered, using <p>'s in our html would render invalid html output.
-                               $line_template = '<span style="display: block; margin: 0.5em 0.5em 0 0; clear: both;">%s</span>' . "\n";
-
-                               if ( ! current_user_can( 'activate_plugins' ) && ! current_user_can( 'install_plugins' ) && ! current_user_can( 'update_plugins' ) ) {
-                                       $rendered  = esc_html( $this->strings['notice_cannot_install_activate'] ) . ' ' . esc_html( $this->strings['contact_admin'] );
-                                       $rendered .= $this->create_user_action_links_for_notice( 0, 0, 0, $line_template );
-                               } else {
-
-                                       // If dismissable is false and a message is set, output it now.
-                                       if ( ! $this->dismissable && ! empty( $this->dismiss_msg ) ) {
-                                               $rendered .= sprintf( $line_template, wp_kses_post( $this->dismiss_msg ) );
-                                       }
-
-                                       // Render the individual message lines for the notice.
-                                       foreach ( $message as $type => $plugin_group ) {
-                                               $linked_plugins = array();
-
-                                               // Get the external info link for a plugin if one is available.
-                                               foreach ( $plugin_group as $plugin_slug ) {
-                                                       $linked_plugins[] = $this->get_info_link( $plugin_slug );
-                                               }
-                                               unset( $plugin_slug );
-
-                                               $count          = count( $plugin_group );
-                                               $linked_plugins = array_map( array( 'TGMPA_Utils', 'wrap_in_em' ), $linked_plugins );
-                                               $last_plugin    = array_pop( $linked_plugins ); // Pop off last name to prep for readability.
-                                               $imploded       = empty( $linked_plugins ) ? $last_plugin : ( implode( ', ', $linked_plugins ) . ' ' . esc_html_x( 'and', 'plugin A *and* plugin B', 'accesspress-parallax' ) . ' ' . $last_plugin );
-
-                                               $rendered .= sprintf(
-                                                       $line_template,
-                                                       sprintf(
-                                                               translate_nooped_plural( $this->strings[ $type ], $count, 'accesspress-parallax' ),
-                                                               $imploded,
-                                                               $count
-                                                       )
-                                               );
-
-                                       }
-                                       unset( $type, $plugin_group, $linked_plugins, $count, $last_plugin, $imploded );
-
-                                       $rendered .= $this->create_user_action_links_for_notice( $install_link_count, $update_link_count, $activate_link_count, $line_template );
-                               }
-
-                               // Register the nag messages and prepare them to be processed.
-                               add_settings_error( 'tgmpa', 'tgmpa', $rendered, $this->get_admin_notice_class() );
-                       }
-
-                       // Admin options pages already output settings_errors, so this is to avoid duplication.
-                       if ( 'options-general' !== $GLOBALS['current_screen']->parent_base ) {
-                               $this->display_settings_errors();
-                       }
-               }
-
-               /**
-                * Generate the user action links for the admin notice.
-                *
-                * @since 2.6.0
-                *
-                * @param int $install_count  Number of plugins to install.
-                * @param int $update_count   Number of plugins to update.
-                * @param int $activate_count Number of plugins to activate.
-                * @param int $line_template  Template for the HTML tag to output a line.
-                * @return string Action links.
-                */
-               protected function create_user_action_links_for_notice( $install_count, $update_count, $activate_count, $line_template ) {
-                       // Setup action links.
-                       $action_links = array(
-                               'install'  => '',
-                               'update'   => '',
-                               'activate' => '',
-                               'dismiss'  => $this->dismissable ? '<a href="' . esc_url( wp_nonce_url( add_query_arg( 'tgmpa-dismiss', 'dismiss_admin_notices' ), 'tgmpa-dismiss-' . get_current_user_id() ) ) . '" class="dismiss-notice" target="_parent">' . esc_html( $this->strings['dismiss'] ) . '</a>' : '',
-                       );
-
-                       $link_template = '<a href="%2$s">%1$s</a>';
-
-                       if ( current_user_can( 'install_plugins' ) ) {
-                               if ( $install_count > 0 ) {
-                                       $action_links['install'] = sprintf(
-                                               $link_template,
-                                               translate_nooped_plural( $this->strings['install_link'], $install_count, 'accesspress-parallax' ),
-                                               esc_url( $this->get_tgmpa_status_url( 'install' ) )
-                                       );
-                               }
-                               if ( $update_count > 0 ) {
-                                       $action_links['update'] = sprintf(
-                                               $link_template,
-                                               translate_nooped_plural( $this->strings['update_link'], $update_count, 'accesspress-parallax' ),
-                                               esc_url( $this->get_tgmpa_status_url( 'update' ) )
-                                       );
-                               }
-                       }
-
-                       if ( current_user_can( 'activate_plugins' ) && $activate_count > 0 ) {
-                               $action_links['activate'] = sprintf(
-                                       $link_template,
-                                       translate_nooped_plural( $this->strings['activate_link'], $activate_count, 'accesspress-parallax' ),
-                                       esc_url( $this->get_tgmpa_status_url( 'activate' ) )
-                               );
-                       }
-
-                       $action_links = apply_filters( 'tgmpa_notice_action_links', $action_links );
-
-                       $action_links = array_filter( (array) $action_links ); // Remove any empty array items.
-
-                       if ( ! empty( $action_links ) ) {
-                               $action_links = sprintf( $line_template, implode( ' | ', $action_links ) );
-                               return apply_filters( 'tgmpa_notice_rendered_action_links', $action_links );
-                       } else {
-                               return '';
-                       }
-               }
-
-               /**
-                * Get admin notice class.
-                *
-                * Work around all the changes to the various admin notice classes between WP 4.4 and 3.7
-                * (lowest supported version by TGMPA).
-                *
-                * @since 2.6.0
-                *
-                * @return string
-                */
-               protected function get_admin_notice_class() {
-                       if ( ! empty( $this->strings['nag_type'] ) ) {
-                               return sanitize_html_class( strtolower( $this->strings['nag_type'] ) );
-                       } else {
-                               if ( version_compare( $this->wp_version, '4.2', '>=' ) ) {
-                                       return 'notice-warning';
-                               } elseif ( version_compare( $this->wp_version, '4.1', '>=' ) ) {
-                                       return 'notice';
-                               } else {
-                                       return 'updated';
-                               }
-                       }
-               }
-
-               /**
-                * Display settings errors and remove those which have been displayed to avoid duplicate messages showing
-                *
-                * @since 2.5.0
-                */
-               protected function display_settings_errors() {
-                       global $wp_settings_errors;
-
-                       settings_errors( 'tgmpa' );
-
-                       foreach ( (array) $wp_settings_errors as $key => $details ) {
-                               if ( 'tgmpa' === $details['setting'] ) {
-                                       unset( $wp_settings_errors[ $key ] );
-                                       break;
-                               }
-                       }
-               }
-
-               /**
-                * Register dismissal of admin notices.
-                *
-                * Acts on the dismiss link in the admin nag messages.
-                * If clicked, the admin notice disappears and will no longer be visible to this user.
-                *
-                * @since 2.1.0
-                */
-               public function dismiss() {
-                       if ( isset( $_GET['tgmpa-dismiss'] ) && check_admin_referer( 'tgmpa-dismiss-' . get_current_user_id() ) ) {
-                               update_user_meta( get_current_user_id(), 'tgmpa_dismissed_notice_' . $this->id, 1 );
-                       }
-               }
-
-               /**
-                * Add individual plugin to our collection of plugins.
-                *
-                * If the required keys are not set or the plugin has already
-                * been registered, the plugin is not added.
-                *
-                * @since 2.0.0
-                *
-                * @param array|null $plugin Array of plugin arguments or null if invalid argument.
-                * @return null Return early if incorrect argument.
-                */
-               public function register( $plugin ) {
-                       if ( empty( $plugin['slug'] ) || empty( $plugin['name'] ) ) {
-                               return;
-                       }
-
-                       if ( empty( $plugin['slug'] ) || ! is_string( $plugin['slug'] ) || isset( $this->plugins[ $plugin['slug'] ] ) ) {
-                               return;
-                       }
-
-                       $defaults = array(
-                               'name'               => '',      // String
-                               'slug'               => '',      // String
-                               'source'             => 'repo',  // String
-                               'required'           => false,   // Boolean
-                               'version'            => '',      // String
-                               'force_activation'   => false,   // Boolean
-                               'force_deactivation' => false,   // Boolean
-                               'external_url'       => '',      // String
-                               'is_callable'        => '',      // String|Array.
-                       );
-
-                       // Prepare the received data.
-                       $plugin = wp_parse_args( $plugin, $defaults );
-
-                       // Standardize the received slug.
-                       $plugin['slug'] = $this->sanitize_key( $plugin['slug'] );
-
-                       // Forgive users for using string versions of booleans or floats for version number.
-                       $plugin['version']            = (string) $plugin['version'];
-                       $plugin['source']             = empty( $plugin['source'] ) ? 'repo' : $plugin['source'];
-                       $plugin['required']           = TGMPA_Utils::validate_bool( $plugin['required'] );
-                       $plugin['force_activation']   = TGMPA_Utils::validate_bool( $plugin['force_activation'] );
-                       $plugin['force_deactivation'] = TGMPA_Utils::validate_bool( $plugin['force_deactivation'] );
-
-                       // Enrich the received data.
-                       $plugin['file_path']   = $this->_get_plugin_basename_from_slug( $plugin['slug'] );
-                       $plugin['source_type'] = $this->get_plugin_source_type( $plugin['source'] );
-
-                       // Set the class properties.
-                       $this->plugins[ $plugin['slug'] ]    = $plugin;
-                       $this->sort_order[ $plugin['slug'] ] = $plugin['name'];
-
-                       // Should we add the force activation hook ?
-                       if ( true === $plugin['force_activation'] ) {
-                               $this->has_forced_activation = true;
-                       }
-
-                       // Should we add the force deactivation hook ?
-                       if ( true === $plugin['force_deactivation'] ) {
-                               $this->has_forced_deactivation = true;
-                       }
-               }
-
-               /**
-                * Determine what type of source the plugin comes from.
-                *
-                * @since 2.5.0
-                *
-                * @param string $source The source of the plugin as provided, either empty (= WP repo), a file path
-                *                       (= bundled) or an external URL.
-                * @return string 'repo', 'external', or 'bundled'
-                */
-               protected function get_plugin_source_type( $source ) {
-                       if ( 'repo' === $source || preg_match( self::WP_REPO_REGEX, $source ) ) {
-                               return 'repo';
-                       } elseif ( preg_match( self::IS_URL_REGEX, $source ) ) {
-                               return 'external';
-                       } else {
-                               return 'bundled';
-                       }
-               }
-
-               /**
-                * Sanitizes a string key.
-                *
-                * Near duplicate of WP Core `sanitize_key()`. The difference is that uppercase characters *are*
-                * allowed, so as not to break upgrade paths from non-standard bundled plugins using uppercase
-                * characters in the plugin directory path/slug. Silly them.
-                *
-                * @see https://developer.wordpress.org/reference/hooks/sanitize_key/
-                *
-                * @since 2.5.0
-                *
-                * @param string $key String key.
-                * @return string Sanitized key
-                */
-               public function sanitize_key( $key ) {
-                       $raw_key = $key;
-                       $key     = preg_replace( '`[^A-Za-z0-9_-]`', '', $key );
-
-                       /**
-                        * Filter a sanitized key string.
-                        *
-                        * @since 2.5.0
-                        *
-                        * @param string $key     Sanitized key.
-                        * @param string $raw_key The key prior to sanitization.
-                        */
-                       return apply_filters( 'tgmpa_sanitize_key', $key, $raw_key );
-               }
-
-               /**
-                * Amend default configuration settings.
-                *
-                * @since 2.0.0
-                *
-                * @param array $config Array of config options to pass as class properties.
-                */
-               public function config( $config ) {
-                       $keys = array(
-                               'id',
-                               'default_path',
-                               'has_notices',
-                               'dismissable',
-                               'dismiss_msg',
-                               'menu',
-                               'parent_slug',
-                               'capability',
-                               'is_automatic',
-                               'message',
-                               'strings',
-                       );
-
-                       foreach ( $keys as $key ) {
-                               if ( isset( $config[ $key ] ) ) {
-                                       if ( is_array( $config[ $key ] ) ) {
-                                               $this->$key = array_merge( $this->$key, $config[ $key ] );
-                                       } else {
-                                               $this->$key = $config[ $key ];
-                                       }
-                               }
-                       }
-               }
-
-               /**
-                * Amend action link after plugin installation.
-                *
-                * @since 2.0.0
-                *
-                * @param array $install_actions Existing array of actions.
-                * @return false|array Amended array of actions.
-                */
-               public function actions( $install_actions ) {
-                       // Remove action links on the TGMPA install page.
-                       if ( $this->is_tgmpa_page() ) {
-                               return false;
-                       }
-
-                       return $install_actions;
-               }
-
-               /**
-                * Flushes the plugins cache on theme switch to prevent stale entries
-                * from remaining in the plugin table.
-                *
-                * @since 2.4.0
-                *
-                * @param bool $clear_update_cache Optional. Whether to clear the Plugin updates cache.
-                *                                 Parameter added in v2.5.0.
-                */
-               public function flush_plugins_cache( $clear_update_cache = true ) {
-                       wp_clean_plugins_cache( $clear_update_cache );
-               }
-
-               /**
-                * Set file_path key for each installed plugin.
-                *
-                * @since 2.1.0
-                *
-                * @param string $plugin_slug Optional. If set, only (re-)populates the file path for that specific plugin.
-                *                            Parameter added in v2.5.0.
-                */
-               public function populate_file_path( $plugin_slug = '' ) {
-                       if ( ! empty( $plugin_slug ) && is_string( $plugin_slug ) && isset( $this->plugins[ $plugin_slug ] ) ) {
-                               $this->plugins[ $plugin_slug ]['file_path'] = $this->_get_plugin_basename_from_slug( $plugin_slug );
-                       } else {
-                               // Add file_path key for all plugins.
-                               foreach ( $this->plugins as $slug => $values ) {
-                                       $this->plugins[ $slug ]['file_path'] = $this->_get_plugin_basename_from_slug( $slug );
-                               }
-                       }
-               }
-
-               /**
-                * Helper function to extract the file path of the plugin file from the
-                * plugin slug, if the plugin is installed.
-                *
-                * @since 2.0.0
-                *
-                * @param string $slug Plugin slug (typically folder name) as provided by the developer.
-                * @return string Either file path for plugin if installed, or just the plugin slug.
-                */
-               protected function _get_plugin_basename_from_slug( $slug ) {
-                       $keys = array_keys( $this->get_plugins() );
-
-                       foreach ( $keys as $key ) {
-                               if ( preg_match( '|^' . $slug . '/|', $key ) ) {
-                                       return $key;
-                               }
-                       }
-
-                       return $slug;
-               }
-
-               /**
-                * Retrieve plugin data, given the plugin name.
-                *
-                * Loops through the registered plugins looking for $name. If it finds it,
-                * it returns the $data from that plugin. Otherwise, returns false.
-                *
-                * @since 2.1.0
-                *
-                * @param string $name Name of the plugin, as it was registered.
-                * @param string $data Optional. Array key of plugin data to return. Default is slug.
-                * @return string|boolean Plugin slug if found, false otherwise.
-                */
-               public function _get_plugin_data_from_name( $name, $data = 'slug' ) {
-                       foreach ( $this->plugins as $values ) {
-                               if ( $name === $values['name'] && isset( $values[ $data ] ) ) {
-                                       return $values[ $data ];
-                               }
-                       }
-
-                       return false;
-               }
-
-               /**
-                * Retrieve the download URL for a package.
-                *
-                * @since 2.5.0
-                *
-                * @param string $slug Plugin slug.
-                * @return string Plugin download URL or path to local file or empty string if undetermined.
-                */
-               public function get_download_url( $slug ) {
-                       $dl_source = '';
-
-                       switch ( $this->plugins[ $slug ]['source_type'] ) {
-                               case 'repo':
-                                       return $this->get_wp_repo_download_url( $slug );
-                               case 'external':
-                                       return $this->plugins[ $slug ]['source'];
-                               case 'bundled':
-                                       return $this->default_path . $this->plugins[ $slug ]['source'];
-                       }
-
-                       return $dl_source; // Should never happen.
-               }
-
-               /**
-                * Retrieve the download URL for a WP repo package.
-                *
-                * @since 2.5.0
-                *
-                * @param string $slug Plugin slug.
-                * @return string Plugin download URL.
-                */
-               protected function get_wp_repo_download_url( $slug ) {
-                       $source = '';
-                       $api    = $this->get_plugins_api( $slug );
-
-                       if ( false !== $api && isset( $api->download_link ) ) {
-                               $source = $api->download_link;
-                       }
-
-                       return $source;
-               }
-
-               /**
-                * Try to grab information from WordPress API.
-                *
-                * @since 2.5.0
-                *
-                * @param string $slug Plugin slug.
-                * @return object Plugins_api response object on success, WP_Error on failure.
-                */
-               protected function get_plugins_api( $slug ) {
-                       static $api = array(); // Cache received responses.
-
-                       if ( ! isset( $api[ $slug ] ) ) {
-                               if ( ! function_exists( 'plugins_api' ) ) {
-                                       require_once ABSPATH . 'wp-admin/includes/plugin-install.php';
-                               }
-
-                               $response = plugins_api( 'plugin_information', array( 'slug' => $slug, 'fields' => array( 'sections' => false ) ) );
-
-                               $api[ $slug ] = false;
-
-                               if ( is_wp_error( $response ) ) {
-                                       wp_die( esc_html( $this->strings['oops'] ) );
-                               } else {
-                                       $api[ $slug ] = $response;
-                               }
-                       }
-
-                       return $api[ $slug ];
-               }
-
-               /**
-                * Retrieve a link to a plugin information page.
-                *
-                * @since 2.5.0
-                *
-                * @param string $slug Plugin slug.
-                * @return string Fully formed html link to a plugin information page if available
-                *                or the plugin name if not.
-                */
-               public function get_info_link( $slug ) {
-                       if ( ! empty( $this->plugins[ $slug ]['external_url'] ) && preg_match( self::IS_URL_REGEX, $this->plugins[ $slug ]['external_url'] ) ) {
-                               $link = sprintf(
-                                       '<a href="%1$s" target="_blank">%2$s</a>',
-                                       esc_url( $this->plugins[ $slug ]['external_url'] ),
-                                       esc_html( $this->plugins[ $slug ]['name'] )
-                               );
-                       } elseif ( 'repo' === $this->plugins[ $slug ]['source_type'] ) {
-                               $url = add_query_arg(
-                                       array(
-                                               'tab'       => 'plugin-information',
-                                               'plugin'    => urlencode( $slug ),
-                                               'TB_iframe' => 'true',
-                                               'width'     => '640',
-                                               'height'    => '500',
-                                       ),
-                                       self_admin_url( 'plugin-install.php' )
-                               );
-
-                               $link = sprintf(
-                                       '<a href="%1$s" class="thickbox">%2$s</a>',
-                                       esc_url( $url ),
-                                       esc_html( $this->plugins[ $slug ]['name'] )
-                               );
-                       } else {
-                               $link = esc_html( $this->plugins[ $slug ]['name'] ); // No hyperlink.
-                       }
-
-                       return $link;
-               }
-
-               /**
-                * Determine if we're on the TGMPA Install page.
-                *
-                * @since 2.1.0
-                *
-                * @return boolean True when on the TGMPA page, false otherwise.
-                */
-               protected function is_tgmpa_page() {
-                       return isset( $_GET['page'] ) && $this->menu === $_GET['page'];
-               }
-
-               /**
-                * Determine if we're on a WP Core installation/upgrade page.
-                *
-                * @since 2.6.0
-                *
-                * @return boolean True when on a WP Core installation/upgrade page, false otherwise.
-                */
-               protected function is_core_update_page() {
-                       // Current screen is not always available, most notably on the customizer screen.
-                       if ( ! function_exists( 'get_current_screen' ) ) {
-                               return false;
-                       }
-
-                       $screen = get_current_screen();
-
-                       if ( 'update-core' === $screen->base ) {
-                               // Core update screen.
-                               return true;
-                       } elseif ( 'plugins' === $screen->base && ! empty( $_POST['action'] ) ) { // WPCS: CSRF ok.
-                               // Plugins bulk update screen.
-                               return true;
-                       } elseif ( 'update' === $screen->base && ! empty( $_POST['action'] ) ) { // WPCS: CSRF ok.
-                               // Individual updates (ajax call).
-                               return true;
-                       }
-
-                       return false;
-               }
-
-               /**
-                * Retrieve the URL to the TGMPA Install page.
-                *
-                * I.e. depending on the config settings passed something along the lines of:
-                * http://example.com/wp-admin/themes.php?page=tgmpa-install-plugins
-                *
-                * @since 2.5.0
-                *
-                * @return string Properly encoded URL (not escaped).
-                */
-               public function get_tgmpa_url() {
-                       static $url;
-
-                       if ( ! isset( $url ) ) {
-                               $parent = $this->parent_slug;
-                               if ( false === strpos( $parent, '.php' ) ) {
-                                       $parent = 'admin.php';
-                               }
-                               $url = add_query_arg(
-                                       array(
-                                               'page' => urlencode( $this->menu ),
-                                       ),
-                                       self_admin_url( $parent )
-                               );
-                       }
-
-                       return $url;
-               }
-
-               /**
-                * Retrieve the URL to the TGMPA Install page for a specific plugin status (view).
-                *
-                * I.e. depending on the config settings passed something along the lines of:
-                * http://example.com/wp-admin/themes.php?page=tgmpa-install-plugins&plugin_status=install
-                *
-                * @since 2.5.0
-                *
-                * @param string $status Plugin status - either 'install', 'update' or 'activate'.
-                * @return string Properly encoded URL (not escaped).
-                */
-               public function get_tgmpa_status_url( $status ) {
-                       return add_query_arg(
-                               array(
-                                       'plugin_status' => urlencode( $status ),
-                               ),
-                               $this->get_tgmpa_url()
-                       );
-               }
-
-               /**
-                * Determine whether there are open actions for plugins registered with TGMPA.
-                *
-                * @since 2.5.0
-                *
-                * @return bool True if complete, i.e. no outstanding actions. False otherwise.
-                */
-               public function is_tgmpa_complete() {
-                       $complete = true;
-                       foreach ( $this->plugins as $slug => $plugin ) {
-                               if ( ! $this->is_plugin_active( $slug ) || false !== $this->does_plugin_have_update( $slug ) ) {
-                                       $complete = false;
-                                       break;
-                               }
-                       }
-
-                       return $complete;
-               }
-
-               /**
-                * Check if a plugin is installed. Does not take must-use plugins into account.
-                *
-                * @since 2.5.0
-                *
-                * @param string $slug Plugin slug.
-                * @return bool True if installed, false otherwise.
-                */
-               public function is_plugin_installed( $slug ) {
-                       $installed_plugins = $this->get_plugins(); // Retrieve a list of all installed plugins (WP cached).
-
-                       return ( ! empty( $installed_plugins[ $this->plugins[ $slug ]['file_path'] ] ) );
-               }
-
-               /**
-                * Check if a plugin is active.
-                *
-                * @since 2.5.0
-                *
-                * @param string $slug Plugin slug.
-                * @return bool True if active, false otherwise.
-                */
-               public function is_plugin_active( $slug ) {
-                       return ( ( ! empty( $this->plugins[ $slug ]['is_callable'] ) && is_callable( $this->plugins[ $slug ]['is_callable'] ) ) || is_plugin_active( $this->plugins[ $slug ]['file_path'] ) );
-               }
-
-               /**
-                * Check if a plugin can be updated, i.e. if we have information on the minimum WP version required
-                * available, check whether the current install meets them.
-                *
-                * @since 2.5.0
-                *
-                * @param string $slug Plugin slug.
-                * @return bool True if OK to update, false otherwise.
-                */
-               public function can_plugin_update( $slug ) {
-                       // We currently can't get reliable info on non-WP-repo plugins - issue #380.
-                       if ( 'repo' !== $this->plugins[ $slug ]['source_type'] ) {
-                               return true;
-                       }
-
-                       $api = $this->get_plugins_api( $slug );
-
-                       if ( false !== $api && isset( $api->requires ) ) {
-                               return version_compare( $this->wp_version, $api->requires, '>=' );
-                       }
-
-                       // No usable info received from the plugins API, presume we can update.
-                       return true;
-               }
-
-               /**
-                * Check to see if the plugin is 'updatetable', i.e. installed, with an update available
-                * and no WP version requirements blocking it.
-                *
-                * @since 2.6.0
-                *
-                * @param string $slug Plugin slug.
-                * @return bool True if OK to proceed with update, false otherwise.
-                */
-               public function is_plugin_updatetable( $slug ) {
-                       if ( ! $this->is_plugin_installed( $slug ) ) {
-                               return false;
-                       } else {
-                               return ( false !== $this->does_plugin_have_update( $slug ) && $this->can_plugin_update( $slug ) );
-                       }
-               }
-
-               /**
-                * Check if a plugin can be activated, i.e. is not currently active and meets the minimum
-                * plugin version requirements set in TGMPA (if any).
-                *
-                * @since 2.5.0
-                *
-                * @param string $slug Plugin slug.
-                * @return bool True if OK to activate, false otherwise.
-                */
-               public function can_plugin_activate( $slug ) {
-                       return ( ! $this->is_plugin_active( $slug ) && ! $this->does_plugin_require_update( $slug ) );
-               }
-
-               /**
-                * Retrieve the version number of an installed plugin.
-                *
-                * @since 2.5.0
-                *
-                * @param string $slug Plugin slug.
-                * @return string Version number as string or an empty string if the plugin is not installed
-                *                or version unknown (plugins which don't comply with the plugin header standard).
-                */
-               public function get_installed_version( $slug ) {
-                       $installed_plugins = $this->get_plugins(); // Retrieve a list of all installed plugins (WP cached).
-
-                       if ( ! empty( $installed_plugins[ $this->plugins[ $slug ]['file_path'] ]['Version'] ) ) {
-                               return $installed_plugins[ $this->plugins[ $slug ]['file_path'] ]['Version'];
-                       }
-
-                       return '';
-               }
-
-               /**
-                * Check whether a plugin complies with the minimum version requirements.
-                *
-                * @since 2.5.0
-                *
-                * @param string $slug Plugin slug.
-                * @return bool True when a plugin needs to be updated, otherwise false.
-                */
-               public function does_plugin_require_update( $slug ) {
-                       $installed_version = $this->get_installed_version( $slug );
-                       $minimum_version   = $this->plugins[ $slug ]['version'];
-
-                       return version_compare( $minimum_version, $installed_version, '>' );
-               }
-
-               /**
-                * Check whether there is an update available for a plugin.
-                *
-                * @since 2.5.0
-                *
-                * @param string $slug Plugin slug.
-                * @return false|string Version number string of the available update or false if no update available.
-                */
-               public function does_plugin_have_update( $slug ) {
-                       // Presume bundled and external plugins will point to a package which meets the minimum required version.
-                       if ( 'repo' !== $this->plugins[ $slug ]['source_type'] ) {
-                               if ( $this->does_plugin_require_update( $slug ) ) {
-                                       return $this->plugins[ $slug ]['version'];
-                               }
-
-                               return false;
-                       }
-
-                       $repo_updates = get_site_transient( 'update_plugins' );
-
-                       if ( isset( $repo_updates->response[ $this->plugins[ $slug ]['file_path'] ]->new_version ) ) {
-                               return $repo_updates->response[ $this->plugins[ $slug ]['file_path'] ]->new_version;
-                       }
-
-                       return false;
-               }
-
-               /**
-                * Retrieve potential upgrade notice for a plugin.
-                *
-                * @since 2.5.0
-                *
-                * @param string $slug Plugin slug.
-                * @return string The upgrade notice or an empty string if no message was available or provided.
-                */
-               public function get_upgrade_notice( $slug ) {
-                       // We currently can't get reliable info on non-WP-repo plugins - issue #380.
-                       if ( 'repo' !== $this->plugins[ $slug ]['source_type'] ) {
-                               return '';
-                       }
-
-                       $repo_updates = get_site_transient( 'update_plugins' );
-
-                       if ( ! empty( $repo_updates->response[ $this->plugins[ $slug ]['file_path'] ]->upgrade_notice ) ) {
-                               return $repo_updates->response[ $this->plugins[ $slug ]['file_path'] ]->upgrade_notice;
-                       }
-
-                       return '';
-               }
-
-               /**
-                * Wrapper around the core WP get_plugins function, making sure it's actually available.
-                *
-                * @since 2.5.0
-                *
-                * @param string $plugin_folder Optional. Relative path to single plugin folder.
-                * @return array Array of installed plugins with plugin information.
-                */
-               public function get_plugins( $plugin_folder = '' ) {
-                       if ( ! function_exists( 'get_plugins' ) ) {
-                               require_once ABSPATH . 'wp-admin/includes/plugin.php';
-                       }
-
-                       return get_plugins( $plugin_folder );
-               }
-
-               /**
-                * Delete dismissable nag option when theme is switched.
-                *
-                * This ensures that the user(s) is/are again reminded via nag of required
-                * and/or recommended plugins if they re-activate the theme.
-                *
-                * @since 2.1.1
-                */
-               public function update_dismiss() {
-                       delete_metadata( 'user', null, 'tgmpa_dismissed_notice_' . $this->id, null, true );
-               }
-
-               /**
-                * Forces plugin activation if the parameter 'force_activation' is
-                * set to true.
-                *
-                * This allows theme authors to specify certain plugins that must be
-                * active at all times while using the current theme.
-                *
-                * Please take special care when using this parameter as it has the
-                * potential to be harmful if not used correctly. Setting this parameter
-                * to true will not allow the specified plugin to be deactivated unless
-                * the user switches themes.
-                *
-                * @since 2.2.0
-                */
-               public function force_activation() {
-                       foreach ( $this->plugins as $slug => $plugin ) {
-                               if ( true === $plugin['force_activation'] ) {
-                                       if ( ! $this->is_plugin_installed( $slug ) ) {
-                                               // Oops, plugin isn't there so iterate to next condition.
-                                               continue;
-                                       } elseif ( $this->can_plugin_activate( $slug ) ) {
-                                               // There we go, activate the plugin.
-                                               activate_plugin( $plugin['file_path'] );
-                                       }
-                               }
-                       }
-               }
-
-               /**
-                * Forces plugin deactivation if the parameter 'force_deactivation'
-                * is set to true and adds the plugin to the 'recently active' plugins list.
-                *
-                * This allows theme authors to specify certain plugins that must be
-                * deactivated upon switching from the current theme to another.
-                *
-                * Please take special care when using this parameter as it has the
-                * potential to be harmful if not used correctly.
-                *
-                * @since 2.2.0
-                */
-               public function force_deactivation() {
-                       $deactivated = array();
-
-                       foreach ( $this->plugins as $slug => $plugin ) {
-                               /*
-                                * Only proceed forward if the parameter is set to true and plugin is active
-                                * as a 'normal' (not must-use) plugin.
-                                */
-                               if ( true === $plugin['force_deactivation'] && is_plugin_active( $plugin['file_path'] ) ) {
-                                       deactivate_plugins( $plugin['file_path'] );
-                                       $deactivated[ $plugin['file_path'] ] = time();
-                               }
-                       }
-
-                       if ( ! empty( $deactivated ) ) {
-                               update_option( 'recently_activated', $deactivated + (array) get_option( 'recently_activated' ) );
-                       }
-               }
-
-               /**
-                * Echo the current TGMPA version number to the page.
-                *
-                * @since 2.5.0
-                */
-               public function show_tgmpa_version() {
-                       echo '<p style="float: right; padding: 0em 1.5em 0.5em 0;"><strong><small>',
-                               esc_html(
-                                       sprintf(
-                                               /* translators: %s: version number */
-                                               __( 'TGMPA v%s', 'accesspress-parallax' ),
-                                               self::TGMPA_VERSION
-                                       )
-                               ),
-                               '</small></strong></p>';
-               }
-
-               /**
-                * Returns the singleton instance of the class.
-                *
-                * @since 2.4.0
-                *
-                * @return \TGM_Plugin_Activation The TGM_Plugin_Activation object.
-                */
-               public static function get_instance() {
-                       if ( ! isset( self::$instance ) && ! ( self::$instance instanceof self ) ) {
-                               self::$instance = new self();
-                       }
-
-                       return self::$instance;
-               }
-       }
-
-       if ( ! function_exists( 'load_tgm_plugin_activation' ) ) {
-               /**
-                * Ensure only one instance of the class is ever invoked.
-                *
-                * @since 2.5.0
-                */
-               function load_tgm_plugin_activation() {
-                       $GLOBALS['tgmpa'] = TGM_Plugin_Activation::get_instance();
-               }
-       }
-
-       if ( did_action( 'plugins_loaded' ) ) {
-               load_tgm_plugin_activation();
-       } else {
-               add_action( 'plugins_loaded', 'load_tgm_plugin_activation' );
-       }
-}
-
-if ( ! function_exists( 'tgmpa' ) ) {
-       /**
-        * Helper function to register a collection of required plugins.
-        *
-        * @since 2.0.0
-        * @api
-        *
-        * @param array $plugins An array of plugin arrays.
-        * @param array $config  Optional. An array of configuration values.
-        */
-       function tgmpa( $plugins, $config = array() ) {
-               $instance = call_user_func( array( get_class( $GLOBALS['tgmpa'] ), 'get_instance' ) );
-
-               foreach ( $plugins as $plugin ) {
-                       call_user_func( array( $instance, 'register' ), $plugin );
-               }
-
-               if ( ! empty( $config ) && is_array( $config ) ) {
-                       // Send out notices for deprecated arguments passed.
-                       if ( isset( $config['notices'] ) ) {
-                               _deprecated_argument( __FUNCTION__, '2.2.0', 'The `notices` config parameter was renamed to `has_notices` in TGMPA 2.2.0. Please adjust your configuration.' );
-                               if ( ! isset( $config['has_notices'] ) ) {
-                                       $config['has_notices'] = $config['notices'];
-                               }
-                       }
-
-                       if ( isset( $config['parent_menu_slug'] ) ) {
-                               _deprecated_argument( __FUNCTION__, '2.4.0', 'The `parent_menu_slug` config parameter was removed in TGMPA 2.4.0. In TGMPA 2.5.0 an alternative was (re-)introduced. Please adjust your configuration. For more information visit the website: http://tgmpluginactivation.com/configuration/#h-configuration-options.' );
-                       }
-                       if ( isset( $config['parent_url_slug'] ) ) {
-                               _deprecated_argument( __FUNCTION__, '2.4.0', 'The `parent_url_slug` config parameter was removed in TGMPA 2.4.0. In TGMPA 2.5.0 an alternative was (re-)introduced. Please adjust your configuration. For more information visit the website: http://tgmpluginactivation.com/configuration/#h-configuration-options.' );
-                       }
-
-                       call_user_func( array( $instance, 'config' ), $config );
-               }
-       }
-}
-
-/**
- * WP_List_Table isn't always available. If it isn't available,
- * we load it here.
- *
- * @since 2.2.0
- */
-if ( ! class_exists( 'WP_List_Table' ) ) {
-       require_once ABSPATH . 'wp-admin/includes/class-wp-list-table.php';
-}
-
-if ( ! class_exists( 'TGMPA_List_Table' ) ) {
-
-       /**
-        * List table class for handling plugins.
-        *
-        * Extends the WP_List_Table class to provide a future-compatible
-        * way of listing out all required/recommended plugins.
-        *
-        * Gives users an interface similar to the Plugin Administration
-        * area with similar (albeit stripped down) capabilities.
-        *
-        * This class also allows for the bulk install of plugins.
-        *
-        * @since 2.2.0
-        *
-        * @package TGM-Plugin-Activation
-        * @author  Thomas Griffin
-        * @author  Gary Jones
-        */
-       class TGMPA_List_Table extends WP_List_Table {
-               /**
-                * TGMPA instance.
-                *
-                * @since 2.5.0
-                *
-                * @var object
-                */
-               protected $tgmpa;
-
-               /**
-                * The currently chosen view.
-                *
-                * @since 2.5.0
-                *
-                * @var string One of: 'all', 'install', 'update', 'activate'
-                */
-               public $view_context = 'all';
-
-               /**
-                * The plugin counts for the various views.
-                *
-                * @since 2.5.0
-                *
-                * @var array
-                */
-               protected $view_totals = array(
-                       'all'      => 0,
-                       'install'  => 0,
-                       'update'   => 0,
-                       'activate' => 0,
-               );
-
-               /**
-                * References parent constructor and sets defaults for class.
-                *
-                * @since 2.2.0
-                */
-               public function __construct() {
-                       $this->tgmpa = call_user_func( array( get_class( $GLOBALS['tgmpa'] ), 'get_instance' ) );
-
-                       parent::__construct(
-                               array(
-                                       'singular' => 'plugin',
-                                       'plural'   => 'plugins',
-                                       'ajax'     => false,
-                               )
-                       );
-
-                       if ( isset( $_REQUEST['plugin_status'] ) && in_array( $_REQUEST['plugin_status'], array( 'install', 'update', 'activate' ), true ) ) {
-                               $this->view_context = sanitize_key( $_REQUEST['plugin_status'] );
-                       }
-
-                       add_filter( 'tgmpa_table_data_items', array( $this, 'sort_table_items' ) );
-               }
-
-               /**
-                * Get a list of CSS classes for the <table> tag.
-                *
-                * Overruled to prevent the 'plural' argument from being added.
-                *
-                * @since 2.5.0
-                *
-                * @return array CSS classnames.
-                */
-               public function get_table_classes() {
-                       return array( 'widefat', 'fixed' );
-               }
-
-               /**
-                * Gathers and renames all of our plugin information to be used by WP_List_Table to create our table.
-                *
-                * @since 2.2.0
-                *
-                * @return array $table_data Information for use in table.
-                */
-               protected function _gather_plugin_data() {
-                       // Load thickbox for plugin links.
-                       $this->tgmpa->admin_init();
-                       $this->tgmpa->thickbox();
-
-                       // Categorize the plugins which have open actions.
-                       $plugins = $this->categorize_plugins_to_views();
-
-                       // Set the counts for the view links.
-                       $this->set_view_totals( $plugins );
-
-                       // Prep variables for use and grab list of all installed plugins.
-                       $table_data = array();
-                       $i          = 0;
-
-                       // Redirect to the 'all' view if no plugins were found for the selected view context.
-                       if ( empty( $plugins[ $this->view_context ] ) ) {
-                               $this->view_context = 'all';
-                       }
-
-                       foreach ( $plugins[ $this->view_context ] as $slug => $plugin ) {
-                               $table_data[ $i ]['sanitized_plugin']  = $plugin['name'];
-                               $table_data[ $i ]['slug']              = $slug;
-                               $table_data[ $i ]['plugin']            = '<strong>' . $this->tgmpa->get_info_link( $slug ) . '</strong>';
-                               $table_data[ $i ]['source']            = $this->get_plugin_source_type_text( $plugin['source_type'] );
-                               $table_data[ $i ]['type']              = $this->get_plugin_advise_type_text( $plugin['required'] );
-                               $table_data[ $i ]['status']            = $this->get_plugin_status_text( $slug );
-                               $table_data[ $i ]['installed_version'] = $this->tgmpa->get_installed_version( $slug );
-                               $table_data[ $i ]['minimum_version']   = $plugin['version'];
-                               $table_data[ $i ]['available_version'] = $this->tgmpa->does_plugin_have_update( $slug );
-
-                               // Prep the upgrade notice info.
-                               $upgrade_notice = $this->tgmpa->get_upgrade_notice( $slug );
-                               if ( ! empty( $upgrade_notice ) ) {
-                                       $table_data[ $i ]['upgrade_notice'] = $upgrade_notice;
-
-                                       add_action( "tgmpa_after_plugin_row_{$slug}", array( $this, 'wp_plugin_update_row' ), 10, 2 );
-                               }
-
-                               $table_data[ $i ] = apply_filters( 'tgmpa_table_data_item', $table_data[ $i ], $plugin );
-
-                               $i++;
-                       }
-
-                       return $table_data;
-               }
-
-               /**
-                * Categorize the plugins which have open actions into views for the TGMPA page.
-                *
-                * @since 2.5.0
-                */
-               protected function categorize_plugins_to_views() {
-                       $plugins = array(
-                               'all'      => array(), // Meaning: all plugins which still have open actions.
-                               'install'  => array(),
-                               'update'   => array(),
-                               'activate' => array(),
-                       );
-
-                       foreach ( $this->tgmpa->plugins as $slug => $plugin ) {
-                               if ( $this->tgmpa->is_plugin_active( $slug ) && false === $this->tgmpa->does_plugin_have_update( $slug ) ) {
-                                       // No need to display plugins if they are installed, up-to-date and active.
-                                       continue;
-                               } else {
-                                       $plugins['all'][ $slug ] = $plugin;
-
-                                       if ( ! $this->tgmpa->is_plugin_installed( $slug ) ) {
-                                               $plugins['install'][ $slug ] = $plugin;
-                                       } else {
-                                               if ( false !== $this->tgmpa->does_plugin_have_update( $slug ) ) {
-                                                       $plugins['update'][ $slug ] = $plugin;
-                                               }
-
-                                               if ( $this->tgmpa->can_plugin_activate( $slug ) ) {
-                                                       $plugins['activate'][ $slug ] = $plugin;
-                                               }
-                                       }
-                               }
-                       }
-
-                       return $plugins;
-               }
-
-               /**
-                * Set the counts for the view links.
-                *
-                * @since 2.5.0
-                *
-                * @param array $plugins Plugins order by view.
-                */
-               protected function set_view_totals( $plugins ) {
-                       foreach ( $plugins as $type => $list ) {
-                               $this->view_totals[ $type ] = count( $list );
-                       }
-               }
-
-               /**
-                * Get the plugin required/recommended text string.
-                *
-                * @since 2.5.0
-                *
-                * @param string $required Plugin required setting.
-                * @return string
-                */
-               protected function get_plugin_advise_type_text( $required ) {
-                       if ( true === $required ) {
-                               return __( 'Required', 'accesspress-parallax' );
-                       }
-
-                       return __( 'Recommended', 'accesspress-parallax' );
-               }
-
-               /**
-                * Get the plugin source type text string.
-                *
-                * @since 2.5.0
-                *
-                * @param string $type Plugin type.
-                * @return string
-                */
-               protected function get_plugin_source_type_text( $type ) {
-                       $string = '';
-
-                       switch ( $type ) {
-                               case 'repo':
-                                       $string = __( 'WordPress Repository', 'accesspress-parallax' );
-                                       break;
-                               case 'external':
-                                       $string = __( 'External Source', 'accesspress-parallax' );
-                                       break;
-                               case 'bundled':
-                                       $string = __( 'Pre-Packaged', 'accesspress-parallax' );
-                                       break;
-                       }
-
-                       return $string;
-               }
-
-               /**
-                * Determine the plugin status message.
-                *
-                * @since 2.5.0
-                *
-                * @param string $slug Plugin slug.
-                * @return string
-                */
-               protected function get_plugin_status_text( $slug ) {
-                       if ( ! $this->tgmpa->is_plugin_installed( $slug ) ) {
-                               return __( 'Not Installed', 'accesspress-parallax' );
-                       }
-
-                       if ( ! $this->tgmpa->is_plugin_active( $slug ) ) {
-                               $install_status = __( 'Installed But Not Activated', 'accesspress-parallax' );
-                       } else {
-                               $install_status = __( 'Active', 'accesspress-parallax' );
-                       }
-
-                       $update_status = '';
-
-                       if ( $this->tgmpa->does_plugin_require_update( $slug ) && false === $this->tgmpa->does_plugin_have_update( $slug ) ) {
-                               $update_status = __( 'Required Update not Available', 'accesspress-parallax' );
-
-                       } elseif ( $this->tgmpa->does_plugin_require_update( $slug ) ) {
-                               $update_status = __( 'Requires Update', 'accesspress-parallax' );
-
-                       } elseif ( false !== $this->tgmpa->does_plugin_have_update( $slug ) ) {
-                               $update_status = __( 'Update recommended', 'accesspress-parallax' );
-                       }
-
-                       if ( '' === $update_status ) {
-                               return $install_status;
-                       }
-
-                       return sprintf(
-                               /* translators: 1: install status, 2: update status */
-                               _x( '%1$s, %2$s', 'Install/Update Status', 'accesspress-parallax' ),
-                               $install_status,
-                               $update_status
-                       );
-               }
-
-               /**
-                * Sort plugins by Required/Recommended type and by alphabetical plugin name within each type.
-                *
-                * @since 2.5.0
-                *
-                * @param array $items Prepared table items.
-                * @return array Sorted table items.
-                */
-               public function sort_table_items( $items ) {
-                       $type = array();
-                       $name = array();
-
-                       foreach ( $items as $i => $plugin ) {
-                               $type[ $i ] = $plugin['type']; // Required / recommended.
-                               $name[ $i ] = $plugin['sanitized_plugin'];
-                       }
-
-                       array_multisort( $type, SORT_DESC, $name, SORT_ASC, $items );
-
-                       return $items;
-               }
-
-               /**
-                * Get an associative array ( id => link ) of the views available on this table.
-                *
-                * @since 2.5.0
-                *
-                * @return array
-                */
-               public function get_views() {
-                       $status_links = array();
-
-                       foreach ( $this->view_totals as $type => $count ) {
-                               if ( $count < 1 ) {
-                                       continue;
-                               }
-
-                               switch ( $type ) {
-                                       case 'all':
-                                               /* translators: 1: number of plugins. */
-                                               $text = _nx( 'All <span class="count">(%s)</span>', 'All <span class="count">(%s)</span>', $count, 'plugins', 'accesspress-parallax' );
-                                               break;
-                                       case 'install':
-                                               /* translators: 1: number of plugins. */
-                                               $text = _n( 'To Install <span class="count">(%s)</span>', 'To Install <span class="count">(%s)</span>', $count, 'accesspress-parallax' );
-                                               break;
-                                       case 'update':
-                                               /* translators: 1: number of plugins. */
-                                               $text = _n( 'Update Available <span class="count">(%s)</span>', 'Update Available <span class="count">(%s)</span>', $count, 'accesspress-parallax' );
-                                               break;
-                                       case 'activate':
-                                               /* translators: 1: number of plugins. */
-                                               $text = _n( 'To Activate <span class="count">(%s)</span>', 'To Activate <span class="count">(%s)</span>', $count, 'accesspress-parallax' );
-                                               break;
-                                       default:
-                                               $text = '';
-                                               break;
-                               }
-
-                               if ( ! empty( $text ) ) {
-
-                                       $status_links[ $type ] = sprintf(
-                                               '<a href="%s"%s>%s</a>',
-                                               esc_url( $this->tgmpa->get_tgmpa_status_url( $type ) ),
-                                               ( $type === $this->view_context ) ? ' class="current"' : '',
-                                               sprintf( $text, number_format_i18n( $count ) )
-                                       );
-                               }
-                       }
-
-                       return $status_links;
-               }
-
-               /**
-                * Create default columns to display important plugin information
-                * like type, action and status.
-                *
-                * @since 2.2.0
-                *
-                * @param array  $item        Array of item data.
-                * @param string $column_name The name of the column.
-                * @return string
-                */
-               public function column_default( $item, $column_name ) {
-                       return $item[ $column_name ];
-               }
-
-               /**
-                * Required for bulk installing.
-                *
-                * Adds a checkbox for each plugin.
-                *
-                * @since 2.2.0
-                *
-                * @param array $item Array of item data.
-                * @return string The input checkbox with all necessary info.
-                */
-               public function column_cb( $item ) {
-                       return sprintf(
-                               '<input type="checkbox" name="%1$s[]" value="%2$s" id="%3$s" />',
-                               esc_attr( $this->_args['singular'] ),
-                               esc_attr( $item['slug'] ),
-                               esc_attr( $item['sanitized_plugin'] )
-                       );
-               }
-
-               /**
-                * Create default title column along with the action links.
-                *
-                * @since 2.2.0
-                *
-                * @param array $item Array of item data.
-                * @return string The plugin name and action links.
-                */
-               public function column_plugin( $item ) {
-                       return sprintf(
-                               '%1$s %2$s',
-                               $item['plugin'],
-                               $this->row_actions( $this->get_row_actions( $item ), true )
-                       );
-               }
-
-               /**
-                * Create version information column.
-                *
-                * @since 2.5.0
-                *
-                * @param array $item Array of item data.
-                * @return string HTML-formatted version information.
-                */
-               public function column_version( $item ) {
-                       $output = array();
-
-                       if ( $this->tgmpa->is_plugin_installed( $item['slug'] ) ) {
-                               $installed = ! empty( $item['installed_version'] ) ? $item['installed_version'] : _x( 'unknown', 'as in: "version nr unknown"', 'accesspress-parallax' );
-
-                               $color = '';
-                               if ( ! empty( $item['minimum_version'] ) && $this->tgmpa->does_plugin_require_update( $item['slug'] ) ) {
-                                       $color = ' color: #ff0000; font-weight: bold;';
-                               }
-
-                               $output[] = sprintf(
-                                       '<p><span style="min-width: 32px; text-align: right; float: right;%1$s">%2$s</span>' . __( 'Installed version:', 'accesspress-parallax' ) . '</p>',
-                                       $color,
-                                       $installed
-                               );
-                       }
-
-                       if ( ! empty( $item['minimum_version'] ) ) {
-                               $output[] = sprintf(
-                                       '<p><span style="min-width: 32px; text-align: right; float: right;">%1$s</span>' . __( 'Minimum required version:', 'accesspress-parallax' ) . '</p>',
-                                       $item['minimum_version']
-                               );
-                       }
-
-                       if ( ! empty( $item['available_version'] ) ) {
-                               $color = '';
-                               if ( ! empty( $item['minimum_version'] ) && version_compare( $item['available_version'], $item['minimum_version'], '>=' ) ) {
-                                       $color = ' color: #71C671; font-weight: bold;';
-                               }
-
-                               $output[] = sprintf(
-                                       '<p><span style="min-width: 32px; text-align: right; float: right;%1$s">%2$s</span>' . __( 'Available version:', 'accesspress-parallax' ) . '</p>',
-                                       $color,
-                                       $item['available_version']
-                               );
-                       }
-
-                       if ( empty( $output ) ) {
-                               return '&nbsp;'; // Let's not break the table layout.
-                       } else {
-                               return implode( "\n", $output );
-                       }
-               }
-
-               /**
-                * Sets default message within the plugins table if no plugins
-                * are left for interaction.
-                *
-                * Hides the menu item to prevent the user from clicking and
-                * getting a permissions error.
-                *
-                * @since 2.2.0
-                */
-               public function no_items() {
-                       echo esc_html__( 'No plugins to install, update or activate.', 'accesspress-parallax' ) . ' <a href="' . esc_url( self_admin_url() ) . '"> ' . esc_html__( 'Return to the Dashboard', 'accesspress-parallax' ) . '</a>';
-                       echo '<style type="text/css">#adminmenu .wp-submenu li.current { display: none !important; }</style>';
-               }
-
-               /**
-                * Output all the column information within the table.
-                *
-                * @since 2.2.0
-                *
-                * @return array $columns The column names.
-                */
-               public function get_columns() {
-                       $columns = array(
-                               'cb'     => '<input type="checkbox" />',
-                               'plugin' => __( 'Plugin', 'accesspress-parallax' ),
-                               'source' => __( 'Source', 'accesspress-parallax' ),
-                               'type'   => __( 'Type', 'accesspress-parallax' ),
-                       );
-
-                       if ( 'all' === $this->view_context || 'update' === $this->view_context ) {
-                               $columns['version'] = __( 'Version', 'accesspress-parallax' );
-                               $columns['status']  = __( 'Status', 'accesspress-parallax' );
-                       }
-
-                       return apply_filters( 'tgmpa_table_columns', $columns );
-               }
-
-               /**
-                * Get name of default primary column
-                *
-                * @since 2.5.0 / WP 4.3+ compatibility
-                * @access protected
-                *
-                * @return string
-                */
-               protected function get_default_primary_column_name() {
-                       return 'plugin';
-               }
-
-               /**
-                * Get the name of the primary column.
-                *
-                * @since 2.5.0 / WP 4.3+ compatibility
-                * @access protected
-                *
-                * @return string The name of the primary column.
-                */
-               protected function get_primary_column_name() {
-                       if ( method_exists( 'WP_List_Table', 'get_primary_column_name' ) ) {
-                               return parent::get_primary_column_name();
-                       } else {
-                               return $this->get_default_primary_column_name();
-                       }
-               }
-
-               /**
-                * Get the actions which are relevant for a specific plugin row.
-                *
-                * @since 2.5.0
-                *
-                * @param array $item Array of item data.
-                * @return array Array with relevant action links.
-                */
-               protected function get_row_actions( $item ) {
-                       $actions      = array();
-                       $action_links = array();
-
-                       // Display the 'Install' action link if the plugin is not yet available.
-                       if ( ! $this->tgmpa->is_plugin_installed( $item['slug'] ) ) {
-                               /* translators: %2$s: plugin name in screen reader markup */
-                               $actions['install'] = __( 'Install %2$s', 'accesspress-parallax' );
-                       } else {
-                               // Display the 'Update' action link if an update is available and WP complies with plugin minimum.
-                               if ( false !== $this->tgmpa->does_plugin_have_update( $item['slug'] ) && $this->tgmpa->can_plugin_update( $item['slug'] ) ) {
-                                       /* translators: %2$s: plugin name in screen reader markup */
-                                       $actions['update'] = __( 'Update %2$s', 'accesspress-parallax' );
-                               }
-
-                               // Display the 'Activate' action link, but only if the plugin meets the minimum version.
-                               if ( $this->tgmpa->can_plugin_activate( $item['slug'] ) ) {
-                                       /* translators: %2$s: plugin name in screen reader markup */
-                                       $actions['activate'] = __( 'Activate %2$s', 'accesspress-parallax' );
-                               }
-                       }
-
-                       // Create the actual links.
-                       foreach ( $actions as $action => $text ) {
-                               $nonce_url = wp_nonce_url(
-                                       add_query_arg(
-                                               array(
-                                                       'plugin'           => urlencode( $item['slug'] ),
-                                                       'tgmpa-' . $action => $action . '-plugin',
-                                               ),
-                                               $this->tgmpa->get_tgmpa_url()
-                                       ),
-                                       'tgmpa-' . $action,
-                                       'tgmpa-nonce'
-                               );
-
-                               $action_links[ $action ] = sprintf(
-                                       '<a href="%1$s">' . esc_html( $text ) . '</a>', // $text contains the second placeholder.
-                                       esc_url( $nonce_url ),
-                                       '<span class="screen-reader-text">' . esc_html( $item['sanitized_plugin'] ) . '</span>'
-                               );
-                       }
-
-                       $prefix = ( defined( 'WP_NETWORK_ADMIN' ) && WP_NETWORK_ADMIN ) ? 'network_admin_' : '';
-                       return apply_filters( "tgmpa_{$prefix}plugin_action_links", array_filter( $action_links ), $item['slug'], $item, $this->view_context );
-               }
-
-               /**
-                * Generates content for a single row of the table.
-                *
-                * @since 2.5.0
-                *
-                * @param object $item The current item.
-                */
-               public function single_row( $item ) {
-                       parent::single_row( $item );
-
-                       /**
-                        * Fires after each specific row in the TGMPA Plugins list table.
-                        *
-                        * The dynamic portion of the hook name, `$item['slug']`, refers to the slug
-                        * for the plugin.
-                        *
-                        * @since 2.5.0
-                        */
-                       do_action( "tgmpa_after_plugin_row_{$item['slug']}", $item['slug'], $item, $this->view_context );
-               }
-
-               /**
-                * Show the upgrade notice below a plugin row if there is one.
-                *
-                * @since 2.5.0
-                *
-                * @see /wp-admin/includes/update.php
-                *
-                * @param string $slug Plugin slug.
-                * @param array  $item The information available in this table row.
-                * @return null Return early if upgrade notice is empty.
-                */
-               public function wp_plugin_update_row( $slug, $item ) {
-                       if ( empty( $item['upgrade_notice'] ) ) {
-                               return;
-                       }
-
-                       echo '
-                               <tr class="plugin-update-tr">
-                                       <td colspan="', absint( $this->get_column_count() ), '" class="plugin-update colspanchange">
-                                               <div class="update-message">',
-                                                       esc_html__( 'Upgrade message from the plugin author:', 'accesspress-parallax' ),
-                                                       ' <strong>', wp_kses_data( $item['upgrade_notice'] ), '</strong>
-                                               </div>
-                                       </td>
-                               </tr>';
-               }
-
-               /**
-                * Extra controls to be displayed between bulk actions and pagination.
-                *
-                * @since 2.5.0
-                *
-                * @param string $which 'top' or 'bottom' table navigation.
-                */
-               public function extra_tablenav( $which ) {
-                       if ( 'bottom' === $which ) {
-                               $this->tgmpa->show_tgmpa_version();
-                       }
-               }
-
-               /**
-                * Defines the bulk actions for handling registered plugins.
-                *
-                * @since 2.2.0
-                *
-                * @return array $actions The bulk actions for the plugin install table.
-                */
-               public function get_bulk_actions() {
-
-                       $actions = array();
-
-                       if ( 'update' !== $this->view_context && 'activate' !== $this->view_context ) {
-                               if ( current_user_can( 'install_plugins' ) ) {
-                                       $actions['tgmpa-bulk-install'] = __( 'Install', 'accesspress-parallax' );
-                               }
-                       }
-
-                       if ( 'install' !== $this->view_context ) {
-                               if ( current_user_can( 'update_plugins' ) ) {
-                                       $actions['tgmpa-bulk-update'] = __( 'Update', 'accesspress-parallax' );
-                               }
-                               if ( current_user_can( 'activate_plugins' ) ) {
-                                       $actions['tgmpa-bulk-activate'] = __( 'Activate', 'accesspress-parallax' );
-                               }
-                       }
-
-                       return $actions;
-               }
-
-               /**
-                * Processes bulk installation and activation actions.
-                *
-                * The bulk installation process looks for the $_POST information and passes that
-                * through if a user has to use WP_Filesystem to enter their credentials.
-                *
-                * @since 2.2.0
-                */
-               public function process_bulk_actions() {
-                       // Bulk installation process.
-                       if ( 'tgmpa-bulk-install' === $this->current_action() || 'tgmpa-bulk-update' === $this->current_action() ) {
-
-                               check_admin_referer( 'bulk-' . $this->_args['plural'] );
-
-                               $install_type = 'install';
-                               if ( 'tgmpa-bulk-update' === $this->current_action() ) {
-                                       $install_type = 'update';
-                               }
-
-                               $plugins_to_install = array();
-
-                               // Did user actually select any plugins to install/update ?
-                               if ( empty( $_POST['plugin'] ) ) {
-                                       if ( 'install' === $install_type ) {
-                                               $message = __( 'No plugins were selected to be installed. No action taken.', 'accesspress-parallax' );
-                                       } else {
-                                               $message = __( 'No plugins were selected to be updated. No action taken.', 'accesspress-parallax' );
-                                       }
-
-                                       echo '<div id="message" class="error"><p>', esc_html( $message ), '</p></div>';
-
-                                       return false;
-                               }
-
-                               if ( is_array( $_POST['plugin'] ) ) {
-                                       $plugins_to_install = (array) $_POST['plugin'];
-                               } elseif ( is_string( $_POST['plugin'] ) ) {
-                                       // Received via Filesystem page - un-flatten array (WP bug #19643).
-                                       $plugins_to_install = explode( ',', $_POST['plugin'] );
-                               }
-
-                               // Sanitize the received input.
-                               $plugins_to_install = array_map( 'urldecode', $plugins_to_install );
-                               $plugins_to_install = array_map( array( $this->tgmpa, 'sanitize_key' ), $plugins_to_install );
-
-                               // Validate the received input.
-                               foreach ( $plugins_to_install as $key => $slug ) {
-                                       // Check if the plugin was registered with TGMPA and remove if not.
-                                       if ( ! isset( $this->tgmpa->plugins[ $slug ] ) ) {
-                                               unset( $plugins_to_install[ $key ] );
-                                               continue;
-                                       }
-
-                                       // For install: make sure this is a plugin we *can* install and not one already installed.
-                                       if ( 'install' === $install_type && true === $this->tgmpa->is_plugin_installed( $slug ) ) {
-                                               unset( $plugins_to_install[ $key ] );
-                                       }
-
-                                       // For updates: make sure this is a plugin we *can* update (update available and WP version ok).
-                                       if ( 'update' === $install_type && false === $this->tgmpa->is_plugin_updatetable( $slug ) ) {
-                                               unset( $plugins_to_install[ $key ] );
-                                       }
-                               }
-
-                               // No need to proceed further if we have no plugins to handle.
-                               if ( empty( $plugins_to_install ) ) {
-                                       if ( 'install' === $install_type ) {
-                                               $message = __( 'No plugins are available to be installed at this time.', 'accesspress-parallax' );
-                                       } else {
-                                               $message = __( 'No plugins are available to be updated at this time.', 'accesspress-parallax' );
-                                       }
-
-                                       echo '<div id="message" class="error"><p>', esc_html( $message ), '</p></div>';
-
-                                       return false;
-                               }
-
-                               // Pass all necessary information if WP_Filesystem is needed.
-                               $url = wp_nonce_url(
-                                       $this->tgmpa->get_tgmpa_url(),
-                                       'bulk-' . $this->_args['plural']
-                               );
-
-                               // Give validated data back to $_POST which is the only place the filesystem looks for extra fields.
-                               $_POST['plugin'] = implode( ',', $plugins_to_install ); // Work around for WP bug #19643.
-
-                               $method = ''; // Leave blank so WP_Filesystem can populate it as necessary.
-                               $fields = array_keys( $_POST ); // Extra fields to pass to WP_Filesystem.
-
-                               if ( false === ( $creds = request_filesystem_credentials( esc_url_raw( $url ), $method, false, false, $fields ) ) ) {
-                                       return true; // Stop the normal page form from displaying, credential request form will be shown.
-                               }
-
-                               // Now we have some credentials, setup WP_Filesystem.
-                               if ( ! WP_Filesystem( $creds ) ) {
-                                       // Our credentials were no good, ask the user for them again.
-                                       request_filesystem_credentials( esc_url_raw( $url ), $method, true, false, $fields );
-
-                                       return true;
-                               }
-
-                               /* If we arrive here, we have the filesystem */
-
-                               // Store all information in arrays since we are processing a bulk installation.
-                               $names      = array();
-                               $sources    = array(); // Needed for installs.
-                               $file_paths = array(); // Needed for upgrades.
-                               $to_inject  = array(); // Information to inject into the update_plugins transient.
-
-                               // Prepare the data for validated plugins for the install/upgrade.
-                               foreach ( $plugins_to_install as $slug ) {
-                                       $name   = $this->tgmpa->plugins[ $slug ]['name'];
-                                       $source = $this->tgmpa->get_download_url( $slug );
-
-                                       if ( ! empty( $name ) && ! empty( $source ) ) {
-                                               $names[] = $name;
-
-                                               switch ( $install_type ) {
-
-                                                       case 'install':
-                                                               $sources[] = $source;
-                                                               break;
-
-                                                       case 'update':
-                                                               $file_paths[]                 = $this->tgmpa->plugins[ $slug ]['file_path'];
-                                                               $to_inject[ $slug ]           = $this->tgmpa->plugins[ $slug ];
-                                                               $to_inject[ $slug ]['source'] = $source;
-                                                               break;
-                                               }
-                                       }
-                               }
-                               unset( $slug, $name, $source );
-
-                               // Create a new instance of TGMPA_Bulk_Installer.
-                               $installer = new TGMPA_Bulk_Installer(
-                                       new TGMPA_Bulk_Installer_Skin(
-                                               array(
-                                                       'url'          => esc_url_raw( $this->tgmpa->get_tgmpa_url() ),
-                                                       'nonce'        => 'bulk-' . $this->_args['plural'],
-                                                       'names'        => $names,
-                                                       'install_type' => $install_type,
-                                               )
-                                       )
-                               );
-
-                               // Wrap the install process with the appropriate HTML.
-                               echo '<div class="tgmpa">',
-                                       '<h2 style="font-size: 23px; font-weight: 400; line-height: 29px; margin: 0; padding: 9px 15px 4px 0;">', esc_html( get_admin_page_title() ), '</h2>
-                                       <div class="update-php" style="width: 100%; height: 98%; min-height: 850px; padding-top: 1px;">';
-
-                               // Process the bulk installation submissions.
-                               add_filter( 'upgrader_source_selection', array( $this->tgmpa, 'maybe_adjust_source_dir' ), 1, 3 );
-
-                               if ( 'tgmpa-bulk-update' === $this->current_action() ) {
-                                       // Inject our info into the update transient.
-                                       $this->tgmpa->inject_update_info( $to_inject );
-
-                                       $installer->bulk_upgrade( $file_paths );
-                               } else {
-                                       $installer->bulk_install( $sources );
-                               }
-
-                               remove_filter( 'upgrader_source_selection', array( $this->tgmpa, 'maybe_adjust_source_dir' ), 1 );
-
-                               echo '</div></div>';
-
-                               return true;
-                       }
-
-                       // Bulk activation process.
-                       if ( 'tgmpa-bulk-activate' === $this->current_action() ) {
-                               check_admin_referer( 'bulk-' . $this->_args['plural'] );
-
-                               // Did user actually select any plugins to activate ?
-                               if ( empty( $_POST['plugin'] ) ) {
-                                       echo '<div id="message" class="error"><p>', esc_html__( 'No plugins were selected to be activated. No action taken.', 'accesspress-parallax' ), '</p></div>';
-
-                                       return false;
-                               }
-
-                               // Grab plugin data from $_POST.
-                               $plugins = array();
-                               if ( isset( $_POST['plugin'] ) ) {
-                                       $plugins = array_map( 'urldecode', (array) $_POST['plugin'] );
-                                       $plugins = array_map( array( $this->tgmpa, 'sanitize_key' ), $plugins );
-                               }
-
-                               $plugins_to_activate = array();
-                               $plugin_names        = array();
-
-                               // Grab the file paths for the selected & inactive plugins from the registration array.
-                               foreach ( $plugins as $slug ) {
-                                       if ( $this->tgmpa->can_plugin_activate( $slug ) ) {
-                                               $plugins_to_activate[] = $this->tgmpa->plugins[ $slug ]['file_path'];
-                                               $plugin_names[]        = $this->tgmpa->plugins[ $slug ]['name'];
-                                       }
-                               }
-                               unset( $slug );
-
-                               // Return early if there are no plugins to activate.
-                               if ( empty( $plugins_to_activate ) ) {
-                                       echo '<div id="message" class="error"><p>', esc_html__( 'No plugins are available to be activated at this time.', 'accesspress-parallax' ), '</p></div>';
-
-                                       return false;
-                               }
-
-                               // Now we are good to go - let's start activating plugins.
-                               $activate = activate_plugins( $plugins_to_activate );
-
-                               if ( is_wp_error( $activate ) ) {
-                                       echo '<div id="message" class="error"><p>', wp_kses_post( $activate->get_error_message() ), '</p></div>';
-                               } else {
-                                       $count        = count( $plugin_names ); // Count so we can use _n function.
-                                       $plugin_names = array_map( array( 'TGMPA_Utils', 'wrap_in_strong' ), $plugin_names );
-                                       $last_plugin  = array_pop( $plugin_names ); // Pop off last name to prep for readability.
-                                       $imploded     = empty( $plugin_names ) ? $last_plugin : ( implode( ', ', $plugin_names ) . ' ' . esc_html_x( 'and', 'plugin A *and* plugin B', 'accesspress-parallax' ) . ' ' . $last_plugin );
-
-                                       printf( // WPCS: xss ok.
-                                               '<div id="message" class="updated"><p>%1$s %2$s.</p></div>',
-                                               esc_html( _n( 'The following plugin was activated successfully:', 'The following plugins were activated successfully:', $count, 'accesspress-parallax' ) ),
-                                               $imploded
-                                       );
-
-                                       // Update recently activated plugins option.
-                                       $recent = (array) get_option( 'recently_activated' );
-                                       foreach ( $plugins_to_activate as $plugin => $time ) {
-                                               if ( isset( $recent[ $plugin ] ) ) {
-                                                       unset( $recent[ $plugin ] );
-                                               }
-                                       }
-                                       update_option( 'recently_activated', $recent );
-                               }
-
-                               unset( $_POST ); // Reset the $_POST variable in case user wants to perform one action after another.
-
-                               return true;
-                       }
-
-                       return false;
-               }
-
-               /**
-                * Prepares all of our information to be outputted into a usable table.
-                *
-                * @since 2.2.0
-                */
-               public function prepare_items() {
-                       $columns               = $this->get_columns(); // Get all necessary column information.
-                       $hidden                = array(); // No columns to hide, but we must set as an array.
-                       $sortable              = array(); // No reason to make sortable columns.
-                       $primary               = $this->get_primary_column_name(); // Column which has the row actions.
-                       $this->_column_headers = array( $columns, $hidden, $sortable, $primary ); // Get all necessary column headers.
-
-                       // Process our bulk activations here.
-                       if ( 'tgmpa-bulk-activate' === $this->current_action() ) {
-                               $this->process_bulk_actions();
-                       }
-
-                       // Store all of our plugin data into $items array so WP_List_Table can use it.
-                       $this->items = apply_filters( 'tgmpa_table_data_items', $this->_gather_plugin_data() );
-               }
-
-               /* *********** DEPRECATED METHODS *********** */
-
-               /**
-                * Retrieve plugin data, given the plugin name.
-                *
-                * @since      2.2.0
-                * @deprecated 2.5.0 use {@see TGM_Plugin_Activation::_get_plugin_data_from_name()} instead.
-                * @see        TGM_Plugin_Activation::_get_plugin_data_from_name()
-                *
-                * @param string $name Name of the plugin, as it was registered.
-                * @param string $data Optional. Array key of plugin data to return. Default is slug.
-                * @return string|boolean Plugin slug if found, false otherwise.
-                */
-               protected function _get_plugin_data_from_name( $name, $data = 'slug' ) {
-                       _deprecated_function( __FUNCTION__, 'TGMPA 2.5.0', 'TGM_Plugin_Activation::_get_plugin_data_from_name()' );
-
-                       return $this->tgmpa->_get_plugin_data_from_name( $name, $data );
-               }
-       }
-}
-
-
-if ( ! class_exists( 'TGM_Bulk_Installer' ) ) {
-
-       /**
-        * Hack: Prevent TGMPA v2.4.1- bulk installer class from being loaded if 2.4.1- is loaded after 2.5+.
-        *
-        * @since 2.5.2
-        *
-        * {@internal The TGMPA_Bulk_Installer class was originally called TGM_Bulk_Installer.
-        *            For more information, see that class.}}
-        */
-       class TGM_Bulk_Installer {
-       }
-}
-if ( ! class_exists( 'TGM_Bulk_Installer_Skin' ) ) {
-
-       /**
-        * Hack: Prevent TGMPA v2.4.1- bulk installer skin class from being loaded if 2.4.1- is loaded after 2.5+.
-        *
-        * @since 2.5.2
-        *
-        * {@internal The TGMPA_Bulk_Installer_Skin class was originally called TGM_Bulk_Installer_Skin.
-        *            For more information, see that class.}}
-        */
-       class TGM_Bulk_Installer_Skin {
-       }
-}
-
-/**
- * The WP_Upgrader file isn't always available. If it isn't available,
- * we load it here.
- *
- * We check to make sure no action or activation keys are set so that WordPress
- * does not try to re-include the class when processing upgrades or installs outside
- * of the class.
- *
- * @since 2.2.0
- */
-add_action( 'admin_init', 'tgmpa_load_bulk_installer' );
-if ( ! function_exists( 'tgmpa_load_bulk_installer' ) ) {
-       /**
-        * Load bulk installer
-        */
-       function tgmpa_load_bulk_installer() {
-               // Silently fail if 2.5+ is loaded *after* an older version.
-               if ( ! isset( $GLOBALS['tgmpa'] ) ) {
-                       return;
-               }
-
-               // Get TGMPA class instance.
-               $tgmpa_instance = call_user_func( array( get_class( $GLOBALS['tgmpa'] ), 'get_instance' ) );
-
-               if ( isset( $_GET['page'] ) && $tgmpa_instance->menu === $_GET['page'] ) {
-                       if ( ! class_exists( 'Plugin_Upgrader', false ) ) {
-                               require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
-                       }
-
-                       if ( ! class_exists( 'TGMPA_Bulk_Installer' ) ) {
-
-                               /**
-                                * Installer class to handle bulk plugin installations.
-                                *
-                                * Extends WP_Upgrader and customizes to suit the installation of multiple
-                                * plugins.
-                                *
-                                * @since 2.2.0
-                                *
-                                * {@internal Since 2.5.0 the class is an extension of Plugin_Upgrader rather than WP_Upgrader.}}
-                                * {@internal Since 2.5.2 the class has been renamed from TGM_Bulk_Installer to TGMPA_Bulk_Installer.
-                                *            This was done to prevent backward compatibility issues with v2.3.6.}}
-                                *
-                                * @package TGM-Plugin-Activation
-                                * @author  Thomas Griffin
-                                * @author  Gary Jones
-                                */
-                               class TGMPA_Bulk_Installer extends Plugin_Upgrader {
-                                       /**
-                                        * Holds result of bulk plugin installation.
-                                        *
-                                        * @since 2.2.0
-                                        *
-                                        * @var string
-                                        */
-                                       public $result;
-
-                                       /**
-                                        * Flag to check if bulk installation is occurring or not.
-                                        *
-                                        * @since 2.2.0
-                                        *
-                                        * @var boolean
-                                        */
-                                       public $bulk = false;
-
-                                       /**
-                                        * TGMPA instance
-                                        *
-                                        * @since 2.5.0
-                                        *
-                                        * @var object
-                                        */
-                                       protected $tgmpa;
-
-                                       /**
-                                        * Whether or not the destination directory needs to be cleared ( = on update).
-                                        *
-                                        * @since 2.5.0
-                                        *
-                                        * @var bool
-                                        */
-                                       protected $clear_destination = false;
-
-                                       /**
-                                        * References parent constructor and sets defaults for class.
-                                        *
-                                        * @since 2.2.0
-                                        *
-                                        * @param \Bulk_Upgrader_Skin|null $skin Installer skin.
-                                        */
-                                       public function __construct( $skin = null ) {
-                                               // Get TGMPA class instance.
-                                               $this->tgmpa = call_user_func( array( get_class( $GLOBALS['tgmpa'] ), 'get_instance' ) );
-
-                                               parent::__construct( $skin );
-
-                                               if ( isset( $this->skin->options['install_type'] ) && 'update' === $this->skin->options['install_type'] ) {
-                                                       $this->clear_destination = true;
-                                               }
-
-                                               if ( $this->tgmpa->is_automatic ) {
-                                                       $this->activate_strings();
-                                               }
-
-                                               add_action( 'upgrader_process_complete', array( $this->tgmpa, 'populate_file_path' ) );
-                                       }
-
-                                       /**
-                                        * Sets the correct activation strings for the installer skin to use.
-                                        *
-                                        * @since 2.2.0
-                                        */
-                                       public function activate_strings() {
-                                               $this->strings['activation_failed']  = __( 'Plugin activation failed.', 'accesspress-parallax' );
-                                               $this->strings['activation_success'] = __( 'Plugin activated successfully.', 'accesspress-parallax' );
-                                       }
-
-                                       /**
-                                        * Performs the actual installation of each plugin.
-                                        *
-                                        * @since 2.2.0
-                                        *
-                                        * @see WP_Upgrader::run()
-                                        *
-                                        * @param array $options The installation config options.
-                                        * @return null|array Return early if error, array of installation data on success.
-                                        */
-                                       public function run( $options ) {
-                                               $result = parent::run( $options );
-
-                                               // Reset the strings in case we changed one during automatic activation.
-                                               if ( $this->tgmpa->is_automatic ) {
-                                                       if ( 'update' === $this->skin->options['install_type'] ) {
-                                                               $this->upgrade_strings();
-                                                       } else {
-                                                               $this->install_strings();
-                                                       }
-                                               }
-
-                                               return $result;
-                                       }
-
-                                       /**
-                                        * Processes the bulk installation of plugins.
-                                        *
-                                        * @since 2.2.0
-                                        *
-                                        * {@internal This is basically a near identical copy of the WP Core
-                                        * Plugin_Upgrader::bulk_upgrade() method, with minor adjustments to deal with
-                                        * new installs instead of upgrades.
-                                        * For ease of future synchronizations, the adjustments are clearly commented, but no other
-                                        * comments are added. Code style has been made to comply.}}
-                                        *
-                                        * @see Plugin_Upgrader::bulk_upgrade()
-                                        * @see https://core.trac.wordpress.org/browser/tags/4.2.1/src/wp-admin/includes/class-wp-upgrader.php#L838
-                                        * (@internal Last synced: Dec 31st 2015 against https://core.trac.wordpress.org/browser/trunk?rev=36134}}
-                                        *
-                                        * @param array $plugins The plugin sources needed for installation.
-                                        * @param array $args    Arbitrary passed extra arguments.
-                                        * @return array|false   Install confirmation messages on success, false on failure.
-                                        */
-                                       public function bulk_install( $plugins, $args = array() ) {
-                                               // [TGMPA + ] Hook auto-activation in.
-                                               add_filter( 'upgrader_post_install', array( $this, 'auto_activate' ), 10 );
-
-                                               $defaults    = array(
-                                                       'clear_update_cache' => true,
-                                               );
-                                               $parsed_args = wp_parse_args( $args, $defaults );
-
-                                               $this->init();
-                                               $this->bulk = true;
-
-                                               $this->install_strings(); // [TGMPA + ] adjusted.
-
-                                               /* [TGMPA - ] $current = get_site_transient( 'update_plugins' ); */
-
-                                               /* [TGMPA - ] add_filter('upgrader_clear_destination', array($this, 'delete_old_plugin'), 10, 4); */
-
-                                               $this->skin->header();
-
-                                               // Connect to the Filesystem first.
-                                               $res = $this->fs_connect( array( WP_CONTENT_DIR, WP_PLUGIN_DIR ) );
-                                               if ( ! $res ) {
-                                                       $this->skin->footer();
-                                                       return false;
-                                               }
-
-                                               $this->skin->bulk_header();
-
-                                               /*
-                                                * Only start maintenance mode if:
-                                                * - running Multisite and there are one or more plugins specified, OR
-                                                * - a plugin with an update available is currently active.
-                                                * @TODO: For multisite, maintenance mode should only kick in for individual sites if at all possible.
-                                                */
-                                               $maintenance = ( is_multisite() && ! empty( $plugins ) );
-
-                                               /*
-                                               [TGMPA - ]
-                                               foreach ( $plugins as $plugin )
-                                                       $maintenance = $maintenance || ( is_plugin_active( $plugin ) && isset( $current->response[ $plugin] ) );
-                                               */
-                                               if ( $maintenance ) {
-                                                       $this->maintenance_mode( true );
-                                               }
-
-                                               $results = array();
-
-                                               $this->update_count   = count( $plugins );
-                                               $this->update_current = 0;
-                                               foreach ( $plugins as $plugin ) {
-                                                       $this->update_current++;
-
-                                                       /*
-                                                       [TGMPA - ]
-                                                       $this->skin->plugin_info = get_plugin_data( WP_PLUGIN_DIR . '/' . $plugin, false, true);
-
-                                                       if ( !isset( $current->response[ $plugin ] ) ) {
-                                                               $this->skin->set_result('up_to_date');
-                                                               $this->skin->before();
-                                                               $this->skin->feedback('up_to_date');
-                                                               $this->skin->after();
-                                                               $results[$plugin] = true;
-                                                               continue;
-                                                       }
-
-                                                       // Get the URL to the zip file.
-                                                       $r = $current->response[ $plugin ];
-
-                                                       $this->skin->plugin_active = is_plugin_active($plugin);
-                                                       */
-
-                                                       $result = $this->run(
-                                                               array(
-                                                                       'package'           => $plugin, // [TGMPA + ] adjusted.
-                                                                       'destination'       => WP_PLUGIN_DIR,
-                                                                       'clear_destination' => false, // [TGMPA + ] adjusted.
-                                                                       'clear_working'     => true,
-                                                                       'is_multi'          => true,
-                                                                       'hook_extra'        => array(
-                                                                               'plugin' => $plugin,
-                                                                       ),
-                                                               )
-                                                       );
-
-                                                       $results[ $plugin ] = $this->result;
-
-                                                       // Prevent credentials auth screen from displaying multiple times.
-                                                       if ( false === $result ) {
-                                                               break;
-                                                       }
-                                               } //end foreach $plugins
-
-                                               $this->maintenance_mode( false );
-
-                                               /**
-                                                * Fires when the bulk upgrader process is complete.
-                                                *
-                                                * @since WP 3.6.0 / TGMPA 2.5.0
-                                                *
-                                                * @param Plugin_Upgrader $this Plugin_Upgrader instance. In other contexts, $this, might
-                                                *                              be a Theme_Upgrader or Core_Upgrade instance.
-                                                * @param array           $data {
-                                                *     Array of bulk item update data.
-                                                *
-                                                *     @type string $action   Type of action. Default 'update'.
-                                                *     @type string $type     Type of update process. Accepts 'plugin', 'theme', or 'core'.
-                                                *     @type bool   $bulk     Whether the update process is a bulk update. Default true.
-                                                *     @type array  $packages Array of plugin, theme, or core packages to update.
-                                                * }
-                                                */
-                                               do_action( 'upgrader_process_complete', $this, array(
-                                                       'action'  => 'install', // [TGMPA + ] adjusted.
-                                                       'type'    => 'plugin',
-                                                       'bulk'    => true,
-                                                       'plugins' => $plugins,
-                                               ) );
-
-                                               $this->skin->bulk_footer();
-
-                                               $this->skin->footer();
-
-                                               // Cleanup our hooks, in case something else does a upgrade on this connection.
-                                               /* [TGMPA - ] remove_filter('upgrader_clear_destination', array($this, 'delete_old_plugin')); */
-
-                                               // [TGMPA + ] Remove our auto-activation hook.
-                                               remove_filter( 'upgrader_post_install', array( $this, 'auto_activate' ), 10 );
-
-                                               // Force refresh of plugin update information.
-                                               wp_clean_plugins_cache( $parsed_args['clear_update_cache'] );
-
-                                               return $results;
-                                       }
-
-                                       /**
-                                        * Handle a bulk upgrade request.
-                                        *
-                                        * @since 2.5.0
-                                        *
-                                        * @see Plugin_Upgrader::bulk_upgrade()
-                                        *
-                                        * @param array $plugins The local WP file_path's of the plugins which should be upgraded.
-                                        * @param array $args    Arbitrary passed extra arguments.
-                                        * @return string|bool Install confirmation messages on success, false on failure.
-                                        */
-                                       public function bulk_upgrade( $plugins, $args = array() ) {
-
-                                               add_filter( 'upgrader_post_install', array( $this, 'auto_activate' ), 10 );
-
-                                               $result = parent::bulk_upgrade( $plugins, $args );
-
-                                               remove_filter( 'upgrader_post_install', array( $this, 'auto_activate' ), 10 );
-
-                                               return $result;
-                                       }
-
-                                       /**
-                                        * Abuse a filter to auto-activate plugins after installation.
-                                        *
-                                        * Hooked into the 'upgrader_post_install' filter hook.
-                                        *
-                                        * @since 2.5.0
-                                        *
-                                        * @param bool $bool The value we need to give back (true).
-                                        * @return bool
-                                        */
-                                       public function auto_activate( $bool ) {
-                                               // Only process the activation of installed plugins if the automatic flag is set to true.
-                                               if ( $this->tgmpa->is_automatic ) {
-                                                       // Flush plugins cache so the headers of the newly installed plugins will be read correctly.
-                                                       wp_clean_plugins_cache();
-
-                                                       // Get the installed plugin file.
-                                                       $plugin_info = $this->plugin_info();
-
-                                                       // Don't try to activate on upgrade of active plugin as WP will do this already.
-                                                       if ( ! is_plugin_active( $plugin_info ) ) {
-                                                               $activate = activate_plugin( $plugin_info );
-
-                                                               // Adjust the success string based on the activation result.
-                                                               $this->strings['process_success'] = $this->strings['process_success'] . "<br />\n";
-
-                                                               if ( is_wp_error( $activate ) ) {
-                                                                       $this->skin->error( $activate );
-                                                                       $this->strings['process_success'] .= $this->strings['activation_failed'];
-                                                               } else {
-                                                                       $this->strings['process_success'] .= $this->strings['activation_success'];
-                                                               }
-                                                       }
-                                               }
-
-                                               return $bool;
-                                       }
-                               }
-                       }
-
-                       if ( ! class_exists( 'TGMPA_Bulk_Installer_Skin' ) ) {
-
-                               /**
-                                * Installer skin to set strings for the bulk plugin installations..
-                                *
-                                * Extends Bulk_Upgrader_Skin and customizes to suit the installation of multiple
-                                * plugins.
-                                *
-                                * @since 2.2.0
-                                *
-                                * {@internal Since 2.5.2 the class has been renamed from TGM_Bulk_Installer_Skin to
-                                *            TGMPA_Bulk_Installer_Skin.
-                                *            This was done to prevent backward compatibility issues with v2.3.6.}}
-                                *
-                                * @see https://core.trac.wordpress.org/browser/trunk/src/wp-admin/includes/class-wp-upgrader-skins.php
-                                *
-                                * @package TGM-Plugin-Activation
-                                * @author  Thomas Griffin
-                                * @author  Gary Jones
-                                */
-                               class TGMPA_Bulk_Installer_Skin extends Bulk_Upgrader_Skin {
-                                       /**
-                                        * Holds plugin info for each individual plugin installation.
-                                        *
-                                        * @since 2.2.0
-                                        *
-                                        * @var array
-                                        */
-                                       public $plugin_info = array();
-
-                                       /**
-                                        * Holds names of plugins that are undergoing bulk installations.
-                                        *
-                                        * @since 2.2.0
-                                        *
-                                        * @var array
-                                        */
-                                       public $plugin_names = array();
-
-                                       /**
-                                        * Integer to use for iteration through each plugin installation.
-                                        *
-                                        * @since 2.2.0
-                                        *
-                                        * @var integer
-                                        */
-                                       public $i = 0;
-
-                                       /**
-                                        * TGMPA instance
-                                        *
-                                        * @since 2.5.0
-                                        *
-                                        * @var object
-                                        */
-                                       protected $tgmpa;
-
-                                       /**
-                                        * Constructor. Parses default args with new ones and extracts them for use.
-                                        *
-                                        * @since 2.2.0
-                                        *
-                                        * @param array $args Arguments to pass for use within the class.
-                                        */
-                                       public function __construct( $args = array() ) {
-                                               // Get TGMPA class instance.
-                                               $this->tgmpa = call_user_func( array( get_class( $GLOBALS['tgmpa'] ), 'get_instance' ) );
-
-                                               // Parse default and new args.
-                                               $defaults = array(
-                                                       'url'          => '',
-                                                       'nonce'        => '',
-                                                       'names'        => array(),
-                                                       'install_type' => 'install',
-                                               );
-                                               $args     = wp_parse_args( $args, $defaults );
-
-                                               // Set plugin names to $this->plugin_names property.
-                                               $this->plugin_names = $args['names'];
-
-                                               // Extract the new args.
-                                               parent::__construct( $args );
-                                       }
-
-                                       /**
-                                        * Sets install skin strings for each individual plugin.
-                                        *
-                                        * Checks to see if the automatic activation flag is set and uses the
-                                        * the proper strings accordingly.
-                                        *
-                                        * @since 2.2.0
-                                        */
-                                       public function add_strings() {
-                                               if ( 'update' === $this->options['install_type'] ) {
-                                                       parent::add_strings();
-                                                       /* translators: 1: plugin name, 2: action number 3: total number of actions. */
-                                                       $this->upgrader->strings['skin_before_update_header'] = __( 'Updating Plugin %1$s (%2$d/%3$d)', 'accesspress-parallax' );
-                                               } else {
-                                                       /* translators: 1: plugin name, 2: error message. */
-                                                       $this->upgrader->strings['skin_update_failed_error'] = __( 'An error occurred while installing %1$s: <strong>%2$s</strong>.', 'accesspress-parallax' );
-                                                       /* translators: 1: plugin name. */
-                                                       $this->upgrader->strings['skin_update_failed'] = __( 'The installation of %1$s failed.', 'accesspress-parallax' );
-
-                                                       if ( $this->tgmpa->is_automatic ) {
-                                                               // Automatic activation strings.
-                                                               $this->upgrader->strings['skin_upgrade_start'] = __( 'The installation and activation process is starting. This process may take a while on some hosts, so please be patient.', 'accesspress-parallax' );
-                                                               /* translators: 1: plugin name. */
-                                                               $this->upgrader->strings['skin_update_successful'] = __( '%1$s installed and activated successfully.', 'accesspress-parallax' ) . ' <a href="#" class="hide-if-no-js" onclick="%2$s"><span>' . esc_html__( 'Show Details', 'accesspress-parallax' ) . '</span><span class="hidden">' . esc_html__( 'Hide Details', 'accesspress-parallax' ) . '</span>.</a>';
-                                                               $this->upgrader->strings['skin_upgrade_end']       = __( 'All installations and activations have been completed.', 'accesspress-parallax' );
-                                                               /* translators: 1: plugin name, 2: action number 3: total number of actions. */
-                                                               $this->upgrader->strings['skin_before_update_header'] = __( 'Installing and Activating Plugin %1$s (%2$d/%3$d)', 'accesspress-parallax' );
-                                                       } else {
-                                                               // Default installation strings.
-                                                               $this->upgrader->strings['skin_upgrade_start'] = __( 'The installation process is starting. This process may take a while on some hosts, so please be patient.', 'accesspress-parallax' );
-                                                               /* translators: 1: plugin name. */
-                                                               $this->upgrader->strings['skin_update_successful'] = esc_html__( '%1$s installed successfully.', 'accesspress-parallax' ) . ' <a href="#" class="hide-if-no-js" onclick="%2$s"><span>' . esc_html__( 'Show Details', 'accesspress-parallax' ) . '</span><span class="hidden">' . esc_html__( 'Hide Details', 'accesspress-parallax' ) . '</span>.</a>';
-                                                               $this->upgrader->strings['skin_upgrade_end']       = __( 'All installations have been completed.', 'accesspress-parallax' );
-                                                               /* translators: 1: plugin name, 2: action number 3: total number of actions. */
-                                                               $this->upgrader->strings['skin_before_update_header'] = __( 'Installing Plugin %1$s (%2$d/%3$d)', 'accesspress-parallax' );
-                                                       }
-                                               }
-                                       }
-
-                                       /**
-                                        * Outputs the header strings and necessary JS before each plugin installation.
-                                        *
-                                        * @since 2.2.0
-                                        *
-                                        * @param string $title Unused in this implementation.
-                                        */
-                                       public function before( $title = '' ) {
-                                               if ( empty( $title ) ) {
-                                                       $title = esc_html( $this->plugin_names[ $this->i ] );
-                                               }
-                                               parent::before( $title );
-                                       }
-
-                                       /**
-                                        * Outputs the footer strings and necessary JS after each plugin installation.
-                                        *
-                                        * Checks for any errors and outputs them if they exist, else output
-                                        * success strings.
-                                        *
-                                        * @since 2.2.0
-                                        *
-                                        * @param string $title Unused in this implementation.
-                                        */
-                                       public function after( $title = '' ) {
-                                               if ( empty( $title ) ) {
-                                                       $title = esc_html( $this->plugin_names[ $this->i ] );
-                                               }
-                                               parent::after( $title );
-
-                                               $this->i++;
-                                       }
-
-                                       /**
-                                        * Outputs links after bulk plugin installation is complete.
-                                        *
-                                        * @since 2.2.0
-                                        */
-                                       public function bulk_footer() {
-                                               // Serve up the string to say installations (and possibly activations) are complete.
-                                               parent::bulk_footer();
-
-                                               // Flush plugins cache so we can make sure that the installed plugins list is always up to date.
-                                               wp_clean_plugins_cache();
-
-                                               $this->tgmpa->show_tgmpa_version();
-
-                                               // Display message based on if all plugins are now active or not.
-                                               $update_actions = array();
-
-                                               if ( $this->tgmpa->is_tgmpa_complete() ) {
-                                                       // All plugins are active, so we display the complete string and hide the menu to protect users.
-                                                       echo '<style type="text/css">#adminmenu .wp-submenu li.current { display: none !important; }</style>';
-                                                       $update_actions['dashboard'] = sprintf(
-                                                               esc_html( $this->tgmpa->strings['complete'] ),
-                                                               '<a href="' . esc_url( self_admin_url() ) . '">' . esc_html__( 'Return to the Dashboard', 'accesspress-parallax' ) . '</a>'
-                                                       );
-                                               } else {
-                                                       $update_actions['tgmpa_page'] = '<a href="' . esc_url( $this->tgmpa->get_tgmpa_url() ) . '" target="_parent">' . esc_html( $this->tgmpa->strings['return'] ) . '</a>';
-                                               }
-
-                                               /**
-                                                * Filter the list of action links available following bulk plugin installs/updates.
-                                                *
-                                                * @since 2.5.0
-                                                *
-                                                * @param array $update_actions Array of plugin action links.
-                                                * @param array $plugin_info    Array of information for the last-handled plugin.
-                                                */
-                                               $update_actions = apply_filters( 'tgmpa_update_bulk_plugins_complete_actions', $update_actions, $this->plugin_info );
-
-                                               if ( ! empty( $update_actions ) ) {
-                                                       $this->feedback( implode( ' | ', (array) $update_actions ) );
-                                               }
-                                       }
-
-                                       /* *********** DEPRECATED METHODS *********** */
-
-                                       /**
-                                        * Flush header output buffer.
-                                        *
-                                        * @since      2.2.0
-                                        * @deprecated 2.5.0 use {@see Bulk_Upgrader_Skin::flush_output()} instead
-                                        * @see        Bulk_Upgrader_Skin::flush_output()
-                                        */
-                                       public function before_flush_output() {
-                                               _deprecated_function( __FUNCTION__, 'TGMPA 2.5.0', 'Bulk_Upgrader_Skin::flush_output()' );
-                                               $this->flush_output();
-                                       }
-
-                                       /**
-                                        * Flush footer output buffer and iterate $this->i to make sure the
-                                        * installation strings reference the correct plugin.
-                                        *
-                                        * @since      2.2.0
-                                        * @deprecated 2.5.0 use {@see Bulk_Upgrader_Skin::flush_output()} instead
-                                        * @see        Bulk_Upgrader_Skin::flush_output()
-                                        */
-                                       public function after_flush_output() {
-                                               _deprecated_function( __FUNCTION__, 'TGMPA 2.5.0', 'Bulk_Upgrader_Skin::flush_output()' );
-                                               $this->flush_output();
-                                               $this->i++;
-                                       }
-                               }
-                       }
-               }
-       }
-}
-
-if ( ! class_exists( 'TGMPA_Utils' ) ) {
-
-       /**
-        * Generic utilities for TGMPA.
-        *
-        * All methods are static, poor-dev name-spacing class wrapper.
-        *
-        * Class was called TGM_Utils in 2.5.0 but renamed TGMPA_Utils in 2.5.1 as this was conflicting with Soliloquy.
-        *
-        * @since 2.5.0
-        *
-        * @package TGM-Plugin-Activation
-        * @author  Juliette Reinders Folmer
-        */
-       class TGMPA_Utils {
-               /**
-                * Whether the PHP filter extension is enabled.
-                *
-                * @see http://php.net/book.filter
-                *
-                * @since 2.5.0
-                *
-                * @static
-                *
-                * @var bool $has_filters True is the extension is enabled.
-                */
-               public static $has_filters;
-
-               /**
-                * Wrap an arbitrary string in <em> tags. Meant to be used in combination with array_map().
-                *
-                * @since 2.5.0
-                *
-                * @static
-                *
-                * @param string $string Text to be wrapped.
-                * @return string
-                */
-               public static function wrap_in_em( $string ) {
-                       return '<em>' . wp_kses_post( $string ) . '</em>';
-               }
-
-               /**
-                * Wrap an arbitrary string in <strong> tags. Meant to be used in combination with array_map().
-                *
-                * @since 2.5.0
-                *
-                * @static
-                *
-                * @param string $string Text to be wrapped.
-                * @return string
-                */
-               public static function wrap_in_strong( $string ) {
-                       return '<strong>' . wp_kses_post( $string ) . '</strong>';
-               }
-
-               /**
-                * Helper function: Validate a value as boolean
-                *
-                * @since 2.5.0
-                *
-                * @static
-                *
-                * @param mixed $value Arbitrary value.
-                * @return bool
-                */
-               public static function validate_bool( $value ) {
-                       if ( ! isset( self::$has_filters ) ) {
-                               self::$has_filters = extension_loaded( 'filter' );
-                       }
-
-                       if ( self::$has_filters ) {
-                               return filter_var( $value, FILTER_VALIDATE_BOOLEAN );
-                       } else {
-                               return self::emulate_filter_bool( $value );
-                       }
-               }
-
-               /**
-                * Helper function: Cast a value to bool
-                *
-                * @since 2.5.0
-                *
-                * @static
-                *
-                * @param mixed $value Value to cast.
-                * @return bool
-                */
-               protected static function emulate_filter_bool( $value ) {
-                       // @codingStandardsIgnoreStart
-                       static $true  = array(
-                               '1',
-                               'true', 'True', 'TRUE',
-                               'y', 'Y',
-                               'yes', 'Yes', 'YES',
-                               'on', 'On', 'ON',
-                       );
-                       static $false = array(
-                               '0',
-                               'false', 'False', 'FALSE',
-                               'n', 'N',
-                               'no', 'No', 'NO',
-                               'off', 'Off', 'OFF',
-                       );
-                       // @codingStandardsIgnoreEnd
-
-                       if ( is_bool( $value ) ) {
-                               return $value;
-                       } elseif ( is_int( $value ) && ( 0 === $value || 1 === $value ) ) {
-                               return (bool) $value;
-                       } elseif ( ( is_float( $value ) && ! is_nan( $value ) ) && ( (float) 0 === $value || (float) 1 === $value ) ) {
-                               return (bool) $value;
-                       } elseif ( is_string( $value ) ) {
-                               $value = trim( $value );
-                               if ( in_array( $value, $true, true ) ) {
-                                       return true;
-                               } elseif ( in_array( $value, $false, true ) ) {
-                                       return false;
-                               } else {
-                                       return false;
-                               }
-                       }
-
-                       return false;
-               }
-       } // End of class TGMPA_Utils
-} // End of class_exists wrapper
diff --git a/inc/customizer.php b/inc/customizer.php
deleted file mode 100644 (file)
index 261d89a..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-/**
- * accesspress_parallax Theme Customizer
- *
- * @package accesspress_parallax
- */
-
-/**
- * Add postMessage support for site title and description for the Theme Customizer.
- *
- * @param WP_Customize_Manager $wp_customize Theme Customizer object.
- */
-function accesspress_parallax_customize_register( $wp_customize ) {
-       $wp_customize->get_setting( 'blogname' )->transport         = 'postMessage';
-       $wp_customize->get_setting( 'blogdescription' )->transport  = 'postMessage';
-       $wp_customize->get_setting( 'header_textcolor' )->transport = 'postMessage';
-}
-add_action( 'customize_register', 'accesspress_parallax_customize_register' );
-
-/**
- * Binds JS handlers to make Theme Customizer preview reload changes asynchronously.
- */
-function accesspress_parallax_customize_preview_js() {
-       wp_enqueue_script( 'accesspress_parallax_customizer', get_template_directory_uri() . '/js/customizer.js', array( 'customize-preview' ), '20130508', true );
-}
-add_action( 'customize_preview_init', 'accesspress_parallax_customize_preview_js' );
diff --git a/inc/jetpack.php b/inc/jetpack.php
deleted file mode 100644 (file)
index b97ce1d..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-<?php
-/**
- * Jetpack Compatibility File
- * See: http://jetpack.me/
- *
- * @package accesspress_parallax
- */
-
-/**
- * Add theme support for Infinite Scroll.
- * See: http://jetpack.me/support/infinite-scroll/
- */
-function accesspress_parallax_jetpack_setup() {
-       add_theme_support( 'infinite-scroll', array(
-               'container' => 'main',
-               'footer'    => 'page',
-       ) );
-}
-add_action( 'after_setup_theme', 'accesspress_parallax_jetpack_setup' );
diff --git a/inc/options-framework/css/optionsframework.css b/inc/options-framework/css/optionsframework.css
deleted file mode 100644 (file)
index 4652aec..0000000
+++ /dev/null
@@ -1,448 +0,0 @@
-/* Options Framework Admin Styles */
-
-#optionsframework {
-    width:760px;
-    background:#fff;
-    float: left;
-}
-#optionsframework-wrap .nav-tab-wrapper{
-       padding: 10px 0 0;
-}
-#optionsframework-wrap .nav-tab-wrapper .nav-tab {
-  padding: 6px 10px;
-  font-weight: 700;
-  font-size: 15px;
-  line-height: 24px;
-  margin-left: 0;
-  margin-right: 5px;
-}
-#optionsframework h3 {
-       cursor: default;
-       background-color: #f1f1f1;
-       border-bottom: 1px solid #ddd;
-       margin: 0;
-       padding: 10px;
-}
-#optionsframework h4{
-       margin: 0 0 10px;
-       font-size: 14px;
-       font-weight: normal;
-       color:#000;
-}
-#optionsframework  #options-group-7 h4{
-       font-size: 17px;
-}
-#optionsframework p {
-       margin-bottom:0;
-       padding-bottom:10px;
-}
-#optionsframework img{
-       max-width: 100%;
-}
-#optionsframework .section {
-       padding:16px 0;
-       margin: 0 10px;
-       border-bottom:1px dashed #EEE;
-}
-#optionsframework .group {
-       padding-bottom:40px;
-}
-#optionsframework .section .controls {
-}
-#optionsframework .section .explain {
-       font-size: 13px;
-       line-height:16px;
-       color: #666;
-       font-style: italic;
-}
-#optionsframework .section-checkbox .controls {
-       width: 98%;
-}
-#optionsframework .section-checkbox .explain {
-       max-width:94%;
-}
-#optionsframework .controls input[type=text] {
-       width:100%;
-}
-#optionsframework .controls input[type=text].wp-color-picker {
-    width: 65px;
-}
-#optionsframework .controls select, #optionsframework .controls textarea {
-       margin-bottom:10px;
-       width:100%;
-}
-#optionsframework .section-radio label, #optionsframework .section-multicheck label {
-       float:left;
-       max-width:90%;
-       line-height: 16px;
-       margin-bottom: 5px;
-}
-#optionsframework input.checkbox, #optionsframework input.of-radio {
-       margin: 0 10px 5px 0;
-       float:left;
-       clear:both;
-}
-#optionsframework .section-typography .controls {
-       float:none;
-       width:auto;
-}
-#optionsframework .section-typography .explain {
-       float:none;
-       width:auto;
-}
-#optionsframework .controls .of-typography-size {
-       width:80px;
-       float:left
-}
-#optionsframework .controls .of-typography-unit {
-       width:50px;
-       margin-left:5px;
-       float:left
-}
-#optionsframework .controls .of-typography-face {
-       width:100px;
-       margin-left:5px;
-       float:left
-}
-#optionsframework .controls .of-typography-style {
-       width:80px;
-       margin-left:5px;
-       margin-right:5px;
-       float:left
-}
-#optionsframework .section-typography .wp-picker-container {
-       margin-top:2px;
-}
-#optionsframework .of-background-properties {
-       clear:both;
-       margin-top: 18px;
-}
-#optionsframework .controls .of-background-repeat {
-       width:125px;
-       margin-right:5px;
-       float:left
-}
-#optionsframework .controls .of-background-position {
-       width:125px;
-       margin-right:5px;
-       float:left
-}
-#optionsframework .controls .of-background-attachment {
-       width:125px;
-       margin-right:5px;
-       float:left
-}
-#optionsframework .controls .of-background-size {
-       width:125px;
-       margin-right:5px;
-       float:left
-}
-#optionsframework .section-background .wp-picker-container {
-       margin-bottom:10px;
-}
-#optionsframework .controls .of-radio-img-img {
-       border:3px solid #f9f9f9;
-       margin:0 5px 10px 0;
-       display:none;
-       cursor:pointer;
-       float:left;
-}
-#optionsframework .controls .of-radio-img-selected {
-       border:3px solid #ccc
-}
-#optionsframework .controls .of-radio-img-img:hover {
-       opacity:.8;
-}
-#optionsframework .controls .of-border-width {
-       width:80px;
-       float:left
-}
-#optionsframework .controls .of-border-style {
-       width:120px;
-       float:left
-}
-#optionsframework .hide {
-       display:none;
-}
-#optionsframework .of-option-image {
-       max-width:340px;
-       margin:3px 0 18px 0;
-}
-#optionsframework .mini .controls select, #optionsframework .section .mini .controls {
-       width: 140px;
-}
-#optionsframework .mini .controls input, #optionsframework .mini .controls {
-       min-width:140px;
-       width: 140px;
-}
-#optionsframework .mini .explain {
-       max-width:74%;
-}
-
-/* Editor */
-
-#optionsframework .section-editor .explain {
-       max-width: 98%;
-       float:none;
-       margin-bottom:5px;
-}
-
-/* Image Uploader */
-
-#optionsframework .controls input.upload {
-       width:80%;
-}
-#optionsframework .screenshot {
-       float:left;
-       margin-left:1px;
-       position:relative;
-       width:344px;
-       margin-top:3px;
-}
-#optionsframework .screenshot img {
-       background:#fafafa;
-       border-color:#ccc #eee #eee #ccc;
-       border-style:solid;
-       border-width:1px;
-       float:left;
-       max-width:334px;
-       padding:4px;
-       margin-bottom:10px;
-}
-#optionsframework .screenshot .remove-image {
-       background:url("../images/ico-delete.png") no-repeat;
-       border:medium none;
-       bottom:4px;
-       display:block;
-       float:left;
-       height:16px;
-       padding:0;
-       position:absolute;
-       left:-4px;
-       text-indent:-9999px;
-       width:16px;
-}
-#optionsframework .screenshot .no_image .file_link {
-       margin-left: 20px;
-}
-#optionsframework .screenshot .no_image .remove-button {
-       bottom: 0px;
-}
-#optionsframework .reset-button {
-       float:left;
-       cursor:pointer;
-}
-
-/* Bottom Section */
-
-#optionsframework-submit {
-       padding: 7px 10px;
-       border-top: 1px solid #ddd;
-       background-color: #f1f1f1;
-}
-#optionsframework #optionsframework-submit .button-primary {
-       float:right;
-}
-#optionsframework .section:after, 
-.clearfix:after,
-.clearfix:before {
-       content: "";
-       display: table;
-}
-#optionsframework .section:after,
-.clearfix:after  {
-       clear: both;
-}
-#section-parallax_section .sub-option{
-       margin-bottom: 15px;
-       border:1px solid #ddd;
-}
-#section-parallax_section .sub-option:hover{
-       background: #EEE;
-}
-#section-parallax_section .sub-option .sub-option-inner{
-       padding: 10px;
-       position: relative;
-       border-top: 1px solid #ddd;
-}
-#section-parallax_section .sub-option .sub-option-inner > .button-primary{
-       position: absolute;
-       top: 10px;
-       right: 10px;
-}
-#optionsframework #section-parallax_section.section .controls{
-       min-width: 100%;
-       width: 100%;
-}
-.inline-label label{
-       display: inline-block;
-       width: 150px;
-       vertical-align: top;
-}
-#optionsframework #section-parallax_section .controls select{
-       width: 400px;
-}
-#optionsframework #section-parallax_section .controls input.upload{
-       width: 325px;
-       height: 28px;
-}
-#optionsframework #section-parallax_section .background-settings{
-       display: inline-block;
-}
-#optionsframework #section-parallax_section .controls .of-background-repeat{
-       width: 160px;
-}
-#optionsframework #section-parallax_section .controls .of-background-position{
-       width: 120px;
-}
-#optionsframework #section-parallax_section .controls .of-background-attachment{
-       width: 150px; 
-}
-#optionsframework #section-parallax_section .controls .of-background-size{
-       width: 100px; 
-}
-#optionsframework #section-parallax_section .screenshot{
-       margin-left: 152px;
-}
-#optionsframework #section-parallax_section .controls .wp-picker-container{
-       display: inline-block;
-}
-
-#optionsframework #section-parallax_section h3{
-       padding: 0 0 0 10px;
-       line-height: 40px;
-       cursor: move;
-       border-bottom: 0;
-       font-size: 14px;
-}
-.section-toggle{
-       float: right;
-       height: 40px;
-       width: 40px;
-       background: #999;
-       color: #FFF;
-       text-align: center;
-       line-height: 40px;
-       cursor: pointer;
-}
-.theme-header{
-       background: #222222;
-       padding: 20px;
-}
-.theme-header .accesspresslite-logo{
-       float: left;
-}
-.theme-header .ak-socials{
-       float: right;
-       color: #FFF;
-       text-align: right;
-}
-.theme-header .ak-socials p{
-       margin-top: 0;
-}
-.update-banner{
-       float: left;
-       margin-left: 10px;
-       width: 300px;
-}
-#optionsframework-metabox .button-link {
-    background: none repeat scroll 0 0 #fff;
-    border-left: 1px solid #e5e5e5;
-    border-right: 1px solid #e5e5e5;
-    padding: 10px;
-    text-align: center;
-}
-#optionsframework-metabox a {
-    box-shadow: none;
-}
-.any-question {
-    background: none repeat scroll 0 0 #fff;
-    border: 1px solid #e5e5e5;
-    font-size: 14px;
-    padding: 15px 10px;
-    text-align: center;
-}
-.ap-popup-bg{
-       position: fixed;
-       background: #000;
-       background: rgba(0,0,0,0.4);
-       height: 100%;
-       width: 100%;
-       left: 0;
-       top: 0;
-       z-index: 99999;
-}
-.ap-popup-wrapper{
-       position: fixed;
-       width: 340px;
-       left: 50%;
-       top:50%;
-       margin-left: -170px;
-       margin-top: -140px;
-       z-index: 99999999;
-       background: #FFF;
-       padding: 10px;
-}
-.ap-popup-close{
-       position: absolute;
-       right: -10px;
-       top:-10px;
-       background: #000;
-       height: 26px;
-       width: 26px;
-       text-align: center;
-       line-height: 26px;
-       color: #FFF;
-       font-size:20px;
-       cursor: pointer;
-}
-.ap-popup-wrapper h4{
-       font-weight: normal;
-       font-size: 14px;
-       text-align: center;
-       margin: 2px 0 10px;
-       color: #E66432;
-       line-height:16px;
-}
-.appearance_page_theme-options div.updated{
-       margin-left: 0;
-}
-
-#optionsframework .section.section-hidden{
-       border:0;
-       padding: 0;
-       margin: 0;
-}
-.ap-intro-text{
-       line-height: 2;
-}
-.update-banner h3{
-       background: #333;
-       color: #FFF;
-       border:1px solid #333;
-       margin: 0;
-       padding: 10px;
-}
-.pro-feature-title{
-       cursor: pointer;
-}
-.pro-feature-title span{
-       float: right;
-       font-size: 20px;
-       line-height: 20px;
-}
-.feature-img{
-       display: none;
-}
-.ak-socials{
-       margin-top: 10px;
-}
-.ak-socials a{
-       color: #FFF;
-       background: #E3633B;
-       display: inline-block;
-       padding: 8px 10px;
-       text-decoration: none;
-       border-radius: 5px;
-       margin: 0 5px;
-}
\ No newline at end of file
diff --git a/inc/options-framework/images/accesspressthemes.png b/inc/options-framework/images/accesspressthemes.png
deleted file mode 100644 (file)
index 4c4f4bf..0000000
Binary files a/inc/options-framework/images/accesspressthemes.png and /dev/null differ
diff --git a/inc/options-framework/images/demo-btn.png b/inc/options-framework/images/demo-btn.png
deleted file mode 100644 (file)
index e7f4e4a..0000000
Binary files a/inc/options-framework/images/demo-btn.png and /dev/null differ
diff --git a/inc/options-framework/images/ico-delete.png b/inc/options-framework/images/ico-delete.png
deleted file mode 100644 (file)
index 08f2493..0000000
Binary files a/inc/options-framework/images/ico-delete.png and /dev/null differ
diff --git a/inc/options-framework/images/logo-side.jpg b/inc/options-framework/images/logo-side.jpg
deleted file mode 100644 (file)
index eced2eb..0000000
Binary files a/inc/options-framework/images/logo-side.jpg and /dev/null differ
diff --git a/inc/options-framework/images/logo-top.jpg b/inc/options-framework/images/logo-top.jpg
deleted file mode 100644 (file)
index f716566..0000000
Binary files a/inc/options-framework/images/logo-top.jpg and /dev/null differ
diff --git a/inc/options-framework/images/logo.png b/inc/options-framework/images/logo.png
deleted file mode 100644 (file)
index 5bc3e3d..0000000
Binary files a/inc/options-framework/images/logo.png and /dev/null differ
diff --git a/inc/options-framework/images/tick.png b/inc/options-framework/images/tick.png
deleted file mode 100644 (file)
index 0eb8827..0000000
Binary files a/inc/options-framework/images/tick.png and /dev/null differ
diff --git a/inc/options-framework/images/upgrade-bottom.jpg b/inc/options-framework/images/upgrade-bottom.jpg
deleted file mode 100644 (file)
index 7511d58..0000000
Binary files a/inc/options-framework/images/upgrade-bottom.jpg and /dev/null differ
diff --git a/inc/options-framework/images/upgrade-btn.png b/inc/options-framework/images/upgrade-btn.png
deleted file mode 100644 (file)
index 20a2c5c..0000000
Binary files a/inc/options-framework/images/upgrade-btn.png and /dev/null differ
diff --git a/inc/options-framework/images/upgrade-top.jpg b/inc/options-framework/images/upgrade-top.jpg
deleted file mode 100644 (file)
index 00d1d43..0000000
Binary files a/inc/options-framework/images/upgrade-top.jpg and /dev/null differ
diff --git a/inc/options-framework/includes/class-options-framework-admin.php b/inc/options-framework/includes/class-options-framework-admin.php
deleted file mode 100644 (file)
index addb6fd..0000000
+++ /dev/null
@@ -1,368 +0,0 @@
-<?php
-/**
- * @package   Options_Framework
- * @author    Devin Price <devin@wptheming.com>
- * @license   GPL-2.0+
- * @link      http://wptheming.com
- * @copyright 2010-2014 WP Theming
- */
-
-class Options_Framework_Admin {
-
-       /**
-     * Page hook for the options screen
-     *
-     * @since 1.7.0
-     * @type string
-     */
-    protected $options_screen = null;
-
-    /**
-     * Hook in the scripts and styles
-     *
-     * @since 1.7.0
-     */
-    public function init() {
-
-               // Gets options to load
-       $options = & Options_Framework::_optionsframework_options();
-
-               // Checks if options are available
-       if ( $options ) {
-
-                       // Add the options page and menu item.
-                       add_action( 'admin_menu', array( $this, 'add_custom_options_page' ) );
-
-                       // Add the required scripts and styles
-                       add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_admin_styles' ) );
-                       add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_admin_scripts' ) );
-
-                       // Settings need to be registered after admin_init
-                       add_action( 'admin_init', array( $this, 'settings_init' ) );
-
-                       // Adds options menu to the admin bar
-                       add_action( 'wp_before_admin_bar_render', array( $this, 'optionsframework_admin_bar' ) );
-
-               }
-
-    }
-
-       /**
-     * Registers the settings
-     *
-     * @since 1.7.0
-     */
-    function settings_init() {
-
-       // Get the option name
-               $options_framework = new Options_Framework;
-           $name = $options_framework->get_option_name();
-
-               // Registers the settings fields and callback
-               register_setting( 'optionsframework', $name,  array ( $this, 'validate_options' ) );
-
-               // Displays notice after options save
-               add_action( 'optionsframework_after_validate', array( $this, 'save_options_notice' ) );
-
-    }
-
-       static function menu_settings() {
-
-               $menu = array(
-
-                       // Modes: submenu, menu
-            'mode' => 'submenu',
-
-            // Submenu default settings
-            'page_title' => '',
-                       'menu_title' => __('Theme Options', 'accesspress-parallax'),
-                       'capability' => 'edit_theme_options',
-                       'menu_slug' => 'theme-options',
-            'parent_slug' => 'themes.php',
-
-            // Menu default settings
-            'icon_url' => 'dashicons-admin-generic',
-            'position' => '61'
-
-               );
-
-               return apply_filters( 'optionsframework_menu', $menu );
-       }
-
-       /**
-     * Add a subpage called "Theme Options" to the appearance menu.
-     *
-     * @since 1.7.0
-     */
-       function add_custom_options_page() {
-
-               $menu = $this->menu_settings();
-
-               // If you want a top level menu, see this Gist:
-               // https://gist.github.com/devinsays/884d6abe92857a329d99
-
-               // Code removed because it conflicts with .org theme check.
-
-               $this->options_screen = add_theme_page(
-               $menu['page_title'],
-               $menu['menu_title'],
-               $menu['capability'],
-               $menu['menu_slug'],
-               array( $this, 'options_page' )
-        );
-
-       }
-
-       /**
-     * Loads the required stylesheets
-     *
-     * @since 1.7.0
-     */
-
-       function enqueue_admin_styles( $hook ) {
-
-               if ( $this->options_screen != $hook )
-               return;
-           wp_enqueue_style( 'accesspress-parallax-font-awesome', get_template_directory_uri() . '/css/fontawesome/css/font-awesome.min.css' );
-               wp_enqueue_style( 'optionsframework', OPTIONS_FRAMEWORK_DIRECTORY . 'css/optionsframework.css', array(),  Options_Framework::VERSION );
-               wp_enqueue_style( 'wp-color-picker' );
-       }
-
-       /**
-     * Loads the required javascript
-     *
-     * @since 1.7.0
-     */
-       function enqueue_admin_scripts( $hook ) {
-
-               if ( $this->options_screen != $hook )
-               return;
-
-               // Enqueue custom option panel JS
-               wp_enqueue_script( 'options-custom', OPTIONS_FRAMEWORK_DIRECTORY . 'js/options-custom.js', array( 'jquery','wp-color-picker' ), Options_Framework::VERSION );
-
-               // Inline scripts from options-interface.php
-               add_action( 'admin_head', array( $this, 'of_admin_head' ) );
-       }
-
-       function of_admin_head() {
-               // Hook to add custom scripts
-               do_action( 'optionsframework_custom_scripts' );
-       }
-
-       /**
-     * Builds out the options panel.
-     *
-        * If we were using the Settings API as it was intended we would use
-        * do_settings_sections here.  But as we don't want the settings wrapped in a table,
-        * we'll call our own custom optionsframework_fields.  See options-interface.php
-        * for specifics on how each individual field is generated.
-        *
-        * Nonces are provided using the settings_fields()
-        *
-     * @since 1.7.0
-     */
-        function options_page() { ?>
-
-               <div id="optionsframework-wrap" class="wrap">
-
-               <?php $menu = $this->menu_settings(); ?>
-
-               <div class="theme-header clearfix">
-               <div class="accesspresslite-logo">
-               <img src="<?php echo get_template_directory_uri();?>/inc/options-framework/images/logo.png" alt="<?php esc_attr_e('AccessPress Lite','accesspress-parallax'); ?>" />
-               </div>
-
-               <div class="ak-socials">
-               <a target='_blank' href="<?php echo esc_url('https://accesspressthemes.com/theme-demos/?theme=accesspress-parallax'); ?>"><?php _e('Demo','accesspress-parallax'); ?></a>
-               <a target='_blank' href="<?php echo esc_url('https://accesspressthemes.com/documentation/theme-instruction-accesspress-parallax/'); ?>"><?php _e('Documentation/Video Tutorial','accesspress-parallax'); ?></a>
-               </div>
-               </div>
-
-
-           <div class="nav-tab-wrapper">
-               <?php echo Options_Framework_Interface::optionsframework_tabs(); ?>
-           </div>
-
-           
-           <div id="optionsframework-metabox" class="metabox-holder">
-           <?php settings_errors( 'options-framework' ); ?>
-                   <div id="optionsframework" class="postbox">
-                               <form action="options.php" method="post">
-                               <?php settings_fields( 'optionsframework' ); ?>
-                               <?php Options_Framework_Interface::optionsframework_fields(); /* Settings */ ?>
-                               <div id="optionsframework-submit">
-                                       <input type="submit" class="button-primary" name="update" value="<?php esc_attr_e( 'Save Options', 'accesspress-parallax' ); ?>" />
-                                       <input type="submit" class="reset-button button-secondary" name="reset" value="<?php esc_attr_e( 'Restore Defaults', 'accesspress-parallax' ); ?>" onclick="return confirm( '<?php print esc_js( __( 'Click OK to reset. Any theme settings will be lost!', 'accesspress-parallax' ) ); ?>' );" />
-                                       <div class="clear"></div>
-                               </div>
-                               </form>
-                       </div> <!-- / #container -->
-            
-            <div class="update-banner">
-               <h3><?php _e('Upgrade to Parallax Pro','accesspress-parallax') ?></h3>
-                       <img src="<?php echo get_template_directory_uri(); ?>/inc/options-framework/images/upgrade-top.jpg">
-                       <div class="button-link">
-                               <a href="<?php echo esc_url('http://accesspressthemes.com/theme-demos/?theme=accesspress-parallax-pro'); ?>" target="_blank"><img src="<?php echo get_template_directory_uri(); ?>/inc/options-framework/images/demo-btn.png"></a>
-                               <a href="<?php echo esc_url('https://accesspressthemes.com/wordpress-themes/accesspress-parallax-pro/'); ?>" target="_blank"><img src="<?php echo get_template_directory_uri(); ?>/inc/options-framework/images/upgrade-btn.png"></a>
-                       </div>
-                       <div class="any-question">
-                               <?php echo sprintf(__('Any question!! Click <a href="%s" target="_blank">here</a> for Live Chat.','accesspress-parallax'), esc_url('https://accesspressthemes.com/contact/')); ?>
-                       </div>
-                       <h3 class="pro-feature-title"><?php _e('Pro Features','accesspress-parallax') ?><span>&#8250;</span></h3>
-                       <div class="feature-img">
-                       <img src="<?php echo get_template_directory_uri(); ?>/inc/options-framework/images/upgrade-bottom.jpg">
-                       <div class="button-link">
-                               <a href="<?php echo esc_url('https://accesspressthemes.com/theme-demos/?theme=accesspress-parallax-pro'); ?>" target="_blank"><img src="<?php echo get_template_directory_uri(); ?>/inc/options-framework/images/demo-btn.png"></a>
-                               <a href="<?php echo esc_url('https://accesspressthemes.com/wordpress-themes/accesspress-parallax-pro/'); ?>" target="_blank"><img src="<?php echo get_template_directory_uri(); ?>/inc/options-framework/images/upgrade-btn.png"></a>
-                       </div>
-                       </div>
-               </div>
-               </div>
-               <?php do_action( 'optionsframework_after' ); ?>
-               </div> <!-- / .wrap -->
-
-       <?php
-       }
-
-       /**
-        * Validate Options.
-        *
-        * This runs after the submit/reset button has been clicked and
-        * validates the inputs.
-        *
-        * @uses $_POST['reset'] to restore default options
-        */
-       function validate_options( $input ) {
-
-               /*
-                * Restore Defaults.
-                *
-                * In the event that the user clicked the "Restore Defaults"
-                * button, the options defined in the theme's options.php
-                * file will be added to the option for the active theme.
-                */
-
-               if ( isset( $_POST['reset'] ) ) {
-                       add_settings_error( 'options-framework', 'restore_defaults', __( 'Default options restored.', 'accesspress-parallax' ), 'updated fade' );
-                       return $this->get_default_values();
-               }
-
-               /*
-                * Update Settings
-                *
-                * This used to check for $_POST['update'], but has been updated
-                * to be compatible with the theme customizer introduced in WordPress 3.4
-                */
-
-               $clean = array();
-               $options = & Options_Framework::_optionsframework_options();
-               foreach ( $options as $option ) {
-
-                       if ( ! isset( $option['id'] ) ) {
-                               continue;
-                       }
-
-                       if ( ! isset( $option['type'] ) ) {
-                               continue;
-                       }
-
-                       $id = preg_replace( '/[^a-zA-Z0-9._\-]/', '', strtolower( $option['id'] ) );
-
-                       // Set checkbox to false if it wasn't sent in the $_POST
-                       if ( 'checkbox' == $option['type'] && ! isset( $input[$id] ) ) {
-                               $input[$id] = false;
-                       }
-
-                       // Set parallax to '' if it wasn't sent in the $_POST
-                       if ( 'parallaxsection' == $option['type'] && ! isset( $input[$id] ) ) {
-                               $input[$id] = '';
-                       }
-
-                       // Set each item in the multicheck to false if it wasn't sent in the $_POST
-                       if ( 'multicheck' == $option['type'] && ! isset( $input[$id] ) ) {
-                               foreach ( $option['options'] as $key => $value ) {
-                                       $input[$id][$key] = false;
-                               }
-                       }
-
-                       // For a value to be submitted to database it must pass through a sanitization filter
-                       if ( has_filter( 'of_sanitize_' . $option['type'] ) ) {
-                               $clean[$id] = apply_filters( 'of_sanitize_' . $option['type'], $input[$id], $option );
-                       }
-               }
-
-               // Hook to run after validation
-               do_action( 'optionsframework_after_validate', $clean );
-
-               return $clean;
-       }
-
-       /**
-        * Display message when options have been saved
-        */
-
-       function save_options_notice() {
-               add_settings_error( 'options-framework', 'save_options', __( 'Options saved.', 'accesspress-parallax' ), 'updated fade' );
-       }
-
-       /**
-        * Get the default values for all the theme options
-        *
-        * Get an array of all default values as set in
-        * options.php. The 'id','std' and 'type' keys need
-        * to be defined in the configuration array. In the
-        * event that these keys are not present the option
-        * will not be included in this function's output.
-        *
-        * @return array Re-keyed options configuration array.
-        *
-        */
-
-       function get_default_values() {
-               $output = array();
-               $config = & Options_Framework::_optionsframework_options();
-               foreach ( (array) $config as $option ) {
-                       if ( ! isset( $option['id'] ) ) {
-                               continue;
-                       }
-                       if ( ! isset( $option['std'] ) ) {
-                               continue;
-                       }
-                       if ( ! isset( $option['type'] ) ) {
-                               continue;
-                       }
-                       if ( has_filter( 'of_sanitize_' . $option['type'] ) ) {
-                               $output[$option['id']] = apply_filters( 'of_sanitize_' . $option['type'], $option['std'], $option );
-                       }
-               }
-               return $output;
-       }
-
-       /**
-        * Add options menu item to admin bar
-        */
-
-       function optionsframework_admin_bar() {
-
-               $menu = $this->menu_settings();
-
-               global $wp_admin_bar;
-
-               if ( 'menu' == $menu['mode'] ) {
-                       $href = admin_url( 'admin.php?page=' . $menu['menu_slug'] );
-               } else {
-                       $href = admin_url( 'themes.php?page=' . $menu['menu_slug'] );
-               }
-
-               $args = array(
-                       'parent' => 'appearance',
-                       'id' => 'of_theme_options',
-                       'title' => $menu['menu_title'],
-                       'href' => $href
-               );
-
-               $wp_admin_bar->add_menu( apply_filters( 'optionsframework_admin_bar', $args ) );
-       }
-
-}
diff --git a/inc/options-framework/includes/class-options-framework.php b/inc/options-framework/includes/class-options-framework.php
deleted file mode 100644 (file)
index 4ea0ea4..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-<?php
-/**
- * @package   Options_Framework
- * @author    Devin Price <devin@wptheming.com>
- * @license   GPL-2.0+
- * @link      http://wptheming.com
- * @copyright 2010-2014 WP Theming
- */
-
-class Options_Framework {
-
-       /**
-        * Plugin version, used for cache-busting of style and script file references.
-        *
-        * @since 1.7.0
-        * @type string
-        */
-       const VERSION = '1.8.0';
-
-       /**
-        * Sets option defaults
-        *
-        * @since 1.7.0
-        */
-       function get_option_name() {
-
-               $name = '';
-
-               // Gets option name as defined in the theme
-               if ( function_exists( 'optionsframework_option_name' ) ) {
-                       $name = optionsframework_option_name();
-               }
-
-               // Fallback
-               if ( '' == $name ) {
-                       $name = get_option( 'stylesheet' );
-                       $name = preg_replace( "/\W/", "_", strtolower( $name ) );
-               }
-
-               return apply_filters( 'options_framework_option_name', $name );
-
-       }
-
-       /**
-        * Wrapper for optionsframework_options()
-        *
-        * Allows for manipulating or setting options via 'of_options' filter
-        * For example:
-        *
-        * <code>
-        * add_filter( 'of_options', function( $options ) {
-        *     $options[] = array(
-        *         'name' => 'Input Text Mini',
-        *         'desc' => 'A mini text input field.',
-        *         'id' => 'example_text_mini',
-        *         'std' => 'Default',
-        *         'class' => 'mini',
-        *         'type' => 'text'
-        *     );
-        *
-        *     return $options;
-        * });
-        * </code>
-        *
-        * Also allows for setting options via a return statement in the
-        * options.php file.  For example (in options.php):
-        *
-        * <code>
-        * return array(...);
-        * </code>
-        *
-        * @return array (by reference)
-        */
-       static function &_optionsframework_options() {
-               static $options = null;
-
-               if ( !$options ) {
-               // Load options from options.php file (if it exists)
-               $location = apply_filters( 'options_framework_location', array( 'inc/accesspress-options.php' ) );
-               if ( $optionsfile = locate_template( $location ) ) {
-                   $maybe_options = require_once $optionsfile;
-                   if ( is_array( $maybe_options ) ) {
-                                       $options = $maybe_options;
-                   } else if ( function_exists( 'optionsframework_options' ) ) {
-                                       $options = optionsframework_options();
-                               }
-               }
-
-               // Allow setting/manipulating options via filters
-               $options = apply_filters( 'of_options', $options );
-               }
-
-               return $options;
-       }
-
-}
\ No newline at end of file
diff --git a/inc/options-framework/includes/class-options-interface.php b/inc/options-framework/includes/class-options-interface.php
deleted file mode 100644 (file)
index 3fa242d..0000000
+++ /dev/null
@@ -1,580 +0,0 @@
-<?php
-
-class Options_Framework_Interface {
-
-       /**
-        * Generates the tabs that are used in the options menu
-        */
-       static function optionsframework_tabs() {
-               $counter = 0;
-               $options = & Options_Framework::_optionsframework_options();
-               $menu = '';
-
-               foreach ( $options as $value ) {
-                       // Heading for Navigation
-                       if ( $value['type'] == "heading" ) {
-                               $counter++;
-                               $class = '';
-                               $class = ! empty( $value['id'] ) ? $value['id'] : $value['name'];
-                               $class = preg_replace( '/[^a-zA-Z0-9._\-]/', '', strtolower($class) ) . '-tab';
-                               $menu .= '<a id="options-group-'.  $counter . '-tab" class="nav-tab ' . $class .'" title="' . esc_attr( $value['name'] ) . '" href="' . esc_attr( '#options-group-'.  $counter ) . '">' . esc_html( $value['name'] ) . '</a>';
-                       }
-               }
-
-               return $menu;
-       }
-
-       /**
-        * Generates the options fields that are used in the form.
-        */
-       static function optionsframework_fields() {
-
-               global $allowedtags;
-
-               $options_framework = new Options_Framework;
-               $option_name = $options_framework->get_option_name();
-               
-               $settings = get_option($option_name);
-               $options = & Options_Framework::_optionsframework_options();
-
-               $counter = 0;
-               $menu = '';
-
-               foreach ( $options as $value ) {
-
-                       $val = '';
-                       $select_value = '';
-                       $output = '';
-
-                       // Wrap all options
-                       if ( ( $value['type'] != "heading" ) && ( $value['type'] != "info" ) ) {
-
-                               // Keep all ids lowercase with no spaces
-                               $value['id'] = preg_replace('/[^a-zA-Z0-9._\-]/', '', strtolower($value['id']) );
-
-                               $id = 'section-' . $value['id'];
-
-                               $class = 'section';
-                               if ( isset( $value['type'] ) ) {
-                                       $class .= ' section-' . $value['type'];
-                               }
-                               if ( isset( $value['class'] ) ) {
-                                       $class .= ' ' . $value['class'];
-                               }
-
-                               $output .= '<div id="' . esc_attr( $id ) .'" class="' . esc_attr( $class ) . '">'."\n";
-                               if ( isset( $value['name'] ) ) {
-                                       $output .= '<h4 class="heading">' . esc_html( $value['name'] ) . '</h4>' . "\n";
-                               }
-                               if ( $value['type'] != 'editor' ) {
-                                       $output .= '<div class="option">' . "\n" . '<div class="controls">' . "\n";
-                               }
-                               else {
-                                       $output .= '<div class="option">' . "\n" . '<div>' . "\n";
-                               }
-                       }
-
-                       // Set default value to $val
-                       if ( isset( $value['std'] ) ) {
-                               $val = $value['std'];
-                       }
-
-                       // If the option is already saved, override $val
-                       if ( ( $value['type'] != 'heading' ) && ( $value['type'] != 'info') ) {
-                               if ( isset( $settings[($value['id'])]) ) {
-                                       $val = $settings[($value['id'])];
-                                       // Striping slashes of non-array options
-                                       if ( !is_array($val) ) {
-                                               $val = stripslashes( $val );
-                                       }
-                               }
-                       }
-
-                       // If there is a description save it for labels
-                       $explain_value = '';
-                       if ( isset( $value['desc'] ) ) {
-                               $explain_value = $value['desc'];
-                       }
-
-                       // Set the placeholder if one exists
-                       $placeholder = '';
-                       if ( isset( $value['placeholder'] ) ) {
-                               $placeholder = ' placeholder="' . esc_attr( $value['placeholder'] ) . '"';
-                       }
-
-                       if ( has_filter( 'optionsframework_' . $value['type'] ) ) {
-                               $output .= apply_filters( 'optionsframework_' . $value['type'], $option_name, $value, $val );
-                       }
-
-
-                       switch ( $value['type'] ) {
-
-                       // Basic text input
-                       case 'text':
-                               $output .= '<input id="' . esc_attr( $value['id'] ) . '" class="of-input" name="' . esc_attr( $option_name . '[' . $value['id'] . ']' ) . '" type="text" value="' . esc_attr( $val ) . '"' . $placeholder . ' />';
-                               break;
-
-                       // Basic hidded input
-                       case 'hidden':
-                               $output .= '<input id="' . esc_attr( $value['id'] ) . '" class="of-input" name="' . esc_attr( $option_name . '[' . $value['id'] . ']' ) . '" type="hidden" value="' . esc_attr( $val ) . '"' . $placeholder . ' />';
-                               break;
-
-                       // Basic text input
-                       case 'url':
-                               $output .= '<input id="' . esc_attr( $value['id'] ) . '" class="of-input" name="' . esc_attr( $option_name . '[' . $value['id'] . ']' ) . '" type="text" value="' . esc_url( $val ) . '"' . $placeholder . ' />';
-                               break;
-
-                       // Password input
-                       case 'password':
-                               $output .= '<input id="' . esc_attr( $value['id'] ) . '" class="of-input" name="' . esc_attr( $option_name . '[' . $value['id'] . ']' ) . '" type="password" value="' . esc_attr( $val ) . '" />';
-                               break;
-
-                       // Textarea
-                       case 'textarea':
-                               $rows = '14';
-
-                               if ( isset( $value['settings']['rows'] ) ) {
-                                       $custom_rows = $value['settings']['rows'];
-                                       if ( is_numeric( $custom_rows ) ) {
-                                               $rows = $custom_rows;
-                                       }
-                               }
-
-                               $val = stripslashes( $val );
-                               $output .= '<textarea id="' . esc_attr( $value['id'] ) . '" class="of-input" name="' . esc_attr( $option_name . '[' . $value['id'] . ']' ) . '" rows="' . $rows . '"' . $placeholder . '>' . esc_textarea( $val ) . '</textarea>';
-                               break;
-
-                       // Select Box
-                       case 'select':
-                               $output .= '<select class="of-input" name="' . esc_attr( $option_name . '[' . $value['id'] . ']' ) . '" id="' . esc_attr( $value['id'] ) . '">';
-
-                               foreach ($value['options'] as $key => $option ) {
-                                       $output .= '<option'. selected( $val, $key, false ) .' value="' . esc_attr( $key ) . '">' . esc_html( $option ) . '</option>';
-                               }
-                               $output .= '</select>';
-                               break;
-
-
-                       // Radio Box
-                       case "radio":
-                               $name = $option_name .'['. $value['id'] .']';
-                               foreach ($value['options'] as $key => $option) {
-                                       $id = $option_name . '-' . $value['id'] .'-'. $key;
-                                       $output .= '<input class="of-input of-radio" type="radio" name="' . esc_attr( $name ) . '" id="' . esc_attr( $id ) . '" value="'. esc_attr( $key ) . '" '. checked( $val, $key, false) .' /><label for="' . esc_attr( $id ) . '">' . esc_html( $option ) . '</label>';
-                               }
-                               break;
-
-                       // Image Selectors
-                       case "images":
-                               $name = $option_name .'['. $value['id'] .']';
-                               foreach ( $value['options'] as $key => $option ) {
-                                       $selected = '';
-                                       if ( $val != '' && ($val == $key) ) {
-                                               $selected = ' of-radio-img-selected';
-                                       }
-                                       $output .= '<input type="radio" id="' . esc_attr( $value['id'] .'_'. $key) . '" class="of-radio-img-radio" value="' . esc_attr( $key ) . '" name="' . esc_attr( $name ) . '" '. checked( $val, $key, false ) .' />';
-                                       $output .= '<div class="of-radio-img-label">' . esc_html( $key ) . '</div>';
-                                       $output .= '<img src="' . esc_url( $option ) . '" alt="' . $option .'" class="of-radio-img-img' . $selected .'" onclick="document.getElementById(\''. esc_attr($value['id'] .'_'. $key) .'\').checked=true;" />';
-                               }
-                               break;
-
-                       // Checkbox
-                       case "checkbox":
-                               $output .= '<input id="' . esc_attr( $value['id'] ) . '" class="checkbox of-input" type="checkbox" name="' . esc_attr( $option_name . '[' . $value['id'] . ']' ) . '" '. checked( $val, 1, false) .' />';
-                               $output .= '<label class="explain" for="' . esc_attr( $value['id'] ) . '">' . wp_kses( $explain_value, $allowedtags) . '</label>';
-                               break;
-
-                       // Multicheck
-                       case "multicheck":
-                               foreach ($value['options'] as $key => $option) {
-                                       $checked = '';
-                                       $label = $option;
-                                       $option = preg_replace('/[^a-zA-Z0-9._\-]/', '', strtolower($key));
-
-                                       $id = $option_name . '-' . $value['id'] . '-'. $option;
-                                       $name = $option_name . '[' . $value['id'] . '][' . $option .']';
-
-                                       if ( isset($val[$option]) ) {
-                                               $checked = checked($val[$option], 1, false);
-                                       }
-
-                                       $output .= '<input id="' . esc_attr( $id ) . '" class="checkbox of-input" type="checkbox" name="' . esc_attr( $name ) . '" ' . $checked . ' /><label for="' . esc_attr( $id ) . '">' . esc_html( $label ) . '</label>';
-                               }
-                               break;
-
-                       // Color picker
-                       case "color":
-                               $default_color = '';
-                               if ( isset($value['std']) ) {
-                                       if ( $val !=  $value['std'] )
-                                               $default_color = ' data-default-color="' .$value['std'] . '" ';
-                               }
-                               $output .= '<input name="' . esc_attr( $option_name . '[' . $value['id'] . ']' ) . '" id="' . esc_attr( $value['id'] ) . '" class="of-color"  type="text" value="' . esc_attr( $val ) . '"' . $default_color .' />';
-
-                               break;
-
-                       // Uploader
-                       case "upload":
-                               $output .= Options_Framework_Media_Uploader::optionsframework_uploader( $value['id'], $val, null );
-
-                               break;
-
-                       // Typography
-                       case 'typography':
-
-                               unset( $font_size, $font_style, $font_face, $font_color );
-
-                               $typography_defaults = array(
-                                       'size' => '',
-                                       'face' => '',
-                                       'style' => '',
-                                       'color' => ''
-                               );
-
-                               $typography_stored = wp_parse_args( $val, $typography_defaults );
-
-                               $typography_options = array(
-                                       'sizes' => of_recognized_font_sizes(),
-                                       'faces' => of_recognized_font_faces(),
-                                       'styles' => of_recognized_font_styles(),
-                                       'color' => true
-                               );
-
-                               if ( isset( $value['options'] ) ) {
-                                       $typography_options = wp_parse_args( $value['options'], $typography_options );
-                               }
-
-                               // Font Size
-                               if ( $typography_options['sizes'] ) {
-                                       $font_size = '<select class="of-typography of-typography-size" name="' . esc_attr( $option_name . '[' . $value['id'] . '][size]' ) . '" id="' . esc_attr( $value['id'] . '_size' ) . '">';
-                                       $sizes = $typography_options['sizes'];
-                                       foreach ( $sizes as $i ) {
-                                               $size = $i . 'px';
-                                               $font_size .= '<option value="' . esc_attr( $size ) . '" ' . selected( $typography_stored['size'], $size, false ) . '>' . esc_html( $size ) . '</option>';
-                                       }
-                                       $font_size .= '</select>';
-                               }
-
-                               // Font Face
-                               if ( $typography_options['faces'] ) {
-                                       $font_face = '<select class="of-typography of-typography-face" name="' . esc_attr( $option_name . '[' . $value['id'] . '][face]' ) . '" id="' . esc_attr( $value['id'] . '_face' ) . '">';
-                                       $faces = $typography_options['faces'];
-                                       foreach ( $faces as $key => $face ) {
-                                               $font_face .= '<option value="' . esc_attr( $key ) . '" ' . selected( $typography_stored['face'], $key, false ) . '>' . esc_html( $face ) . '</option>';
-                                       }
-                                       $font_face .= '</select>';
-                               }
-
-                               // Font Styles
-                               if ( $typography_options['styles'] ) {
-                                       $font_style = '<select class="of-typography of-typography-style" name="'.$option_name.'['.$value['id'].'][style]" id="'. $value['id'].'_style">';
-                                       $styles = $typography_options['styles'];
-                                       foreach ( $styles as $key => $style ) {
-                                               $font_style .= '<option value="' . esc_attr( $key ) . '" ' . selected( $typography_stored['style'], $key, false ) . '>'. $style .'</option>';
-                                       }
-                                       $font_style .= '</select>';
-                               }
-
-                               // Font Color
-                               if ( $typography_options['color'] ) {
-                                       $default_color = '';
-                                       if ( isset($value['std']['color']) ) {
-                                               if ( $val !=  $value['std']['color'] )
-                                                       $default_color = ' data-default-color="' .$value['std']['color'] . '" ';
-                                       }
-                                       $font_color = '<input name="' . esc_attr( $option_name . '[' . $value['id'] . '][color]' ) . '" id="' . esc_attr( $value['id'] . '_color' ) . '" class="of-color of-typography-color  type="text" value="' . esc_attr( $typography_stored['color'] ) . '"' . $default_color .' />';
-                               }
-
-                               // Allow modification/injection of typography fields
-                               $typography_fields = compact( 'font_size', 'font_face', 'font_style', 'font_color' );
-                               $typography_fields = apply_filters( 'of_typography_fields', $typography_fields, $typography_stored, $option_name, $value );
-                               $output .= implode( '', $typography_fields );
-
-                               break;
-
-                       // Background
-                       case 'background':
-
-                               $background = $val;
-
-                               // Background Color
-                               $default_color = '';
-                               if ( isset( $value['std']['color'] ) ) {
-                                       if ( $val !=  $value['std']['color'] )
-                                               $default_color = ' data-default-color="' .$value['std']['color'] . '" ';
-                               }
-                               $output .= '<input name="' . esc_attr( $option_name . '[' . $value['id'] . '][color]' ) . '" id="' . esc_attr( $value['id'] . '_color' ) . '" class="of-color of-background-color"  type="text" value="' . esc_attr( $background['color'] ) . '"' . $default_color .' />';
-
-                               // Background Image
-                               if ( !isset($background['image']) ) {
-                                       $background['image'] = '';
-                               }
-
-                               $output .= Options_Framework_Media_Uploader::optionsframework_uploader( $value['id'], $background['image'], null, esc_attr( $option_name . '[' . $value['id'] . '][image]' ) );
-
-                               $class = 'of-background-properties';
-                               if ( '' == $background['image'] ) {
-                                       $class .= ' hide';
-                               }
-                               $output .= '<div class="' . esc_attr( $class ) . '">';
-
-                               // Background Repeat
-                               $output .= '<select class="of-background of-background-repeat" name="' . esc_attr( $option_name . '[' . $value['id'] . '][repeat]'  ) . '" id="' . esc_attr( $value['id'] . '_repeat' ) . '">';
-                               $repeats = of_recognized_background_repeat();
-
-                               foreach ($repeats as $key => $repeat) {
-                                       $output .= '<option value="' . esc_attr( $key ) . '" ' . selected( $background['repeat'], $key, false ) . '>'. esc_html( $repeat ) . '</option>';
-                               }
-                               $output .= '</select>';
-
-                               // Background Position
-                               $output .= '<select class="of-background of-background-position" name="' . esc_attr( $option_name . '[' . $value['id'] . '][position]' ) . '" id="' . esc_attr( $value['id'] . '_position' ) . '">';
-                               $positions = of_recognized_background_position();
-
-                               foreach ($positions as $key=>$position) {
-                                       $output .= '<option value="' . esc_attr( $key ) . '" ' . selected( $background['position'], $key, false ) . '>'. esc_html( $position ) . '</option>';
-                               }
-                               $output .= '</select>';
-
-                               // Background Attachment
-                               $output .= '<select class="of-background of-background-attachment" name="' . esc_attr( $option_name . '[' . $value['id'] . '][attachment]' ) . '" id="' . esc_attr( $value['id'] . '_attachment' ) . '">';
-                               $attachments = of_recognized_background_attachment();
-
-                               foreach ($attachments as $key => $attachment) {
-                                       $output .= '<option value="' . esc_attr( $key ) . '" ' . selected( $background['attachment'], $key, false ) . '>' . esc_html( $attachment ) . '</option>';
-                               }
-                               $output .= '</select>';
-
-                               // Background Size
-                               $output .= '<select class="of-background of-background-size" name="' . esc_attr( $option_name . '[' . $value['id'] . '][size]' ) . '" id="' . esc_attr( $value['id'] . '_size' ) . '">';
-                               $sizes = of_recognized_background_size();
-
-                               foreach ($sizes as $key => $size) {
-                                       $output .= '<option value="' . esc_attr( $key ) . '" ' . selected( $background['size'], $key, false ) . '>' . esc_html( $size ) . '</option>';
-                               }
-                               $output .= '</select>';
-                               $output .= '</div>';
-
-                               break;
-
-                       // Editor
-                       case 'editor':
-                               $output .= '<div class="explain">' . wp_kses( $explain_value, $allowedtags ) . '</div>'."\n";
-                               echo $output;
-                               $textarea_name = esc_attr( $option_name . '[' . $value['id'] . ']' );
-                               $default_editor_settings = array(
-                                       'textarea_name' => $textarea_name,
-                                       'media_buttons' => false,
-                                       'tinymce' => array( 'plugins' => 'wordpress' )
-                               );
-                               $editor_settings = array();
-                               if ( isset( $value['settings'] ) ) {
-                                       $editor_settings = $value['settings'];
-                               }
-                               $editor_settings = array_merge( $default_editor_settings, $editor_settings );
-                               wp_editor( $val, $value['id'], $editor_settings );
-                               $output = '';
-                               break;
-
-                       // Info
-                       case "info":
-                               $id = '';
-                               $class = 'section';
-                               if ( isset( $value['id'] ) ) {
-                                       $id = 'id="' . esc_attr( $value['id'] ) . '" ';
-                               }
-                               if ( isset( $value['type'] ) ) {
-                                       $class .= ' section-' . $value['type'];
-                               }
-                               if ( isset( $value['class'] ) ) {
-                                       $class .= ' ' . $value['class'];
-                               }
-
-                               $output .= '<div ' . $id . 'class="' . esc_attr( $class ) . '">' . "\n";
-                               if ( isset($value['name']) ) {
-                                       $output .= '<h4 class="heading">' . esc_html( $value['name'] ) . '</h4>' . "\n";
-                               }
-                               if ( isset( $value['desc'] ) ) {
-                                       $output .= $value['desc'] . "\n";
-                               }
-                               $output .= '</div>' . "\n";
-                               break;
-
-                       // Heading for Navigation
-                       case "heading":
-                               $counter++;
-                               if ( $counter >= 2 ) {
-                                       $output .= '</div>'."\n";
-                               }
-                               $class = '';
-                               $class = ! empty( $value['id'] ) ? $value['id'] : $value['name'];
-                               $class = preg_replace('/[^a-zA-Z0-9._\-]/', '', strtolower($class) );
-                               $output .= '<div id="options-group-' . $counter . '" class="group ' . $class . '">';
-                               $output .= '<h3>' . esc_html( $value['name'] ) . '</h3>' . "\n";
-                               break;
-
-                       // Background
-                       case 'parallaxsection':
-
-                               if(!empty($settings['parallax_section'])) {
-                               foreach ($settings['parallax_section'] as $i => $ival) { 
-                               $background = $val;
-                               $output .='<div class="sub-option clearfix" data-id="'.$i.'"><h3 class="title">'.__('Page Title: ' ,'accesspress-parallax').'<span></span><div class="section-toggle"><i class="fa fa-chevron-down"></i>
-</div></h3>';
-                               $output .='<div class="sub-option-inner" style="display:none">';
-                               $output .='<div class="inline-label">';
-                               $output .='<label>'.__('Page','accesspress-parallax').'</label>';
-                               $output .= '<select class="of-input '.esc_attr( $value['id'] . '_page' ).'" name="' . esc_attr( $option_name . '[' . $value['id'] . ']['.$i.'][page]' ) . '">';
-
-                               foreach ($value['options'] as $key => $option ) {
-                                       $output .= '<option'. selected( $background[$i]['page'], $key, false ) .' value="' . esc_attr( $key ) . '">' . esc_html( $option ) . '</option>';
-                               }
-                               $output .= '</select>';
-                               $output .='</div>';
-
-                               // Font Color
-                               $default_color = '';
-                               if ( isset( $value['std']['font_color'] ) ) {
-                                       if ( $val !=  $value['std']['font_color'] )
-                                               $default_color = ' data-default-color="' .$value['std']['font_color'] . '" ';
-                               }
-                               $output .='<div class="color-picker inline-label">';
-                               $output .='<label class="">'.__('Font Color','accesspress-parallax').'</label>';
-                               $output .= '<input name="' . esc_attr( $option_name . '[' . $value['id'] . ']['.$i.'][font_color]' ) . '" class="of-color of-background-color"  type="text" value="' . esc_attr( $background[$i]['font_color'] ) . '"' . $default_color .' />';
-                               $output .='</div>';
-
-                               // Background Color
-                               $default_color = '';
-                               if ( isset( $value['std']['color'] ) ) {
-                                       if ( $val !=  $value['std']['color'] )
-                                               $default_color = ' data-default-color="' .$value['std']['color'] . '" ';
-                               }
-                               $output .='<div class="color-picker inline-label">';
-                               $output .='<label>'.__('Background Color','accesspress-parallax').'</label>';
-                               $output .= '<input name="' . esc_attr( $option_name . '[' . $value['id'] . ']['.$i.'][color]' ) . '" class="of-color of-background-color"  type="text" value="' . esc_attr( $background[$i]['color'] ) . '"' . $default_color .' />';
-                               $output .='</div>';
-
-                               // Section Layout
-                               $output .='<div class="inline-label">';
-                               $output .='<label>'.__('Layout','accesspress-parallax').'</label>';
-                               $output .= '<select class="of-section of-section-layout" name="' . esc_attr( $option_name . '[' . $value['id'] . ']['.$i.'][layout]' ) . '">';
-                               $layouts = of_recognized_layout();
-
-                               foreach ($layouts as $key => $layout) {
-                                       $output .= '<option value="' . esc_attr( $key ) . '" ' . selected( $background[$i]['layout'], $key, false ) . '>' . esc_html( $layout ) . '</option>';
-                               }
-                               $output .= '</select>';
-                               $output .='</div>';
-
-                               // Section Category
-                               $output .='<div class="inline-label toggle-category">';
-                               $output .='<label>'.__('Category','accesspress-parallax').'</label>';
-                               $output .= '<select class="of-input of-section-category" name="' . esc_attr( $option_name . '[' . $value['id'] . ']['.$i.'][category]' ) . '">';
-
-                               foreach ($value['category'] as $key => $category ) {
-                                       $output .= '<option'. selected( $background[$i]['category'], $key, false ) .' value="' . esc_attr( $key ) . '">' . esc_html( $category ) . '</option>';
-                               }
-                               $output .= '</select>';
-                               $output .='</div>';
-
-                               // Background Image
-                               if ( !isset($background[$i]['image']) ) {
-                                       $background[$i]['image'] = '';
-                               }
-
-                               $output .='<div class="inline-label">';
-                               $output .='<label class="">'.__('Background Image','accesspress-parallax').'</label>';
-                               $output .= Options_Framework_Media_Uploader::optionsframework_uploader( $value['id'], $background[$i]['image'], null, esc_attr( $option_name . '[' . $value['id'] . ']['.$i.'][image]' ) );
-                               $output .='</div>';
-
-                               $class = 'of-background-properties';
-                               if ( '' == $background[$i]['image'] ) {
-                                       $class .= ' hide';
-                               }
-                               $output .= '<div class="inline-label ' . esc_attr( $class ) . '">';
-                               $output .= '<label>'.__('Background Settings','accesspress-parallax').'</label>';
-
-                               // Background Repeat
-                               $output .= '<div class="background-settings">';
-                               $output .= '<div class="clearfix">';
-                               $output .= '<select class="of-background of-background-repeat" name="' . esc_attr( $option_name . '[' . $value['id'] . ']['.$i.'][repeat]'  ) . '">';
-                               $repeats = of_recognized_background_repeat();
-
-                               foreach ($repeats as $key => $repeat) {
-                                       $output .= '<option value="' . esc_attr( $key ) . '" ' . selected( $background[$i]['repeat'], $key, false ) . '>'. esc_html( $repeat ) . '</option>';
-                               }
-                               $output .= '</select>';
-
-                               // Background Position
-                               $output .= '<select class="of-background of-background-position" name="' . esc_attr( $option_name . '[' . $value['id'] . ']['.$i.'][position]' ) . '">';
-                               $positions = of_recognized_background_position();
-
-                               foreach ($positions as $key=>$position) {
-                                       $output .= '<option value="' . esc_attr( $key ) . '" ' . selected( $background[$i]['position'], $key, false ) . '>'. esc_html( $position ) . '</option>';
-                               }
-                               $output .= '</select>';
-
-                               // Background Attachment
-                               $output .= '<select class="of-background of-background-attachment" name="' . esc_attr( $option_name . '[' . $value['id'] . ']['.$i.'][attachment]' ) . '">';
-                               $attachments = of_recognized_background_attachment();
-
-                               foreach ($attachments as $key => $attachment) {
-                                       $output .= '<option value="' . esc_attr( $key ) . '" ' . selected( $background[$i]['attachment'], $key, false ) . '>' . esc_html( $attachment ) . '</option>';
-                               }
-                               $output .= '</select>';
-
-                               // Background Size
-                               $output .= '<select class="of-background of-background-size" name="' . esc_attr( $option_name . '[' . $value['id'] . ']['.$i.'][size]' ) . '">';
-                               $sizes = of_recognized_background_size();
-
-                               foreach ($sizes as $key => $size) {
-                                       $output .= '<option value="' . esc_attr( $key ) . '" ' . selected( $background[$i]['size'], $key, false ) . '>' . esc_html( $size ) . '</option>';
-                               }
-                               $output .= '</select>';
-                               $output .= '</div></div>';
-
-                               // Background Overlay
-                               $output .='<div class="color-picker inline-label">';
-                               $output .='<label>'.__('Overlay','accesspress-parallax').'</label>';
-                               $output .= '<select class="of-background of-background-overlay" name="' . esc_attr( $option_name . '[' . $value['id'] . ']['.$i.'][overlay]' ) . '">';
-                               $overlays = of_recognized_background_overlay();
-
-                               foreach ($overlays as $key => $overlay) {
-                                       $output .= '<option value="' . esc_attr( $key ) . '" ' . selected( $background[$i]['overlay'], $key, false ) . '>' . esc_html( $overlay ) . '</option>';
-                               }
-                               $output .= '</select>';
-                               $output .= '</div>';
-
-                               $output .= '</div>';
-                               $output .= '<div class="button-primary remove-parallax">'.__('Remove','accesspress-parallax').'</div></div>';
-                               $output .= '</div>';
-                               }
-                       }
-
-                               break;
-
-                               // Button
-                               case "button":
-                               $output .= '<a id="' . esc_attr( $value['id'] ) . '" class="button-primary" href="javascript:void(0);">'.__('Add New Section','accesspress-parallax').'</a>'."\n";
-                               break;
-                       }
-
-
-                       if ( ( $value['type'] != "heading" ) && ( $value['type'] != "info" ) ) {
-                               $output .= '</div>';
-                               if ( ( $value['type'] != "checkbox" ) && ( $value['type'] != "editor" ) && ( $value['type'] != "parallaxsection" )) {
-                                       $output .= '<div class="explain">' . wp_kses( $explain_value, $allowedtags) . '</div>'."\n";
-                               }
-                               $output .= '</div></div>'."\n";
-                       }
-
-                       echo $output;
-               }
-
-               // Outputs closing div if there tabs
-               if ( Options_Framework_Interface::optionsframework_tabs() != '' ) {
-                       echo '</div>';
-               }
-       }
-
-}
\ No newline at end of file
diff --git a/inc/options-framework/includes/class-options-media-uploader.php b/inc/options-framework/includes/class-options-media-uploader.php
deleted file mode 100644 (file)
index c339c13..0000000
+++ /dev/null
@@ -1,121 +0,0 @@
-<?php
-/**
- * @package   Options_Framework
- * @author    Devin Price <devin@wptheming.com>
- * @license   GPL-2.0+
- * @link      http://wptheming.com
- * @copyright 2010-2014 WP Theming
- */
-
-class Options_Framework_Media_Uploader {
-
-       /**
-        * Initialize the media uploader class
-        *
-        * @since 1.7.0
-        */
-       public function init() {
-               add_action( 'admin_enqueue_scripts', array( $this, 'optionsframework_media_scripts' ) );
-       }
-
-       /**
-        * Media Uploader Using the WordPress Media Library.
-        *
-        * Parameters:
-        *
-        * string $_id - A token to identify this field (the name).
-        * string $_value - The value of the field, if present.
-        * string $_desc - An optional description of the field.
-        *
-        */
-
-       static function optionsframework_uploader( $_id, $_value, $_desc = '', $_name = '' ) {
-
-               $options_framework = new Options_Framework;
-           $option_name = $options_framework->get_option_name();
-
-               $output = '';
-               $id = '';
-               $class = '';
-               $int = '';
-               $value = '';
-               $name = '';
-
-               $id = strip_tags( strtolower( $_id ) );
-
-               // If a value is passed and we don't have a stored value, use the value that's passed through.
-               if ( $_value != '' && $value == '' ) {
-                       $value = $_value;
-               }
-
-               if ($_name != '') {
-                       $name = $_name;
-               }
-               else {
-                       $name = $option_name.'['.$id.']';
-               }
-
-               if ( $value ) {
-                       $class = ' has-file';
-               }
-               $output .= '<input id="' . $id . '" class="upload' . $class . '" type="text" name="'.$name.'" value="' . $value . '" placeholder="' . __('No file chosen', 'accesspress-parallax') .'" />' . "\n";
-               if ( function_exists( 'wp_enqueue_media' ) ) {
-                       if ( ( $value == '' ) ) {
-                               $output .= '<input id="upload-' . $id . '" class="upload-button button" type="button" value="' . __( 'Upload', 'accesspress-parallax' ) . '" />' . "\n";
-                       } else {
-                               $output .= '<input id="remove-' . $id . '" class="remove-file button" type="button" value="' . __( 'Remove', 'accesspress-parallax' ) . '" />' . "\n";
-                       }
-               } else {
-                       $output .= '<p><i>' . __( 'Upgrade your version of WordPress for full media support.', 'accesspress-parallax' ) . '</i></p>';
-               }
-
-               if ( $_desc != '' ) {
-                       $output .= '<span class="of-metabox-desc">' . $_desc . '</span>' . "\n";
-               }
-
-               $output .= '<div class="screenshot" id="' . $id . '-image">' . "\n";
-
-               if ( $value != '' ) {
-                       $remove = '<a class="remove-image">Remove</a>';
-                       $image = preg_match( '/(^.*\.jpg|jpeg|png|gif|ico*)/i', $value );
-                       if ( $image ) {
-                               $output .= '<img src="' . $value . '" alt="" />' . $remove;
-                       } else {
-                               $parts = explode( "/", $value );
-                               for( $i = 0; $i < sizeof( $parts ); ++$i ) {
-                                       $title = $parts[$i];
-                               }
-
-                               // No output preview if it's not an image.
-                               $output .= '';
-
-                               // Standard generic output if it's not an image.
-                               $title = __( 'View File', 'accesspress-parallax' );
-                               $output .= '<div class="no-image"><span class="file_link"><a href="' . $value . '" target="_blank" rel="external">'.$title.'</a></span></div>';
-                       }
-               }
-               $output .= '</div>' . "\n";
-               return $output;
-       }
-
-       /**
-        * Enqueue scripts for file uploader
-        */
-       function optionsframework_media_scripts( $hook ) {
-
-               $menu = Options_Framework_Admin::menu_settings();
-
-        if ( substr( $hook, -strlen( $menu['menu_slug'] ) ) !== $menu['menu_slug'] )
-               return;
-
-               if ( function_exists( 'wp_enqueue_media' ) )
-                       wp_enqueue_media();
-
-               wp_register_script( 'of-media-uploader', OPTIONS_FRAMEWORK_DIRECTORY .'js/media-uploader.js', array( 'jquery' ), Options_Framework::VERSION );
-               wp_enqueue_script( 'of-media-uploader' );
-               wp_localize_script( 'of-media-uploader', 'optionsframework_l10n', array(
-                       'upload' => __( 'Upload', 'accesspress-parallax' ),
-                       'remove' => __( 'Remove', 'accesspress-parallax' )
-               ) );
-       }
-}
\ No newline at end of file
diff --git a/inc/options-framework/includes/class-options-sanitization.php b/inc/options-framework/includes/class-options-sanitization.php
deleted file mode 100644 (file)
index 0844a87..0000000
+++ /dev/null
@@ -1,604 +0,0 @@
-<?php
-/**
- * @package   Options_Framework
- * @author    Devin Price <devin@wptheming.com>
- * @license   GPL-2.0+
- * @link      http://wptheming.com
- * @copyright 2010-2014 WP Theming
- */
-
-/**
- * Sanitization for text input
- *
- * @link http://developer.wordpress.org/reference/functions/sanitize_text_field/
- */
-add_filter( 'of_sanitize_text', 'sanitize_text_field' );
-
-/**
- * Sanitization for hidden input
- *
- * @link http://developer.wordpress.org/reference/functions/sanitize_text_field/
- */
-add_filter( 'of_sanitize_hidden', 'sanitize_text_field' );
-
-/**
- * Sanitization for password input
- *
- * @link http://developer.wordpress.org/reference/functions/sanitize_text_field/
- */
-add_filter( 'of_sanitize_password', 'sanitize_text_field' );
-
-/**
- * Sanitization for select input
- *
- * Validates that the selected option is a valid option.
- */
-add_filter( 'of_sanitize_select', 'of_sanitize_enum', 10, 2 );
-
-/**
- * Sanitization for radio input
- *
- * Validates that the selected option is a valid option.
- */
-add_filter( 'of_sanitize_radio', 'of_sanitize_enum', 10, 2 );
-
-/**
- * Sanitization for image selector
- *
- * Validates that the selected option is a valid option.
- */
-add_filter( 'of_sanitize_images', 'of_sanitize_enum', 10, 2 );
-
-/**
- * Sanitization for textarea field
- *
- * @param $input string
- * @return $output sanitized string
- */
-function of_sanitize_textarea( $input ) {
-       global $allowedposttags;
-       $output = wp_kses( $input, $allowedposttags);
-       return $output;
-}
-add_filter( 'of_sanitize_textarea', 'of_sanitize_textarea' );
-
-/**
- * Sanitization for url field
- *
- * @param $input string
- * @return $output sanitized string
- */
-function of_sanitize_url( $input ) {
-       $output = esc_url_raw( $input );
-       return $output;
-}
-add_filter( 'of_sanitize_url', 'of_sanitize_url' );
-
-/**
- * Sanitization for checkbox input
- *
- * @param $input string (1 or empty) checkbox state
- * @return $output '1' or false
- */
-function of_sanitize_checkbox( $input ) {
-       if ( $input ) {
-               $output = '1';
-       } else {
-               $output = ' ';
-       }
-       return $output;
-}
-add_filter( 'of_sanitize_checkbox', 'of_sanitize_checkbox' );
-
-/**
- * Sanitization for multicheck
- *
- * @param array of checkbox values
- * @return array of sanitized values ('1' or false)
- */
-function of_sanitize_multicheck( $input, $option ) {
-       $output = '';
-       if ( is_array( $input ) ) {
-               foreach( $option['options'] as $key => $value ) {
-                       $output[$key] = false;
-               }
-               foreach( $input as $key => $value ) {
-                       if ( array_key_exists( $key, $option['options'] ) && $value ) {
-                               $output[$key] = '1';
-                       }
-               }
-       }
-       return $output;
-}
-add_filter( 'of_sanitize_multicheck', 'of_sanitize_multicheck', 10, 2 );
-
-/**
- * File upload sanitization.
- *
- * Returns a sanitized filepath if it has a valid extension.
- *
- * @param string $input filepath
- * @returns string $output filepath
- */
-function of_sanitize_upload( $input ) {
-       $output = '';
-       $filetype = wp_check_filetype( $input );
-       if ( $filetype["ext"] ) {
-               $output = esc_url( $input );
-       }
-       return $output;
-}
-add_filter( 'of_sanitize_upload', 'of_sanitize_upload' );
-
-/**
- * Sanitization for editor input.
- *
- * Returns unfiltered HTML if user has permissions.
- *
- * @param string $input
- * @returns string $output
- */
-function of_sanitize_editor( $input ) {
-       if ( current_user_can( 'unfiltered_html' ) ) {
-               $output = $input;
-       }
-       else {
-               global $allowedtags;
-               $output = wpautop( wp_kses( $input, $allowedtags) );
-       }
-       return $output;
-}
-add_filter( 'of_sanitize_editor', 'of_sanitize_editor' );
-
-/**
- * Sanitization of input with allowed tags and wpautotop.
- *
- * Allows allowed tags in html input and ensures tags close properly.
- *
- * @param string $input
- * @returns string $output
- */
-function of_sanitize_allowedtags( $input ) {
-       global $allowedtags;
-       $output = wpautop( wp_kses( $input, $allowedtags ) );
-       return $output;
-}
-
-/**
- * Sanitization of input with allowed post tags and wpautotop.
- *
- * Allows allowed post tags in html input and ensures tags close properly.
- *
- * @param string $input
- * @returns string $output
- */
-function of_sanitize_allowedposttags( $input ) {
-       global $allowedposttags;
-       $output = wpautop( wp_kses( $input, $allowedposttags) );
-       return $output;
-}
-
-/**
- * Validates that the $input is one of the avilable choices
- * for that specific option.
- *
- * @param string $input
- * @returns string $output
- */
-function of_sanitize_enum( $input, $option ) {
-       $output = '';
-       if ( array_key_exists( $input, $option['options'] ) ) {
-               $output = $input;
-       }
-       return $output;
-}
-
-/**
- * Sanitization for background option.
- *
- * @returns array $output
- */
-function of_sanitize_background( $input ) {
-
-       $output = wp_parse_args( $input, array(
-               'color' => '',
-               'image'  => '',
-               'repeat'  => 'repeat',
-               'position' => 'top center',
-               'attachment' => 'scroll',
-               'size' => 'cover',
-               'overlay' => '',
-       ) );
-
-       $output['color'] = apply_filters( 'of_sanitize_hex', $input['color'] );
-       $output['image'] = apply_filters( 'of_sanitize_upload', $input['image'] );
-       $output['repeat'] = apply_filters( 'of_background_repeat', $input['repeat'] );
-       $output['position'] = apply_filters( 'of_background_position', $input['position'] );
-       $output['attachment'] = apply_filters( 'of_background_attachment', $input['attachment'] );
-       $output['size'] = apply_filters( 'of_background_size', $input['size'] );
-       $output['overlay'] = apply_filters( 'of_background_overlay', $input['overlay'] );
-
-       return $output;
-}
-add_filter( 'of_sanitize_background', 'of_sanitize_background' );
-
-/**
- * Sanitization for background option.
- *
- * @returns array $output
- */
-function of_sanitize_parallaxsection( $input ) {
-$output = array();
-if ( is_array( $input ) ) {
-       foreach( $input as $key => $value ) {
-               $output[$key] = wp_parse_args( $input[$key], array(
-               'page' => '',
-               'color' => '',
-               'image'  => '',
-               'repeat'  => 'repeat',
-               'position' => 'top center',
-               'attachment' => 'scroll',
-               'size' => 'cover'
-               ) );
-
-       $output[$key]['page'] = esc_attr($input[$key]['page']);
-       $output[$key]['color'] = apply_filters( 'of_sanitize_hex', $input[$key]['color'] );
-       $output[$key]['image'] = apply_filters( 'of_sanitize_upload', $input[$key]['image'] );
-       $output[$key]['repeat'] = apply_filters( 'of_background_repeat', $input[$key]['repeat'] );
-       $output[$key]['position'] = apply_filters( 'of_background_position', $input[$key]['position'] );
-       $output[$key]['attachment'] = apply_filters( 'of_background_attachment', $input[$key]['attachment'] );
-       $output[$key]['size'] = apply_filters( 'of_background_size', $input[$key]['size'] );
-       }
-}
-       
-return $output;
-}
-add_filter( 'of_sanitize_parallaxsection', 'of_sanitize_parallaxsection' );
-
-
-/**
- * Sanitization for background repeat
- *
- * @returns string $value if it is valid
- */
-function of_sanitize_background_repeat( $value ) {
-       $recognized = of_recognized_background_repeat();
-       if ( array_key_exists( $value, $recognized ) ) {
-               return $value;
-       }
-       return apply_filters( 'of_default_background_repeat', current( $recognized ) );
-}
-add_filter( 'of_background_repeat', 'of_sanitize_background_repeat' );
-
-/**
- * Sanitization for background position
- *
- * @returns string $value if it is valid
- */
-function of_sanitize_background_position( $value ) {
-       $recognized = of_recognized_background_position();
-       if ( array_key_exists( $value, $recognized ) ) {
-               return $value;
-       }
-       return apply_filters( 'of_default_background_position', current( $recognized ) );
-}
-add_filter( 'of_background_position', 'of_sanitize_background_position' );
-
-/**
- * Sanitization for background attachment
- *
- * @returns string $value if it is valid
- */
-function of_sanitize_background_size( $value ) {
-       $recognized = of_recognized_background_size();
-       if ( array_key_exists( $value, $recognized ) ) {
-               return $value;
-       }
-       return apply_filters( 'of_sanitize_background_size', current( $recognized ) );
-}
-add_filter( 'of_background_size', 'of_sanitize_background_size' );
-
-/**
- * Sanitization for background attachment
- *
- * @returns string $value if it is valid
- */
-function of_sanitize_background_overlay( $value ) {
-       $recognized = of_recognized_background_overlay();
-       if ( array_key_exists( $value, $recognized ) ) {
-               return $value;
-       }
-       return apply_filters( 'of_sanitize_background_overlay', current( $recognized ) );
-}
-add_filter( 'of_background_overlay', 'of_sanitize_background_overlay' );
-
-/**
- * Sanitization for background attachment
- *
- * @returns string $value if it is valid
- */
-function of_sanitize_layout( $value ) {
-       $recognized = of_recognized_layout();
-       if ( array_key_exists( $value, $recognized ) ) {
-               return $value;
-       }
-       return apply_filters( 'of_sanitize_layout', current( $recognized ) );
-}
-add_filter( 'of_layout', 'of_sanitize_layout' );
-
-/**
- * Sanitization for background attachment
- *
- * @returns string $value if it is valid
- */
-function of_sanitize_background_attachment( $value ) {
-       $recognized = of_recognized_background_attachment();
-       if ( array_key_exists( $value, $recognized ) ) {
-               return $value;
-       }
-       return apply_filters( 'of_default_background_attachment', current( $recognized ) );
-}
-add_filter( 'of_background_attachment', 'of_sanitize_background_attachment' );
-
-/**
- * Sanitization for typography option.
- */
-function of_sanitize_typography( $input, $option ) {
-
-       $output = wp_parse_args( $input, array(
-               'size'  => '',
-               'face'  => '',
-               'style' => '',
-               'color' => ''
-       ) );
-
-       if ( isset( $option['options']['faces'] ) && isset( $input['face'] ) ) {
-               if ( !( array_key_exists( $input['face'], $option['options']['faces'] ) ) ) {
-                       $output['face'] = '';
-               }
-       }
-       else {
-               $output['face']  = apply_filters( 'of_font_face', $output['face'] );
-       }
-
-       $output['size']  = apply_filters( 'of_font_size', $output['size'] );
-       $output['style'] = apply_filters( 'of_font_style', $output['style'] );
-       $output['color'] = apply_filters( 'of_sanitize_color', $output['color'] );
-       return $output;
-}
-add_filter( 'of_sanitize_typography', 'of_sanitize_typography', 10, 2 );
-
-/**
- * Sanitization for font size
- */
-function of_sanitize_font_size( $value ) {
-       $recognized = of_recognized_font_sizes();
-       $value_check = preg_replace('/px/','', $value);
-       if ( in_array( (int) $value_check, $recognized ) ) {
-               return $value;
-       }
-       return apply_filters( 'of_default_font_size', $recognized );
-}
-add_filter( 'of_font_size', 'of_sanitize_font_size' );
-
-/**
- * Sanitization for font style
- */
-function of_sanitize_font_style( $value ) {
-       $recognized = of_recognized_font_styles();
-       if ( array_key_exists( $value, $recognized ) ) {
-               return $value;
-       }
-       return apply_filters( 'of_default_font_style', current( $recognized ) );
-}
-add_filter( 'of_font_style', 'of_sanitize_font_style' );
-
-/**
- * Sanitization for font face
- */
-function of_sanitize_font_face( $value ) {
-       $recognized = of_recognized_font_faces();
-       if ( array_key_exists( $value, $recognized ) ) {
-               return $value;
-       }
-       return apply_filters( 'of_default_font_face', current( $recognized ) );
-}
-add_filter( 'of_font_face', 'of_sanitize_font_face' );
-
-/**
- * Get recognized background repeat settings
- *
- * @return   array
- */
-function of_recognized_background_repeat() {
-       $default = array(
-               'no-repeat' => __( 'No Repeat', 'accesspress-parallax' ),
-               'repeat-x'  => __( 'Repeat Horizontally', 'accesspress-parallax' ),
-               'repeat-y'  => __( 'Repeat Vertically', 'accesspress-parallax' ),
-               'repeat'    => __( 'Repeat All', 'accesspress-parallax' ),
-               );
-       return apply_filters( 'of_recognized_background_repeat', $default );
-}
-
-/**
- * Get recognized background positions
- *
- * @return   array
- */
-function of_recognized_background_position() {
-       $default = array(
-               'top left'      => __( 'Top Left', 'accesspress-parallax' ),
-               'top center'    => __( 'Top Center', 'accesspress-parallax' ),
-               'top right'     => __( 'Top Right', 'accesspress-parallax' ),
-               'center left'   => __( 'Middle Left', 'accesspress-parallax' ),
-               'center center' => __( 'Middle Center', 'accesspress-parallax' ),
-               'center right'  => __( 'Middle Right', 'accesspress-parallax' ),
-               'bottom left'   => __( 'Bottom Left', 'accesspress-parallax' ),
-               'bottom center' => __( 'Bottom Center', 'accesspress-parallax' ),
-               'bottom right'  => __( 'Bottom Right', 'accesspress-parallax')
-               );
-       return apply_filters( 'of_recognized_background_position', $default );
-}
-
-/**
- * Get recognized background attachment
- *
- * @return   array
- */
-function of_recognized_background_attachment() {
-       $default = array(
-               'scroll' => __( 'Scroll Normally', 'accesspress-parallax' ),
-               'fixed'  => __( 'Fixed in Place', 'accesspress-parallax')
-               );
-       return apply_filters( 'of_recognized_background_attachment', $default );
-}
-
-/**
- * Get recognized background size
- *
- * @return   array
- */
-function of_recognized_background_size() {
-       $default = array(
-               'auto' => __( 'Auto', 'accesspress-parallax' ),
-               'cover'  => __( 'Cover', 'accesspress-parallax'),
-               'contain'  => __( 'Contain', 'accesspress-parallax')
-               );
-       return apply_filters( 'of_recognized_background_size', $default );
-}
-
-
-/**
- * Get recognized background size
- *
- * @return   array
- */
-function of_recognized_layout() {
-       $default = array(
-               'default_template' => __('Default Section', 'accesspress-parallax'),
-               'service_template' => __('Service Section', 'accesspress-parallax'),
-               'team_template' => __('Team Section', 'accesspress-parallax'),
-               'portfolio_template' => __('Portfolio Section', 'accesspress-parallax'),
-               'testimonial_template' => __('Testimonial Section', 'accesspress-parallax'),
-               'blog_template' => __('Blog Section', 'accesspress-parallax'),
-               'action_template' => __('Call to Action Section', 'accesspress-parallax'),
-               'googlemap_template' => __('Google Map Section', 'accesspress-parallax'),
-               'blank_template' => __('Blank Section', 'accesspress-parallax'),
-               );
-       return apply_filters( 'of_recognized_layout', $default );
-}
-
-/**
- * Get recognized background Overlay
- *
- * @return   array
- */
-function of_recognized_background_overlay() {
-       $default = array(
-               'overlay0' => __( 'No Overlay', 'accesspress-parallax' ),
-               'overlay1' => __( 'Small Dotted', 'accesspress-parallax' ),
-               'overlay2'  => __( 'Large Dotted', 'accesspress-parallax'),
-               'overlay3'  => __( 'Light Black', 'accesspress-parallax'),
-               'overlay4'  => __( 'Black Dotted', 'accesspress-parallax')
-               );
-       return apply_filters( 'of_recognized_background_overlay', $default );
-}
-
-/**
- * Sanitize a color represented in hexidecimal notation.
- *
- * @param    string    Color in hexidecimal notation. "#" may or may not be prepended to the string.
- * @param    string    The value that this function should return if it cannot be recognized as a color.
- * @return   string
- */
-
-function of_sanitize_hex( $hex, $default = '' ) {
-       if ( of_validate_hex( $hex ) ) {
-               return $hex;
-       }
-       return $default;
-}
-add_filter( 'of_sanitize_color', 'of_sanitize_hex' );
-
-/**
- * Get recognized font sizes.
- *
- * Returns an indexed array of all recognized font sizes.
- * Values are integers and represent a range of sizes from
- * smallest to largest.
- *
- * @return   array
- */
-
-function of_recognized_font_sizes() {
-       $sizes = range( 6, 71 );
-       $sizes = apply_filters( 'of_recognized_font_sizes', $sizes );
-       $sizes = array_map( 'absint', $sizes );
-       return $sizes;
-}
-
-/**
- * Get recognized font faces.
- *
- * Returns an array of all recognized font faces.
- * Keys are intended to be stored in the database
- * while values are ready for display in in html.
- *
- * @return   array
- */
-function of_recognized_font_faces() {
-       $default = array(
-               'arial'     => 'Arial',
-               'verdana'   => 'Verdana, Geneva',
-               'trebuchet' => 'Trebuchet',
-               'georgia'   => 'Georgia',
-               'times'     => 'Times New Roman',
-               'tahoma'    => 'Tahoma, Geneva',
-               'palatino'  => 'Palatino',
-               'helvetica' => 'Helvetica*'
-               );
-       return apply_filters( 'of_recognized_font_faces', $default );
-}
-
-/**
- * Get recognized font styles.
- *
- * Returns an array of all recognized font styles.
- * Keys are intended to be stored in the database
- * while values are ready for display in in html.
- *
- * @return   array
- */
-function of_recognized_font_styles() {
-       $default = array(
-               'normal'      => __( 'Normal', 'accesspress-parallax' ),
-               'italic'      => __( 'Italic', 'accesspress-parallax' ),
-               'bold'        => __( 'Bold', 'accesspress-parallax' ),
-               'bold italic' => __( 'Bold Italic', 'accesspress-parallax' )
-               );
-       return apply_filters( 'of_recognized_font_styles', $default );
-}
-
-/**
- * Is a given string a color formatted in hexidecimal notation?
- *
- * @param    string    Color in hexidecimal notation. "#" may or may not be prepended to the string.
- * @return   bool
- */
-function of_validate_hex( $hex ) {
-       $hex = trim( $hex );
-       /* Strip recognized prefixes. */
-       if ( 0 === strpos( $hex, '#' ) ) {
-               $hex = substr( $hex, 1 );
-       }
-       elseif ( 0 === strpos( $hex, '%23' ) ) {
-               $hex = substr( $hex, 3 );
-       }
-       /* Regex match. */
-       if ( 0 === preg_match( '/^[0-9a-fA-F]{6}$/', $hex ) ) {
-               return false;
-       }
-       else {
-               return true;
-       }
-}
\ No newline at end of file
diff --git a/inc/options-framework/js/ajax.js b/inc/options-framework/js/ajax.js
deleted file mode 100644 (file)
index 00ec31c..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-jQuery(document).ready( function($) {
-       $('#add_new_section').click(function(){
-               var count_section = $('#parallax_count').val();
-               count_section++;
-               $('#parallax_count').val(count_section);
-               $.ajax({
-                    url: ajaxurl,
-                    data: ({
-                       'action' : 'get_my_option',
-                       'count_section' : count_section
-                    }),
-                    success: function(data) {
-                     $('#section-parallax_section .controls').append(data);
-                     $('.of-color').wpColorPicker();
-                     
-                     $('.parallax_section_page').on('change',function(){
-                               var sled = $(this).find("option:selected").text();
-                               $(this).parents('.sub-option').find('.title span').text(sled);
-                          });
-                    }
-               });
-       });
-});
\ No newline at end of file
diff --git a/inc/options-framework/js/media-uploader.js b/inc/options-framework/js/media-uploader.js
deleted file mode 100644 (file)
index 9ee5ce8..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-jQuery(document).ready(function($){
-
-       var optionsframework_upload;
-       var optionsframework_selector;
-
-       function optionsframework_add_file(event, selector) {
-
-               var upload = $(".uploaded-file"), frame;
-               var $el = $(this);
-               optionsframework_selector = selector;
-
-               event.preventDefault();
-
-               // If the media frame already exists, reopen it.
-               if ( optionsframework_upload ) {
-                       optionsframework_upload.open();
-               } else {
-                       // Create the media frame.
-                       optionsframework_upload = wp.media.frames.optionsframework_upload =  wp.media({
-                               // Set the title of the modal.
-                               title: $el.data('choose'),
-
-                               // Customize the submit button.
-                               button: {
-                                       // Set the text of the button.
-                                       text: $el.data('update'),
-                                       // Tell the button not to close the modal, since we're
-                                       // going to refresh the page when the image is selected.
-                                       close: false
-                               }
-                       });
-
-                       // When an image is selected, run a callback.
-                       optionsframework_upload.on( 'select', function() {
-                               // Grab the selected attachment.
-                               var attachment = optionsframework_upload.state().get('selection').first();
-                               optionsframework_upload.close();
-                               optionsframework_selector.find('.upload').val(attachment.attributes.url);
-                               if ( attachment.attributes.type == 'image' ) {
-                                       optionsframework_selector.find('.screenshot').empty().hide().append('<img src="' + attachment.attributes.url + '"><a class="remove-image">Remove</a>').slideDown('fast');
-                               }
-                               optionsframework_selector.find('.upload-button').unbind().addClass('remove-file').removeClass('upload-button').val(optionsframework_l10n.remove);
-                               optionsframework_selector.find('.of-background-properties').slideDown();
-                               optionsframework_selector.find('.remove-image, .remove-file').on('click', function() {
-                                       optionsframework_remove_file( $(this).parents('.sub-option') );
-                               });
-                       });
-
-               }
-
-               // Finally, open the modal.
-               optionsframework_upload.open();
-       }
-
-       function optionsframework_remove_file(selector) {
-               selector.find('.remove-image').hide();
-               selector.find('.upload').val('');
-               selector.find('.of-background-properties').hide();
-               selector.find('.screenshot').slideUp();
-               selector.find('.remove-file').unbind().addClass('upload-button').removeClass('remove-file').val(optionsframework_l10n.upload);
-               // We don't display the upload button if .upload-notice is present
-               // This means the user doesn't have the WordPress 3.5 Media Library Support
-               if ( $('.section-upload .upload-notice').length > 0 ) {
-                       $('.upload-button').remove();
-               }
-               selector.find('.upload-button').on('click', function(event) {
-                       optionsframework_add_file(event, $(this).parents('.sub-option'));
-               });
-       }
-
-       $(document).on('click', '.remove-image, .remove-file' , function() {
-               optionsframework_remove_file( $(this).parents('.sub-option') );
-    });
-
-    $(document).on('click','.upload-button', function( event ) {
-       optionsframework_add_file(event, $(this).parents('.sub-option'));
-    });
-
-});
\ No newline at end of file
diff --git a/inc/options-framework/js/options-custom.js b/inc/options-framework/js/options-custom.js
deleted file mode 100644 (file)
index f2f7f4d..0000000
+++ /dev/null
@@ -1,113 +0,0 @@
-/**
- * Custom scripts needed for the colorpicker, image button selectors,
- * and navigation tabs.
- */
-
-jQuery(document).ready(function($) {
-
-       // Loads the color pickers
-       $('.of-color').wpColorPicker();
-
-       // Image Options
-       $('.of-radio-img-img').click(function(){
-               $(this).parent().parent().find('.of-radio-img-img').removeClass('of-radio-img-selected');
-               $(this).addClass('of-radio-img-selected');
-       });
-
-       $('.of-radio-img-label').hide();
-       $('.of-radio-img-img').show();
-       $('.of-radio-img-radio').hide();
-
-       // Loads tabbed sections if they exist
-       if ( $('.nav-tab-wrapper').length > 0 ) {
-               options_framework_tabs();
-       }
-
-       function options_framework_tabs() {
-
-               var $group = $('.group'),
-                       $navtabs = $('.nav-tab-wrapper a'),
-                       active_tab = '';
-
-               // Hides all the .group sections to start
-               $group.hide();
-
-               // If active tab is saved and exists, load it's .group
-               if ( active_tab != '' && $(active_tab).length ) {
-                       $(active_tab).fadeIn();
-                       $(active_tab + '-tab').addClass('nav-tab-active');
-               } else {
-                       $('.group:first').fadeIn();
-                       $('.nav-tab-wrapper a:first').addClass('nav-tab-active');
-               }
-
-               // Bind tabs clicks
-               $navtabs.click(function(e) {
-
-                       e.preventDefault();
-
-                       // Remove active class from all tabs
-                       $navtabs.removeClass('nav-tab-active');
-
-                       $(this).addClass('nav-tab-active').blur();
-
-                       var selected = $(this).attr('href');
-
-                       $group.hide();
-                       $(selected).fadeIn();
-
-               });
-       }
-
-       $('#enable_parallax').click(function() {
-               $('#section-sticky_header').fadeToggle(400);
-       });
-
-       if ($('#enable_parallax:checked').val() == undefined) {
-               $('#section-sticky_header').show();
-       }
-
-       $( "#section-parallax_section .controls" ).sortable({
-               axis: "y"
-       });
-       $( "#sub-option-inner" ).disableSelection();
-
-       $(document).on('click', '.section-toggle', function(){
-               $(this).parent('.title').next('.sub-option-inner').slideToggle();
-       });
-
-       $('.parallax_section_page').on('change',function(){
-               var sled = $(this).find("option:selected").text();
-               $(this).parents('.sub-option').find('.title span').text(sled);
-       }).change();
-
-       $(document).on('click','.remove-parallax', function(){
-               var $this = $(this);
-               $this.parents('.sub-option').slideUp(800);
-               setTimeout( function() {
-       $this.parents('.sub-option').remove();
-               },750 );
-       });
-
-       $('#section-parallax_section .of-section-layout').each(function() {
-        var IntlayoutValue = $(this).val();
-        if (IntlayoutValue == 'service_template' || IntlayoutValue == 'team_template' || IntlayoutValue == 'testimonial_template' || IntlayoutValue == 'blog_template' || IntlayoutValue == 'portfolio_template') {
-            $(this).parents('.sub-option-inner').find('.toggle-category').show();
-        } else {
-            $(this).parents('.sub-option-inner').find('.toggle-category').hide();
-        }
-    });
-
-    $(document).on('change', '.of-section-layout', function() {
-        var layoutValue = $(this).val();
-        if (layoutValue == 'service_template' || layoutValue == 'team_template' || layoutValue == 'testimonial_template' || layoutValue == 'blog_template' || layoutValue == 'portfolio_template') {
-            $(this).parents('.sub-option-inner').find('.toggle-category').fadeIn();
-        } else {
-            $(this).parents('.sub-option-inner').find('.toggle-category').fadeOut();
-        }
-    });
-
-       $('.pro-feature-title').click(function(){
-        $('.feature-img').slideToggle();
-    });
-});
\ No newline at end of file
diff --git a/inc/options-framework/options-framework.php b/inc/options-framework/options-framework.php
deleted file mode 100644 (file)
index f62c76f..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-<?php
-
-// Don't load if optionsframework_init is already defined
-if (is_admin() && ! function_exists( 'optionsframework_init' ) ) :
-
-function optionsframework_init() {
-
-       //  If user can't edit theme options, exit
-       if ( ! current_user_can( 'edit_theme_options' ) )
-               return;
-
-       // Loads the required Options Framework classes.
-       require get_template_directory() . '/inc/options-framework/includes/class-options-framework.php';
-       require get_template_directory() . '/inc/options-framework/includes/class-options-framework-admin.php';
-       require get_template_directory() . '/inc/options-framework/includes/class-options-interface.php';
-       require get_template_directory() . '/inc/options-framework/includes/class-options-media-uploader.php';
-       require get_template_directory() . '/inc/options-framework/includes/class-options-sanitization.php';
-
-
-       // Instantiate the options page.
-       $options_framework_admin = new Options_Framework_Admin;
-       $options_framework_admin->init();
-
-       // Instantiate the media uploader class
-       $options_framework_media_uploader = new Options_Framework_Media_Uploader;
-       $options_framework_media_uploader->init();
-
-}
-
-add_action( 'init', 'optionsframework_init', 20 );
-
-endif;
-
-
-/**
- * A unique identifier is defined to store the options in the database and reference them from the theme.
- * By default it uses the theme name, in lowercase and without spaces, but this can be changed if needed.
- * If the identifier changes, it'll appear as if the options have been reset.
- */
-
-function optionsframework_option_name() {
-       return 'accesspress_parallax';
-}
-
-
-/**
- * Helper function to return the theme option value.
- * If no value has been saved, it returns $default.
- * Needed because options are saved as serialized strings.
- *
- * Not in a class to support backwards compatibility in themes.
- */
-
-if ( ! function_exists( 'of_get_option' ) ) :
-
-function of_get_option( $name, $default = false ) {
-       $option_name = '';
-
-       // Gets option name as defined in the theme
-       if ( function_exists( 'optionsframework_option_name' ) ) {
-               $option_name = optionsframework_option_name();
-       }
-
-       // Fallback option name
-       if ( '' == $option_name ) {
-               $option_name = get_option( 'stylesheet' );
-               $option_name = preg_replace( "/\W/", "_", strtolower( $option_name ) );
-       }
-
-       // Get option settings from database
-       $options = get_option( $option_name );
-
-       if ( isset( $options[$name] ) ) {
-               return $options[$name];
-       }
-
-       return $default;
-}
-
-endif;
\ No newline at end of file
diff --git a/inc/template-tags.php b/inc/template-tags.php
deleted file mode 100644 (file)
index 3c99702..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-<?php
-/**
- * Custom template tags for this theme.
- *
- * Eventually, some of the functionality here could be replaced by core features.
- *
- * @package accesspress_parallax
- */
-
-if ( ! function_exists( 'accesspress_parallax_posted_on' ) ) :
-/**
- * Prints HTML with meta information for the current post-date/time and author.
- */
-function accesspress_parallax_posted_on() {
-       $time_string = '<time class="entry-date published" datetime="%1$s"><span class="posted-day">%2$s</span><span class="posted-month">%3$s</span></time>';
-       if ( get_the_time( 'U' ) !== get_the_modified_time( 'U' ) ) {
-               $time_string .= '<time class="updated" datetime="%4$s">%5$s</time>';
-       }
-
-       $time_string = sprintf( $time_string,
-               esc_attr( get_the_date( 'c' ) ),
-               esc_html( get_the_date( 'd' ) ),
-               esc_html( get_the_date( 'M' ) ),
-               esc_attr( get_the_modified_date( 'c' ) ),
-               esc_html( get_the_modified_date() )
-       );
-
-       $posted_on = $time_string ;
-
-       $byline = sprintf(
-               _x( 'By %s', 'post author', 'accesspress-parallax' ),
-               '<span class="author vcard"><a class="url fn n" href="' . esc_url( get_author_posts_url( get_the_author_meta( 'ID' ) ) ) . '">' . esc_html( get_the_author() ) . '</a></span>'
-       );
-
-       $post_date = of_get_option('post_date');
-       $post_author = of_get_option('post_author');
-       if($post_date ==  1 || empty($post_date)) :
-       echo '<span class="posted-on">' . $posted_on . '</span>';
-       endif;
-
-       if($post_author ==  1 || empty($post_author)) :
-       echo '<span class="byline"> ' . $byline . '</span>';
-       endif;
-
-}
-endif;
-
-/**
- * Returns true if a blog has more than 1 category.
- *
- * @return bool
- */
-function accesspress_parallax_categorized_blog() {
-       if ( false === ( $all_the_cool_cats = get_transient( 'accesspress_parallax_categories' ) ) ) {
-               // Create an array of all the categories that are attached to posts.
-               $all_the_cool_cats = get_categories( array(
-                       'fields'     => 'ids',
-                       'hide_empty' => 1,
-
-                       // We only need to know if there is more than one category.
-                       'number'     => 2,
-               ) );
-
-               // Count the number of categories that are attached to the posts.
-               $all_the_cool_cats = count( $all_the_cool_cats );
-
-               set_transient( 'accesspress_parallax_categories', $all_the_cool_cats );
-       }
-
-       if ( $all_the_cool_cats > 1 ) {
-               // This blog has more than 1 category so accesspress_parallax_categorized_blog should return true.
-               return true;
-       } else {
-               // This blog has only 1 category so accesspress_parallax_categorized_blog should return false.
-               return false;
-       }
-}
-
-/**
- * Flush out the transients used in accesspress_parallax_categorized_blog.
- */
-function accesspress_parallax_category_transient_flusher() {
-       // Like, beat it. Dig?
-       delete_transient( 'accesspress_parallax_categories' );
-}
-add_action( 'edit_category', 'accesspress_parallax_category_transient_flusher' );
-add_action( 'save_post',     'accesspress_parallax_category_transient_flusher' );
diff --git a/index-parallax.php b/index-parallax.php
deleted file mode 100644 (file)
index 0f155a8..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-<?php
-/**
- * The main template file.
- *
- * This is the most generic template file in a WordPress theme
- * and one of the two required files for a theme (the other being style.css).
- * It is used to display a page when nothing more specific matches a query.
- * E.g., it puts together the home page when no home.php file exists.
- * Learn more: http://codex.wordpress.org/Template_Hierarchy
- *
- * @package accesspress_parallax
- */
-
-    $sections = of_get_option('parallax_section'); ?>
-    
-    
-    <?php if(!empty($sections)):
-    $count = 0;
-       foreach ($sections as $section) :
-               $page = get_post( $section['page'] ); 
-               $overlay = $section['overlay'];
-               $image = $section['image'];
-               $layout = $section['layout'];
-               $category = $section['category']; 
-               $googlemapclass = $layout == "googlemap_template" ? " google-map" : "";
-       ?>
-
-    <?php if(!empty($section['page'])): ?>
-               <section class="parallax-section clearfix<?php echo esc_attr($googlemapclass)." ".esc_attr($layout);  ?>" id="<?php echo "section-".absint($page->ID); ?>">
-               <?php if(!empty($image) && $overlay != "overlay0") : ?>
-                       <div class="overlay"></div>
-               <?php endif; ?>
-
-               <?php if($layout != "googlemap_template") :?>
-                       <div class="mid-content">
-               <?php endif; ?>
-                       <?php  
-                   $query = new WP_Query( 'page_id='.$section['page'] );
-                   while ( $query->have_posts() ) : $query->the_post();
-               ?>
-                <?php 
-                
-                if($layout != "action_template" && $layout != "blank_template" && $layout != "googlemap_template"): ?>
-                    
-                                       <h2><span><?php the_title(); ?></span></h2>
-
-                                       <div class="parallax-content">
-                                       <?php if(get_the_content() != "") : ?>
-                                               <div class="page-content">
-                                               <?php the_content(); ?>
-                                               </div>
-                                       <?php endif; ?>
-                                       </div> 
-                               <?php endif; ?>
-            <?php 
-            $count++;
-                       endwhile;    
-               ?>
-
-                                       <?php 
-                                               switch ($layout) {
-                                                       case 'default_template':
-                                                               $template = "layouts/default";
-                                                               break;
-
-                                                       case 'service_template':
-                                                               $template = "layouts/service";
-                                                               break;
-
-                                                       case 'team_template':
-                                                               $template = "layouts/team";
-                                                               break;
-
-                                                       case 'portfolio_template':
-                                                               $template = "layouts/portfolio";
-                                                               break;
-
-                                                       case 'testimonial_template':
-                                                               $template = "layouts/testimonial";
-                                                               break;
-
-                                                       case 'action_template':
-                                                               $template = "layouts/action";
-                                                               break;
-
-                                                       case 'blank_template':
-                                                               $template = "layouts/blank";
-                                                               break;
-
-                                                       case 'googlemap_template':
-                                                               $template = "layouts/googlemap";
-                                                               break;
-
-                                                       case 'blog_template':
-                                                               $template = "layouts/blog";
-                                                               break;
-                                                       
-                                                       default:
-                                                               $template = "layouts/default";
-                                                               break;
-                                               }
-                                       ?>
-
-                                       <?php include(locate_template($template."-section.php"));?>
-                       
-                       <?php if($layout != "googlemap_template") :?>
-                       </div>
-            <?php endif; ?>
-            <?php if($count === 1){ ?>
-
-            <?php } ?>
-               </section>
-       <?php
-    endif; 
-    $count++;
-       endforeach;
-       else:
-        get_template_part('demo');
-       endif;
\ No newline at end of file
index 5f6c7dd..ef565ea 100644 (file)
--- a/index.php
+++ b/index.php
@@ -1,51 +1,51 @@
-<?php
-/**
- * The main template file.
- *
- * This is the most generic template file in a WordPress theme
- * and one of the two required files for a theme (the other being style.css).
- * It is used to display a page when nothing more specific matches a query.
- * E.g., it puts together the home page when no home.php file exists.
- * Learn more: http://codex.wordpress.org/Template_Hierarchy
- *
- * @package accesspress_parallax
- */
-
-get_header(); ?>
-<?php if(of_get_option('enable_parallax') == 1 || of_get_option('enable_parallax') == NUll): 
-       get_template_part('index','parallax');
-else: 
-?>
-<div class="mid-content">
-       <div id="primary" class="content-area">
-               <main id="main" class="site-main">
-
-               <?php if ( have_posts() ) : ?>
-
-                       <?php /* Start the Loop */ ?>
-                       <?php while ( have_posts() ) : the_post(); ?>
-
-                               <?php
-                                       get_template_part( 'content' );
-                               ?>
-
-                       <?php endwhile; ?>
-
-                       <?php the_posts_pagination(); ?>
-
-               <?php else : ?>
-
-                       <?php get_template_part( 'content', 'none' ); ?>
-
-               <?php endif; ?>
-
-               </main><!-- #main -->
-       </div><!-- #primary -->
-       
-<?php 
-get_sidebar(); ?>
-</div>
-
-<?php
-endif;
-get_footer();
\ No newline at end of file
+<!doctype html>
+<html class="no-js" lang="en">
+    <?php get_template_part("parts/header-meta"); ?>
+    <?php $index_template = true;?>
+    <body>
+        <div class="off-canvas-wrap" data-offcanvas>
+            <div class="inner-wrap">
+                <div id="page-wrapper">
+                    <?php
+                    include "sections/header.php";
+                    include "sections/top-bar.php";
+                    include "sections/off-canvas.php";
+                    if (is_front_page()) {
+                        include "sections/front-page.php";
+                    }
+                    if (is_home()) {
+                        include "sections/blog-home.php";
+                    }
+                    if (is_archive()) {
+                        include "sections/blog-archive.php";
+                    }
+                    if (is_single()) {
+                        include "sections/blog-single.php";
+                    }
+                    if (is_search()) {
+                        include "sections/search.php";
+                    }
+                    if (is_page() && !is_front_page()) {
+                        $template = get_page_template_slug( $post->ID );
+                        if ( $template == 'landingpage-template.php' ) {
+                            include "sections/landing-page.php";
+                        } else {
+                            include "sections/interior-page.php";
+                        }
+                    }
+                    include "sections/footer.php";
+//                    include "sections/copyright.php";
+                    ?>
+                    </div><!--/#page-wrapper-->
+            <a class="exit-off-canvas"></a>
+            </div><!--End of inner-wrap-->
+        </div><!--End of off-canvas-->
+        <?php wp_footer();?>
+        <script charset="utf-8" type="text/javascript">var switchTo5x=true;</script>
+        <script charset="utf-8" type="text/javascript" src="//ws.sharethis.com/button/buttons.js"></script>
+        <script charset="utf-8" type="text/javascript">stLight.options({"publisher":"wp.c3d3647e-de70-4780-b71d-6b739fad685a"});var st_type="wordpress4.3.1";</script>
+    <?php if ( in_array( $post->ID, array( 221, 228, 465 ) ) ) : ?>
+        <script src="<?php echo get_stylesheet_directory_uri() ; ?>/assets/smartbanner/smartbanner.js"></script>
+    <?php endif; ?>
+    </body>
+</html>
diff --git a/js/SmoothScroll.js b/js/SmoothScroll.js
deleted file mode 100644 (file)
index 1fc8409..0000000
+++ /dev/null
@@ -1,535 +0,0 @@
-// SmoothScroll for websites v1.2.1
-// Licensed under the terms of the MIT license.
-
-// People involved
-//  - Balazs Galambosi (maintainer)  
-//  - Michael Herf     (Pulse Algorithm)
-
-(function(){
-  
-// Scroll Variables (tweakable)
-var defaultOptions = {
-
-    // Scrolling Core
-    frameRate        : 150, // [Hz]
-    animationTime    : 400, // [px]
-    stepSize         : 120, // [px]
-
-    // Pulse (less tweakable)
-    // ratio of "tail" to "acceleration"
-    pulseAlgorithm   : true,
-    pulseScale       : 8,
-    pulseNormalize   : 1,
-
-    // Acceleration
-    accelerationDelta : 20,  // 20
-    accelerationMax   : 1,   // 1
-
-    // Keyboard Settings
-    keyboardSupport   : true,  // option
-    arrowScroll       : 50,     // [px]
-
-    // Other
-    touchpadSupport   : true,
-    fixedBackground   : true, 
-    excluded          : ""    
-};
-
-var options = defaultOptions;
-
-
-// Other Variables
-var isExcluded = false;
-var isFrame = false;
-var direction = { x: 0, y: 0 };
-var initDone  = false;
-var root = document.documentElement;
-var activeElement;
-var observer;
-var deltaBuffer = [ 120, 120, 120 ];
-
-var key = { left: 37, up: 38, right: 39, down: 40, spacebar: 32, 
-            pageup: 33, pagedown: 34, end: 35, home: 36 };
-
-
-/***********************************************
- * SETTINGS
- ***********************************************/
-
-var options = defaultOptions;
-
-
-/***********************************************
- * INITIALIZE
- ***********************************************/
-
-/**
- * Tests if smooth scrolling is allowed. Shuts down everything if not.
- */
-function initTest() {
-
-    var disableKeyboard = false; 
-    
-    // disable keyboard support if anything above requested it
-    if (disableKeyboard) {
-        removeEvent("keydown", keydown);
-    }
-
-    if (options.keyboardSupport && !disableKeyboard) {
-        addEvent("keydown", keydown);
-    }
-}
-
-/**
- * Sets up scrolls array, determines if frames are involved.
- */
-function init() {
-  
-    if (!document.body) return;
-
-    var body = document.body;
-    var html = document.documentElement;
-    var windowHeight = window.innerHeight; 
-    var scrollHeight = body.scrollHeight;
-    
-    // check compat mode for root element
-    root = (document.compatMode.indexOf('CSS') >= 0) ? html : body;
-    activeElement = body;
-    
-    initTest();
-    initDone = true;
-
-    // Checks if this script is running in a frame
-    if (top != self) {
-        isFrame = true;
-    }
-
-    /**
-     * This fixes a bug where the areas left and right to 
-     * the content does not trigger the onmousewheel event
-     * on some pages. e.g.: html, body { height: 100% }
-     */
-    else if (scrollHeight > windowHeight &&
-            (body.offsetHeight <= windowHeight || 
-             html.offsetHeight <= windowHeight)) {
-
-        // DOMChange (throttle): fix height
-        var pending = false;
-        var refresh = function () {
-            if (!pending && html.scrollHeight != document.height) {
-                pending = true; // add a new pending action
-                setTimeout(function () {
-                    html.style.height = document.height + 'px';
-                    pending = false;
-                }, 500); // act rarely to stay fast
-            }
-        };
-        html.style.height = 'auto';
-        setTimeout(refresh, 10);
-
-        // clearfix
-        if (root.offsetHeight <= windowHeight) {
-            var underlay = document.createElement("div");      
-            underlay.style.clear = "both";
-            body.appendChild(underlay);
-        }
-    }
-
-    // disable fixed background
-    if (!options.fixedBackground && !isExcluded) {
-        body.style.backgroundAttachment = "scroll";
-        html.style.backgroundAttachment = "scroll";
-    }
-}
-
-
-/************************************************
- * SCROLLING 
- ************************************************/
-var que = [];
-var pending = false;
-var lastScroll = +new Date;
-
-/**
- * Pushes scroll actions to the scrolling queue.
- */
-function scrollArray(elem, left, top, delay) {
-    
-    delay || (delay = 1000);
-    directionCheck(left, top);
-
-    if (options.accelerationMax != 1) {
-        var now = +new Date;
-        var elapsed = now - lastScroll;
-        if (elapsed < options.accelerationDelta) {
-            var factor = (1 + (30 / elapsed)) / 2;
-            if (factor > 1) {
-                factor = Math.min(factor, options.accelerationMax);
-                left *= factor;
-                top  *= factor;
-            }
-        }
-        lastScroll = +new Date;
-    }          
-    
-    // push a scroll command
-    que.push({
-        x: left, 
-        y: top, 
-        lastX: (left < 0) ? 0.99 : -0.99,
-        lastY: (top  < 0) ? 0.99 : -0.99, 
-        start: +new Date
-    });
-        
-    // don't act if there's a pending queue
-    if (pending) {
-        return;
-    }  
-
-    var scrollWindow = (elem === document.body);
-    
-    var step = function (time) {
-        
-        var now = +new Date;
-        var scrollX = 0;
-        var scrollY = 0; 
-    
-        for (var i = 0; i < que.length; i++) {
-            
-            var item = que[i];
-            var elapsed  = now - item.start;
-            var finished = (elapsed >= options.animationTime);
-            
-            // scroll position: [0, 1]
-            var position = (finished) ? 1 : elapsed / options.animationTime;
-            
-            // easing [optional]
-            if (options.pulseAlgorithm) {
-                position = pulse(position);
-            }
-            
-            // only need the difference
-            var x = (item.x * position - item.lastX) >> 0;
-            var y = (item.y * position - item.lastY) >> 0;
-            
-            // add this to the total scrolling
-            scrollX += x;
-            scrollY += y;            
-            
-            // update last values
-            item.lastX += x;
-            item.lastY += y;
-        
-            // delete and step back if it's over
-            if (finished) {
-                que.splice(i, 1); i--;
-            }           
-        }
-
-        // scroll left and top
-        if (scrollWindow) {
-            window.scrollBy(scrollX, scrollY);
-        } 
-        else {
-            if (scrollX) elem.scrollLeft += scrollX;
-            if (scrollY) elem.scrollTop  += scrollY;                    
-        }
-        
-        // clean up if there's nothing left to do
-        if (!left && !top) {
-            que = [];
-        }
-        
-        if (que.length) { 
-            requestFrame(step, elem, (delay / options.frameRate + 1)); 
-        } else { 
-            pending = false;
-        }
-    };
-    
-    // start a new queue of actions
-    requestFrame(step, elem, 0);
-    pending = true;
-}
-
-
-/***********************************************
- * EVENTS
- ***********************************************/
-
-/**
- * Mouse wheel handler.
- * @param {Object} event
- */
-function wheel(event) {
-
-    if (!initDone) {
-        init();
-    }
-    
-    var target = event.target;
-    var overflowing = overflowingAncestor(target);
-    
-    // use default if there's no overflowing
-    // element or default action is prevented    
-    if (!overflowing || event.defaultPrevented ||
-        isNodeName(activeElement, "embed") ||
-       (isNodeName(target, "embed") && /\.pdf/i.test(target.src))) {
-        return true;
-    }
-
-    var deltaX = event.wheelDeltaX || 0;
-    var deltaY = event.wheelDeltaY || 0;
-    
-    // use wheelDelta if deltaX/Y is not available
-    if (!deltaX && !deltaY) {
-        deltaY = event.wheelDelta || 0;
-    }
-
-    // check if it's a touchpad scroll that should be ignored
-    if (!options.touchpadSupport && isTouchpad(deltaY)) {
-        return true;
-    }
-
-    // scale by step size
-    // delta is 120 most of the time
-    // synaptics seems to send 1 sometimes
-    if (Math.abs(deltaX) > 1.2) {
-        deltaX *= options.stepSize / 120;
-    }
-    if (Math.abs(deltaY) > 1.2) {
-        deltaY *= options.stepSize / 120;
-    }
-    
-    scrollArray(overflowing, -deltaX, -deltaY);
-    event.preventDefault();
-}
-
-/**
- * Keydown event handler.
- * @param {Object} event
- */
-function keydown(event) {
-
-    var target   = event.target;
-    var modifier = event.ctrlKey || event.altKey || event.metaKey || 
-                  (event.shiftKey && event.keyCode !== key.spacebar);
-    
-    // do nothing if user is editing text
-    // or using a modifier key (except shift)
-    // or in a dropdown
-    if ( /input|textarea|select|embed/i.test(target.nodeName) ||
-         target.isContentEditable || 
-         event.defaultPrevented   ||
-         modifier ) {
-      return true;
-    }
-    // spacebar should trigger button press
-    if (isNodeName(target, "button") &&
-        event.keyCode === key.spacebar) {
-      return true;
-    }
-    
-    var shift, x = 0, y = 0;
-    var elem = overflowingAncestor(activeElement);
-    var clientHeight = elem.clientHeight;
-
-    if (elem == document.body) {
-        clientHeight = window.innerHeight;
-    }
-
-    switch (event.keyCode) {
-        case key.up:
-            y = -options.arrowScroll;
-            break;
-        case key.down:
-            y = options.arrowScroll;
-            break;         
-        case key.spacebar: // (+ shift)
-            shift = event.shiftKey ? 1 : -1;
-            y = -shift * clientHeight * 0.9;
-            break;
-        case key.pageup:
-            y = -clientHeight * 0.9;
-            break;
-        case key.pagedown:
-            y = clientHeight * 0.9;
-            break;
-        case key.home:
-            y = -elem.scrollTop;
-            break;
-        case key.end:
-            var damt = elem.scrollHeight - elem.scrollTop - clientHeight;
-            y = (damt > 0) ? damt+10 : 0;
-            break;
-        case key.left:
-            x = -options.arrowScroll;
-            break;
-        case key.right:
-            x = options.arrowScroll;
-            break;            
-        default:
-            return true; // a key we don't care about
-    }
-
-    scrollArray(elem, x, y);
-    event.preventDefault();
-}
-
-/**
- * Mousedown event only for updating activeElement
- */
-function mousedown(event) {
-    activeElement = event.target;
-}
-
-
-/***********************************************
- * OVERFLOW
- ***********************************************/
-var cache = {}; // cleared out every once in while
-setInterval(function () { cache = {}; }, 10 * 1000);
-
-var uniqueID = (function () {
-    var i = 0;
-    return function (el) {
-        return el.uniqueID || (el.uniqueID = i++);
-    };
-})();
-
-function setCache(elems, overflowing) {
-    for (var i = elems.length; i--;)
-        cache[uniqueID(elems[i])] = overflowing;
-    return overflowing;
-}
-
-function overflowingAncestor(el) {
-    var elems = [];
-    var rootScrollHeight = root.scrollHeight;
-    do {
-        var cached = cache[uniqueID(el)];
-        if (cached) {
-            return setCache(elems, cached);
-        }
-        elems.push(el);
-        if (rootScrollHeight === el.scrollHeight) {
-            if (!isFrame || root.clientHeight + 10 < rootScrollHeight) {
-                return setCache(elems, document.body); // scrolling root in WebKit
-            }
-        } else if (el.clientHeight + 10 < el.scrollHeight) {
-            overflow = getComputedStyle(el, "").getPropertyValue("overflow-y");
-            if (overflow === "scroll" || overflow === "auto") {
-                return setCache(elems, el);
-            }
-        }
-    } while (el = el.parentNode);
-}
-
-
-/***********************************************
- * HELPERS
- ***********************************************/
-
-function addEvent(type, fn, bubble) {
-    window.addEventListener(type, fn, (bubble||false));
-}
-
-function removeEvent(type, fn, bubble) {
-    window.removeEventListener(type, fn, (bubble||false));  
-}
-
-function isNodeName(el, tag) {
-    return (el.nodeName||"").toLowerCase() === tag.toLowerCase();
-}
-
-function directionCheck(x, y) {
-    x = (x > 0) ? 1 : -1;
-    y = (y > 0) ? 1 : -1;
-    if (direction.x !== x || direction.y !== y) {
-        direction.x = x;
-        direction.y = y;
-        que = [];
-        lastScroll = 0;
-    }
-}
-
-var deltaBufferTimer;
-
-function isTouchpad(deltaY) {
-    if (!deltaY) return;
-    deltaY = Math.abs(deltaY)
-    deltaBuffer.push(deltaY);
-    deltaBuffer.shift();
-    clearTimeout(deltaBufferTimer);
-    var allDivisable = (isDivisible(deltaBuffer[0], 120) &&
-                        isDivisible(deltaBuffer[1], 120) &&
-                        isDivisible(deltaBuffer[2], 120));
-    return !allDivisable;
-} 
-
-function isDivisible(n, divisor) {
-    return (Math.floor(n / divisor) == n / divisor);
-}
-
-var requestFrame = (function () {
-      return  window.requestAnimationFrame       || 
-              window.webkitRequestAnimationFrame || 
-              function (callback, element, delay) {
-                  window.setTimeout(callback, delay || (1000/60));
-              };
-})();
-
-
-/***********************************************
- * PULSE
- ***********************************************/
-/**
- * Viscous fluid with a pulse for part and decay for the rest.
- * - Applies a fixed force over an interval (a damped acceleration), and
- * - Lets the exponential bleed away the velocity over a longer interval
- * - Michael Herf, http://stereopsis.com/stopping/
- */
-function pulse_(x) {
-    var val, start, expx;
-    // test
-    x = x * options.pulseScale;
-    if (x < 1) { // acceleartion
-        val = x - (1 - Math.exp(-x));
-    } else {     // tail
-        // the previous animation ended here:
-        start = Math.exp(-1);
-        // simple viscous drag
-        x -= 1;
-        expx = 1 - Math.exp(-x);
-        val = start + (expx * (1 - start));
-    }
-    return val * options.pulseNormalize;
-}
-
-function pulse(x) {
-    if (x >= 1) return 1;
-    if (x <= 0) return 0;
-
-    if (options.pulseNormalize == 1) {
-        options.pulseNormalize /= pulse_(1);
-    }
-    return pulse_(x);
-}
-
-var isChrome = /chrome/i.test(window.navigator.userAgent);
-var wheelEvent = null;
-if ("onwheel" in document.createElement("div"))
-       wheelEvent = "wheel";
-else if ("onmousewheel" in document.createElement("div"))
-       wheelEvent = "mousewheel";
-
-if (wheelEvent && isChrome) {
-       addEvent(wheelEvent, wheel);
-       addEvent("mousedown", mousedown);
-       addEvent("load", init);
-}
-
-})();
\ No newline at end of file
diff --git a/js/app.js b/js/app.js
new file mode 100644 (file)
index 0000000..a49c6f0
--- /dev/null
+++ b/js/app.js
@@ -0,0 +1,116 @@
+/*
+ * To avoid conflicts, Wordpress tends to prefer jQuery being used over $.
+ * As long as this file is included, no such conflicts should arise. Ensure it
+ * is called before other .js files using $.
+ */
+var $=jQuery.noConflict();;!function(a,b,c,d){"use strict";function e(a){return("string"==typeof a||a instanceof String)&&(a=a.replace(/^['\\/"]+|(;\s?})+|['\\/"]+$/g,"")),a}function f(a){this.selector=a,this.query=""}var g=function(b){var c=a("head");c.prepend(a.map(b,function(a){return 0===c.has("."+a).length?'<meta class="'+a+'" />':void 0}))};g(["foundation-mq-small","foundation-mq-small-only","foundation-mq-medium","foundation-mq-medium-only","foundation-mq-large","foundation-mq-large-only","foundation-mq-xlarge","foundation-mq-xlarge-only","foundation-mq-xxlarge","foundation-data-attribute-namespace"]),a(function(){"undefined"!=typeof FastClick&&"undefined"!=typeof c.body&&FastClick.attach(c.body)});var h=function(b,d){if("string"==typeof b){if(d){var e;if(d.jquery){if(e=d[0],!e)return d}else e=d;return a(e.querySelectorAll(b))}return a(c.querySelectorAll(b))}return a(b,d)},i=function(a){var b=[];return a||b.push("data"),this.namespace.length>0&&b.push(this.namespace),b.push(this.name),b.join("-")},j=function(a){for(var b=a.split("-"),c=b.length,d=[];c--;)0!==c?d.push(b[c]):this.namespace.length>0?d.push(this.namespace,b[c]):d.push(b[c]);return d.reverse().join("-")},k=function(b,c){var d=this,e=function(){var e=h(this),f=!e.data(d.attr_name(!0)+"-init");e.data(d.attr_name(!0)+"-init",a.extend({},d.settings,c||b,d.data_options(e))),f&&d.events(this)};return h(this.scope).is("["+this.attr_name()+"]")?e.call(this.scope):h("["+this.attr_name()+"]",this.scope).each(e),"string"==typeof b?this[b].call(this,c):void 0},l=function(a,b){function c(){b(a[0])}function d(){if(this.one("load",c),/MSIE (\d+\.\d+);/.test(navigator.userAgent)){var a=this.attr("src"),b=a.match(/\?/)?"&":"?";b+="random="+(new Date).getTime(),this.attr("src",a+b)}}return a.attr("src")?void(a[0].complete||4===a[0].readyState?c():d.call(a)):void c()};/*! matchMedia() polyfill - Test a CSS media type/query in JS. Authors & copyright (c) 2012: Scott Jehl, Paul Irish, Nicholas Zakas, David Knight. Dual MIT/BSD license */
+b.matchMedia||(b.matchMedia=function(){var a=b.styleMedia||b.media;if(!a){var d=c.createElement("style"),e=c.getElementsByTagName("script")[0],f=null;d.type="text/css",d.id="matchmediajs-test",e.parentNode.insertBefore(d,e),f="getComputedStyle"in b&&b.getComputedStyle(d,null)||d.currentStyle,a={matchMedium:function(a){var b="@media "+a+"{ #matchmediajs-test { width: 1px; } }";return d.styleSheet?d.styleSheet.cssText=b:d.textContent=b,"1px"===f.width}}}return function(b){return{matches:a.matchMedium(b||"all"),media:b||"all"}}}()),function(a){function c(){d&&(g(c),i&&a.fx.tick())}for(var d,e=0,f=["webkit","moz"],g=b.requestAnimationFrame,h=b.cancelAnimationFrame,i="undefined"!=typeof a.fx;e<f.length&&!g;e++)g=b[f[e]+"RequestAnimationFrame"],h=h||b[f[e]+"CancelAnimationFrame"]||b[f[e]+"CancelRequestAnimationFrame"];g?(b.requestAnimationFrame=g,b.cancelAnimationFrame=h,i&&(a.fx.timer=function(b){b()&&a.timers.push(b)&&!d&&(d=!0,c())},a.fx.stop=function(){d=!1})):(b.requestAnimationFrame=function(a){var c=(new Date).getTime(),d=Math.max(0,16-(c-e)),f=b.setTimeout(function(){a(c+d)},d);return e=c+d,f},b.cancelAnimationFrame=function(a){clearTimeout(a)})}(a),f.prototype.toString=function(){return this.query||(this.query=h(this.selector).css("font-family").replace(/^[\/\\'"]+|(;\s?})+|[\/\\'"]+$/g,""))},b.Foundation={name:"Foundation",version:"5.5.3",media_queries:{small:new f(".foundation-mq-small"),"small-only":new f(".foundation-mq-small-only"),medium:new f(".foundation-mq-medium"),"medium-only":new f(".foundation-mq-medium-only"),large:new f(".foundation-mq-large"),"large-only":new f(".foundation-mq-large-only"),xlarge:new f(".foundation-mq-xlarge"),"xlarge-only":new f(".foundation-mq-xlarge-only"),xxlarge:new f(".foundation-mq-xxlarge")},stylesheet:a("<style></style>").appendTo("head")[0].sheet,global:{namespace:d},init:function(a,c,d,e,f){var g=[a,d,e,f],i=[];if(this.rtl=/rtl/i.test(h("html").attr("dir")),this.scope=a||this.scope,this.set_namespace(),c&&"string"==typeof c&&!/reflow/i.test(c))this.libs.hasOwnProperty(c)&&i.push(this.init_lib(c,g));else for(var j in this.libs)i.push(this.init_lib(j,c));return h(b).load(function(){h(b).trigger("resize.fndtn.clearing").trigger("resize.fndtn.dropdown").trigger("resize.fndtn.equalizer").trigger("resize.fndtn.interchange").trigger("resize.fndtn.joyride").trigger("resize.fndtn.magellan").trigger("resize.fndtn.topbar").trigger("resize.fndtn.slider")}),a},init_lib:function(b,c){return this.libs.hasOwnProperty(b)?(this.patch(this.libs[b]),c&&c.hasOwnProperty(b)?("undefined"!=typeof this.libs[b].settings?a.extend(!0,this.libs[b].settings,c[b]):"undefined"!=typeof this.libs[b].defaults&&a.extend(!0,this.libs[b].defaults,c[b]),this.libs[b].init.apply(this.libs[b],[this.scope,c[b]])):(c=c instanceof Array?c:new Array(c),this.libs[b].init.apply(this.libs[b],c))):function(){}},patch:function(a){a.scope=this.scope,a.namespace=this.global.namespace,a.rtl=this.rtl,a.data_options=this.utils.data_options,a.attr_name=i,a.add_namespace=j,a.bindings=k,a.S=this.utils.S},inherit:function(a,b){for(var c=b.split(" "),d=c.length;d--;)this.utils.hasOwnProperty(c[d])&&(a[c[d]]=this.utils[c[d]])},set_namespace:function(){var b=this.global.namespace===d?a(".foundation-data-attribute-namespace").css("font-family"):this.global.namespace;this.global.namespace=b===d||/false/i.test(b)?"":b},libs:{},utils:{S:h,throttle:function(a,b){var c=null;return function(){var d=this,e=arguments;null==c&&(c=setTimeout(function(){a.apply(d,e),c=null},b))}},debounce:function(a,b,c){var d,e;return function(){var f=this,g=arguments,h=function(){d=null,c||(e=a.apply(f,g))},i=c&&!d;return clearTimeout(d),d=setTimeout(h,b),i&&(e=a.apply(f,g)),e}},data_options:function(b,c){function d(a){return!isNaN(a-0)&&null!==a&&""!==a&&a!==!1&&a!==!0}function e(b){return"string"==typeof b?a.trim(b):b}c=c||"options";var f,g,h,i={},j=function(a){var b=Foundation.global.namespace;return b.length>0?a.data(b+"-"+c):a.data(c)},k=j(b);if("object"==typeof k)return k;for(h=(k||":").split(";"),f=h.length;f--;)g=h[f].split(":"),g=[g[0],g.slice(1).join(":")],/true/i.test(g[1])&&(g[1]=!0),/false/i.test(g[1])&&(g[1]=!1),d(g[1])&&(-1===g[1].indexOf(".")?g[1]=parseInt(g[1],10):g[1]=parseFloat(g[1])),2===g.length&&g[0].length>0&&(i[e(g[0])]=e(g[1]));return i},register_media:function(b,c){Foundation.media_queries[b]===d&&(a("head").append('<meta class="'+c+'"/>'),Foundation.media_queries[b]=e(a("."+c).css("font-family")))},add_custom_rule:function(a,b){if(b===d&&Foundation.stylesheet)Foundation.stylesheet.insertRule(a,Foundation.stylesheet.cssRules.length);else{var c=Foundation.media_queries[b];c!==d&&Foundation.stylesheet.insertRule("@media "+Foundation.media_queries[b]+"{ "+a+" }",Foundation.stylesheet.cssRules.length)}},image_loaded:function(a,b){function c(a){for(var b=a.length,c=b-1;c>=0;c--)if(a.attr("height")===d)return!1;return!0}var e=this,f=a.length;(0===f||c(a))&&b(a),a.each(function(){l(e.S(this),function(){f-=1,0===f&&b(a)})})},random_str:function(){return this.fidx||(this.fidx=0),this.prefix=this.prefix||[this.name||"F",(+new Date).toString(36)].join("-"),this.prefix+(this.fidx++).toString(36)},match:function(a){return b.matchMedia(a).matches},is_small_up:function(){return this.match(Foundation.media_queries.small)},is_medium_up:function(){return this.match(Foundation.media_queries.medium)},is_large_up:function(){return this.match(Foundation.media_queries.large)},is_xlarge_up:function(){return this.match(Foundation.media_queries.xlarge)},is_xxlarge_up:function(){return this.match(Foundation.media_queries.xxlarge)},is_small_only:function(){return!(this.is_medium_up()||this.is_large_up()||this.is_xlarge_up()||this.is_xxlarge_up())},is_medium_only:function(){return this.is_medium_up()&&!this.is_large_up()&&!this.is_xlarge_up()&&!this.is_xxlarge_up()},is_large_only:function(){return this.is_medium_up()&&this.is_large_up()&&!this.is_xlarge_up()&&!this.is_xxlarge_up()},is_xlarge_only:function(){return this.is_medium_up()&&this.is_large_up()&&this.is_xlarge_up()&&!this.is_xxlarge_up()},is_xxlarge_only:function(){return this.is_medium_up()&&this.is_large_up()&&this.is_xlarge_up()&&this.is_xxlarge_up()}}},a.fn.foundation=function(){var a=Array.prototype.slice.call(arguments,0);return this.each(function(){return Foundation.init.apply(Foundation,[this].concat(a)),this})}}(jQuery,window,window.document),function(a,b,c,d){"use strict";Foundation.libs.abide={name:"abide",version:"5.5.3",settings:{live_validate:!0,validate_on_blur:!0,focus_on_invalid:!0,error_labels:!0,error_class:"error",timeout:1e3,patterns:{alpha:/^[a-zA-Z]+$/,alpha_numeric:/^[a-zA-Z0-9]+$/,integer:/^[-+]?\d+$/,number:/^[-+]?\d*(?:[\.\,]\d+)?$/,card:/^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|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})$/,cvv:/^([0-9]){3,4}$/,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])?)+$/,url:/^(https?|ftp|file|ssh):\/\/([-;:&=\+\$,\w]+@{1})?([-A-Za-z0-9\.]+)+:?(\d+)?((\/[-\+~%\/\.\w]+)?\??([-\+=&;%@\.\w]+)?#?([\w]+)?)?/,domain:/^([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,8}$/,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))$/,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))$/,time:/^(0[0-9]|1[0-9]|2[0-3])(:[0-5][0-9]){2}$/,dateISO:/^\d{4}[\/\-]\d{1,2}[\/\-]\d{1,2}$/,month_day_year:/^(0[1-9]|1[012])[- \/.](0[1-9]|[12][0-9]|3[01])[- \/.]\d{4}$/,day_month_year:/^(0[1-9]|[12][0-9]|3[01])[- \/.](0[1-9]|1[012])[- \/.]\d{4}$/,color:/^#?([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$/},validators:{equalTo:function(a,b,d){var e=c.getElementById(a.getAttribute(this.add_namespace("data-equalto"))).value,f=a.value,g=e===f;return g}}},timer:null,init:function(a,b,c){this.bindings(b,c)},events:function(b){function c(a,b){clearTimeout(d.timer),d.timer=setTimeout(function(){d.validate([a],b)}.bind(a),f.timeout)}var d=this,e=d.S(b).attr("novalidate","novalidate"),f=e.data(this.attr_name(!0)+"-init")||{};this.invalid_attr=this.add_namespace("data-invalid"),e.off(".abide").on("submit.fndtn.abide",function(a){var b=/ajax/i.test(d.S(this).attr(d.attr_name()));return d.validate(d.S(this).find("input, textarea, select").not(":hidden, [data-abide-ignore]").get(),a,b)}).on("validate.fndtn.abide",function(a){"manual"===f.validate_on&&d.validate([a.target],a)}).on("reset",function(b){return d.reset(a(this),b)}).find("input, textarea, select").not(":hidden, [data-abide-ignore]").off(".abide").on("blur.fndtn.abide change.fndtn.abide",function(a){var b=this.getAttribute("id"),d=e.find('[data-equalto="'+b+'"]');f.validate_on_blur&&f.validate_on_blur===!0&&c(this,a),"undefined"!=typeof d.get(0)&&d.val().length&&c(d.get(0),a),"change"===f.validate_on&&c(this,a)}).on("keydown.fndtn.abide",function(a){var b=this.getAttribute("id"),d=e.find('[data-equalto="'+b+'"]');f.live_validate&&f.live_validate===!0&&9!=a.which&&c(this,a),"undefined"!=typeof d.get(0)&&d.val().length&&c(d.get(0),a),"tab"===f.validate_on&&9===a.which?c(this,a):"change"===f.validate_on&&c(this,a)}).on("focus",function(b){navigator.userAgent.match(/iPad|iPhone|Android|BlackBerry|Windows Phone|webOS/i)&&a("html, body").animate({scrollTop:a(b.target).offset().top},100)})},reset:function(b,c){var d=this;b.removeAttr(d.invalid_attr),a("["+d.invalid_attr+"]",b).removeAttr(d.invalid_attr),a("."+d.settings.error_class,b).not("small").removeClass(d.settings.error_class),a(":input",b).not(":button, :submit, :reset, :hidden, [data-abide-ignore]").val("").removeAttr(d.invalid_attr)},validate:function(a,b,c){for(var d=this.parse_patterns(a),e=d.length,f=this.S(a[0]).closest("form"),g=/submit/.test(b.type),h=0;e>h;h++)if(!d[h]&&(g||c))return this.settings.focus_on_invalid&&a[h].focus(),f.trigger("invalid.fndtn.abide"),this.S(a[h]).closest("form").attr(this.invalid_attr,""),!1;return(g||c)&&f.trigger("valid.fndtn.abide"),f.removeAttr(this.invalid_attr),c?!1:!0},parse_patterns:function(a){for(var b=a.length,c=[];b--;)c.push(this.pattern(a[b]));return this.check_validation_and_apply_styles(c)},pattern:function(a){var b=a.getAttribute("type"),c="string"==typeof a.getAttribute("required"),d=a.getAttribute("pattern")||"";return this.settings.patterns.hasOwnProperty(d)&&d.length>0?[a,this.settings.patterns[d],c]:d.length>0?[a,new RegExp(d),c]:this.settings.patterns.hasOwnProperty(b)?[a,this.settings.patterns[b],c]:(d=/.*/,[a,d,c])},check_validation_and_apply_styles:function(b){var c=b.length,d=[];if(0==c)return d;var e=this.S(b[0][0]).closest("[data-"+this.attr_name(!0)+"]");for(e.data(this.attr_name(!0)+"-init")||{};c--;){var f,g,h=b[c][0],i=b[c][2],j=h.value.trim(),k=this.S(h).parent(),l=h.getAttribute(this.add_namespace("data-abide-validator")),m="radio"===h.type,n="checkbox"===h.type,o=this.S('label[for="'+h.getAttribute("id")+'"]'),p=i?h.value.length>0:!0,q=[];if(h.getAttribute(this.add_namespace("data-equalto"))&&(l="equalTo"),f=k.is("label")?k.parent():k,m&&i)q.push(this.valid_radio(h,i));else if(n&&i)q.push(this.valid_checkbox(h,i));else if(l){for(var r=l.split(" "),s=!0,t=!0,u=0;u<r.length;u++)g=this.settings.validators[r[u]].apply(this,[h,i,f]),q.push(g),t=g&&s,s=g;t?(this.S(h).removeAttr(this.invalid_attr),f.removeClass("error"),o.length>0&&this.settings.error_labels&&o.removeClass(this.settings.error_class).removeAttr("role"),a(h).triggerHandler("valid")):(this.S(h).attr(this.invalid_attr,""),f.addClass("error"),o.length>0&&this.settings.error_labels&&o.addClass(this.settings.error_class).attr("role","alert"),a(h).triggerHandler("invalid"))}else if(b[c][1].test(j)&&p||!i&&h.value.length<1||a(h).attr("disabled")?q.push(!0):q.push(!1),q=[q.every(function(a){return a})],q[0])this.S(h).removeAttr(this.invalid_attr),h.setAttribute("aria-invalid","false"),h.removeAttribute("aria-describedby"),f.removeClass(this.settings.error_class),o.length>0&&this.settings.error_labels&&o.removeClass(this.settings.error_class).removeAttr("role"),a(h).triggerHandler("valid");else{this.S(h).attr(this.invalid_attr,""),h.setAttribute("aria-invalid","true");var v=f.find("small."+this.settings.error_class,"span."+this.settings.error_class),w=v.length>0?v[0].id:"";w.length>0&&h.setAttribute("aria-describedby",w),f.addClass(this.settings.error_class),o.length>0&&this.settings.error_labels&&o.addClass(this.settings.error_class).attr("role","alert"),a(h).triggerHandler("invalid")}d=d.concat(q)}return d},valid_checkbox:function(b,c){var b=this.S(b),d=b.is(":checked")||!c||b.get(0).getAttribute("disabled");return d?(b.removeAttr(this.invalid_attr).parent().removeClass(this.settings.error_class),a(b).triggerHandler("valid")):(b.attr(this.invalid_attr,"").parent().addClass(this.settings.error_class),a(b).triggerHandler("invalid")),d},valid_radio:function(b,c){for(var d=b.getAttribute("name"),e=this.S(b).closest("[data-"+this.attr_name(!0)+"]").find("[name='"+d+"']"),f=e.length,g=!1,h=!1,i=0;f>i;i++)e[i].getAttribute("disabled")?(h=!0,g=!0):e[i].checked?g=!0:h&&(g=!1);for(var i=0;f>i;i++)g?(this.S(e[i]).removeAttr(this.invalid_attr).parent().removeClass(this.settings.error_class),a(e[i]).triggerHandler("valid")):(this.S(e[i]).attr(this.invalid_attr,"").parent().addClass(this.settings.error_class),a(e[i]).triggerHandler("invalid"));return g},valid_equal:function(a,b,d){var e=c.getElementById(a.getAttribute(this.add_namespace("data-equalto"))).value,f=a.value,g=e===f;return g?(this.S(a).removeAttr(this.invalid_attr),d.removeClass(this.settings.error_class),label.length>0&&settings.error_labels&&label.removeClass(this.settings.error_class)):(this.S(a).attr(this.invalid_attr,""),d.addClass(this.settings.error_class),label.length>0&&settings.error_labels&&label.addClass(this.settings.error_class)),g},valid_oneof:function(a,b,c,d){var a=this.S(a),e=this.S("["+this.add_namespace("data-oneof")+"]"),f=e.filter(":checked").length>0;if(f?a.removeAttr(this.invalid_attr).parent().removeClass(this.settings.error_class):a.attr(this.invalid_attr,"").parent().addClass(this.settings.error_class),!d){var g=this;e.each(function(){g.valid_oneof.call(g,this,null,null,!0)})}return f},reflow:function(a,b){var c=this,d=c.S("["+this.attr_name()+"]").attr("novalidate","novalidate");c.S(d).each(function(a,b){c.events(b)})}}}(jQuery,window,window.document),function(a,b,c,d){"use strict";Foundation.libs.accordion={name:"accordion",version:"5.5.3",settings:{content_class:"content",active_class:"active",multi_expand:!1,toggleable:!0,callback:function(){}},init:function(a,b,c){this.bindings(b,c)},events:function(b){var c=this,d=this.S;c.create(this.S(b)),d(this.scope).off(".fndtn.accordion").on("click.fndtn.accordion","["+this.attr_name()+"] > dd > a, ["+this.attr_name()+"] > li > a",function(b){var e=d(this).closest("["+c.attr_name()+"]"),f=c.attr_name()+"="+e.attr(c.attr_name()),g=e.data(c.attr_name(!0)+"-init")||c.settings,h=d("#"+this.href.split("#")[1]),i=a("> dd, > li",e),j=i.children("."+g.content_class),k=j.filter("."+g.active_class);return b.preventDefault(),e.attr(c.attr_name())&&(j=j.add("["+f+"] dd > ."+g.content_class+", ["+f+"] li > ."+g.content_class),i=i.add("["+f+"] dd, ["+f+"] li")),g.toggleable&&h.is(k)?(h.parent("dd, li").toggleClass(g.active_class,!1),h.toggleClass(g.active_class,!1),d(this).attr("aria-expanded",function(a,b){return"true"===b?"false":"true"}),g.callback(h),h.triggerHandler("toggled",[e]),void e.triggerHandler("toggled",[h])):(g.multi_expand||(j.removeClass(g.active_class),i.removeClass(g.active_class),i.children("a").attr("aria-expanded","false")),h.addClass(g.active_class).parent().addClass(g.active_class),g.callback(h),h.triggerHandler("toggled",[e]),e.triggerHandler("toggled",[h]),void d(this).attr("aria-expanded","true"))})},create:function(b){var c=this,d=b,e=a("> .accordion-navigation",d),f=d.data(c.attr_name(!0)+"-init")||c.settings;e.children("a").attr("aria-expanded","false"),e.has("."+f.content_class+"."+f.active_class).addClass(f.active_class).children("a").attr("aria-expanded","true"),f.multi_expand&&b.attr("aria-multiselectable","true")},toggle:function(a){var a="undefined"!=typeof a?a:{},c="undefined"!=typeof a.selector?a.selector:"",d="undefined"!=typeof a.toggle_state?a.toggle_state:"",e="undefined"!=typeof a.$accordion?a.$accordion:this.S(this.scope).closest("["+this.attr_name()+"]"),f=e.find("> dd"+c+", > li"+c);if(f.length<1)return b.console&&console.error("Selection not found.",c),!1;var g=this.S,h=this.settings.active_class;f.each(function(){var a=g(this),b=a.hasClass(h);(b&&"close"===d||!b&&"open"===d||""===d)&&a.find("> a").trigger("click.fndtn.accordion")})},open:function(a){var a="undefined"!=typeof a?a:{};a.toggle_state="open",this.toggle(a)},close:function(a){var a="undefined"!=typeof a?a:{};a.toggle_state="close",this.toggle(a)},off:function(){},reflow:function(){}}}(jQuery,window,window.document),function(a,b,c,d){"use strict";Foundation.libs.alert={name:"alert",version:"5.5.3",settings:{callback:function(){}},init:function(a,b,c){this.bindings(b,c)},events:function(){var b=this,c=this.S;a(this.scope).off(".alert").on("click.fndtn.alert","["+this.attr_name()+"] .close",function(a){var d=c(this).closest("["+b.attr_name()+"]"),e=d.data(b.attr_name(!0)+"-init")||b.settings;a.preventDefault(),Modernizr.csstransitions?(d.addClass("alert-close"),d.on("transitionend webkitTransitionEnd oTransitionEnd",function(a){c(this).trigger("close.fndtn.alert").remove(),e.callback()})):d.fadeOut(300,function(){c(this).trigger("close.fndtn.alert").remove(),e.callback()})})},reflow:function(){}}}(jQuery,window,window.document),function(a,b,c,d){"use strict";Foundation.libs.clearing={name:"clearing",version:"5.5.3",settings:{templates:{viewing:'<a href="#" class="clearing-close">&times;</a><div class="visible-img" style="display: none"><div class="clearing-touch-label"></div><img src="data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs%3D" alt="" /><p class="clearing-caption"></p><a href="#" class="clearing-main-prev"><span></span></a><a href="#" class="clearing-main-next"><span></span></a></div><img class="clearing-preload-next" style="display: none" src="data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs%3D" alt="" /><img class="clearing-preload-prev" style="display: none" src="data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs%3D" alt="" />'},close_selectors:".clearing-close, div.clearing-blackout",open_selectors:"",skip_selector:"",touch_label:"",init:!1,locked:!1},init:function(a,b,c){var d=this;Foundation.inherit(this,"throttle image_loaded"),this.bindings(b,c),d.S(this.scope).is("["+this.attr_name()+"]")?this.assemble(d.S("li",this.scope)):d.S("["+this.attr_name()+"]",this.scope).each(function(){d.assemble(d.S("li",this))})},events:function(d){var e=this,f=e.S,g=a(".scroll-container");g.length>0&&(this.scope=g),f(this.scope).off(".clearing").on("click.fndtn.clearing","ul["+this.attr_name()+"] li "+this.settings.open_selectors,function(a,b,c){var b=b||f(this),c=c||b,d=b.next("li"),g=b.closest("["+e.attr_name()+"]").data(e.attr_name(!0)+"-init"),h=f(a.target);a.preventDefault(),g||(e.init(),g=b.closest("["+e.attr_name()+"]").data(e.attr_name(!0)+"-init")),c.hasClass("visible")&&b[0]===c[0]&&d.length>0&&e.is_open(b)&&(c=d,h=f("img",c)),e.open(h,b,c),e.update_paddles(c)}).on("click.fndtn.clearing",".clearing-main-next",function(a){e.nav(a,"next")}).on("click.fndtn.clearing",".clearing-main-prev",function(a){e.nav(a,"prev")}).on("click.fndtn.clearing",this.settings.close_selectors,function(a){Foundation.libs.clearing.close(a,this)}),a(c).on("keydown.fndtn.clearing",function(a){e.keydown(a)}),f(b).off(".clearing").on("resize.fndtn.clearing",function(){e.resize()}),this.swipe_events(d)},swipe_events:function(a){var b=this,c=b.S;c(this.scope).on("touchstart.fndtn.clearing",".visible-img",function(a){a.touches||(a=a.originalEvent);var b={start_page_x:a.touches[0].pageX,start_page_y:a.touches[0].pageY,start_time:(new Date).getTime(),delta_x:0,is_scrolling:d};c(this).data("swipe-transition",b),a.stopPropagation()}).on("touchmove.fndtn.clearing",".visible-img",function(a){if(a.touches||(a=a.originalEvent),!(a.touches.length>1||a.scale&&1!==a.scale)){var d=c(this).data("swipe-transition");if("undefined"==typeof d&&(d={}),d.delta_x=a.touches[0].pageX-d.start_page_x,Foundation.rtl&&(d.delta_x=-d.delta_x),"undefined"==typeof d.is_scrolling&&(d.is_scrolling=!!(d.is_scrolling||Math.abs(d.delta_x)<Math.abs(a.touches[0].pageY-d.start_page_y))),!d.is_scrolling&&!d.active){a.preventDefault();var e=d.delta_x<0?"next":"prev";d.active=!0,b.nav(a,e)}}}).on("touchend.fndtn.clearing",".visible-img",function(a){c(this).data("swipe-transition",{}),a.stopPropagation()})},assemble:function(b){var c=b.parent();if(!c.parent().hasClass("carousel")){c.after('<div id="foundationClearingHolder"></div>');var d=c.detach(),e="";if(null!=d[0]){e=d[0].outerHTML;var f=this.S("#foundationClearingHolder"),g=c.data(this.attr_name(!0)+"-init"),h={grid:'<div class="carousel">'+e+"</div>",viewing:g.templates.viewing},i='<div class="clearing-assembled"><div>'+h.viewing+h.grid+"</div></div>",j=this.settings.touch_label;Modernizr.touch&&(i=a(i).find(".clearing-touch-label").html(j).end()),f.after(i).remove()}}},open:function(b,d,e){function f(){setTimeout(function(){this.image_loaded(m,function(){1!==m.outerWidth()||o?g.call(this,m):f.call(this)}.bind(this))}.bind(this),100)}function g(b){var c=a(b);c.css("visibility","visible"),c.trigger("imageVisible"),i.css("overflow","hidden"),j.addClass("clearing-blackout"),k.addClass("clearing-container"),l.show(),this.fix_height(e).caption(h.S(".clearing-caption",l),h.S("img",e)).center_and_label(b,n).shift(d,e,function(){e.closest("li").siblings().removeClass("visible"),e.closest("li").addClass("visible")}),l.trigger("opened.fndtn.clearing")}var h=this,i=a(c.body),j=e.closest(".clearing-assembled"),k=h.S("div",j).first(),l=h.S(".visible-img",k),m=h.S("img",l).not(b),n=h.S(".clearing-touch-label",k),o=!1,p={};a("body").on("touchmove",function(a){a.preventDefault()}),m.error(function(){o=!0}),this.locked()||(l.trigger("open.fndtn.clearing"),p=this.load(b),p.interchange?m.attr("data-interchange",p.interchange).foundation("interchange","reflow"):m.attr("src",p.src).attr("data-interchange",""),m.css("visibility","hidden"),f.call(this))},close:function(b,d){b.preventDefault();var e,f,g=function(a){return/blackout/.test(a.selector)?a:a.closest(".clearing-blackout")}(a(d)),h=a(c.body);return d===b.target&&g&&(h.css("overflow",""),e=a("div",g).first(),f=a(".visible-img",e),f.trigger("close.fndtn.clearing"),this.settings.prev_index=0,a("ul["+this.attr_name()+"]",g).attr("style","").closest(".clearing-blackout").removeClass("clearing-blackout"),e.removeClass("clearing-container"),f.hide(),f.trigger("closed.fndtn.clearing")),a("body").off("touchmove"),!1},is_open:function(a){return a.parent().prop("style").length>0},keydown:function(b){var c=a(".clearing-blackout ul["+this.attr_name()+"]"),d=this.rtl?37:39,e=this.rtl?39:37,f=27;b.which===d&&this.go(c,"next"),b.which===e&&this.go(c,"prev"),b.which===f&&this.S("a.clearing-close").trigger("click.fndtn.clearing")},nav:function(b,c){var d=a("ul["+this.attr_name()+"]",".clearing-blackout");b.preventDefault(),this.go(d,c)},resize:function(){var b=a("img",".clearing-blackout .visible-img"),c=a(".clearing-touch-label",".clearing-blackout");b.length&&(this.center_and_label(b,c),b.trigger("resized.fndtn.clearing"))},fix_height:function(a){var b=a.parent().children(),c=this;return b.each(function(){var a=c.S(this),b=a.find("img");a.height()>b.outerHeight()&&a.addClass("fix-height")}).closest("ul").width(100*b.length+"%"),this},update_paddles:function(a){a=a.closest("li");var b=a.closest(".carousel").siblings(".visible-img");a.next().length>0?this.S(".clearing-main-next",b).removeClass("disabled"):this.S(".clearing-main-next",b).addClass("disabled"),a.prev().length>0?this.S(".clearing-main-prev",b).removeClass("disabled"):this.S(".clearing-main-prev",b).addClass("disabled")},center_and_label:function(a,b){return!this.rtl&&b.length>0?b.css({marginLeft:-(b.outerWidth()/2),marginTop:-(a.outerHeight()/2)-b.outerHeight()-10}):b.css({marginRight:-(b.outerWidth()/2),marginTop:-(a.outerHeight()/2)-b.outerHeight()-10,left:"auto",right:"50%"}),this},load:function(a){var b,c,d;return"A"===a[0].nodeName?(b=a.attr("href"),c=a.data("clearing-interchange")):(d=a.closest("a"),b=d.attr("href"),c=d.data("clearing-interchange")),this.preload(a),{src:b?b:a.attr("src"),interchange:b?c:a.data("clearing-interchange")}},preload:function(a){this.img(a.closest("li").next(),"next").img(a.closest("li").prev(),"prev")},img:function(b,c){if(b.length){var d,e,f,g=a(".clearing-preload-"+c),h=this.S("a",b);h.length?(d=h.attr("href"),e=h.data("clearing-interchange")):(f=this.S("img",b),d=f.attr("src"),e=f.data("clearing-interchange")),e?g.attr("data-interchange",e):(g.attr("src",d),g.attr("data-interchange",""))}return this},caption:function(a,b){var c=b.attr("data-caption");if(c){var d=a.get(0);d.innerHTML=c,a.show()}else a.text("").hide();return this},go:function(a,b){var c=this.S(".visible",a),d=c[b]();this.settings.skip_selector&&0!=d.find(this.settings.skip_selector).length&&(d=d[b]()),d.length&&this.S("img",d).trigger("click.fndtn.clearing",[c,d]).trigger("change.fndtn.clearing")},shift:function(a,b,c){var d,e=b.parent(),f=this.settings.prev_index||b.index(),g=this.direction(e,a,b),h=this.rtl?"right":"left",i=parseInt(e.css("left"),10),j=b.outerWidth(),k={};b.index()===f||/skip/.test(g)?/skip/.test(g)&&(d=b.index()-this.settings.up_count,this.lock(),d>0?(k[h]=-(d*j),e.animate(k,300,this.unlock())):(k[h]=0,e.animate(k,300,this.unlock()))):/left/.test(g)?(this.lock(),k[h]=i+j,e.animate(k,300,this.unlock())):/right/.test(g)&&(this.lock(),k[h]=i-j,e.animate(k,300,this.unlock())),c()},direction:function(a,b,c){var d,e=this.S("li",a),f=e.outerWidth()+e.outerWidth()/4,g=Math.floor(this.S(".clearing-container").outerWidth()/f)-1,h=e.index(c);return this.settings.up_count=g,d=this.adjacent(this.settings.prev_index,h)?h>g&&h>this.settings.prev_index?"right":h>g-1&&h<=this.settings.prev_index?"left":!1:"skip",this.settings.prev_index=h,d},adjacent:function(a,b){for(var c=b+1;c>=b-1;c--)if(c===a)return!0;return!1},lock:function(){this.settings.locked=!0},unlock:function(){this.settings.locked=!1},locked:function(){return this.settings.locked},off:function(){this.S(this.scope).off(".fndtn.clearing"),this.S(b).off(".fndtn.clearing")},reflow:function(){this.init()}}}(jQuery,window,window.document),function(a,b,c,d){"use strict";Foundation.libs.dropdown={name:"dropdown",version:"5.5.3",settings:{active_class:"open",disabled_class:"disabled",mega_class:"mega",align:"bottom",is_hover:!1,hover_timeout:150,opened:function(){},closed:function(){}},init:function(b,c,d){Foundation.inherit(this,"throttle"),a.extend(!0,this.settings,c,d),this.bindings(c,d)},events:function(d){var e=this,f=e.S;f(this.scope).off(".dropdown").on("click.fndtn.dropdown","["+this.attr_name()+"]",function(b){var c=f(this).data(e.attr_name(!0)+"-init")||e.settings;(!c.is_hover||Modernizr.touch)&&(b.preventDefault(),f(this).parent("[data-reveal-id]").length&&b.stopPropagation(),e.toggle(a(this)))}).on("mouseenter.fndtn.dropdown","["+this.attr_name()+"], ["+this.attr_name()+"-content]",function(a){var b,c,d=f(this);clearTimeout(e.timeout),d.data(e.data_attr())?(b=f("#"+d.data(e.data_attr())),c=d):(b=d,c=f("["+e.attr_name()+'="'+b.attr("id")+'"]'));var g=c.data(e.attr_name(!0)+"-init")||e.settings;f(a.currentTarget).data(e.data_attr())&&g.is_hover&&e.closeall.call(e),g.is_hover&&e.open.apply(e,[b,c])}).on("mouseleave.fndtn.dropdown","["+this.attr_name()+"], ["+this.attr_name()+"-content]",function(a){var b,c=f(this);if(c.data(e.data_attr()))b=c.data(e.data_attr(!0)+"-init")||e.settings;else var d=f("["+e.attr_name()+'="'+f(this).attr("id")+'"]'),b=d.data(e.attr_name(!0)+"-init")||e.settings;e.timeout=setTimeout(function(){c.data(e.data_attr())?b.is_hover&&e.close.call(e,f("#"+c.data(e.data_attr()))):b.is_hover&&e.close.call(e,c)}.bind(this),b.hover_timeout)}).on("click.fndtn.dropdown",function(b){var d=f(b.target).closest("["+e.attr_name()+"-content]"),g=d.find("a");return g.length>0&&"false"!==d.attr("aria-autoclose")&&e.close.call(e,f("["+e.attr_name()+"-content]")),b.target!==c&&!a.contains(c.documentElement,b.target)||f(b.target).closest("["+e.attr_name()+"]").length>0?void 0:!f(b.target).data("revealId")&&d.length>0&&(f(b.target).is("["+e.attr_name()+"-content]")||a.contains(d.first()[0],b.target))?void b.stopPropagation():void e.close.call(e,f("["+e.attr_name()+"-content]"))}).on("opened.fndtn.dropdown","["+e.attr_name()+"-content]",function(){e.settings.opened.call(this)}).on("closed.fndtn.dropdown","["+e.attr_name()+"-content]",function(){e.settings.closed.call(this)}),f(b).off(".dropdown").on("resize.fndtn.dropdown",e.throttle(function(){e.resize.call(e)},50)),this.resize()},close:function(b){var c=this;b.each(function(d){var e=a("["+c.attr_name()+"="+b[d].id+"]")||a("aria-controls="+b[d].id+"]");e.attr("aria-expanded","false"),c.S(this).hasClass(c.settings.active_class)&&(c.S(this).css(Foundation.rtl?"right":"left","-99999px").attr("aria-hidden","true").removeClass(c.settings.active_class).prev("["+c.attr_name()+"]").removeClass(c.settings.active_class).removeData("target"),c.S(this).trigger("closed.fndtn.dropdown",[b]))}),b.removeClass("f-open-"+this.attr_name(!0))},closeall:function(){var b=this;a.each(b.S(".f-open-"+this.attr_name(!0)),function(){b.close.call(b,b.S(this))})},open:function(a,b){this.css(a.addClass(this.settings.active_class),b),a.prev("["+this.attr_name()+"]").addClass(this.settings.active_class),a.data("target",b.get(0)).trigger("opened.fndtn.dropdown",[a,b]),a.attr("aria-hidden","false"),b.attr("aria-expanded","true"),a.focus(),a.addClass("f-open-"+this.attr_name(!0))},data_attr:function(){return this.namespace.length>0?this.namespace+"-"+this.name:this.name},toggle:function(a){if(!a.hasClass(this.settings.disabled_class)){var b=this.S("#"+a.data(this.data_attr()));0!==b.length&&(this.close.call(this,this.S("["+this.attr_name()+"-content]").not(b)),b.hasClass(this.settings.active_class)?(this.close.call(this,b),b.data("target")!==a.get(0)&&this.open.call(this,b,a)):this.open.call(this,b,a))}},resize:function(){var b=this.S("["+this.attr_name()+"-content].open"),c=a(b.data("target"));b.length&&c.length&&this.css(b,c)},css:function(a,b){var c=Math.max((b.width()-a.width())/2,8),d=b.data(this.attr_name(!0)+"-init")||this.settings,e=a.parent().css("overflow-y")||a.parent().css("overflow");if(this.clear_idx(),this.small()){var f=this.dirs.bottom.call(a,b,d);a.attr("style","").removeClass("drop-left drop-right drop-top").css({position:"absolute",width:"95%","max-width":"none",top:f.top}),a.css(Foundation.rtl?"right":"left",c)}else if("visible"!==e){var g=b[0].offsetTop+b[0].offsetHeight;a.attr("style","").css({position:"absolute",top:g}),a.css(Foundation.rtl?"right":"left",c)}else this.style(a,b,d);return a},style:function(b,c,d){var e=a.extend({position:"absolute"},this.dirs[d.align].call(b,c,d));b.attr("style","").css(e)},dirs:{_base:function(a,d){var e=this.offsetParent(),f=e.offset(),g=a.offset();g.top-=f.top,g.left-=f.left,g.missRight=!1,g.missTop=!1,g.missLeft=!1,g.leftRightFlag=!1;var h,i=b.innerWidth;h=c.getElementsByClassName("row")[0]?c.getElementsByClassName("row")[0].clientWidth:i;var j=(i-h)/2,k=h;if(!this.hasClass("mega")&&!d.ignore_repositioning){var l=this.outerWidth(),m=a.offset().left;a.offset().top<=this.outerHeight()&&(g.missTop=!0,k=i-j,g.leftRightFlag=!0),m+l>m+j&&m-j>l&&(g.missRight=!0,g.missLeft=!1),0>=m-l&&(g.missLeft=!0,g.missRight=!1)}return g},top:function(a,b){var c=Foundation.libs.dropdown,d=c.dirs._base.call(this,a,b);return this.addClass("drop-top"),1==d.missTop&&(d.top=d.top+a.outerHeight()+this.outerHeight(),
+this.removeClass("drop-top")),1==d.missRight&&(d.left=d.left-this.outerWidth()+a.outerWidth()),(a.outerWidth()<this.outerWidth()||c.small()||this.hasClass(b.mega_menu))&&c.adjust_pip(this,a,b,d),Foundation.rtl?{left:d.left-this.outerWidth()+a.outerWidth(),top:d.top-this.outerHeight()}:{left:d.left,top:d.top-this.outerHeight()}},bottom:function(a,b){var c=Foundation.libs.dropdown,d=c.dirs._base.call(this,a,b);return 1==d.missRight&&(d.left=d.left-this.outerWidth()+a.outerWidth()),(a.outerWidth()<this.outerWidth()||c.small()||this.hasClass(b.mega_menu))&&c.adjust_pip(this,a,b,d),c.rtl?{left:d.left-this.outerWidth()+a.outerWidth(),top:d.top+a.outerHeight()}:{left:d.left,top:d.top+a.outerHeight()}},left:function(a,b){var c=Foundation.libs.dropdown.dirs._base.call(this,a,b);return this.addClass("drop-left"),1==c.missLeft&&(c.left=c.left+this.outerWidth(),c.top=c.top+a.outerHeight(),this.removeClass("drop-left")),{left:c.left-this.outerWidth(),top:c.top}},right:function(a,b){var c=Foundation.libs.dropdown.dirs._base.call(this,a,b);this.addClass("drop-right"),1==c.missRight?(c.left=c.left-this.outerWidth(),c.top=c.top+a.outerHeight(),this.removeClass("drop-right")):c.triggeredRight=!0;var d=Foundation.libs.dropdown;return(a.outerWidth()<this.outerWidth()||d.small()||this.hasClass(b.mega_menu))&&d.adjust_pip(this,a,b,c),{left:c.left+a.outerWidth(),top:c.top}}},adjust_pip:function(a,b,c,d){var e=Foundation.stylesheet,f=8;a.hasClass(c.mega_class)?f=d.left+b.outerWidth()/2-8:this.small()&&(f+=d.left-8),this.rule_idx=e.cssRules.length;var g=".f-dropdown.open:before",h=".f-dropdown.open:after",i="left: "+f+"px;",j="left: "+(f-1)+"px;";1==d.missRight&&(f=a.outerWidth()-23,g=".f-dropdown.open:before",h=".f-dropdown.open:after",i="left: "+f+"px;",j="left: "+(f-1)+"px;"),1==d.triggeredRight&&(g=".f-dropdown.open:before",h=".f-dropdown.open:after",i="left:-12px;",j="left:-14px;"),e.insertRule?(e.insertRule([g,"{",i,"}"].join(" "),this.rule_idx),e.insertRule([h,"{",j,"}"].join(" "),this.rule_idx+1)):(e.addRule(g,i,this.rule_idx),e.addRule(h,j,this.rule_idx+1))},clear_idx:function(){var a=Foundation.stylesheet;"undefined"!=typeof this.rule_idx&&(a.deleteRule(this.rule_idx),a.deleteRule(this.rule_idx),delete this.rule_idx)},small:function(){return matchMedia(Foundation.media_queries.small).matches&&!matchMedia(Foundation.media_queries.medium).matches},off:function(){this.S(this.scope).off(".fndtn.dropdown"),this.S("html, body").off(".fndtn.dropdown"),this.S(b).off(".fndtn.dropdown"),this.S("[data-dropdown-content]").off(".fndtn.dropdown")},reflow:function(){}}}(jQuery,window,window.document),function(a,b,c,d){"use strict";Foundation.libs.equalizer={name:"equalizer",version:"5.5.3",settings:{use_tallest:!0,before_height_change:a.noop,after_height_change:a.noop,equalize_on_stack:!1,act_on_hidden_el:!1},init:function(a,b,c){Foundation.inherit(this,"image_loaded"),this.bindings(b,c),this.reflow()},events:function(){this.S(b).off(".equalizer").on("resize.fndtn.equalizer",function(a){this.reflow()}.bind(this))},equalize:function(b){var c,d,e=!1,f=b.data("equalizer"),g=b.data(this.attr_name(!0)+"-init")||this.settings;if(c=g.act_on_hidden_el?f?b.find("["+this.attr_name()+'-watch="'+f+'"]'):b.find("["+this.attr_name()+"-watch]"):f?b.find("["+this.attr_name()+'-watch="'+f+'"]:visible'):b.find("["+this.attr_name()+"-watch]:visible"),0!==c.length&&(g.before_height_change(),b.trigger("before-height-change.fndth.equalizer"),c.height("inherit"),g.equalize_on_stack!==!1||(d=c.first().offset().top,c.each(function(){return a(this).offset().top!==d?(e=!0,!1):void 0}),!e))){var h=c.map(function(){return a(this).outerHeight(!1)}).get();if(g.use_tallest){var i=Math.max.apply(null,h);c.css("height",i)}else{var j=Math.min.apply(null,h);c.css("height",j)}g.after_height_change(),b.trigger("after-height-change.fndtn.equalizer")}},reflow:function(){var b=this;this.S("["+this.attr_name()+"]",this.scope).each(function(){var c=a(this),d=c.data("equalizer-mq"),e=!0;d&&(d="is_"+d.replace(/-/g,"_"),Foundation.utils.hasOwnProperty(d)&&(e=!1)),b.image_loaded(b.S("img",this),function(){if(e||Foundation.utils[d]())b.equalize(c);else{var a=c.find("["+b.attr_name()+"-watch]:visible");a.css("height","auto")}})})}}}(jQuery,window,window.document),function(a,b,c,d){"use strict";Foundation.libs.interchange={name:"interchange",version:"5.5.3",cache:{},images_loaded:!1,nodes_loaded:!1,settings:{load_attr:"interchange",named_queries:{"default":"only screen",small:Foundation.media_queries.small,"small-only":Foundation.media_queries["small-only"],medium:Foundation.media_queries.medium,"medium-only":Foundation.media_queries["medium-only"],large:Foundation.media_queries.large,"large-only":Foundation.media_queries["large-only"],xlarge:Foundation.media_queries.xlarge,"xlarge-only":Foundation.media_queries["xlarge-only"],xxlarge:Foundation.media_queries.xxlarge,landscape:"only screen and (orientation: landscape)",portrait:"only screen and (orientation: portrait)",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)"},directives:{replace:function(b,c,d){if(null!==b&&/IMG/.test(b[0].nodeName)){var e=a.each(b,function(){this.src=c});if(new RegExp(c,"i").test(e))return;return b.attr("src",c),d(b[0].src)}var f=b.data(this.data_attr+"-last-path"),g=this;if(f!=c)return/\.(gif|jpg|jpeg|tiff|png)([?#].*)?/i.test(c)?(a(b).css("background-image","url("+c+")"),b.data("interchange-last-path",c),d(c)):a.get(c,function(a){b.html(a),b.data(g.data_attr+"-last-path",c),d()})}}},init:function(b,c,d){Foundation.inherit(this,"throttle random_str"),this.data_attr=this.set_data_attr(),a.extend(!0,this.settings,c,d),this.bindings(c,d),this.reflow()},get_media_hash:function(){var a="";for(var b in this.settings.named_queries)a+=matchMedia(this.settings.named_queries[b]).matches.toString();return a},events:function(){var c,d=this;return a(b).off(".interchange").on("resize.fndtn.interchange",d.throttle(function(){var a=d.get_media_hash();a!==c&&d.resize(),c=a},50)),this},resize:function(){var b=this.cache;if(!this.images_loaded||!this.nodes_loaded)return void setTimeout(a.proxy(this.resize,this),50);for(var c in b)if(b.hasOwnProperty(c)){var d=this.results(c,b[c]);d&&this.settings.directives[d.scenario[1]].call(this,d.el,d.scenario[0],function(a){if(arguments[0]instanceof Array)var b=arguments[0];else var b=Array.prototype.slice.call(arguments,0);return function(){a.el.trigger(a.scenario[1],b)}}(d))}},results:function(a,b){var c=b.length;if(c>0)for(var d=this.S("["+this.add_namespace("data-uuid")+'="'+a+'"]');c--;){var e,f=b[c][2];if(e=this.settings.named_queries.hasOwnProperty(f)?matchMedia(this.settings.named_queries[f]):matchMedia(f),e.matches)return{el:d,scenario:b[c]}}return!1},load:function(a,b){return("undefined"==typeof this["cached_"+a]||b)&&this["update_"+a](),this["cached_"+a]},update_images:function(){var a=this.S("img["+this.data_attr+"]"),b=a.length,c=b,d=0,e=this.data_attr;for(this.cache={},this.cached_images=[],this.images_loaded=0===b;c--;){if(d++,a[c]){var f=a[c].getAttribute(e)||"";f.length>0&&this.cached_images.push(a[c])}d===b&&(this.images_loaded=!0,this.enhance("images"))}return this},update_nodes:function(){var a=this.S("["+this.data_attr+"]").not("img"),b=a.length,c=b,d=0,e=this.data_attr;for(this.cached_nodes=[],this.nodes_loaded=0===b;c--;){d++;var f=a[c].getAttribute(e)||"";f.length>0&&this.cached_nodes.push(a[c]),d===b&&(this.nodes_loaded=!0,this.enhance("nodes"))}return this},enhance:function(c){for(var d=this["cached_"+c].length;d--;)this.object(a(this["cached_"+c][d]));return a(b).trigger("resize.fndtn.interchange")},convert_directive:function(a){var b=this.trim(a);return b.length>0?b:"replace"},parse_scenario:function(a){var b=a[0].match(/(.+),\s*(\w+)\s*$/),c=a[1].match(/(.*)\)/);if(b)var d=b[1],e=b[2];else var f=a[0].split(/,\s*$/),d=f[0],e="";return[this.trim(d),this.convert_directive(e),this.trim(c[1])]},object:function(a){var b=this.parse_data_attr(a),c=[],d=b.length;if(d>0)for(;d--;){var e=b[d].split(/,\s?\(/);if(e.length>1){var f=this.parse_scenario(e);c.push(f)}}return this.store(a,c)},store:function(a,b){var c=this.random_str(),d=a.data(this.add_namespace("uuid",!0));return this.cache[d]?this.cache[d]:(a.attr(this.add_namespace("data-uuid"),c),this.cache[c]=b)},trim:function(b){return"string"==typeof b?a.trim(b):b},set_data_attr:function(a){return a?this.namespace.length>0?this.namespace+"-"+this.settings.load_attr:this.settings.load_attr:this.namespace.length>0?"data-"+this.namespace+"-"+this.settings.load_attr:"data-"+this.settings.load_attr},parse_data_attr:function(a){for(var b=a.attr(this.attr_name()).split(/\[(.*?)\]/),c=b.length,d=[];c--;)b[c].replace(/[\W\d]+/,"").length>4&&d.push(b[c]);return d},reflow:function(){this.load("images",!0),this.load("nodes",!0)}}}(jQuery,window,window.document),function(a,b,c,d){"use strict";Foundation.libs.joyride={name:"joyride",version:"5.5.3",defaults:{expose:!1,modal:!0,keyboard:!0,tip_location:"bottom",nub_position:"auto",scroll_speed:1500,scroll_animation:"linear",timer:0,start_timer_on_click:!0,start_offset:0,next_button:!0,prev_button:!0,tip_animation:"fade",pause_after:[],exposed:[],tip_animation_fade_speed:300,cookie_monster:!1,cookie_name:"joyride",cookie_domain:!1,cookie_expires:365,tip_container:"body",abort_on_close:!0,tip_location_patterns:{top:["bottom"],bottom:[],left:["right","top","bottom"],right:["left","top","bottom"]},post_ride_callback:function(){},post_step_callback:function(){},pre_step_callback:function(){},pre_ride_callback:function(){},post_expose_callback:function(){},template:{link:'<a href="#close" class="joyride-close-tip">&times;</a>',timer:'<div class="joyride-timer-indicator-wrap"><span class="joyride-timer-indicator"></span></div>',tip:'<div class="joyride-tip-guide"><span class="joyride-nub"></span></div>',wrapper:'<div class="joyride-content-wrapper"></div>',button:'<a href="#" class="small button joyride-next-tip"></a>',prev_button:'<a href="#" class="small button joyride-prev-tip"></a>',modal:'<div class="joyride-modal-bg"></div>',expose:'<div class="joyride-expose-wrapper"></div>',expose_cover:'<div class="joyride-expose-cover"></div>'},expose_add_class:""},init:function(b,c,d){Foundation.inherit(this,"throttle random_str"),this.settings=this.settings||a.extend({},this.defaults,d||c),this.bindings(c,d)},go_next:function(){this.settings.$li.next().length<1?this.end():this.settings.timer>0?(clearTimeout(this.settings.automate),this.hide(),this.show(),this.startTimer()):(this.hide(),this.show())},go_prev:function(){this.settings.$li.prev().length<1||(this.settings.timer>0?(clearTimeout(this.settings.automate),this.hide(),this.show(null,!0),this.startTimer()):(this.hide(),this.show(null,!0)))},events:function(){var c=this;a(this.scope).off(".joyride").on("click.fndtn.joyride",".joyride-next-tip, .joyride-modal-bg",function(a){a.preventDefault(),this.go_next()}.bind(this)).on("click.fndtn.joyride",".joyride-prev-tip",function(a){a.preventDefault(),this.go_prev()}.bind(this)).on("click.fndtn.joyride",".joyride-close-tip",function(a){a.preventDefault(),this.end(this.settings.abort_on_close)}.bind(this)).on("keyup.fndtn.joyride",function(a){if(this.settings.keyboard&&this.settings.riding)switch(a.which){case 39:a.preventDefault(),this.go_next();break;case 37:a.preventDefault(),this.go_prev();break;case 27:a.preventDefault(),this.end(this.settings.abort_on_close)}}.bind(this)),a(b).off(".joyride").on("resize.fndtn.joyride",c.throttle(function(){if(a("["+c.attr_name()+"]").length>0&&c.settings.$next_tip&&c.settings.riding){if(c.settings.exposed.length>0){var b=a(c.settings.exposed);b.each(function(){var b=a(this);c.un_expose(b),c.expose(b)})}c.is_phone()?c.pos_phone():c.pos_default(!1)}},100))},start:function(){var b=this,c=a("["+this.attr_name()+"]",this.scope),d=["timer","scrollSpeed","startOffset","tipAnimationFadeSpeed","cookieExpires"],e=d.length;!c.length>0||(this.settings.init||this.events(),this.settings=c.data(this.attr_name(!0)+"-init"),this.settings.$content_el=c,this.settings.$body=a(this.settings.tip_container),this.settings.body_offset=a(this.settings.tip_container).position(),this.settings.$tip_content=this.settings.$content_el.find("> li"),this.settings.paused=!1,this.settings.attempts=0,this.settings.riding=!0,"function"!=typeof a.cookie&&(this.settings.cookie_monster=!1),(!this.settings.cookie_monster||this.settings.cookie_monster&&!a.cookie(this.settings.cookie_name))&&(this.settings.$tip_content.each(function(c){var f=a(this);this.settings=a.extend({},b.defaults,b.data_options(f));for(var g=e;g--;)b.settings[d[g]]=parseInt(b.settings[d[g]],10);b.create({$li:f,index:c})}),!this.settings.start_timer_on_click&&this.settings.timer>0?(this.show("init"),this.startTimer()):this.show("init")))},resume:function(){this.set_li(),this.show()},tip_template:function(b){var c,d;return b.tip_class=b.tip_class||"",c=a(this.settings.template.tip).addClass(b.tip_class),d=a.trim(a(b.li).html())+this.prev_button_text(b.prev_button_text,b.index)+this.button_text(b.button_text)+this.settings.template.link+this.timer_instance(b.index),c.append(a(this.settings.template.wrapper)),c.first().attr(this.add_namespace("data-index"),b.index),a(".joyride-content-wrapper",c).append(d),c[0]},timer_instance:function(b){var c;return c=0===b&&this.settings.start_timer_on_click&&this.settings.timer>0||0===this.settings.timer?"":a(this.settings.template.timer)[0].outerHTML},button_text:function(b){return this.settings.tip_settings.next_button?(b=a.trim(b)||"Next",b=a(this.settings.template.button).append(b)[0].outerHTML):b="",b},prev_button_text:function(b,c){return this.settings.tip_settings.prev_button?(b=a.trim(b)||"Previous",b=0==c?a(this.settings.template.prev_button).append(b).addClass("disabled")[0].outerHTML:a(this.settings.template.prev_button).append(b)[0].outerHTML):b="",b},create:function(b){this.settings.tip_settings=a.extend({},this.settings,this.data_options(b.$li));var c=b.$li.attr(this.add_namespace("data-button"))||b.$li.attr(this.add_namespace("data-text")),d=b.$li.attr(this.add_namespace("data-button-prev"))||b.$li.attr(this.add_namespace("data-prev-text")),e=b.$li.attr("class"),f=a(this.tip_template({tip_class:e,index:b.index,button_text:c,prev_button_text:d,li:b.$li}));a(this.settings.tip_container).append(f)},show:function(b,c){var e=null;if(this.settings.$li===d||-1===a.inArray(this.settings.$li.index(),this.settings.pause_after))if(this.settings.paused?this.settings.paused=!1:this.set_li(b,c),this.settings.attempts=0,this.settings.$li.length&&this.settings.$target.length>0){if(b&&(this.settings.pre_ride_callback(this.settings.$li.index(),this.settings.$next_tip),this.settings.modal&&this.show_modal()),this.settings.pre_step_callback(this.settings.$li.index(),this.settings.$next_tip),this.settings.modal&&this.settings.expose&&this.expose(),this.settings.tip_settings=a.extend({},this.settings,this.data_options(this.settings.$li)),this.settings.timer=parseInt(this.settings.timer,10),this.settings.tip_settings.tip_location_pattern=this.settings.tip_location_patterns[this.settings.tip_settings.tip_location],!/body/i.test(this.settings.$target.selector)&&!this.settings.expose){var f=a(".joyride-modal-bg");/pop/i.test(this.settings.tipAnimation)?f.hide():f.fadeOut(this.settings.tipAnimationFadeSpeed),this.scroll_to()}this.is_phone()?this.pos_phone(!0):this.pos_default(!0),e=this.settings.$next_tip.find(".joyride-timer-indicator"),/pop/i.test(this.settings.tip_animation)?(e.width(0),this.settings.timer>0?(this.settings.$next_tip.show(),setTimeout(function(){e.animate({width:e.parent().width()},this.settings.timer,"linear")}.bind(this),this.settings.tip_animation_fade_speed)):this.settings.$next_tip.show()):/fade/i.test(this.settings.tip_animation)&&(e.width(0),this.settings.timer>0?(this.settings.$next_tip.fadeIn(this.settings.tip_animation_fade_speed).show(),setTimeout(function(){e.animate({width:e.parent().width()},this.settings.timer,"linear")}.bind(this),this.settings.tip_animation_fade_speed)):this.settings.$next_tip.fadeIn(this.settings.tip_animation_fade_speed)),this.settings.$current_tip=this.settings.$next_tip}else this.settings.$li&&this.settings.$target.length<1?this.show(b,c):this.end();else this.settings.paused=!0},is_phone:function(){return matchMedia(Foundation.media_queries.small).matches&&!matchMedia(Foundation.media_queries.medium).matches},hide:function(){this.settings.modal&&this.settings.expose&&this.un_expose(),this.settings.modal||a(".joyride-modal-bg").hide(),this.settings.$current_tip.css("visibility","hidden"),setTimeout(a.proxy(function(){this.hide(),this.css("visibility","visible")},this.settings.$current_tip),0),this.settings.post_step_callback(this.settings.$li.index(),this.settings.$current_tip)},set_li:function(a,b){a?(this.settings.$li=this.settings.$tip_content.eq(this.settings.start_offset),this.set_next_tip(),this.settings.$current_tip=this.settings.$next_tip):(b?this.settings.$li=this.settings.$li.prev():this.settings.$li=this.settings.$li.next(),this.set_next_tip()),this.set_target()},set_next_tip:function(){this.settings.$next_tip=a(".joyride-tip-guide").eq(this.settings.$li.index()),this.settings.$next_tip.data("closed","")},set_target:function(){var b=this.settings.$li.attr(this.add_namespace("data-class")),d=this.settings.$li.attr(this.add_namespace("data-id")),e=function(){return d?a(c.getElementById(d)):b?a("."+b).first():a("body")};this.settings.$target=e()},scroll_to:function(){var c,d;c=a(b).height()/2,d=Math.ceil(this.settings.$target.offset().top-c+this.settings.$next_tip.outerHeight()),0!=d&&a("html, body").stop().animate({scrollTop:d},this.settings.scroll_speed,"swing")},paused:function(){return-1===a.inArray(this.settings.$li.index()+1,this.settings.pause_after)},restart:function(){this.hide(),this.settings.$li=d,this.show("init")},pos_default:function(a){var b=this.settings.$next_tip.find(".joyride-nub"),c=Math.ceil(b.outerWidth()/2),d=Math.ceil(b.outerHeight()/2),e=a||!1;if(e&&(this.settings.$next_tip.css("visibility","hidden"),this.settings.$next_tip.show()),/body/i.test(this.settings.$target.selector))this.settings.$li.length&&this.pos_modal(b);else{var f=this.settings.tip_settings.tipAdjustmentY?parseInt(this.settings.tip_settings.tipAdjustmentY):0,g=this.settings.tip_settings.tipAdjustmentX?parseInt(this.settings.tip_settings.tipAdjustmentX):0;this.bottom()?(this.rtl?this.settings.$next_tip.css({top:this.settings.$target.offset().top+d+this.settings.$target.outerHeight()+f,left:this.settings.$target.offset().left+this.settings.$target.outerWidth()-this.settings.$next_tip.outerWidth()+g}):this.settings.$next_tip.css({top:this.settings.$target.offset().top+d+this.settings.$target.outerHeight()+f,left:this.settings.$target.offset().left+g}),this.nub_position(b,this.settings.tip_settings.nub_position,"top")):this.top()?(this.rtl?this.settings.$next_tip.css({top:this.settings.$target.offset().top-this.settings.$next_tip.outerHeight()-d+f,left:this.settings.$target.offset().left+this.settings.$target.outerWidth()-this.settings.$next_tip.outerWidth()}):this.settings.$next_tip.css({top:this.settings.$target.offset().top-this.settings.$next_tip.outerHeight()-d+f,left:this.settings.$target.offset().left+g}),this.nub_position(b,this.settings.tip_settings.nub_position,"bottom")):this.right()?(this.settings.$next_tip.css({top:this.settings.$target.offset().top+f,left:this.settings.$target.outerWidth()+this.settings.$target.offset().left+c+g}),this.nub_position(b,this.settings.tip_settings.nub_position,"left")):this.left()&&(this.settings.$next_tip.css({top:this.settings.$target.offset().top+f,left:this.settings.$target.offset().left-this.settings.$next_tip.outerWidth()-c+g}),this.nub_position(b,this.settings.tip_settings.nub_position,"right")),!this.visible(this.corners(this.settings.$next_tip))&&this.settings.attempts<this.settings.tip_settings.tip_location_pattern.length&&(b.removeClass("bottom").removeClass("top").removeClass("right").removeClass("left"),this.settings.tip_settings.tip_location=this.settings.tip_settings.tip_location_pattern[this.settings.attempts],this.settings.attempts++,this.pos_default())}e&&(this.settings.$next_tip.hide(),this.settings.$next_tip.css("visibility","visible"))},pos_phone:function(b){var c=this.settings.$next_tip.outerHeight(),d=(this.settings.$next_tip.offset(),this.settings.$target.outerHeight()),e=a(".joyride-nub",this.settings.$next_tip),f=Math.ceil(e.outerHeight()/2),g=b||!1;e.removeClass("bottom").removeClass("top").removeClass("right").removeClass("left"),g&&(this.settings.$next_tip.css("visibility","hidden"),this.settings.$next_tip.show()),/body/i.test(this.settings.$target.selector)?this.settings.$li.length&&this.pos_modal(e):this.top()?(this.settings.$next_tip.offset({top:this.settings.$target.offset().top-c-f}),e.addClass("bottom")):(this.settings.$next_tip.offset({top:this.settings.$target.offset().top+d+f}),e.addClass("top")),g&&(this.settings.$next_tip.hide(),this.settings.$next_tip.css("visibility","visible"))},pos_modal:function(a){this.center(),a.hide(),this.show_modal()},show_modal:function(){if(!this.settings.$next_tip.data("closed")){var b=a(".joyride-modal-bg");if(b.length<1){var b=a(this.settings.template.modal);b.appendTo("body")}/pop/i.test(this.settings.tip_animation)?b.show():b.fadeIn(this.settings.tip_animation_fade_speed)}},expose:function(){var c,d,e,f,g,h="expose-"+this.random_str(6);if(arguments.length>0&&arguments[0]instanceof a)e=arguments[0];else{if(!this.settings.$target||/body/i.test(this.settings.$target.selector))return!1;e=this.settings.$target}return e.length<1?(b.console&&console.error("element not valid",e),!1):(c=a(this.settings.template.expose),this.settings.$body.append(c),c.css({top:e.offset().top,left:e.offset().left,width:e.outerWidth(!0),height:e.outerHeight(!0)}),d=a(this.settings.template.expose_cover),f={zIndex:e.css("z-index"),position:e.css("position")},g=null==e.attr("class")?"":e.attr("class"),e.css("z-index",parseInt(c.css("z-index"))+1),"static"==f.position&&e.css("position","relative"),e.data("expose-css",f),e.data("orig-class",g),e.attr("class",g+" "+this.settings.expose_add_class),d.css({top:e.offset().top,left:e.offset().left,width:e.outerWidth(!0),height:e.outerHeight(!0)}),this.settings.modal&&this.show_modal(),this.settings.$body.append(d),c.addClass(h),d.addClass(h),e.data("expose",h),this.settings.post_expose_callback(this.settings.$li.index(),this.settings.$next_tip,e),void this.add_exposed(e))},un_expose:function(){var c,d,e,f,g,h=!1;if(arguments.length>0&&arguments[0]instanceof a)d=arguments[0];else{if(!this.settings.$target||/body/i.test(this.settings.$target.selector))return!1;d=this.settings.$target}return d.length<1?(b.console&&console.error("element not valid",d),!1):(c=d.data("expose"),e=a("."+c),arguments.length>1&&(h=arguments[1]),h===!0?a(".joyride-expose-wrapper,.joyride-expose-cover").remove():e.remove(),f=d.data("expose-css"),"auto"==f.zIndex?d.css("z-index",""):d.css("z-index",f.zIndex),f.position!=d.css("position")&&("static"==f.position?d.css("position",""):d.css("position",f.position)),g=d.data("orig-class"),d.attr("class",g),d.removeData("orig-classes"),d.removeData("expose"),d.removeData("expose-z-index"),void this.remove_exposed(d))},add_exposed:function(b){this.settings.exposed=this.settings.exposed||[],b instanceof a||"object"==typeof b?this.settings.exposed.push(b[0]):"string"==typeof b&&this.settings.exposed.push(b)},remove_exposed:function(b){var c,d;for(b instanceof a?c=b[0]:"string"==typeof b&&(c=b),this.settings.exposed=this.settings.exposed||[],d=this.settings.exposed.length;d--;)if(this.settings.exposed[d]==c)return void this.settings.exposed.splice(d,1)},center:function(){var c=a(b);return this.settings.$next_tip.css({top:(c.height()-this.settings.$next_tip.outerHeight())/2+c.scrollTop(),left:(c.width()-this.settings.$next_tip.outerWidth())/2+c.scrollLeft()}),!0},bottom:function(){return/bottom/i.test(this.settings.tip_settings.tip_location)},top:function(){return/top/i.test(this.settings.tip_settings.tip_location)},right:function(){return/right/i.test(this.settings.tip_settings.tip_location)},left:function(){return/left/i.test(this.settings.tip_settings.tip_location)},corners:function(c){if(0===c.length)return[!1,!1,!1,!1];var d=a(b),e=d.height()/2,f=Math.ceil(this.settings.$target.offset().top-e+this.settings.$next_tip.outerHeight()),g=d.width()+d.scrollLeft(),h=d.height()+f,i=d.height()+d.scrollTop(),j=d.scrollTop();return j>f&&(j=0>f?0:f),h>i&&(i=h),[c.offset().top<j,g<c.offset().left+c.outerWidth(),i<c.offset().top+c.outerHeight(),d.scrollLeft()>c.offset().left]},visible:function(a){for(var b=a.length;b--;)if(a[b])return!1;return!0},nub_position:function(a,b,c){"auto"===b?a.addClass(c):a.addClass(b)},startTimer:function(){this.settings.$li.length?this.settings.automate=setTimeout(function(){this.hide(),this.show(),this.startTimer()}.bind(this),this.settings.timer):clearTimeout(this.settings.automate)},end:function(b){this.settings.cookie_monster&&a.cookie(this.settings.cookie_name,"ridden",{expires:this.settings.cookie_expires,domain:this.settings.cookie_domain}),this.settings.timer>0&&clearTimeout(this.settings.automate),this.settings.modal&&this.settings.expose&&this.un_expose(),a(this.scope).off("keyup.joyride"),this.settings.$next_tip.data("closed",!0),this.settings.riding=!1,a(".joyride-modal-bg").hide(),this.settings.$current_tip.hide(),("undefined"==typeof b||b===!1)&&(this.settings.post_step_callback(this.settings.$li.index(),this.settings.$current_tip),this.settings.post_ride_callback(this.settings.$li.index(),this.settings.$current_tip)),a(".joyride-tip-guide").remove()},off:function(){a(this.scope).off(".joyride"),a(b).off(".joyride"),a(".joyride-close-tip, .joyride-next-tip, .joyride-modal-bg").off(".joyride"),a(".joyride-tip-guide, .joyride-modal-bg").remove(),clearTimeout(this.settings.automate)},reflow:function(){}}}(jQuery,window,window.document),function(a,b,c,d){"use strict";Foundation.libs["magellan-expedition"]={name:"magellan-expedition",version:"5.5.3",settings:{active_class:"active",threshold:0,destination_threshold:20,throttle_delay:30,fixed_top:0,offset_by_height:!0,duration:700,easing:"swing"},init:function(a,b,c){Foundation.inherit(this,"throttle"),this.bindings(b,c)},events:function(){var b=this,c=b.S,d=b.settings;b.set_expedition_position(),c(b.scope).off(".magellan").on("click.fndtn.magellan","["+b.add_namespace("data-magellan-arrival")+"] a[href*=#]",function(c){var d=this.hostname===location.hostname||!this.hostname,e=b.filterPathname(location.pathname)===b.filterPathname(this.pathname),f=this.hash.replace(/(:|\.|\/)/g,"\\$1"),g=this;if(d&&e&&f){c.preventDefault();var h=a(this).closest("["+b.attr_name()+"]"),i=h.data("magellan-expedition-init"),j=this.hash.split("#").join(""),k=a('a[name="'+j+'"]');0===k.length&&(k=a("#"+j));var l=k.offset().top-i.destination_threshold+1;i.offset_by_height&&(l-=h.outerHeight()),a("html, body").stop().animate({scrollTop:l},i.duration,i.easing,function(){history.pushState?history.pushState(null,null,g.pathname+g.search+"#"+j):location.hash=g.pathname+g.search+"#"+j})}}).on("scroll.fndtn.magellan",b.throttle(this.check_for_arrivals.bind(this),d.throttle_delay))},check_for_arrivals:function(){var a=this;a.update_arrivals(),a.update_expedition_positions()},set_expedition_position:function(){var b=this;a("["+this.attr_name()+"=fixed]",b.scope).each(function(c,d){var e,f,g=a(this),h=g.data("magellan-expedition-init"),i=g.attr("styles");g.attr("style",""),e=g.offset().top+h.threshold,f=parseInt(g.data("magellan-fixed-top")),isNaN(f)||(b.settings.fixed_top=f),g.data(b.data_attr("magellan-top-offset"),e),g.attr("style",i)})},update_expedition_positions:function(){var c=this,d=a(b).scrollTop();a("["+this.attr_name()+"=fixed]",c.scope).each(function(){var b=a(this),e=b.data("magellan-expedition-init"),f=b.attr("style"),g=b.data("magellan-top-offset");if(d+c.settings.fixed_top>=g){var h=b.prev("["+c.add_namespace("data-magellan-expedition-clone")+"]");0===h.length&&(h=b.clone(),h.removeAttr(c.attr_name()),h.attr(c.add_namespace("data-magellan-expedition-clone"),""),b.before(h)),b.css({position:"fixed",top:e.fixed_top}).addClass("fixed")}else b.prev("["+c.add_namespace("data-magellan-expedition-clone")+"]").remove(),b.attr("style",f).css("position","").css("top","").removeClass("fixed")})},update_arrivals:function(){var c=this,d=a(b).scrollTop();a("["+this.attr_name()+"]",c.scope).each(function(){var b=a(this),e=b.data(c.attr_name(!0)+"-init"),f=c.offsets(b,d),g=b.find("["+c.add_namespace("data-magellan-arrival")+"]"),h=!1;f.each(function(a,d){if(d.viewport_offset>=d.top_offset){var f=b.find("["+c.add_namespace("data-magellan-arrival")+"]");return f.not(d.arrival).removeClass(e.active_class),d.arrival.addClass(e.active_class),h=!0,!0}}),h||g.removeClass(e.active_class)})},offsets:function(b,c){var d=this,e=b.data(d.attr_name(!0)+"-init"),f=c;return b.find("["+d.add_namespace("data-magellan-arrival")+"]").map(function(c,g){var h=a(this).data(d.data_attr("magellan-arrival")),i=a("["+d.add_namespace("data-magellan-destination")+"="+h+"]");if(i.length>0){var j=i.offset().top-e.destination_threshold;return e.offset_by_height&&(j-=b.outerHeight()),j=Math.floor(j),{destination:i,arrival:a(this),top_offset:j,viewport_offset:f}}}).sort(function(a,b){return a.top_offset<b.top_offset?-1:a.top_offset>b.top_offset?1:0})},data_attr:function(a){return this.namespace.length>0?this.namespace+"-"+a:a},off:function(){this.S(this.scope).off(".magellan"),this.S(b).off(".magellan")},filterPathname:function(a){return a=a||"",a.replace(/^\//,"").replace(/(?:index|default).[a-zA-Z]{3,4}$/,"").replace(/\/$/,"")},reflow:function(){var b=this;a("["+b.add_namespace("data-magellan-expedition-clone")+"]",b.scope).remove()}}}(jQuery,window,window.document),function(a,b,c,d){"use strict";Foundation.libs.offcanvas={name:"offcanvas",version:"5.5.3",settings:{open_method:"move",close_on_click:!1},init:function(a,b,c){this.bindings(b,c)},events:function(){var b=this,c=b.S,d="",e="",f="",g="",h="";"move"===this.settings.open_method?(d="move-",e="right",f="left",g="top",h="bottom"):"overlap_single"===this.settings.open_method?(d="offcanvas-overlap-",e="right",f="left",g="top",h="bottom"):"overlap"===this.settings.open_method&&(d="offcanvas-overlap"),c(this.scope).off(".offcanvas").on("click.fndtn.offcanvas",".left-off-canvas-toggle",function(f){b.click_toggle_class(f,d+e),"overlap"!==b.settings.open_method&&c(".left-submenu").removeClass(d+e),a(".left-off-canvas-toggle").attr("aria-expanded","true")}).on("click.fndtn.offcanvas",".left-off-canvas-menu a",function(f){var g=b.get_settings(f),h=c(this).parent();!g.close_on_click||h.hasClass("has-submenu")||h.hasClass("back")?c(this).parent().hasClass("has-submenu")?(f.preventDefault(),c(this).siblings(".left-submenu").toggleClass(d+e)):h.hasClass("back")&&(f.preventDefault(),h.parent().removeClass(d+e)):(b.hide.call(b,d+e,b.get_wrapper(f)),h.parent().removeClass(d+e)),a(".left-off-canvas-toggle").attr("aria-expanded","true")}).on("click.fndtn.offcanvas",".right-off-canvas-toggle",function(e){b.click_toggle_class(e,d+f),"overlap"!==b.settings.open_method&&c(".right-submenu").removeClass(d+f),a(".right-off-canvas-toggle").attr("aria-expanded","true")}).on("click.fndtn.offcanvas",".right-off-canvas-menu a",function(e){var g=b.get_settings(e),h=c(this).parent();!g.close_on_click||h.hasClass("has-submenu")||h.hasClass("back")?c(this).parent().hasClass("has-submenu")?(e.preventDefault(),c(this).siblings(".right-submenu").toggleClass(d+f)):h.hasClass("back")&&(e.preventDefault(),h.parent().removeClass(d+f)):(b.hide.call(b,d+f,b.get_wrapper(e)),h.parent().removeClass(d+f)),a(".right-off-canvas-toggle").attr("aria-expanded","true");
+}).on("click.fndtn.offcanvas",".top-off-canvas-toggle",function(e){b.click_toggle_class(e,d+h),"overlap"!==b.settings.open_method&&c(".top-submenu").removeClass(d+h),a(".top-off-canvas-toggle").attr("aria-expanded","true")}).on("click.fndtn.offcanvas",".top-off-canvas-menu a",function(e){var f=b.get_settings(e),g=c(this).parent();!f.close_on_click||g.hasClass("has-submenu")||g.hasClass("back")?c(this).parent().hasClass("has-submenu")?(e.preventDefault(),c(this).siblings(".top-submenu").toggleClass(d+h)):g.hasClass("back")&&(e.preventDefault(),g.parent().removeClass(d+h)):(b.hide.call(b,d+h,b.get_wrapper(e)),g.parent().removeClass(d+h)),a(".top-off-canvas-toggle").attr("aria-expanded","true")}).on("click.fndtn.offcanvas",".bottom-off-canvas-toggle",function(e){b.click_toggle_class(e,d+g),"overlap"!==b.settings.open_method&&c(".bottom-submenu").removeClass(d+g),a(".bottom-off-canvas-toggle").attr("aria-expanded","true")}).on("click.fndtn.offcanvas",".bottom-off-canvas-menu a",function(e){var f=b.get_settings(e),h=c(this).parent();!f.close_on_click||h.hasClass("has-submenu")||h.hasClass("back")?c(this).parent().hasClass("has-submenu")?(e.preventDefault(),c(this).siblings(".bottom-submenu").toggleClass(d+g)):h.hasClass("back")&&(e.preventDefault(),h.parent().removeClass(d+g)):(b.hide.call(b,d+g,b.get_wrapper(e)),h.parent().removeClass(d+g)),a(".bottom-off-canvas-toggle").attr("aria-expanded","true")}).on("click.fndtn.offcanvas",".exit-off-canvas",function(g){b.click_remove_class(g,d+f),c(".right-submenu").removeClass(d+f),e&&(b.click_remove_class(g,d+e),c(".left-submenu").removeClass(d+f)),a(".right-off-canvas-toggle").attr("aria-expanded","true")}).on("click.fndtn.offcanvas",".exit-off-canvas",function(c){b.click_remove_class(c,d+f),a(".left-off-canvas-toggle").attr("aria-expanded","false"),e&&(b.click_remove_class(c,d+e),a(".right-off-canvas-toggle").attr("aria-expanded","false"))}).on("click.fndtn.offcanvas",".exit-off-canvas",function(e){b.click_remove_class(e,d+g),c(".bottom-submenu").removeClass(d+g),h&&(b.click_remove_class(e,d+h),c(".top-submenu").removeClass(d+g)),a(".bottom-off-canvas-toggle").attr("aria-expanded","true")}).on("click.fndtn.offcanvas",".exit-off-canvas",function(c){b.click_remove_class(c,d+g),a(".top-off-canvas-toggle").attr("aria-expanded","false"),h&&(b.click_remove_class(c,d+h),a(".bottom-off-canvas-toggle").attr("aria-expanded","false"))})},toggle:function(a,b){b=b||this.get_wrapper(),b.is("."+a)?this.hide(a,b):this.show(a,b)},show:function(a,b){b=b||this.get_wrapper(),b.trigger("open.fndtn.offcanvas"),b.addClass(a)},hide:function(a,b){b=b||this.get_wrapper(),b.trigger("close.fndtn.offcanvas"),b.removeClass(a)},click_toggle_class:function(a,b){a.preventDefault();var c=this.get_wrapper(a);this.toggle(b,c)},click_remove_class:function(a,b){a.preventDefault();var c=this.get_wrapper(a);this.hide(b,c)},get_settings:function(a){var b=this.S(a.target).closest("["+this.attr_name()+"]");return b.data(this.attr_name(!0)+"-init")||this.settings},get_wrapper:function(a){var b=this.S(a?a.target:this.scope).closest(".off-canvas-wrap");return 0===b.length&&(b=this.S(".off-canvas-wrap")),b},reflow:function(){}}}(jQuery,window,window.document),function(a,b,c,d){"use strict";var e=function(){},f=function(e,f){if(e.hasClass(f.slides_container_class))return this;var j,k,l,m,n,o,p=this,q=e,r=0,s=!1;p.slides=function(){return q.children(f.slide_selector)},p.slides().first().addClass(f.active_slide_class),p.update_slide_number=function(b){f.slide_number&&(k.find("span:first").text(parseInt(b)+1),k.find("span:last").text(p.slides().length)),f.bullets&&(l.children().removeClass(f.bullets_active_class),a(l.children().get(b)).addClass(f.bullets_active_class))},p.update_active_link=function(b){var c=a('[data-orbit-link="'+p.slides().eq(b).attr("data-orbit-slide")+'"]');c.siblings().removeClass(f.bullets_active_class),c.addClass(f.bullets_active_class)},p.build_markup=function(){q.wrap('<div class="'+f.container_class+'"></div>'),j=q.parent(),q.addClass(f.slides_container_class),f.stack_on_small&&j.addClass(f.stack_on_small_class),f.navigation_arrows&&(j.append(a('<a href="#"><span></span></a>').addClass(f.prev_class)),j.append(a('<a href="#"><span></span></a>').addClass(f.next_class))),f.timer&&(m=a("<div>").addClass(f.timer_container_class),m.append("<span>"),m.append(a("<div>").addClass(f.timer_progress_class)),m.addClass(f.timer_paused_class),j.append(m)),f.slide_number&&(k=a("<div>").addClass(f.slide_number_class),k.append("<span></span> "+f.slide_number_text+" <span></span>"),j.append(k)),f.bullets&&(l=a("<ol>").addClass(f.bullets_container_class),j.append(l),l.wrap('<div class="orbit-bullets-container"></div>'),p.slides().each(function(b,c){var d=a("<li>").attr("data-orbit-slide",b).on("click",p.link_bullet);l.append(d)}))},p._goto=function(b,c){if(b===r)return!1;"object"==typeof o&&o.restart();var d=p.slides(),e="next";if(s=!0,r>b&&(e="prev"),b>=d.length){if(!f.circular)return!1;b=0}else if(0>b){if(!f.circular)return!1;b=d.length-1}var g=a(d.get(r)),h=a(d.get(b));g.css("zIndex",2),g.removeClass(f.active_slide_class),h.css("zIndex",4).addClass(f.active_slide_class),q.trigger("before-slide-change.fndtn.orbit"),f.before_slide_change(),p.update_active_link(b);var i=function(){var a=function(){r=b,s=!1,c===!0&&(o=p.create_timer(),o.start()),p.update_slide_number(r),q.trigger("after-slide-change.fndtn.orbit",[{slide_number:r,total_slides:d.length}]),f.after_slide_change(r,d.length)};q.outerHeight()!=h.outerHeight()&&f.variable_height?q.animate({height:h.outerHeight()},250,"linear",a):a()};if(1===d.length)return i(),!1;var j=function(){"next"===e&&n.next(g,h,i),"prev"===e&&n.prev(g,h,i)};h.outerHeight()>q.outerHeight()&&f.variable_height?q.animate({height:h.outerHeight()},250,"linear",j):j()},p.next=function(a){a.stopImmediatePropagation(),a.preventDefault(),p._goto(r+1)},p.prev=function(a){a.stopImmediatePropagation(),a.preventDefault(),p._goto(r-1)},p.link_custom=function(b){b.preventDefault();var c=a(this).attr("data-orbit-link");if("string"==typeof c&&""!=(c=a.trim(c))){var d=j.find("[data-orbit-slide="+c+"]");-1!=d.index()&&p._goto(d.index())}},p.link_bullet=function(b){var c=a(this).attr("data-orbit-slide");if("string"==typeof c&&""!=(c=a.trim(c)))if(isNaN(parseInt(c))){var d=j.find("[data-orbit-slide="+c+"]");-1!=d.index()&&p._goto(d.index()+1)}else p._goto(parseInt(c))},p.timer_callback=function(){p._goto(r+1,!0)},p.compute_dimensions=function(){var b=a(p.slides().get(r)),c=b.outerHeight();f.variable_height||p.slides().each(function(){a(this).outerHeight()>c&&(c=a(this).outerHeight())}),q.height(c)},p.create_timer=function(){var a=new g(j.find("."+f.timer_container_class),f,p.timer_callback);return a},p.stop_timer=function(){"object"==typeof o&&o.stop()},p.toggle_timer=function(){var a=j.find("."+f.timer_container_class);a.hasClass(f.timer_paused_class)?("undefined"==typeof o&&(o=p.create_timer()),o.start()):"object"==typeof o&&o.stop()},p.init=function(){p.build_markup(),f.timer&&(o=p.create_timer(),Foundation.utils.image_loaded(this.slides().children("img"),o.start)),n=new i(f,q),"slide"===f.animation&&(n=new h(f,q)),j.on("click","."+f.next_class,p.next),j.on("click","."+f.prev_class,p.prev),f.next_on_click&&j.on("click","."+f.slides_container_class+" [data-orbit-slide]",p.link_bullet),j.on("click",p.toggle_timer),f.swipe&&j.on("touchstart.fndtn.orbit",function(a){a.touches||(a=a.originalEvent);var b={start_page_x:a.touches[0].pageX,start_page_y:a.touches[0].pageY,start_time:(new Date).getTime(),delta_x:0,is_scrolling:d};j.data("swipe-transition",b),a.stopPropagation()}).on("touchmove.fndtn.orbit",function(a){if(a.touches||(a=a.originalEvent),!(a.touches.length>1||a.scale&&1!==a.scale)){var b=j.data("swipe-transition");if("undefined"==typeof b&&(b={}),b.delta_x=a.touches[0].pageX-b.start_page_x,"undefined"==typeof b.is_scrolling&&(b.is_scrolling=!!(b.is_scrolling||Math.abs(b.delta_x)<Math.abs(a.touches[0].pageY-b.start_page_y))),!b.is_scrolling&&!b.active){a.preventDefault();var c=b.delta_x<0?r+1:r-1;b.active=!0,p._goto(c)}}}).on("touchend.fndtn.orbit",function(a){j.data("swipe-transition",{}),a.stopPropagation()}),j.on("mouseenter.fndtn.orbit",function(a){f.timer&&f.pause_on_hover&&p.stop_timer()}).on("mouseleave.fndtn.orbit",function(a){f.timer&&f.resume_on_mouseout&&o.start()}),a(c).on("click","[data-orbit-link]",p.link_custom),a(b).on("load resize",p.compute_dimensions),Foundation.utils.image_loaded(this.slides().children("img"),p.compute_dimensions),Foundation.utils.image_loaded(this.slides().children("img"),function(){j.prev("."+f.preloader_class).css("display","none"),p.update_slide_number(0),p.update_active_link(0),q.trigger("ready.fndtn.orbit")})},p.init()},g=function(a,b,c){var d,e,f=this,g=b.timer_speed,h=a.find("."+b.timer_progress_class),i=-1;this.update_progress=function(a){var b=h.clone();b.attr("style",""),b.css("width",a+"%"),h.replaceWith(b),h=b},this.restart=function(){clearTimeout(e),a.addClass(b.timer_paused_class),i=-1,f.update_progress(0)},this.start=function(){return a.hasClass(b.timer_paused_class)?(i=-1===i?g:i,a.removeClass(b.timer_paused_class),d=(new Date).getTime(),h.animate({width:"100%"},i,"linear"),e=setTimeout(function(){f.restart(),c()},i),void a.trigger("timer-started.fndtn.orbit")):!0},this.stop=function(){if(a.hasClass(b.timer_paused_class))return!0;clearTimeout(e),a.addClass(b.timer_paused_class);var c=(new Date).getTime();i-=c-d;var h=100-i/g*100;f.update_progress(h),a.trigger("timer-stopped.fndtn.orbit")}},h=function(b,c){var d=b.animation_speed,e=1===a("html[dir=rtl]").length,f=e?"marginRight":"marginLeft",g={};g[f]="0%",this.next=function(a,b,c){a.animate({marginLeft:"-100%"},d),b.animate(g,d,function(){a.css(f,"100%"),c()})},this.prev=function(a,b,c){a.animate({marginLeft:"100%"},d),b.css(f,"-100%"),b.animate(g,d,function(){a.css(f,"100%"),c()})}},i=function(b,c){var d=b.animation_speed;1===a("html[dir=rtl]").length;this.next=function(a,b,c){b.css({margin:"0%",opacity:"0.01"}),b.animate({opacity:"1"},d,"linear",function(){a.css("margin","100%"),c()})},this.prev=function(a,b,c){b.css({margin:"0%",opacity:"0.01"}),b.animate({opacity:"1"},d,"linear",function(){a.css("margin","100%"),c()})}};Foundation.libs=Foundation.libs||{},Foundation.libs.orbit={name:"orbit",version:"5.5.3",settings:{animation:"slide",timer_speed:1e4,pause_on_hover:!0,resume_on_mouseout:!1,next_on_click:!0,animation_speed:500,stack_on_small:!1,navigation_arrows:!0,slide_number:!0,slide_number_text:"of",container_class:"orbit-container",stack_on_small_class:"orbit-stack-on-small",next_class:"orbit-next",prev_class:"orbit-prev",timer_container_class:"orbit-timer",timer_paused_class:"paused",timer_progress_class:"orbit-progress",slides_container_class:"orbit-slides-container",preloader_class:"preloader",slide_selector:"*",bullets_container_class:"orbit-bullets",bullets_active_class:"active",slide_number_class:"orbit-slide-number",caption_class:"orbit-caption",active_slide_class:"active",orbit_transition_class:"orbit-transitioning",bullets:!0,circular:!0,timer:!0,variable_height:!1,swipe:!0,before_slide_change:e,after_slide_change:e},init:function(a,b,c){this.bindings(b,c)},events:function(a){var b=new f(this.S(a),this.S(a).data("orbit-init"));this.S(a).data(this.name+"-instance",b)},reflow:function(){var a=this;if(a.S(a.scope).is("[data-orbit]")){var b=a.S(a.scope),c=b.data(a.name+"-instance");c.compute_dimensions()}else a.S("[data-orbit]",a.scope).each(function(b,c){var d=a.S(c),e=(a.data_options(d),d.data(a.name+"-instance"));e.compute_dimensions()})}}}(jQuery,window,window.document),function(a,b,c,d){"use strict";function e(a){var b=/fade/i.test(a),c=/pop/i.test(a);return{animate:b||c,pop:c,fade:b}}var f=[];Foundation.libs.reveal={name:"reveal",version:"5.5.3",locked:!1,settings:{animation:"fadeAndPop",animation_speed:250,close_on_background_click:!0,close_on_esc:!0,dismiss_modal_class:"close-reveal-modal",multiple_opened:!1,bg_class:"reveal-modal-bg",root_element:"body",open:function(){},opened:function(){},close:function(){},closed:function(){},on_ajax_error:a.noop,bg:a(".reveal-modal-bg"),css:{open:{opacity:0,visibility:"visible",display:"block"},close:{opacity:1,visibility:"hidden",display:"none"}}},init:function(b,c,d){a.extend(!0,this.settings,c,d),this.bindings(c,d)},events:function(a){var b=this,d=b.S;return d(this.scope).off(".reveal").on("click.fndtn.reveal","["+this.add_namespace("data-reveal-id")+"]:not([disabled])",function(a){if(a.preventDefault(),!b.locked){var c=d(this),e=c.data(b.data_attr("reveal-ajax")),f=c.data(b.data_attr("reveal-replace-content"));if(b.locked=!0,"undefined"==typeof e)b.open.call(b,c);else{var g=e===!0?c.attr("href"):e;b.open.call(b,c,{url:g},{replaceContentSel:f})}}}),d(c).on("click.fndtn.reveal",this.close_targets(),function(a){if(a.preventDefault(),!b.locked){var c=d("["+b.attr_name()+"].open").data(b.attr_name(!0)+"-init")||b.settings,e=d(a.target)[0]===d("."+c.bg_class)[0];if(e){if(!c.close_on_background_click)return;a.stopPropagation()}b.locked=!0,b.close.call(b,e?d("["+b.attr_name()+"].open:not(.toback)"):d(this).closest("["+b.attr_name()+"]"))}}),d("["+b.attr_name()+"]",this.scope).length>0?d(this.scope).on("open.fndtn.reveal",this.settings.open).on("opened.fndtn.reveal",this.settings.opened).on("opened.fndtn.reveal",this.open_video).on("close.fndtn.reveal",this.settings.close).on("closed.fndtn.reveal",this.settings.closed).on("closed.fndtn.reveal",this.close_video):d(this.scope).on("open.fndtn.reveal","["+b.attr_name()+"]",this.settings.open).on("opened.fndtn.reveal","["+b.attr_name()+"]",this.settings.opened).on("opened.fndtn.reveal","["+b.attr_name()+"]",this.open_video).on("close.fndtn.reveal","["+b.attr_name()+"]",this.settings.close).on("closed.fndtn.reveal","["+b.attr_name()+"]",this.settings.closed).on("closed.fndtn.reveal","["+b.attr_name()+"]",this.close_video),!0},key_up_on:function(a){var b=this;return b.S("body").off("keyup.fndtn.reveal").on("keyup.fndtn.reveal",function(a){var c=b.S("["+b.attr_name()+"].open"),d=c.data(b.attr_name(!0)+"-init")||b.settings;d&&27===a.which&&d.close_on_esc&&!b.locked&&b.close.call(b,c)}),!0},key_up_off:function(a){return this.S("body").off("keyup.fndtn.reveal"),!0},open:function(c,e){var g,h=this;c?"undefined"!=typeof c.selector?g=h.S("#"+c.data(h.data_attr("reveal-id"))).first():(g=h.S(this.scope),e=c):g=h.S(this.scope);var i=g.data(h.attr_name(!0)+"-init");if(i=i||this.settings,g.hasClass("open")&&c!==d&&c.attr("data-reveal-id")==g.attr("id"))return h.close(g);if(!g.hasClass("open")){var j=h.S("["+h.attr_name()+"].open");"undefined"==typeof g.data("css-top")&&g.data("css-top",parseInt(g.css("top"),10)).data("offset",this.cache_offset(g)),g.attr("tabindex","0").attr("aria-hidden","false"),this.key_up_on(g),g.on("open.fndtn.reveal",function(a){"fndtn.reveal"!==a.namespace}),g.on("open.fndtn.reveal").trigger("open.fndtn.reveal"),j.length<1&&this.toggle_bg(g,!0),"string"==typeof e&&(e={url:e});var k=function(){j.length>0&&(i.multiple_opened?h.to_back(j):h.hide(j,i.css.close)),i.multiple_opened&&f.push(g),h.show(g,i.css.open)};if("undefined"!=typeof e&&e.url){var l="undefined"!=typeof e.success?e.success:null;a.extend(e,{success:function(b,c,d){if(a.isFunction(l)){var e=l(b,c,d);"string"==typeof e&&(b=e)}"undefined"!=typeof options&&"undefined"!=typeof options.replaceContentSel?g.find(options.replaceContentSel).html(b):g.html(b),h.S(g).foundation("section","reflow"),h.S(g).children().foundation(),k()}}),i.on_ajax_error!==a.noop&&a.extend(e,{error:i.on_ajax_error}),a.ajax(e)}else k()}h.S(b).trigger("resize")},close:function(b){var b=b&&b.length?b:this.S(this.scope),c=this.S("["+this.attr_name()+"].open"),d=b.data(this.attr_name(!0)+"-init")||this.settings,e=this;if(c.length>0)if(b.removeAttr("tabindex","0").attr("aria-hidden","true"),this.locked=!0,this.key_up_off(b),b.trigger("close.fndtn.reveal"),(d.multiple_opened&&1===c.length||!d.multiple_opened||b.length>1)&&(e.toggle_bg(b,!1),e.to_front(b)),d.multiple_opened){var g=b.is(":not(.toback)");e.hide(b,d.css.close,d),g?f.pop():f=a.grep(f,function(a){var c=a[0]===b[0];return c&&e.to_front(b),!c}),f.length>0&&e.to_front(f[f.length-1])}else e.hide(c,d.css.close,d)},close_targets:function(){var a="."+this.settings.dismiss_modal_class;return this.settings.close_on_background_click?a+", ."+this.settings.bg_class:a},toggle_bg:function(b,c){0===this.S("."+this.settings.bg_class).length&&(this.settings.bg=a("<div />",{"class":this.settings.bg_class}).appendTo("body").hide());var e=this.settings.bg.filter(":visible").length>0;c!=e&&((c==d?e:!c)?this.hide(this.settings.bg):this.show(this.settings.bg))},show:function(c,d){if(d){var f=c.data(this.attr_name(!0)+"-init")||this.settings,g=f.root_element,h=this;if(0===c.parent(g).length){var i=c.wrap('<div style="display: none;" />').parent();c.on("closed.fndtn.reveal.wrapped",function(){c.detach().appendTo(i),c.unwrap().unbind("closed.fndtn.reveal.wrapped")}),c.detach().appendTo(g)}var j=e(f.animation);if(j.animate||(this.locked=!1),j.pop){d.top=a(b).scrollTop()-c.data("offset")+"px";var k={top:a(b).scrollTop()+c.data("css-top")+"px",opacity:1};return setTimeout(function(){return c.css(d).animate(k,f.animation_speed,"linear",function(){h.locked=!1,c.trigger("opened.fndtn.reveal")}).addClass("open")},f.animation_speed/2)}if(d.top=a(b).scrollTop()+c.data("css-top")+"px",j.fade){var k={opacity:1};return setTimeout(function(){return c.css(d).animate(k,f.animation_speed,"linear",function(){h.locked=!1,c.trigger("opened.fndtn.reveal")}).addClass("open")},f.animation_speed/2)}return c.css(d).show().css({opacity:1}).addClass("open").trigger("opened.fndtn.reveal")}var f=this.settings;return e(f.animation).fade?c.fadeIn(f.animation_speed/2):(this.locked=!1,c.show())},to_back:function(a){a.addClass("toback")},to_front:function(a){a.removeClass("toback")},hide:function(c,d){if(d){var f=c.data(this.attr_name(!0)+"-init"),g=this;f=f||this.settings;var h=e(f.animation);if(h.animate||(this.locked=!1),h.pop){var i={top:-a(b).scrollTop()-c.data("offset")+"px",opacity:0};return setTimeout(function(){return c.animate(i,f.animation_speed,"linear",function(){g.locked=!1,c.css(d).trigger("closed.fndtn.reveal")}).removeClass("open")},f.animation_speed/2)}if(h.fade){var i={opacity:0};return setTimeout(function(){return c.animate(i,f.animation_speed,"linear",function(){g.locked=!1,c.css(d).trigger("closed.fndtn.reveal")}).removeClass("open")},f.animation_speed/2)}return c.hide().css(d).removeClass("open").trigger("closed.fndtn.reveal")}var f=this.settings;return e(f.animation).fade?c.fadeOut(f.animation_speed/2):c.hide()},close_video:function(b){var c=a(".flex-video",b.target),d=a("iframe",c);d.length>0&&(d.attr("data-src",d[0].src),d.attr("src",d.attr("src")),c.hide())},open_video:function(b){var c=a(".flex-video",b.target),e=c.find("iframe");if(e.length>0){var f=e.attr("data-src");if("string"==typeof f)e[0].src=e.attr("data-src");else{var g=e[0].src;e[0].src=d,e[0].src=g}c.show()}},data_attr:function(a){return this.namespace.length>0?this.namespace+"-"+a:a},cache_offset:function(a){var b=a.show().height()+parseInt(a.css("top"),10)+a.scrollY;return a.hide(),b},off:function(){a(this.scope).off(".fndtn.reveal")},reflow:function(){}}}(jQuery,window,window.document),function(a,b,c,d){"use strict";Foundation.libs.slider={name:"slider",version:"5.5.3",settings:{start:0,end:100,step:1,precision:2,initial:null,display_selector:"",vertical:!1,trigger_input_change:!1,on_change:function(){}},cache:{},init:function(a,b,c){Foundation.inherit(this,"throttle"),this.bindings(b,c),this.reflow()},events:function(){var c=this;a(this.scope).off(".slider").on("mousedown.fndtn.slider touchstart.fndtn.slider pointerdown.fndtn.slider","["+c.attr_name()+"]:not(.disabled, [disabled]) .range-slider-handle",function(b){c.cache.active||(b.preventDefault(),c.set_active_slider(a(b.target)))}).on("mousemove.fndtn.slider touchmove.fndtn.slider pointermove.fndtn.slider",function(d){if(c.cache.active)if(d.preventDefault(),a.data(c.cache.active[0],"settings").vertical){var e=0;d.pageY||(e=b.scrollY),c.calculate_position(c.cache.active,c.get_cursor_position(d,"y")+e)}else c.calculate_position(c.cache.active,c.get_cursor_position(d,"x"))}).on("mouseup.fndtn.slider touchend.fndtn.slider pointerup.fndtn.slider",function(d){if(!c.cache.active){var e="slider"===a(d.target).attr("role")?a(d.target):a(d.target).closest(".range-slider").find("[role='slider']");if(e.length&&!e.parent().hasClass("disabled")&&!e.parent().attr("disabled"))if(c.set_active_slider(e),a.data(c.cache.active[0],"settings").vertical){var f=0;d.pageY||(f=b.scrollY),c.calculate_position(c.cache.active,c.get_cursor_position(d,"y")+f)}else c.calculate_position(c.cache.active,c.get_cursor_position(d,"x"))}c.remove_active_slider()}).on("change.fndtn.slider",function(a){c.settings.on_change()}),c.S(b).on("resize.fndtn.slider",c.throttle(function(a){c.reflow()},300)),this.S("["+this.attr_name()+"]").each(function(){var b=a(this),d=b.children(".range-slider-handle")[0],e=c.initialize_settings(d);""!=e.display_selector&&a(e.display_selector).each(function(){a(this).attr("value")&&a(this).off("change").on("change",function(){b.foundation("slider","set_value",a(this).val())})})})},get_cursor_position:function(a,b){var c,d="page"+b.toUpperCase(),e="client"+b.toUpperCase();return"undefined"!=typeof a[d]?c=a[d]:"undefined"!=typeof a.originalEvent[e]?c=a.originalEvent[e]:a.originalEvent.touches&&a.originalEvent.touches[0]&&"undefined"!=typeof a.originalEvent.touches[0][e]?c=a.originalEvent.touches[0][e]:a.currentPoint&&"undefined"!=typeof a.currentPoint[b]&&(c=a.currentPoint[b]),c},set_active_slider:function(a){this.cache.active=a},remove_active_slider:function(){this.cache.active=null},calculate_position:function(b,c){var d=this,e=a.data(b[0],"settings"),f=(a.data(b[0],"handle_l"),a.data(b[0],"handle_o"),a.data(b[0],"bar_l")),g=a.data(b[0],"bar_o");requestAnimationFrame(function(){var a;a=Foundation.rtl&&!e.vertical?d.limit_to((g+f-c)/f,0,1):d.limit_to((c-g)/f,0,1),a=e.vertical?1-a:a;var h=d.normalized_value(a,e.start,e.end,e.step,e.precision);d.set_ui(b,h)})},set_ui:function(b,c){var d=a.data(b[0],"settings"),e=a.data(b[0],"handle_l"),f=a.data(b[0],"bar_l"),g=this.normalized_percentage(c,d.start,d.end),h=g*(f-e)-1,i=100*g,j=b.parent(),k=b.parent().children("input[type=hidden]");Foundation.rtl&&!d.vertical&&(h=-h),h=d.vertical?-h+f-e+1:h,this.set_translate(b,h,d.vertical),d.vertical?b.siblings(".range-slider-active-segment").css("height",i+"%"):b.siblings(".range-slider-active-segment").css("width",i+"%"),j.attr(this.attr_name(),c).trigger("change.fndtn.slider"),k.val(c),d.trigger_input_change&&k.trigger("change.fndtn.slider"),b[0].hasAttribute("aria-valuemin")||b.attr({"aria-valuemin":d.start,"aria-valuemax":d.end}),b.attr("aria-valuenow",c),""!=d.display_selector&&a(d.display_selector).each(function(){this.hasAttribute("value")?a(this).val(c):a(this).text(c)})},normalized_percentage:function(a,b,c){return Math.min(1,(a-b)/(c-b))},normalized_value:function(a,b,c,d,e){var f=c-b,g=a*f,h=(g-g%d)/d,i=g%d,j=i>=.5*d?d:0;return(h*d+j+b).toFixed(e)},set_translate:function(b,c,d){d?a(b).css("-webkit-transform","translateY("+c+"px)").css("-moz-transform","translateY("+c+"px)").css("-ms-transform","translateY("+c+"px)").css("-o-transform","translateY("+c+"px)").css("transform","translateY("+c+"px)"):a(b).css("-webkit-transform","translateX("+c+"px)").css("-moz-transform","translateX("+c+"px)").css("-ms-transform","translateX("+c+"px)").css("-o-transform","translateX("+c+"px)").css("transform","translateX("+c+"px)")},limit_to:function(a,b,c){return Math.min(Math.max(a,b),c)},initialize_settings:function(b){var c,d=a.extend({},this.settings,this.data_options(a(b).parent()));return null===d.precision&&(c=(""+d.step).match(/\.([\d]*)/),d.precision=c&&c[1]?c[1].length:0),d.vertical?(a.data(b,"bar_o",a(b).parent().offset().top),a.data(b,"bar_l",a(b).parent().outerHeight()),a.data(b,"handle_o",a(b).offset().top),a.data(b,"handle_l",a(b).outerHeight())):(a.data(b,"bar_o",a(b).parent().offset().left),a.data(b,"bar_l",a(b).parent().outerWidth()),a.data(b,"handle_o",a(b).offset().left),a.data(b,"handle_l",a(b).outerWidth())),a.data(b,"bar",a(b).parent()),a.data(b,"settings",d)},set_initial_position:function(b){var c=a.data(b.children(".range-slider-handle")[0],"settings"),d="number"!=typeof c.initial||isNaN(c.initial)?Math.floor(.5*(c.end-c.start)/c.step)*c.step+c.start:c.initial,e=b.children(".range-slider-handle");this.set_ui(e,d)},set_value:function(b){var c=this;a("["+c.attr_name()+"]",this.scope).each(function(){a(this).attr(c.attr_name(),b)}),a(this.scope).attr(c.attr_name())&&a(this.scope).attr(c.attr_name(),b),c.reflow()},reflow:function(){var b=this;b.S("["+this.attr_name()+"]").each(function(){var c=a(this).children(".range-slider-handle")[0],d=a(this).attr(b.attr_name());b.initialize_settings(c),d?b.set_ui(a(c),parseFloat(d)):b.set_initial_position(a(this))})}}}(jQuery,window,window.document),function(a,b,c,d){"use strict";Foundation.libs.tab={name:"tab",version:"5.5.3",settings:{active_class:"active",callback:function(){},deep_linking:!1,scroll_to_content:!0,is_hover:!1},default_tab_hashes:[],init:function(a,b,c){var d=this,e=this.S;e("["+this.attr_name()+"] > .active > a",this.scope).each(function(){d.default_tab_hashes.push(this.hash)}),this.bindings(b,c),this.handle_location_hash_change()},events:function(){var a=this,c=this.S,d=function(b,d){var e=c(d).closest("["+a.attr_name()+"]").data(a.attr_name(!0)+"-init");if(!e.is_hover||Modernizr.touch){var f=b.keyCode||b.which;9!==f&&(b.preventDefault(),b.stopPropagation()),a.toggle_active_tab(c(d).parent())}};c(this.scope).off(".tab").on("keydown.fndtn.tab","["+this.attr_name()+"] > * > a",function(a){var b=a.keyCode||a.which;if(13===b||32===b){var c=this;d(a,c)}}).on("click.fndtn.tab","["+this.attr_name()+"] > * > a",function(a){var b=this;d(a,b)}).on("mouseenter.fndtn.tab","["+this.attr_name()+"] > * > a",function(b){var d=c(this).closest("["+a.attr_name()+"]").data(a.attr_name(!0)+"-init");d.is_hover&&a.toggle_active_tab(c(this).parent())}),c(b).on("hashchange.fndtn.tab",function(b){b.preventDefault(),a.handle_location_hash_change()})},handle_location_hash_change:function(){var b=this,c=this.S;c("["+this.attr_name()+"]",this.scope).each(function(){var e=c(this).data(b.attr_name(!0)+"-init");if(e.deep_linking){var f;if(f=e.scroll_to_content?b.scope.location.hash:b.scope.location.hash.replace("fndtn-",""),""!=f){var g=c(f);if(g.hasClass("content")&&g.parent().hasClass("tabs-content"))b.toggle_active_tab(a("["+b.attr_name()+"] > * > a[href="+f+"]").parent());else{var h=g.closest(".content").attr("id");h!=d&&b.toggle_active_tab(a("["+b.attr_name()+"] > * > a[href=#"+h+"]").parent(),f)}}else for(var i=0;i<b.default_tab_hashes.length;i++)b.toggle_active_tab(a("["+b.attr_name()+"] > * > a[href="+b.default_tab_hashes[i]+"]").parent())}})},toggle_active_tab:function(e,f){var g=this,h=g.S,i=e.closest("["+this.attr_name()+"]"),j=e.find("a"),k=e.children("a").first(),l="#"+k.attr("href").split("#")[1],m=h(l),n=e.siblings(),o=i.data(this.attr_name(!0)+"-init"),p=function(b){var d,e=a(this),f=a(this).parents("li").prev().children('[role="tab"]'),g=a(this).parents("li").next().children('[role="tab"]');switch(b.keyCode){case 37:d=f;break;case 39:d=g;break;default:d=!1}d.length&&(e.attr({tabindex:"-1","aria-selected":null}),d.attr({tabindex:"0","aria-selected":!0}).focus()),a('[role="tabpanel"]').attr("aria-hidden","true"),a("#"+a(c.activeElement).attr("href").substring(1)).attr("aria-hidden",null)},q=function(a){var c=o.scroll_to_content?g.default_tab_hashes[0]:"fndtn-"+g.default_tab_hashes[0].replace("#","");(a!==c||b.location.hash)&&(b.location.hash=a)};k.data("tab-content")&&(l="#"+k.data("tab-content").split("#")[1],m=h(l)),o.deep_linking&&(o.scroll_to_content?(q(f||l),f==d||f==l?e.parent()[0].scrollIntoView():h(l)[0].scrollIntoView()):q(f!=d?"fndtn-"+f.replace("#",""):"fndtn-"+l.replace("#",""))),e.addClass(o.active_class).triggerHandler("opened"),j.attr({"aria-selected":"true",tabindex:0}),n.removeClass(o.active_class),n.find("a").attr({"aria-selected":"false"}),m.siblings().removeClass(o.active_class).attr({"aria-hidden":"true"}),m.addClass(o.active_class).attr("aria-hidden","false").removeAttr("tabindex"),o.callback(e),m.triggerHandler("toggled",[m]),i.triggerHandler("toggled",[e]),j.off("keydown").on("keydown",p)},data_attr:function(a){return this.namespace.length>0?this.namespace+"-"+a:a},off:function(){},reflow:function(){}}}(jQuery,window,window.document),function(a,b,c,d){"use strict";Foundation.libs.tooltip={name:"tooltip",version:"5.5.3",settings:{additional_inheritable_classes:[],tooltip_class:".tooltip",append_to:"body",touch_close_text:"Tap To Close",disable_for_touch:!1,hover_delay:200,fade_in_duration:150,fade_out_duration:150,show_on:"all",tip_template:function(a,b){return'<span data-selector="'+a+'" id="'+a+'" class="'+Foundation.libs.tooltip.settings.tooltip_class.substring(1)+'" role="tooltip">'+b+'<span class="nub"></span></span>'}},cache:{},init:function(a,b,c){Foundation.inherit(this,"random_str"),this.bindings(b,c)},should_show:function(b,c){var d=a.extend({},this.settings,this.data_options(b));return"all"===d.show_on?!0:this.small()&&"small"===d.show_on?!0:this.medium()&&"medium"===d.show_on?!0:this.large()&&"large"===d.show_on?!0:!1},medium:function(){return matchMedia(Foundation.media_queries.medium).matches},large:function(){return matchMedia(Foundation.media_queries.large).matches},events:function(b){function c(a,b,c){a.timer||(c?(a.timer=null,e.showTip(b)):a.timer=setTimeout(function(){a.timer=null,e.showTip(b)}.bind(a),e.settings.hover_delay))}function d(a,b){a.timer&&(clearTimeout(a.timer),a.timer=null),e.hide(b)}var e=this,f=e.S;e.create(this.S(b)),a(this.scope).off(".tooltip").on("mouseenter.fndtn.tooltip mouseleave.fndtn.tooltip touchstart.fndtn.tooltip MSPointerDown.fndtn.tooltip","["+this.attr_name()+"]",function(b){var g=f(this),h=a.extend({},e.settings,e.data_options(g)),i=!1;if(Modernizr.touch&&/touchstart|MSPointerDown/i.test(b.type)&&f(b.target).is("a"))return!1;if(/mouse/i.test(b.type)&&e.ie_touch(b))return!1;if(g.hasClass("open"))Modernizr.touch&&/touchstart|MSPointerDown/i.test(b.type)&&b.preventDefault(),e.hide(g);else{if(h.disable_for_touch&&Modernizr.touch&&/touchstart|MSPointerDown/i.test(b.type))return;if(!h.disable_for_touch&&Modernizr.touch&&/touchstart|MSPointerDown/i.test(b.type)&&(b.preventDefault(),f(h.tooltip_class+".open").hide(),i=!0,a(".open["+e.attr_name()+"]").length>0)){var j=f(a(".open["+e.attr_name()+"]")[0]);e.hide(j)}/enter|over/i.test(b.type)?c(this,g):"mouseout"===b.type||"mouseleave"===b.type?d(this,g):c(this,g,!0)}}).on("mouseleave.fndtn.tooltip touchstart.fndtn.tooltip MSPointerDown.fndtn.tooltip","["+this.attr_name()+"].open",function(b){return/mouse/i.test(b.type)&&e.ie_touch(b)?!1:void(("touch"!=a(this).data("tooltip-open-event-type")||"mouseleave"!=b.type)&&("mouse"==a(this).data("tooltip-open-event-type")&&/MSPointerDown|touchstart/i.test(b.type)?e.convert_to_touch(a(this)):d(this,a(this))))}).on("DOMNodeRemoved DOMAttrModified","["+this.attr_name()+"]:not(a)",function(a){d(this,f(this))})},ie_touch:function(a){return!1},showTip:function(a){var b=this.getTip(a);return this.should_show(a,b)?this.show(a):void 0},getTip:function(b){var c=this.selector(b),d=a.extend({},this.settings,this.data_options(b)),e=null;return c&&(e=this.S('span[data-selector="'+c+'"]'+d.tooltip_class)),"object"==typeof e?e:!1},selector:function(a){var b=a.attr(this.attr_name())||a.attr("data-selector");return"string"!=typeof b&&(b=this.random_str(6),a.attr("data-selector",b).attr("aria-describedby",b)),b},create:function(c){var d=this,e=a.extend({},this.settings,this.data_options(c)),f=this.settings.tip_template;"string"==typeof e.tip_template&&b.hasOwnProperty(e.tip_template)&&(f=b[e.tip_template]);
+var g=a(f(this.selector(c),a("<div></div>").html(c.attr("title")).html())),h=this.inheritable_classes(c);g.addClass(h).appendTo(e.append_to),Modernizr.touch&&(g.append('<span class="tap-to-close">'+e.touch_close_text+"</span>"),g.on("touchstart.fndtn.tooltip MSPointerDown.fndtn.tooltip",function(a){d.hide(c)})),c.removeAttr("title").attr("title","")},reposition:function(b,c,d){var e,f,g,h,i;c.css("visibility","hidden").show(),e=b.data("width"),f=c.children(".nub"),g=f.outerHeight(),h=f.outerWidth(),this.small()?c.css({width:"100%"}):c.css({width:e?e:"auto"}),i=function(a,b,c,d,e,f){return a.css({top:b?b:"auto",bottom:d?d:"auto",left:e?e:"auto",right:c?c:"auto"}).end()};var j=b.offset().top,k=b.offset().left,l=b.outerHeight();if(i(c,j+l+10,"auto","auto",k),this.small())i(c,j+l+10,"auto","auto",12.5,a(this.scope).width()),c.addClass("tip-override"),i(f,-g,"auto","auto",k);else{Foundation.rtl&&(f.addClass("rtl"),k=k+b.outerWidth()-c.outerWidth()),i(c,j+l+10,"auto","auto",k),f.attr("style")&&f.removeAttr("style"),c.removeClass("tip-override");var m=c.outerHeight();d&&d.indexOf("tip-top")>-1?(Foundation.rtl&&f.addClass("rtl"),i(c,j-m,"auto","auto",k).removeClass("tip-override")):d&&d.indexOf("tip-left")>-1?(i(c,j+l/2-m/2,"auto","auto",k-c.outerWidth()-g).removeClass("tip-override"),f.removeClass("rtl")):d&&d.indexOf("tip-right")>-1&&(i(c,j+l/2-m/2,"auto","auto",k+b.outerWidth()+g).removeClass("tip-override"),f.removeClass("rtl"))}c.css("visibility","visible").hide()},small:function(){return matchMedia(Foundation.media_queries.small).matches&&!matchMedia(Foundation.media_queries.medium).matches},inheritable_classes:function(b){var c=a.extend({},this.settings,this.data_options(b)),d=["tip-top","tip-left","tip-bottom","tip-right","radius","round"].concat(c.additional_inheritable_classes),e=b.attr("class"),f=e?a.map(e.split(" "),function(b,c){return-1!==a.inArray(b,d)?b:void 0}).join(" "):"";return a.trim(f)},convert_to_touch:function(b){var c=this,d=c.getTip(b),e=a.extend({},c.settings,c.data_options(b));0===d.find(".tap-to-close").length&&(d.append('<span class="tap-to-close">'+e.touch_close_text+"</span>"),d.on("click.fndtn.tooltip.tapclose touchstart.fndtn.tooltip.tapclose MSPointerDown.fndtn.tooltip.tapclose",function(a){c.hide(b)})),b.data("tooltip-open-event-type","touch")},show:function(a){var b=this.getTip(a);"touch"==a.data("tooltip-open-event-type")&&this.convert_to_touch(a),this.reposition(a,b,a.attr("class")),a.addClass("open"),b.fadeIn(this.settings.fade_in_duration)},hide:function(a){var b=this.getTip(a);b.fadeOut(this.settings.fade_out_duration,function(){b.find(".tap-to-close").remove(),b.off("click.fndtn.tooltip.tapclose MSPointerDown.fndtn.tapclose"),a.removeClass("open")})},off:function(){var b=this;this.S(this.scope).off(".fndtn.tooltip"),this.S(this.settings.tooltip_class).each(function(c){a("["+b.attr_name()+"]").eq(c).attr("title",a(this).text())}).remove()},reflow:function(){}}}(jQuery,window,window.document),function(a,b,c,d){"use strict";Foundation.libs.topbar={name:"topbar",version:"5.5.3",settings:{index:0,start_offset:0,sticky_class:"sticky",custom_back_text:!0,back_text:"Back",mobile_show_parent_link:!0,is_hover:!0,scrolltop:!0,sticky_on:"all",dropdown_autoclose:!0},init:function(b,c,d){Foundation.inherit(this,"add_custom_rule register_media throttle");var e=this;e.register_media("topbar","foundation-mq-topbar"),this.bindings(c,d),e.S("["+this.attr_name()+"]",this.scope).each(function(){var b=a(this),c=b.data(e.attr_name(!0)+"-init");e.S("section, .top-bar-section",this);b.data("index",0);var d=b.parent();d.hasClass("fixed")||e.is_sticky(b,d,c)?(e.settings.sticky_class=c.sticky_class,e.settings.sticky_topbar=b,b.data("height",d.outerHeight()),b.data("stickyoffset",d.offset().top)):b.data("height",b.outerHeight()),c.assembled||e.assemble(b),c.is_hover?e.S(".has-dropdown",b).addClass("not-click"):e.S(".has-dropdown",b).removeClass("not-click"),e.add_custom_rule(".f-topbar-fixed { padding-top: "+b.data("height")+"px }"),d.hasClass("fixed")&&e.S("body").addClass("f-topbar-fixed")})},is_sticky:function(a,b,c){var d=b.hasClass(c.sticky_class),e=matchMedia(Foundation.media_queries.small).matches,f=matchMedia(Foundation.media_queries.medium).matches,g=matchMedia(Foundation.media_queries.large).matches;return d&&"all"===c.sticky_on?!0:d&&this.small()&&-1!==c.sticky_on.indexOf("small")&&e&&!f&&!g?!0:d&&this.medium()&&-1!==c.sticky_on.indexOf("medium")&&e&&f&&!g?!0:d&&this.large()&&-1!==c.sticky_on.indexOf("large")&&e&&f&&g?!0:!1},toggle:function(c){var d,e=this;d=c?e.S(c).closest("["+this.attr_name()+"]"):e.S("["+this.attr_name()+"]");var f=d.data(this.attr_name(!0)+"-init"),g=e.S("section, .top-bar-section",d);e.breakpoint()&&(e.rtl?(g.css({right:"0%"}),a(">.name",g).css({right:"100%"})):(g.css({left:"0%"}),a(">.name",g).css({left:"100%"})),e.S("li.moved",g).removeClass("moved"),d.data("index",0),d.toggleClass("expanded").css("height","")),f.scrolltop?d.hasClass("expanded")?d.parent().hasClass("fixed")&&(f.scrolltop?(d.parent().removeClass("fixed"),d.addClass("fixed"),e.S("body").removeClass("f-topbar-fixed"),b.scrollTo(0,0)):d.parent().removeClass("expanded")):d.hasClass("fixed")&&(d.parent().addClass("fixed"),d.removeClass("fixed"),e.S("body").addClass("f-topbar-fixed")):(e.is_sticky(d,d.parent(),f)&&d.parent().addClass("fixed"),d.parent().hasClass("fixed")&&(d.hasClass("expanded")?(d.addClass("fixed"),d.parent().addClass("expanded"),e.S("body").addClass("f-topbar-fixed")):(d.removeClass("fixed"),d.parent().removeClass("expanded"),e.update_sticky_positioning())))},timer:null,events:function(c){var d=this,e=this.S;e(this.scope).off(".topbar").on("click.fndtn.topbar","["+this.attr_name()+"] .toggle-topbar",function(a){a.preventDefault(),d.toggle(this)}).on("click.fndtn.topbar contextmenu.fndtn.topbar",'.top-bar .top-bar-section li a[href^="#"],['+this.attr_name()+'] .top-bar-section li a[href^="#"]',function(b){var c=a(this).closest("li"),e=c.closest("["+d.attr_name()+"]"),f=e.data(d.attr_name(!0)+"-init");if(f.dropdown_autoclose&&f.is_hover){var g=a(this).closest(".hover");g.removeClass("hover")}!d.breakpoint()||c.hasClass("back")||c.hasClass("has-dropdown")||d.toggle()}).on("click.fndtn.topbar","["+this.attr_name()+"] li.has-dropdown",function(b){var c=e(this),f=e(b.target),g=c.closest("["+d.attr_name()+"]"),h=g.data(d.attr_name(!0)+"-init");return f.data("revealId")?void d.toggle():void(d.breakpoint()||(!h.is_hover||Modernizr.touch)&&(b.stopImmediatePropagation(),c.hasClass("hover")?(c.removeClass("hover").find("li").removeClass("hover"),c.parents("li.hover").removeClass("hover")):(c.addClass("hover"),a(c).siblings().removeClass("hover"),"A"===f[0].nodeName&&f.parent().hasClass("has-dropdown")&&b.preventDefault())))}).on("click.fndtn.topbar","["+this.attr_name()+"] .has-dropdown>a",function(a){if(d.breakpoint()){a.preventDefault();var b=e(this),c=b.closest("["+d.attr_name()+"]"),f=c.find("section, .top-bar-section"),g=(b.next(".dropdown").outerHeight(),b.closest("li"));c.data("index",c.data("index")+1),g.addClass("moved"),d.rtl?(f.css({right:-(100*c.data("index"))+"%"}),f.find(">.name").css({right:100*c.data("index")+"%"})):(f.css({left:-(100*c.data("index"))+"%"}),f.find(">.name").css({left:100*c.data("index")+"%"})),c.css("height",b.siblings("ul").outerHeight(!0)+c.data("height"))}}),e(b).off(".topbar").on("resize.fndtn.topbar",d.throttle(function(){d.resize.call(d)},50)).trigger("resize.fndtn.topbar").load(function(){e(this).trigger("resize.fndtn.topbar")}),e("body").off(".topbar").on("click.fndtn.topbar",function(a){var b=e(a.target).closest("li").closest("li.hover");b.length>0||e("["+d.attr_name()+"] li.hover").removeClass("hover")}),e(this.scope).on("click.fndtn.topbar","["+this.attr_name()+"] .has-dropdown .back",function(a){a.preventDefault();var b=e(this),c=b.closest("["+d.attr_name()+"]"),f=c.find("section, .top-bar-section"),g=(c.data(d.attr_name(!0)+"-init"),b.closest("li.moved")),h=g.parent();c.data("index",c.data("index")-1),d.rtl?(f.css({right:-(100*c.data("index"))+"%"}),f.find(">.name").css({right:100*c.data("index")+"%"})):(f.css({left:-(100*c.data("index"))+"%"}),f.find(">.name").css({left:100*c.data("index")+"%"})),0===c.data("index")?c.css("height",""):c.css("height",h.outerHeight(!0)+c.data("height")),setTimeout(function(){g.removeClass("moved")},300)}),e(this.scope).find(".dropdown a").focus(function(){a(this).parents(".has-dropdown").addClass("hover")}).blur(function(){a(this).parents(".has-dropdown").removeClass("hover")})},resize:function(){var a=this;a.S("["+this.attr_name()+"]").each(function(){var b,d=a.S(this),e=d.data(a.attr_name(!0)+"-init"),f=d.parent("."+a.settings.sticky_class);if(!a.breakpoint()){var g=d.hasClass("expanded");d.css("height","").removeClass("expanded").find("li").removeClass("hover"),g&&a.toggle(d)}a.is_sticky(d,f,e)&&(f.hasClass("fixed")?(f.removeClass("fixed"),b=f.offset().top,a.S(c.body).hasClass("f-topbar-fixed")&&(b-=d.data("height")),d.data("stickyoffset",b),f.addClass("fixed")):(b=f.offset().top,d.data("stickyoffset",b)))})},breakpoint:function(){return!matchMedia(Foundation.media_queries.topbar).matches},small:function(){return matchMedia(Foundation.media_queries.small).matches},medium:function(){return matchMedia(Foundation.media_queries.medium).matches},large:function(){return matchMedia(Foundation.media_queries.large).matches},assemble:function(b){var c=this,d=b.data(this.attr_name(!0)+"-init"),e=c.S("section, .top-bar-section",b);e.detach(),c.S(".has-dropdown>a",e).each(function(){var b,e=c.S(this),f=e.siblings(".dropdown"),g=e.attr("href");f.find(".title.back").length||(b=a(1==d.mobile_show_parent_link&&g?'<li class="title back js-generated"><h5><a href="javascript:void(0)"></a></h5></li><li class="parent-link hide-for-medium-up"><a class="parent-link js-generated" href="'+g+'">'+e.html()+"</a></li>":'<li class="title back js-generated"><h5><a href="javascript:void(0)"></a></h5>'),1==d.custom_back_text?a("h5>a",b).html(d.back_text):a("h5>a",b).html("&laquo; "+e.html()),f.prepend(b))}),e.appendTo(b),this.sticky(),this.assembled(b)},assembled:function(b){b.data(this.attr_name(!0),a.extend({},b.data(this.attr_name(!0)),{assembled:!0}))},height:function(b){var c=0,d=this;return a("> li",b).each(function(){c+=d.S(this).outerHeight(!0)}),c},sticky:function(){var a=this;this.S(b).on("scroll",function(){a.update_sticky_positioning()})},update_sticky_positioning:function(){var a="."+this.settings.sticky_class,c=this.S(b),d=this;if(d.settings.sticky_topbar&&d.is_sticky(this.settings.sticky_topbar,this.settings.sticky_topbar.parent(),this.settings)){var e=this.settings.sticky_topbar.data("stickyoffset")+this.settings.start_offset;d.S(a).hasClass("expanded")||(c.scrollTop()>e?d.S(a).hasClass("fixed")||(d.S(a).addClass("fixed"),d.S("body").addClass("f-topbar-fixed")):c.scrollTop()<=e&&d.S(a).hasClass("fixed")&&(d.S(a).removeClass("fixed"),d.S("body").removeClass("f-topbar-fixed")))}},off:function(){this.S(this.scope).off(".fndtn.topbar"),this.S(b).off(".fndtn.topbar")},reflow:function(){}}}(jQuery,window,window.document);;// Load foundation
+$(document).foundation();
+$(document).ready(function () {
+    var page            = $("body");
+    $('ul.children').each(function () {
+        $(this).before('<a class="toggle" href="#"></a>');
+    });
+    $('a.toggle').click('click', function () {
+        $(this).toggleClass('open');
+        $(this).siblings('ul').toggleClass('open');
+    });
+    $('.top-bar-section').find('ul.sub-menu.dropdown').each(function (){
+        var menuImg = $(this).parent('li').prop('id');
+        var menuNum = menuImg.match(/\d+/)[0];
+        var menuImgSrc = 'img_for_menu_' + menuNum;
+        if (window['img_for_menu_' + menuNum]) {
+            $(this).find('li.image-placeholder').html('<img src="' + eval(menuImgSrc) + '">');
+        } else {
+            $(this).find('li.image-placeholder').parent('ul').addClass('no-image-subul');
+            $(this).find('li.image-placeholder').remove();
+        }
+        //console.log('ul = ' + menuImg);
+        //console.log('menu-id = ' + menuNum);
+    });
+    $("[data-fancybox]").fancybox({
+        iframe : {
+            css : {
+                width : '600px'
+            }
+        }
+    });
+//
+//    $("a.glm-block-image.fancybox").fancybox({
+//
+//         helpers: {
+//            overlay: { locked: false },
+//             title: { type: 'inside'},
+//        },
+//        afterLoad: function(){
+//            this.title = $(this.element).find('img').attr('alt');
+//        }
+//    });
+
+
+    // weather widget hover effect
+     $('#activate-weather')
+      .mouseover(function() {
+         $('#weather-widget').slideDown();
+     })
+      .mouseout(function() {
+         $('#weather-widget').slideUp();
+     });
+
+
+    var submenus = page.find("#menu-main-navigation .sub-menu");
+    submenus.each(function() {
+        if ($(this).children().length > 6) {
+            $(this).addClass("submenu-two-columns");
+        }
+    });
+
+    var event_feed = $("#feed");
+    event_feed.addClass("feed");
+    event_feed.children("div").addClass("feed-block");
+
+    function check_window_width(){
+
+        if($(window).width() > 1023){
+            if($(".feed").hasClass('slick-initialized') ) {
+               $(".feed").slick('unslick');
+            }
+            $(".feed").slick({
+                infinite: true,
+                slidesToShow: 4,
+                slidesToScroll: 1,
+                arrows: true,
+
+            });
+
+        } else if($(window).width() < 1025 && $(window).width() > 639){
+             if($(".feed").hasClass('slick-initialized') ) {
+               $(".feed").slick('unslick');
+            }
+             $(".feed").slick({
+                infinite: true,
+                slidesToShow: 2,
+                slidesToScroll: 1
+            });
+        } else if($(window).width() < 641 && $(window).width() > 319){
+             if($(".feed").hasClass('slick-initialized') ) {
+                $(".feed").slick('unslick');
+             }
+             $(".feed").slick({
+                infinite: true,
+                slidesToShow: 1,
+                slidesToScroll: 1
+            });
+        }
+    }
+
+    check_window_width();
+    $(window).resize(function () {
+        check_window_width();
+    });
+
+
+});
diff --git a/js/custom.js b/js/custom.js
deleted file mode 100644 (file)
index 742714c..0000000
+++ /dev/null
@@ -1,156 +0,0 @@
-jQuery(document).ready(function($){
-    $('#main-slider .bx-slider').slick({
-        slidesToShow: 1,
-        dots: JSON.parse(ap_params.accesspress_show_pager),
-        speed: ap_params.accesspress_slider_speed,
-        arrows: JSON.parse(ap_params.accesspress_show_controls),
-        autoplaySpeed : ap_params.accesspress_slider_pause,
-        autoplay:  JSON.parse(ap_params.accesspress_auto_transition),
-        fade: JSON.parse(ap_params.accesspress_slider_transition),
-        infinite: true
-    });
-
-    var headerHeight = $('#masthead').outerHeight();
-    $('#go-top, .next-page').localScroll({
-        offset: {
-        top: -headerHeight
-     }
-    });
-
-    $(window).resize(function(){
-        var winHeight = $(window).height();
-        var headerHeight = $('#masthead').outerHeight();
-        $('#main-slider.full-screen-yes .main-slides').height(winHeight-headerHeight);
-    }).resize();
-
-    $(window).scroll(function(){
-        if($(window).scrollTop() > 200){
-            $('#go-top').fadeIn();
-        }else{
-            $('#go-top').fadeOut();
-        }
-    });
-
-    $('.home .single-page-nav.nav').onePageNav({
-        currentClass: 'current',
-        changeHash: false,
-        scrollSpeed: 1500,
-        scrollOffset: headerHeight,
-        scrollThreshold: 0.5,
-    });
-
-    $('.single-page-nav.nav a').click(function(){
-        $('.single-page-nav.nav').hide();
-    });
-
-    $(window).resize(function(){
-        var headerHeight = $('#masthead').outerHeight();
-        $('.parallax-on #content').css('padding-top', headerHeight);
-    }).resize();
-
-    $('.team-content').slick({
-        slidesToShow: 1,
-        slidesToScroll: 1,
-        arrows: false,
-        fade: true,
-        asNavFor: '.team-slider'
-    });
-
-    $('.team-slider').slick({
-        slidesToShow: 7,
-        slidesToScroll: 1,
-        asNavFor: '.team-content',
-        dots: false,
-        centerMode: true,
-        focusOnSelect: true,
-        centerPadding: 0,
-        infinite: true,
-        prevArrow: '<i class="fa fa-angle-left"></i>',
-        nextArrow: '<i class="fa fa-angle-right"></i>',
-        responsive: [
-            {
-              breakpoint: 1024,
-              settings: {
-                slidesToShow: 5,
-              }
-            },
-            {
-              breakpoint: 768,
-              settings: {
-                slidesToShow: 3,
-              }
-            },
-            {
-              breakpoint: 480,
-              settings: {
-                slidesToShow: 1,
-              }
-            }
-        ]
-    });
-
-    $('.testimonial-slider').slick({
-        autoplay:true,
-        speed: 1000,
-        autoplaySpeed: 8000,
-        slidesToShow: 1,
-        slidesToScroll: 1,
-        arrows: true,
-        fade: false,
-        dots: false,
-        prevArrow: '<i class="fa fa-angle-left"></i>',
-        nextArrow: '<i class="fa fa-angle-right"></i>',
-    });
-
-    $(window).bind('load',function(){
-        $('.googlemap-content').hide();  
-    });
-    
-    var open = false;
-    $('.googlemap-toggle').on('click', function(){
-        if(!open){
-        open = true;
-        }
-        $('.googlemap-content').slideToggle();
-        $(this).toggleClass('active');
-    });
-
-    $('.social-icons a').each(function(){
-    var title = $(this).attr('data-title')
-    $(this).find('span').text(title);
-    });
-
-    $('.gallery-item a').each(function(){
-        $(this).addClass('fancybox-gallery').attr('data-lightbox-gallery','gallery');
-    });
-    
-    $(".fancybox-gallery").nivoLightbox();
-
-    $('.menu-toggle').click(function(){
-        $(this).next('ul').slideToggle();
-    });
-
-    $("#content").fitVids();
-
-    $(window).on('load',function(){
-        $('.blank_template').each(function(){
-        $(this).parallax('50%',0.4, true);
-        });
-        
-        $('.action_template').each(function(){
-        $(this).parallax('50%',0.3, true);
-        });
-    });
-    
-    // *only* if we have anchor on the url
-    if(window.location.hash) {
-
-        $('html, body').animate({
-            scrollTop: $(window.location.hash).offset().top-headerHeight
-        }, 1000 );
-           
-    }
-    $('.portfolio-list').on("click", function(e){
-        e.preventDefault();
-    });
-});
\ No newline at end of file
diff --git a/js/custom/pageSetup.js b/js/custom/pageSetup.js
new file mode 100644 (file)
index 0000000..85482be
--- /dev/null
@@ -0,0 +1,107 @@
+// Load foundation
+$(document).foundation();
+$(document).ready(function () {
+    var page            = $("body");
+    $('ul.children').each(function () {
+        $(this).before('<a class="toggle" href="#"></a>');
+    });
+    $('a.toggle').click('click', function () {
+        $(this).toggleClass('open');
+        $(this).siblings('ul').toggleClass('open');
+    });
+    $('.top-bar-section').find('ul.sub-menu.dropdown').each(function (){
+        var menuImg = $(this).parent('li').prop('id');
+        var menuNum = menuImg.match(/\d+/)[0];
+        var menuImgSrc = 'img_for_menu_' + menuNum;
+        if (window['img_for_menu_' + menuNum]) {
+            $(this).find('li.image-placeholder').html('<img src="' + eval(menuImgSrc) + '">');
+        } else {
+            $(this).find('li.image-placeholder').parent('ul').addClass('no-image-subul');
+            $(this).find('li.image-placeholder').remove();
+        }
+        //console.log('ul = ' + menuImg);
+        //console.log('menu-id = ' + menuNum);
+    });
+    $("[data-fancybox]").fancybox({
+        iframe : {
+            css : {
+                width : '600px'
+            }
+        }
+    });
+//
+//    $("a.glm-block-image.fancybox").fancybox({
+//
+//         helpers: {
+//            overlay: { locked: false },
+//             title: { type: 'inside'},
+//        },
+//        afterLoad: function(){
+//            this.title = $(this.element).find('img').attr('alt');
+//        }
+//    });
+
+
+    // weather widget hover effect
+     $('#activate-weather')
+      .mouseover(function() {
+         $('#weather-widget').slideDown();
+     })
+      .mouseout(function() {
+         $('#weather-widget').slideUp();
+     });
+
+
+    var submenus = page.find("#menu-main-navigation .sub-menu");
+    submenus.each(function() {
+        if ($(this).children().length > 6) {
+            $(this).addClass("submenu-two-columns");
+        }
+    });
+
+    var event_feed = $("#feed");
+    event_feed.addClass("feed");
+    event_feed.children("div").addClass("feed-block");
+
+    function check_window_width(){
+
+        if($(window).width() > 1023){
+            if($(".feed").hasClass('slick-initialized') ) {
+               $(".feed").slick('unslick');
+            }
+            $(".feed").slick({
+                infinite: true,
+                slidesToShow: 4,
+                slidesToScroll: 1,
+                arrows: true,
+
+            });
+
+        } else if($(window).width() < 1025 && $(window).width() > 639){
+             if($(".feed").hasClass('slick-initialized') ) {
+               $(".feed").slick('unslick');
+            }
+             $(".feed").slick({
+                infinite: true,
+                slidesToShow: 2,
+                slidesToScroll: 1
+            });
+        } else if($(window).width() < 641 && $(window).width() > 319){
+             if($(".feed").hasClass('slick-initialized') ) {
+                $(".feed").slick('unslick');
+             }
+             $(".feed").slick({
+                infinite: true,
+                slidesToShow: 1,
+                slidesToScroll: 1
+            });
+        }
+    }
+
+    check_window_width();
+    $(window).resize(function () {
+        check_window_width();
+    });
+
+
+});
diff --git a/js/customizer.js b/js/customizer.js
deleted file mode 100644 (file)
index 16fef19..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-/**
- * Theme Customizer enhancements for a better user experience.
- *
- * Contains handlers to make Theme Customizer preview reload changes asynchronously.
- */
-
-( function( $ ) {
-       // Site title and description.
-       wp.customize( 'blogname', function( value ) {
-               value.bind( function( to ) {
-                       $( '.site-title a' ).text( to );
-               } );
-       } );
-       wp.customize( 'blogdescription', function( value ) {
-               value.bind( function( to ) {
-                       $( '.site-description' ).text( to );
-               } );
-       } );
-       // Header text color.
-       wp.customize( 'header_textcolor', function( value ) {
-               value.bind( function( to ) {
-                       if ( 'blank' === to ) {
-                               $( '.site-title, .site-description' ).css( {
-                                       'clip': 'rect(1px, 1px, 1px, 1px)',
-                                       'position': 'absolute'
-                               } );
-                       } else {
-                               $( '.site-title, .site-description' ).css( {
-                                       'clip': 'auto',
-                                       'color': to,
-                                       'position': 'relative'
-                               } );
-                       }
-               } );
-       } );
-} )( jQuery );
diff --git a/js/dollarsign.js b/js/dollarsign.js
new file mode 100644 (file)
index 0000000..2d7a2e9
--- /dev/null
@@ -0,0 +1,6 @@
+/*
+ * To avoid conflicts, Wordpress tends to prefer jQuery being used over $.
+ * As long as this file is included, no such conflicts should arise. Ensure it
+ * is called before other .js files using $.
+ */
+var $=jQuery.noConflict();
\ No newline at end of file
diff --git a/js/fastclick/lib/fastclick.js b/js/fastclick/lib/fastclick.js
new file mode 100644 (file)
index 0000000..3af4f9d
--- /dev/null
@@ -0,0 +1,841 @@
+;(function () {
+       'use strict';
+
+       /**
+        * @preserve FastClick: polyfill to remove click delays on browsers with touch UIs.
+        *
+        * @codingstandard ftlabs-jsv2
+        * @copyright The Financial Times Limited [All Rights Reserved]
+        * @license MIT License (see LICENSE.txt)
+        */
+
+       /*jslint browser:true, node:true*/
+       /*global define, Event, Node*/
+
+
+       /**
+        * Instantiate fast-clicking listeners on the specified layer.
+        *
+        * @constructor
+        * @param {Element} layer The layer to listen on
+        * @param {Object} [options={}] The options to override the defaults
+        */
+       function FastClick(layer, options) {
+               var oldOnClick;
+
+               options = options || {};
+
+               /**
+                * Whether a click is currently being tracked.
+                *
+                * @type boolean
+                */
+               this.trackingClick = false;
+
+
+               /**
+                * Timestamp for when click tracking started.
+                *
+                * @type number
+                */
+               this.trackingClickStart = 0;
+
+
+               /**
+                * The element being tracked for a click.
+                *
+                * @type EventTarget
+                */
+               this.targetElement = null;
+
+
+               /**
+                * X-coordinate of touch start event.
+                *
+                * @type number
+                */
+               this.touchStartX = 0;
+
+
+               /**
+                * Y-coordinate of touch start event.
+                *
+                * @type number
+                */
+               this.touchStartY = 0;
+
+
+               /**
+                * ID of the last touch, retrieved from Touch.identifier.
+                *
+                * @type number
+                */
+               this.lastTouchIdentifier = 0;
+
+
+               /**
+                * Touchmove boundary, beyond which a click will be cancelled.
+                *
+                * @type number
+                */
+               this.touchBoundary = options.touchBoundary || 10;
+
+
+               /**
+                * The FastClick layer.
+                *
+                * @type Element
+                */
+               this.layer = layer;
+
+               /**
+                * The minimum time between tap(touchstart and touchend) events
+                *
+                * @type number
+                */
+               this.tapDelay = options.tapDelay || 200;
+
+               /**
+                * The maximum time for a tap
+                *
+                * @type number
+                */
+               this.tapTimeout = options.tapTimeout || 700;
+
+               if (FastClick.notNeeded(layer)) {
+                       return;
+               }
+
+               // Some old versions of Android don't have Function.prototype.bind
+               function bind(method, context) {
+                       return function() { return method.apply(context, arguments); };
+               }
+
+
+               var methods = ['onMouse', 'onClick', 'onTouchStart', 'onTouchMove', 'onTouchEnd', 'onTouchCancel'];
+               var context = this;
+               for (var i = 0, l = methods.length; i < l; i++) {
+                       context[methods[i]] = bind(context[methods[i]], context);
+               }
+
+               // Set up event handlers as required
+               if (deviceIsAndroid) {
+                       layer.addEventListener('mouseover', this.onMouse, true);
+                       layer.addEventListener('mousedown', this.onMouse, true);
+                       layer.addEventListener('mouseup', this.onMouse, true);
+               }
+
+               layer.addEventListener('click', this.onClick, true);
+               layer.addEventListener('touchstart', this.onTouchStart, false);
+               layer.addEventListener('touchmove', this.onTouchMove, false);
+               layer.addEventListener('touchend', this.onTouchEnd, false);
+               layer.addEventListener('touchcancel', this.onTouchCancel, false);
+
+               // Hack is required for browsers that don't support Event#stopImmediatePropagation (e.g. Android 2)
+               // which is how FastClick normally stops click events bubbling to callbacks registered on the FastClick
+               // layer when they are cancelled.
+               if (!Event.prototype.stopImmediatePropagation) {
+                       layer.removeEventListener = function(type, callback, capture) {
+                               var rmv = Node.prototype.removeEventListener;
+                               if (type === 'click') {
+                                       rmv.call(layer, type, callback.hijacked || callback, capture);
+                               } else {
+                                       rmv.call(layer, type, callback, capture);
+                               }
+                       };
+
+                       layer.addEventListener = function(type, callback, capture) {
+                               var adv = Node.prototype.addEventListener;
+                               if (type === 'click') {
+                                       adv.call(layer, type, callback.hijacked || (callback.hijacked = function(event) {
+                                               if (!event.propagationStopped) {
+                                                       callback(event);
+                                               }
+                                       }), capture);
+                               } else {
+                                       adv.call(layer, type, callback, capture);
+                               }
+                       };
+               }
+
+               // If a handler is already declared in the element's onclick attribute, it will be fired before
+               // FastClick's onClick handler. Fix this by pulling out the user-defined handler function and
+               // adding it as listener.
+               if (typeof layer.onclick === 'function') {
+
+                       // Android browser on at least 3.2 requires a new reference to the function in layer.onclick
+                       // - the old one won't work if passed to addEventListener directly.
+                       oldOnClick = layer.onclick;
+                       layer.addEventListener('click', function(event) {
+                               oldOnClick(event);
+                       }, false);
+                       layer.onclick = null;
+               }
+       }
+
+       /**
+       * Windows Phone 8.1 fakes user agent string to look like Android and iPhone.
+       *
+       * @type boolean
+       */
+       var deviceIsWindowsPhone = navigator.userAgent.indexOf("Windows Phone") >= 0;
+
+       /**
+        * Android requires exceptions.
+        *
+        * @type boolean
+        */
+       var deviceIsAndroid = navigator.userAgent.indexOf('Android') > 0 && !deviceIsWindowsPhone;
+
+
+       /**
+        * iOS requires exceptions.
+        *
+        * @type boolean
+        */
+       var deviceIsIOS = /iP(ad|hone|od)/.test(navigator.userAgent) && !deviceIsWindowsPhone;
+
+
+       /**
+        * iOS 4 requires an exception for select elements.
+        *
+        * @type boolean
+        */
+       var deviceIsIOS4 = deviceIsIOS && (/OS 4_\d(_\d)?/).test(navigator.userAgent);
+
+
+       /**
+        * iOS 6.0-7.* requires the target element to be manually derived
+        *
+        * @type boolean
+        */
+       var deviceIsIOSWithBadTarget = deviceIsIOS && (/OS [6-7]_\d/).test(navigator.userAgent);
+
+       /**
+        * BlackBerry requires exceptions.
+        *
+        * @type boolean
+        */
+       var deviceIsBlackBerry10 = navigator.userAgent.indexOf('BB10') > 0;
+
+       /**
+        * Determine whether a given element requires a native click.
+        *
+        * @param {EventTarget|Element} target Target DOM element
+        * @returns {boolean} Returns true if the element needs a native click
+        */
+       FastClick.prototype.needsClick = function(target) {
+               switch (target.nodeName.toLowerCase()) {
+
+               // Don't send a synthetic click to disabled inputs (issue #62)
+               case 'button':
+               case 'select':
+               case 'textarea':
+                       if (target.disabled) {
+                               return true;
+                       }
+
+                       break;
+               case 'input':
+
+                       // File inputs need real clicks on iOS 6 due to a browser bug (issue #68)
+                       if ((deviceIsIOS && target.type === 'file') || target.disabled) {
+                               return true;
+                       }
+
+                       break;
+               case 'label':
+               case 'iframe': // iOS8 homescreen apps can prevent events bubbling into frames
+               case 'video':
+                       return true;
+               }
+
+               return (/\bneedsclick\b/).test(target.className);
+       };
+
+
+       /**
+        * Determine whether a given element requires a call to focus to simulate click into element.
+        *
+        * @param {EventTarget|Element} target Target DOM element
+        * @returns {boolean} Returns true if the element requires a call to focus to simulate native click.
+        */
+       FastClick.prototype.needsFocus = function(target) {
+               switch (target.nodeName.toLowerCase()) {
+               case 'textarea':
+                       return true;
+               case 'select':
+                       return !deviceIsAndroid;
+               case 'input':
+                       switch (target.type) {
+                       case 'button':
+                       case 'checkbox':
+                       case 'file':
+                       case 'image':
+                       case 'radio':
+                       case 'submit':
+                               return false;
+                       }
+
+                       // No point in attempting to focus disabled inputs
+                       return !target.disabled && !target.readOnly;
+               default:
+                       return (/\bneedsfocus\b/).test(target.className);
+               }
+       };
+
+
+       /**
+        * Send a click event to the specified element.
+        *
+        * @param {EventTarget|Element} targetElement
+        * @param {Event} event
+        */
+       FastClick.prototype.sendClick = function(targetElement, event) {
+               var clickEvent, touch;
+
+               // On some Android devices activeElement needs to be blurred otherwise the synthetic click will have no effect (#24)
+               if (document.activeElement && document.activeElement !== targetElement) {
+                       document.activeElement.blur();
+               }
+
+               touch = event.changedTouches[0];
+
+               // Synthesise a click event, with an extra attribute so it can be tracked
+               clickEvent = document.createEvent('MouseEvents');
+               clickEvent.initMouseEvent(this.determineEventType(targetElement), true, true, window, 1, touch.screenX, touch.screenY, touch.clientX, touch.clientY, false, false, false, false, 0, null);
+               clickEvent.forwardedTouchEvent = true;
+               targetElement.dispatchEvent(clickEvent);
+       };
+
+       FastClick.prototype.determineEventType = function(targetElement) {
+
+               //Issue #159: Android Chrome Select Box does not open with a synthetic click event
+               if (deviceIsAndroid && targetElement.tagName.toLowerCase() === 'select') {
+                       return 'mousedown';
+               }
+
+               return 'click';
+       };
+
+
+       /**
+        * @param {EventTarget|Element} targetElement
+        */
+       FastClick.prototype.focus = function(targetElement) {
+               var length;
+
+               // Issue #160: on iOS 7, some input elements (e.g. date datetime month) throw a vague TypeError on setSelectionRange. These elements don't have an integer value for the selectionStart and selectionEnd properties, but unfortunately that can't be used for detection because accessing the properties also throws a TypeError. Just check the type instead. Filed as Apple bug #15122724.
+               if (deviceIsIOS && targetElement.setSelectionRange && targetElement.type.indexOf('date') !== 0 && targetElement.type !== 'time' && targetElement.type !== 'month') {
+                       length = targetElement.value.length;
+                       targetElement.setSelectionRange(length, length);
+               } else {
+                       targetElement.focus();
+               }
+       };
+
+
+       /**
+        * Check whether the given target element is a child of a scrollable layer and if so, set a flag on it.
+        *
+        * @param {EventTarget|Element} targetElement
+        */
+       FastClick.prototype.updateScrollParent = function(targetElement) {
+               var scrollParent, parentElement;
+
+               scrollParent = targetElement.fastClickScrollParent;
+
+               // Attempt to discover whether the target element is contained within a scrollable layer. Re-check if the
+               // target element was moved to another parent.
+               if (!scrollParent || !scrollParent.contains(targetElement)) {
+                       parentElement = targetElement;
+                       do {
+                               if (parentElement.scrollHeight > parentElement.offsetHeight) {
+                                       scrollParent = parentElement;
+                                       targetElement.fastClickScrollParent = parentElement;
+                                       break;
+                               }
+
+                               parentElement = parentElement.parentElement;
+                       } while (parentElement);
+               }
+
+               // Always update the scroll top tracker if possible.
+               if (scrollParent) {
+                       scrollParent.fastClickLastScrollTop = scrollParent.scrollTop;
+               }
+       };
+
+
+       /**
+        * @param {EventTarget} targetElement
+        * @returns {Element|EventTarget}
+        */
+       FastClick.prototype.getTargetElementFromEventTarget = function(eventTarget) {
+
+               // On some older browsers (notably Safari on iOS 4.1 - see issue #56) the event target may be a text node.
+               if (eventTarget.nodeType === Node.TEXT_NODE) {
+                       return eventTarget.parentNode;
+               }
+
+               return eventTarget;
+       };
+
+
+       /**
+        * On touch start, record the position and scroll offset.
+        *
+        * @param {Event} event
+        * @returns {boolean}
+        */
+       FastClick.prototype.onTouchStart = function(event) {
+               var targetElement, touch, selection;
+
+               // Ignore multiple touches, otherwise pinch-to-zoom is prevented if both fingers are on the FastClick element (issue #111).
+               if (event.targetTouches.length > 1) {
+                       return true;
+               }
+
+               targetElement = this.getTargetElementFromEventTarget(event.target);
+               touch = event.targetTouches[0];
+
+               if (deviceIsIOS) {
+
+                       // Only trusted events will deselect text on iOS (issue #49)
+                       selection = window.getSelection();
+                       if (selection.rangeCount && !selection.isCollapsed) {
+                               return true;
+                       }
+
+                       if (!deviceIsIOS4) {
+
+                               // Weird things happen on iOS when an alert or confirm dialog is opened from a click event callback (issue #23):
+                               // when the user next taps anywhere else on the page, new touchstart and touchend events are dispatched
+                               // with the same identifier as the touch event that previously triggered the click that triggered the alert.
+                               // Sadly, there is an issue on iOS 4 that causes some normal touch events to have the same identifier as an
+                               // immediately preceeding touch event (issue #52), so this fix is unavailable on that platform.
+                               // Issue 120: touch.identifier is 0 when Chrome dev tools 'Emulate touch events' is set with an iOS device UA string,
+                               // which causes all touch events to be ignored. As this block only applies to iOS, and iOS identifiers are always long,
+                               // random integers, it's safe to to continue if the identifier is 0 here.
+                               if (touch.identifier && touch.identifier === this.lastTouchIdentifier) {
+                                       event.preventDefault();
+                                       return false;
+                               }
+
+                               this.lastTouchIdentifier = touch.identifier;
+
+                               // If the target element is a child of a scrollable layer (using -webkit-overflow-scrolling: touch) and:
+                               // 1) the user does a fling scroll on the scrollable layer
+                               // 2) the user stops the fling scroll with another tap
+                               // then the event.target of the last 'touchend' event will be the element that was under the user's finger
+                               // when the fling scroll was started, causing FastClick to send a click event to that layer - unless a check
+                               // is made to ensure that a parent layer was not scrolled before sending a synthetic click (issue #42).
+                               this.updateScrollParent(targetElement);
+                       }
+               }
+
+               this.trackingClick = true;
+               this.trackingClickStart = event.timeStamp;
+               this.targetElement = targetElement;
+
+               this.touchStartX = touch.pageX;
+               this.touchStartY = touch.pageY;
+
+               // Prevent phantom clicks on fast double-tap (issue #36)
+               if ((event.timeStamp - this.lastClickTime) < this.tapDelay) {
+                       event.preventDefault();
+               }
+
+               return true;
+       };
+
+
+       /**
+        * Based on a touchmove event object, check whether the touch has moved past a boundary since it started.
+        *
+        * @param {Event} event
+        * @returns {boolean}
+        */
+       FastClick.prototype.touchHasMoved = function(event) {
+               var touch = event.changedTouches[0], boundary = this.touchBoundary;
+
+               if (Math.abs(touch.pageX - this.touchStartX) > boundary || Math.abs(touch.pageY - this.touchStartY) > boundary) {
+                       return true;
+               }
+
+               return false;
+       };
+
+
+       /**
+        * Update the last position.
+        *
+        * @param {Event} event
+        * @returns {boolean}
+        */
+       FastClick.prototype.onTouchMove = function(event) {
+               if (!this.trackingClick) {
+                       return true;
+               }
+
+               // If the touch has moved, cancel the click tracking
+               if (this.targetElement !== this.getTargetElementFromEventTarget(event.target) || this.touchHasMoved(event)) {
+                       this.trackingClick = false;
+                       this.targetElement = null;
+               }
+
+               return true;
+       };
+
+
+       /**
+        * Attempt to find the labelled control for the given label element.
+        *
+        * @param {EventTarget|HTMLLabelElement} labelElement
+        * @returns {Element|null}
+        */
+       FastClick.prototype.findControl = function(labelElement) {
+
+               // Fast path for newer browsers supporting the HTML5 control attribute
+               if (labelElement.control !== undefined) {
+                       return labelElement.control;
+               }
+
+               // All browsers under test that support touch events also support the HTML5 htmlFor attribute
+               if (labelElement.htmlFor) {
+                       return document.getElementById(labelElement.htmlFor);
+               }
+
+               // If no for attribute exists, attempt to retrieve the first labellable descendant element
+               // the list of which is defined here: http://www.w3.org/TR/html5/forms.html#category-label
+               return labelElement.querySelector('button, input:not([type=hidden]), keygen, meter, output, progress, select, textarea');
+       };
+
+
+       /**
+        * On touch end, determine whether to send a click event at once.
+        *
+        * @param {Event} event
+        * @returns {boolean}
+        */
+       FastClick.prototype.onTouchEnd = function(event) {
+               var forElement, trackingClickStart, targetTagName, scrollParent, touch, targetElement = this.targetElement;
+
+               if (!this.trackingClick) {
+                       return true;
+               }
+
+               // Prevent phantom clicks on fast double-tap (issue #36)
+               if ((event.timeStamp - this.lastClickTime) < this.tapDelay) {
+                       this.cancelNextClick = true;
+                       return true;
+               }
+
+               if ((event.timeStamp - this.trackingClickStart) > this.tapTimeout) {
+                       return true;
+               }
+
+               // Reset to prevent wrong click cancel on input (issue #156).
+               this.cancelNextClick = false;
+
+               this.lastClickTime = event.timeStamp;
+
+               trackingClickStart = this.trackingClickStart;
+               this.trackingClick = false;
+               this.trackingClickStart = 0;
+
+               // On some iOS devices, the targetElement supplied with the event is invalid if the layer
+               // is performing a transition or scroll, and has to be re-detected manually. Note that
+               // for this to function correctly, it must be called *after* the event target is checked!
+               // See issue #57; also filed as rdar://13048589 .
+               if (deviceIsIOSWithBadTarget) {
+                       touch = event.changedTouches[0];
+
+                       // In certain cases arguments of elementFromPoint can be negative, so prevent setting targetElement to null
+                       targetElement = document.elementFromPoint(touch.pageX - window.pageXOffset, touch.pageY - window.pageYOffset) || targetElement;
+                       targetElement.fastClickScrollParent = this.targetElement.fastClickScrollParent;
+               }
+
+               targetTagName = targetElement.tagName.toLowerCase();
+               if (targetTagName === 'label') {
+                       forElement = this.findControl(targetElement);
+                       if (forElement) {
+                               this.focus(targetElement);
+                               if (deviceIsAndroid) {
+                                       return false;
+                               }
+
+                               targetElement = forElement;
+                       }
+               } else if (this.needsFocus(targetElement)) {
+
+                       // Case 1: If the touch started a while ago (best guess is 100ms based on tests for issue #36) then focus will be triggered anyway. Return early and unset the target element reference so that the subsequent click will be allowed through.
+                       // Case 2: Without this exception for input elements tapped when the document is contained in an iframe, then any inputted text won't be visible even though the value attribute is updated as the user types (issue #37).
+                       if ((event.timeStamp - trackingClickStart) > 100 || (deviceIsIOS && window.top !== window && targetTagName === 'input')) {
+                               this.targetElement = null;
+                               return false;
+                       }
+
+                       this.focus(targetElement);
+                       this.sendClick(targetElement, event);
+
+                       // Select elements need the event to go through on iOS 4, otherwise the selector menu won't open.
+                       // Also this breaks opening selects when VoiceOver is active on iOS6, iOS7 (and possibly others)
+                       if (!deviceIsIOS || targetTagName !== 'select') {
+                               this.targetElement = null;
+                               event.preventDefault();
+                       }
+
+                       return false;
+               }
+
+               if (deviceIsIOS && !deviceIsIOS4) {
+
+                       // Don't send a synthetic click event if the target element is contained within a parent layer that was scrolled
+                       // and this tap is being used to stop the scrolling (usually initiated by a fling - issue #42).
+                       scrollParent = targetElement.fastClickScrollParent;
+                       if (scrollParent && scrollParent.fastClickLastScrollTop !== scrollParent.scrollTop) {
+                               return true;
+                       }
+               }
+
+               // Prevent the actual click from going though - unless the target node is marked as requiring
+               // real clicks or if it is in the whitelist in which case only non-programmatic clicks are permitted.
+               if (!this.needsClick(targetElement)) {
+                       event.preventDefault();
+                       this.sendClick(targetElement, event);
+               }
+
+               return false;
+       };
+
+
+       /**
+        * On touch cancel, stop tracking the click.
+        *
+        * @returns {void}
+        */
+       FastClick.prototype.onTouchCancel = function() {
+               this.trackingClick = false;
+               this.targetElement = null;
+       };
+
+
+       /**
+        * Determine mouse events which should be permitted.
+        *
+        * @param {Event} event
+        * @returns {boolean}
+        */
+       FastClick.prototype.onMouse = function(event) {
+
+               // If a target element was never set (because a touch event was never fired) allow the event
+               if (!this.targetElement) {
+                       return true;
+               }
+
+               if (event.forwardedTouchEvent) {
+                       return true;
+               }
+
+               // Programmatically generated events targeting a specific element should be permitted
+               if (!event.cancelable) {
+                       return true;
+               }
+
+               // Derive and check the target element to see whether the mouse event needs to be permitted;
+               // unless explicitly enabled, prevent non-touch click events from triggering actions,
+               // to prevent ghost/doubleclicks.
+               if (!this.needsClick(this.targetElement) || this.cancelNextClick) {
+
+                       // Prevent any user-added listeners declared on FastClick element from being fired.
+                       if (event.stopImmediatePropagation) {
+                               event.stopImmediatePropagation();
+                       } else {
+
+                               // Part of the hack for browsers that don't support Event#stopImmediatePropagation (e.g. Android 2)
+                               event.propagationStopped = true;
+                       }
+
+                       // Cancel the event
+                       event.stopPropagation();
+                       event.preventDefault();
+
+                       return false;
+               }
+
+               // If the mouse event is permitted, return true for the action to go through.
+               return true;
+       };
+
+
+       /**
+        * On actual clicks, determine whether this is a touch-generated click, a click action occurring
+        * naturally after a delay after a touch (which needs to be cancelled to avoid duplication), or
+        * an actual click which should be permitted.
+        *
+        * @param {Event} event
+        * @returns {boolean}
+        */
+       FastClick.prototype.onClick = function(event) {
+               var permitted;
+
+               // It's possible for another FastClick-like library delivered with third-party code to fire a click event before FastClick does (issue #44). In that case, set the click-tracking flag back to false and return early. This will cause onTouchEnd to return early.
+               if (this.trackingClick) {
+                       this.targetElement = null;
+                       this.trackingClick = false;
+                       return true;
+               }
+
+               // Very odd behaviour on iOS (issue #18): if a submit element is present inside a form and the user hits enter in the iOS simulator or clicks the Go button on the pop-up OS keyboard the a kind of 'fake' click event will be triggered with the submit-type input element as the target.
+               if (event.target.type === 'submit' && event.detail === 0) {
+                       return true;
+               }
+
+               permitted = this.onMouse(event);
+
+               // Only unset targetElement if the click is not permitted. This will ensure that the check for !targetElement in onMouse fails and the browser's click doesn't go through.
+               if (!permitted) {
+                       this.targetElement = null;
+               }
+
+               // If clicks are permitted, return true for the action to go through.
+               return permitted;
+       };
+
+
+       /**
+        * Remove all FastClick's event listeners.
+        *
+        * @returns {void}
+        */
+       FastClick.prototype.destroy = function() {
+               var layer = this.layer;
+
+               if (deviceIsAndroid) {
+                       layer.removeEventListener('mouseover', this.onMouse, true);
+                       layer.removeEventListener('mousedown', this.onMouse, true);
+                       layer.removeEventListener('mouseup', this.onMouse, true);
+               }
+
+               layer.removeEventListener('click', this.onClick, true);
+               layer.removeEventListener('touchstart', this.onTouchStart, false);
+               layer.removeEventListener('touchmove', this.onTouchMove, false);
+               layer.removeEventListener('touchend', this.onTouchEnd, false);
+               layer.removeEventListener('touchcancel', this.onTouchCancel, false);
+       };
+
+
+       /**
+        * Check whether FastClick is needed.
+        *
+        * @param {Element} layer The layer to listen on
+        */
+       FastClick.notNeeded = function(layer) {
+               var metaViewport;
+               var chromeVersion;
+               var blackberryVersion;
+               var firefoxVersion;
+
+               // Devices that don't support touch don't need FastClick
+               if (typeof window.ontouchstart === 'undefined') {
+                       return true;
+               }
+
+               // Chrome version - zero for other browsers
+               chromeVersion = +(/Chrome\/([0-9]+)/.exec(navigator.userAgent) || [,0])[1];
+
+               if (chromeVersion) {
+
+                       if (deviceIsAndroid) {
+                               metaViewport = document.querySelector('meta[name=viewport]');
+
+                               if (metaViewport) {
+                                       // Chrome on Android with user-scalable="no" doesn't need FastClick (issue #89)
+                                       if (metaViewport.content.indexOf('user-scalable=no') !== -1) {
+                                               return true;
+                                       }
+                                       // Chrome 32 and above with width=device-width or less don't need FastClick
+                                       if (chromeVersion > 31 && document.documentElement.scrollWidth <= window.outerWidth) {
+                                               return true;
+                                       }
+                               }
+
+                       // Chrome desktop doesn't need FastClick (issue #15)
+                       } else {
+                               return true;
+                       }
+               }
+
+               if (deviceIsBlackBerry10) {
+                       blackberryVersion = navigator.userAgent.match(/Version\/([0-9]*)\.([0-9]*)/);
+
+                       // BlackBerry 10.3+ does not require Fastclick library.
+                       // https://github.com/ftlabs/fastclick/issues/251
+                       if (blackberryVersion[1] >= 10 && blackberryVersion[2] >= 3) {
+                               metaViewport = document.querySelector('meta[name=viewport]');
+
+                               if (metaViewport) {
+                                       // user-scalable=no eliminates click delay.
+                                       if (metaViewport.content.indexOf('user-scalable=no') !== -1) {
+                                               return true;
+                                       }
+                                       // width=device-width (or less than device-width) eliminates click delay.
+                                       if (document.documentElement.scrollWidth <= window.outerWidth) {
+                                               return true;
+                                       }
+                               }
+                       }
+               }
+
+               // IE10 with -ms-touch-action: none or manipulation, which disables double-tap-to-zoom (issue #97)
+               if (layer.style.msTouchAction === 'none' || layer.style.touchAction === 'manipulation') {
+                       return true;
+               }
+
+               // Firefox version - zero for other browsers
+               firefoxVersion = +(/Firefox\/([0-9]+)/.exec(navigator.userAgent) || [,0])[1];
+
+               if (firefoxVersion >= 27) {
+                       // Firefox 27+ does not have tap delay if the content is not zoomable - https://bugzilla.mozilla.org/show_bug.cgi?id=922896
+
+                       metaViewport = document.querySelector('meta[name=viewport]');
+                       if (metaViewport && (metaViewport.content.indexOf('user-scalable=no') !== -1 || document.documentElement.scrollWidth <= window.outerWidth)) {
+                               return true;
+                       }
+               }
+
+               // IE11: prefixed -ms-touch-action is no longer supported and it's recomended to use non-prefixed version
+               // http://msdn.microsoft.com/en-us/library/windows/apps/Hh767313.aspx
+               if (layer.style.touchAction === 'none' || layer.style.touchAction === 'manipulation') {
+                       return true;
+               }
+
+               return false;
+       };
+
+
+       /**
+        * Factory method for creating a FastClick object
+        *
+        * @param {Element} layer The layer to listen on
+        * @param {Object} [options={}] The options to override the defaults
+        */
+       FastClick.attach = function(layer, options) {
+               return new FastClick(layer, options);
+       };
+
+
+       if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {
+
+               // AMD. Register as an anonymous module.
+               define(function() {
+                       return FastClick;
+               });
+       } else if (typeof module !== 'undefined' && module.exports) {
+               module.exports = FastClick.attach;
+               module.exports.FastClick = FastClick;
+       } else {
+               window.FastClick = FastClick;
+       }
+}());
diff --git a/js/foundation/css/foundation.css.map b/js/foundation/css/foundation.css.map
new file mode 100644 (file)
index 0000000..40bd448
--- /dev/null
@@ -0,0 +1,7 @@
+{
+"version": 3,
+"mappings": "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",
+"sources": ["../../../scss/foundation/components/_global.scss","../../../scss/foundation/components/_grid.scss","../../../scss/foundation/components/_accordion.scss","../../../scss/foundation/components/_alert-boxes.scss","../../../scss/foundation/components/_block-grid.scss","../../../scss/foundation/components/_breadcrumbs.scss","../../../scss/foundation/components/_buttons.scss","../../../scss/foundation/_functions.scss","../../../scss/foundation/components/_button-groups.scss","../../../scss/foundation/components/_clearing.scss","../../../scss/foundation/components/_dropdown.scss","../../../scss/foundation/components/_dropdown-buttons.scss","../../../scss/foundation/components/_flex-video.scss","../../../scss/foundation/components/_forms.scss","../../../scss/foundation/components/_icon-bar.scss","../../../scss/foundation/components/_inline-lists.scss","../../../scss/foundation/components/_joyride.scss","../../../scss/foundation/components/_keystrokes.scss","../../../scss/foundation/components/_labels.scss","../../../scss/foundation/components/_magellan.scss","../../../scss/foundation/components/_orbit.scss","../../../scss/foundation/components/_pagination.scss","../../../scss/foundation/components/_panels.scss","../../../scss/foundation/components/_pricing-tables.scss","../../../scss/foundation/components/_progress-bars.scss","../../../scss/foundation/components/_range-slider.scss","../../../scss/foundation/components/_reveal.scss","../../../scss/foundation/components/_side-nav.scss","../../../scss/foundation/components/_split-buttons.scss","../../../scss/foundation/components/_sub-nav.scss","../../../scss/foundation/components/_switches.scss","../../../scss/foundation/components/_tables.scss","../../../scss/foundation/components/_tabs.scss","../../../scss/foundation/components/_thumbs.scss","../../../scss/foundation/components/_tooltips.scss","../../../scss/foundation/components/_top-bar.scss","../../../scss/foundation/components/_type.scss","../../../scss/foundation/components/_offcanvas.scss","../../../scss/foundation/components/_visibility.scss"],
+"names": [],
+"file": "foundation.css"
+}
diff --git a/js/foundation/css/normalize.css.map b/js/foundation/css/normalize.css.map
new file mode 100644 (file)
index 0000000..8fc7c41
--- /dev/null
@@ -0,0 +1,7 @@
+{
+"version": 3,
+"mappings": ";;;;;;AAQA,IAAK;EACH,WAAW,EAAE,UAAU;;EACvB,oBAAoB,EAAE,IAAI;;EAC1B,wBAAwB,EAAE,IAAI;;;;;;AAOhC,IAAK;EACH,MAAM,EAAE,CAAC;;;;;;;;;;AAaX;;;;;;;;;;;;OAYQ;EACN,OAAO,EAAE,KAAK;;;;;;AAQhB;;;KAGM;EACJ,OAAO,EAAE,YAAY;;EACrB,cAAc,EAAE,QAAQ;;;;;;;AAQ1B,qBAAsB;EACpB,OAAO,EAAE,IAAI;EACb,MAAM,EAAE,CAAC;;;;;;AAQX;QACS;EACP,OAAO,EAAE,IAAI;;;;;;;AAUf,CAAE;EACA,gBAAgB,EAAE,WAAW;;;;;;AAQ/B;OACQ;EACN,OAAO,EAAE,CAAC;;;;;;;AAUZ,WAAY;EACV,aAAa,EAAE,UAAU;;;;;AAO3B;MACO;EACL,WAAW,EAAE,IAAI;;;;;AAOnB,GAAI;EACF,UAAU,EAAE,MAAM;;;;;;AAQpB,EAAG;EACD,SAAS,EAAE,GAAG;EACd,MAAM,EAAE,QAAQ;;;;;AAOlB,IAAK;EACH,UAAU,EAAE,IAAI;EAChB,KAAK,EAAE,IAAI;;;;;AAOb,KAAM;EACJ,SAAS,EAAE,GAAG;;;;;AAOhB;GACI;EACF,SAAS,EAAE,GAAG;EACd,WAAW,EAAE,CAAC;EACd,QAAQ,EAAE,QAAQ;EAClB,cAAc,EAAE,QAAQ;;AAG1B,GAAI;EACF,GAAG,EAAE,MAAM;;AAGb,GAAI;EACF,MAAM,EAAE,OAAO;;;;;;;AAUjB,GAAI;EACF,MAAM,EAAE,CAAC;;;;;AAOX,cAAe;EACb,QAAQ,EAAE,MAAM;;;;;;;AAUlB,MAAO;EACL,MAAM,EAAE,QAAQ;;;;;AAOlB,EAAG;EACD,UAAU,EAAE,WAAW;EACvB,MAAM,EAAE,CAAC;;;;;AAOX,GAAI;EACF,QAAQ,EAAE,IAAI;;;;;AAOhB;;;IAGK;EACH,WAAW,EAAE,oBAAoB;EACjC,SAAS,EAAE,GAAG;;;;;;;;;;;;;;AAkBhB;;;;QAIS;EACP,KAAK,EAAE,OAAO;;EACd,IAAI,EAAE,OAAO;;EACb,MAAM,EAAE,CAAC;;;;;;AAOX,MAAO;EACL,QAAQ,EAAE,OAAO;;;;;;;;AAUnB;MACO;EACL,cAAc,EAAE,IAAI;;;;;;;;;AAWtB;;;oBAGqB;EACnB,kBAAkB,EAAE,MAAM;;EAC1B,MAAM,EAAE,OAAO;;;;;;AAOjB;oBACqB;EACnB,MAAM,EAAE,OAAO;;;;;AAOjB;uBACwB;EACtB,MAAM,EAAE,CAAC;EACT,OAAO,EAAE,CAAC;;;;;;AAQZ,KAAM;EACJ,WAAW,EAAE,MAAM;;;;;;;;;AAWrB;mBACoB;EAClB,UAAU,EAAE,UAAU;;EACtB,OAAO,EAAE,CAAC;;;;;;;;AASZ;+CACgD;EAC9C,MAAM,EAAE,IAAI;;;;;;AAQd,oBAAqB;EACnB,kBAAkB,EAAE,SAAS;;EAC7B,UAAU,EAAE,WAAW;;;;;;;;AASzB;+CACgD;EAC9C,kBAAkB,EAAE,IAAI;;;;;AAO1B,QAAS;EACP,MAAM,EAAE,iBAAiB;EACzB,MAAM,EAAE,KAAK;EACb,OAAO,EAAE,qBAAqB;;;;;;AAQhC,MAAO;EACL,MAAM,EAAE,CAAC;;EACT,OAAO,EAAE,CAAC;;;;;;AAOZ,QAAS;EACP,QAAQ,EAAE,IAAI;;;;;;AAQhB,QAAS;EACP,WAAW,EAAE,IAAI;;;;;;;AAUnB,KAAM;EACJ,eAAe,EAAE,QAAQ;EACzB,cAAc,EAAE,CAAC;;AAGnB;EACG;EACD,OAAO,EAAE,CAAC",
+"sources": ["../../../scss/normalize.scss"],
+"names": [],
+"file": "normalize.css"
+}
diff --git a/js/foundation/js/foundation.js b/js/foundation/js/foundation.js
new file mode 100644 (file)
index 0000000..13a76a2
--- /dev/null
@@ -0,0 +1,6581 @@
+/*
+ * Foundation Responsive Library
+ * http://foundation.zurb.com
+ * Copyright 2015, ZURB
+ * Free to use under the MIT license.
+ * http://www.opensource.org/licenses/mit-license.php
+*/
+
+(function ($, window, document, undefined) {
+  'use strict';
+
+  var header_helpers = function (class_array) {
+    var head = $('head');
+    head.prepend($.map(class_array, function (class_name) {
+      if (head.has('.' + class_name).length === 0) {
+        return '<meta class="' + class_name + '" />';
+      }
+    }));
+  };
+
+  header_helpers([
+    'foundation-mq-small',
+    'foundation-mq-small-only',
+    'foundation-mq-medium',
+    'foundation-mq-medium-only',
+    'foundation-mq-large',
+    'foundation-mq-large-only',
+    'foundation-mq-xlarge',
+    'foundation-mq-xlarge-only',
+    'foundation-mq-xxlarge',
+    'foundation-data-attribute-namespace']);
+
+  // Enable FastClick if present
+
+  $(function () {
+    if (typeof FastClick !== 'undefined') {
+      // Don't attach to body if undefined
+      if (typeof document.body !== 'undefined') {
+        FastClick.attach(document.body);
+      }
+    }
+  });
+
+  // private Fast Selector wrapper,
+  // returns jQuery object. Only use where
+  // getElementById is not available.
+  var S = function (selector, context) {
+    if (typeof selector === 'string') {
+      if (context) {
+        var cont;
+        if (context.jquery) {
+          cont = context[0];
+          if (!cont) {
+            return context;
+          }
+        } else {
+          cont = context;
+        }
+        return $(cont.querySelectorAll(selector));
+      }
+
+      return $(document.querySelectorAll(selector));
+    }
+
+    return $(selector, context);
+  };
+
+  // Namespace functions.
+
+  var attr_name = function (init) {
+    var arr = [];
+    if (!init) {
+      arr.push('data');
+    }
+    if (this.namespace.length > 0) {
+      arr.push(this.namespace);
+    }
+    arr.push(this.name);
+
+    return arr.join('-');
+  };
+
+  var add_namespace = function (str) {
+    var parts = str.split('-'),
+        i = parts.length,
+        arr = [];
+
+    while (i--) {
+      if (i !== 0) {
+        arr.push(parts[i]);
+      } else {
+        if (this.namespace.length > 0) {
+          arr.push(this.namespace, parts[i]);
+        } else {
+          arr.push(parts[i]);
+        }
+      }
+    }
+
+    return arr.reverse().join('-');
+  };
+
+  // Event binding and data-options updating.
+
+  var bindings = function (method, options) {
+    var self = this,
+        bind = function(){
+          var $this = S(this),
+              should_bind_events = !$this.data(self.attr_name(true) + '-init');
+          $this.data(self.attr_name(true) + '-init', $.extend({}, self.settings, (options || method), self.data_options($this)));
+
+          if (should_bind_events) {
+            self.events(this);
+          }
+        };
+
+    if (S(this.scope).is('[' + this.attr_name() +']')) {
+      bind.call(this.scope);
+    } else {
+      S('[' + this.attr_name() +']', this.scope).each(bind);
+    }
+    // # Patch to fix #5043 to move this *after* the if/else clause in order for Backbone and similar frameworks to have improved control over event binding and data-options updating.
+    if (typeof method === 'string') {
+      return this[method].call(this, options);
+    }
+
+  };
+
+  var single_image_loaded = function (image, callback) {
+    function loaded () {
+      callback(image[0]);
+    }
+
+    function bindLoad () {
+      this.one('load', loaded);
+
+      if (/MSIE (\d+\.\d+);/.test(navigator.userAgent)) {
+        var src = this.attr( 'src' ),
+            param = src.match( /\?/ ) ? '&' : '?';
+
+        param += 'random=' + (new Date()).getTime();
+        this.attr('src', src + param);
+      }
+    }
+
+    if (!image.attr('src')) {
+      loaded();
+      return;
+    }
+
+    if (image[0].complete || image[0].readyState === 4) {
+      loaded();
+    } else {
+      bindLoad.call(image);
+    }
+  };
+
+  /*! matchMedia() polyfill - Test a CSS media type/query in JS. Authors & copyright (c) 2012: Scott Jehl, Paul Irish, Nicholas Zakas, David Knight. Dual MIT/BSD license */
+
+  window.matchMedia || (window.matchMedia = function() {
+      "use strict";
+
+      // For browsers that support matchMedium api such as IE 9 and webkit
+      var styleMedia = (window.styleMedia || window.media);
+
+      // For those that don't support matchMedium
+      if (!styleMedia) {
+          var style       = document.createElement('style'),
+              script      = document.getElementsByTagName('script')[0],
+              info        = null;
+
+          style.type  = 'text/css';
+          style.id    = 'matchmediajs-test';
+
+          script.parentNode.insertBefore(style, script);
+
+          // 'style.currentStyle' is used by IE <= 8 and 'window.getComputedStyle' for all other browsers
+          info = ('getComputedStyle' in window) && window.getComputedStyle(style, null) || style.currentStyle;
+
+          styleMedia = {
+              matchMedium: function(media) {
+                  var text = '@media ' + media + '{ #matchmediajs-test { width: 1px; } }';
+
+                  // 'style.styleSheet' is used by IE <= 8 and 'style.textContent' for all other browsers
+                  if (style.styleSheet) {
+                      style.styleSheet.cssText = text;
+                  } else {
+                      style.textContent = text;
+                  }
+
+                  // Test if media query is true or false
+                  return info.width === '1px';
+              }
+          };
+      }
+
+      return function(media) {
+          return {
+              matches: styleMedia.matchMedium(media || 'all'),
+              media: media || 'all'
+          };
+      };
+  }());
+
+  /*
+   * jquery.requestAnimationFrame
+   * https://github.com/gnarf37/jquery-requestAnimationFrame
+   * Requires jQuery 1.8+
+   *
+   * Copyright (c) 2012 Corey Frang
+   * Licensed under the MIT license.
+   */
+
+  (function(jQuery) {
+
+
+  // requestAnimationFrame polyfill adapted from Erik Möller
+  // fixes from Paul Irish and Tino Zijdel
+  // http://paulirish.com/2011/requestanimationframe-for-smart-animating/
+  // http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating
+
+  var animating,
+      lastTime = 0,
+      vendors = ['webkit', 'moz'],
+      requestAnimationFrame = window.requestAnimationFrame,
+      cancelAnimationFrame = window.cancelAnimationFrame,
+      jqueryFxAvailable = 'undefined' !== typeof jQuery.fx;
+
+  for (; lastTime < vendors.length && !requestAnimationFrame; lastTime++) {
+    requestAnimationFrame = window[ vendors[lastTime] + 'RequestAnimationFrame' ];
+    cancelAnimationFrame = cancelAnimationFrame ||
+      window[ vendors[lastTime] + 'CancelAnimationFrame' ] ||
+      window[ vendors[lastTime] + 'CancelRequestAnimationFrame' ];
+  }
+
+  function raf() {
+    if (animating) {
+      requestAnimationFrame(raf);
+
+      if (jqueryFxAvailable) {
+        jQuery.fx.tick();
+      }
+    }
+  }
+
+  if (requestAnimationFrame) {
+    // use rAF
+    window.requestAnimationFrame = requestAnimationFrame;
+    window.cancelAnimationFrame = cancelAnimationFrame;
+
+    if (jqueryFxAvailable) {
+      jQuery.fx.timer = function (timer) {
+        if (timer() && jQuery.timers.push(timer) && !animating) {
+          animating = true;
+          raf();
+        }
+      };
+
+      jQuery.fx.stop = function () {
+        animating = false;
+      };
+    }
+  } else {
+    // polyfill
+    window.requestAnimationFrame = function (callback) {
+      var currTime = new Date().getTime(),
+        timeToCall = Math.max(0, 16 - (currTime - lastTime)),
+        id = window.setTimeout(function () {
+          callback(currTime + timeToCall);
+        }, timeToCall);
+      lastTime = currTime + timeToCall;
+      return id;
+    };
+
+    window.cancelAnimationFrame = function (id) {
+      clearTimeout(id);
+    };
+
+  }
+
+  }( $ ));
+
+  function removeQuotes (string) {
+    if (typeof string === 'string' || string instanceof String) {
+      string = string.replace(/^['\\/"]+|(;\s?})+|['\\/"]+$/g, '');
+    }
+
+    return string;
+  }
+
+  function MediaQuery(selector) {
+    this.selector = selector;
+    this.query = '';
+  }
+
+  MediaQuery.prototype.toString = function () {
+    return this.query || (this.query = S(this.selector).css('font-family').replace(/^[\/\\'"]+|(;\s?})+|[\/\\'"]+$/g, ''));
+  };
+
+  window.Foundation = {
+    name : 'Foundation',
+
+    version : '5.5.3',
+
+    media_queries : {
+      'small'       : new MediaQuery('.foundation-mq-small'),
+      'small-only'  : new MediaQuery('.foundation-mq-small-only'),
+      'medium'      : new MediaQuery('.foundation-mq-medium'),
+      'medium-only' : new MediaQuery('.foundation-mq-medium-only'),
+      'large'       : new MediaQuery('.foundation-mq-large'),
+      'large-only'  : new MediaQuery('.foundation-mq-large-only'),
+      'xlarge'      : new MediaQuery('.foundation-mq-xlarge'),
+      'xlarge-only' : new MediaQuery('.foundation-mq-xlarge-only'),
+      'xxlarge'     : new MediaQuery('.foundation-mq-xxlarge')
+    },
+
+    stylesheet : $('<style></style>').appendTo('head')[0].sheet,
+
+    global : {
+      namespace : undefined
+    },
+
+    init : function (scope, libraries, method, options, response) {
+      var args = [scope, method, options, response],
+          responses = [];
+
+      // check RTL
+      this.rtl = /rtl/i.test(S('html').attr('dir'));
+
+      // set foundation global scope
+      this.scope = scope || this.scope;
+
+      this.set_namespace();
+
+      if (libraries && typeof libraries === 'string' && !/reflow/i.test(libraries)) {
+        if (this.libs.hasOwnProperty(libraries)) {
+          responses.push(this.init_lib(libraries, args));
+        }
+      } else {
+        for (var lib in this.libs) {
+          responses.push(this.init_lib(lib, libraries));
+        }
+      }
+
+      S(window).load(function () {
+        S(window)
+          .trigger('resize.fndtn.clearing')
+          .trigger('resize.fndtn.dropdown')
+          .trigger('resize.fndtn.equalizer')
+          .trigger('resize.fndtn.interchange')
+          .trigger('resize.fndtn.joyride')
+          .trigger('resize.fndtn.magellan')
+          .trigger('resize.fndtn.topbar')
+          .trigger('resize.fndtn.slider');
+      });
+
+      return scope;
+    },
+
+    init_lib : function (lib, args) {
+      if (this.libs.hasOwnProperty(lib)) {
+        this.patch(this.libs[lib]);
+
+        if (args && args.hasOwnProperty(lib)) {
+            if (typeof this.libs[lib].settings !== 'undefined') {
+              $.extend(true, this.libs[lib].settings, args[lib]);
+            } else if (typeof this.libs[lib].defaults !== 'undefined') {
+              $.extend(true, this.libs[lib].defaults, args[lib]);
+            }
+          return this.libs[lib].init.apply(this.libs[lib], [this.scope, args[lib]]);
+        }
+
+        args = args instanceof Array ? args : new Array(args);
+        return this.libs[lib].init.apply(this.libs[lib], args);
+      }
+
+      return function () {};
+    },
+
+    patch : function (lib) {
+      lib.scope = this.scope;
+      lib.namespace = this.global.namespace;
+      lib.rtl = this.rtl;
+      lib['data_options'] = this.utils.data_options;
+      lib['attr_name'] = attr_name;
+      lib['add_namespace'] = add_namespace;
+      lib['bindings'] = bindings;
+      lib['S'] = this.utils.S;
+    },
+
+    inherit : function (scope, methods) {
+      var methods_arr = methods.split(' '),
+          i = methods_arr.length;
+
+      while (i--) {
+        if (this.utils.hasOwnProperty(methods_arr[i])) {
+          scope[methods_arr[i]] = this.utils[methods_arr[i]];
+        }
+      }
+    },
+
+    set_namespace : function () {
+
+      // Description:
+      //    Don't bother reading the namespace out of the meta tag
+      //    if the namespace has been set globally in javascript
+      //
+      // Example:
+      //    Foundation.global.namespace = 'my-namespace';
+      // or make it an empty string:
+      //    Foundation.global.namespace = '';
+      //
+      //
+
+      // If the namespace has not been set (is undefined), try to read it out of the meta element.
+      // Otherwise use the globally defined namespace, even if it's empty ('')
+      var namespace = ( this.global.namespace === undefined ) ? $('.foundation-data-attribute-namespace').css('font-family') : this.global.namespace;
+
+      // Finally, if the namsepace is either undefined or false, set it to an empty string.
+      // Otherwise use the namespace value.
+      this.global.namespace = ( namespace === undefined || /false/i.test(namespace) ) ? '' : namespace;
+    },
+
+    libs : {},
+
+    // methods that can be inherited in libraries
+    utils : {
+
+      // Description:
+      //    Fast Selector wrapper returns jQuery object. Only use where getElementById
+      //    is not available.
+      //
+      // Arguments:
+      //    Selector (String): CSS selector describing the element(s) to be
+      //    returned as a jQuery object.
+      //
+      //    Scope (String): CSS selector describing the area to be searched. Default
+      //    is document.
+      //
+      // Returns:
+      //    Element (jQuery Object): jQuery object containing elements matching the
+      //    selector within the scope.
+      S : S,
+
+      // Description:
+      //    Executes a function a max of once every n milliseconds
+      //
+      // Arguments:
+      //    Func (Function): Function to be throttled.
+      //
+      //    Delay (Integer): Function execution threshold in milliseconds.
+      //
+      // Returns:
+      //    Lazy_function (Function): Function with throttling applied.
+      throttle : function (func, delay) {
+        var timer = null;
+
+        return function () {
+          var context = this, args = arguments;
+
+          if (timer == null) {
+            timer = setTimeout(function () {
+              func.apply(context, args);
+              timer = null;
+            }, delay);
+          }
+        };
+      },
+
+      // Description:
+      //    Executes a function when it stops being invoked for n seconds
+      //    Modified version of _.debounce() http://underscorejs.org
+      //
+      // Arguments:
+      //    Func (Function): Function to be debounced.
+      //
+      //    Delay (Integer): Function execution threshold in milliseconds.
+      //
+      //    Immediate (Bool): Whether the function should be called at the beginning
+      //    of the delay instead of the end. Default is false.
+      //
+      // Returns:
+      //    Lazy_function (Function): Function with debouncing applied.
+      debounce : function (func, delay, immediate) {
+        var timeout, result;
+        return function () {
+          var context = this, args = arguments;
+          var later = function () {
+            timeout = null;
+            if (!immediate) {
+              result = func.apply(context, args);
+            }
+          };
+          var callNow = immediate && !timeout;
+          clearTimeout(timeout);
+          timeout = setTimeout(later, delay);
+          if (callNow) {
+            result = func.apply(context, args);
+          }
+          return result;
+        };
+      },
+
+      // Description:
+      //    Parses data-options attribute
+      //
+      // Arguments:
+      //    El (jQuery Object): Element to be parsed.
+      //
+      // Returns:
+      //    Options (Javascript Object): Contents of the element's data-options
+      //    attribute.
+      data_options : function (el, data_attr_name) {
+        data_attr_name = data_attr_name || 'options';
+        var opts = {}, ii, p, opts_arr,
+            data_options = function (el) {
+              var namespace = Foundation.global.namespace;
+
+              if (namespace.length > 0) {
+                return el.data(namespace + '-' + data_attr_name);
+              }
+
+              return el.data(data_attr_name);
+            };
+
+        var cached_options = data_options(el);
+
+        if (typeof cached_options === 'object') {
+          return cached_options;
+        }
+
+        opts_arr = (cached_options || ':').split(';');
+        ii = opts_arr.length;
+
+        function isNumber (o) {
+          return !isNaN (o - 0) && o !== null && o !== '' && o !== false && o !== true;
+        }
+
+        function trim (str) {
+          if (typeof str === 'string') {
+            return $.trim(str);
+          }
+          return str;
+        }
+
+        while (ii--) {
+          p = opts_arr[ii].split(':');
+          p = [p[0], p.slice(1).join(':')];
+
+          if (/true/i.test(p[1])) {
+            p[1] = true;
+          }
+          if (/false/i.test(p[1])) {
+            p[1] = false;
+          }
+          if (isNumber(p[1])) {
+            if (p[1].indexOf('.') === -1) {
+              p[1] = parseInt(p[1], 10);
+            } else {
+              p[1] = parseFloat(p[1]);
+            }
+          }
+
+          if (p.length === 2 && p[0].length > 0) {
+            opts[trim(p[0])] = trim(p[1]);
+          }
+        }
+
+        return opts;
+      },
+
+      // Description:
+      //    Adds JS-recognizable media queries
+      //
+      // Arguments:
+      //    Media (String): Key string for the media query to be stored as in
+      //    Foundation.media_queries
+      //
+      //    Class (String): Class name for the generated <meta> tag
+      register_media : function (media, media_class) {
+        if (Foundation.media_queries[media] === undefined) {
+          $('head').append('<meta class="' + media_class + '"/>');
+          Foundation.media_queries[media] = removeQuotes($('.' + media_class).css('font-family'));
+        }
+      },
+
+      // Description:
+      //    Add custom CSS within a JS-defined media query
+      //
+      // Arguments:
+      //    Rule (String): CSS rule to be appended to the document.
+      //
+      //    Media (String): Optional media query string for the CSS rule to be
+      //    nested under.
+      add_custom_rule : function (rule, media) {
+        if (media === undefined && Foundation.stylesheet) {
+          Foundation.stylesheet.insertRule(rule, Foundation.stylesheet.cssRules.length);
+        } else {
+          var query = Foundation.media_queries[media];
+
+          if (query !== undefined) {
+            Foundation.stylesheet.insertRule('@media ' +
+              Foundation.media_queries[media] + '{ ' + rule + ' }', Foundation.stylesheet.cssRules.length);
+          }
+        }
+      },
+
+      // Description:
+      //    Performs a callback function when an image is fully loaded
+      //
+      // Arguments:
+      //    Image (jQuery Object): Image(s) to check if loaded.
+      //
+      //    Callback (Function): Function to execute when image is fully loaded.
+      image_loaded : function (images, callback) {
+        var self = this,
+            unloaded = images.length;
+
+        function pictures_has_height(images) {
+          var pictures_number = images.length;
+
+          for (var i = pictures_number - 1; i >= 0; i--) {
+            if(images.attr('height') === undefined) {
+              return false;
+            };
+          };
+
+          return true;
+        }
+
+        if (unloaded === 0 || pictures_has_height(images)) {
+          callback(images);
+        }
+
+        images.each(function () {
+          single_image_loaded(self.S(this), function () {
+            unloaded -= 1;
+            if (unloaded === 0) {
+              callback(images);
+            }
+          });
+        });
+      },
+
+      // Description:
+      //    Returns a random, alphanumeric string
+      //
+      // Arguments:
+      //    Length (Integer): Length of string to be generated. Defaults to random
+      //    integer.
+      //
+      // Returns:
+      //    Rand (String): Pseudo-random, alphanumeric string.
+      random_str : function () {
+        if (!this.fidx) {
+          this.fidx = 0;
+        }
+        this.prefix = this.prefix || [(this.name || 'F'), (+new Date).toString(36)].join('-');
+
+        return this.prefix + (this.fidx++).toString(36);
+      },
+
+      // Description:
+      //    Helper for window.matchMedia
+      //
+      // Arguments:
+      //    mq (String): Media query
+      //
+      // Returns:
+      //    (Boolean): Whether the media query passes or not
+      match : function (mq) {
+        return window.matchMedia(mq).matches;
+      },
+
+      // Description:
+      //    Helpers for checking Foundation default media queries with JS
+      //
+      // Returns:
+      //    (Boolean): Whether the media query passes or not
+
+      is_small_up : function () {
+        return this.match(Foundation.media_queries.small);
+      },
+
+      is_medium_up : function () {
+        return this.match(Foundation.media_queries.medium);
+      },
+
+      is_large_up : function () {
+        return this.match(Foundation.media_queries.large);
+      },
+
+      is_xlarge_up : function () {
+        return this.match(Foundation.media_queries.xlarge);
+      },
+
+      is_xxlarge_up : function () {
+        return this.match(Foundation.media_queries.xxlarge);
+      },
+
+      is_small_only : function () {
+        return !this.is_medium_up() && !this.is_large_up() && !this.is_xlarge_up() && !this.is_xxlarge_up();
+      },
+
+      is_medium_only : function () {
+        return this.is_medium_up() && !this.is_large_up() && !this.is_xlarge_up() && !this.is_xxlarge_up();
+      },
+
+      is_large_only : function () {
+        return this.is_medium_up() && this.is_large_up() && !this.is_xlarge_up() && !this.is_xxlarge_up();
+      },
+
+      is_xlarge_only : function () {
+        return this.is_medium_up() && this.is_large_up() && this.is_xlarge_up() && !this.is_xxlarge_up();
+      },
+
+      is_xxlarge_only : function () {
+        return this.is_medium_up() && this.is_large_up() && this.is_xlarge_up() && this.is_xxlarge_up();
+      }
+    }
+  };
+
+  $.fn.foundation = function () {
+    var args = Array.prototype.slice.call(arguments, 0);
+
+    return this.each(function () {
+      Foundation.init.apply(Foundation, [this].concat(args));
+      return this;
+    });
+  };
+
+}(jQuery, window, window.document));
+
+;(function ($, window, document, undefined) {
+  'use strict';
+
+  Foundation.libs.abide = {
+    name : 'abide',
+
+    version : '5.5.3',
+
+    settings : {
+      live_validate : true, // validate the form as you go
+      validate_on_blur : true, // validate whenever you focus/blur on an input field
+      // validate_on: 'tab', // tab (when user tabs between fields), change (input changes), manual (call custom events)
+
+      focus_on_invalid : true, // automatically bring the focus to an invalid input field
+      error_labels : true, // labels with a for="inputId" will receive an `error` class
+      error_class : 'error', // labels with a for="inputId" will receive an `error` class
+      // the amount of time Abide will take before it validates the form (in ms).
+      // smaller time will result in faster validation
+      timeout : 1000,
+      patterns : {
+        alpha : /^[a-zA-Z]+$/,
+        alpha_numeric : /^[a-zA-Z0-9]+$/,
+        integer : /^[-+]?\d+$/,
+        number : /^[-+]?\d*(?:[\.\,]\d+)?$/,
+
+        // amex, visa, diners
+        card : /^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|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})$/,
+        cvv : /^([0-9]){3,4}$/,
+
+        // http://www.whatwg.org/specs/web-apps/current-work/multipage/states-of-the-type-attribute.html#valid-e-mail-address
+        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])?)+$/,
+
+        // http://blogs.lse.ac.uk/lti/2008/04/23/a-regular-expression-to-match-any-url/
+        url: /^(https?|ftp|file|ssh):\/\/([-;:&=\+\$,\w]+@{1})?([-A-Za-z0-9\.]+)+:?(\d+)?((\/[-\+~%\/\.\w]+)?\??([-\+=&;%@\.\w]+)?#?([\w]+)?)?/,
+        // abc.de
+        domain : /^([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,8}$/,
+
+        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))$/,
+        // YYYY-MM-DD
+        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))$/,
+        // HH:MM:SS
+        time : /^(0[0-9]|1[0-9]|2[0-3])(:[0-5][0-9]){2}$/,
+        dateISO : /^\d{4}[\/\-]\d{1,2}[\/\-]\d{1,2}$/,
+        // MM/DD/YYYY
+        month_day_year : /^(0[1-9]|1[012])[- \/.](0[1-9]|[12][0-9]|3[01])[- \/.]\d{4}$/,
+        // DD/MM/YYYY
+        day_month_year : /^(0[1-9]|[12][0-9]|3[01])[- \/.](0[1-9]|1[012])[- \/.]\d{4}$/,
+
+        // #FFF or #FFFFFF
+        color : /^#?([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$/
+      },
+      validators : {
+        equalTo : function (el, required, parent) {
+          var from  = document.getElementById(el.getAttribute(this.add_namespace('data-equalto'))).value,
+              to    = el.value,
+              valid = (from === to);
+
+          return valid;
+        }
+      }
+    },
+
+    timer : null,
+
+    init : function (scope, method, options) {
+      this.bindings(method, options);
+    },
+
+    events : function (scope) {
+      var self = this,
+          form = self.S(scope).attr('novalidate', 'novalidate'),
+          settings = form.data(this.attr_name(true) + '-init') || {};
+
+      this.invalid_attr = this.add_namespace('data-invalid');
+
+      function validate(originalSelf, e) {
+        clearTimeout(self.timer);
+        self.timer = setTimeout(function () {
+          self.validate([originalSelf], e);
+        }.bind(originalSelf), settings.timeout);
+      }
+
+      form
+        .off('.abide')
+        .on('submit.fndtn.abide', function (e) {
+          var is_ajax = /ajax/i.test(self.S(this).attr(self.attr_name()));
+          return self.validate(self.S(this).find('input, textarea, select').not(":hidden, [data-abide-ignore]").get(), e, is_ajax);
+        })
+        .on('validate.fndtn.abide', function (e) {
+          if (settings.validate_on === 'manual') {
+            self.validate([e.target], e);
+          }
+        })
+        .on('reset', function (e) {
+          return self.reset($(this), e);
+        })
+        .find('input, textarea, select').not(":hidden, [data-abide-ignore]")
+          .off('.abide')
+          .on('blur.fndtn.abide change.fndtn.abide', function (e) {
+              var id = this.getAttribute('id'),
+                  eqTo = form.find('[data-equalto="'+ id +'"]');
+            // old settings fallback
+            // will be deprecated with F6 release
+            if (settings.validate_on_blur && settings.validate_on_blur === true) {
+              validate(this, e);
+            }
+            // checks if there is an equalTo equivalent related by id
+            if(typeof eqTo.get(0) !== "undefined" && eqTo.val().length){
+              validate(eqTo.get(0),e);
+            }
+            // new settings combining validate options into one setting
+            if (settings.validate_on === 'change') {
+              validate(this, e);
+            }
+          })
+          .on('keydown.fndtn.abide', function (e) {
+            var id = this.getAttribute('id'),
+                eqTo = form.find('[data-equalto="'+ id +'"]');
+            // old settings fallback
+            // will be deprecated with F6 release
+            if (settings.live_validate && settings.live_validate === true && e.which != 9) {
+              validate(this, e);
+            }
+            // checks if there is an equalTo equivalent related by id
+            if(typeof eqTo.get(0) !== "undefined" && eqTo.val().length){
+              validate(eqTo.get(0),e);
+            }
+            // new settings combining validate options into one setting
+            if (settings.validate_on === 'tab' && e.which === 9) {
+              validate(this, e);
+            }
+            else if (settings.validate_on === 'change') {
+              validate(this, e);
+            }
+          })
+          .on('focus', function (e) {
+            if (navigator.userAgent.match(/iPad|iPhone|Android|BlackBerry|Windows Phone|webOS/i)) {
+              $('html, body').animate({
+                  scrollTop: $(e.target).offset().top
+              }, 100);
+            }
+          });
+    },
+
+    reset : function (form, e) {
+      var self = this;
+      form.removeAttr(self.invalid_attr);
+
+      $('[' + self.invalid_attr + ']', form).removeAttr(self.invalid_attr);
+      $('.' + self.settings.error_class, form).not('small').removeClass(self.settings.error_class);
+      $(':input', form).not(':button, :submit, :reset, :hidden, [data-abide-ignore]').val('').removeAttr(self.invalid_attr);
+    },
+
+    validate : function (els, e, is_ajax) {
+      var validations = this.parse_patterns(els),
+          validation_count = validations.length,
+          form = this.S(els[0]).closest('form'),
+          submit_event = /submit/.test(e.type);
+
+      // Has to count up to make sure the focus gets applied to the top error
+      for (var i = 0; i < validation_count; i++) {
+        if (!validations[i] && (submit_event || is_ajax)) {
+          if (this.settings.focus_on_invalid) {
+            els[i].focus();
+          }
+          form.trigger('invalid.fndtn.abide');
+          this.S(els[i]).closest('form').attr(this.invalid_attr, '');
+          return false;
+        }
+      }
+
+      if (submit_event || is_ajax) {
+        form.trigger('valid.fndtn.abide');
+      }
+
+      form.removeAttr(this.invalid_attr);
+
+      if (is_ajax) {
+        return false;
+      }
+
+      return true;
+    },
+
+    parse_patterns : function (els) {
+      var i = els.length,
+          el_patterns = [];
+
+      while (i--) {
+        el_patterns.push(this.pattern(els[i]));
+      }
+
+      return this.check_validation_and_apply_styles(el_patterns);
+    },
+
+    pattern : function (el) {
+      var type = el.getAttribute('type'),
+          required = typeof el.getAttribute('required') === 'string';
+
+      var pattern = el.getAttribute('pattern') || '';
+
+      if (this.settings.patterns.hasOwnProperty(pattern) && pattern.length > 0) {
+        return [el, this.settings.patterns[pattern], required];
+      } else if (pattern.length > 0) {
+        return [el, new RegExp(pattern), required];
+      }
+
+      if (this.settings.patterns.hasOwnProperty(type)) {
+        return [el, this.settings.patterns[type], required];
+      }
+
+      pattern = /.*/;
+
+      return [el, pattern, required];
+    },
+
+    // TODO: Break this up into smaller methods, getting hard to read.
+    check_validation_and_apply_styles : function (el_patterns) {
+      var i = el_patterns.length,
+          validations = [];
+      if (i == 0) {
+        return validations;
+      }
+      var form = this.S(el_patterns[0][0]).closest('[data-' + this.attr_name(true) + ']'),
+          settings = form.data(this.attr_name(true) + '-init') || {};
+      while (i--) {
+        var el = el_patterns[i][0],
+            required = el_patterns[i][2],
+            value = el.value.trim(),
+            direct_parent = this.S(el).parent(),
+            validator = el.getAttribute(this.add_namespace('data-abide-validator')),
+            is_radio = el.type === 'radio',
+            is_checkbox = el.type === 'checkbox',
+            label = this.S('label[for="' + el.getAttribute('id') + '"]'),
+            valid_length = (required) ? (el.value.length > 0) : true,
+            el_validations = [];
+
+        var parent, valid;
+
+        // support old way to do equalTo validations
+        if (el.getAttribute(this.add_namespace('data-equalto'))) { validator = 'equalTo' }
+
+        if (!direct_parent.is('label')) {
+          parent = direct_parent;
+        } else {
+          parent = direct_parent.parent();
+        }
+
+        if (is_radio && required) {
+          el_validations.push(this.valid_radio(el, required));
+        } else if (is_checkbox && required) {
+          el_validations.push(this.valid_checkbox(el, required));
+
+        } else if (validator) {
+          // Validate using each of the specified (space-delimited) validators.
+          var validators = validator.split(' ');
+          var last_valid = true, all_valid = true;
+          for (var iv = 0; iv < validators.length; iv++) {
+              valid = this.settings.validators[validators[iv]].apply(this, [el, required, parent])
+              el_validations.push(valid);
+              all_valid = valid && last_valid;
+              last_valid = valid;
+          }
+          if (all_valid) {
+              this.S(el).removeAttr(this.invalid_attr);
+              parent.removeClass('error');
+              if (label.length > 0 && this.settings.error_labels) {
+                label.removeClass(this.settings.error_class).removeAttr('role');
+              }
+              $(el).triggerHandler('valid');
+          } else {
+              this.S(el).attr(this.invalid_attr, '');
+              parent.addClass('error');
+              if (label.length > 0 && this.settings.error_labels) {
+                label.addClass(this.settings.error_class).attr('role', 'alert');
+              }
+              $(el).triggerHandler('invalid');
+          }
+        } else {
+
+          if (el_patterns[i][1].test(value) && valid_length ||
+            !required && el.value.length < 1 || $(el).attr('disabled')) {
+            el_validations.push(true);
+          } else {
+            el_validations.push(false);
+          }
+
+          el_validations = [el_validations.every(function (valid) {return valid;})];
+          if (el_validations[0]) {
+            this.S(el).removeAttr(this.invalid_attr);
+            el.setAttribute('aria-invalid', 'false');
+            el.removeAttribute('aria-describedby');
+            parent.removeClass(this.settings.error_class);
+            if (label.length > 0 && this.settings.error_labels) {
+              label.removeClass(this.settings.error_class).removeAttr('role');
+            }
+            $(el).triggerHandler('valid');
+          } else {
+            this.S(el).attr(this.invalid_attr, '');
+            el.setAttribute('aria-invalid', 'true');
+
+            // Try to find the error associated with the input
+            var errorElem = parent.find('small.' + this.settings.error_class, 'span.' + this.settings.error_class);
+            var errorID = errorElem.length > 0 ? errorElem[0].id : '';
+            if (errorID.length > 0) {
+              el.setAttribute('aria-describedby', errorID);
+            }
+
+            // el.setAttribute('aria-describedby', $(el).find('.error')[0].id);
+            parent.addClass(this.settings.error_class);
+            if (label.length > 0 && this.settings.error_labels) {
+              label.addClass(this.settings.error_class).attr('role', 'alert');
+            }
+            $(el).triggerHandler('invalid');
+          }
+        }
+        validations = validations.concat(el_validations);
+      }
+
+      return validations;
+    },
+
+    valid_checkbox : function (el, required) {
+      var el = this.S(el),
+          valid = (el.is(':checked') || !required || el.get(0).getAttribute('disabled'));
+
+      if (valid) {
+        el.removeAttr(this.invalid_attr).parent().removeClass(this.settings.error_class);
+        $(el).triggerHandler('valid');
+      } else {
+        el.attr(this.invalid_attr, '').parent().addClass(this.settings.error_class);
+        $(el).triggerHandler('invalid');
+      }
+
+      return valid;
+    },
+
+    valid_radio : function (el, required) {
+      var name = el.getAttribute('name'),
+          group = this.S(el).closest('[data-' + this.attr_name(true) + ']').find("[name='" + name + "']"),
+          count = group.length,
+          valid = false,
+          disabled = false;
+
+      // Has to count up to make sure the focus gets applied to the top error
+      for (var i=0; i < count; i++) {
+        if( group[i].getAttribute('disabled') ){
+          disabled=true;
+          valid=true;
+        } else {
+          if (group[i].checked){
+            valid = true;
+          } else {
+            if( disabled ){
+              valid = false;
+            }
+          }
+        }
+      }
+
+      // Has to count up to make sure the focus gets applied to the top error
+      for (var i = 0; i < count; i++) {
+        if (valid) {
+          this.S(group[i]).removeAttr(this.invalid_attr).parent().removeClass(this.settings.error_class);
+          $(group[i]).triggerHandler('valid');
+        } else {
+          this.S(group[i]).attr(this.invalid_attr, '').parent().addClass(this.settings.error_class);
+          $(group[i]).triggerHandler('invalid');
+        }
+      }
+
+      return valid;
+    },
+
+    valid_equal : function (el, required, parent) {
+      var from  = document.getElementById(el.getAttribute(this.add_namespace('data-equalto'))).value,
+          to    = el.value,
+          valid = (from === to);
+
+      if (valid) {
+        this.S(el).removeAttr(this.invalid_attr);
+        parent.removeClass(this.settings.error_class);
+        if (label.length > 0 && settings.error_labels) {
+          label.removeClass(this.settings.error_class);
+        }
+      } else {
+        this.S(el).attr(this.invalid_attr, '');
+        parent.addClass(this.settings.error_class);
+        if (label.length > 0 && settings.error_labels) {
+          label.addClass(this.settings.error_class);
+        }
+      }
+
+      return valid;
+    },
+
+    valid_oneof : function (el, required, parent, doNotValidateOthers) {
+      var el = this.S(el),
+        others = this.S('[' + this.add_namespace('data-oneof') + ']'),
+        valid = others.filter(':checked').length > 0;
+
+      if (valid) {
+        el.removeAttr(this.invalid_attr).parent().removeClass(this.settings.error_class);
+      } else {
+        el.attr(this.invalid_attr, '').parent().addClass(this.settings.error_class);
+      }
+
+      if (!doNotValidateOthers) {
+        var _this = this;
+        others.each(function () {
+          _this.valid_oneof.call(_this, this, null, null, true);
+        });
+      }
+
+      return valid;
+    },
+
+    reflow : function(scope, options) {
+      var self = this,
+          form = self.S('[' + this.attr_name() + ']').attr('novalidate', 'novalidate');
+          self.S(form).each(function (idx, el) {
+            self.events(el);
+          });
+    }
+  };
+}(jQuery, window, window.document));
+
+;(function ($, window, document, undefined) {
+  'use strict';
+
+  Foundation.libs.accordion = {
+    name : 'accordion',
+
+    version : '5.5.3',
+
+    settings : {
+      content_class : 'content',
+      active_class : 'active',
+      multi_expand : false,
+      toggleable : true,
+      callback : function () {}
+    },
+
+    init : function (scope, method, options) {
+      this.bindings(method, options);
+    },
+
+    events : function (instance) {
+      var self = this;
+      var S = this.S;
+      self.create(this.S(instance));
+
+      S(this.scope)
+      .off('.fndtn.accordion')
+      .on('click.fndtn.accordion', '[' + this.attr_name() + '] > dd > a, [' + this.attr_name() + '] > li > a', function (e) {
+        var accordion = S(this).closest('[' + self.attr_name() + ']'),
+            groupSelector = self.attr_name() + '=' + accordion.attr(self.attr_name()),
+            settings = accordion.data(self.attr_name(true) + '-init') || self.settings,
+            target = S('#' + this.href.split('#')[1]),
+            aunts = $('> dd, > li', accordion),
+            siblings = aunts.children('.' + settings.content_class),
+            active_content = siblings.filter('.' + settings.active_class);
+
+        e.preventDefault();
+
+        if (accordion.attr(self.attr_name())) {
+          siblings = siblings.add('[' + groupSelector + '] dd > ' + '.' + settings.content_class + ', [' + groupSelector + '] li > ' + '.' + settings.content_class);
+          aunts = aunts.add('[' + groupSelector + '] dd, [' + groupSelector + '] li');
+        }
+
+        if (settings.toggleable && target.is(active_content)) {
+          target.parent('dd, li').toggleClass(settings.active_class, false);
+          target.toggleClass(settings.active_class, false);
+          S(this).attr('aria-expanded', function(i, attr){
+              return attr === 'true' ? 'false' : 'true';
+          });
+          settings.callback(target);
+          target.triggerHandler('toggled', [accordion]);
+          accordion.triggerHandler('toggled', [target]);
+          return;
+        }
+
+        if (!settings.multi_expand) {
+          siblings.removeClass(settings.active_class);
+          aunts.removeClass(settings.active_class);
+          aunts.children('a').attr('aria-expanded','false');
+        }
+
+        target.addClass(settings.active_class).parent().addClass(settings.active_class);
+        settings.callback(target);
+        target.triggerHandler('toggled', [accordion]);
+        accordion.triggerHandler('toggled', [target]);
+        S(this).attr('aria-expanded','true');
+      });
+    },
+
+    create: function($instance) {
+      var self = this,
+          accordion = $instance,
+          aunts = $('> .accordion-navigation', accordion),
+          settings = accordion.data(self.attr_name(true) + '-init') || self.settings;
+
+      aunts.children('a').attr('aria-expanded','false');
+      aunts.has('.' + settings.content_class + '.' + settings.active_class).addClass(settings.active_class).children('a').attr('aria-expanded','true');
+
+      if (settings.multi_expand) {
+        $instance.attr('aria-multiselectable','true');
+      }
+    },
+       
+       toggle : function(options) {
+               var options = typeof options !== 'undefined' ? options : {};
+               var selector = typeof options.selector !== 'undefined' ? options.selector : '';
+               var toggle_state = typeof options.toggle_state !== 'undefined' ? options.toggle_state : '';
+               var $accordion = typeof options.$accordion !== 'undefined' ? options.$accordion : this.S(this.scope).closest('[' + this.attr_name() + ']');
+  
+               var $items = $accordion.find('> dd' + selector + ', > li' + selector);
+               if ( $items.length < 1 ) {
+                       if ( window.console ) {
+                               console.error('Selection not found.', selector);
+                       }
+                       return false;
+               }
+  
+               var S = this.S;
+               var active_class = this.settings.active_class;
+               $items.each(function() {
+                       var $item = S(this);
+                       var is_active = $item.hasClass(active_class);
+                       if ( ( is_active && toggle_state === 'close' ) || ( !is_active && toggle_state === 'open' ) || toggle_state === '' ) {
+                               $item.find('> a').trigger('click.fndtn.accordion');
+                       }
+               });
+       },
+  
+       open : function(options) {
+               var options = typeof options !== 'undefined' ? options : {};
+               options.toggle_state = 'open';
+               this.toggle(options);
+       },
+  
+       close : function(options) {
+               var options = typeof options !== 'undefined' ? options : {};
+               options.toggle_state = 'close';
+               this.toggle(options);
+       },      
+
+    off : function () {},
+
+    reflow : function () {}
+  };
+}(jQuery, window, window.document));
+
+;(function ($, window, document, undefined) {
+  'use strict';
+
+  Foundation.libs.alert = {
+    name : 'alert',
+
+    version : '5.5.3',
+
+    settings : {
+      callback : function () {}
+    },
+
+    init : function (scope, method, options) {
+      this.bindings(method, options);
+    },
+
+    events : function () {
+      var self = this,
+          S = this.S;
+
+      $(this.scope).off('.alert').on('click.fndtn.alert', '[' + this.attr_name() + '] .close', function (e) {
+        var alertBox = S(this).closest('[' + self.attr_name() + ']'),
+            settings = alertBox.data(self.attr_name(true) + '-init') || self.settings;
+
+        e.preventDefault();
+        if (Modernizr.csstransitions) {
+          alertBox.addClass('alert-close');
+          alertBox.on('transitionend webkitTransitionEnd oTransitionEnd', function (e) {
+            S(this).trigger('close.fndtn.alert').remove();
+            settings.callback();
+          });
+        } else {
+          alertBox.fadeOut(300, function () {
+            S(this).trigger('close.fndtn.alert').remove();
+            settings.callback();
+          });
+        }
+      });
+    },
+
+    reflow : function () {}
+  };
+}(jQuery, window, window.document));
+
+;(function ($, window, document, undefined) {
+  'use strict';
+
+  Foundation.libs.clearing = {
+    name : 'clearing',
+
+    version : '5.5.3',
+
+    settings : {
+      templates : {
+        viewing : '<a href="#" class="clearing-close">&times;</a>' +
+          '<div class="visible-img" style="display: none"><div class="clearing-touch-label"></div><img src="data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs%3D" alt="" />' +
+          '<p class="clearing-caption"></p><a href="#" class="clearing-main-prev"><span></span></a>' +
+          '<a href="#" class="clearing-main-next"><span></span></a></div>' +
+          '<img class="clearing-preload-next" style="display: none" src="data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs%3D" alt="" />' +
+          '<img class="clearing-preload-prev" style="display: none" src="data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs%3D" alt="" />'
+      },
+
+      // comma delimited list of selectors that, on click, will close clearing,
+      // add 'div.clearing-blackout, div.visible-img' to close on background click
+      close_selectors : '.clearing-close, div.clearing-blackout',
+
+      // Default to the entire li element.
+      open_selectors : '',
+
+      // Image will be skipped in carousel.
+      skip_selector : '',
+
+      touch_label : '',
+
+      // event initializer and locks
+      init : false,
+      locked : false
+    },
+
+    init : function (scope, method, options) {
+      var self = this;
+      Foundation.inherit(this, 'throttle image_loaded');
+
+      this.bindings(method, options);
+
+      if (self.S(this.scope).is('[' + this.attr_name() + ']')) {
+        this.assemble(self.S('li', this.scope));
+      } else {
+        self.S('[' + this.attr_name() + ']', this.scope).each(function () {
+          self.assemble(self.S('li', this));
+        });
+      }
+    },
+
+    events : function (scope) {
+      var self = this,
+          S = self.S,
+          $scroll_container = $('.scroll-container');
+
+      if ($scroll_container.length > 0) {
+        this.scope = $scroll_container;
+      }
+
+      S(this.scope)
+        .off('.clearing')
+        .on('click.fndtn.clearing', 'ul[' + this.attr_name() + '] li ' + this.settings.open_selectors,
+          function (e, current, target) {
+            var current = current || S(this),
+                target = target || current,
+                next = current.next('li'),
+                settings = current.closest('[' + self.attr_name() + ']').data(self.attr_name(true) + '-init'),
+                image = S(e.target);
+
+            e.preventDefault();
+
+            if (!settings) {
+              self.init();
+              settings = current.closest('[' + self.attr_name() + ']').data(self.attr_name(true) + '-init');
+            }
+
+            // if clearing is open and the current image is
+            // clicked, go to the next image in sequence
+            if (target.hasClass('visible') &&
+              current[0] === target[0] &&
+              next.length > 0 && self.is_open(current)) {
+              target = next;
+              image = S('img', target);
+            }
+
+            // set current and target to the clicked li if not otherwise defined.
+            self.open(image, current, target);
+            self.update_paddles(target);
+          })
+
+        .on('click.fndtn.clearing', '.clearing-main-next',
+          function (e) { self.nav(e, 'next') })
+        .on('click.fndtn.clearing', '.clearing-main-prev',
+          function (e) { self.nav(e, 'prev') })
+        .on('click.fndtn.clearing', this.settings.close_selectors,
+          function (e) { Foundation.libs.clearing.close(e, this) });
+
+      $(document).on('keydown.fndtn.clearing',
+          function (e) { self.keydown(e) });
+
+      S(window).off('.clearing').on('resize.fndtn.clearing',
+        function () { self.resize() });
+
+      this.swipe_events(scope);
+    },
+
+    swipe_events : function (scope) {
+      var self = this,
+      S = self.S;
+
+      S(this.scope)
+        .on('touchstart.fndtn.clearing', '.visible-img', function (e) {
+          if (!e.touches) { e = e.originalEvent; }
+          var data = {
+                start_page_x : e.touches[0].pageX,
+                start_page_y : e.touches[0].pageY,
+                start_time : (new Date()).getTime(),
+                delta_x : 0,
+                is_scrolling : undefined
+              };
+
+          S(this).data('swipe-transition', data);
+          e.stopPropagation();
+        })
+        .on('touchmove.fndtn.clearing', '.visible-img', function (e) {
+          if (!e.touches) {
+            e = e.originalEvent;
+          }
+          // Ignore pinch/zoom events
+          if (e.touches.length > 1 || e.scale && e.scale !== 1) {
+            return;
+          }
+
+          var data = S(this).data('swipe-transition');
+
+          if (typeof data === 'undefined') {
+            data = {};
+          }
+
+          data.delta_x = e.touches[0].pageX - data.start_page_x;
+
+          if (Foundation.rtl) {
+            data.delta_x = -data.delta_x;
+          }
+
+          if (typeof data.is_scrolling === 'undefined') {
+            data.is_scrolling = !!( data.is_scrolling || Math.abs(data.delta_x) < Math.abs(e.touches[0].pageY - data.start_page_y) );
+          }
+
+          if (!data.is_scrolling && !data.active) {
+            e.preventDefault();
+            var direction = (data.delta_x < 0) ? 'next' : 'prev';
+            data.active = true;
+            self.nav(e, direction);
+          }
+        })
+        .on('touchend.fndtn.clearing', '.visible-img', function (e) {
+          S(this).data('swipe-transition', {});
+          e.stopPropagation();
+        });
+    },
+
+    assemble : function ($li) {
+      var $el = $li.parent();
+
+      if ($el.parent().hasClass('carousel')) {
+        return;
+      }
+
+      $el.after('<div id="foundationClearingHolder"></div>');
+
+      var grid = $el.detach(),
+          grid_outerHTML = '';
+
+      if (grid[0] == null) {
+        return;
+      } else {
+        grid_outerHTML = grid[0].outerHTML;
+      }
+
+      var holder = this.S('#foundationClearingHolder'),
+          settings = $el.data(this.attr_name(true) + '-init'),
+          data = {
+            grid : '<div class="carousel">' + grid_outerHTML + '</div>',
+            viewing : settings.templates.viewing
+          },
+          wrapper = '<div class="clearing-assembled"><div>' + data.viewing +
+            data.grid + '</div></div>',
+          touch_label = this.settings.touch_label;
+
+      if (Modernizr.touch) {
+        wrapper = $(wrapper).find('.clearing-touch-label').html(touch_label).end();
+      }
+
+      holder.after(wrapper).remove();
+    },
+
+    open : function ($image, current, target) {
+      var self = this,
+          body = $(document.body),
+          root = target.closest('.clearing-assembled'),
+          container = self.S('div', root).first(),
+          visible_image = self.S('.visible-img', container),
+          image = self.S('img', visible_image).not($image),
+          label = self.S('.clearing-touch-label', container),
+          error = false,
+          loaded = {};
+
+      // Event to disable scrolling on touch devices when Clearing is activated
+      $('body').on('touchmove', function (e) {
+        e.preventDefault();
+      });
+
+      image.error(function () {
+        error = true;
+      });
+
+      function startLoad() {
+        setTimeout(function () {
+          this.image_loaded(image, function () {
+            if (image.outerWidth() === 1 && !error) {
+              startLoad.call(this);
+            } else {
+              cb.call(this, image);
+            }
+          }.bind(this));
+        }.bind(this), 100);
+      }
+
+      function cb (image) {
+        var $image = $(image);
+        $image.css('visibility', 'visible');
+        $image.trigger('imageVisible');
+        // toggle the gallery
+        body.css('overflow', 'hidden');
+        root.addClass('clearing-blackout');
+        container.addClass('clearing-container');
+        visible_image.show();
+        this.fix_height(target)
+          .caption(self.S('.clearing-caption', visible_image), self.S('img', target))
+          .center_and_label(image, label)
+          .shift(current, target, function () {
+            target.closest('li').siblings().removeClass('visible');
+            target.closest('li').addClass('visible');
+          });
+        visible_image.trigger('opened.fndtn.clearing')
+      }
+
+      if (!this.locked()) {
+        visible_image.trigger('open.fndtn.clearing');
+        // set the image to the selected thumbnail
+        loaded = this.load($image);
+        if (loaded.interchange) {
+          image
+            .attr('data-interchange', loaded.interchange)
+            .foundation('interchange', 'reflow');
+        } else {
+          image
+            .attr('src', loaded.src)
+            .attr('data-interchange', '');
+        }
+        image.css('visibility', 'hidden');
+
+        startLoad.call(this);
+      }
+    },
+
+    close : function (e, el) {
+      e.preventDefault();
+
+      var root = (function (target) {
+            if (/blackout/.test(target.selector)) {
+              return target;
+            } else {
+              return target.closest('.clearing-blackout');
+            }
+          }($(el))),
+          body = $(document.body), container, visible_image;
+
+      if (el === e.target && root) {
+        body.css('overflow', '');
+        container = $('div', root).first();
+        visible_image = $('.visible-img', container);
+        visible_image.trigger('close.fndtn.clearing');
+        this.settings.prev_index = 0;
+        $('ul[' + this.attr_name() + ']', root)
+          .attr('style', '').closest('.clearing-blackout')
+          .removeClass('clearing-blackout');
+        container.removeClass('clearing-container');
+        visible_image.hide();
+        visible_image.trigger('closed.fndtn.clearing');
+      }
+
+      // Event to re-enable scrolling on touch devices
+      $('body').off('touchmove');
+
+      return false;
+    },
+
+    is_open : function (current) {
+      return current.parent().prop('style').length > 0;
+    },
+
+    keydown : function (e) {
+      var clearing = $('.clearing-blackout ul[' + this.attr_name() + ']'),
+          NEXT_KEY = this.rtl ? 37 : 39,
+          PREV_KEY = this.rtl ? 39 : 37,
+          ESC_KEY = 27;
+
+      if (e.which === NEXT_KEY) {
+        this.go(clearing, 'next');
+      }
+      if (e.which === PREV_KEY) {
+        this.go(clearing, 'prev');
+      }
+      if (e.which === ESC_KEY) {
+        this.S('a.clearing-close').trigger('click.fndtn.clearing');
+      }
+    },
+
+    nav : function (e, direction) {
+      var clearing = $('ul[' + this.attr_name() + ']', '.clearing-blackout');
+
+      e.preventDefault();
+      this.go(clearing, direction);
+    },
+
+    resize : function () {
+      var image = $('img', '.clearing-blackout .visible-img'),
+          label = $('.clearing-touch-label', '.clearing-blackout');
+
+      if (image.length) {
+        this.center_and_label(image, label);
+        image.trigger('resized.fndtn.clearing')
+      }
+    },
+
+    // visual adjustments
+    fix_height : function (target) {
+      var lis = target.parent().children(),
+          self = this;
+
+      lis.each(function () {
+        var li = self.S(this),
+            image = li.find('img');
+
+        if (li.height() > image.outerHeight()) {
+          li.addClass('fix-height');
+        }
+      })
+      .closest('ul')
+      .width(lis.length * 100 + '%');
+
+      return this;
+    },
+
+    update_paddles : function (target) {
+      target = target.closest('li');
+      var visible_image = target
+        .closest('.carousel')
+        .siblings('.visible-img');
+
+      if (target.next().length > 0) {
+        this.S('.clearing-main-next', visible_image).removeClass('disabled');
+      } else {
+        this.S('.clearing-main-next', visible_image).addClass('disabled');
+      }
+
+      if (target.prev().length > 0) {
+        this.S('.clearing-main-prev', visible_image).removeClass('disabled');
+      } else {
+        this.S('.clearing-main-prev', visible_image).addClass('disabled');
+      }
+    },
+
+    center_and_label : function (target, label) {
+      if (!this.rtl && label.length > 0) {
+        label.css({
+          marginLeft : -(label.outerWidth() / 2),
+          marginTop : -(target.outerHeight() / 2)-label.outerHeight()-10
+        });
+      } else {
+        label.css({
+          marginRight : -(label.outerWidth() / 2),
+          marginTop : -(target.outerHeight() / 2)-label.outerHeight()-10,
+          left: 'auto',
+          right: '50%'
+        });
+      }
+      return this;
+    },
+
+    // image loading and preloading
+
+    load : function ($image) {
+      var href,
+          interchange,
+          closest_a;
+
+      if ($image[0].nodeName === 'A') {
+        href = $image.attr('href');
+        interchange = $image.data('clearing-interchange');
+      } else {
+        closest_a = $image.closest('a');
+        href = closest_a.attr('href');
+        interchange = closest_a.data('clearing-interchange');
+      }
+
+      this.preload($image);
+
+      return {
+        'src': href ? href : $image.attr('src'),
+        'interchange': href ? interchange : $image.data('clearing-interchange')
+      }
+    },
+
+    preload : function ($image) {
+      this
+        .img($image.closest('li').next(), 'next')
+        .img($image.closest('li').prev(), 'prev');
+    },
+
+    img : function (img, sibling_type) {
+      if (img.length) {
+        var preload_img = $('.clearing-preload-' + sibling_type),
+            new_a = this.S('a', img),
+            src,
+            interchange,
+            image;
+
+        if (new_a.length) {
+          src = new_a.attr('href');
+          interchange = new_a.data('clearing-interchange');
+        } else {
+          image = this.S('img', img);
+          src = image.attr('src');
+          interchange = image.data('clearing-interchange');
+        }
+
+        if (interchange) {
+          preload_img.attr('data-interchange', interchange);
+        } else {
+          preload_img.attr('src', src);
+          preload_img.attr('data-interchange', '');
+        }
+      }
+      return this;
+    },
+
+    // image caption
+
+    caption : function (container, $image) {
+      var caption = $image.attr('data-caption');
+
+      if (caption) {
+       var containerPlain = container.get(0);
+       containerPlain.innerHTML = caption;
+        container.show();
+      } else {
+        container
+          .text('')
+          .hide();
+      }
+      return this;
+    },
+
+    // directional methods
+
+    go : function ($ul, direction) {
+      var current = this.S('.visible', $ul),
+          target = current[direction]();
+
+      // Check for skip selector.
+      if (this.settings.skip_selector && target.find(this.settings.skip_selector).length != 0) {
+        target = target[direction]();
+      }
+
+      if (target.length) {
+        this.S('img', target)
+          .trigger('click.fndtn.clearing', [current, target])
+          .trigger('change.fndtn.clearing');
+      }
+    },
+
+    shift : function (current, target, callback) {
+      var clearing = target.parent(),
+          old_index = this.settings.prev_index || target.index(),
+          direction = this.direction(clearing, current, target),
+          dir = this.rtl ? 'right' : 'left',
+          left = parseInt(clearing.css('left'), 10),
+          width = target.outerWidth(),
+          skip_shift;
+
+      var dir_obj = {};
+
+      // we use jQuery animate instead of CSS transitions because we
+      // need a callback to unlock the next animation
+      // needs support for RTL **
+      if (target.index() !== old_index && !/skip/.test(direction)) {
+        if (/left/.test(direction)) {
+          this.lock();
+          dir_obj[dir] = left + width;
+          clearing.animate(dir_obj, 300, this.unlock());
+        } else if (/right/.test(direction)) {
+          this.lock();
+          dir_obj[dir] = left - width;
+          clearing.animate(dir_obj, 300, this.unlock());
+        }
+      } else if (/skip/.test(direction)) {
+        // the target image is not adjacent to the current image, so
+        // do we scroll right or not
+        skip_shift = target.index() - this.settings.up_count;
+        this.lock();
+
+        if (skip_shift > 0) {
+          dir_obj[dir] = -(skip_shift * width);
+          clearing.animate(dir_obj, 300, this.unlock());
+        } else {
+          dir_obj[dir] = 0;
+          clearing.animate(dir_obj, 300, this.unlock());
+        }
+      }
+
+      callback();
+    },
+
+    direction : function ($el, current, target) {
+      var lis = this.S('li', $el),
+          li_width = lis.outerWidth() + (lis.outerWidth() / 4),
+          up_count = Math.floor(this.S('.clearing-container').outerWidth() / li_width) - 1,
+          target_index = lis.index(target),
+          response;
+
+      this.settings.up_count = up_count;
+
+      if (this.adjacent(this.settings.prev_index, target_index)) {
+        if ((target_index > up_count) && target_index > this.settings.prev_index) {
+          response = 'right';
+        } else if ((target_index > up_count - 1) && target_index <= this.settings.prev_index) {
+          response = 'left';
+        } else {
+          response = false;
+        }
+      } else {
+        response = 'skip';
+      }
+
+      this.settings.prev_index = target_index;
+
+      return response;
+    },
+
+    adjacent : function (current_index, target_index) {
+      for (var i = target_index + 1; i >= target_index - 1; i--) {
+        if (i === current_index) {
+          return true;
+        }
+      }
+      return false;
+    },
+
+    // lock management
+
+    lock : function () {
+      this.settings.locked = true;
+    },
+
+    unlock : function () {
+      this.settings.locked = false;
+    },
+
+    locked : function () {
+      return this.settings.locked;
+    },
+
+    off : function () {
+      this.S(this.scope).off('.fndtn.clearing');
+      this.S(window).off('.fndtn.clearing');
+    },
+
+    reflow : function () {
+      this.init();
+    }
+  };
+
+}(jQuery, window, window.document));
+
+;(function ($, window, document, undefined) {
+  'use strict';
+
+  Foundation.libs.dropdown = {
+    name : 'dropdown',
+
+    version : '5.5.3',
+
+    settings : {
+      active_class : 'open',
+      disabled_class : 'disabled',
+      mega_class : 'mega',
+      align : 'bottom',
+      is_hover : false,
+      hover_timeout : 150,
+      opened : function () {},
+      closed : function () {}
+    },
+
+    init : function (scope, method, options) {
+      Foundation.inherit(this, 'throttle');
+
+      $.extend(true, this.settings, method, options);
+      this.bindings(method, options);
+    },
+
+    events : function (scope) {
+      var self = this,
+          S = self.S;
+
+      S(this.scope)
+        .off('.dropdown')
+        .on('click.fndtn.dropdown', '[' + this.attr_name() + ']', function (e) {
+          var settings = S(this).data(self.attr_name(true) + '-init') || self.settings;
+          if (!settings.is_hover || Modernizr.touch) {
+            e.preventDefault();
+            if (S(this).parent('[data-reveal-id]').length) {
+              e.stopPropagation();
+            }
+            self.toggle($(this));
+          }
+        })
+        .on('mouseenter.fndtn.dropdown', '[' + this.attr_name() + '], [' + this.attr_name() + '-content]', function (e) {
+          var $this = S(this),
+              dropdown,
+              target;
+
+          clearTimeout(self.timeout);
+
+          if ($this.data(self.data_attr())) {
+            dropdown = S('#' + $this.data(self.data_attr()));
+            target = $this;
+          } else {
+            dropdown = $this;
+            target = S('[' + self.attr_name() + '="' + dropdown.attr('id') + '"]');
+          }
+
+          var settings = target.data(self.attr_name(true) + '-init') || self.settings;
+
+          if (S(e.currentTarget).data(self.data_attr()) && settings.is_hover) {
+            self.closeall.call(self);
+          }
+
+          if (settings.is_hover) {
+            self.open.apply(self, [dropdown, target]);
+          }
+        })
+        .on('mouseleave.fndtn.dropdown', '[' + this.attr_name() + '], [' + this.attr_name() + '-content]', function (e) {
+          var $this = S(this);
+          var settings;
+
+          if ($this.data(self.data_attr())) {
+              settings = $this.data(self.data_attr(true) + '-init') || self.settings;
+          } else {
+              var target   = S('[' + self.attr_name() + '="' + S(this).attr('id') + '"]'),
+                  settings = target.data(self.attr_name(true) + '-init') || self.settings;
+          }
+
+          self.timeout = setTimeout(function () {
+            if ($this.data(self.data_attr())) {
+              if (settings.is_hover) {
+                self.close.call(self, S('#' + $this.data(self.data_attr())));
+              }
+            } else {
+              if (settings.is_hover) {
+                self.close.call(self, $this);
+              }
+            }
+          }.bind(this), settings.hover_timeout);
+        })
+        .on('click.fndtn.dropdown', function (e) {
+          var parent = S(e.target).closest('[' + self.attr_name() + '-content]');
+          var links  = parent.find('a');
+
+          if (links.length > 0 && parent.attr('aria-autoclose') !== 'false') {
+              self.close.call(self, S('[' + self.attr_name() + '-content]'));
+          }
+
+          if (e.target !== document && !$.contains(document.documentElement, e.target)) {
+            return;
+          }
+
+          if (S(e.target).closest('[' + self.attr_name() + ']').length > 0) {
+            return;
+          }
+
+          if (!(S(e.target).data('revealId')) &&
+            (parent.length > 0 && (S(e.target).is('[' + self.attr_name() + '-content]') ||
+              $.contains(parent.first()[0], e.target)))) {
+            e.stopPropagation();
+            return;
+          }
+
+          self.close.call(self, S('[' + self.attr_name() + '-content]'));
+        })
+        .on('opened.fndtn.dropdown', '[' + self.attr_name() + '-content]', function () {
+          self.settings.opened.call(this);
+        })
+        .on('closed.fndtn.dropdown', '[' + self.attr_name() + '-content]', function () {
+          self.settings.closed.call(this);
+        });
+
+      S(window)
+        .off('.dropdown')
+        .on('resize.fndtn.dropdown', self.throttle(function () {
+          self.resize.call(self);
+        }, 50));
+
+      this.resize();
+    },
+
+    close : function (dropdown) {
+      var self = this;
+      dropdown.each(function (idx) {
+        var original_target = $('[' + self.attr_name() + '=' + dropdown[idx].id + ']') || $('aria-controls=' + dropdown[idx].id + ']');
+        original_target.attr('aria-expanded', 'false');
+        if (self.S(this).hasClass(self.settings.active_class)) {
+          self.S(this)
+            .css(Foundation.rtl ? 'right' : 'left', '-99999px')
+            .attr('aria-hidden', 'true')
+            .removeClass(self.settings.active_class)
+            .prev('[' + self.attr_name() + ']')
+            .removeClass(self.settings.active_class)
+            .removeData('target');
+
+          self.S(this).trigger('closed.fndtn.dropdown', [dropdown]);
+        }
+      });
+      dropdown.removeClass('f-open-' + this.attr_name(true));
+    },
+
+    closeall : function () {
+      var self = this;
+      $.each(self.S('.f-open-' + this.attr_name(true)), function () {
+        self.close.call(self, self.S(this));
+      });
+    },
+
+    open : function (dropdown, target) {
+      this
+        .css(dropdown
+        .addClass(this.settings.active_class), target);
+      dropdown.prev('[' + this.attr_name() + ']').addClass(this.settings.active_class);
+      dropdown.data('target', target.get(0)).trigger('opened.fndtn.dropdown', [dropdown, target]);
+      dropdown.attr('aria-hidden', 'false');
+      target.attr('aria-expanded', 'true');
+      dropdown.focus();
+      dropdown.addClass('f-open-' + this.attr_name(true));
+    },
+
+    data_attr : function () {
+      if (this.namespace.length > 0) {
+        return this.namespace + '-' + this.name;
+      }
+
+      return this.name;
+    },
+
+    toggle : function (target) {
+      if (target.hasClass(this.settings.disabled_class)) {
+        return;
+      }
+      var dropdown = this.S('#' + target.data(this.data_attr()));
+      if (dropdown.length === 0) {
+        // No dropdown found, not continuing
+        return;
+      }
+
+      this.close.call(this, this.S('[' + this.attr_name() + '-content]').not(dropdown));
+
+      if (dropdown.hasClass(this.settings.active_class)) {
+        this.close.call(this, dropdown);
+        if (dropdown.data('target') !== target.get(0)) {
+          this.open.call(this, dropdown, target);
+        }
+      } else {
+        this.open.call(this, dropdown, target);
+      }
+    },
+
+    resize : function () {
+      var dropdown = this.S('[' + this.attr_name() + '-content].open');
+      var target = $(dropdown.data("target"));
+
+      if (dropdown.length && target.length) {
+        this.css(dropdown, target);
+      }
+    },
+
+    css : function (dropdown, target) {
+      var left_offset = Math.max((target.width() - dropdown.width()) / 2, 8),
+          settings = target.data(this.attr_name(true) + '-init') || this.settings,
+          parentOverflow = dropdown.parent().css('overflow-y') || dropdown.parent().css('overflow');
+
+      this.clear_idx();
+
+
+
+      if (this.small()) {
+        var p = this.dirs.bottom.call(dropdown, target, settings);
+
+        dropdown.attr('style', '').removeClass('drop-left drop-right drop-top').css({
+          position : 'absolute',
+          width : '95%',
+          'max-width' : 'none',
+          top : p.top
+        });
+
+        dropdown.css(Foundation.rtl ? 'right' : 'left', left_offset);
+      }
+      // detect if dropdown is in an overflow container
+      else if (parentOverflow !== 'visible') {
+        var offset = target[0].offsetTop + target[0].offsetHeight;
+
+        dropdown.attr('style', '').css({
+          position : 'absolute',
+          top : offset
+        });
+
+        dropdown.css(Foundation.rtl ? 'right' : 'left', left_offset);
+      }
+      else {
+
+        this.style(dropdown, target, settings);
+      }
+
+      return dropdown;
+    },
+
+    style : function (dropdown, target, settings) {
+      var css = $.extend({position : 'absolute'},
+        this.dirs[settings.align].call(dropdown, target, settings));
+
+      dropdown.attr('style', '').css(css);
+    },
+
+    // return CSS property object
+    // `this` is the dropdown
+    dirs : {
+      // Calculate target offset
+      _base : function (t, s) {
+        var o_p = this.offsetParent(),
+            o = o_p.offset(),
+            p = t.offset();
+
+        p.top -= o.top;
+        p.left -= o.left;
+
+        //set some flags on the p object to pass along
+        p.missRight = false;
+        p.missTop = false;
+        p.missLeft = false;
+        p.leftRightFlag = false;
+
+        //lets see if the panel will be off the screen
+        //get the actual width of the page and store it
+        var actualBodyWidth;
+        var windowWidth = window.innerWidth;
+        
+        if (document.getElementsByClassName('row')[0]) {
+          actualBodyWidth = document.getElementsByClassName('row')[0].clientWidth;
+        } else {
+          actualBodyWidth = windowWidth;
+        }
+
+        var actualMarginWidth = (windowWidth - actualBodyWidth) / 2;
+        var actualBoundary = actualBodyWidth;
+
+        if (!this.hasClass('mega') && !s.ignore_repositioning) {
+          var outerWidth = this.outerWidth();
+          var o_left = t.offset().left;
+                 
+          //miss top
+          if (t.offset().top <= this.outerHeight()) {
+            p.missTop = true;
+            actualBoundary = windowWidth - actualMarginWidth;
+            p.leftRightFlag = true;
+          }
+
+          //miss right
+          if (o_left + outerWidth > o_left + actualMarginWidth && o_left - actualMarginWidth > outerWidth) {
+            p.missRight = true;
+            p.missLeft = false;
+          }
+
+          //miss left
+          if (o_left - outerWidth <= 0) {
+            p.missLeft = true;
+            p.missRight = false;
+          }
+        }
+
+        return p;
+      },
+
+      top : function (t, s) {
+        var self = Foundation.libs.dropdown,
+            p = self.dirs._base.call(this, t, s);
+
+        this.addClass('drop-top');
+
+        if (p.missTop == true) {
+          p.top = p.top + t.outerHeight() + this.outerHeight();
+          this.removeClass('drop-top');
+        }
+
+        if (p.missRight == true) {
+          p.left = p.left - this.outerWidth() + t.outerWidth();
+        }
+
+        if (t.outerWidth() < this.outerWidth() || self.small() || this.hasClass(s.mega_menu)) {
+          self.adjust_pip(this, t, s, p);
+        }
+
+        if (Foundation.rtl) {
+          return {left : p.left - this.outerWidth() + t.outerWidth(),
+            top : p.top - this.outerHeight()};
+        }
+
+        return {left : p.left, top : p.top - this.outerHeight()};
+      },
+
+      bottom : function (t, s) {
+        var self = Foundation.libs.dropdown,
+            p = self.dirs._base.call(this, t, s);
+
+        if (p.missRight == true) {
+          p.left = p.left - this.outerWidth() + t.outerWidth();
+        }
+
+        if (t.outerWidth() < this.outerWidth() || self.small() || this.hasClass(s.mega_menu)) {
+          self.adjust_pip(this, t, s, p);
+        }
+
+        if (self.rtl) {
+          return {left : p.left - this.outerWidth() + t.outerWidth(), top : p.top + t.outerHeight()};
+        }
+
+        return {left : p.left, top : p.top + t.outerHeight()};
+      },
+
+      left : function (t, s) {
+        var p = Foundation.libs.dropdown.dirs._base.call(this, t, s);
+
+        this.addClass('drop-left');
+
+        if (p.missLeft == true) {
+          p.left =  p.left + this.outerWidth();
+          p.top = p.top + t.outerHeight();
+          this.removeClass('drop-left');
+        }
+
+        return {left : p.left - this.outerWidth(), top : p.top};
+      },
+
+      right : function (t, s) {
+        var p = Foundation.libs.dropdown.dirs._base.call(this, t, s);
+
+        this.addClass('drop-right');
+
+        if (p.missRight == true) {
+          p.left = p.left - this.outerWidth();
+          p.top = p.top + t.outerHeight();
+          this.removeClass('drop-right');
+        } else {
+          p.triggeredRight = true;
+        }
+
+        var self = Foundation.libs.dropdown;
+
+        if (t.outerWidth() < this.outerWidth() || self.small() || this.hasClass(s.mega_menu)) {
+          self.adjust_pip(this, t, s, p);
+        }
+
+        return {left : p.left + t.outerWidth(), top : p.top};
+      }
+    },
+
+    // Insert rule to style psuedo elements
+    adjust_pip : function (dropdown, target, settings, position) {
+      var sheet = Foundation.stylesheet,
+          pip_offset_base = 8;
+
+      if (dropdown.hasClass(settings.mega_class)) {
+        pip_offset_base = position.left + (target.outerWidth() / 2) - 8;
+      } else if (this.small()) {
+        pip_offset_base += position.left - 8;
+      }
+
+      this.rule_idx = sheet.cssRules.length;
+
+      //default
+      var sel_before = '.f-dropdown.open:before',
+          sel_after  = '.f-dropdown.open:after',
+          css_before = 'left: ' + pip_offset_base + 'px;',
+          css_after  = 'left: ' + (pip_offset_base - 1) + 'px;';
+
+      if (position.missRight == true) {
+        pip_offset_base = dropdown.outerWidth() - 23;
+        sel_before = '.f-dropdown.open:before',
+        sel_after  = '.f-dropdown.open:after',
+        css_before = 'left: ' + pip_offset_base + 'px;',
+        css_after  = 'left: ' + (pip_offset_base - 1) + 'px;';
+      }
+
+      //just a case where right is fired, but its not missing right
+      if (position.triggeredRight == true) {
+        sel_before = '.f-dropdown.open:before',
+        sel_after  = '.f-dropdown.open:after',
+        css_before = 'left:-12px;',
+        css_after  = 'left:-14px;';
+      }
+
+      if (sheet.insertRule) {
+        sheet.insertRule([sel_before, '{', css_before, '}'].join(' '), this.rule_idx);
+        sheet.insertRule([sel_after, '{', css_after, '}'].join(' '), this.rule_idx + 1);
+      } else {
+        sheet.addRule(sel_before, css_before, this.rule_idx);
+        sheet.addRule(sel_after, css_after, this.rule_idx + 1);
+      }
+    },
+
+    // Remove old dropdown rule index
+    clear_idx : function () {
+      var sheet = Foundation.stylesheet;
+
+      if (typeof this.rule_idx !== 'undefined') {
+        sheet.deleteRule(this.rule_idx);
+        sheet.deleteRule(this.rule_idx);
+        delete this.rule_idx;
+      }
+    },
+
+    small : function () {
+      return matchMedia(Foundation.media_queries.small).matches &&
+        !matchMedia(Foundation.media_queries.medium).matches;
+    },
+
+    off : function () {
+      this.S(this.scope).off('.fndtn.dropdown');
+      this.S('html, body').off('.fndtn.dropdown');
+      this.S(window).off('.fndtn.dropdown');
+      this.S('[data-dropdown-content]').off('.fndtn.dropdown');
+    },
+
+    reflow : function () {}
+  };
+}(jQuery, window, window.document));
+
+;(function ($, window, document, undefined) {
+  'use strict';
+
+  Foundation.libs.equalizer = {
+    name : 'equalizer',
+
+    version : '5.5.3',
+
+    settings : {
+      use_tallest : true,
+      before_height_change : $.noop,
+      after_height_change : $.noop,
+      equalize_on_stack : false,
+      act_on_hidden_el: false
+    },
+
+    init : function (scope, method, options) {
+      Foundation.inherit(this, 'image_loaded');
+      this.bindings(method, options);
+      this.reflow();
+    },
+
+    events : function () {
+      this.S(window).off('.equalizer').on('resize.fndtn.equalizer', function (e) {
+        this.reflow();
+      }.bind(this));
+    },
+
+    equalize : function (equalizer) {
+      var isStacked = false,
+          group = equalizer.data('equalizer'),
+          settings = equalizer.data(this.attr_name(true)+'-init') || this.settings,
+          vals,
+          firstTopOffset;
+
+      if (settings.act_on_hidden_el) {
+        vals = group ? equalizer.find('['+this.attr_name()+'-watch="'+group+'"]') : equalizer.find('['+this.attr_name()+'-watch]');
+      }
+      else {
+        vals = group ? equalizer.find('['+this.attr_name()+'-watch="'+group+'"]:visible') : equalizer.find('['+this.attr_name()+'-watch]:visible');
+      }
+      
+      if (vals.length === 0) {
+        return;
+      }
+
+      settings.before_height_change();
+      equalizer.trigger('before-height-change.fndth.equalizer');
+      vals.height('inherit');
+
+      if (settings.equalize_on_stack === false) {
+        firstTopOffset = vals.first().offset().top;
+        vals.each(function () {
+          if ($(this).offset().top !== firstTopOffset) {
+            isStacked = true;
+            return false;
+          }
+        });
+        if (isStacked) {
+          return;
+        }
+      }
+
+      var heights = vals.map(function () { return $(this).outerHeight(false) }).get();
+
+      if (settings.use_tallest) {
+        var max = Math.max.apply(null, heights);
+        vals.css('height', max);
+      } else {
+        var min = Math.min.apply(null, heights);
+        vals.css('height', min);
+      }
+
+      settings.after_height_change();
+      equalizer.trigger('after-height-change.fndtn.equalizer');
+    },
+
+    reflow : function () {
+      var self = this;
+
+      this.S('[' + this.attr_name() + ']', this.scope).each(function () {
+        var $eq_target = $(this),
+            media_query = $eq_target.data('equalizer-mq'),
+            ignore_media_query = true;
+
+        if (media_query) {
+          media_query = 'is_' + media_query.replace(/-/g, '_');
+          if (Foundation.utils.hasOwnProperty(media_query)) {
+            ignore_media_query = false;
+          }
+        }
+
+        self.image_loaded(self.S('img', this), function () {
+          if (ignore_media_query || Foundation.utils[media_query]()) {
+            self.equalize($eq_target)
+          } else {
+            var vals = $eq_target.find('[' + self.attr_name() + '-watch]:visible');
+            vals.css('height', 'auto');
+          }
+        });
+      });
+    }
+  };
+})(jQuery, window, window.document);
+
+;(function ($, window, document, undefined) {
+  'use strict';
+
+  Foundation.libs.interchange = {
+    name : 'interchange',
+
+    version : '5.5.3',
+
+    cache : {},
+
+    images_loaded : false,
+    nodes_loaded : false,
+
+    settings : {
+      load_attr : 'interchange',
+
+      named_queries : {
+        'default'     : 'only screen',
+        'small'       : Foundation.media_queries['small'],
+        'small-only'  : Foundation.media_queries['small-only'],
+        'medium'      : Foundation.media_queries['medium'],
+        'medium-only' : Foundation.media_queries['medium-only'],
+        'large'       : Foundation.media_queries['large'],
+        'large-only'  : Foundation.media_queries['large-only'],
+        'xlarge'      : Foundation.media_queries['xlarge'],
+        'xlarge-only' : Foundation.media_queries['xlarge-only'],
+        'xxlarge'     : Foundation.media_queries['xxlarge'],
+        'landscape'   : 'only screen and (orientation: landscape)',
+        'portrait'    : 'only screen and (orientation: portrait)',
+        '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)'
+      },
+
+      directives : {
+        replace : function (el, path, trigger) {
+          // The trigger argument, if called within the directive, fires
+          // an event named after the directive on the element, passing
+          // any parameters along to the event that you pass to trigger.
+          //
+          // ex. trigger(), trigger([a, b, c]), or trigger(a, b, c)
+          //
+          // This allows you to bind a callback like so:
+          // $('#interchangeContainer').on('replace', function (e, a, b, c) {
+          //   console.log($(this).html(), a, b, c);
+          // });
+
+          if (el !== null && /IMG/.test(el[0].nodeName)) {
+            var orig_path = $.each(el, function(){this.src = path;});
+            // var orig_path = el[0].src;
+
+            if (new RegExp(path, 'i').test(orig_path)) {
+              return;
+            }
+
+            el.attr("src", path);
+
+            return trigger(el[0].src);
+          }
+          var last_path = el.data(this.data_attr + '-last-path'),
+              self = this;
+
+          if (last_path == path) {
+            return;
+          }
+
+          if (/\.(gif|jpg|jpeg|tiff|png)([?#].*)?/i.test(path)) {
+            $(el).css('background-image', 'url(' + path + ')');
+            el.data('interchange-last-path', path);
+            return trigger(path);
+          }
+
+          return $.get(path, function (response) {
+            el.html(response);
+            el.data(self.data_attr + '-last-path', path);
+            trigger();
+          });
+
+        }
+      }
+    },
+
+    init : function (scope, method, options) {
+      Foundation.inherit(this, 'throttle random_str');
+
+      this.data_attr = this.set_data_attr();
+      $.extend(true, this.settings, method, options);
+      this.bindings(method, options);
+      this.reflow();
+    },
+
+    get_media_hash : function () {
+        var mediaHash = '';
+        for (var queryName in this.settings.named_queries ) {
+            mediaHash += matchMedia(this.settings.named_queries[queryName]).matches.toString();
+        }
+        return mediaHash;
+    },
+
+    events : function () {
+      var self = this, prevMediaHash;
+
+      $(window)
+        .off('.interchange')
+        .on('resize.fndtn.interchange', self.throttle(function () {
+            var currMediaHash = self.get_media_hash();
+            if (currMediaHash !== prevMediaHash) {
+                self.resize();
+            }
+            prevMediaHash = currMediaHash;
+        }, 50));
+
+      return this;
+    },
+
+    resize : function () {
+      var cache = this.cache;
+
+      if (!this.images_loaded || !this.nodes_loaded) {
+        setTimeout($.proxy(this.resize, this), 50);
+        return;
+      }
+
+      for (var uuid in cache) {
+        if (cache.hasOwnProperty(uuid)) {
+          var passed = this.results(uuid, cache[uuid]);
+          if (passed) {
+            this.settings.directives[passed
+              .scenario[1]].call(this, passed.el, passed.scenario[0], (function (passed) {
+                if (arguments[0] instanceof Array) {
+                  var args = arguments[0];
+                } else {
+                  var args = Array.prototype.slice.call(arguments, 0);
+                }
+
+                return function() {
+                  passed.el.trigger(passed.scenario[1], args);
+                }
+              }(passed)));
+          }
+        }
+      }
+
+    },
+
+    results : function (uuid, scenarios) {
+      var count = scenarios.length;
+
+      if (count > 0) {
+        var el = this.S('[' + this.add_namespace('data-uuid') + '="' + uuid + '"]');
+
+        while (count--) {
+          var mq, rule = scenarios[count][2];
+          if (this.settings.named_queries.hasOwnProperty(rule)) {
+            mq = matchMedia(this.settings.named_queries[rule]);
+          } else {
+            mq = matchMedia(rule);
+          }
+          if (mq.matches) {
+            return {el : el, scenario : scenarios[count]};
+          }
+        }
+      }
+
+      return false;
+    },
+
+    load : function (type, force_update) {
+      if (typeof this['cached_' + type] === 'undefined' || force_update) {
+        this['update_' + type]();
+      }
+
+      return this['cached_' + type];
+    },
+
+    update_images : function () {
+      var images = this.S('img[' + this.data_attr + ']'),
+          count = images.length,
+          i = count,
+          loaded_count = 0,
+          data_attr = this.data_attr;
+
+      this.cache = {};
+      this.cached_images = [];
+      this.images_loaded = (count === 0);
+
+      while (i--) {
+        loaded_count++;
+        if (images[i]) {
+          var str = images[i].getAttribute(data_attr) || '';
+
+          if (str.length > 0) {
+            this.cached_images.push(images[i]);
+          }
+        }
+
+        if (loaded_count === count) {
+          this.images_loaded = true;
+          this.enhance('images');
+        }
+      }
+
+      return this;
+    },
+
+    update_nodes : function () {
+      var nodes = this.S('[' + this.data_attr + ']').not('img'),
+          count = nodes.length,
+          i = count,
+          loaded_count = 0,
+          data_attr = this.data_attr;
+
+      this.cached_nodes = [];
+      this.nodes_loaded = (count === 0);
+
+      while (i--) {
+        loaded_count++;
+        var str = nodes[i].getAttribute(data_attr) || '';
+
+        if (str.length > 0) {
+          this.cached_nodes.push(nodes[i]);
+        }
+
+        if (loaded_count === count) {
+          this.nodes_loaded = true;
+          this.enhance('nodes');
+        }
+      }
+
+      return this;
+    },
+
+    enhance : function (type) {
+      var i = this['cached_' + type].length;
+
+      while (i--) {
+        this.object($(this['cached_' + type][i]));
+      }
+
+      return $(window).trigger('resize.fndtn.interchange');
+    },
+
+    convert_directive : function (directive) {
+
+      var trimmed = this.trim(directive);
+
+      if (trimmed.length > 0) {
+        return trimmed;
+      }
+
+      return 'replace';
+    },
+
+    parse_scenario : function (scenario) {
+      // This logic had to be made more complex since some users were using commas in the url path
+      // So we cannot simply just split on a comma
+
+      var directive_match = scenario[0].match(/(.+),\s*(\w+)\s*$/),
+      // getting the mq has gotten a bit complicated since we started accounting for several use cases
+      // of URLs. For now we'll continue to match these scenarios, but we may consider having these scenarios
+      // as nested objects or arrays in F6.
+      // regex: match everything before close parenthesis for mq
+      media_query         = scenario[1].match(/(.*)\)/);
+
+      if (directive_match) {
+        var path  = directive_match[1],
+        directive = directive_match[2];
+
+      } else {
+        var cached_split = scenario[0].split(/,\s*$/),
+        path             = cached_split[0],
+        directive        = '';
+      }
+
+      return [this.trim(path), this.convert_directive(directive), this.trim(media_query[1])];
+    },
+
+    object : function (el) {
+      var raw_arr = this.parse_data_attr(el),
+          scenarios = [],
+          i = raw_arr.length;
+
+      if (i > 0) {
+        while (i--) {
+          // split array between comma delimited content and mq
+          // regex: comma, optional space, open parenthesis
+          var scenario = raw_arr[i].split(/,\s?\(/);
+
+          if (scenario.length > 1) {
+            var params = this.parse_scenario(scenario);
+            scenarios.push(params);
+          }
+        }
+      }
+
+      return this.store(el, scenarios);
+    },
+
+    store : function (el, scenarios) {
+      var uuid = this.random_str(),
+          current_uuid = el.data(this.add_namespace('uuid', true));
+
+      if (this.cache[current_uuid]) {
+        return this.cache[current_uuid];
+      }
+
+      el.attr(this.add_namespace('data-uuid'), uuid);
+      return this.cache[uuid] = scenarios;
+    },
+
+    trim : function (str) {
+
+      if (typeof str === 'string') {
+        return $.trim(str);
+      }
+
+      return str;
+    },
+
+    set_data_attr : function (init) {
+      if (init) {
+        if (this.namespace.length > 0) {
+          return this.namespace + '-' + this.settings.load_attr;
+        }
+
+        return this.settings.load_attr;
+      }
+
+      if (this.namespace.length > 0) {
+        return 'data-' + this.namespace + '-' + this.settings.load_attr;
+      }
+
+      return 'data-' + this.settings.load_attr;
+    },
+
+    parse_data_attr : function (el) {
+      var raw = el.attr(this.attr_name()).split(/\[(.*?)\]/),
+          i = raw.length,
+          output = [];
+
+      while (i--) {
+        if (raw[i].replace(/[\W\d]+/, '').length > 4) {
+          output.push(raw[i]);
+        }
+      }
+
+      return output;
+    },
+
+    reflow : function () {
+      this.load('images', true);
+      this.load('nodes', true);
+    }
+
+  };
+
+}(jQuery, window, window.document));
+
+;(function ($, window, document, undefined) {
+  'use strict';
+
+  var Modernizr = Modernizr || false;
+
+  Foundation.libs.joyride = {
+    name : 'joyride',
+
+    version : '5.5.3',
+
+    defaults : {
+      expose                   : false,     // turn on or off the expose feature
+      modal                    : true,      // Whether to cover page with modal during the tour
+      keyboard                 : true,      // enable left, right and esc keystrokes
+      tip_location             : 'bottom',  // 'top', 'bottom', 'left' or 'right' in relation to parent
+      nub_position             : 'auto',    // override on a per tooltip bases
+      scroll_speed             : 1500,      // Page scrolling speed in milliseconds, 0 = no scroll animation
+      scroll_animation         : 'linear',  // supports 'swing' and 'linear', extend with jQuery UI.
+      timer                    : 0,         // 0 = no timer , all other numbers = timer in milliseconds
+      start_timer_on_click     : true,      // true or false - true requires clicking the first button start the timer
+      start_offset             : 0,         // the index of the tooltip you want to start on (index of the li)
+      next_button              : true,      // true or false to control whether a next button is used
+      prev_button              : true,      // true or false to control whether a prev button is used
+      tip_animation            : 'fade',    // 'pop' or 'fade' in each tip
+      pause_after              : [],        // array of indexes where to pause the tour after
+      exposed                  : [],        // array of expose elements
+      tip_animation_fade_speed : 300,       // when tipAnimation = 'fade' this is speed in milliseconds for the transition
+      cookie_monster           : false,     // true or false to control whether cookies are used
+      cookie_name              : 'joyride', // Name the cookie you'll use
+      cookie_domain            : false,     // Will this cookie be attached to a domain, ie. '.notableapp.com'
+      cookie_expires           : 365,       // set when you would like the cookie to expire.
+      tip_container            : 'body',    // Where will the tip be attached
+      abort_on_close           : true,      // When true, the close event will not fire any callback
+      tip_location_patterns    : {
+        top : ['bottom'],
+        bottom : [], // bottom should not need to be repositioned
+        left : ['right', 'top', 'bottom'],
+        right : ['left', 'top', 'bottom']
+      },
+      post_ride_callback     : function () {},    // A method to call once the tour closes (canceled or complete)
+      post_step_callback     : function () {},    // A method to call after each step
+      pre_step_callback      : function () {},    // A method to call before each step
+      pre_ride_callback      : function () {},    // A method to call before the tour starts (passed index, tip, and cloned exposed element)
+      post_expose_callback   : function () {},    // A method to call after an element has been exposed
+      template : { // HTML segments for tip layout
+        link          : '<a href="#close" class="joyride-close-tip">&times;</a>',
+        timer         : '<div class="joyride-timer-indicator-wrap"><span class="joyride-timer-indicator"></span></div>',
+        tip           : '<div class="joyride-tip-guide"><span class="joyride-nub"></span></div>',
+        wrapper       : '<div class="joyride-content-wrapper"></div>',
+        button        : '<a href="#" class="small button joyride-next-tip"></a>',
+        prev_button   : '<a href="#" class="small button joyride-prev-tip"></a>',
+        modal         : '<div class="joyride-modal-bg"></div>',
+        expose        : '<div class="joyride-expose-wrapper"></div>',
+        expose_cover  : '<div class="joyride-expose-cover"></div>'
+      },
+      expose_add_class : '' // One or more space-separated class names to be added to exposed element
+    },
+
+    init : function (scope, method, options) {
+      Foundation.inherit(this, 'throttle random_str');
+
+      this.settings = this.settings || $.extend({}, this.defaults, (options || method));
+
+      this.bindings(method, options)
+    },
+
+    go_next : function () {
+      if (this.settings.$li.next().length < 1) {
+        this.end();
+      } else if (this.settings.timer > 0) {
+        clearTimeout(this.settings.automate);
+        this.hide();
+        this.show();
+        this.startTimer();
+      } else {
+        this.hide();
+        this.show();
+      }
+    },
+
+    go_prev : function () {
+      if (this.settings.$li.prev().length < 1) {
+        // Do nothing if there are no prev element
+      } else if (this.settings.timer > 0) {
+        clearTimeout(this.settings.automate);
+        this.hide();
+        this.show(null, true);
+        this.startTimer();
+      } else {
+        this.hide();
+        this.show(null, true);
+      }
+    },
+
+    events : function () {
+      var self = this;
+
+      $(this.scope)
+        .off('.joyride')
+        .on('click.fndtn.joyride', '.joyride-next-tip, .joyride-modal-bg', function (e) {
+          e.preventDefault();
+          this.go_next()
+        }.bind(this))
+        .on('click.fndtn.joyride', '.joyride-prev-tip', function (e) {
+          e.preventDefault();
+          this.go_prev();
+        }.bind(this))
+
+        .on('click.fndtn.joyride', '.joyride-close-tip', function (e) {
+          e.preventDefault();
+          this.end(this.settings.abort_on_close);
+        }.bind(this))
+
+        .on('keyup.fndtn.joyride', function (e) {
+          // Don't do anything if keystrokes are disabled
+          // or if the joyride is not being shown
+          if (!this.settings.keyboard || !this.settings.riding) {
+            return;
+          }
+
+          switch (e.which) {
+            case 39: // right arrow
+              e.preventDefault();
+              this.go_next();
+              break;
+            case 37: // left arrow
+              e.preventDefault();
+              this.go_prev();
+              break;
+            case 27: // escape
+              e.preventDefault();
+              this.end(this.settings.abort_on_close);
+          }
+        }.bind(this));
+
+      $(window)
+        .off('.joyride')
+        .on('resize.fndtn.joyride', self.throttle(function () {
+          if ($('[' + self.attr_name() + ']').length > 0 && self.settings.$next_tip && self.settings.riding) {
+            if (self.settings.exposed.length > 0) {
+              var $els = $(self.settings.exposed);
+
+              $els.each(function () {
+                var $this = $(this);
+                self.un_expose($this);
+                self.expose($this);
+              });
+            }
+
+            if (self.is_phone()) {
+              self.pos_phone();
+            } else {
+              self.pos_default(false);
+            }
+          }
+        }, 100));
+    },
+
+    start : function () {
+      var self = this,
+          $this = $('[' + this.attr_name() + ']', this.scope),
+          integer_settings = ['timer', 'scrollSpeed', 'startOffset', 'tipAnimationFadeSpeed', 'cookieExpires'],
+          int_settings_count = integer_settings.length;
+
+      if (!$this.length > 0) {
+        return;
+      }
+
+      if (!this.settings.init) {
+        this.events();
+      }
+
+      this.settings = $this.data(this.attr_name(true) + '-init');
+
+      // non configureable settings
+      this.settings.$content_el = $this;
+      this.settings.$body = $(this.settings.tip_container);
+      this.settings.body_offset = $(this.settings.tip_container).position();
+      this.settings.$tip_content = this.settings.$content_el.find('> li');
+      this.settings.paused = false;
+      this.settings.attempts = 0;
+      this.settings.riding = true;
+
+      // can we create cookies?
+      if (typeof $.cookie !== 'function') {
+        this.settings.cookie_monster = false;
+      }
+
+      // generate the tips and insert into dom.
+      if (!this.settings.cookie_monster || this.settings.cookie_monster && !$.cookie(this.settings.cookie_name)) {
+        this.settings.$tip_content.each(function (index) {
+          var $this = $(this);
+          this.settings = $.extend({}, self.defaults, self.data_options($this));
+
+          // Make sure that settings parsed from data_options are integers where necessary
+          var i = int_settings_count;
+          while (i--) {
+            self.settings[integer_settings[i]] = parseInt(self.settings[integer_settings[i]], 10);
+          }
+          self.create({$li : $this, index : index});
+        });
+
+        // show first tip
+        if (!this.settings.start_timer_on_click && this.settings.timer > 0) {
+          this.show('init');
+          this.startTimer();
+        } else {
+          this.show('init');
+        }
+
+      }
+    },
+
+    resume : function () {
+      this.set_li();
+      this.show();
+    },
+
+    tip_template : function (opts) {
+      var $blank, content;
+
+      opts.tip_class = opts.tip_class || '';
+
+      $blank = $(this.settings.template.tip).addClass(opts.tip_class);
+      content = $.trim($(opts.li).html()) +
+        this.prev_button_text(opts.prev_button_text, opts.index) +
+        this.button_text(opts.button_text) +
+        this.settings.template.link +
+        this.timer_instance(opts.index);
+
+      $blank.append($(this.settings.template.wrapper));
+      $blank.first().attr(this.add_namespace('data-index'), opts.index);
+      $('.joyride-content-wrapper', $blank).append(content);
+
+      return $blank[0];
+    },
+
+    timer_instance : function (index) {
+      var txt;
+
+      if ((index === 0 && this.settings.start_timer_on_click && this.settings.timer > 0) || this.settings.timer === 0) {
+        txt = '';
+      } else {
+        txt = $(this.settings.template.timer)[0].outerHTML;
+      }
+      return txt;
+    },
+
+    button_text : function (txt) {
+      if (this.settings.tip_settings.next_button) {
+        txt = $.trim(txt) || 'Next';
+        txt = $(this.settings.template.button).append(txt)[0].outerHTML;
+      } else {
+        txt = '';
+      }
+      return txt;
+    },
+
+    prev_button_text : function (txt, idx) {
+      if (this.settings.tip_settings.prev_button) {
+        txt = $.trim(txt) || 'Previous';
+
+        // Add the disabled class to the button if it's the first element
+        if (idx == 0) {
+          txt = $(this.settings.template.prev_button).append(txt).addClass('disabled')[0].outerHTML;
+        } else {
+          txt = $(this.settings.template.prev_button).append(txt)[0].outerHTML;
+        }
+      } else {
+        txt = '';
+      }
+      return txt;
+    },
+
+    create : function (opts) {
+      this.settings.tip_settings = $.extend({}, this.settings, this.data_options(opts.$li));
+      var buttonText = opts.$li.attr(this.add_namespace('data-button')) || opts.$li.attr(this.add_namespace('data-text')),
+          prevButtonText = opts.$li.attr(this.add_namespace('data-button-prev')) || opts.$li.attr(this.add_namespace('data-prev-text')),
+        tipClass = opts.$li.attr('class'),
+        $tip_content = $(this.tip_template({
+          tip_class : tipClass,
+          index : opts.index,
+          button_text : buttonText,
+          prev_button_text : prevButtonText,
+          li : opts.$li
+        }));
+
+      $(this.settings.tip_container).append($tip_content);
+    },
+
+    show : function (init, is_prev) {
+      var $timer = null;
+
+      // are we paused?
+      if (this.settings.$li === undefined || ($.inArray(this.settings.$li.index(), this.settings.pause_after) === -1)) {
+
+        // don't go to the next li if the tour was paused
+        if (this.settings.paused) {
+          this.settings.paused = false;
+        } else {
+          this.set_li(init, is_prev);
+        }
+
+        this.settings.attempts = 0;
+
+        if (this.settings.$li.length && this.settings.$target.length > 0) {
+          if (init) { //run when we first start
+            this.settings.pre_ride_callback(this.settings.$li.index(), this.settings.$next_tip);
+            if (this.settings.modal) {
+              this.show_modal();
+            }
+          }
+
+          this.settings.pre_step_callback(this.settings.$li.index(), this.settings.$next_tip);
+
+          if (this.settings.modal && this.settings.expose) {
+            this.expose();
+          }
+
+          this.settings.tip_settings = $.extend({}, this.settings, this.data_options(this.settings.$li));
+
+          this.settings.timer = parseInt(this.settings.timer, 10);
+
+          this.settings.tip_settings.tip_location_pattern = this.settings.tip_location_patterns[this.settings.tip_settings.tip_location];
+
+          // scroll and hide bg if not modal and not expose
+          if (!/body/i.test(this.settings.$target.selector) && !this.settings.expose) {
+            var joyridemodalbg = $('.joyride-modal-bg');
+            if (/pop/i.test(this.settings.tipAnimation)) {
+                joyridemodalbg.hide();
+            } else {
+                joyridemodalbg.fadeOut(this.settings.tipAnimationFadeSpeed);
+            }
+            this.scroll_to();
+          }
+
+          if (this.is_phone()) {
+            this.pos_phone(true);
+          } else {
+            this.pos_default(true);
+          }
+
+          $timer = this.settings.$next_tip.find('.joyride-timer-indicator');
+
+          if (/pop/i.test(this.settings.tip_animation)) {
+
+            $timer.width(0);
+
+            if (this.settings.timer > 0) {
+
+              this.settings.$next_tip.show();
+
+              setTimeout(function () {
+                $timer.animate({
+                  width : $timer.parent().width()
+                }, this.settings.timer, 'linear');
+              }.bind(this), this.settings.tip_animation_fade_speed);
+
+            } else {
+              this.settings.$next_tip.show();
+
+            }
+
+          } else if (/fade/i.test(this.settings.tip_animation)) {
+
+            $timer.width(0);
+
+            if (this.settings.timer > 0) {
+
+              this.settings.$next_tip
+                .fadeIn(this.settings.tip_animation_fade_speed)
+                .show();
+
+              setTimeout(function () {
+                $timer.animate({
+                  width : $timer.parent().width()
+                }, this.settings.timer, 'linear');
+              }.bind(this), this.settings.tip_animation_fade_speed);
+
+            } else {
+              this.settings.$next_tip.fadeIn(this.settings.tip_animation_fade_speed);
+            }
+          }
+
+          this.settings.$current_tip = this.settings.$next_tip;
+
+        // skip non-existant targets
+        } else if (this.settings.$li && this.settings.$target.length < 1) {
+
+          this.show(init, is_prev);
+
+        } else {
+
+          this.end();
+
+        }
+      } else {
+
+        this.settings.paused = true;
+
+      }
+
+    },
+
+    is_phone : function () {
+      return matchMedia(Foundation.media_queries.small).matches &&
+        !matchMedia(Foundation.media_queries.medium).matches;
+    },
+
+    hide : function () {
+      if (this.settings.modal && this.settings.expose) {
+        this.un_expose();
+      }
+
+      if (!this.settings.modal) {
+        $('.joyride-modal-bg').hide();
+      }
+
+      // Prevent scroll bouncing...wait to remove from layout
+      this.settings.$current_tip.css('visibility', 'hidden');
+      setTimeout($.proxy(function () {
+        this.hide();
+        this.css('visibility', 'visible');
+      }, this.settings.$current_tip), 0);
+      this.settings.post_step_callback(this.settings.$li.index(),
+        this.settings.$current_tip);
+    },
+
+    set_li : function (init, is_prev) {
+      if (init) {
+        this.settings.$li = this.settings.$tip_content.eq(this.settings.start_offset);
+        this.set_next_tip();
+        this.settings.$current_tip = this.settings.$next_tip;
+      } else {
+        if (is_prev) {
+          this.settings.$li = this.settings.$li.prev();
+        } else {
+          this.settings.$li = this.settings.$li.next();
+        }
+        this.set_next_tip();
+      }
+
+      this.set_target();
+    },
+
+    set_next_tip : function () {
+      this.settings.$next_tip = $('.joyride-tip-guide').eq(this.settings.$li.index());
+      this.settings.$next_tip.data('closed', '');
+    },
+
+    set_target : function () {
+      var cl = this.settings.$li.attr(this.add_namespace('data-class')),
+          id = this.settings.$li.attr(this.add_namespace('data-id')),
+          $sel = function () {
+            if (id) {
+              return $(document.getElementById(id));
+            } else if (cl) {
+              return $('.' + cl).first();
+            } else {
+              return $('body');
+            }
+          };
+
+      this.settings.$target = $sel();
+    },
+
+    scroll_to : function () {
+      var window_half, tipOffset;
+
+      window_half = $(window).height() / 2;
+      tipOffset = Math.ceil(this.settings.$target.offset().top - window_half + this.settings.$next_tip.outerHeight());
+
+      if (tipOffset != 0) {
+        $('html, body').stop().animate({
+          scrollTop : tipOffset
+        }, this.settings.scroll_speed, 'swing');
+      }
+    },
+
+    paused : function () {
+      return ($.inArray((this.settings.$li.index() + 1), this.settings.pause_after) === -1);
+    },
+
+    restart : function () {
+      this.hide();
+      this.settings.$li = undefined;
+      this.show('init');
+    },
+
+    pos_default : function (init) {
+      var $nub = this.settings.$next_tip.find('.joyride-nub'),
+          nub_width = Math.ceil($nub.outerWidth() / 2),
+          nub_height = Math.ceil($nub.outerHeight() / 2),
+          toggle = init || false;
+
+      // tip must not be "display: none" to calculate position
+      if (toggle) {
+        this.settings.$next_tip.css('visibility', 'hidden');
+        this.settings.$next_tip.show();
+      }
+
+      if (!/body/i.test(this.settings.$target.selector)) {
+        var topAdjustment = this.settings.tip_settings.tipAdjustmentY ? parseInt(this.settings.tip_settings.tipAdjustmentY) : 0,
+            leftAdjustment = this.settings.tip_settings.tipAdjustmentX ? parseInt(this.settings.tip_settings.tipAdjustmentX) : 0;
+
+        if (this.bottom()) {
+          if (this.rtl) {
+            this.settings.$next_tip.css({
+              top : (this.settings.$target.offset().top + nub_height + this.settings.$target.outerHeight() + topAdjustment),
+              left : this.settings.$target.offset().left + this.settings.$target.outerWidth() - this.settings.$next_tip.outerWidth() + leftAdjustment});
+          } else {
+            this.settings.$next_tip.css({
+              top : (this.settings.$target.offset().top + nub_height + this.settings.$target.outerHeight() + topAdjustment),
+              left : this.settings.$target.offset().left + leftAdjustment});
+          }
+
+          this.nub_position($nub, this.settings.tip_settings.nub_position, 'top');
+
+        } else if (this.top()) {
+          if (this.rtl) {
+            this.settings.$next_tip.css({
+              top : (this.settings.$target.offset().top - this.settings.$next_tip.outerHeight() - nub_height + topAdjustment),
+              left : this.settings.$target.offset().left + this.settings.$target.outerWidth() - this.settings.$next_tip.outerWidth()});
+          } else {
+            this.settings.$next_tip.css({
+              top : (this.settings.$target.offset().top - this.settings.$next_tip.outerHeight() - nub_height + topAdjustment),
+              left : this.settings.$target.offset().left + leftAdjustment});
+          }
+
+          this.nub_position($nub, this.settings.tip_settings.nub_position, 'bottom');
+
+        } else if (this.right()) {
+
+          this.settings.$next_tip.css({
+            top : this.settings.$target.offset().top + topAdjustment,
+            left : (this.settings.$target.outerWidth() + this.settings.$target.offset().left + nub_width + leftAdjustment)});
+
+          this.nub_position($nub, this.settings.tip_settings.nub_position, 'left');
+
+        } else if (this.left()) {
+
+          this.settings.$next_tip.css({
+            top : this.settings.$target.offset().top + topAdjustment,
+            left : (this.settings.$target.offset().left - this.settings.$next_tip.outerWidth() - nub_width + leftAdjustment)});
+
+          this.nub_position($nub, this.settings.tip_settings.nub_position, 'right');
+
+        }
+
+        if (!this.visible(this.corners(this.settings.$next_tip)) && this.settings.attempts < this.settings.tip_settings.tip_location_pattern.length) {
+
+          $nub.removeClass('bottom')
+            .removeClass('top')
+            .removeClass('right')
+            .removeClass('left');
+
+          this.settings.tip_settings.tip_location = this.settings.tip_settings.tip_location_pattern[this.settings.attempts];
+
+          this.settings.attempts++;
+
+          this.pos_default();
+
+        }
+
+      } else if (this.settings.$li.length) {
+
+        this.pos_modal($nub);
+
+      }
+
+      if (toggle) {
+        this.settings.$next_tip.hide();
+        this.settings.$next_tip.css('visibility', 'visible');
+      }
+
+    },
+
+    pos_phone : function (init) {
+      var tip_height = this.settings.$next_tip.outerHeight(),
+          tip_offset = this.settings.$next_tip.offset(),
+          target_height = this.settings.$target.outerHeight(),
+          $nub = $('.joyride-nub', this.settings.$next_tip),
+          nub_height = Math.ceil($nub.outerHeight() / 2),
+          toggle = init || false;
+
+      $nub.removeClass('bottom')
+        .removeClass('top')
+        .removeClass('right')
+        .removeClass('left');
+
+      if (toggle) {
+        this.settings.$next_tip.css('visibility', 'hidden');
+        this.settings.$next_tip.show();
+      }
+
+      if (!/body/i.test(this.settings.$target.selector)) {
+
+        if (this.top()) {
+
+            this.settings.$next_tip.offset({top : this.settings.$target.offset().top - tip_height - nub_height});
+            $nub.addClass('bottom');
+
+        } else {
+
+          this.settings.$next_tip.offset({top : this.settings.$target.offset().top + target_height + nub_height});
+          $nub.addClass('top');
+
+        }
+
+      } else if (this.settings.$li.length) {
+        this.pos_modal($nub);
+      }
+
+      if (toggle) {
+        this.settings.$next_tip.hide();
+        this.settings.$next_tip.css('visibility', 'visible');
+      }
+    },
+
+    pos_modal : function ($nub) {
+      this.center();
+      $nub.hide();
+
+      this.show_modal();
+    },
+
+    show_modal : function () {
+      if (!this.settings.$next_tip.data('closed')) {
+        var joyridemodalbg =  $('.joyride-modal-bg');
+        if (joyridemodalbg.length < 1) {
+          var joyridemodalbg = $(this.settings.template.modal);
+          joyridemodalbg.appendTo('body');
+        }
+
+        if (/pop/i.test(this.settings.tip_animation)) {
+            joyridemodalbg.show();
+        } else {
+            joyridemodalbg.fadeIn(this.settings.tip_animation_fade_speed);
+        }
+      }
+    },
+
+    expose : function () {
+      var expose,
+          exposeCover,
+          el,
+          origCSS,
+          origClasses,
+          randId = 'expose-' + this.random_str(6);
+
+      if (arguments.length > 0 && arguments[0] instanceof $) {
+        el = arguments[0];
+      } else if (this.settings.$target && !/body/i.test(this.settings.$target.selector)) {
+        el = this.settings.$target;
+      } else {
+        return false;
+      }
+
+      if (el.length < 1) {
+        if (window.console) {
+          console.error('element not valid', el);
+        }
+        return false;
+      }
+
+      expose = $(this.settings.template.expose);
+      this.settings.$body.append(expose);
+      expose.css({
+        top : el.offset().top,
+        left : el.offset().left,
+        width : el.outerWidth(true),
+        height : el.outerHeight(true)
+      });
+
+      exposeCover = $(this.settings.template.expose_cover);
+
+      origCSS = {
+        zIndex : el.css('z-index'),
+        position : el.css('position')
+      };
+
+      origClasses = el.attr('class') == null ? '' : el.attr('class');
+
+      el.css('z-index', parseInt(expose.css('z-index')) + 1);
+
+      if (origCSS.position == 'static') {
+        el.css('position', 'relative');
+      }
+
+      el.data('expose-css', origCSS);
+      el.data('orig-class', origClasses);
+      el.attr('class', origClasses + ' ' + this.settings.expose_add_class);
+
+      exposeCover.css({
+        top : el.offset().top,
+        left : el.offset().left,
+        width : el.outerWidth(true),
+        height : el.outerHeight(true)
+      });
+
+      if (this.settings.modal) {
+        this.show_modal();
+      }
+
+      this.settings.$body.append(exposeCover);
+      expose.addClass(randId);
+      exposeCover.addClass(randId);
+      el.data('expose', randId);
+      this.settings.post_expose_callback(this.settings.$li.index(), this.settings.$next_tip, el);
+      this.add_exposed(el);
+    },
+
+    un_expose : function () {
+      var exposeId,
+          el,
+          expose,
+          origCSS,
+          origClasses,
+          clearAll = false;
+
+      if (arguments.length > 0 && arguments[0] instanceof $) {
+        el = arguments[0];
+      } else if (this.settings.$target && !/body/i.test(this.settings.$target.selector)) {
+        el = this.settings.$target;
+      } else {
+        return false;
+      }
+
+      if (el.length < 1) {
+        if (window.console) {
+          console.error('element not valid', el);
+        }
+        return false;
+      }
+
+      exposeId = el.data('expose');
+      expose = $('.' + exposeId);
+
+      if (arguments.length > 1) {
+        clearAll = arguments[1];
+      }
+
+      if (clearAll === true) {
+        $('.joyride-expose-wrapper,.joyride-expose-cover').remove();
+      } else {
+        expose.remove();
+      }
+
+      origCSS = el.data('expose-css');
+
+      if (origCSS.zIndex == 'auto') {
+        el.css('z-index', '');
+      } else {
+        el.css('z-index', origCSS.zIndex);
+      }
+
+      if (origCSS.position != el.css('position')) {
+        if (origCSS.position == 'static') {// this is default, no need to set it.
+          el.css('position', '');
+        } else {
+          el.css('position', origCSS.position);
+        }
+      }
+
+      origClasses = el.data('orig-class');
+      el.attr('class', origClasses);
+      el.removeData('orig-classes');
+
+      el.removeData('expose');
+      el.removeData('expose-z-index');
+      this.remove_exposed(el);
+    },
+
+    add_exposed : function (el) {
+      this.settings.exposed = this.settings.exposed || [];
+      if (el instanceof $ || typeof el === 'object') {
+        this.settings.exposed.push(el[0]);
+      } else if (typeof el == 'string') {
+        this.settings.exposed.push(el);
+      }
+    },
+
+    remove_exposed : function (el) {
+      var search, i;
+      if (el instanceof $) {
+        search = el[0]
+      } else if (typeof el == 'string') {
+        search = el;
+      }
+
+      this.settings.exposed = this.settings.exposed || [];
+      i = this.settings.exposed.length;
+
+      while (i--) {
+        if (this.settings.exposed[i] == search) {
+          this.settings.exposed.splice(i, 1);
+          return;
+        }
+      }
+    },
+
+    center : function () {
+      var $w = $(window);
+
+      this.settings.$next_tip.css({
+        top : ((($w.height() - this.settings.$next_tip.outerHeight()) / 2) + $w.scrollTop()),
+        left : ((($w.width() - this.settings.$next_tip.outerWidth()) / 2) + $w.scrollLeft())
+      });
+
+      return true;
+    },
+
+    bottom : function () {
+      return /bottom/i.test(this.settings.tip_settings.tip_location);
+    },
+
+    top : function () {
+      return /top/i.test(this.settings.tip_settings.tip_location);
+    },
+
+    right : function () {
+      return /right/i.test(this.settings.tip_settings.tip_location);
+    },
+
+    left : function () {
+      return /left/i.test(this.settings.tip_settings.tip_location);
+    },
+
+    corners : function (el) {
+      if (el.length === 0) {
+         return [false, false, false, false];   
+      }
+      
+      var w = $(window),
+          window_half = w.height() / 2,
+          //using this to calculate since scroll may not have finished yet.
+          tipOffset = Math.ceil(this.settings.$target.offset().top - window_half + this.settings.$next_tip.outerHeight()),
+          right = w.width() + w.scrollLeft(),
+          offsetBottom =  w.height() + tipOffset,
+          bottom = w.height() + w.scrollTop(),
+          top = w.scrollTop();
+
+      if (tipOffset < top) {
+        if (tipOffset < 0) {
+          top = 0;
+        } else {
+          top = tipOffset;
+        }
+      }
+
+      if (offsetBottom > bottom) {
+        bottom = offsetBottom;
+      }
+
+      return [
+        el.offset().top < top,
+        right < el.offset().left + el.outerWidth(),
+        bottom < el.offset().top + el.outerHeight(),
+        w.scrollLeft() > el.offset().left
+      ];
+    },
+
+    visible : function (hidden_corners) {
+      var i = hidden_corners.length;
+
+      while (i--) {
+        if (hidden_corners[i]) {
+          return false;
+        }
+      }
+
+      return true;
+    },
+
+    nub_position : function (nub, pos, def) {
+      if (pos === 'auto') {
+        nub.addClass(def);
+      } else {
+        nub.addClass(pos);
+      }
+    },
+
+    startTimer : function () {
+      if (this.settings.$li.length) {
+        this.settings.automate = setTimeout(function () {
+          this.hide();
+          this.show();
+          this.startTimer();
+        }.bind(this), this.settings.timer);
+      } else {
+        clearTimeout(this.settings.automate);
+      }
+    },
+
+    end : function (abort) {
+      if (this.settings.cookie_monster) {
+        $.cookie(this.settings.cookie_name, 'ridden', {expires : this.settings.cookie_expires, domain : this.settings.cookie_domain});
+      }
+
+      if (this.settings.timer > 0) {
+        clearTimeout(this.settings.automate);
+      }
+
+      if (this.settings.modal && this.settings.expose) {
+        this.un_expose();
+      }
+
+      // Unplug keystrokes listener
+      $(this.scope).off('keyup.joyride')
+
+      this.settings.$next_tip.data('closed', true);
+      this.settings.riding = false;
+
+      $('.joyride-modal-bg').hide();
+      this.settings.$current_tip.hide();
+
+      if (typeof abort === 'undefined' || abort === false) {
+        this.settings.post_step_callback(this.settings.$li.index(), this.settings.$current_tip);
+        this.settings.post_ride_callback(this.settings.$li.index(), this.settings.$current_tip);
+      }
+
+      $('.joyride-tip-guide').remove();
+    },
+
+    off : function () {
+      $(this.scope).off('.joyride');
+      $(window).off('.joyride');
+      $('.joyride-close-tip, .joyride-next-tip, .joyride-modal-bg').off('.joyride');
+      $('.joyride-tip-guide, .joyride-modal-bg').remove();
+      clearTimeout(this.settings.automate);
+    },
+
+    reflow : function () {}
+  };
+}(jQuery, window, window.document));
+
+;(function ($, window, document, undefined) {
+  'use strict';
+
+  Foundation.libs['magellan-expedition'] = {
+    name : 'magellan-expedition',
+
+    version : '5.5.3',
+
+    settings : {
+      active_class : 'active',
+      threshold : 0, // pixels from the top of the expedition for it to become fixes
+      destination_threshold : 20, // pixels from the top of destination for it to be considered active
+      throttle_delay : 30, // calculation throttling to increase framerate
+      fixed_top : 0, // top distance in pixels assigend to the fixed element on scroll
+      offset_by_height : true,  // whether to offset the destination by the expedition height. Usually you want this to be true, unless your expedition is on the side.
+      duration : 700, // animation duration time
+      easing : 'swing' // animation easing
+    },
+
+    init : function (scope, method, options) {
+      Foundation.inherit(this, 'throttle');
+      this.bindings(method, options);
+    },
+
+    events : function () {
+      var self = this,
+          S = self.S,
+          settings = self.settings;
+
+      // initialize expedition offset
+      self.set_expedition_position();
+
+      S(self.scope)
+        .off('.magellan')
+        .on('click.fndtn.magellan', '[' + self.add_namespace('data-magellan-arrival') + '] a[href*=#]', function (e) {
+          var sameHost = ((this.hostname === location.hostname) || !this.hostname),
+              samePath = self.filterPathname(location.pathname) === self.filterPathname(this.pathname),
+              testHash = this.hash.replace(/(:|\.|\/)/g, '\\$1'),
+              anchor = this;
+
+          if (sameHost && samePath && testHash) {
+            e.preventDefault();
+            var expedition = $(this).closest('[' + self.attr_name() + ']'),
+                settings = expedition.data('magellan-expedition-init'),
+                hash = this.hash.split('#').join(''),
+                target = $('a[name="' + hash + '"]');
+
+            if (target.length === 0) {
+              target = $('#' + hash);
+
+            }
+
+            // Account for expedition height if fixed position
+            var scroll_top = target.offset().top - settings.destination_threshold + 1;
+            if (settings.offset_by_height) {
+              scroll_top = scroll_top - expedition.outerHeight();
+            }
+            $('html, body').stop().animate({
+              'scrollTop' : scroll_top
+            }, settings.duration, settings.easing, function () {
+              if (history.pushState) {
+                history.pushState(null, null, anchor.pathname + anchor.search + '#' + hash);
+              } else {
+                location.hash = anchor.pathname + anchor.search + '#' + hash;
+              }
+            });
+          }
+        })
+        .on('scroll.fndtn.magellan', self.throttle(this.check_for_arrivals.bind(this), settings.throttle_delay));
+    },
+
+    check_for_arrivals : function () {
+      var self = this;
+      self.update_arrivals();
+      self.update_expedition_positions();
+    },
+
+    set_expedition_position : function () {
+      var self = this;
+      $('[' + this.attr_name() + '=fixed]', self.scope).each(function (idx, el) {
+        var expedition = $(this),
+            settings = expedition.data('magellan-expedition-init'),
+            styles = expedition.attr('styles'), // save styles
+            top_offset, fixed_top;
+
+        expedition.attr('style', '');
+        top_offset = expedition.offset().top + settings.threshold;
+
+        //set fixed-top by attribute
+        fixed_top = parseInt(expedition.data('magellan-fixed-top'));
+        if (!isNaN(fixed_top)) {
+          self.settings.fixed_top = fixed_top;
+        }
+
+        expedition.data(self.data_attr('magellan-top-offset'), top_offset);
+        expedition.attr('style', styles);
+      });
+    },
+
+    update_expedition_positions : function () {
+      var self = this,
+          window_top_offset = $(window).scrollTop();
+
+      $('[' + this.attr_name() + '=fixed]', self.scope).each(function () {
+        var expedition = $(this),
+            settings = expedition.data('magellan-expedition-init'),
+            styles = expedition.attr('style'), // save styles
+            top_offset = expedition.data('magellan-top-offset');
+
+        //scroll to the top distance
+        if (window_top_offset + self.settings.fixed_top >= top_offset) {
+          // Placeholder allows height calculations to be consistent even when
+          // appearing to switch between fixed/non-fixed placement
+          var placeholder = expedition.prev('[' + self.add_namespace('data-magellan-expedition-clone') + ']');
+          if (placeholder.length === 0) {
+            placeholder = expedition.clone();
+            placeholder.removeAttr(self.attr_name());
+            placeholder.attr(self.add_namespace('data-magellan-expedition-clone'), '');
+            expedition.before(placeholder);
+          }
+          expedition.css({position :'fixed', top : settings.fixed_top}).addClass('fixed');
+        } else {
+          expedition.prev('[' + self.add_namespace('data-magellan-expedition-clone') + ']').remove();
+          expedition.attr('style', styles).css('position', '').css('top', '').removeClass('fixed');
+        }
+      });
+    },
+
+    update_arrivals : function () {
+      var self = this,
+          window_top_offset = $(window).scrollTop();
+
+      $('[' + this.attr_name() + ']', self.scope).each(function () {
+        var expedition = $(this),
+            settings = expedition.data(self.attr_name(true) + '-init'),
+            offsets = self.offsets(expedition, window_top_offset),
+            arrivals = expedition.find('[' + self.add_namespace('data-magellan-arrival') + ']'),
+            active_item = false;
+        offsets.each(function (idx, item) {
+          if (item.viewport_offset >= item.top_offset) {
+            var arrivals = expedition.find('[' + self.add_namespace('data-magellan-arrival') + ']');
+            arrivals.not(item.arrival).removeClass(settings.active_class);
+            item.arrival.addClass(settings.active_class);
+            active_item = true;
+            return true;
+          }
+        });
+
+        if (!active_item) {
+          arrivals.removeClass(settings.active_class);
+        }
+      });
+    },
+
+    offsets : function (expedition, window_offset) {
+      var self = this,
+          settings = expedition.data(self.attr_name(true) + '-init'),
+          viewport_offset = window_offset;
+
+      return expedition.find('[' + self.add_namespace('data-magellan-arrival') + ']').map(function (idx, el) {
+        var name = $(this).data(self.data_attr('magellan-arrival')),
+            dest = $('[' + self.add_namespace('data-magellan-destination') + '=' + name + ']');
+        if (dest.length > 0) {
+          var top_offset = dest.offset().top - settings.destination_threshold;
+          if (settings.offset_by_height) {
+            top_offset = top_offset - expedition.outerHeight();
+          }
+          top_offset = Math.floor(top_offset);
+          return {
+            destination : dest,
+            arrival : $(this),
+            top_offset : top_offset,
+            viewport_offset : viewport_offset
+          }
+        }
+      }).sort(function (a, b) {
+        if (a.top_offset < b.top_offset) {
+          return -1;
+        }
+        if (a.top_offset > b.top_offset) {
+          return 1;
+        }
+        return 0;
+      });
+    },
+
+    data_attr : function (str) {
+      if (this.namespace.length > 0) {
+        return this.namespace + '-' + str;
+      }
+
+      return str;
+    },
+
+    off : function () {
+      this.S(this.scope).off('.magellan');
+      this.S(window).off('.magellan');
+    },
+
+    filterPathname : function (pathname) {
+      pathname = pathname || '';
+      return pathname
+          .replace(/^\//,'')
+          .replace(/(?:index|default).[a-zA-Z]{3,4}$/,'')
+          .replace(/\/$/,'');
+    },
+
+    reflow : function () {
+      var self = this;
+      // remove placeholder expeditions used for height calculation purposes
+      $('[' + self.add_namespace('data-magellan-expedition-clone') + ']', self.scope).remove();
+    }
+  };
+}(jQuery, window, window.document));
+
+;(function ($, window, document, undefined) {
+  'use strict';
+
+  Foundation.libs.offcanvas = {
+    name : 'offcanvas',
+
+    version : '5.5.3',
+
+    settings : {
+      open_method : 'move',
+      close_on_click : false
+    },
+
+    init : function (scope, method, options) {
+      this.bindings(method, options);
+    },
+
+    events : function () {
+      var self = this,
+          S = self.S,
+          move_class = '',
+          right_postfix = '',
+          left_postfix = '',
+          top_postfix = '',
+          bottom_postfix = '';
+
+      if (this.settings.open_method === 'move') {
+        move_class = 'move-';
+        right_postfix = 'right';
+        left_postfix = 'left';
+        top_postfix = 'top';
+        bottom_postfix = 'bottom';
+      } else if (this.settings.open_method === 'overlap_single') {
+        move_class = 'offcanvas-overlap-';
+        right_postfix = 'right';
+        left_postfix = 'left';
+        top_postfix = 'top';
+        bottom_postfix = 'bottom';
+      } else if (this.settings.open_method === 'overlap') {
+        move_class = 'offcanvas-overlap';
+      }
+
+      S(this.scope).off('.offcanvas')
+        .on('click.fndtn.offcanvas', '.left-off-canvas-toggle', function (e) {
+          self.click_toggle_class(e, move_class + right_postfix);
+          if (self.settings.open_method !== 'overlap') {
+            S('.left-submenu').removeClass(move_class + right_postfix);
+          }
+          $('.left-off-canvas-toggle').attr('aria-expanded', 'true');
+        })
+        .on('click.fndtn.offcanvas', '.left-off-canvas-menu a', function (e) {
+          var settings = self.get_settings(e);
+          var parent = S(this).parent();
+
+          if (settings.close_on_click && !parent.hasClass('has-submenu') && !parent.hasClass('back')) {
+            self.hide.call(self, move_class + right_postfix, self.get_wrapper(e));
+            parent.parent().removeClass(move_class + right_postfix);
+          } else if (S(this).parent().hasClass('has-submenu')) {
+            e.preventDefault();
+            S(this).siblings('.left-submenu').toggleClass(move_class + right_postfix);
+          } else if (parent.hasClass('back')) {
+            e.preventDefault();
+            parent.parent().removeClass(move_class + right_postfix);
+          }
+          $('.left-off-canvas-toggle').attr('aria-expanded', 'true');
+        })
+        //end of left canvas
+        .on('click.fndtn.offcanvas', '.right-off-canvas-toggle', function (e) {
+          self.click_toggle_class(e, move_class + left_postfix);
+          if (self.settings.open_method !== 'overlap') {
+            S('.right-submenu').removeClass(move_class + left_postfix);
+          }
+          $('.right-off-canvas-toggle').attr('aria-expanded', 'true');
+        })
+        .on('click.fndtn.offcanvas', '.right-off-canvas-menu a', function (e) {
+          var settings = self.get_settings(e);
+          var parent = S(this).parent();
+
+          if (settings.close_on_click && !parent.hasClass('has-submenu') && !parent.hasClass('back')) {
+            self.hide.call(self, move_class + left_postfix, self.get_wrapper(e));
+            parent.parent().removeClass(move_class + left_postfix);
+          } else if (S(this).parent().hasClass('has-submenu')) {
+            e.preventDefault();
+            S(this).siblings('.right-submenu').toggleClass(move_class + left_postfix);
+          } else if (parent.hasClass('back')) {
+            e.preventDefault();
+            parent.parent().removeClass(move_class + left_postfix);
+          }
+          $('.right-off-canvas-toggle').attr('aria-expanded', 'true');
+        })
+        //end of right canvas
+        .on('click.fndtn.offcanvas', '.top-off-canvas-toggle', function (e) {
+          self.click_toggle_class(e, move_class + bottom_postfix);
+          if (self.settings.open_method !== 'overlap') {
+            S('.top-submenu').removeClass(move_class + bottom_postfix);
+          }
+          $('.top-off-canvas-toggle').attr('aria-expanded', 'true');
+        })
+        .on('click.fndtn.offcanvas', '.top-off-canvas-menu a', function (e) {
+          var settings = self.get_settings(e);
+          var parent = S(this).parent();
+
+          if (settings.close_on_click && !parent.hasClass('has-submenu') && !parent.hasClass('back')) {
+            self.hide.call(self, move_class + bottom_postfix, self.get_wrapper(e));
+            parent.parent().removeClass(move_class + bottom_postfix);
+          } else if (S(this).parent().hasClass('has-submenu')) {
+            e.preventDefault();
+            S(this).siblings('.top-submenu').toggleClass(move_class + bottom_postfix);
+          } else if (parent.hasClass('back')) {
+            e.preventDefault();
+            parent.parent().removeClass(move_class + bottom_postfix);
+          }
+          $('.top-off-canvas-toggle').attr('aria-expanded', 'true');
+        })
+        //end of top canvas
+        .on('click.fndtn.offcanvas', '.bottom-off-canvas-toggle', function (e) {
+          self.click_toggle_class(e, move_class + top_postfix);
+          if (self.settings.open_method !== 'overlap') {
+            S('.bottom-submenu').removeClass(move_class + top_postfix);
+          }
+          $('.bottom-off-canvas-toggle').attr('aria-expanded', 'true');
+        })
+        .on('click.fndtn.offcanvas', '.bottom-off-canvas-menu a', function (e) {
+          var settings = self.get_settings(e);
+          var parent = S(this).parent();
+
+          if (settings.close_on_click && !parent.hasClass('has-submenu') && !parent.hasClass('back')) {
+            self.hide.call(self, move_class + top_postfix, self.get_wrapper(e));
+            parent.parent().removeClass(move_class + top_postfix);
+          } else if (S(this).parent().hasClass('has-submenu')) {
+            e.preventDefault();
+            S(this).siblings('.bottom-submenu').toggleClass(move_class + top_postfix);
+          } else if (parent.hasClass('back')) {
+            e.preventDefault();
+            parent.parent().removeClass(move_class + top_postfix);
+          }
+          $('.bottom-off-canvas-toggle').attr('aria-expanded', 'true');
+        })
+        //end of bottom
+        .on('click.fndtn.offcanvas', '.exit-off-canvas', function (e) {
+          self.click_remove_class(e, move_class + left_postfix);
+          S('.right-submenu').removeClass(move_class + left_postfix);
+          if (right_postfix) {
+            self.click_remove_class(e, move_class + right_postfix);
+            S('.left-submenu').removeClass(move_class + left_postfix);
+          }
+          $('.right-off-canvas-toggle').attr('aria-expanded', 'true');
+        })
+        .on('click.fndtn.offcanvas', '.exit-off-canvas', function (e) {
+          self.click_remove_class(e, move_class + left_postfix);
+          $('.left-off-canvas-toggle').attr('aria-expanded', 'false');
+          if (right_postfix) {
+            self.click_remove_class(e, move_class + right_postfix);
+            $('.right-off-canvas-toggle').attr('aria-expanded', 'false');
+          }
+        })
+        .on('click.fndtn.offcanvas', '.exit-off-canvas', function (e) {
+          self.click_remove_class(e, move_class + top_postfix);
+          S('.bottom-submenu').removeClass(move_class + top_postfix);
+          if (bottom_postfix) {
+            self.click_remove_class(e, move_class + bottom_postfix);
+            S('.top-submenu').removeClass(move_class + top_postfix);
+          }
+          $('.bottom-off-canvas-toggle').attr('aria-expanded', 'true');
+        })
+        .on('click.fndtn.offcanvas', '.exit-off-canvas', function (e) {
+          self.click_remove_class(e, move_class + top_postfix);
+          $('.top-off-canvas-toggle').attr('aria-expanded', 'false');
+          if (bottom_postfix) {
+            self.click_remove_class(e, move_class + bottom_postfix);
+            $('.bottom-off-canvas-toggle').attr('aria-expanded', 'false');
+          }
+        });
+    },
+
+    toggle : function (class_name, $off_canvas) {
+      $off_canvas = $off_canvas || this.get_wrapper();
+      if ($off_canvas.is('.' + class_name)) {
+        this.hide(class_name, $off_canvas);
+      } else {
+        this.show(class_name, $off_canvas);
+      }
+    },
+
+    show : function (class_name, $off_canvas) {
+      $off_canvas = $off_canvas || this.get_wrapper();
+      $off_canvas.trigger('open.fndtn.offcanvas');
+      $off_canvas.addClass(class_name);
+    },
+
+    hide : function (class_name, $off_canvas) {
+      $off_canvas = $off_canvas || this.get_wrapper();
+      $off_canvas.trigger('close.fndtn.offcanvas');
+      $off_canvas.removeClass(class_name);
+    },
+
+    click_toggle_class : function (e, class_name) {
+      e.preventDefault();
+      var $off_canvas = this.get_wrapper(e);
+      this.toggle(class_name, $off_canvas);
+    },
+
+    click_remove_class : function (e, class_name) {
+      e.preventDefault();
+      var $off_canvas = this.get_wrapper(e);
+      this.hide(class_name, $off_canvas);
+    },
+
+    get_settings : function (e) {
+      var offcanvas  = this.S(e.target).closest('[' + this.attr_name() + ']');
+      return offcanvas.data(this.attr_name(true) + '-init') || this.settings;
+    },
+
+    get_wrapper : function (e) {
+      var $off_canvas = this.S(e ? e.target : this.scope).closest('.off-canvas-wrap');
+
+      if ($off_canvas.length === 0) {
+        $off_canvas = this.S('.off-canvas-wrap');
+      }
+      return $off_canvas;
+    },
+
+    reflow : function () {}
+  };
+}(jQuery, window, window.document));
+
+;(function ($, window, document, undefined) {
+  'use strict';
+
+  var noop = function () {};
+
+  var Orbit = function (el, settings) {
+    // Don't reinitialize plugin
+    if (el.hasClass(settings.slides_container_class)) {
+      return this;
+    }
+
+    var self = this,
+        container,
+        slides_container = el,
+        number_container,
+        bullets_container,
+        timer_container,
+        idx = 0,
+        animate,
+        timer,
+        locked = false,
+        adjust_height_after = false;
+
+    self.slides = function () {
+      return slides_container.children(settings.slide_selector);
+    };
+
+    self.slides().first().addClass(settings.active_slide_class);
+
+    self.update_slide_number = function (index) {
+      if (settings.slide_number) {
+        number_container.find('span:first').text(parseInt(index) + 1);
+        number_container.find('span:last').text(self.slides().length);
+      }
+      if (settings.bullets) {
+        bullets_container.children().removeClass(settings.bullets_active_class);
+        $(bullets_container.children().get(index)).addClass(settings.bullets_active_class);
+      }
+    };
+
+    self.update_active_link = function (index) {
+      var link = $('[data-orbit-link="' + self.slides().eq(index).attr('data-orbit-slide') + '"]');
+      link.siblings().removeClass(settings.bullets_active_class);
+      link.addClass(settings.bullets_active_class);
+    };
+
+    self.build_markup = function () {
+      slides_container.wrap('<div class="' + settings.container_class + '"></div>');
+      container = slides_container.parent();
+      slides_container.addClass(settings.slides_container_class);
+
+      if (settings.stack_on_small) {
+        container.addClass(settings.stack_on_small_class);
+      }
+
+      if (settings.navigation_arrows) {
+        container.append($('<a href="#"><span></span></a>').addClass(settings.prev_class));
+        container.append($('<a href="#"><span></span></a>').addClass(settings.next_class));
+      }
+
+      if (settings.timer) {
+        timer_container = $('<div>').addClass(settings.timer_container_class);
+        timer_container.append('<span>');
+        timer_container.append($('<div>').addClass(settings.timer_progress_class));
+        timer_container.addClass(settings.timer_paused_class);
+        container.append(timer_container);
+      }
+
+      if (settings.slide_number) {
+        number_container = $('<div>').addClass(settings.slide_number_class);
+        number_container.append('<span></span> ' + settings.slide_number_text + ' <span></span>');
+        container.append(number_container);
+      }
+
+      if (settings.bullets) {
+        bullets_container = $('<ol>').addClass(settings.bullets_container_class);
+        container.append(bullets_container);
+        bullets_container.wrap('<div class="orbit-bullets-container"></div>');
+        self.slides().each(function (idx, el) {
+          var bullet = $('<li>').attr('data-orbit-slide', idx).on('click', self.link_bullet);;
+          bullets_container.append(bullet);
+        });
+      }
+
+    };
+
+    self._goto = function (next_idx, start_timer) {
+      // if (locked) {return false;}
+      if (next_idx === idx) {return false;}
+      if (typeof timer === 'object') {timer.restart();}
+      var slides = self.slides();
+
+      var dir = 'next';
+      locked = true;
+      if (next_idx < idx) {dir = 'prev';}
+      if (next_idx >= slides.length) {
+        if (!settings.circular) {
+          return false;
+        }
+        next_idx = 0;
+      } else if (next_idx < 0) {
+        if (!settings.circular) {
+          return false;
+        }
+        next_idx = slides.length - 1;
+      }
+
+      var current = $(slides.get(idx));
+      var next = $(slides.get(next_idx));
+
+      current.css('zIndex', 2);
+      current.removeClass(settings.active_slide_class);
+      next.css('zIndex', 4).addClass(settings.active_slide_class);
+
+      slides_container.trigger('before-slide-change.fndtn.orbit');
+      settings.before_slide_change();
+      self.update_active_link(next_idx);
+
+      var callback = function () {
+        var unlock = function () {
+          idx = next_idx;
+          locked = false;
+          if (start_timer === true) {timer = self.create_timer(); timer.start();}
+          self.update_slide_number(idx);
+          slides_container.trigger('after-slide-change.fndtn.orbit', [{slide_number : idx, total_slides : slides.length}]);
+          settings.after_slide_change(idx, slides.length);
+        };
+        if (slides_container.outerHeight() != next.outerHeight() && settings.variable_height) {
+          slides_container.animate({'height': next.outerHeight()}, 250, 'linear', unlock);
+        } else {
+          unlock();
+        }
+      };
+
+      if (slides.length === 1) {callback(); return false;}
+
+      var start_animation = function () {
+        if (dir === 'next') {animate.next(current, next, callback);}
+        if (dir === 'prev') {animate.prev(current, next, callback);}
+      };
+
+      if (next.outerHeight() > slides_container.outerHeight() && settings.variable_height) {
+        slides_container.animate({'height': next.outerHeight()}, 250, 'linear', start_animation);
+      } else {
+        start_animation();
+      }
+    };
+
+    self.next = function (e) {
+      e.stopImmediatePropagation();
+      e.preventDefault();
+      self._goto(idx + 1);
+    };
+
+    self.prev = function (e) {
+      e.stopImmediatePropagation();
+      e.preventDefault();
+      self._goto(idx - 1);
+    };
+
+    self.link_custom = function (e) {
+      e.preventDefault();
+      var link = $(this).attr('data-orbit-link');
+      if ((typeof link === 'string') && (link = $.trim(link)) != '') {
+        var slide = container.find('[data-orbit-slide=' + link + ']');
+        if (slide.index() != -1) {self._goto(slide.index());}
+      }
+    };
+
+    self.link_bullet = function (e) {
+      var index = $(this).attr('data-orbit-slide');
+      if ((typeof index === 'string') && (index = $.trim(index)) != '') {
+        if (isNaN(parseInt(index))) {
+          var slide = container.find('[data-orbit-slide=' + index + ']');
+          if (slide.index() != -1) {self._goto(slide.index() + 1);}
+        } else {
+          self._goto(parseInt(index));
+        }
+      }
+
+    }
+
+    self.timer_callback = function () {
+      self._goto(idx + 1, true);
+    }
+
+    self.compute_dimensions = function () {
+      var current = $(self.slides().get(idx));
+      var h = current.outerHeight();
+      if (!settings.variable_height) {
+        self.slides().each(function(){
+          if ($(this).outerHeight() > h) { h = $(this).outerHeight(); }
+        });
+      }
+      slides_container.height(h);
+    };
+
+    self.create_timer = function () {
+      var t = new Timer(
+        container.find('.' + settings.timer_container_class),
+        settings,
+        self.timer_callback
+      );
+      return t;
+    };
+
+    self.stop_timer = function () {
+      if (typeof timer === 'object') {
+        timer.stop();
+      }
+    };
+
+    self.toggle_timer = function () {
+      var t = container.find('.' + settings.timer_container_class);
+      if (t.hasClass(settings.timer_paused_class)) {
+        if (typeof timer === 'undefined') {timer = self.create_timer();}
+        timer.start();
+      } else {
+        if (typeof timer === 'object') {timer.stop();}
+      }
+    };
+
+    self.init = function () {
+      self.build_markup();
+      if (settings.timer) {
+        timer = self.create_timer();
+        Foundation.utils.image_loaded(this.slides().children('img'), timer.start);
+      }
+      animate = new FadeAnimation(settings, slides_container);
+      if (settings.animation === 'slide') {
+        animate = new SlideAnimation(settings, slides_container);
+      }
+
+      container.on('click', '.' + settings.next_class, self.next);
+      container.on('click', '.' + settings.prev_class, self.prev);
+
+      if (settings.next_on_click) {
+        container.on('click', '.' + settings.slides_container_class + ' [data-orbit-slide]', self.link_bullet);
+      }
+
+      container.on('click', self.toggle_timer);
+      if (settings.swipe) {
+        container.on('touchstart.fndtn.orbit', function (e) {
+          if (!e.touches) {e = e.originalEvent;}
+          var data = {
+            start_page_x : e.touches[0].pageX,
+            start_page_y : e.touches[0].pageY,
+            start_time : (new Date()).getTime(),
+            delta_x : 0,
+            is_scrolling : undefined
+          };
+          container.data('swipe-transition', data);
+          e.stopPropagation();
+        })
+        .on('touchmove.fndtn.orbit', function (e) {
+          if (!e.touches) {
+            e = e.originalEvent;
+          }
+          // Ignore pinch/zoom events
+          if (e.touches.length > 1 || e.scale && e.scale !== 1) {
+            return;
+          }
+
+          var data = container.data('swipe-transition');
+          if (typeof data === 'undefined') {data = {};}
+
+          data.delta_x = e.touches[0].pageX - data.start_page_x;
+
+          if ( typeof data.is_scrolling === 'undefined') {
+            data.is_scrolling = !!( data.is_scrolling || Math.abs(data.delta_x) < Math.abs(e.touches[0].pageY - data.start_page_y) );
+          }
+
+          if (!data.is_scrolling && !data.active) {
+            e.preventDefault();
+            var direction = (data.delta_x < 0) ? (idx + 1) : (idx - 1);
+            data.active = true;
+            self._goto(direction);
+          }
+        })
+        .on('touchend.fndtn.orbit', function (e) {
+          container.data('swipe-transition', {});
+          e.stopPropagation();
+        })
+      }
+      container.on('mouseenter.fndtn.orbit', function (e) {
+        if (settings.timer && settings.pause_on_hover) {
+          self.stop_timer();
+        }
+      })
+      .on('mouseleave.fndtn.orbit', function (e) {
+        if (settings.timer && settings.resume_on_mouseout) {
+          timer.start();
+        }
+      });
+
+      $(document).on('click', '[data-orbit-link]', self.link_custom);
+      $(window).on('load resize', self.compute_dimensions);
+      Foundation.utils.image_loaded(this.slides().children('img'), self.compute_dimensions);
+      Foundation.utils.image_loaded(this.slides().children('img'), function () {
+        container.prev('.' + settings.preloader_class).css('display', 'none');
+        self.update_slide_number(0);
+        self.update_active_link(0);
+        slides_container.trigger('ready.fndtn.orbit');
+      });
+    };
+
+    self.init();
+  };
+
+  var Timer = function (el, settings, callback) {
+    var self = this,
+        duration = settings.timer_speed,
+        progress = el.find('.' + settings.timer_progress_class),
+        start,
+        timeout,
+        left = -1;
+
+    this.update_progress = function (w) {
+      var new_progress = progress.clone();
+      new_progress.attr('style', '');
+      new_progress.css('width', w + '%');
+      progress.replaceWith(new_progress);
+      progress = new_progress;
+    };
+
+    this.restart = function () {
+      clearTimeout(timeout);
+      el.addClass(settings.timer_paused_class);
+      left = -1;
+      self.update_progress(0);
+    };
+
+    this.start = function () {
+      if (!el.hasClass(settings.timer_paused_class)) {return true;}
+      left = (left === -1) ? duration : left;
+      el.removeClass(settings.timer_paused_class);
+      start = new Date().getTime();
+      progress.animate({'width' : '100%'}, left, 'linear');
+      timeout = setTimeout(function () {
+        self.restart();
+        callback();
+      }, left);
+      el.trigger('timer-started.fndtn.orbit')
+    };
+
+    this.stop = function () {
+      if (el.hasClass(settings.timer_paused_class)) {return true;}
+      clearTimeout(timeout);
+      el.addClass(settings.timer_paused_class);
+      var end = new Date().getTime();
+      left = left - (end - start);
+      var w = 100 - ((left / duration) * 100);
+      self.update_progress(w);
+      el.trigger('timer-stopped.fndtn.orbit');
+    };
+  };
+
+  var SlideAnimation = function (settings, container) {
+    var duration = settings.animation_speed;
+    var is_rtl = ($('html[dir=rtl]').length === 1);
+    var margin = is_rtl ? 'marginRight' : 'marginLeft';
+    var animMargin = {};
+    animMargin[margin] = '0%';
+
+    this.next = function (current, next, callback) {
+      current.animate({marginLeft : '-100%'}, duration);
+      next.animate(animMargin, duration, function () {
+        current.css(margin, '100%');
+        callback();
+      });
+    };
+
+    this.prev = function (current, prev, callback) {
+      current.animate({marginLeft : '100%'}, duration);
+      prev.css(margin, '-100%');
+      prev.animate(animMargin, duration, function () {
+        current.css(margin, '100%');
+        callback();
+      });
+    };
+  };
+
+  var FadeAnimation = function (settings, container) {
+    var duration = settings.animation_speed;
+    var is_rtl = ($('html[dir=rtl]').length === 1);
+    var margin = is_rtl ? 'marginRight' : 'marginLeft';
+
+    this.next = function (current, next, callback) {
+      next.css({'margin' : '0%', 'opacity' : '0.01'});
+      next.animate({'opacity' :'1'}, duration, 'linear', function () {
+        current.css('margin', '100%');
+        callback();
+      });
+    };
+
+    this.prev = function (current, prev, callback) {
+      prev.css({'margin' : '0%', 'opacity' : '0.01'});
+      prev.animate({'opacity' : '1'}, duration, 'linear', function () {
+        current.css('margin', '100%');
+        callback();
+      });
+    };
+  };
+
+  Foundation.libs = Foundation.libs || {};
+
+  Foundation.libs.orbit = {
+    name : 'orbit',
+
+    version : '5.5.3',
+
+    settings : {
+      animation : 'slide',
+      timer_speed : 10000,
+      pause_on_hover : true,
+      resume_on_mouseout : false,
+      next_on_click : true,
+      animation_speed : 500,
+      stack_on_small : false,
+      navigation_arrows : true,
+      slide_number : true,
+      slide_number_text : 'of',
+      container_class : 'orbit-container',
+      stack_on_small_class : 'orbit-stack-on-small',
+      next_class : 'orbit-next',
+      prev_class : 'orbit-prev',
+      timer_container_class : 'orbit-timer',
+      timer_paused_class : 'paused',
+      timer_progress_class : 'orbit-progress',
+      slides_container_class : 'orbit-slides-container',
+      preloader_class : 'preloader',
+      slide_selector : '*',
+      bullets_container_class : 'orbit-bullets',
+      bullets_active_class : 'active',
+      slide_number_class : 'orbit-slide-number',
+      caption_class : 'orbit-caption',
+      active_slide_class : 'active',
+      orbit_transition_class : 'orbit-transitioning',
+      bullets : true,
+      circular : true,
+      timer : true,
+      variable_height : false,
+      swipe : true,
+      before_slide_change : noop,
+      after_slide_change : noop
+    },
+
+    init : function (scope, method, options) {
+      var self = this;
+      this.bindings(method, options);
+    },
+
+    events : function (instance) {
+      var orbit_instance = new Orbit(this.S(instance), this.S(instance).data('orbit-init'));
+      this.S(instance).data(this.name + '-instance', orbit_instance);
+    },
+
+    reflow : function () {
+      var self = this;
+
+      if (self.S(self.scope).is('[data-orbit]')) {
+        var $el = self.S(self.scope);
+        var instance = $el.data(self.name + '-instance');
+        instance.compute_dimensions();
+      } else {
+        self.S('[data-orbit]', self.scope).each(function (idx, el) {
+          var $el = self.S(el);
+          var opts = self.data_options($el);
+          var instance = $el.data(self.name + '-instance');
+          instance.compute_dimensions();
+        });
+      }
+    }
+  };
+
+}(jQuery, window, window.document));
+
+;(function ($, window, document, undefined) {
+  'use strict';
+
+  var openModals = [];
+
+  Foundation.libs.reveal = {
+    name : 'reveal',
+
+    version : '5.5.3',
+
+    locked : false,
+
+    settings : {
+      animation : 'fadeAndPop',
+      animation_speed : 250,
+      close_on_background_click : true,
+      close_on_esc : true,
+      dismiss_modal_class : 'close-reveal-modal',
+      multiple_opened : false,
+      bg_class : 'reveal-modal-bg',
+      root_element : 'body',
+      open : function(){},
+      opened : function(){},
+      close : function(){},
+      closed : function(){},
+      on_ajax_error: $.noop,
+      bg : $('.reveal-modal-bg'),
+      css : {
+        open : {
+          'opacity' : 0,
+          'visibility' : 'visible',
+          'display' : 'block'
+        },
+        close : {
+          'opacity' : 1,
+          'visibility' : 'hidden',
+          'display' : 'none'
+        }
+      }
+    },
+
+    init : function (scope, method, options) {
+      $.extend(true, this.settings, method, options);
+      this.bindings(method, options);
+    },
+
+    events : function (scope) {
+      var self = this,
+          S = self.S;
+
+      S(this.scope)
+        .off('.reveal')
+        .on('click.fndtn.reveal', '[' + this.add_namespace('data-reveal-id') + ']:not([disabled])', function (e) {
+          e.preventDefault();
+
+          if (!self.locked) {
+            var element = S(this),
+                ajax = element.data(self.data_attr('reveal-ajax')),
+                replaceContentSel = element.data(self.data_attr('reveal-replace-content'));
+
+            self.locked = true;
+
+            if (typeof ajax === 'undefined') {
+              self.open.call(self, element);
+            } else {
+              var url = ajax === true ? element.attr('href') : ajax;
+              self.open.call(self, element, {url : url}, { replaceContentSel : replaceContentSel });
+            }
+          }
+        });
+
+      S(document)
+        .on('click.fndtn.reveal', this.close_targets(), function (e) {
+          e.preventDefault();
+          if (!self.locked) {
+            var settings = S('[' + self.attr_name() + '].open').data(self.attr_name(true) + '-init') || self.settings,
+                bg_clicked = S(e.target)[0] === S('.' + settings.bg_class)[0];
+
+            if (bg_clicked) {
+              if (settings.close_on_background_click) {
+                e.stopPropagation();
+              } else {
+                return;
+              }
+            }
+
+            self.locked = true;
+            self.close.call(self, bg_clicked ? S('[' + self.attr_name() + '].open:not(.toback)') : S(this).closest('[' + self.attr_name() + ']'));
+          }
+        });
+
+      if (S('[' + self.attr_name() + ']', this.scope).length > 0) {
+        S(this.scope)
+          // .off('.reveal')
+          .on('open.fndtn.reveal', this.settings.open)
+          .on('opened.fndtn.reveal', this.settings.opened)
+          .on('opened.fndtn.reveal', this.open_video)
+          .on('close.fndtn.reveal', this.settings.close)
+          .on('closed.fndtn.reveal', this.settings.closed)
+          .on('closed.fndtn.reveal', this.close_video);
+      } else {
+        S(this.scope)
+          // .off('.reveal')
+          .on('open.fndtn.reveal', '[' + self.attr_name() + ']', this.settings.open)
+          .on('opened.fndtn.reveal', '[' + self.attr_name() + ']', this.settings.opened)
+          .on('opened.fndtn.reveal', '[' + self.attr_name() + ']', this.open_video)
+          .on('close.fndtn.reveal', '[' + self.attr_name() + ']', this.settings.close)
+          .on('closed.fndtn.reveal', '[' + self.attr_name() + ']', this.settings.closed)
+          .on('closed.fndtn.reveal', '[' + self.attr_name() + ']', this.close_video);
+      }
+
+      return true;
+    },
+
+    // PATCH #3: turning on key up capture only when a reveal window is open
+    key_up_on : function (scope) {
+      var self = this;
+
+      // PATCH #1: fixing multiple keyup event trigger from single key press
+      self.S('body').off('keyup.fndtn.reveal').on('keyup.fndtn.reveal', function ( event ) {
+        var open_modal = self.S('[' + self.attr_name() + '].open'),
+            settings = open_modal.data(self.attr_name(true) + '-init') || self.settings ;
+        // PATCH #2: making sure that the close event can be called only while unlocked,
+        //           so that multiple keyup.fndtn.reveal events don't prevent clean closing of the reveal window.
+        if ( settings && event.which === 27  && settings.close_on_esc && !self.locked) { // 27 is the keycode for the Escape key
+          self.close.call(self, open_modal);
+        }
+      });
+
+      return true;
+    },
+
+    // PATCH #3: turning on key up capture only when a reveal window is open
+    key_up_off : function (scope) {
+      this.S('body').off('keyup.fndtn.reveal');
+      return true;
+    },
+
+    open : function (target, ajax_settings) {
+      var self = this,
+          modal;
+
+      if (target) {
+        if (typeof target.selector !== 'undefined') {
+          // Find the named node; only use the first one found, since the rest of the code assumes there's only one node
+          modal = self.S('#' + target.data(self.data_attr('reveal-id'))).first();
+        } else {
+          modal = self.S(this.scope);
+
+          ajax_settings = target;
+        }
+      } else {
+        modal = self.S(this.scope);
+      }
+
+      var settings = modal.data(self.attr_name(true) + '-init');
+      settings = settings || this.settings;
+
+
+      if (modal.hasClass('open') && target !== undefined && target.attr('data-reveal-id') == modal.attr('id')) {
+        return self.close(modal);
+      }
+
+      if (!modal.hasClass('open')) {
+        var open_modal = self.S('[' + self.attr_name() + '].open');
+
+        if (typeof modal.data('css-top') === 'undefined') {
+          modal.data('css-top', parseInt(modal.css('top'), 10))
+            .data('offset', this.cache_offset(modal));
+        }
+
+        modal.attr('tabindex','0').attr('aria-hidden','false');
+
+        this.key_up_on(modal);    // PATCH #3: turning on key up capture only when a reveal window is open
+
+        // Prevent namespace event from triggering twice
+        modal.on('open.fndtn.reveal', function(e) {
+          if (e.namespace !== 'fndtn.reveal') return;
+        });
+
+        modal.on('open.fndtn.reveal').trigger('open.fndtn.reveal');
+
+        if (open_modal.length < 1) {
+          this.toggle_bg(modal, true);
+        }
+
+        if (typeof ajax_settings === 'string') {
+          ajax_settings = {
+            url : ajax_settings
+          };
+        }
+
+        var openModal = function() {
+          if(open_modal.length > 0) {
+            if(settings.multiple_opened) {
+              self.to_back(open_modal);
+            } else {
+              self.hide(open_modal, settings.css.close);
+            }
+          }
+
+          // bl: add the open_modal that isn't already in the background to the openModals array
+          if(settings.multiple_opened) {
+            openModals.push(modal);
+          }
+
+          self.show(modal, settings.css.open);
+        };
+
+        if (typeof ajax_settings === 'undefined' || !ajax_settings.url) {
+          openModal();
+        } else {
+          var old_success = typeof ajax_settings.success !== 'undefined' ? ajax_settings.success : null;
+          $.extend(ajax_settings, {
+            success : function (data, textStatus, jqXHR) {
+              if ( $.isFunction(old_success) ) {
+                var result = old_success(data, textStatus, jqXHR);
+                if (typeof result == 'string') {
+                  data = result;
+                }
+              }
+
+              if (typeof options !== 'undefined' && typeof options.replaceContentSel !== 'undefined') {
+                modal.find(options.replaceContentSel).html(data);
+              } else {
+                modal.html(data);
+              }
+
+              self.S(modal).foundation('section', 'reflow');
+              self.S(modal).children().foundation();
+
+              openModal();
+            }
+          });
+
+          // check for if user initalized with error callback
+          if (settings.on_ajax_error !== $.noop) {
+            $.extend(ajax_settings, {
+              error : settings.on_ajax_error
+            });
+          }
+
+          $.ajax(ajax_settings);
+        }
+      }
+      self.S(window).trigger('resize');
+    },
+
+    close : function (modal) {
+      var modal = modal && modal.length ? modal : this.S(this.scope),
+          open_modals = this.S('[' + this.attr_name() + '].open'),
+          settings = modal.data(this.attr_name(true) + '-init') || this.settings,
+          self = this;
+
+      if (open_modals.length > 0) {
+
+        modal.removeAttr('tabindex','0').attr('aria-hidden','true');
+
+        this.locked = true;
+        this.key_up_off(modal);   // PATCH #3: turning on key up capture only when a reveal window is open
+
+        modal.trigger('close.fndtn.reveal');
+
+        if ((settings.multiple_opened && open_modals.length === 1) || !settings.multiple_opened || modal.length > 1) {
+          self.toggle_bg(modal, false);
+          self.to_front(modal);
+        }
+
+        if (settings.multiple_opened) {
+          var isCurrent = modal.is(':not(.toback)');
+          self.hide(modal, settings.css.close, settings);
+          if(isCurrent) {
+            // remove the last modal since it is now closed
+            openModals.pop();
+          } else {
+            // if this isn't the current modal, then find it in the array and remove it
+            openModals = $.grep(openModals, function(elt) {
+              var isThis = elt[0]===modal[0];
+              if(isThis) {
+                // since it's not currently in the front, put it in the front now that it is hidden
+                // so that if it's re-opened, it won't be .toback
+                self.to_front(modal);
+              }
+              return !isThis;
+            });
+          }
+          // finally, show the next modal in the stack, if there is one
+          if(openModals.length>0) {
+            self.to_front(openModals[openModals.length - 1]);
+          }
+        } else {
+          self.hide(open_modals, settings.css.close, settings);
+        }
+      }
+    },
+
+    close_targets : function () {
+      var base = '.' + this.settings.dismiss_modal_class;
+
+      if (this.settings.close_on_background_click) {
+        return base + ', .' + this.settings.bg_class;
+      }
+
+      return base;
+    },
+
+    toggle_bg : function (modal, state) {
+      if (this.S('.' + this.settings.bg_class).length === 0) {
+        this.settings.bg = $('<div />', {'class': this.settings.bg_class})
+          .appendTo('body').hide();
+      }
+
+      var visible = this.settings.bg.filter(':visible').length > 0;
+      if ( state != visible ) {
+        if ( state == undefined ? visible : !state ) {
+          this.hide(this.settings.bg);
+        } else {
+          this.show(this.settings.bg);
+        }
+      }
+    },
+
+    show : function (el, css) {
+      // is modal
+      if (css) {
+        var settings = el.data(this.attr_name(true) + '-init') || this.settings,
+            root_element = settings.root_element,
+            context = this;
+
+        if (el.parent(root_element).length === 0) {
+          var placeholder = el.wrap('<div style="display: none;" />').parent();
+
+          el.on('closed.fndtn.reveal.wrapped', function () {
+            el.detach().appendTo(placeholder);
+            el.unwrap().unbind('closed.fndtn.reveal.wrapped');
+          });
+
+          el.detach().appendTo(root_element);
+        }
+
+        var animData = getAnimationData(settings.animation);
+        if (!animData.animate) {
+          this.locked = false;
+        }
+        if (animData.pop) {
+          css.top = $(window).scrollTop() - el.data('offset') + 'px';
+          var end_css = {
+            top: $(window).scrollTop() + el.data('css-top') + 'px',
+            opacity: 1
+          };
+
+          return setTimeout(function () {
+            return el
+              .css(css)
+              .animate(end_css, settings.animation_speed, 'linear', function () {
+                context.locked = false;
+                el.trigger('opened.fndtn.reveal');
+              })
+              .addClass('open');
+          }, settings.animation_speed / 2);
+        }
+
+        css.top = $(window).scrollTop() + el.data('css-top') + 'px';
+
+        if (animData.fade) {
+          var end_css = {opacity: 1};
+
+          return setTimeout(function () {
+            return el
+              .css(css)
+              .animate(end_css, settings.animation_speed, 'linear', function () {
+                context.locked = false;
+                el.trigger('opened.fndtn.reveal');
+              })
+              .addClass('open');
+          }, settings.animation_speed / 2);
+        }
+
+        return el.css(css).show().css({opacity : 1}).addClass('open').trigger('opened.fndtn.reveal');
+      }
+
+      var settings = this.settings;
+
+      // should we animate the background?
+      if (getAnimationData(settings.animation).fade) {
+        return el.fadeIn(settings.animation_speed / 2);
+      }
+
+      this.locked = false;
+
+      return el.show();
+    },
+
+    to_back : function(el) {
+      el.addClass('toback');
+    },
+
+    to_front : function(el) {
+      el.removeClass('toback');
+    },
+
+    hide : function (el, css) {
+      // is modal
+      if (css) {
+        var settings = el.data(this.attr_name(true) + '-init'),
+            context = this;
+        settings = settings || this.settings;
+
+        var animData = getAnimationData(settings.animation);
+        if (!animData.animate) {
+          this.locked = false;
+        }
+        if (animData.pop) {
+          var end_css = {
+            top: - $(window).scrollTop() - el.data('offset') + 'px',
+            opacity: 0
+          };
+
+          return setTimeout(function () {
+            return el
+              .animate(end_css, settings.animation_speed, 'linear', function () {
+                context.locked = false;
+                el.css(css).trigger('closed.fndtn.reveal');
+              })
+              .removeClass('open');
+          }, settings.animation_speed / 2);
+        }
+
+        if (animData.fade) {
+          var end_css = {opacity : 0};
+
+          return setTimeout(function () {
+            return el
+              .animate(end_css, settings.animation_speed, 'linear', function () {
+                context.locked = false;
+                el.css(css).trigger('closed.fndtn.reveal');
+              })
+              .removeClass('open');
+          }, settings.animation_speed / 2);
+        }
+
+        return el.hide().css(css).removeClass('open').trigger('closed.fndtn.reveal');
+      }
+
+      var settings = this.settings;
+
+      // should we animate the background?
+      if (getAnimationData(settings.animation).fade) {
+        return el.fadeOut(settings.animation_speed / 2);
+      }
+
+      return el.hide();
+    },
+
+    close_video : function (e) {
+      var video = $('.flex-video', e.target),
+          iframe = $('iframe', video);
+
+      if (iframe.length > 0) {
+        iframe.attr('data-src', iframe[0].src);
+        iframe.attr('src', iframe.attr('src'));
+        video.hide();
+      }
+    },
+
+    open_video : function (e) {
+      var video = $('.flex-video', e.target),
+          iframe = video.find('iframe');
+
+      if (iframe.length > 0) {
+        var data_src = iframe.attr('data-src');
+        if (typeof data_src === 'string') {
+          iframe[0].src = iframe.attr('data-src');
+        } else {
+          var src = iframe[0].src;
+          iframe[0].src = undefined;
+          iframe[0].src = src;
+        }
+        video.show();
+      }
+    },
+
+    data_attr : function (str) {
+      if (this.namespace.length > 0) {
+        return this.namespace + '-' + str;
+      }
+
+      return str;
+    },
+
+    cache_offset : function (modal) {
+      var offset = modal.show().height() + parseInt(modal.css('top'), 10) + modal.scrollY;
+
+      modal.hide();
+
+      return offset;
+    },
+
+    off : function () {
+      $(this.scope).off('.fndtn.reveal');
+    },
+
+    reflow : function () {}
+  };
+
+  /*
+   * getAnimationData('popAndFade') // {animate: true,  pop: true,  fade: true}
+   * getAnimationData('fade')       // {animate: true,  pop: false, fade: true}
+   * getAnimationData('pop')        // {animate: true,  pop: true,  fade: false}
+   * getAnimationData('foo')        // {animate: false, pop: false, fade: false}
+   * getAnimationData(null)         // {animate: false, pop: false, fade: false}
+   */
+  function getAnimationData(str) {
+    var fade = /fade/i.test(str);
+    var pop = /pop/i.test(str);
+    return {
+      animate : fade || pop,
+      pop : pop,
+      fade : fade
+    };
+  }
+}(jQuery, window, window.document));
+
+;(function ($, window, document, undefined) {
+  'use strict';
+
+  Foundation.libs.slider = {
+    name : 'slider',
+
+    version : '5.5.3',
+
+    settings : {
+      start : 0,
+      end : 100,
+      step : 1,
+      precision : 2,
+      initial : null,
+      display_selector : '',
+      vertical : false,
+      trigger_input_change : false,
+      on_change : function () {}
+    },
+
+    cache : {},
+
+    init : function (scope, method, options) {
+      Foundation.inherit(this, 'throttle');
+      this.bindings(method, options);
+      this.reflow();
+    },
+
+    events : function () {
+      var self = this;
+      $(this.scope)
+        .off('.slider')
+        .on('mousedown.fndtn.slider touchstart.fndtn.slider pointerdown.fndtn.slider',
+        '[' + self.attr_name() + ']:not(.disabled, [disabled]) .range-slider-handle', function (e) {
+          if (!self.cache.active) {
+            e.preventDefault();
+            self.set_active_slider($(e.target));
+          }
+        })
+        .on('mousemove.fndtn.slider touchmove.fndtn.slider pointermove.fndtn.slider', function (e) {
+          if (!!self.cache.active) {
+            e.preventDefault();
+            if ($.data(self.cache.active[0], 'settings').vertical) {
+              var scroll_offset = 0;
+              if (!e.pageY) {
+                scroll_offset = window.scrollY;
+              }
+              self.calculate_position(self.cache.active, self.get_cursor_position(e, 'y') + scroll_offset);
+            } else {
+              self.calculate_position(self.cache.active, self.get_cursor_position(e, 'x'));
+            }
+          }
+        })
+        .on('mouseup.fndtn.slider touchend.fndtn.slider pointerup.fndtn.slider', function (e) {
+          if(!self.cache.active) {
+            // if the user has just clicked into the slider without starting to drag the handle
+            var slider = $(e.target).attr('role') === 'slider' ? $(e.target) : $(e.target).closest('.range-slider').find("[role='slider']");
+
+            if (slider.length && (!slider.parent().hasClass('disabled') && !slider.parent().attr('disabled'))) {
+              self.set_active_slider(slider);
+              if ($.data(self.cache.active[0], 'settings').vertical) {
+                var scroll_offset = 0;
+                if (!e.pageY) {
+                  scroll_offset = window.scrollY;
+                }
+                self.calculate_position(self.cache.active, self.get_cursor_position(e, 'y') + scroll_offset);
+              } else {
+                self.calculate_position(self.cache.active, self.get_cursor_position(e, 'x'));
+              }
+            }
+          }
+          self.remove_active_slider();
+        })
+        .on('change.fndtn.slider', function (e) {
+          self.settings.on_change();
+        });
+
+      self.S(window)
+        .on('resize.fndtn.slider', self.throttle(function (e) {
+          self.reflow();
+        }, 300));
+
+      // update slider value as users change input value
+      this.S('[' + this.attr_name() + ']').each(function () {
+        var slider = $(this),
+            handle = slider.children('.range-slider-handle')[0],
+            settings = self.initialize_settings(handle);
+
+        if (settings.display_selector != '') {
+          $(settings.display_selector).each(function(){
+            if ($(this).attr('value')) {
+              $(this).off('change').on('change', function () {
+                slider.foundation("slider", "set_value", $(this).val());
+              });
+            }
+          });
+        }
+      });
+    },
+
+    get_cursor_position : function (e, xy) {
+      var pageXY = 'page' + xy.toUpperCase(),
+          clientXY = 'client' + xy.toUpperCase(),
+          position;
+
+      if (typeof e[pageXY] !== 'undefined') {
+        position = e[pageXY];
+      } else if (typeof e.originalEvent[clientXY] !== 'undefined') {
+        position = e.originalEvent[clientXY];
+      } else if (e.originalEvent.touches && e.originalEvent.touches[0] && typeof e.originalEvent.touches[0][clientXY] !== 'undefined') {
+        position = e.originalEvent.touches[0][clientXY];
+      } else if (e.currentPoint && typeof e.currentPoint[xy] !== 'undefined') {
+        position = e.currentPoint[xy];
+      }
+
+      return position;
+    },
+
+    set_active_slider : function ($handle) {
+      this.cache.active = $handle;
+    },
+
+    remove_active_slider : function () {
+      this.cache.active = null;
+    },
+
+    calculate_position : function ($handle, cursor_x) {
+      var self = this,
+          settings = $.data($handle[0], 'settings'),
+          handle_l = $.data($handle[0], 'handle_l'),
+          handle_o = $.data($handle[0], 'handle_o'),
+          bar_l = $.data($handle[0], 'bar_l'),
+          bar_o = $.data($handle[0], 'bar_o');
+
+      requestAnimationFrame(function () {
+        var pct;
+
+        if (Foundation.rtl && !settings.vertical) {
+          pct = self.limit_to(((bar_o + bar_l - cursor_x) / bar_l), 0, 1);
+        } else {
+          pct = self.limit_to(((cursor_x - bar_o) / bar_l), 0, 1);
+        }
+
+        pct = settings.vertical ? 1 - pct : pct;
+
+        var norm = self.normalized_value(pct, settings.start, settings.end, settings.step, settings.precision);
+
+        self.set_ui($handle, norm);
+      });
+    },
+
+    set_ui : function ($handle, value) {
+      var settings = $.data($handle[0], 'settings'),
+          handle_l = $.data($handle[0], 'handle_l'),
+          bar_l = $.data($handle[0], 'bar_l'),
+          norm_pct = this.normalized_percentage(value, settings.start, settings.end),
+          handle_offset = norm_pct * (bar_l - handle_l) - 1,
+          progress_bar_length = norm_pct * 100,
+          $handle_parent = $handle.parent(),
+          $hidden_inputs = $handle.parent().children('input[type=hidden]');
+
+      if (Foundation.rtl && !settings.vertical) {
+        handle_offset = -handle_offset;
+      }
+
+      handle_offset = settings.vertical ? -handle_offset + bar_l - handle_l + 1 : handle_offset;
+      this.set_translate($handle, handle_offset, settings.vertical);
+
+      if (settings.vertical) {
+        $handle.siblings('.range-slider-active-segment').css('height', progress_bar_length + '%');
+      } else {
+        $handle.siblings('.range-slider-active-segment').css('width', progress_bar_length + '%');
+      }
+
+      $handle_parent.attr(this.attr_name(), value).trigger('change.fndtn.slider');
+
+      $hidden_inputs.val(value);
+      if (settings.trigger_input_change) {
+          $hidden_inputs.trigger('change.fndtn.slider');
+      }
+
+      if (!$handle[0].hasAttribute('aria-valuemin')) {
+        $handle.attr({
+          'aria-valuemin' : settings.start,
+          'aria-valuemax' : settings.end
+        });
+      }
+      $handle.attr('aria-valuenow', value);
+
+      if (settings.display_selector != '') {
+        $(settings.display_selector).each(function () {
+          if (this.hasAttribute('value')) {
+            $(this).val(value);
+          } else {
+            $(this).text(value);
+          }
+        });
+      }
+
+    },
+
+    normalized_percentage : function (val, start, end) {
+      return Math.min(1, (val - start) / (end - start));
+    },
+
+    normalized_value : function (val, start, end, step, precision) {
+      var range = end - start,
+          point = val * range,
+          mod = (point - (point % step)) / step,
+          rem = point % step,
+          round = ( rem >= step * 0.5 ? step : 0);
+      return ((mod * step + round) + start).toFixed(precision);
+    },
+
+    set_translate : function (ele, offset, vertical) {
+      if (vertical) {
+        $(ele)
+          .css('-webkit-transform', 'translateY(' + offset + 'px)')
+          .css('-moz-transform', 'translateY(' + offset + 'px)')
+          .css('-ms-transform', 'translateY(' + offset + 'px)')
+          .css('-o-transform', 'translateY(' + offset + 'px)')
+          .css('transform', 'translateY(' + offset + 'px)');
+      } else {
+        $(ele)
+          .css('-webkit-transform', 'translateX(' + offset + 'px)')
+          .css('-moz-transform', 'translateX(' + offset + 'px)')
+          .css('-ms-transform', 'translateX(' + offset + 'px)')
+          .css('-o-transform', 'translateX(' + offset + 'px)')
+          .css('transform', 'translateX(' + offset + 'px)');
+      }
+    },
+
+    limit_to : function (val, min, max) {
+      return Math.min(Math.max(val, min), max);
+    },
+
+    initialize_settings : function (handle) {
+      var settings = $.extend({}, this.settings, this.data_options($(handle).parent())),
+          decimal_places_match_result;
+
+      if (settings.precision === null) {
+        decimal_places_match_result = ('' + settings.step).match(/\.([\d]*)/);
+        settings.precision = decimal_places_match_result && decimal_places_match_result[1] ? decimal_places_match_result[1].length : 0;
+      }
+
+      if (settings.vertical) {
+        $.data(handle, 'bar_o', $(handle).parent().offset().top);
+        $.data(handle, 'bar_l', $(handle).parent().outerHeight());
+        $.data(handle, 'handle_o', $(handle).offset().top);
+        $.data(handle, 'handle_l', $(handle).outerHeight());
+      } else {
+        $.data(handle, 'bar_o', $(handle).parent().offset().left);
+        $.data(handle, 'bar_l', $(handle).parent().outerWidth());
+        $.data(handle, 'handle_o', $(handle).offset().left);
+        $.data(handle, 'handle_l', $(handle).outerWidth());
+      }
+
+      $.data(handle, 'bar', $(handle).parent());
+      return $.data(handle, 'settings', settings);
+    },
+
+    set_initial_position : function ($ele) {
+      var settings = $.data($ele.children('.range-slider-handle')[0], 'settings'),
+          initial = ((typeof settings.initial == 'number' && !isNaN(settings.initial)) ? settings.initial : Math.floor((settings.end - settings.start) * 0.5 / settings.step) * settings.step + settings.start),
+          $handle = $ele.children('.range-slider-handle');
+      this.set_ui($handle, initial);
+    },
+
+    set_value : function (value) {
+      var self = this;
+      $('[' + self.attr_name() + ']', this.scope).each(function () {
+        $(this).attr(self.attr_name(), value);
+      });
+      if (!!$(this.scope).attr(self.attr_name())) {
+        $(this.scope).attr(self.attr_name(), value);
+      }
+      self.reflow();
+    },
+
+    reflow : function () {
+      var self = this;
+      self.S('[' + this.attr_name() + ']').each(function () {
+        var handle = $(this).children('.range-slider-handle')[0],
+            val = $(this).attr(self.attr_name());
+        self.initialize_settings(handle);
+
+        if (val) {
+          self.set_ui($(handle), parseFloat(val));
+        } else {
+          self.set_initial_position($(this));
+        }
+      });
+    }
+  };
+
+}(jQuery, window, window.document));
+
+;(function ($, window, document, undefined) {
+  'use strict';
+
+  Foundation.libs.tab = {
+    name : 'tab',
+
+    version : '5.5.3',
+
+    settings : {
+      active_class : 'active',
+      callback : function () {},
+      deep_linking : false,
+      scroll_to_content : true,
+      is_hover : false
+    },
+
+    default_tab_hashes : [],
+
+    init : function (scope, method, options) {
+      var self = this,
+          S = this.S;
+
+         // Store the default active tabs which will be referenced when the
+         // location hash is absent, as in the case of navigating the tabs and
+         // returning to the first viewing via the browser Back button.
+         S('[' + this.attr_name() + '] > .active > a', this.scope).each(function () {
+           self.default_tab_hashes.push(this.hash);
+         });
+
+      this.bindings(method, options);
+      this.handle_location_hash_change();
+    },
+
+    events : function () {
+      var self = this,
+          S = this.S;
+
+      var usual_tab_behavior =  function (e, target) {
+        var settings = S(target).closest('[' + self.attr_name() + ']').data(self.attr_name(true) + '-init');
+        if (!settings.is_hover || Modernizr.touch) {
+          // if user did not pressed tab key, prevent default action
+          var keyCode = e.keyCode || e.which;
+          if (keyCode !== 9) { 
+            e.preventDefault();
+            e.stopPropagation();
+          }
+          self.toggle_active_tab(S(target).parent());
+          
+        }
+      };
+
+      S(this.scope)
+        .off('.tab')
+        // Key event: focus/tab key
+        .on('keydown.fndtn.tab', '[' + this.attr_name() + '] > * > a', function(e) {
+          var keyCode = e.keyCode || e.which;
+          // if user pressed tab key
+          if (keyCode === 13 || keyCode === 32) { // enter or space
+            var el = this;
+            usual_tab_behavior(e, el);
+          } 
+        })
+        // Click event: tab title
+        .on('click.fndtn.tab', '[' + this.attr_name() + '] > * > a', function(e) {
+          var el = this;
+          usual_tab_behavior(e, el);
+        })
+        // Hover event: tab title
+        .on('mouseenter.fndtn.tab', '[' + this.attr_name() + '] > * > a', function (e) {
+          var settings = S(this).closest('[' + self.attr_name() + ']').data(self.attr_name(true) + '-init');
+          if (settings.is_hover) {
+            self.toggle_active_tab(S(this).parent());
+          }
+        });
+
+      // Location hash change event
+      S(window).on('hashchange.fndtn.tab', function (e) {
+        e.preventDefault();
+        self.handle_location_hash_change();
+      });
+    },
+
+    handle_location_hash_change : function () {
+
+      var self = this,
+          S = this.S;
+
+      S('[' + this.attr_name() + ']', this.scope).each(function () {
+        var settings = S(this).data(self.attr_name(true) + '-init');
+        if (settings.deep_linking) {
+          // Match the location hash to a label
+          var hash;
+          if (settings.scroll_to_content) {
+            hash = self.scope.location.hash;
+          } else {
+            // prefix the hash to prevent anchor scrolling
+            hash = self.scope.location.hash.replace('fndtn-', '');
+          }
+          if (hash != '') {
+            // Check whether the location hash references a tab content div or
+            // another element on the page (inside or outside the tab content div)
+            var hash_element = S(hash);
+            if (hash_element.hasClass('content') && hash_element.parent().hasClass('tabs-content')) {
+              // Tab content div
+              self.toggle_active_tab($('[' + self.attr_name() + '] > * > a[href=' + hash + ']').parent());
+            } else {
+              // Not the tab content div. If inside the tab content, find the
+              // containing tab and toggle it as active.
+              var hash_tab_container_id = hash_element.closest('.content').attr('id');
+              if (hash_tab_container_id != undefined) {
+                self.toggle_active_tab($('[' + self.attr_name() + '] > * > a[href=#' + hash_tab_container_id + ']').parent(), hash);
+              }
+            }
+          } else {
+            // Reference the default tab hashes which were initialized in the init function
+            for (var ind = 0; ind < self.default_tab_hashes.length; ind++) {
+              self.toggle_active_tab($('[' + self.attr_name() + '] > * > a[href=' + self.default_tab_hashes[ind] + ']').parent());
+            }
+          }
+        }
+       });
+     },
+
+    toggle_active_tab : function (tab, location_hash) {
+      var self = this,
+          S = self.S,
+          tabs = tab.closest('[' + this.attr_name() + ']'),
+          tab_link = tab.find('a'),
+          anchor = tab.children('a').first(),
+          target_hash = '#' + anchor.attr('href').split('#')[1],
+          target = S(target_hash),
+          siblings = tab.siblings(),
+          settings = tabs.data(this.attr_name(true) + '-init'),
+          interpret_keyup_action = function (e) {
+            // Light modification of Heydon Pickering's Practical ARIA Examples: http://heydonworks.com/practical_aria_examples/js/a11y.js
+
+            // define current, previous and next (possible) tabs
+
+            var $original = $(this);
+            var $prev = $(this).parents('li').prev().children('[role="tab"]');
+            var $next = $(this).parents('li').next().children('[role="tab"]');
+            var $target;
+
+            // find the direction (prev or next)
+
+            switch (e.keyCode) {
+              case 37:
+                $target = $prev;
+                break;
+              case 39:
+                $target = $next;
+                break;
+              default:
+                $target = false
+                  break;
+            }
+
+            if ($target.length) {
+              $original.attr({
+                'tabindex' : '-1',
+                'aria-selected' : null
+              });
+              $target.attr({
+                'tabindex' : '0',
+                'aria-selected' : true
+              }).focus();
+            }
+
+            // Hide panels
+
+            $('[role="tabpanel"]')
+              .attr('aria-hidden', 'true');
+
+            // Show panel which corresponds to target
+
+            $('#' + $(document.activeElement).attr('href').substring(1))
+              .attr('aria-hidden', null);
+
+          },
+          go_to_hash = function(hash) {
+            // This function allows correct behaviour of the browser's back button when deep linking is enabled. Without it
+            // the user would get continually redirected to the default hash.
+            var default_hash = settings.scroll_to_content ? self.default_tab_hashes[0] : 'fndtn-' + self.default_tab_hashes[0].replace('#', '');
+
+            if (hash !== default_hash || window.location.hash) {
+              window.location.hash = hash;
+            }
+          };
+
+      // allow usage of data-tab-content attribute instead of href
+      if (anchor.data('tab-content')) {
+        target_hash = '#' + anchor.data('tab-content').split('#')[1];
+        target = S(target_hash);
+      }
+
+      if (settings.deep_linking) {
+
+        if (settings.scroll_to_content) {
+
+          // retain current hash to scroll to content
+          go_to_hash(location_hash || target_hash);
+
+          if (location_hash == undefined || location_hash == target_hash) {
+            tab.parent()[0].scrollIntoView();
+          } else {
+            S(target_hash)[0].scrollIntoView();
+          }
+        } else {
+          // prefix the hashes so that the browser doesn't scroll down
+          if (location_hash != undefined) {
+            go_to_hash('fndtn-' + location_hash.replace('#', ''));
+          } else {
+            go_to_hash('fndtn-' + target_hash.replace('#', ''));
+          }
+        }
+      }
+
+      // WARNING: The activation and deactivation of the tab content must
+      // occur after the deep linking in order to properly refresh the browser
+      // window (notably in Chrome).
+      // Clean up multiple attr instances to done once
+      tab.addClass(settings.active_class).triggerHandler('opened');
+      tab_link.attr({'aria-selected' : 'true',  tabindex : 0});
+      siblings.removeClass(settings.active_class)
+      siblings.find('a').attr({'aria-selected' : 'false'/*,  tabindex : -1*/});
+      target.siblings().removeClass(settings.active_class).attr({'aria-hidden' : 'true'/*,  tabindex : -1*/});
+      target.addClass(settings.active_class).attr('aria-hidden', 'false').removeAttr('tabindex');
+      settings.callback(tab);
+      target.triggerHandler('toggled', [target]);
+      tabs.triggerHandler('toggled', [tab]);
+
+      tab_link.off('keydown').on('keydown', interpret_keyup_action );
+    },
+
+    data_attr : function (str) {
+      if (this.namespace.length > 0) {
+        return this.namespace + '-' + str;
+      }
+
+      return str;
+    },
+
+    off : function () {},
+
+    reflow : function () {}
+  };
+}(jQuery, window, window.document));
+
+;(function ($, window, document, undefined) {
+  'use strict';
+
+  Foundation.libs.tooltip = {
+    name : 'tooltip',
+
+    version : '5.5.3',
+
+    settings : {
+      additional_inheritable_classes : [],
+      tooltip_class : '.tooltip',
+      append_to : 'body',
+      touch_close_text : 'Tap To Close',
+      disable_for_touch : false,
+      hover_delay : 200,
+      fade_in_duration : 150,
+      fade_out_duration : 150,
+      show_on : 'all',
+      tip_template : function (selector, content) {
+        return '<span data-selector="' + selector + '" id="' + selector + '" class="'
+          + Foundation.libs.tooltip.settings.tooltip_class.substring(1)
+          + '" role="tooltip">' + content + '<span class="nub"></span></span>';
+      }
+    },
+
+    cache : {},
+
+    init : function (scope, method, options) {
+      Foundation.inherit(this, 'random_str');
+      this.bindings(method, options);
+    },
+
+    should_show : function (target, tip) {
+      var settings = $.extend({}, this.settings, this.data_options(target));
+
+      if (settings.show_on === 'all') {
+        return true;
+      } else if (this.small() && settings.show_on === 'small') {
+        return true;
+      } else if (this.medium() && settings.show_on === 'medium') {
+        return true;
+      } else if (this.large() && settings.show_on === 'large') {
+        return true;
+      }
+      return false;
+    },
+
+    medium : function () {
+      return matchMedia(Foundation.media_queries['medium']).matches;
+    },
+
+    large : function () {
+      return matchMedia(Foundation.media_queries['large']).matches;
+    },
+
+    events : function (instance) {
+      var self = this,
+          S = self.S;
+
+      self.create(this.S(instance));
+
+      function _startShow(elt, $this, immediate) {
+        if (elt.timer) {
+          return;
+        }
+
+        if (immediate) {
+          elt.timer = null;
+          self.showTip($this);
+        } else {
+          elt.timer = setTimeout(function () {
+            elt.timer = null;
+            self.showTip($this);
+          }.bind(elt), self.settings.hover_delay);
+        }
+      }
+
+      function _startHide(elt, $this) {
+        if (elt.timer) {
+          clearTimeout(elt.timer);
+          elt.timer = null;
+        }
+
+        self.hide($this);
+      }
+
+      $(this.scope)
+        .off('.tooltip')
+        .on('mouseenter.fndtn.tooltip mouseleave.fndtn.tooltip touchstart.fndtn.tooltip MSPointerDown.fndtn.tooltip',
+          '[' + this.attr_name() + ']', function (e) {
+          var $this = S(this),
+              settings = $.extend({}, self.settings, self.data_options($this)),
+              is_touch = false;
+
+          if (Modernizr.touch && /touchstart|MSPointerDown/i.test(e.type) && S(e.target).is('a')) {
+            return false;
+          }
+
+          if (/mouse/i.test(e.type) && self.ie_touch(e)) {
+            return false;
+          }
+          
+          if ($this.hasClass('open')) {
+            if (Modernizr.touch && /touchstart|MSPointerDown/i.test(e.type)) {
+              e.preventDefault();
+            }
+            self.hide($this);
+          } else {
+            if (settings.disable_for_touch && Modernizr.touch && /touchstart|MSPointerDown/i.test(e.type)) {
+              return;
+            } else if (!settings.disable_for_touch && Modernizr.touch && /touchstart|MSPointerDown/i.test(e.type)) {
+              e.preventDefault();
+              S(settings.tooltip_class + '.open').hide();
+              is_touch = true;
+              // close other open tooltips on touch
+              if ($('.open[' + self.attr_name() + ']').length > 0) {
+               var prevOpen = S($('.open[' + self.attr_name() + ']')[0]);
+               self.hide(prevOpen);
+              }
+            }
+
+            if (/enter|over/i.test(e.type)) {
+              _startShow(this, $this);
+
+            } else if (e.type === 'mouseout' || e.type === 'mouseleave') {
+              _startHide(this, $this);
+            } else {
+              _startShow(this, $this, true);
+            }
+          }
+        })
+        .on('mouseleave.fndtn.tooltip touchstart.fndtn.tooltip MSPointerDown.fndtn.tooltip', '[' + this.attr_name() + '].open', function (e) {
+          if (/mouse/i.test(e.type) && self.ie_touch(e)) {
+            return false;
+          }
+
+          if ($(this).data('tooltip-open-event-type') == 'touch' && e.type == 'mouseleave') {
+            return;
+          } else if ($(this).data('tooltip-open-event-type') == 'mouse' && /MSPointerDown|touchstart/i.test(e.type)) {
+            self.convert_to_touch($(this));
+          } else {
+            _startHide(this, $(this));
+          }
+        })
+        .on('DOMNodeRemoved DOMAttrModified', '[' + this.attr_name() + ']:not(a)', function (e) {
+          _startHide(this, S(this));
+        });
+    },
+
+    ie_touch : function (e) {
+      // How do I distinguish between IE11 and Windows Phone 8?????
+      return false;
+    },
+
+    showTip : function ($target) {
+      var $tip = this.getTip($target);
+      if (this.should_show($target, $tip)) {
+        return this.show($target);
+      }
+      return;
+    },
+
+    getTip : function ($target) {
+      var selector = this.selector($target),
+          settings = $.extend({}, this.settings, this.data_options($target)),
+          tip = null;
+
+      if (selector) {
+        tip = this.S('span[data-selector="' + selector + '"]' + settings.tooltip_class);
+      }
+
+      return (typeof tip === 'object') ? tip : false;
+    },
+
+    selector : function ($target) {
+      var dataSelector = $target.attr(this.attr_name()) || $target.attr('data-selector');
+
+      if (typeof dataSelector != 'string') {
+        dataSelector = this.random_str(6);
+        $target
+          .attr('data-selector', dataSelector)
+          .attr('aria-describedby', dataSelector);
+      }
+
+      return dataSelector;
+    },
+
+    create : function ($target) {
+      var self = this,
+          settings = $.extend({}, this.settings, this.data_options($target)),
+          tip_template = this.settings.tip_template;
+
+      if (typeof settings.tip_template === 'string' && window.hasOwnProperty(settings.tip_template)) {
+        tip_template = window[settings.tip_template];
+      }
+
+      var $tip = $(tip_template(this.selector($target), $('<div></div>').html($target.attr('title')).html())),
+          classes = this.inheritable_classes($target);
+
+      $tip.addClass(classes).appendTo(settings.append_to);
+
+      if (Modernizr.touch) {
+        $tip.append('<span class="tap-to-close">' + settings.touch_close_text + '</span>');
+        $tip.on('touchstart.fndtn.tooltip MSPointerDown.fndtn.tooltip', function (e) {
+          self.hide($target);
+        });
+      }
+
+      $target.removeAttr('title').attr('title', '');
+    },
+
+    reposition : function (target, tip, classes) {
+      var width, nub, nubHeight, nubWidth, objPos;
+
+      tip.css('visibility', 'hidden').show();
+
+      width = target.data('width');
+      nub = tip.children('.nub');
+      nubHeight = nub.outerHeight();
+      nubWidth = nub.outerWidth();
+
+      if (this.small()) {
+        tip.css({'width' : '100%'});
+      } else {
+        tip.css({'width' : (width) ? width : 'auto'});
+      }
+
+      objPos = function (obj, top, right, bottom, left, width) {
+        return obj.css({
+          'top' : (top) ? top : 'auto',
+          'bottom' : (bottom) ? bottom : 'auto',
+          'left' : (left) ? left : 'auto',
+          'right' : (right) ? right : 'auto'
+        }).end();
+      };
+      
+      var o_top = target.offset().top;
+      var o_left = target.offset().left;
+      var outerHeight = target.outerHeight();
+
+      objPos(tip, (o_top + outerHeight + 10), 'auto', 'auto', o_left);
+
+      if (this.small()) {
+        objPos(tip, (o_top + outerHeight + 10), 'auto', 'auto', 12.5, $(this.scope).width());
+        tip.addClass('tip-override');
+        objPos(nub, -nubHeight, 'auto', 'auto', o_left);
+      } else {
+        
+        if (Foundation.rtl) {
+          nub.addClass('rtl');
+          o_left = o_left + target.outerWidth() - tip.outerWidth();
+        }
+
+        objPos(tip, (o_top + outerHeight + 10), 'auto', 'auto', o_left);
+        // reset nub from small styles, if they've been applied
+        if (nub.attr('style')) {
+          nub.removeAttr('style');
+        }
+        
+        tip.removeClass('tip-override');
+        
+        var tip_outerHeight = tip.outerHeight();
+        
+        if (classes && classes.indexOf('tip-top') > -1) {
+          if (Foundation.rtl) {
+            nub.addClass('rtl');
+          }
+          objPos(tip, (o_top - tip_outerHeight), 'auto', 'auto', o_left)
+            .removeClass('tip-override');
+        } else if (classes && classes.indexOf('tip-left') > -1) {
+          objPos(tip, (o_top + (outerHeight / 2) - (tip_outerHeight / 2)), 'auto', 'auto', (o_left - tip.outerWidth() - nubHeight))
+            .removeClass('tip-override');
+          nub.removeClass('rtl');
+        } else if (classes && classes.indexOf('tip-right') > -1) {
+          objPos(tip, (o_top + (outerHeight / 2) - (tip_outerHeight / 2)), 'auto', 'auto', (o_left + target.outerWidth() + nubHeight))
+            .removeClass('tip-override');
+          nub.removeClass('rtl');
+        }
+      }
+
+      tip.css('visibility', 'visible').hide();
+    },
+
+    small : function () {
+      return matchMedia(Foundation.media_queries.small).matches &&
+        !matchMedia(Foundation.media_queries.medium).matches;
+    },
+
+    inheritable_classes : function ($target) {
+      var settings = $.extend({}, this.settings, this.data_options($target)),
+          inheritables = ['tip-top', 'tip-left', 'tip-bottom', 'tip-right', 'radius', 'round'].concat(settings.additional_inheritable_classes),
+          classes = $target.attr('class'),
+          filtered = classes ? $.map(classes.split(' '), function (el, i) {
+            if ($.inArray(el, inheritables) !== -1) {
+              return el;
+            }
+          }).join(' ') : '';
+
+      return $.trim(filtered);
+    },
+
+    convert_to_touch : function ($target) {
+      var self = this,
+          $tip = self.getTip($target),
+          settings = $.extend({}, self.settings, self.data_options($target));
+
+      if ($tip.find('.tap-to-close').length === 0) {
+        $tip.append('<span class="tap-to-close">' + settings.touch_close_text + '</span>');
+        $tip.on('click.fndtn.tooltip.tapclose touchstart.fndtn.tooltip.tapclose MSPointerDown.fndtn.tooltip.tapclose', function (e) {
+          self.hide($target);
+        });
+      }
+
+      $target.data('tooltip-open-event-type', 'touch');
+    },
+
+    show : function ($target) {
+      var $tip = this.getTip($target);
+      if ($target.data('tooltip-open-event-type') == 'touch') {
+        this.convert_to_touch($target);
+      }
+
+      this.reposition($target, $tip, $target.attr('class'));
+      $target.addClass('open');
+      $tip.fadeIn(this.settings.fade_in_duration);
+    },
+
+    hide : function ($target) {
+      var $tip = this.getTip($target);
+
+      $tip.fadeOut(this.settings.fade_out_duration, function () {
+        $tip.find('.tap-to-close').remove();
+        $tip.off('click.fndtn.tooltip.tapclose MSPointerDown.fndtn.tapclose');
+        $target.removeClass('open');
+      });
+    },
+
+    off : function () {
+      var self = this;
+      this.S(this.scope).off('.fndtn.tooltip');
+      this.S(this.settings.tooltip_class).each(function (i) {
+        $('[' + self.attr_name() + ']').eq(i).attr('title', $(this).text());
+      }).remove();
+    },
+
+    reflow : function () {}
+  };
+}(jQuery, window, window.document));
+
+;(function ($, window, document, undefined) {
+  'use strict';
+
+  Foundation.libs.topbar = {
+    name : 'topbar',
+
+    version : '5.5.3',
+
+    settings : {
+      index : 0,
+      start_offset : 0,
+      sticky_class : 'sticky',
+      custom_back_text : true,
+      back_text : 'Back',
+      mobile_show_parent_link : true,
+      is_hover : true,
+      scrolltop : true, // jump to top when sticky nav menu toggle is clicked
+      sticky_on : 'all',
+      dropdown_autoclose: true
+    },
+
+    init : function (section, method, options) {
+      Foundation.inherit(this, 'add_custom_rule register_media throttle');
+      var self = this;
+
+      self.register_media('topbar', 'foundation-mq-topbar');
+
+      this.bindings(method, options);
+
+      self.S('[' + this.attr_name() + ']', this.scope).each(function () {
+        var topbar = $(this),
+            settings = topbar.data(self.attr_name(true) + '-init'),
+            section = self.S('section, .top-bar-section', this);
+        topbar.data('index', 0);
+        var topbarContainer = topbar.parent();
+        if (topbarContainer.hasClass('fixed') || self.is_sticky(topbar, topbarContainer, settings) ) {
+          self.settings.sticky_class = settings.sticky_class;
+          self.settings.sticky_topbar = topbar;
+          topbar.data('height', topbarContainer.outerHeight());
+          topbar.data('stickyoffset', topbarContainer.offset().top);
+        } else {
+          topbar.data('height', topbar.outerHeight());
+        }
+
+        if (!settings.assembled) {
+          self.assemble(topbar);
+        }
+
+        if (settings.is_hover) {
+          self.S('.has-dropdown', topbar).addClass('not-click');
+        } else {
+          self.S('.has-dropdown', topbar).removeClass('not-click');
+        }
+
+        // Pad body when sticky (scrolled) or fixed.
+        self.add_custom_rule('.f-topbar-fixed { padding-top: ' + topbar.data('height') + 'px }');
+
+        if (topbarContainer.hasClass('fixed')) {
+          self.S('body').addClass('f-topbar-fixed');
+        }
+      });
+
+    },
+
+    is_sticky : function (topbar, topbarContainer, settings) {
+      var sticky     = topbarContainer.hasClass(settings.sticky_class);
+      var smallMatch = matchMedia(Foundation.media_queries.small).matches;
+      var medMatch   = matchMedia(Foundation.media_queries.medium).matches;
+      var lrgMatch   = matchMedia(Foundation.media_queries.large).matches;
+
+      if (sticky && settings.sticky_on === 'all') {
+        return true;
+      }
+      if (sticky && this.small() && settings.sticky_on.indexOf('small') !== -1) {
+        if (smallMatch && !medMatch && !lrgMatch) { return true; }
+      }
+      if (sticky && this.medium() && settings.sticky_on.indexOf('medium') !== -1) {
+        if (smallMatch && medMatch && !lrgMatch) { return true; }
+      }
+      if (sticky && this.large() && settings.sticky_on.indexOf('large') !== -1) {
+        if (smallMatch && medMatch && lrgMatch) { return true; }
+      }
+
+       return false;
+    },
+
+    toggle : function (toggleEl) {
+      var self = this,
+          topbar;
+
+      if (toggleEl) {
+        topbar = self.S(toggleEl).closest('[' + this.attr_name() + ']');
+      } else {
+        topbar = self.S('[' + this.attr_name() + ']');
+      }
+
+      var settings = topbar.data(this.attr_name(true) + '-init');
+
+      var section = self.S('section, .top-bar-section', topbar);
+
+      if (self.breakpoint()) {
+        if (!self.rtl) {
+          section.css({left : '0%'});
+          $('>.name', section).css({left : '100%'});
+        } else {
+          section.css({right : '0%'});
+          $('>.name', section).css({right : '100%'});
+        }
+
+        self.S('li.moved', section).removeClass('moved');
+        topbar.data('index', 0);
+
+        topbar
+          .toggleClass('expanded')
+          .css('height', '');
+      }
+
+      if (settings.scrolltop) {
+        if (!topbar.hasClass('expanded')) {
+          if (topbar.hasClass('fixed')) {
+            topbar.parent().addClass('fixed');
+            topbar.removeClass('fixed');
+            self.S('body').addClass('f-topbar-fixed');
+          }
+        } else if (topbar.parent().hasClass('fixed')) {
+          if (settings.scrolltop) {
+            topbar.parent().removeClass('fixed');
+            topbar.addClass('fixed');
+            self.S('body').removeClass('f-topbar-fixed');
+
+            window.scrollTo(0, 0);
+          } else {
+            topbar.parent().removeClass('expanded');
+          }
+        }
+      } else {
+        if (self.is_sticky(topbar, topbar.parent(), settings)) {
+          topbar.parent().addClass('fixed');
+        }
+
+        if (topbar.parent().hasClass('fixed')) {
+          if (!topbar.hasClass('expanded')) {
+            topbar.removeClass('fixed');
+            topbar.parent().removeClass('expanded');
+            self.update_sticky_positioning();
+          } else {
+            topbar.addClass('fixed');
+            topbar.parent().addClass('expanded');
+            self.S('body').addClass('f-topbar-fixed');
+          }
+        }
+      }
+    },
+
+    timer : null,
+
+    events : function (bar) {
+      var self = this,
+          S = this.S;
+
+      S(this.scope)
+        .off('.topbar')
+        .on('click.fndtn.topbar', '[' + this.attr_name() + '] .toggle-topbar', function (e) {
+          e.preventDefault();
+          self.toggle(this);
+        })
+        .on('click.fndtn.topbar contextmenu.fndtn.topbar', '.top-bar .top-bar-section li a[href^="#"],[' + this.attr_name() + '] .top-bar-section li a[href^="#"]', function (e) {
+          var li = $(this).closest('li'),
+              topbar = li.closest('[' + self.attr_name() + ']'),
+              settings = topbar.data(self.attr_name(true) + '-init');
+
+          if (settings.dropdown_autoclose && settings.is_hover) {
+            var hoverLi = $(this).closest('.hover');
+            hoverLi.removeClass('hover');
+          }
+          if (self.breakpoint() && !li.hasClass('back') && !li.hasClass('has-dropdown')) {
+            self.toggle();
+          }
+
+        })
+        .on('click.fndtn.topbar', '[' + this.attr_name() + '] li.has-dropdown', function (e) {
+          var li = S(this),
+              target = S(e.target),
+              topbar = li.closest('[' + self.attr_name() + ']'),
+              settings = topbar.data(self.attr_name(true) + '-init');
+
+          if (target.data('revealId')) {
+            self.toggle();
+            return;
+          }
+
+          if (self.breakpoint()) {
+            return;
+          }
+
+          if (settings.is_hover && !Modernizr.touch) {
+            return;
+          }
+
+          e.stopImmediatePropagation();
+
+          if (li.hasClass('hover')) {
+            li
+              .removeClass('hover')
+              .find('li')
+              .removeClass('hover');
+
+            li.parents('li.hover')
+              .removeClass('hover');
+          } else {
+            li.addClass('hover');
+
+            $(li).siblings().removeClass('hover');
+
+            if (target[0].nodeName === 'A' && target.parent().hasClass('has-dropdown')) {
+              e.preventDefault();
+            }
+          }
+        })
+        .on('click.fndtn.topbar', '[' + this.attr_name() + '] .has-dropdown>a', function (e) {
+          if (self.breakpoint()) {
+
+            e.preventDefault();
+
+            var $this = S(this),
+                topbar = $this.closest('[' + self.attr_name() + ']'),
+                section = topbar.find('section, .top-bar-section'),
+                dropdownHeight = $this.next('.dropdown').outerHeight(),
+                $selectedLi = $this.closest('li');
+
+            topbar.data('index', topbar.data('index') + 1);
+            $selectedLi.addClass('moved');
+
+            if (!self.rtl) {
+              section.css({left : -(100 * topbar.data('index')) + '%'});
+              section.find('>.name').css({left : 100 * topbar.data('index') + '%'});
+            } else {
+              section.css({right : -(100 * topbar.data('index')) + '%'});
+              section.find('>.name').css({right : 100 * topbar.data('index') + '%'});
+            }
+
+            topbar.css('height', $this.siblings('ul').outerHeight(true) + topbar.data('height'));
+          }
+        });
+
+      S(window).off('.topbar').on('resize.fndtn.topbar', self.throttle(function () {
+          self.resize.call(self);
+      }, 50)).trigger('resize.fndtn.topbar').load(function () {
+          // Ensure that the offset is calculated after all of the pages resources have loaded
+          S(this).trigger('resize.fndtn.topbar');
+      });
+
+      S('body').off('.topbar').on('click.fndtn.topbar', function (e) {
+        var parent = S(e.target).closest('li').closest('li.hover');
+
+        if (parent.length > 0) {
+          return;
+        }
+
+        S('[' + self.attr_name() + '] li.hover').removeClass('hover');
+      });
+
+      // Go up a level on Click
+      S(this.scope).on('click.fndtn.topbar', '[' + this.attr_name() + '] .has-dropdown .back', function (e) {
+        e.preventDefault();
+
+        var $this = S(this),
+            topbar = $this.closest('[' + self.attr_name() + ']'),
+            section = topbar.find('section, .top-bar-section'),
+            settings = topbar.data(self.attr_name(true) + '-init'),
+            $movedLi = $this.closest('li.moved'),
+            $previousLevelUl = $movedLi.parent();
+
+        topbar.data('index', topbar.data('index') - 1);
+
+        if (!self.rtl) {
+          section.css({left : -(100 * topbar.data('index')) + '%'});
+          section.find('>.name').css({left : 100 * topbar.data('index') + '%'});
+        } else {
+          section.css({right : -(100 * topbar.data('index')) + '%'});
+          section.find('>.name').css({right : 100 * topbar.data('index') + '%'});
+        }
+
+        if (topbar.data('index') === 0) {
+          topbar.css('height', '');
+        } else {
+          topbar.css('height', $previousLevelUl.outerHeight(true) + topbar.data('height'));
+        }
+
+        setTimeout(function () {
+          $movedLi.removeClass('moved');
+        }, 300);
+      });
+
+      // Show dropdown menus when their items are focused
+      S(this.scope).find('.dropdown a')
+        .focus(function () {
+          $(this).parents('.has-dropdown').addClass('hover');
+        })
+        .blur(function () {
+          $(this).parents('.has-dropdown').removeClass('hover');
+        });
+    },
+
+    resize : function () {
+      var self = this;
+      self.S('[' + this.attr_name() + ']').each(function () {
+        var topbar = self.S(this),
+            settings = topbar.data(self.attr_name(true) + '-init');
+
+        var stickyContainer = topbar.parent('.' + self.settings.sticky_class);
+        var stickyOffset;
+
+        if (!self.breakpoint()) {
+          var doToggle = topbar.hasClass('expanded');
+          topbar
+            .css('height', '')
+            .removeClass('expanded')
+            .find('li')
+            .removeClass('hover');
+
+            if (doToggle) {
+              self.toggle(topbar);
+            }
+        }
+
+        if (self.is_sticky(topbar, stickyContainer, settings)) {
+          if (stickyContainer.hasClass('fixed')) {
+            // Remove the fixed to allow for correct calculation of the offset.
+            stickyContainer.removeClass('fixed');
+
+            stickyOffset = stickyContainer.offset().top;
+            if (self.S(document.body).hasClass('f-topbar-fixed')) {
+              stickyOffset -= topbar.data('height');
+            }
+
+            topbar.data('stickyoffset', stickyOffset);
+            stickyContainer.addClass('fixed');
+          } else {
+            stickyOffset = stickyContainer.offset().top;
+            topbar.data('stickyoffset', stickyOffset);
+          }
+        }
+
+      });
+    },
+
+    breakpoint : function () {
+      return !matchMedia(Foundation.media_queries['topbar']).matches;
+    },
+
+    small : function () {
+      return matchMedia(Foundation.media_queries['small']).matches;
+    },
+
+    medium : function () {
+      return matchMedia(Foundation.media_queries['medium']).matches;
+    },
+
+    large : function () {
+      return matchMedia(Foundation.media_queries['large']).matches;
+    },
+
+    assemble : function (topbar) {
+      var self = this,
+          settings = topbar.data(this.attr_name(true) + '-init'),
+          section = self.S('section, .top-bar-section', topbar);
+
+      // Pull element out of the DOM for manipulation
+      section.detach();
+
+      self.S('.has-dropdown>a', section).each(function () {
+        var $link = self.S(this),
+            $dropdown = $link.siblings('.dropdown'),
+            url = $link.attr('href'),
+            $titleLi;
+
+        if (!$dropdown.find('.title.back').length) {
+
+          if (settings.mobile_show_parent_link == true && url) {
+            $titleLi = $('<li class="title back js-generated"><h5><a href="javascript:void(0)"></a></h5></li><li class="parent-link hide-for-medium-up"><a class="parent-link js-generated" href="' + url + '">' + $link.html() +'</a></li>');
+          } else {
+            $titleLi = $('<li class="title back js-generated"><h5><a href="javascript:void(0)"></a></h5>');
+          }
+
+          // Copy link to subnav
+          if (settings.custom_back_text == true) {
+            $('h5>a', $titleLi).html(settings.back_text);
+          } else {
+            $('h5>a', $titleLi).html('&laquo; ' + $link.html());
+          }
+          $dropdown.prepend($titleLi);
+        }
+      });
+
+      // Put element back in the DOM
+      section.appendTo(topbar);
+
+      // check for sticky
+      this.sticky();
+
+      this.assembled(topbar);
+    },
+
+    assembled : function (topbar) {
+      topbar.data(this.attr_name(true), $.extend({}, topbar.data(this.attr_name(true)), {assembled : true}));
+    },
+
+    height : function (ul) {
+      var total = 0,
+          self = this;
+
+      $('> li', ul).each(function () {
+        total += self.S(this).outerHeight(true);
+      });
+
+      return total;
+    },
+
+    sticky : function () {
+      var self = this;
+
+      this.S(window).on('scroll', function () {
+        self.update_sticky_positioning();
+      });
+    },
+
+    update_sticky_positioning : function () {
+      var klass = '.' + this.settings.sticky_class,
+          $window = this.S(window),
+          self = this;
+
+      if (self.settings.sticky_topbar && self.is_sticky(this.settings.sticky_topbar,this.settings.sticky_topbar.parent(), this.settings)) {
+        var distance = this.settings.sticky_topbar.data('stickyoffset') + this.settings.start_offset;
+        if (!self.S(klass).hasClass('expanded')) {
+          if ($window.scrollTop() > (distance)) {
+            if (!self.S(klass).hasClass('fixed')) {
+              self.S(klass).addClass('fixed');
+              self.S('body').addClass('f-topbar-fixed');
+            }
+          } else if ($window.scrollTop() <= distance) {
+            if (self.S(klass).hasClass('fixed')) {
+              self.S(klass).removeClass('fixed');
+              self.S('body').removeClass('f-topbar-fixed');
+            }
+          }
+        }
+      }
+    },
+
+    off : function () {
+      this.S(this.scope).off('.fndtn.topbar');
+      this.S(window).off('.fndtn.topbar');
+    },
+
+    reflow : function () {}
+  };
+}(jQuery, window, window.document));
diff --git a/js/foundation/js/foundation.min.js b/js/foundation/js/foundation.min.js
new file mode 100644 (file)
index 0000000..558dcfa
--- /dev/null
@@ -0,0 +1,5 @@
+!function(a,b,c,d){"use strict";function e(a){return("string"==typeof a||a instanceof String)&&(a=a.replace(/^['\\/"]+|(;\s?})+|['\\/"]+$/g,"")),a}function f(a){this.selector=a,this.query=""}var g=function(b){var c=a("head");c.prepend(a.map(b,function(a){return 0===c.has("."+a).length?'<meta class="'+a+'" />':void 0}))};g(["foundation-mq-small","foundation-mq-small-only","foundation-mq-medium","foundation-mq-medium-only","foundation-mq-large","foundation-mq-large-only","foundation-mq-xlarge","foundation-mq-xlarge-only","foundation-mq-xxlarge","foundation-data-attribute-namespace"]),a(function(){"undefined"!=typeof FastClick&&"undefined"!=typeof c.body&&FastClick.attach(c.body)});var h=function(b,d){if("string"==typeof b){if(d){var e;if(d.jquery){if(e=d[0],!e)return d}else e=d;return a(e.querySelectorAll(b))}return a(c.querySelectorAll(b))}return a(b,d)},i=function(a){var b=[];return a||b.push("data"),this.namespace.length>0&&b.push(this.namespace),b.push(this.name),b.join("-")},j=function(a){for(var b=a.split("-"),c=b.length,d=[];c--;)0!==c?d.push(b[c]):this.namespace.length>0?d.push(this.namespace,b[c]):d.push(b[c]);return d.reverse().join("-")},k=function(b,c){var d=this,e=function(){var e=h(this),f=!e.data(d.attr_name(!0)+"-init");e.data(d.attr_name(!0)+"-init",a.extend({},d.settings,c||b,d.data_options(e))),f&&d.events(this)};return h(this.scope).is("["+this.attr_name()+"]")?e.call(this.scope):h("["+this.attr_name()+"]",this.scope).each(e),"string"==typeof b?this[b].call(this,c):void 0},l=function(a,b){function c(){b(a[0])}function d(){if(this.one("load",c),/MSIE (\d+\.\d+);/.test(navigator.userAgent)){var a=this.attr("src"),b=a.match(/\?/)?"&":"?";b+="random="+(new Date).getTime(),this.attr("src",a+b)}}return a.attr("src")?void(a[0].complete||4===a[0].readyState?c():d.call(a)):void c()};/*! matchMedia() polyfill - Test a CSS media type/query in JS. Authors & copyright (c) 2012: Scott Jehl, Paul Irish, Nicholas Zakas, David Knight. Dual MIT/BSD license */
+b.matchMedia||(b.matchMedia=function(){var a=b.styleMedia||b.media;if(!a){var d=c.createElement("style"),e=c.getElementsByTagName("script")[0],f=null;d.type="text/css",d.id="matchmediajs-test",e.parentNode.insertBefore(d,e),f="getComputedStyle"in b&&b.getComputedStyle(d,null)||d.currentStyle,a={matchMedium:function(a){var b="@media "+a+"{ #matchmediajs-test { width: 1px; } }";return d.styleSheet?d.styleSheet.cssText=b:d.textContent=b,"1px"===f.width}}}return function(b){return{matches:a.matchMedium(b||"all"),media:b||"all"}}}()),function(a){function c(){d&&(g(c),i&&a.fx.tick())}for(var d,e=0,f=["webkit","moz"],g=b.requestAnimationFrame,h=b.cancelAnimationFrame,i="undefined"!=typeof a.fx;e<f.length&&!g;e++)g=b[f[e]+"RequestAnimationFrame"],h=h||b[f[e]+"CancelAnimationFrame"]||b[f[e]+"CancelRequestAnimationFrame"];g?(b.requestAnimationFrame=g,b.cancelAnimationFrame=h,i&&(a.fx.timer=function(b){b()&&a.timers.push(b)&&!d&&(d=!0,c())},a.fx.stop=function(){d=!1})):(b.requestAnimationFrame=function(a){var c=(new Date).getTime(),d=Math.max(0,16-(c-e)),f=b.setTimeout(function(){a(c+d)},d);return e=c+d,f},b.cancelAnimationFrame=function(a){clearTimeout(a)})}(a),f.prototype.toString=function(){return this.query||(this.query=h(this.selector).css("font-family").replace(/^[\/\\'"]+|(;\s?})+|[\/\\'"]+$/g,""))},b.Foundation={name:"Foundation",version:"5.5.3",media_queries:{small:new f(".foundation-mq-small"),"small-only":new f(".foundation-mq-small-only"),medium:new f(".foundation-mq-medium"),"medium-only":new f(".foundation-mq-medium-only"),large:new f(".foundation-mq-large"),"large-only":new f(".foundation-mq-large-only"),xlarge:new f(".foundation-mq-xlarge"),"xlarge-only":new f(".foundation-mq-xlarge-only"),xxlarge:new f(".foundation-mq-xxlarge")},stylesheet:a("<style></style>").appendTo("head")[0].sheet,global:{namespace:d},init:function(a,c,d,e,f){var g=[a,d,e,f],i=[];if(this.rtl=/rtl/i.test(h("html").attr("dir")),this.scope=a||this.scope,this.set_namespace(),c&&"string"==typeof c&&!/reflow/i.test(c))this.libs.hasOwnProperty(c)&&i.push(this.init_lib(c,g));else for(var j in this.libs)i.push(this.init_lib(j,c));return h(b).load(function(){h(b).trigger("resize.fndtn.clearing").trigger("resize.fndtn.dropdown").trigger("resize.fndtn.equalizer").trigger("resize.fndtn.interchange").trigger("resize.fndtn.joyride").trigger("resize.fndtn.magellan").trigger("resize.fndtn.topbar").trigger("resize.fndtn.slider")}),a},init_lib:function(b,c){return this.libs.hasOwnProperty(b)?(this.patch(this.libs[b]),c&&c.hasOwnProperty(b)?("undefined"!=typeof this.libs[b].settings?a.extend(!0,this.libs[b].settings,c[b]):"undefined"!=typeof this.libs[b].defaults&&a.extend(!0,this.libs[b].defaults,c[b]),this.libs[b].init.apply(this.libs[b],[this.scope,c[b]])):(c=c instanceof Array?c:new Array(c),this.libs[b].init.apply(this.libs[b],c))):function(){}},patch:function(a){a.scope=this.scope,a.namespace=this.global.namespace,a.rtl=this.rtl,a.data_options=this.utils.data_options,a.attr_name=i,a.add_namespace=j,a.bindings=k,a.S=this.utils.S},inherit:function(a,b){for(var c=b.split(" "),d=c.length;d--;)this.utils.hasOwnProperty(c[d])&&(a[c[d]]=this.utils[c[d]])},set_namespace:function(){var b=this.global.namespace===d?a(".foundation-data-attribute-namespace").css("font-family"):this.global.namespace;this.global.namespace=b===d||/false/i.test(b)?"":b},libs:{},utils:{S:h,throttle:function(a,b){var c=null;return function(){var d=this,e=arguments;null==c&&(c=setTimeout(function(){a.apply(d,e),c=null},b))}},debounce:function(a,b,c){var d,e;return function(){var f=this,g=arguments,h=function(){d=null,c||(e=a.apply(f,g))},i=c&&!d;return clearTimeout(d),d=setTimeout(h,b),i&&(e=a.apply(f,g)),e}},data_options:function(b,c){function d(a){return!isNaN(a-0)&&null!==a&&""!==a&&a!==!1&&a!==!0}function e(b){return"string"==typeof b?a.trim(b):b}c=c||"options";var f,g,h,i={},j=function(a){var b=Foundation.global.namespace;return b.length>0?a.data(b+"-"+c):a.data(c)},k=j(b);if("object"==typeof k)return k;for(h=(k||":").split(";"),f=h.length;f--;)g=h[f].split(":"),g=[g[0],g.slice(1).join(":")],/true/i.test(g[1])&&(g[1]=!0),/false/i.test(g[1])&&(g[1]=!1),d(g[1])&&(-1===g[1].indexOf(".")?g[1]=parseInt(g[1],10):g[1]=parseFloat(g[1])),2===g.length&&g[0].length>0&&(i[e(g[0])]=e(g[1]));return i},register_media:function(b,c){Foundation.media_queries[b]===d&&(a("head").append('<meta class="'+c+'"/>'),Foundation.media_queries[b]=e(a("."+c).css("font-family")))},add_custom_rule:function(a,b){if(b===d&&Foundation.stylesheet)Foundation.stylesheet.insertRule(a,Foundation.stylesheet.cssRules.length);else{var c=Foundation.media_queries[b];c!==d&&Foundation.stylesheet.insertRule("@media "+Foundation.media_queries[b]+"{ "+a+" }",Foundation.stylesheet.cssRules.length)}},image_loaded:function(a,b){function c(a){for(var b=a.length,c=b-1;c>=0;c--)if(a.attr("height")===d)return!1;return!0}var e=this,f=a.length;(0===f||c(a))&&b(a),a.each(function(){l(e.S(this),function(){f-=1,0===f&&b(a)})})},random_str:function(){return this.fidx||(this.fidx=0),this.prefix=this.prefix||[this.name||"F",(+new Date).toString(36)].join("-"),this.prefix+(this.fidx++).toString(36)},match:function(a){return b.matchMedia(a).matches},is_small_up:function(){return this.match(Foundation.media_queries.small)},is_medium_up:function(){return this.match(Foundation.media_queries.medium)},is_large_up:function(){return this.match(Foundation.media_queries.large)},is_xlarge_up:function(){return this.match(Foundation.media_queries.xlarge)},is_xxlarge_up:function(){return this.match(Foundation.media_queries.xxlarge)},is_small_only:function(){return!(this.is_medium_up()||this.is_large_up()||this.is_xlarge_up()||this.is_xxlarge_up())},is_medium_only:function(){return this.is_medium_up()&&!this.is_large_up()&&!this.is_xlarge_up()&&!this.is_xxlarge_up()},is_large_only:function(){return this.is_medium_up()&&this.is_large_up()&&!this.is_xlarge_up()&&!this.is_xxlarge_up()},is_xlarge_only:function(){return this.is_medium_up()&&this.is_large_up()&&this.is_xlarge_up()&&!this.is_xxlarge_up()},is_xxlarge_only:function(){return this.is_medium_up()&&this.is_large_up()&&this.is_xlarge_up()&&this.is_xxlarge_up()}}},a.fn.foundation=function(){var a=Array.prototype.slice.call(arguments,0);return this.each(function(){return Foundation.init.apply(Foundation,[this].concat(a)),this})}}(jQuery,window,window.document),function(a,b,c,d){"use strict";Foundation.libs.abide={name:"abide",version:"5.5.3",settings:{live_validate:!0,validate_on_blur:!0,focus_on_invalid:!0,error_labels:!0,error_class:"error",timeout:1e3,patterns:{alpha:/^[a-zA-Z]+$/,alpha_numeric:/^[a-zA-Z0-9]+$/,integer:/^[-+]?\d+$/,number:/^[-+]?\d*(?:[\.\,]\d+)?$/,card:/^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|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})$/,cvv:/^([0-9]){3,4}$/,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])?)+$/,url:/^(https?|ftp|file|ssh):\/\/([-;:&=\+\$,\w]+@{1})?([-A-Za-z0-9\.]+)+:?(\d+)?((\/[-\+~%\/\.\w]+)?\??([-\+=&;%@\.\w]+)?#?([\w]+)?)?/,domain:/^([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,8}$/,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))$/,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))$/,time:/^(0[0-9]|1[0-9]|2[0-3])(:[0-5][0-9]){2}$/,dateISO:/^\d{4}[\/\-]\d{1,2}[\/\-]\d{1,2}$/,month_day_year:/^(0[1-9]|1[012])[- \/.](0[1-9]|[12][0-9]|3[01])[- \/.]\d{4}$/,day_month_year:/^(0[1-9]|[12][0-9]|3[01])[- \/.](0[1-9]|1[012])[- \/.]\d{4}$/,color:/^#?([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$/},validators:{equalTo:function(a,b,d){var e=c.getElementById(a.getAttribute(this.add_namespace("data-equalto"))).value,f=a.value,g=e===f;return g}}},timer:null,init:function(a,b,c){this.bindings(b,c)},events:function(b){function c(a,b){clearTimeout(d.timer),d.timer=setTimeout(function(){d.validate([a],b)}.bind(a),f.timeout)}var d=this,e=d.S(b).attr("novalidate","novalidate"),f=e.data(this.attr_name(!0)+"-init")||{};this.invalid_attr=this.add_namespace("data-invalid"),e.off(".abide").on("submit.fndtn.abide",function(a){var b=/ajax/i.test(d.S(this).attr(d.attr_name()));return d.validate(d.S(this).find("input, textarea, select").not(":hidden, [data-abide-ignore]").get(),a,b)}).on("validate.fndtn.abide",function(a){"manual"===f.validate_on&&d.validate([a.target],a)}).on("reset",function(b){return d.reset(a(this),b)}).find("input, textarea, select").not(":hidden, [data-abide-ignore]").off(".abide").on("blur.fndtn.abide change.fndtn.abide",function(a){var b=this.getAttribute("id"),d=e.find('[data-equalto="'+b+'"]');f.validate_on_blur&&f.validate_on_blur===!0&&c(this,a),"undefined"!=typeof d.get(0)&&d.val().length&&c(d.get(0),a),"change"===f.validate_on&&c(this,a)}).on("keydown.fndtn.abide",function(a){var b=this.getAttribute("id"),d=e.find('[data-equalto="'+b+'"]');f.live_validate&&f.live_validate===!0&&9!=a.which&&c(this,a),"undefined"!=typeof d.get(0)&&d.val().length&&c(d.get(0),a),"tab"===f.validate_on&&9===a.which?c(this,a):"change"===f.validate_on&&c(this,a)}).on("focus",function(b){navigator.userAgent.match(/iPad|iPhone|Android|BlackBerry|Windows Phone|webOS/i)&&a("html, body").animate({scrollTop:a(b.target).offset().top},100)})},reset:function(b,c){var d=this;b.removeAttr(d.invalid_attr),a("["+d.invalid_attr+"]",b).removeAttr(d.invalid_attr),a("."+d.settings.error_class,b).not("small").removeClass(d.settings.error_class),a(":input",b).not(":button, :submit, :reset, :hidden, [data-abide-ignore]").val("").removeAttr(d.invalid_attr)},validate:function(a,b,c){for(var d=this.parse_patterns(a),e=d.length,f=this.S(a[0]).closest("form"),g=/submit/.test(b.type),h=0;e>h;h++)if(!d[h]&&(g||c))return this.settings.focus_on_invalid&&a[h].focus(),f.trigger("invalid.fndtn.abide"),this.S(a[h]).closest("form").attr(this.invalid_attr,""),!1;return(g||c)&&f.trigger("valid.fndtn.abide"),f.removeAttr(this.invalid_attr),c?!1:!0},parse_patterns:function(a){for(var b=a.length,c=[];b--;)c.push(this.pattern(a[b]));return this.check_validation_and_apply_styles(c)},pattern:function(a){var b=a.getAttribute("type"),c="string"==typeof a.getAttribute("required"),d=a.getAttribute("pattern")||"";return this.settings.patterns.hasOwnProperty(d)&&d.length>0?[a,this.settings.patterns[d],c]:d.length>0?[a,new RegExp(d),c]:this.settings.patterns.hasOwnProperty(b)?[a,this.settings.patterns[b],c]:(d=/.*/,[a,d,c])},check_validation_and_apply_styles:function(b){var c=b.length,d=[];if(0==c)return d;var e=this.S(b[0][0]).closest("[data-"+this.attr_name(!0)+"]");for(e.data(this.attr_name(!0)+"-init")||{};c--;){var f,g,h=b[c][0],i=b[c][2],j=h.value.trim(),k=this.S(h).parent(),l=h.getAttribute(this.add_namespace("data-abide-validator")),m="radio"===h.type,n="checkbox"===h.type,o=this.S('label[for="'+h.getAttribute("id")+'"]'),p=i?h.value.length>0:!0,q=[];if(h.getAttribute(this.add_namespace("data-equalto"))&&(l="equalTo"),f=k.is("label")?k.parent():k,m&&i)q.push(this.valid_radio(h,i));else if(n&&i)q.push(this.valid_checkbox(h,i));else if(l){for(var r=l.split(" "),s=!0,t=!0,u=0;u<r.length;u++)g=this.settings.validators[r[u]].apply(this,[h,i,f]),q.push(g),t=g&&s,s=g;t?(this.S(h).removeAttr(this.invalid_attr),f.removeClass("error"),o.length>0&&this.settings.error_labels&&o.removeClass(this.settings.error_class).removeAttr("role"),a(h).triggerHandler("valid")):(this.S(h).attr(this.invalid_attr,""),f.addClass("error"),o.length>0&&this.settings.error_labels&&o.addClass(this.settings.error_class).attr("role","alert"),a(h).triggerHandler("invalid"))}else if(b[c][1].test(j)&&p||!i&&h.value.length<1||a(h).attr("disabled")?q.push(!0):q.push(!1),q=[q.every(function(a){return a})],q[0])this.S(h).removeAttr(this.invalid_attr),h.setAttribute("aria-invalid","false"),h.removeAttribute("aria-describedby"),f.removeClass(this.settings.error_class),o.length>0&&this.settings.error_labels&&o.removeClass(this.settings.error_class).removeAttr("role"),a(h).triggerHandler("valid");else{this.S(h).attr(this.invalid_attr,""),h.setAttribute("aria-invalid","true");var v=f.find("small."+this.settings.error_class,"span."+this.settings.error_class),w=v.length>0?v[0].id:"";w.length>0&&h.setAttribute("aria-describedby",w),f.addClass(this.settings.error_class),o.length>0&&this.settings.error_labels&&o.addClass(this.settings.error_class).attr("role","alert"),a(h).triggerHandler("invalid")}d=d.concat(q)}return d},valid_checkbox:function(b,c){var b=this.S(b),d=b.is(":checked")||!c||b.get(0).getAttribute("disabled");return d?(b.removeAttr(this.invalid_attr).parent().removeClass(this.settings.error_class),a(b).triggerHandler("valid")):(b.attr(this.invalid_attr,"").parent().addClass(this.settings.error_class),a(b).triggerHandler("invalid")),d},valid_radio:function(b,c){for(var d=b.getAttribute("name"),e=this.S(b).closest("[data-"+this.attr_name(!0)+"]").find("[name='"+d+"']"),f=e.length,g=!1,h=!1,i=0;f>i;i++)e[i].getAttribute("disabled")?(h=!0,g=!0):e[i].checked?g=!0:h&&(g=!1);for(var i=0;f>i;i++)g?(this.S(e[i]).removeAttr(this.invalid_attr).parent().removeClass(this.settings.error_class),a(e[i]).triggerHandler("valid")):(this.S(e[i]).attr(this.invalid_attr,"").parent().addClass(this.settings.error_class),a(e[i]).triggerHandler("invalid"));return g},valid_equal:function(a,b,d){var e=c.getElementById(a.getAttribute(this.add_namespace("data-equalto"))).value,f=a.value,g=e===f;return g?(this.S(a).removeAttr(this.invalid_attr),d.removeClass(this.settings.error_class),label.length>0&&settings.error_labels&&label.removeClass(this.settings.error_class)):(this.S(a).attr(this.invalid_attr,""),d.addClass(this.settings.error_class),label.length>0&&settings.error_labels&&label.addClass(this.settings.error_class)),g},valid_oneof:function(a,b,c,d){var a=this.S(a),e=this.S("["+this.add_namespace("data-oneof")+"]"),f=e.filter(":checked").length>0;if(f?a.removeAttr(this.invalid_attr).parent().removeClass(this.settings.error_class):a.attr(this.invalid_attr,"").parent().addClass(this.settings.error_class),!d){var g=this;e.each(function(){g.valid_oneof.call(g,this,null,null,!0)})}return f},reflow:function(a,b){var c=this,d=c.S("["+this.attr_name()+"]").attr("novalidate","novalidate");c.S(d).each(function(a,b){c.events(b)})}}}(jQuery,window,window.document),function(a,b,c,d){"use strict";Foundation.libs.accordion={name:"accordion",version:"5.5.3",settings:{content_class:"content",active_class:"active",multi_expand:!1,toggleable:!0,callback:function(){}},init:function(a,b,c){this.bindings(b,c)},events:function(b){var c=this,d=this.S;c.create(this.S(b)),d(this.scope).off(".fndtn.accordion").on("click.fndtn.accordion","["+this.attr_name()+"] > dd > a, ["+this.attr_name()+"] > li > a",function(b){var e=d(this).closest("["+c.attr_name()+"]"),f=c.attr_name()+"="+e.attr(c.attr_name()),g=e.data(c.attr_name(!0)+"-init")||c.settings,h=d("#"+this.href.split("#")[1]),i=a("> dd, > li",e),j=i.children("."+g.content_class),k=j.filter("."+g.active_class);return b.preventDefault(),e.attr(c.attr_name())&&(j=j.add("["+f+"] dd > ."+g.content_class+", ["+f+"] li > ."+g.content_class),i=i.add("["+f+"] dd, ["+f+"] li")),g.toggleable&&h.is(k)?(h.parent("dd, li").toggleClass(g.active_class,!1),h.toggleClass(g.active_class,!1),d(this).attr("aria-expanded",function(a,b){return"true"===b?"false":"true"}),g.callback(h),h.triggerHandler("toggled",[e]),void e.triggerHandler("toggled",[h])):(g.multi_expand||(j.removeClass(g.active_class),i.removeClass(g.active_class),i.children("a").attr("aria-expanded","false")),h.addClass(g.active_class).parent().addClass(g.active_class),g.callback(h),h.triggerHandler("toggled",[e]),e.triggerHandler("toggled",[h]),void d(this).attr("aria-expanded","true"))})},create:function(b){var c=this,d=b,e=a("> .accordion-navigation",d),f=d.data(c.attr_name(!0)+"-init")||c.settings;e.children("a").attr("aria-expanded","false"),e.has("."+f.content_class+"."+f.active_class).addClass(f.active_class).children("a").attr("aria-expanded","true"),f.multi_expand&&b.attr("aria-multiselectable","true")},toggle:function(a){var a="undefined"!=typeof a?a:{},c="undefined"!=typeof a.selector?a.selector:"",d="undefined"!=typeof a.toggle_state?a.toggle_state:"",e="undefined"!=typeof a.$accordion?a.$accordion:this.S(this.scope).closest("["+this.attr_name()+"]"),f=e.find("> dd"+c+", > li"+c);if(f.length<1)return b.console&&console.error("Selection not found.",c),!1;var g=this.S,h=this.settings.active_class;f.each(function(){var a=g(this),b=a.hasClass(h);(b&&"close"===d||!b&&"open"===d||""===d)&&a.find("> a").trigger("click.fndtn.accordion")})},open:function(a){var a="undefined"!=typeof a?a:{};a.toggle_state="open",this.toggle(a)},close:function(a){var a="undefined"!=typeof a?a:{};a.toggle_state="close",this.toggle(a)},off:function(){},reflow:function(){}}}(jQuery,window,window.document),function(a,b,c,d){"use strict";Foundation.libs.alert={name:"alert",version:"5.5.3",settings:{callback:function(){}},init:function(a,b,c){this.bindings(b,c)},events:function(){var b=this,c=this.S;a(this.scope).off(".alert").on("click.fndtn.alert","["+this.attr_name()+"] .close",function(a){var d=c(this).closest("["+b.attr_name()+"]"),e=d.data(b.attr_name(!0)+"-init")||b.settings;a.preventDefault(),Modernizr.csstransitions?(d.addClass("alert-close"),d.on("transitionend webkitTransitionEnd oTransitionEnd",function(a){c(this).trigger("close.fndtn.alert").remove(),e.callback()})):d.fadeOut(300,function(){c(this).trigger("close.fndtn.alert").remove(),e.callback()})})},reflow:function(){}}}(jQuery,window,window.document),function(a,b,c,d){"use strict";Foundation.libs.clearing={name:"clearing",version:"5.5.3",settings:{templates:{viewing:'<a href="#" class="clearing-close">&times;</a><div class="visible-img" style="display: none"><div class="clearing-touch-label"></div><img src="data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs%3D" alt="" /><p class="clearing-caption"></p><a href="#" class="clearing-main-prev"><span></span></a><a href="#" class="clearing-main-next"><span></span></a></div><img class="clearing-preload-next" style="display: none" src="data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs%3D" alt="" /><img class="clearing-preload-prev" style="display: none" src="data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs%3D" alt="" />'},close_selectors:".clearing-close, div.clearing-blackout",open_selectors:"",skip_selector:"",touch_label:"",init:!1,locked:!1},init:function(a,b,c){var d=this;Foundation.inherit(this,"throttle image_loaded"),this.bindings(b,c),d.S(this.scope).is("["+this.attr_name()+"]")?this.assemble(d.S("li",this.scope)):d.S("["+this.attr_name()+"]",this.scope).each(function(){d.assemble(d.S("li",this))})},events:function(d){var e=this,f=e.S,g=a(".scroll-container");g.length>0&&(this.scope=g),f(this.scope).off(".clearing").on("click.fndtn.clearing","ul["+this.attr_name()+"] li "+this.settings.open_selectors,function(a,b,c){var b=b||f(this),c=c||b,d=b.next("li"),g=b.closest("["+e.attr_name()+"]").data(e.attr_name(!0)+"-init"),h=f(a.target);a.preventDefault(),g||(e.init(),g=b.closest("["+e.attr_name()+"]").data(e.attr_name(!0)+"-init")),c.hasClass("visible")&&b[0]===c[0]&&d.length>0&&e.is_open(b)&&(c=d,h=f("img",c)),e.open(h,b,c),e.update_paddles(c)}).on("click.fndtn.clearing",".clearing-main-next",function(a){e.nav(a,"next")}).on("click.fndtn.clearing",".clearing-main-prev",function(a){e.nav(a,"prev")}).on("click.fndtn.clearing",this.settings.close_selectors,function(a){Foundation.libs.clearing.close(a,this)}),a(c).on("keydown.fndtn.clearing",function(a){e.keydown(a)}),f(b).off(".clearing").on("resize.fndtn.clearing",function(){e.resize()}),this.swipe_events(d)},swipe_events:function(a){var b=this,c=b.S;c(this.scope).on("touchstart.fndtn.clearing",".visible-img",function(a){a.touches||(a=a.originalEvent);var b={start_page_x:a.touches[0].pageX,start_page_y:a.touches[0].pageY,start_time:(new Date).getTime(),delta_x:0,is_scrolling:d};c(this).data("swipe-transition",b),a.stopPropagation()}).on("touchmove.fndtn.clearing",".visible-img",function(a){if(a.touches||(a=a.originalEvent),!(a.touches.length>1||a.scale&&1!==a.scale)){var d=c(this).data("swipe-transition");if("undefined"==typeof d&&(d={}),d.delta_x=a.touches[0].pageX-d.start_page_x,Foundation.rtl&&(d.delta_x=-d.delta_x),"undefined"==typeof d.is_scrolling&&(d.is_scrolling=!!(d.is_scrolling||Math.abs(d.delta_x)<Math.abs(a.touches[0].pageY-d.start_page_y))),!d.is_scrolling&&!d.active){a.preventDefault();var e=d.delta_x<0?"next":"prev";d.active=!0,b.nav(a,e)}}}).on("touchend.fndtn.clearing",".visible-img",function(a){c(this).data("swipe-transition",{}),a.stopPropagation()})},assemble:function(b){var c=b.parent();if(!c.parent().hasClass("carousel")){c.after('<div id="foundationClearingHolder"></div>');var d=c.detach(),e="";if(null!=d[0]){e=d[0].outerHTML;var f=this.S("#foundationClearingHolder"),g=c.data(this.attr_name(!0)+"-init"),h={grid:'<div class="carousel">'+e+"</div>",viewing:g.templates.viewing},i='<div class="clearing-assembled"><div>'+h.viewing+h.grid+"</div></div>",j=this.settings.touch_label;Modernizr.touch&&(i=a(i).find(".clearing-touch-label").html(j).end()),f.after(i).remove()}}},open:function(b,d,e){function f(){setTimeout(function(){this.image_loaded(m,function(){1!==m.outerWidth()||o?g.call(this,m):f.call(this)}.bind(this))}.bind(this),100)}function g(b){var c=a(b);c.css("visibility","visible"),c.trigger("imageVisible"),i.css("overflow","hidden"),j.addClass("clearing-blackout"),k.addClass("clearing-container"),l.show(),this.fix_height(e).caption(h.S(".clearing-caption",l),h.S("img",e)).center_and_label(b,n).shift(d,e,function(){e.closest("li").siblings().removeClass("visible"),e.closest("li").addClass("visible")}),l.trigger("opened.fndtn.clearing")}var h=this,i=a(c.body),j=e.closest(".clearing-assembled"),k=h.S("div",j).first(),l=h.S(".visible-img",k),m=h.S("img",l).not(b),n=h.S(".clearing-touch-label",k),o=!1,p={};a("body").on("touchmove",function(a){a.preventDefault()}),m.error(function(){o=!0}),this.locked()||(l.trigger("open.fndtn.clearing"),p=this.load(b),p.interchange?m.attr("data-interchange",p.interchange).foundation("interchange","reflow"):m.attr("src",p.src).attr("data-interchange",""),m.css("visibility","hidden"),f.call(this))},close:function(b,d){b.preventDefault();var e,f,g=function(a){return/blackout/.test(a.selector)?a:a.closest(".clearing-blackout")}(a(d)),h=a(c.body);return d===b.target&&g&&(h.css("overflow",""),e=a("div",g).first(),f=a(".visible-img",e),f.trigger("close.fndtn.clearing"),this.settings.prev_index=0,a("ul["+this.attr_name()+"]",g).attr("style","").closest(".clearing-blackout").removeClass("clearing-blackout"),e.removeClass("clearing-container"),f.hide(),f.trigger("closed.fndtn.clearing")),a("body").off("touchmove"),!1},is_open:function(a){return a.parent().prop("style").length>0},keydown:function(b){var c=a(".clearing-blackout ul["+this.attr_name()+"]"),d=this.rtl?37:39,e=this.rtl?39:37,f=27;b.which===d&&this.go(c,"next"),b.which===e&&this.go(c,"prev"),b.which===f&&this.S("a.clearing-close").trigger("click.fndtn.clearing")},nav:function(b,c){var d=a("ul["+this.attr_name()+"]",".clearing-blackout");b.preventDefault(),this.go(d,c)},resize:function(){var b=a("img",".clearing-blackout .visible-img"),c=a(".clearing-touch-label",".clearing-blackout");b.length&&(this.center_and_label(b,c),b.trigger("resized.fndtn.clearing"))},fix_height:function(a){var b=a.parent().children(),c=this;return b.each(function(){var a=c.S(this),b=a.find("img");a.height()>b.outerHeight()&&a.addClass("fix-height")}).closest("ul").width(100*b.length+"%"),this},update_paddles:function(a){a=a.closest("li");var b=a.closest(".carousel").siblings(".visible-img");a.next().length>0?this.S(".clearing-main-next",b).removeClass("disabled"):this.S(".clearing-main-next",b).addClass("disabled"),a.prev().length>0?this.S(".clearing-main-prev",b).removeClass("disabled"):this.S(".clearing-main-prev",b).addClass("disabled")},center_and_label:function(a,b){return!this.rtl&&b.length>0?b.css({marginLeft:-(b.outerWidth()/2),marginTop:-(a.outerHeight()/2)-b.outerHeight()-10}):b.css({marginRight:-(b.outerWidth()/2),marginTop:-(a.outerHeight()/2)-b.outerHeight()-10,left:"auto",right:"50%"}),this},load:function(a){var b,c,d;return"A"===a[0].nodeName?(b=a.attr("href"),c=a.data("clearing-interchange")):(d=a.closest("a"),b=d.attr("href"),c=d.data("clearing-interchange")),this.preload(a),{src:b?b:a.attr("src"),interchange:b?c:a.data("clearing-interchange")}},preload:function(a){this.img(a.closest("li").next(),"next").img(a.closest("li").prev(),"prev")},img:function(b,c){if(b.length){var d,e,f,g=a(".clearing-preload-"+c),h=this.S("a",b);h.length?(d=h.attr("href"),e=h.data("clearing-interchange")):(f=this.S("img",b),d=f.attr("src"),e=f.data("clearing-interchange")),e?g.attr("data-interchange",e):(g.attr("src",d),g.attr("data-interchange",""))}return this},caption:function(a,b){var c=b.attr("data-caption");if(c){var d=a.get(0);d.innerHTML=c,a.show()}else a.text("").hide();return this},go:function(a,b){var c=this.S(".visible",a),d=c[b]();this.settings.skip_selector&&0!=d.find(this.settings.skip_selector).length&&(d=d[b]()),d.length&&this.S("img",d).trigger("click.fndtn.clearing",[c,d]).trigger("change.fndtn.clearing")},shift:function(a,b,c){var d,e=b.parent(),f=this.settings.prev_index||b.index(),g=this.direction(e,a,b),h=this.rtl?"right":"left",i=parseInt(e.css("left"),10),j=b.outerWidth(),k={};b.index()===f||/skip/.test(g)?/skip/.test(g)&&(d=b.index()-this.settings.up_count,this.lock(),d>0?(k[h]=-(d*j),e.animate(k,300,this.unlock())):(k[h]=0,e.animate(k,300,this.unlock()))):/left/.test(g)?(this.lock(),k[h]=i+j,e.animate(k,300,this.unlock())):/right/.test(g)&&(this.lock(),k[h]=i-j,e.animate(k,300,this.unlock())),c()},direction:function(a,b,c){var d,e=this.S("li",a),f=e.outerWidth()+e.outerWidth()/4,g=Math.floor(this.S(".clearing-container").outerWidth()/f)-1,h=e.index(c);return this.settings.up_count=g,d=this.adjacent(this.settings.prev_index,h)?h>g&&h>this.settings.prev_index?"right":h>g-1&&h<=this.settings.prev_index?"left":!1:"skip",this.settings.prev_index=h,d},adjacent:function(a,b){for(var c=b+1;c>=b-1;c--)if(c===a)return!0;return!1},lock:function(){this.settings.locked=!0},unlock:function(){this.settings.locked=!1},locked:function(){return this.settings.locked},off:function(){this.S(this.scope).off(".fndtn.clearing"),this.S(b).off(".fndtn.clearing")},reflow:function(){this.init()}}}(jQuery,window,window.document),function(a,b,c,d){"use strict";Foundation.libs.dropdown={name:"dropdown",version:"5.5.3",settings:{active_class:"open",disabled_class:"disabled",mega_class:"mega",align:"bottom",is_hover:!1,hover_timeout:150,opened:function(){},closed:function(){}},init:function(b,c,d){Foundation.inherit(this,"throttle"),a.extend(!0,this.settings,c,d),this.bindings(c,d)},events:function(d){var e=this,f=e.S;f(this.scope).off(".dropdown").on("click.fndtn.dropdown","["+this.attr_name()+"]",function(b){var c=f(this).data(e.attr_name(!0)+"-init")||e.settings;(!c.is_hover||Modernizr.touch)&&(b.preventDefault(),f(this).parent("[data-reveal-id]").length&&b.stopPropagation(),e.toggle(a(this)))}).on("mouseenter.fndtn.dropdown","["+this.attr_name()+"], ["+this.attr_name()+"-content]",function(a){var b,c,d=f(this);clearTimeout(e.timeout),d.data(e.data_attr())?(b=f("#"+d.data(e.data_attr())),c=d):(b=d,c=f("["+e.attr_name()+'="'+b.attr("id")+'"]'));var g=c.data(e.attr_name(!0)+"-init")||e.settings;f(a.currentTarget).data(e.data_attr())&&g.is_hover&&e.closeall.call(e),g.is_hover&&e.open.apply(e,[b,c])}).on("mouseleave.fndtn.dropdown","["+this.attr_name()+"], ["+this.attr_name()+"-content]",function(a){var b,c=f(this);if(c.data(e.data_attr()))b=c.data(e.data_attr(!0)+"-init")||e.settings;else var d=f("["+e.attr_name()+'="'+f(this).attr("id")+'"]'),b=d.data(e.attr_name(!0)+"-init")||e.settings;e.timeout=setTimeout(function(){c.data(e.data_attr())?b.is_hover&&e.close.call(e,f("#"+c.data(e.data_attr()))):b.is_hover&&e.close.call(e,c)}.bind(this),b.hover_timeout)}).on("click.fndtn.dropdown",function(b){var d=f(b.target).closest("["+e.attr_name()+"-content]"),g=d.find("a");return g.length>0&&"false"!==d.attr("aria-autoclose")&&e.close.call(e,f("["+e.attr_name()+"-content]")),b.target!==c&&!a.contains(c.documentElement,b.target)||f(b.target).closest("["+e.attr_name()+"]").length>0?void 0:!f(b.target).data("revealId")&&d.length>0&&(f(b.target).is("["+e.attr_name()+"-content]")||a.contains(d.first()[0],b.target))?void b.stopPropagation():void e.close.call(e,f("["+e.attr_name()+"-content]"))}).on("opened.fndtn.dropdown","["+e.attr_name()+"-content]",function(){e.settings.opened.call(this)}).on("closed.fndtn.dropdown","["+e.attr_name()+"-content]",function(){e.settings.closed.call(this)}),f(b).off(".dropdown").on("resize.fndtn.dropdown",e.throttle(function(){e.resize.call(e)},50)),this.resize()},close:function(b){var c=this;b.each(function(d){var e=a("["+c.attr_name()+"="+b[d].id+"]")||a("aria-controls="+b[d].id+"]");e.attr("aria-expanded","false"),c.S(this).hasClass(c.settings.active_class)&&(c.S(this).css(Foundation.rtl?"right":"left","-99999px").attr("aria-hidden","true").removeClass(c.settings.active_class).prev("["+c.attr_name()+"]").removeClass(c.settings.active_class).removeData("target"),c.S(this).trigger("closed.fndtn.dropdown",[b]))}),b.removeClass("f-open-"+this.attr_name(!0))},closeall:function(){var b=this;a.each(b.S(".f-open-"+this.attr_name(!0)),function(){b.close.call(b,b.S(this))})},open:function(a,b){this.css(a.addClass(this.settings.active_class),b),a.prev("["+this.attr_name()+"]").addClass(this.settings.active_class),a.data("target",b.get(0)).trigger("opened.fndtn.dropdown",[a,b]),a.attr("aria-hidden","false"),b.attr("aria-expanded","true"),a.focus(),a.addClass("f-open-"+this.attr_name(!0))},data_attr:function(){return this.namespace.length>0?this.namespace+"-"+this.name:this.name},toggle:function(a){if(!a.hasClass(this.settings.disabled_class)){var b=this.S("#"+a.data(this.data_attr()));0!==b.length&&(this.close.call(this,this.S("["+this.attr_name()+"-content]").not(b)),b.hasClass(this.settings.active_class)?(this.close.call(this,b),b.data("target")!==a.get(0)&&this.open.call(this,b,a)):this.open.call(this,b,a))}},resize:function(){var b=this.S("["+this.attr_name()+"-content].open"),c=a(b.data("target"));b.length&&c.length&&this.css(b,c)},css:function(a,b){var c=Math.max((b.width()-a.width())/2,8),d=b.data(this.attr_name(!0)+"-init")||this.settings,e=a.parent().css("overflow-y")||a.parent().css("overflow");if(this.clear_idx(),this.small()){var f=this.dirs.bottom.call(a,b,d);a.attr("style","").removeClass("drop-left drop-right drop-top").css({position:"absolute",width:"95%","max-width":"none",top:f.top}),a.css(Foundation.rtl?"right":"left",c)}else if("visible"!==e){var g=b[0].offsetTop+b[0].offsetHeight;a.attr("style","").css({position:"absolute",top:g}),a.css(Foundation.rtl?"right":"left",c)}else this.style(a,b,d);return a},style:function(b,c,d){var e=a.extend({position:"absolute"},this.dirs[d.align].call(b,c,d));b.attr("style","").css(e)},dirs:{_base:function(a,d){var e=this.offsetParent(),f=e.offset(),g=a.offset();g.top-=f.top,g.left-=f.left,g.missRight=!1,g.missTop=!1,g.missLeft=!1,g.leftRightFlag=!1;var h,i=b.innerWidth;h=c.getElementsByClassName("row")[0]?c.getElementsByClassName("row")[0].clientWidth:i;var j=(i-h)/2,k=h;if(!this.hasClass("mega")&&!d.ignore_repositioning){var l=this.outerWidth(),m=a.offset().left;a.offset().top<=this.outerHeight()&&(g.missTop=!0,k=i-j,g.leftRightFlag=!0),m+l>m+j&&m-j>l&&(g.missRight=!0,g.missLeft=!1),0>=m-l&&(g.missLeft=!0,g.missRight=!1)}return g},top:function(a,b){var c=Foundation.libs.dropdown,d=c.dirs._base.call(this,a,b);return this.addClass("drop-top"),1==d.missTop&&(d.top=d.top+a.outerHeight()+this.outerHeight(),
+this.removeClass("drop-top")),1==d.missRight&&(d.left=d.left-this.outerWidth()+a.outerWidth()),(a.outerWidth()<this.outerWidth()||c.small()||this.hasClass(b.mega_menu))&&c.adjust_pip(this,a,b,d),Foundation.rtl?{left:d.left-this.outerWidth()+a.outerWidth(),top:d.top-this.outerHeight()}:{left:d.left,top:d.top-this.outerHeight()}},bottom:function(a,b){var c=Foundation.libs.dropdown,d=c.dirs._base.call(this,a,b);return 1==d.missRight&&(d.left=d.left-this.outerWidth()+a.outerWidth()),(a.outerWidth()<this.outerWidth()||c.small()||this.hasClass(b.mega_menu))&&c.adjust_pip(this,a,b,d),c.rtl?{left:d.left-this.outerWidth()+a.outerWidth(),top:d.top+a.outerHeight()}:{left:d.left,top:d.top+a.outerHeight()}},left:function(a,b){var c=Foundation.libs.dropdown.dirs._base.call(this,a,b);return this.addClass("drop-left"),1==c.missLeft&&(c.left=c.left+this.outerWidth(),c.top=c.top+a.outerHeight(),this.removeClass("drop-left")),{left:c.left-this.outerWidth(),top:c.top}},right:function(a,b){var c=Foundation.libs.dropdown.dirs._base.call(this,a,b);this.addClass("drop-right"),1==c.missRight?(c.left=c.left-this.outerWidth(),c.top=c.top+a.outerHeight(),this.removeClass("drop-right")):c.triggeredRight=!0;var d=Foundation.libs.dropdown;return(a.outerWidth()<this.outerWidth()||d.small()||this.hasClass(b.mega_menu))&&d.adjust_pip(this,a,b,c),{left:c.left+a.outerWidth(),top:c.top}}},adjust_pip:function(a,b,c,d){var e=Foundation.stylesheet,f=8;a.hasClass(c.mega_class)?f=d.left+b.outerWidth()/2-8:this.small()&&(f+=d.left-8),this.rule_idx=e.cssRules.length;var g=".f-dropdown.open:before",h=".f-dropdown.open:after",i="left: "+f+"px;",j="left: "+(f-1)+"px;";1==d.missRight&&(f=a.outerWidth()-23,g=".f-dropdown.open:before",h=".f-dropdown.open:after",i="left: "+f+"px;",j="left: "+(f-1)+"px;"),1==d.triggeredRight&&(g=".f-dropdown.open:before",h=".f-dropdown.open:after",i="left:-12px;",j="left:-14px;"),e.insertRule?(e.insertRule([g,"{",i,"}"].join(" "),this.rule_idx),e.insertRule([h,"{",j,"}"].join(" "),this.rule_idx+1)):(e.addRule(g,i,this.rule_idx),e.addRule(h,j,this.rule_idx+1))},clear_idx:function(){var a=Foundation.stylesheet;"undefined"!=typeof this.rule_idx&&(a.deleteRule(this.rule_idx),a.deleteRule(this.rule_idx),delete this.rule_idx)},small:function(){return matchMedia(Foundation.media_queries.small).matches&&!matchMedia(Foundation.media_queries.medium).matches},off:function(){this.S(this.scope).off(".fndtn.dropdown"),this.S("html, body").off(".fndtn.dropdown"),this.S(b).off(".fndtn.dropdown"),this.S("[data-dropdown-content]").off(".fndtn.dropdown")},reflow:function(){}}}(jQuery,window,window.document),function(a,b,c,d){"use strict";Foundation.libs.equalizer={name:"equalizer",version:"5.5.3",settings:{use_tallest:!0,before_height_change:a.noop,after_height_change:a.noop,equalize_on_stack:!1,act_on_hidden_el:!1},init:function(a,b,c){Foundation.inherit(this,"image_loaded"),this.bindings(b,c),this.reflow()},events:function(){this.S(b).off(".equalizer").on("resize.fndtn.equalizer",function(a){this.reflow()}.bind(this))},equalize:function(b){var c,d,e=!1,f=b.data("equalizer"),g=b.data(this.attr_name(!0)+"-init")||this.settings;if(c=g.act_on_hidden_el?f?b.find("["+this.attr_name()+'-watch="'+f+'"]'):b.find("["+this.attr_name()+"-watch]"):f?b.find("["+this.attr_name()+'-watch="'+f+'"]:visible'):b.find("["+this.attr_name()+"-watch]:visible"),0!==c.length&&(g.before_height_change(),b.trigger("before-height-change.fndth.equalizer"),c.height("inherit"),g.equalize_on_stack!==!1||(d=c.first().offset().top,c.each(function(){return a(this).offset().top!==d?(e=!0,!1):void 0}),!e))){var h=c.map(function(){return a(this).outerHeight(!1)}).get();if(g.use_tallest){var i=Math.max.apply(null,h);c.css("height",i)}else{var j=Math.min.apply(null,h);c.css("height",j)}g.after_height_change(),b.trigger("after-height-change.fndtn.equalizer")}},reflow:function(){var b=this;this.S("["+this.attr_name()+"]",this.scope).each(function(){var c=a(this),d=c.data("equalizer-mq"),e=!0;d&&(d="is_"+d.replace(/-/g,"_"),Foundation.utils.hasOwnProperty(d)&&(e=!1)),b.image_loaded(b.S("img",this),function(){if(e||Foundation.utils[d]())b.equalize(c);else{var a=c.find("["+b.attr_name()+"-watch]:visible");a.css("height","auto")}})})}}}(jQuery,window,window.document),function(a,b,c,d){"use strict";Foundation.libs.interchange={name:"interchange",version:"5.5.3",cache:{},images_loaded:!1,nodes_loaded:!1,settings:{load_attr:"interchange",named_queries:{"default":"only screen",small:Foundation.media_queries.small,"small-only":Foundation.media_queries["small-only"],medium:Foundation.media_queries.medium,"medium-only":Foundation.media_queries["medium-only"],large:Foundation.media_queries.large,"large-only":Foundation.media_queries["large-only"],xlarge:Foundation.media_queries.xlarge,"xlarge-only":Foundation.media_queries["xlarge-only"],xxlarge:Foundation.media_queries.xxlarge,landscape:"only screen and (orientation: landscape)",portrait:"only screen and (orientation: portrait)",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)"},directives:{replace:function(b,c,d){if(null!==b&&/IMG/.test(b[0].nodeName)){var e=a.each(b,function(){this.src=c});if(new RegExp(c,"i").test(e))return;return b.attr("src",c),d(b[0].src)}var f=b.data(this.data_attr+"-last-path"),g=this;if(f!=c)return/\.(gif|jpg|jpeg|tiff|png)([?#].*)?/i.test(c)?(a(b).css("background-image","url("+c+")"),b.data("interchange-last-path",c),d(c)):a.get(c,function(a){b.html(a),b.data(g.data_attr+"-last-path",c),d()})}}},init:function(b,c,d){Foundation.inherit(this,"throttle random_str"),this.data_attr=this.set_data_attr(),a.extend(!0,this.settings,c,d),this.bindings(c,d),this.reflow()},get_media_hash:function(){var a="";for(var b in this.settings.named_queries)a+=matchMedia(this.settings.named_queries[b]).matches.toString();return a},events:function(){var c,d=this;return a(b).off(".interchange").on("resize.fndtn.interchange",d.throttle(function(){var a=d.get_media_hash();a!==c&&d.resize(),c=a},50)),this},resize:function(){var b=this.cache;if(!this.images_loaded||!this.nodes_loaded)return void setTimeout(a.proxy(this.resize,this),50);for(var c in b)if(b.hasOwnProperty(c)){var d=this.results(c,b[c]);d&&this.settings.directives[d.scenario[1]].call(this,d.el,d.scenario[0],function(a){if(arguments[0]instanceof Array)var b=arguments[0];else var b=Array.prototype.slice.call(arguments,0);return function(){a.el.trigger(a.scenario[1],b)}}(d))}},results:function(a,b){var c=b.length;if(c>0)for(var d=this.S("["+this.add_namespace("data-uuid")+'="'+a+'"]');c--;){var e,f=b[c][2];if(e=this.settings.named_queries.hasOwnProperty(f)?matchMedia(this.settings.named_queries[f]):matchMedia(f),e.matches)return{el:d,scenario:b[c]}}return!1},load:function(a,b){return("undefined"==typeof this["cached_"+a]||b)&&this["update_"+a](),this["cached_"+a]},update_images:function(){var a=this.S("img["+this.data_attr+"]"),b=a.length,c=b,d=0,e=this.data_attr;for(this.cache={},this.cached_images=[],this.images_loaded=0===b;c--;){if(d++,a[c]){var f=a[c].getAttribute(e)||"";f.length>0&&this.cached_images.push(a[c])}d===b&&(this.images_loaded=!0,this.enhance("images"))}return this},update_nodes:function(){var a=this.S("["+this.data_attr+"]").not("img"),b=a.length,c=b,d=0,e=this.data_attr;for(this.cached_nodes=[],this.nodes_loaded=0===b;c--;){d++;var f=a[c].getAttribute(e)||"";f.length>0&&this.cached_nodes.push(a[c]),d===b&&(this.nodes_loaded=!0,this.enhance("nodes"))}return this},enhance:function(c){for(var d=this["cached_"+c].length;d--;)this.object(a(this["cached_"+c][d]));return a(b).trigger("resize.fndtn.interchange")},convert_directive:function(a){var b=this.trim(a);return b.length>0?b:"replace"},parse_scenario:function(a){var b=a[0].match(/(.+),\s*(\w+)\s*$/),c=a[1].match(/(.*)\)/);if(b)var d=b[1],e=b[2];else var f=a[0].split(/,\s*$/),d=f[0],e="";return[this.trim(d),this.convert_directive(e),this.trim(c[1])]},object:function(a){var b=this.parse_data_attr(a),c=[],d=b.length;if(d>0)for(;d--;){var e=b[d].split(/,\s?\(/);if(e.length>1){var f=this.parse_scenario(e);c.push(f)}}return this.store(a,c)},store:function(a,b){var c=this.random_str(),d=a.data(this.add_namespace("uuid",!0));return this.cache[d]?this.cache[d]:(a.attr(this.add_namespace("data-uuid"),c),this.cache[c]=b)},trim:function(b){return"string"==typeof b?a.trim(b):b},set_data_attr:function(a){return a?this.namespace.length>0?this.namespace+"-"+this.settings.load_attr:this.settings.load_attr:this.namespace.length>0?"data-"+this.namespace+"-"+this.settings.load_attr:"data-"+this.settings.load_attr},parse_data_attr:function(a){for(var b=a.attr(this.attr_name()).split(/\[(.*?)\]/),c=b.length,d=[];c--;)b[c].replace(/[\W\d]+/,"").length>4&&d.push(b[c]);return d},reflow:function(){this.load("images",!0),this.load("nodes",!0)}}}(jQuery,window,window.document),function(a,b,c,d){"use strict";Foundation.libs.joyride={name:"joyride",version:"5.5.3",defaults:{expose:!1,modal:!0,keyboard:!0,tip_location:"bottom",nub_position:"auto",scroll_speed:1500,scroll_animation:"linear",timer:0,start_timer_on_click:!0,start_offset:0,next_button:!0,prev_button:!0,tip_animation:"fade",pause_after:[],exposed:[],tip_animation_fade_speed:300,cookie_monster:!1,cookie_name:"joyride",cookie_domain:!1,cookie_expires:365,tip_container:"body",abort_on_close:!0,tip_location_patterns:{top:["bottom"],bottom:[],left:["right","top","bottom"],right:["left","top","bottom"]},post_ride_callback:function(){},post_step_callback:function(){},pre_step_callback:function(){},pre_ride_callback:function(){},post_expose_callback:function(){},template:{link:'<a href="#close" class="joyride-close-tip">&times;</a>',timer:'<div class="joyride-timer-indicator-wrap"><span class="joyride-timer-indicator"></span></div>',tip:'<div class="joyride-tip-guide"><span class="joyride-nub"></span></div>',wrapper:'<div class="joyride-content-wrapper"></div>',button:'<a href="#" class="small button joyride-next-tip"></a>',prev_button:'<a href="#" class="small button joyride-prev-tip"></a>',modal:'<div class="joyride-modal-bg"></div>',expose:'<div class="joyride-expose-wrapper"></div>',expose_cover:'<div class="joyride-expose-cover"></div>'},expose_add_class:""},init:function(b,c,d){Foundation.inherit(this,"throttle random_str"),this.settings=this.settings||a.extend({},this.defaults,d||c),this.bindings(c,d)},go_next:function(){this.settings.$li.next().length<1?this.end():this.settings.timer>0?(clearTimeout(this.settings.automate),this.hide(),this.show(),this.startTimer()):(this.hide(),this.show())},go_prev:function(){this.settings.$li.prev().length<1||(this.settings.timer>0?(clearTimeout(this.settings.automate),this.hide(),this.show(null,!0),this.startTimer()):(this.hide(),this.show(null,!0)))},events:function(){var c=this;a(this.scope).off(".joyride").on("click.fndtn.joyride",".joyride-next-tip, .joyride-modal-bg",function(a){a.preventDefault(),this.go_next()}.bind(this)).on("click.fndtn.joyride",".joyride-prev-tip",function(a){a.preventDefault(),this.go_prev()}.bind(this)).on("click.fndtn.joyride",".joyride-close-tip",function(a){a.preventDefault(),this.end(this.settings.abort_on_close)}.bind(this)).on("keyup.fndtn.joyride",function(a){if(this.settings.keyboard&&this.settings.riding)switch(a.which){case 39:a.preventDefault(),this.go_next();break;case 37:a.preventDefault(),this.go_prev();break;case 27:a.preventDefault(),this.end(this.settings.abort_on_close)}}.bind(this)),a(b).off(".joyride").on("resize.fndtn.joyride",c.throttle(function(){if(a("["+c.attr_name()+"]").length>0&&c.settings.$next_tip&&c.settings.riding){if(c.settings.exposed.length>0){var b=a(c.settings.exposed);b.each(function(){var b=a(this);c.un_expose(b),c.expose(b)})}c.is_phone()?c.pos_phone():c.pos_default(!1)}},100))},start:function(){var b=this,c=a("["+this.attr_name()+"]",this.scope),d=["timer","scrollSpeed","startOffset","tipAnimationFadeSpeed","cookieExpires"],e=d.length;!c.length>0||(this.settings.init||this.events(),this.settings=c.data(this.attr_name(!0)+"-init"),this.settings.$content_el=c,this.settings.$body=a(this.settings.tip_container),this.settings.body_offset=a(this.settings.tip_container).position(),this.settings.$tip_content=this.settings.$content_el.find("> li"),this.settings.paused=!1,this.settings.attempts=0,this.settings.riding=!0,"function"!=typeof a.cookie&&(this.settings.cookie_monster=!1),(!this.settings.cookie_monster||this.settings.cookie_monster&&!a.cookie(this.settings.cookie_name))&&(this.settings.$tip_content.each(function(c){var f=a(this);this.settings=a.extend({},b.defaults,b.data_options(f));for(var g=e;g--;)b.settings[d[g]]=parseInt(b.settings[d[g]],10);b.create({$li:f,index:c})}),!this.settings.start_timer_on_click&&this.settings.timer>0?(this.show("init"),this.startTimer()):this.show("init")))},resume:function(){this.set_li(),this.show()},tip_template:function(b){var c,d;return b.tip_class=b.tip_class||"",c=a(this.settings.template.tip).addClass(b.tip_class),d=a.trim(a(b.li).html())+this.prev_button_text(b.prev_button_text,b.index)+this.button_text(b.button_text)+this.settings.template.link+this.timer_instance(b.index),c.append(a(this.settings.template.wrapper)),c.first().attr(this.add_namespace("data-index"),b.index),a(".joyride-content-wrapper",c).append(d),c[0]},timer_instance:function(b){var c;return c=0===b&&this.settings.start_timer_on_click&&this.settings.timer>0||0===this.settings.timer?"":a(this.settings.template.timer)[0].outerHTML},button_text:function(b){return this.settings.tip_settings.next_button?(b=a.trim(b)||"Next",b=a(this.settings.template.button).append(b)[0].outerHTML):b="",b},prev_button_text:function(b,c){return this.settings.tip_settings.prev_button?(b=a.trim(b)||"Previous",b=0==c?a(this.settings.template.prev_button).append(b).addClass("disabled")[0].outerHTML:a(this.settings.template.prev_button).append(b)[0].outerHTML):b="",b},create:function(b){this.settings.tip_settings=a.extend({},this.settings,this.data_options(b.$li));var c=b.$li.attr(this.add_namespace("data-button"))||b.$li.attr(this.add_namespace("data-text")),d=b.$li.attr(this.add_namespace("data-button-prev"))||b.$li.attr(this.add_namespace("data-prev-text")),e=b.$li.attr("class"),f=a(this.tip_template({tip_class:e,index:b.index,button_text:c,prev_button_text:d,li:b.$li}));a(this.settings.tip_container).append(f)},show:function(b,c){var e=null;if(this.settings.$li===d||-1===a.inArray(this.settings.$li.index(),this.settings.pause_after))if(this.settings.paused?this.settings.paused=!1:this.set_li(b,c),this.settings.attempts=0,this.settings.$li.length&&this.settings.$target.length>0){if(b&&(this.settings.pre_ride_callback(this.settings.$li.index(),this.settings.$next_tip),this.settings.modal&&this.show_modal()),this.settings.pre_step_callback(this.settings.$li.index(),this.settings.$next_tip),this.settings.modal&&this.settings.expose&&this.expose(),this.settings.tip_settings=a.extend({},this.settings,this.data_options(this.settings.$li)),this.settings.timer=parseInt(this.settings.timer,10),this.settings.tip_settings.tip_location_pattern=this.settings.tip_location_patterns[this.settings.tip_settings.tip_location],!/body/i.test(this.settings.$target.selector)&&!this.settings.expose){var f=a(".joyride-modal-bg");/pop/i.test(this.settings.tipAnimation)?f.hide():f.fadeOut(this.settings.tipAnimationFadeSpeed),this.scroll_to()}this.is_phone()?this.pos_phone(!0):this.pos_default(!0),e=this.settings.$next_tip.find(".joyride-timer-indicator"),/pop/i.test(this.settings.tip_animation)?(e.width(0),this.settings.timer>0?(this.settings.$next_tip.show(),setTimeout(function(){e.animate({width:e.parent().width()},this.settings.timer,"linear")}.bind(this),this.settings.tip_animation_fade_speed)):this.settings.$next_tip.show()):/fade/i.test(this.settings.tip_animation)&&(e.width(0),this.settings.timer>0?(this.settings.$next_tip.fadeIn(this.settings.tip_animation_fade_speed).show(),setTimeout(function(){e.animate({width:e.parent().width()},this.settings.timer,"linear")}.bind(this),this.settings.tip_animation_fade_speed)):this.settings.$next_tip.fadeIn(this.settings.tip_animation_fade_speed)),this.settings.$current_tip=this.settings.$next_tip}else this.settings.$li&&this.settings.$target.length<1?this.show(b,c):this.end();else this.settings.paused=!0},is_phone:function(){return matchMedia(Foundation.media_queries.small).matches&&!matchMedia(Foundation.media_queries.medium).matches},hide:function(){this.settings.modal&&this.settings.expose&&this.un_expose(),this.settings.modal||a(".joyride-modal-bg").hide(),this.settings.$current_tip.css("visibility","hidden"),setTimeout(a.proxy(function(){this.hide(),this.css("visibility","visible")},this.settings.$current_tip),0),this.settings.post_step_callback(this.settings.$li.index(),this.settings.$current_tip)},set_li:function(a,b){a?(this.settings.$li=this.settings.$tip_content.eq(this.settings.start_offset),this.set_next_tip(),this.settings.$current_tip=this.settings.$next_tip):(b?this.settings.$li=this.settings.$li.prev():this.settings.$li=this.settings.$li.next(),this.set_next_tip()),this.set_target()},set_next_tip:function(){this.settings.$next_tip=a(".joyride-tip-guide").eq(this.settings.$li.index()),this.settings.$next_tip.data("closed","")},set_target:function(){var b=this.settings.$li.attr(this.add_namespace("data-class")),d=this.settings.$li.attr(this.add_namespace("data-id")),e=function(){return d?a(c.getElementById(d)):b?a("."+b).first():a("body")};this.settings.$target=e()},scroll_to:function(){var c,d;c=a(b).height()/2,d=Math.ceil(this.settings.$target.offset().top-c+this.settings.$next_tip.outerHeight()),0!=d&&a("html, body").stop().animate({scrollTop:d},this.settings.scroll_speed,"swing")},paused:function(){return-1===a.inArray(this.settings.$li.index()+1,this.settings.pause_after)},restart:function(){this.hide(),this.settings.$li=d,this.show("init")},pos_default:function(a){var b=this.settings.$next_tip.find(".joyride-nub"),c=Math.ceil(b.outerWidth()/2),d=Math.ceil(b.outerHeight()/2),e=a||!1;if(e&&(this.settings.$next_tip.css("visibility","hidden"),this.settings.$next_tip.show()),/body/i.test(this.settings.$target.selector))this.settings.$li.length&&this.pos_modal(b);else{var f=this.settings.tip_settings.tipAdjustmentY?parseInt(this.settings.tip_settings.tipAdjustmentY):0,g=this.settings.tip_settings.tipAdjustmentX?parseInt(this.settings.tip_settings.tipAdjustmentX):0;this.bottom()?(this.rtl?this.settings.$next_tip.css({top:this.settings.$target.offset().top+d+this.settings.$target.outerHeight()+f,left:this.settings.$target.offset().left+this.settings.$target.outerWidth()-this.settings.$next_tip.outerWidth()+g}):this.settings.$next_tip.css({top:this.settings.$target.offset().top+d+this.settings.$target.outerHeight()+f,left:this.settings.$target.offset().left+g}),this.nub_position(b,this.settings.tip_settings.nub_position,"top")):this.top()?(this.rtl?this.settings.$next_tip.css({top:this.settings.$target.offset().top-this.settings.$next_tip.outerHeight()-d+f,left:this.settings.$target.offset().left+this.settings.$target.outerWidth()-this.settings.$next_tip.outerWidth()}):this.settings.$next_tip.css({top:this.settings.$target.offset().top-this.settings.$next_tip.outerHeight()-d+f,left:this.settings.$target.offset().left+g}),this.nub_position(b,this.settings.tip_settings.nub_position,"bottom")):this.right()?(this.settings.$next_tip.css({top:this.settings.$target.offset().top+f,left:this.settings.$target.outerWidth()+this.settings.$target.offset().left+c+g}),this.nub_position(b,this.settings.tip_settings.nub_position,"left")):this.left()&&(this.settings.$next_tip.css({top:this.settings.$target.offset().top+f,left:this.settings.$target.offset().left-this.settings.$next_tip.outerWidth()-c+g}),this.nub_position(b,this.settings.tip_settings.nub_position,"right")),!this.visible(this.corners(this.settings.$next_tip))&&this.settings.attempts<this.settings.tip_settings.tip_location_pattern.length&&(b.removeClass("bottom").removeClass("top").removeClass("right").removeClass("left"),this.settings.tip_settings.tip_location=this.settings.tip_settings.tip_location_pattern[this.settings.attempts],this.settings.attempts++,this.pos_default())}e&&(this.settings.$next_tip.hide(),this.settings.$next_tip.css("visibility","visible"))},pos_phone:function(b){var c=this.settings.$next_tip.outerHeight(),d=(this.settings.$next_tip.offset(),this.settings.$target.outerHeight()),e=a(".joyride-nub",this.settings.$next_tip),f=Math.ceil(e.outerHeight()/2),g=b||!1;e.removeClass("bottom").removeClass("top").removeClass("right").removeClass("left"),g&&(this.settings.$next_tip.css("visibility","hidden"),this.settings.$next_tip.show()),/body/i.test(this.settings.$target.selector)?this.settings.$li.length&&this.pos_modal(e):this.top()?(this.settings.$next_tip.offset({top:this.settings.$target.offset().top-c-f}),e.addClass("bottom")):(this.settings.$next_tip.offset({top:this.settings.$target.offset().top+d+f}),e.addClass("top")),g&&(this.settings.$next_tip.hide(),this.settings.$next_tip.css("visibility","visible"))},pos_modal:function(a){this.center(),a.hide(),this.show_modal()},show_modal:function(){if(!this.settings.$next_tip.data("closed")){var b=a(".joyride-modal-bg");if(b.length<1){var b=a(this.settings.template.modal);b.appendTo("body")}/pop/i.test(this.settings.tip_animation)?b.show():b.fadeIn(this.settings.tip_animation_fade_speed)}},expose:function(){var c,d,e,f,g,h="expose-"+this.random_str(6);if(arguments.length>0&&arguments[0]instanceof a)e=arguments[0];else{if(!this.settings.$target||/body/i.test(this.settings.$target.selector))return!1;e=this.settings.$target}return e.length<1?(b.console&&console.error("element not valid",e),!1):(c=a(this.settings.template.expose),this.settings.$body.append(c),c.css({top:e.offset().top,left:e.offset().left,width:e.outerWidth(!0),height:e.outerHeight(!0)}),d=a(this.settings.template.expose_cover),f={zIndex:e.css("z-index"),position:e.css("position")},g=null==e.attr("class")?"":e.attr("class"),e.css("z-index",parseInt(c.css("z-index"))+1),"static"==f.position&&e.css("position","relative"),e.data("expose-css",f),e.data("orig-class",g),e.attr("class",g+" "+this.settings.expose_add_class),d.css({top:e.offset().top,left:e.offset().left,width:e.outerWidth(!0),height:e.outerHeight(!0)}),this.settings.modal&&this.show_modal(),this.settings.$body.append(d),c.addClass(h),d.addClass(h),e.data("expose",h),this.settings.post_expose_callback(this.settings.$li.index(),this.settings.$next_tip,e),void this.add_exposed(e))},un_expose:function(){var c,d,e,f,g,h=!1;if(arguments.length>0&&arguments[0]instanceof a)d=arguments[0];else{if(!this.settings.$target||/body/i.test(this.settings.$target.selector))return!1;d=this.settings.$target}return d.length<1?(b.console&&console.error("element not valid",d),!1):(c=d.data("expose"),e=a("."+c),arguments.length>1&&(h=arguments[1]),h===!0?a(".joyride-expose-wrapper,.joyride-expose-cover").remove():e.remove(),f=d.data("expose-css"),"auto"==f.zIndex?d.css("z-index",""):d.css("z-index",f.zIndex),f.position!=d.css("position")&&("static"==f.position?d.css("position",""):d.css("position",f.position)),g=d.data("orig-class"),d.attr("class",g),d.removeData("orig-classes"),d.removeData("expose"),d.removeData("expose-z-index"),void this.remove_exposed(d))},add_exposed:function(b){this.settings.exposed=this.settings.exposed||[],b instanceof a||"object"==typeof b?this.settings.exposed.push(b[0]):"string"==typeof b&&this.settings.exposed.push(b)},remove_exposed:function(b){var c,d;for(b instanceof a?c=b[0]:"string"==typeof b&&(c=b),this.settings.exposed=this.settings.exposed||[],d=this.settings.exposed.length;d--;)if(this.settings.exposed[d]==c)return void this.settings.exposed.splice(d,1)},center:function(){var c=a(b);return this.settings.$next_tip.css({top:(c.height()-this.settings.$next_tip.outerHeight())/2+c.scrollTop(),left:(c.width()-this.settings.$next_tip.outerWidth())/2+c.scrollLeft()}),!0},bottom:function(){return/bottom/i.test(this.settings.tip_settings.tip_location)},top:function(){return/top/i.test(this.settings.tip_settings.tip_location)},right:function(){return/right/i.test(this.settings.tip_settings.tip_location)},left:function(){return/left/i.test(this.settings.tip_settings.tip_location)},corners:function(c){if(0===c.length)return[!1,!1,!1,!1];var d=a(b),e=d.height()/2,f=Math.ceil(this.settings.$target.offset().top-e+this.settings.$next_tip.outerHeight()),g=d.width()+d.scrollLeft(),h=d.height()+f,i=d.height()+d.scrollTop(),j=d.scrollTop();return j>f&&(j=0>f?0:f),h>i&&(i=h),[c.offset().top<j,g<c.offset().left+c.outerWidth(),i<c.offset().top+c.outerHeight(),d.scrollLeft()>c.offset().left]},visible:function(a){for(var b=a.length;b--;)if(a[b])return!1;return!0},nub_position:function(a,b,c){"auto"===b?a.addClass(c):a.addClass(b)},startTimer:function(){this.settings.$li.length?this.settings.automate=setTimeout(function(){this.hide(),this.show(),this.startTimer()}.bind(this),this.settings.timer):clearTimeout(this.settings.automate)},end:function(b){this.settings.cookie_monster&&a.cookie(this.settings.cookie_name,"ridden",{expires:this.settings.cookie_expires,domain:this.settings.cookie_domain}),this.settings.timer>0&&clearTimeout(this.settings.automate),this.settings.modal&&this.settings.expose&&this.un_expose(),a(this.scope).off("keyup.joyride"),this.settings.$next_tip.data("closed",!0),this.settings.riding=!1,a(".joyride-modal-bg").hide(),this.settings.$current_tip.hide(),("undefined"==typeof b||b===!1)&&(this.settings.post_step_callback(this.settings.$li.index(),this.settings.$current_tip),this.settings.post_ride_callback(this.settings.$li.index(),this.settings.$current_tip)),a(".joyride-tip-guide").remove()},off:function(){a(this.scope).off(".joyride"),a(b).off(".joyride"),a(".joyride-close-tip, .joyride-next-tip, .joyride-modal-bg").off(".joyride"),a(".joyride-tip-guide, .joyride-modal-bg").remove(),clearTimeout(this.settings.automate)},reflow:function(){}}}(jQuery,window,window.document),function(a,b,c,d){"use strict";Foundation.libs["magellan-expedition"]={name:"magellan-expedition",version:"5.5.3",settings:{active_class:"active",threshold:0,destination_threshold:20,throttle_delay:30,fixed_top:0,offset_by_height:!0,duration:700,easing:"swing"},init:function(a,b,c){Foundation.inherit(this,"throttle"),this.bindings(b,c)},events:function(){var b=this,c=b.S,d=b.settings;b.set_expedition_position(),c(b.scope).off(".magellan").on("click.fndtn.magellan","["+b.add_namespace("data-magellan-arrival")+"] a[href*=#]",function(c){var d=this.hostname===location.hostname||!this.hostname,e=b.filterPathname(location.pathname)===b.filterPathname(this.pathname),f=this.hash.replace(/(:|\.|\/)/g,"\\$1"),g=this;if(d&&e&&f){c.preventDefault();var h=a(this).closest("["+b.attr_name()+"]"),i=h.data("magellan-expedition-init"),j=this.hash.split("#").join(""),k=a('a[name="'+j+'"]');0===k.length&&(k=a("#"+j));var l=k.offset().top-i.destination_threshold+1;i.offset_by_height&&(l-=h.outerHeight()),a("html, body").stop().animate({scrollTop:l},i.duration,i.easing,function(){history.pushState?history.pushState(null,null,g.pathname+g.search+"#"+j):location.hash=g.pathname+g.search+"#"+j})}}).on("scroll.fndtn.magellan",b.throttle(this.check_for_arrivals.bind(this),d.throttle_delay))},check_for_arrivals:function(){var a=this;a.update_arrivals(),a.update_expedition_positions()},set_expedition_position:function(){var b=this;a("["+this.attr_name()+"=fixed]",b.scope).each(function(c,d){var e,f,g=a(this),h=g.data("magellan-expedition-init"),i=g.attr("styles");g.attr("style",""),e=g.offset().top+h.threshold,f=parseInt(g.data("magellan-fixed-top")),isNaN(f)||(b.settings.fixed_top=f),g.data(b.data_attr("magellan-top-offset"),e),g.attr("style",i)})},update_expedition_positions:function(){var c=this,d=a(b).scrollTop();a("["+this.attr_name()+"=fixed]",c.scope).each(function(){var b=a(this),e=b.data("magellan-expedition-init"),f=b.attr("style"),g=b.data("magellan-top-offset");if(d+c.settings.fixed_top>=g){var h=b.prev("["+c.add_namespace("data-magellan-expedition-clone")+"]");0===h.length&&(h=b.clone(),h.removeAttr(c.attr_name()),h.attr(c.add_namespace("data-magellan-expedition-clone"),""),b.before(h)),b.css({position:"fixed",top:e.fixed_top}).addClass("fixed")}else b.prev("["+c.add_namespace("data-magellan-expedition-clone")+"]").remove(),b.attr("style",f).css("position","").css("top","").removeClass("fixed")})},update_arrivals:function(){var c=this,d=a(b).scrollTop();a("["+this.attr_name()+"]",c.scope).each(function(){var b=a(this),e=b.data(c.attr_name(!0)+"-init"),f=c.offsets(b,d),g=b.find("["+c.add_namespace("data-magellan-arrival")+"]"),h=!1;f.each(function(a,d){if(d.viewport_offset>=d.top_offset){var f=b.find("["+c.add_namespace("data-magellan-arrival")+"]");return f.not(d.arrival).removeClass(e.active_class),d.arrival.addClass(e.active_class),h=!0,!0}}),h||g.removeClass(e.active_class)})},offsets:function(b,c){var d=this,e=b.data(d.attr_name(!0)+"-init"),f=c;return b.find("["+d.add_namespace("data-magellan-arrival")+"]").map(function(c,g){var h=a(this).data(d.data_attr("magellan-arrival")),i=a("["+d.add_namespace("data-magellan-destination")+"="+h+"]");if(i.length>0){var j=i.offset().top-e.destination_threshold;return e.offset_by_height&&(j-=b.outerHeight()),j=Math.floor(j),{destination:i,arrival:a(this),top_offset:j,viewport_offset:f}}}).sort(function(a,b){return a.top_offset<b.top_offset?-1:a.top_offset>b.top_offset?1:0})},data_attr:function(a){return this.namespace.length>0?this.namespace+"-"+a:a},off:function(){this.S(this.scope).off(".magellan"),this.S(b).off(".magellan")},filterPathname:function(a){return a=a||"",a.replace(/^\//,"").replace(/(?:index|default).[a-zA-Z]{3,4}$/,"").replace(/\/$/,"")},reflow:function(){var b=this;a("["+b.add_namespace("data-magellan-expedition-clone")+"]",b.scope).remove()}}}(jQuery,window,window.document),function(a,b,c,d){"use strict";Foundation.libs.offcanvas={name:"offcanvas",version:"5.5.3",settings:{open_method:"move",close_on_click:!1},init:function(a,b,c){this.bindings(b,c)},events:function(){var b=this,c=b.S,d="",e="",f="",g="",h="";"move"===this.settings.open_method?(d="move-",e="right",f="left",g="top",h="bottom"):"overlap_single"===this.settings.open_method?(d="offcanvas-overlap-",e="right",f="left",g="top",h="bottom"):"overlap"===this.settings.open_method&&(d="offcanvas-overlap"),c(this.scope).off(".offcanvas").on("click.fndtn.offcanvas",".left-off-canvas-toggle",function(f){b.click_toggle_class(f,d+e),"overlap"!==b.settings.open_method&&c(".left-submenu").removeClass(d+e),a(".left-off-canvas-toggle").attr("aria-expanded","true")}).on("click.fndtn.offcanvas",".left-off-canvas-menu a",function(f){var g=b.get_settings(f),h=c(this).parent();!g.close_on_click||h.hasClass("has-submenu")||h.hasClass("back")?c(this).parent().hasClass("has-submenu")?(f.preventDefault(),c(this).siblings(".left-submenu").toggleClass(d+e)):h.hasClass("back")&&(f.preventDefault(),h.parent().removeClass(d+e)):(b.hide.call(b,d+e,b.get_wrapper(f)),h.parent().removeClass(d+e)),a(".left-off-canvas-toggle").attr("aria-expanded","true")}).on("click.fndtn.offcanvas",".right-off-canvas-toggle",function(e){b.click_toggle_class(e,d+f),"overlap"!==b.settings.open_method&&c(".right-submenu").removeClass(d+f),a(".right-off-canvas-toggle").attr("aria-expanded","true")}).on("click.fndtn.offcanvas",".right-off-canvas-menu a",function(e){var g=b.get_settings(e),h=c(this).parent();!g.close_on_click||h.hasClass("has-submenu")||h.hasClass("back")?c(this).parent().hasClass("has-submenu")?(e.preventDefault(),c(this).siblings(".right-submenu").toggleClass(d+f)):h.hasClass("back")&&(e.preventDefault(),h.parent().removeClass(d+f)):(b.hide.call(b,d+f,b.get_wrapper(e)),h.parent().removeClass(d+f)),a(".right-off-canvas-toggle").attr("aria-expanded","true");
+}).on("click.fndtn.offcanvas",".top-off-canvas-toggle",function(e){b.click_toggle_class(e,d+h),"overlap"!==b.settings.open_method&&c(".top-submenu").removeClass(d+h),a(".top-off-canvas-toggle").attr("aria-expanded","true")}).on("click.fndtn.offcanvas",".top-off-canvas-menu a",function(e){var f=b.get_settings(e),g=c(this).parent();!f.close_on_click||g.hasClass("has-submenu")||g.hasClass("back")?c(this).parent().hasClass("has-submenu")?(e.preventDefault(),c(this).siblings(".top-submenu").toggleClass(d+h)):g.hasClass("back")&&(e.preventDefault(),g.parent().removeClass(d+h)):(b.hide.call(b,d+h,b.get_wrapper(e)),g.parent().removeClass(d+h)),a(".top-off-canvas-toggle").attr("aria-expanded","true")}).on("click.fndtn.offcanvas",".bottom-off-canvas-toggle",function(e){b.click_toggle_class(e,d+g),"overlap"!==b.settings.open_method&&c(".bottom-submenu").removeClass(d+g),a(".bottom-off-canvas-toggle").attr("aria-expanded","true")}).on("click.fndtn.offcanvas",".bottom-off-canvas-menu a",function(e){var f=b.get_settings(e),h=c(this).parent();!f.close_on_click||h.hasClass("has-submenu")||h.hasClass("back")?c(this).parent().hasClass("has-submenu")?(e.preventDefault(),c(this).siblings(".bottom-submenu").toggleClass(d+g)):h.hasClass("back")&&(e.preventDefault(),h.parent().removeClass(d+g)):(b.hide.call(b,d+g,b.get_wrapper(e)),h.parent().removeClass(d+g)),a(".bottom-off-canvas-toggle").attr("aria-expanded","true")}).on("click.fndtn.offcanvas",".exit-off-canvas",function(g){b.click_remove_class(g,d+f),c(".right-submenu").removeClass(d+f),e&&(b.click_remove_class(g,d+e),c(".left-submenu").removeClass(d+f)),a(".right-off-canvas-toggle").attr("aria-expanded","true")}).on("click.fndtn.offcanvas",".exit-off-canvas",function(c){b.click_remove_class(c,d+f),a(".left-off-canvas-toggle").attr("aria-expanded","false"),e&&(b.click_remove_class(c,d+e),a(".right-off-canvas-toggle").attr("aria-expanded","false"))}).on("click.fndtn.offcanvas",".exit-off-canvas",function(e){b.click_remove_class(e,d+g),c(".bottom-submenu").removeClass(d+g),h&&(b.click_remove_class(e,d+h),c(".top-submenu").removeClass(d+g)),a(".bottom-off-canvas-toggle").attr("aria-expanded","true")}).on("click.fndtn.offcanvas",".exit-off-canvas",function(c){b.click_remove_class(c,d+g),a(".top-off-canvas-toggle").attr("aria-expanded","false"),h&&(b.click_remove_class(c,d+h),a(".bottom-off-canvas-toggle").attr("aria-expanded","false"))})},toggle:function(a,b){b=b||this.get_wrapper(),b.is("."+a)?this.hide(a,b):this.show(a,b)},show:function(a,b){b=b||this.get_wrapper(),b.trigger("open.fndtn.offcanvas"),b.addClass(a)},hide:function(a,b){b=b||this.get_wrapper(),b.trigger("close.fndtn.offcanvas"),b.removeClass(a)},click_toggle_class:function(a,b){a.preventDefault();var c=this.get_wrapper(a);this.toggle(b,c)},click_remove_class:function(a,b){a.preventDefault();var c=this.get_wrapper(a);this.hide(b,c)},get_settings:function(a){var b=this.S(a.target).closest("["+this.attr_name()+"]");return b.data(this.attr_name(!0)+"-init")||this.settings},get_wrapper:function(a){var b=this.S(a?a.target:this.scope).closest(".off-canvas-wrap");return 0===b.length&&(b=this.S(".off-canvas-wrap")),b},reflow:function(){}}}(jQuery,window,window.document),function(a,b,c,d){"use strict";var e=function(){},f=function(e,f){if(e.hasClass(f.slides_container_class))return this;var j,k,l,m,n,o,p=this,q=e,r=0,s=!1;p.slides=function(){return q.children(f.slide_selector)},p.slides().first().addClass(f.active_slide_class),p.update_slide_number=function(b){f.slide_number&&(k.find("span:first").text(parseInt(b)+1),k.find("span:last").text(p.slides().length)),f.bullets&&(l.children().removeClass(f.bullets_active_class),a(l.children().get(b)).addClass(f.bullets_active_class))},p.update_active_link=function(b){var c=a('[data-orbit-link="'+p.slides().eq(b).attr("data-orbit-slide")+'"]');c.siblings().removeClass(f.bullets_active_class),c.addClass(f.bullets_active_class)},p.build_markup=function(){q.wrap('<div class="'+f.container_class+'"></div>'),j=q.parent(),q.addClass(f.slides_container_class),f.stack_on_small&&j.addClass(f.stack_on_small_class),f.navigation_arrows&&(j.append(a('<a href="#"><span></span></a>').addClass(f.prev_class)),j.append(a('<a href="#"><span></span></a>').addClass(f.next_class))),f.timer&&(m=a("<div>").addClass(f.timer_container_class),m.append("<span>"),m.append(a("<div>").addClass(f.timer_progress_class)),m.addClass(f.timer_paused_class),j.append(m)),f.slide_number&&(k=a("<div>").addClass(f.slide_number_class),k.append("<span></span> "+f.slide_number_text+" <span></span>"),j.append(k)),f.bullets&&(l=a("<ol>").addClass(f.bullets_container_class),j.append(l),l.wrap('<div class="orbit-bullets-container"></div>'),p.slides().each(function(b,c){var d=a("<li>").attr("data-orbit-slide",b).on("click",p.link_bullet);l.append(d)}))},p._goto=function(b,c){if(b===r)return!1;"object"==typeof o&&o.restart();var d=p.slides(),e="next";if(s=!0,r>b&&(e="prev"),b>=d.length){if(!f.circular)return!1;b=0}else if(0>b){if(!f.circular)return!1;b=d.length-1}var g=a(d.get(r)),h=a(d.get(b));g.css("zIndex",2),g.removeClass(f.active_slide_class),h.css("zIndex",4).addClass(f.active_slide_class),q.trigger("before-slide-change.fndtn.orbit"),f.before_slide_change(),p.update_active_link(b);var i=function(){var a=function(){r=b,s=!1,c===!0&&(o=p.create_timer(),o.start()),p.update_slide_number(r),q.trigger("after-slide-change.fndtn.orbit",[{slide_number:r,total_slides:d.length}]),f.after_slide_change(r,d.length)};q.outerHeight()!=h.outerHeight()&&f.variable_height?q.animate({height:h.outerHeight()},250,"linear",a):a()};if(1===d.length)return i(),!1;var j=function(){"next"===e&&n.next(g,h,i),"prev"===e&&n.prev(g,h,i)};h.outerHeight()>q.outerHeight()&&f.variable_height?q.animate({height:h.outerHeight()},250,"linear",j):j()},p.next=function(a){a.stopImmediatePropagation(),a.preventDefault(),p._goto(r+1)},p.prev=function(a){a.stopImmediatePropagation(),a.preventDefault(),p._goto(r-1)},p.link_custom=function(b){b.preventDefault();var c=a(this).attr("data-orbit-link");if("string"==typeof c&&""!=(c=a.trim(c))){var d=j.find("[data-orbit-slide="+c+"]");-1!=d.index()&&p._goto(d.index())}},p.link_bullet=function(b){var c=a(this).attr("data-orbit-slide");if("string"==typeof c&&""!=(c=a.trim(c)))if(isNaN(parseInt(c))){var d=j.find("[data-orbit-slide="+c+"]");-1!=d.index()&&p._goto(d.index()+1)}else p._goto(parseInt(c))},p.timer_callback=function(){p._goto(r+1,!0)},p.compute_dimensions=function(){var b=a(p.slides().get(r)),c=b.outerHeight();f.variable_height||p.slides().each(function(){a(this).outerHeight()>c&&(c=a(this).outerHeight())}),q.height(c)},p.create_timer=function(){var a=new g(j.find("."+f.timer_container_class),f,p.timer_callback);return a},p.stop_timer=function(){"object"==typeof o&&o.stop()},p.toggle_timer=function(){var a=j.find("."+f.timer_container_class);a.hasClass(f.timer_paused_class)?("undefined"==typeof o&&(o=p.create_timer()),o.start()):"object"==typeof o&&o.stop()},p.init=function(){p.build_markup(),f.timer&&(o=p.create_timer(),Foundation.utils.image_loaded(this.slides().children("img"),o.start)),n=new i(f,q),"slide"===f.animation&&(n=new h(f,q)),j.on("click","."+f.next_class,p.next),j.on("click","."+f.prev_class,p.prev),f.next_on_click&&j.on("click","."+f.slides_container_class+" [data-orbit-slide]",p.link_bullet),j.on("click",p.toggle_timer),f.swipe&&j.on("touchstart.fndtn.orbit",function(a){a.touches||(a=a.originalEvent);var b={start_page_x:a.touches[0].pageX,start_page_y:a.touches[0].pageY,start_time:(new Date).getTime(),delta_x:0,is_scrolling:d};j.data("swipe-transition",b),a.stopPropagation()}).on("touchmove.fndtn.orbit",function(a){if(a.touches||(a=a.originalEvent),!(a.touches.length>1||a.scale&&1!==a.scale)){var b=j.data("swipe-transition");if("undefined"==typeof b&&(b={}),b.delta_x=a.touches[0].pageX-b.start_page_x,"undefined"==typeof b.is_scrolling&&(b.is_scrolling=!!(b.is_scrolling||Math.abs(b.delta_x)<Math.abs(a.touches[0].pageY-b.start_page_y))),!b.is_scrolling&&!b.active){a.preventDefault();var c=b.delta_x<0?r+1:r-1;b.active=!0,p._goto(c)}}}).on("touchend.fndtn.orbit",function(a){j.data("swipe-transition",{}),a.stopPropagation()}),j.on("mouseenter.fndtn.orbit",function(a){f.timer&&f.pause_on_hover&&p.stop_timer()}).on("mouseleave.fndtn.orbit",function(a){f.timer&&f.resume_on_mouseout&&o.start()}),a(c).on("click","[data-orbit-link]",p.link_custom),a(b).on("load resize",p.compute_dimensions),Foundation.utils.image_loaded(this.slides().children("img"),p.compute_dimensions),Foundation.utils.image_loaded(this.slides().children("img"),function(){j.prev("."+f.preloader_class).css("display","none"),p.update_slide_number(0),p.update_active_link(0),q.trigger("ready.fndtn.orbit")})},p.init()},g=function(a,b,c){var d,e,f=this,g=b.timer_speed,h=a.find("."+b.timer_progress_class),i=-1;this.update_progress=function(a){var b=h.clone();b.attr("style",""),b.css("width",a+"%"),h.replaceWith(b),h=b},this.restart=function(){clearTimeout(e),a.addClass(b.timer_paused_class),i=-1,f.update_progress(0)},this.start=function(){return a.hasClass(b.timer_paused_class)?(i=-1===i?g:i,a.removeClass(b.timer_paused_class),d=(new Date).getTime(),h.animate({width:"100%"},i,"linear"),e=setTimeout(function(){f.restart(),c()},i),void a.trigger("timer-started.fndtn.orbit")):!0},this.stop=function(){if(a.hasClass(b.timer_paused_class))return!0;clearTimeout(e),a.addClass(b.timer_paused_class);var c=(new Date).getTime();i-=c-d;var h=100-i/g*100;f.update_progress(h),a.trigger("timer-stopped.fndtn.orbit")}},h=function(b,c){var d=b.animation_speed,e=1===a("html[dir=rtl]").length,f=e?"marginRight":"marginLeft",g={};g[f]="0%",this.next=function(a,b,c){a.animate({marginLeft:"-100%"},d),b.animate(g,d,function(){a.css(f,"100%"),c()})},this.prev=function(a,b,c){a.animate({marginLeft:"100%"},d),b.css(f,"-100%"),b.animate(g,d,function(){a.css(f,"100%"),c()})}},i=function(b,c){var d=b.animation_speed;1===a("html[dir=rtl]").length;this.next=function(a,b,c){b.css({margin:"0%",opacity:"0.01"}),b.animate({opacity:"1"},d,"linear",function(){a.css("margin","100%"),c()})},this.prev=function(a,b,c){b.css({margin:"0%",opacity:"0.01"}),b.animate({opacity:"1"},d,"linear",function(){a.css("margin","100%"),c()})}};Foundation.libs=Foundation.libs||{},Foundation.libs.orbit={name:"orbit",version:"5.5.3",settings:{animation:"slide",timer_speed:1e4,pause_on_hover:!0,resume_on_mouseout:!1,next_on_click:!0,animation_speed:500,stack_on_small:!1,navigation_arrows:!0,slide_number:!0,slide_number_text:"of",container_class:"orbit-container",stack_on_small_class:"orbit-stack-on-small",next_class:"orbit-next",prev_class:"orbit-prev",timer_container_class:"orbit-timer",timer_paused_class:"paused",timer_progress_class:"orbit-progress",slides_container_class:"orbit-slides-container",preloader_class:"preloader",slide_selector:"*",bullets_container_class:"orbit-bullets",bullets_active_class:"active",slide_number_class:"orbit-slide-number",caption_class:"orbit-caption",active_slide_class:"active",orbit_transition_class:"orbit-transitioning",bullets:!0,circular:!0,timer:!0,variable_height:!1,swipe:!0,before_slide_change:e,after_slide_change:e},init:function(a,b,c){this.bindings(b,c)},events:function(a){var b=new f(this.S(a),this.S(a).data("orbit-init"));this.S(a).data(this.name+"-instance",b)},reflow:function(){var a=this;if(a.S(a.scope).is("[data-orbit]")){var b=a.S(a.scope),c=b.data(a.name+"-instance");c.compute_dimensions()}else a.S("[data-orbit]",a.scope).each(function(b,c){var d=a.S(c),e=(a.data_options(d),d.data(a.name+"-instance"));e.compute_dimensions()})}}}(jQuery,window,window.document),function(a,b,c,d){"use strict";function e(a){var b=/fade/i.test(a),c=/pop/i.test(a);return{animate:b||c,pop:c,fade:b}}var f=[];Foundation.libs.reveal={name:"reveal",version:"5.5.3",locked:!1,settings:{animation:"fadeAndPop",animation_speed:250,close_on_background_click:!0,close_on_esc:!0,dismiss_modal_class:"close-reveal-modal",multiple_opened:!1,bg_class:"reveal-modal-bg",root_element:"body",open:function(){},opened:function(){},close:function(){},closed:function(){},on_ajax_error:a.noop,bg:a(".reveal-modal-bg"),css:{open:{opacity:0,visibility:"visible",display:"block"},close:{opacity:1,visibility:"hidden",display:"none"}}},init:function(b,c,d){a.extend(!0,this.settings,c,d),this.bindings(c,d)},events:function(a){var b=this,d=b.S;return d(this.scope).off(".reveal").on("click.fndtn.reveal","["+this.add_namespace("data-reveal-id")+"]:not([disabled])",function(a){if(a.preventDefault(),!b.locked){var c=d(this),e=c.data(b.data_attr("reveal-ajax")),f=c.data(b.data_attr("reveal-replace-content"));if(b.locked=!0,"undefined"==typeof e)b.open.call(b,c);else{var g=e===!0?c.attr("href"):e;b.open.call(b,c,{url:g},{replaceContentSel:f})}}}),d(c).on("click.fndtn.reveal",this.close_targets(),function(a){if(a.preventDefault(),!b.locked){var c=d("["+b.attr_name()+"].open").data(b.attr_name(!0)+"-init")||b.settings,e=d(a.target)[0]===d("."+c.bg_class)[0];if(e){if(!c.close_on_background_click)return;a.stopPropagation()}b.locked=!0,b.close.call(b,e?d("["+b.attr_name()+"].open:not(.toback)"):d(this).closest("["+b.attr_name()+"]"))}}),d("["+b.attr_name()+"]",this.scope).length>0?d(this.scope).on("open.fndtn.reveal",this.settings.open).on("opened.fndtn.reveal",this.settings.opened).on("opened.fndtn.reveal",this.open_video).on("close.fndtn.reveal",this.settings.close).on("closed.fndtn.reveal",this.settings.closed).on("closed.fndtn.reveal",this.close_video):d(this.scope).on("open.fndtn.reveal","["+b.attr_name()+"]",this.settings.open).on("opened.fndtn.reveal","["+b.attr_name()+"]",this.settings.opened).on("opened.fndtn.reveal","["+b.attr_name()+"]",this.open_video).on("close.fndtn.reveal","["+b.attr_name()+"]",this.settings.close).on("closed.fndtn.reveal","["+b.attr_name()+"]",this.settings.closed).on("closed.fndtn.reveal","["+b.attr_name()+"]",this.close_video),!0},key_up_on:function(a){var b=this;return b.S("body").off("keyup.fndtn.reveal").on("keyup.fndtn.reveal",function(a){var c=b.S("["+b.attr_name()+"].open"),d=c.data(b.attr_name(!0)+"-init")||b.settings;d&&27===a.which&&d.close_on_esc&&!b.locked&&b.close.call(b,c)}),!0},key_up_off:function(a){return this.S("body").off("keyup.fndtn.reveal"),!0},open:function(c,e){var g,h=this;c?"undefined"!=typeof c.selector?g=h.S("#"+c.data(h.data_attr("reveal-id"))).first():(g=h.S(this.scope),e=c):g=h.S(this.scope);var i=g.data(h.attr_name(!0)+"-init");if(i=i||this.settings,g.hasClass("open")&&c!==d&&c.attr("data-reveal-id")==g.attr("id"))return h.close(g);if(!g.hasClass("open")){var j=h.S("["+h.attr_name()+"].open");"undefined"==typeof g.data("css-top")&&g.data("css-top",parseInt(g.css("top"),10)).data("offset",this.cache_offset(g)),g.attr("tabindex","0").attr("aria-hidden","false"),this.key_up_on(g),g.on("open.fndtn.reveal",function(a){"fndtn.reveal"!==a.namespace}),g.on("open.fndtn.reveal").trigger("open.fndtn.reveal"),j.length<1&&this.toggle_bg(g,!0),"string"==typeof e&&(e={url:e});var k=function(){j.length>0&&(i.multiple_opened?h.to_back(j):h.hide(j,i.css.close)),i.multiple_opened&&f.push(g),h.show(g,i.css.open)};if("undefined"!=typeof e&&e.url){var l="undefined"!=typeof e.success?e.success:null;a.extend(e,{success:function(b,c,d){if(a.isFunction(l)){var e=l(b,c,d);"string"==typeof e&&(b=e)}"undefined"!=typeof options&&"undefined"!=typeof options.replaceContentSel?g.find(options.replaceContentSel).html(b):g.html(b),h.S(g).foundation("section","reflow"),h.S(g).children().foundation(),k()}}),i.on_ajax_error!==a.noop&&a.extend(e,{error:i.on_ajax_error}),a.ajax(e)}else k()}h.S(b).trigger("resize")},close:function(b){var b=b&&b.length?b:this.S(this.scope),c=this.S("["+this.attr_name()+"].open"),d=b.data(this.attr_name(!0)+"-init")||this.settings,e=this;if(c.length>0)if(b.removeAttr("tabindex","0").attr("aria-hidden","true"),this.locked=!0,this.key_up_off(b),b.trigger("close.fndtn.reveal"),(d.multiple_opened&&1===c.length||!d.multiple_opened||b.length>1)&&(e.toggle_bg(b,!1),e.to_front(b)),d.multiple_opened){var g=b.is(":not(.toback)");e.hide(b,d.css.close,d),g?f.pop():f=a.grep(f,function(a){var c=a[0]===b[0];return c&&e.to_front(b),!c}),f.length>0&&e.to_front(f[f.length-1])}else e.hide(c,d.css.close,d)},close_targets:function(){var a="."+this.settings.dismiss_modal_class;return this.settings.close_on_background_click?a+", ."+this.settings.bg_class:a},toggle_bg:function(b,c){0===this.S("."+this.settings.bg_class).length&&(this.settings.bg=a("<div />",{"class":this.settings.bg_class}).appendTo("body").hide());var e=this.settings.bg.filter(":visible").length>0;c!=e&&((c==d?e:!c)?this.hide(this.settings.bg):this.show(this.settings.bg))},show:function(c,d){if(d){var f=c.data(this.attr_name(!0)+"-init")||this.settings,g=f.root_element,h=this;if(0===c.parent(g).length){var i=c.wrap('<div style="display: none;" />').parent();c.on("closed.fndtn.reveal.wrapped",function(){c.detach().appendTo(i),c.unwrap().unbind("closed.fndtn.reveal.wrapped")}),c.detach().appendTo(g)}var j=e(f.animation);if(j.animate||(this.locked=!1),j.pop){d.top=a(b).scrollTop()-c.data("offset")+"px";var k={top:a(b).scrollTop()+c.data("css-top")+"px",opacity:1};return setTimeout(function(){return c.css(d).animate(k,f.animation_speed,"linear",function(){h.locked=!1,c.trigger("opened.fndtn.reveal")}).addClass("open")},f.animation_speed/2)}if(d.top=a(b).scrollTop()+c.data("css-top")+"px",j.fade){var k={opacity:1};return setTimeout(function(){return c.css(d).animate(k,f.animation_speed,"linear",function(){h.locked=!1,c.trigger("opened.fndtn.reveal")}).addClass("open")},f.animation_speed/2)}return c.css(d).show().css({opacity:1}).addClass("open").trigger("opened.fndtn.reveal")}var f=this.settings;return e(f.animation).fade?c.fadeIn(f.animation_speed/2):(this.locked=!1,c.show())},to_back:function(a){a.addClass("toback")},to_front:function(a){a.removeClass("toback")},hide:function(c,d){if(d){var f=c.data(this.attr_name(!0)+"-init"),g=this;f=f||this.settings;var h=e(f.animation);if(h.animate||(this.locked=!1),h.pop){var i={top:-a(b).scrollTop()-c.data("offset")+"px",opacity:0};return setTimeout(function(){return c.animate(i,f.animation_speed,"linear",function(){g.locked=!1,c.css(d).trigger("closed.fndtn.reveal")}).removeClass("open")},f.animation_speed/2)}if(h.fade){var i={opacity:0};return setTimeout(function(){return c.animate(i,f.animation_speed,"linear",function(){g.locked=!1,c.css(d).trigger("closed.fndtn.reveal")}).removeClass("open")},f.animation_speed/2)}return c.hide().css(d).removeClass("open").trigger("closed.fndtn.reveal")}var f=this.settings;return e(f.animation).fade?c.fadeOut(f.animation_speed/2):c.hide()},close_video:function(b){var c=a(".flex-video",b.target),d=a("iframe",c);d.length>0&&(d.attr("data-src",d[0].src),d.attr("src",d.attr("src")),c.hide())},open_video:function(b){var c=a(".flex-video",b.target),e=c.find("iframe");if(e.length>0){var f=e.attr("data-src");if("string"==typeof f)e[0].src=e.attr("data-src");else{var g=e[0].src;e[0].src=d,e[0].src=g}c.show()}},data_attr:function(a){return this.namespace.length>0?this.namespace+"-"+a:a},cache_offset:function(a){var b=a.show().height()+parseInt(a.css("top"),10)+a.scrollY;return a.hide(),b},off:function(){a(this.scope).off(".fndtn.reveal")},reflow:function(){}}}(jQuery,window,window.document),function(a,b,c,d){"use strict";Foundation.libs.slider={name:"slider",version:"5.5.3",settings:{start:0,end:100,step:1,precision:2,initial:null,display_selector:"",vertical:!1,trigger_input_change:!1,on_change:function(){}},cache:{},init:function(a,b,c){Foundation.inherit(this,"throttle"),this.bindings(b,c),this.reflow()},events:function(){var c=this;a(this.scope).off(".slider").on("mousedown.fndtn.slider touchstart.fndtn.slider pointerdown.fndtn.slider","["+c.attr_name()+"]:not(.disabled, [disabled]) .range-slider-handle",function(b){c.cache.active||(b.preventDefault(),c.set_active_slider(a(b.target)))}).on("mousemove.fndtn.slider touchmove.fndtn.slider pointermove.fndtn.slider",function(d){if(c.cache.active)if(d.preventDefault(),a.data(c.cache.active[0],"settings").vertical){var e=0;d.pageY||(e=b.scrollY),c.calculate_position(c.cache.active,c.get_cursor_position(d,"y")+e)}else c.calculate_position(c.cache.active,c.get_cursor_position(d,"x"))}).on("mouseup.fndtn.slider touchend.fndtn.slider pointerup.fndtn.slider",function(d){if(!c.cache.active){var e="slider"===a(d.target).attr("role")?a(d.target):a(d.target).closest(".range-slider").find("[role='slider']");if(e.length&&!e.parent().hasClass("disabled")&&!e.parent().attr("disabled"))if(c.set_active_slider(e),a.data(c.cache.active[0],"settings").vertical){var f=0;d.pageY||(f=b.scrollY),c.calculate_position(c.cache.active,c.get_cursor_position(d,"y")+f)}else c.calculate_position(c.cache.active,c.get_cursor_position(d,"x"))}c.remove_active_slider()}).on("change.fndtn.slider",function(a){c.settings.on_change()}),c.S(b).on("resize.fndtn.slider",c.throttle(function(a){c.reflow()},300)),this.S("["+this.attr_name()+"]").each(function(){var b=a(this),d=b.children(".range-slider-handle")[0],e=c.initialize_settings(d);""!=e.display_selector&&a(e.display_selector).each(function(){a(this).attr("value")&&a(this).off("change").on("change",function(){b.foundation("slider","set_value",a(this).val())})})})},get_cursor_position:function(a,b){var c,d="page"+b.toUpperCase(),e="client"+b.toUpperCase();return"undefined"!=typeof a[d]?c=a[d]:"undefined"!=typeof a.originalEvent[e]?c=a.originalEvent[e]:a.originalEvent.touches&&a.originalEvent.touches[0]&&"undefined"!=typeof a.originalEvent.touches[0][e]?c=a.originalEvent.touches[0][e]:a.currentPoint&&"undefined"!=typeof a.currentPoint[b]&&(c=a.currentPoint[b]),c},set_active_slider:function(a){this.cache.active=a},remove_active_slider:function(){this.cache.active=null},calculate_position:function(b,c){var d=this,e=a.data(b[0],"settings"),f=(a.data(b[0],"handle_l"),a.data(b[0],"handle_o"),a.data(b[0],"bar_l")),g=a.data(b[0],"bar_o");requestAnimationFrame(function(){var a;a=Foundation.rtl&&!e.vertical?d.limit_to((g+f-c)/f,0,1):d.limit_to((c-g)/f,0,1),a=e.vertical?1-a:a;var h=d.normalized_value(a,e.start,e.end,e.step,e.precision);d.set_ui(b,h)})},set_ui:function(b,c){var d=a.data(b[0],"settings"),e=a.data(b[0],"handle_l"),f=a.data(b[0],"bar_l"),g=this.normalized_percentage(c,d.start,d.end),h=g*(f-e)-1,i=100*g,j=b.parent(),k=b.parent().children("input[type=hidden]");Foundation.rtl&&!d.vertical&&(h=-h),h=d.vertical?-h+f-e+1:h,this.set_translate(b,h,d.vertical),d.vertical?b.siblings(".range-slider-active-segment").css("height",i+"%"):b.siblings(".range-slider-active-segment").css("width",i+"%"),j.attr(this.attr_name(),c).trigger("change.fndtn.slider"),k.val(c),d.trigger_input_change&&k.trigger("change.fndtn.slider"),b[0].hasAttribute("aria-valuemin")||b.attr({"aria-valuemin":d.start,"aria-valuemax":d.end}),b.attr("aria-valuenow",c),""!=d.display_selector&&a(d.display_selector).each(function(){this.hasAttribute("value")?a(this).val(c):a(this).text(c)})},normalized_percentage:function(a,b,c){return Math.min(1,(a-b)/(c-b))},normalized_value:function(a,b,c,d,e){var f=c-b,g=a*f,h=(g-g%d)/d,i=g%d,j=i>=.5*d?d:0;return(h*d+j+b).toFixed(e)},set_translate:function(b,c,d){d?a(b).css("-webkit-transform","translateY("+c+"px)").css("-moz-transform","translateY("+c+"px)").css("-ms-transform","translateY("+c+"px)").css("-o-transform","translateY("+c+"px)").css("transform","translateY("+c+"px)"):a(b).css("-webkit-transform","translateX("+c+"px)").css("-moz-transform","translateX("+c+"px)").css("-ms-transform","translateX("+c+"px)").css("-o-transform","translateX("+c+"px)").css("transform","translateX("+c+"px)")},limit_to:function(a,b,c){return Math.min(Math.max(a,b),c)},initialize_settings:function(b){var c,d=a.extend({},this.settings,this.data_options(a(b).parent()));return null===d.precision&&(c=(""+d.step).match(/\.([\d]*)/),d.precision=c&&c[1]?c[1].length:0),d.vertical?(a.data(b,"bar_o",a(b).parent().offset().top),a.data(b,"bar_l",a(b).parent().outerHeight()),a.data(b,"handle_o",a(b).offset().top),a.data(b,"handle_l",a(b).outerHeight())):(a.data(b,"bar_o",a(b).parent().offset().left),a.data(b,"bar_l",a(b).parent().outerWidth()),a.data(b,"handle_o",a(b).offset().left),a.data(b,"handle_l",a(b).outerWidth())),a.data(b,"bar",a(b).parent()),a.data(b,"settings",d)},set_initial_position:function(b){var c=a.data(b.children(".range-slider-handle")[0],"settings"),d="number"!=typeof c.initial||isNaN(c.initial)?Math.floor(.5*(c.end-c.start)/c.step)*c.step+c.start:c.initial,e=b.children(".range-slider-handle");this.set_ui(e,d)},set_value:function(b){var c=this;a("["+c.attr_name()+"]",this.scope).each(function(){a(this).attr(c.attr_name(),b)}),a(this.scope).attr(c.attr_name())&&a(this.scope).attr(c.attr_name(),b),c.reflow()},reflow:function(){var b=this;b.S("["+this.attr_name()+"]").each(function(){var c=a(this).children(".range-slider-handle")[0],d=a(this).attr(b.attr_name());b.initialize_settings(c),d?b.set_ui(a(c),parseFloat(d)):b.set_initial_position(a(this))})}}}(jQuery,window,window.document),function(a,b,c,d){"use strict";Foundation.libs.tab={name:"tab",version:"5.5.3",settings:{active_class:"active",callback:function(){},deep_linking:!1,scroll_to_content:!0,is_hover:!1},default_tab_hashes:[],init:function(a,b,c){var d=this,e=this.S;e("["+this.attr_name()+"] > .active > a",this.scope).each(function(){d.default_tab_hashes.push(this.hash)}),this.bindings(b,c),this.handle_location_hash_change()},events:function(){var a=this,c=this.S,d=function(b,d){var e=c(d).closest("["+a.attr_name()+"]").data(a.attr_name(!0)+"-init");if(!e.is_hover||Modernizr.touch){var f=b.keyCode||b.which;9!==f&&(b.preventDefault(),b.stopPropagation()),a.toggle_active_tab(c(d).parent())}};c(this.scope).off(".tab").on("keydown.fndtn.tab","["+this.attr_name()+"] > * > a",function(a){var b=a.keyCode||a.which;if(13===b||32===b){var c=this;d(a,c)}}).on("click.fndtn.tab","["+this.attr_name()+"] > * > a",function(a){var b=this;d(a,b)}).on("mouseenter.fndtn.tab","["+this.attr_name()+"] > * > a",function(b){var d=c(this).closest("["+a.attr_name()+"]").data(a.attr_name(!0)+"-init");d.is_hover&&a.toggle_active_tab(c(this).parent())}),c(b).on("hashchange.fndtn.tab",function(b){b.preventDefault(),a.handle_location_hash_change()})},handle_location_hash_change:function(){var b=this,c=this.S;c("["+this.attr_name()+"]",this.scope).each(function(){var e=c(this).data(b.attr_name(!0)+"-init");if(e.deep_linking){var f;if(f=e.scroll_to_content?b.scope.location.hash:b.scope.location.hash.replace("fndtn-",""),""!=f){var g=c(f);if(g.hasClass("content")&&g.parent().hasClass("tabs-content"))b.toggle_active_tab(a("["+b.attr_name()+"] > * > a[href="+f+"]").parent());else{var h=g.closest(".content").attr("id");h!=d&&b.toggle_active_tab(a("["+b.attr_name()+"] > * > a[href=#"+h+"]").parent(),f)}}else for(var i=0;i<b.default_tab_hashes.length;i++)b.toggle_active_tab(a("["+b.attr_name()+"] > * > a[href="+b.default_tab_hashes[i]+"]").parent())}})},toggle_active_tab:function(e,f){var g=this,h=g.S,i=e.closest("["+this.attr_name()+"]"),j=e.find("a"),k=e.children("a").first(),l="#"+k.attr("href").split("#")[1],m=h(l),n=e.siblings(),o=i.data(this.attr_name(!0)+"-init"),p=function(b){var d,e=a(this),f=a(this).parents("li").prev().children('[role="tab"]'),g=a(this).parents("li").next().children('[role="tab"]');switch(b.keyCode){case 37:d=f;break;case 39:d=g;break;default:d=!1}d.length&&(e.attr({tabindex:"-1","aria-selected":null}),d.attr({tabindex:"0","aria-selected":!0}).focus()),a('[role="tabpanel"]').attr("aria-hidden","true"),a("#"+a(c.activeElement).attr("href").substring(1)).attr("aria-hidden",null)},q=function(a){var c=o.scroll_to_content?g.default_tab_hashes[0]:"fndtn-"+g.default_tab_hashes[0].replace("#","");(a!==c||b.location.hash)&&(b.location.hash=a)};k.data("tab-content")&&(l="#"+k.data("tab-content").split("#")[1],m=h(l)),o.deep_linking&&(o.scroll_to_content?(q(f||l),f==d||f==l?e.parent()[0].scrollIntoView():h(l)[0].scrollIntoView()):q(f!=d?"fndtn-"+f.replace("#",""):"fndtn-"+l.replace("#",""))),e.addClass(o.active_class).triggerHandler("opened"),j.attr({"aria-selected":"true",tabindex:0}),n.removeClass(o.active_class),n.find("a").attr({"aria-selected":"false"}),m.siblings().removeClass(o.active_class).attr({"aria-hidden":"true"}),m.addClass(o.active_class).attr("aria-hidden","false").removeAttr("tabindex"),o.callback(e),m.triggerHandler("toggled",[m]),i.triggerHandler("toggled",[e]),j.off("keydown").on("keydown",p)},data_attr:function(a){return this.namespace.length>0?this.namespace+"-"+a:a},off:function(){},reflow:function(){}}}(jQuery,window,window.document),function(a,b,c,d){"use strict";Foundation.libs.tooltip={name:"tooltip",version:"5.5.3",settings:{additional_inheritable_classes:[],tooltip_class:".tooltip",append_to:"body",touch_close_text:"Tap To Close",disable_for_touch:!1,hover_delay:200,fade_in_duration:150,fade_out_duration:150,show_on:"all",tip_template:function(a,b){return'<span data-selector="'+a+'" id="'+a+'" class="'+Foundation.libs.tooltip.settings.tooltip_class.substring(1)+'" role="tooltip">'+b+'<span class="nub"></span></span>'}},cache:{},init:function(a,b,c){Foundation.inherit(this,"random_str"),this.bindings(b,c)},should_show:function(b,c){var d=a.extend({},this.settings,this.data_options(b));return"all"===d.show_on?!0:this.small()&&"small"===d.show_on?!0:this.medium()&&"medium"===d.show_on?!0:this.large()&&"large"===d.show_on?!0:!1},medium:function(){return matchMedia(Foundation.media_queries.medium).matches},large:function(){return matchMedia(Foundation.media_queries.large).matches},events:function(b){function c(a,b,c){a.timer||(c?(a.timer=null,e.showTip(b)):a.timer=setTimeout(function(){a.timer=null,e.showTip(b)}.bind(a),e.settings.hover_delay))}function d(a,b){a.timer&&(clearTimeout(a.timer),a.timer=null),e.hide(b)}var e=this,f=e.S;e.create(this.S(b)),a(this.scope).off(".tooltip").on("mouseenter.fndtn.tooltip mouseleave.fndtn.tooltip touchstart.fndtn.tooltip MSPointerDown.fndtn.tooltip","["+this.attr_name()+"]",function(b){var g=f(this),h=a.extend({},e.settings,e.data_options(g)),i=!1;if(Modernizr.touch&&/touchstart|MSPointerDown/i.test(b.type)&&f(b.target).is("a"))return!1;if(/mouse/i.test(b.type)&&e.ie_touch(b))return!1;if(g.hasClass("open"))Modernizr.touch&&/touchstart|MSPointerDown/i.test(b.type)&&b.preventDefault(),e.hide(g);else{if(h.disable_for_touch&&Modernizr.touch&&/touchstart|MSPointerDown/i.test(b.type))return;if(!h.disable_for_touch&&Modernizr.touch&&/touchstart|MSPointerDown/i.test(b.type)&&(b.preventDefault(),f(h.tooltip_class+".open").hide(),i=!0,a(".open["+e.attr_name()+"]").length>0)){var j=f(a(".open["+e.attr_name()+"]")[0]);e.hide(j)}/enter|over/i.test(b.type)?c(this,g):"mouseout"===b.type||"mouseleave"===b.type?d(this,g):c(this,g,!0)}}).on("mouseleave.fndtn.tooltip touchstart.fndtn.tooltip MSPointerDown.fndtn.tooltip","["+this.attr_name()+"].open",function(b){return/mouse/i.test(b.type)&&e.ie_touch(b)?!1:void(("touch"!=a(this).data("tooltip-open-event-type")||"mouseleave"!=b.type)&&("mouse"==a(this).data("tooltip-open-event-type")&&/MSPointerDown|touchstart/i.test(b.type)?e.convert_to_touch(a(this)):d(this,a(this))))}).on("DOMNodeRemoved DOMAttrModified","["+this.attr_name()+"]:not(a)",function(a){d(this,f(this))})},ie_touch:function(a){return!1},showTip:function(a){var b=this.getTip(a);return this.should_show(a,b)?this.show(a):void 0},getTip:function(b){var c=this.selector(b),d=a.extend({},this.settings,this.data_options(b)),e=null;return c&&(e=this.S('span[data-selector="'+c+'"]'+d.tooltip_class)),"object"==typeof e?e:!1},selector:function(a){var b=a.attr(this.attr_name())||a.attr("data-selector");return"string"!=typeof b&&(b=this.random_str(6),a.attr("data-selector",b).attr("aria-describedby",b)),b},create:function(c){var d=this,e=a.extend({},this.settings,this.data_options(c)),f=this.settings.tip_template;"string"==typeof e.tip_template&&b.hasOwnProperty(e.tip_template)&&(f=b[e.tip_template]);
+var g=a(f(this.selector(c),a("<div></div>").html(c.attr("title")).html())),h=this.inheritable_classes(c);g.addClass(h).appendTo(e.append_to),Modernizr.touch&&(g.append('<span class="tap-to-close">'+e.touch_close_text+"</span>"),g.on("touchstart.fndtn.tooltip MSPointerDown.fndtn.tooltip",function(a){d.hide(c)})),c.removeAttr("title").attr("title","")},reposition:function(b,c,d){var e,f,g,h,i;c.css("visibility","hidden").show(),e=b.data("width"),f=c.children(".nub"),g=f.outerHeight(),h=f.outerWidth(),this.small()?c.css({width:"100%"}):c.css({width:e?e:"auto"}),i=function(a,b,c,d,e,f){return a.css({top:b?b:"auto",bottom:d?d:"auto",left:e?e:"auto",right:c?c:"auto"}).end()};var j=b.offset().top,k=b.offset().left,l=b.outerHeight();if(i(c,j+l+10,"auto","auto",k),this.small())i(c,j+l+10,"auto","auto",12.5,a(this.scope).width()),c.addClass("tip-override"),i(f,-g,"auto","auto",k);else{Foundation.rtl&&(f.addClass("rtl"),k=k+b.outerWidth()-c.outerWidth()),i(c,j+l+10,"auto","auto",k),f.attr("style")&&f.removeAttr("style"),c.removeClass("tip-override");var m=c.outerHeight();d&&d.indexOf("tip-top")>-1?(Foundation.rtl&&f.addClass("rtl"),i(c,j-m,"auto","auto",k).removeClass("tip-override")):d&&d.indexOf("tip-left")>-1?(i(c,j+l/2-m/2,"auto","auto",k-c.outerWidth()-g).removeClass("tip-override"),f.removeClass("rtl")):d&&d.indexOf("tip-right")>-1&&(i(c,j+l/2-m/2,"auto","auto",k+b.outerWidth()+g).removeClass("tip-override"),f.removeClass("rtl"))}c.css("visibility","visible").hide()},small:function(){return matchMedia(Foundation.media_queries.small).matches&&!matchMedia(Foundation.media_queries.medium).matches},inheritable_classes:function(b){var c=a.extend({},this.settings,this.data_options(b)),d=["tip-top","tip-left","tip-bottom","tip-right","radius","round"].concat(c.additional_inheritable_classes),e=b.attr("class"),f=e?a.map(e.split(" "),function(b,c){return-1!==a.inArray(b,d)?b:void 0}).join(" "):"";return a.trim(f)},convert_to_touch:function(b){var c=this,d=c.getTip(b),e=a.extend({},c.settings,c.data_options(b));0===d.find(".tap-to-close").length&&(d.append('<span class="tap-to-close">'+e.touch_close_text+"</span>"),d.on("click.fndtn.tooltip.tapclose touchstart.fndtn.tooltip.tapclose MSPointerDown.fndtn.tooltip.tapclose",function(a){c.hide(b)})),b.data("tooltip-open-event-type","touch")},show:function(a){var b=this.getTip(a);"touch"==a.data("tooltip-open-event-type")&&this.convert_to_touch(a),this.reposition(a,b,a.attr("class")),a.addClass("open"),b.fadeIn(this.settings.fade_in_duration)},hide:function(a){var b=this.getTip(a);b.fadeOut(this.settings.fade_out_duration,function(){b.find(".tap-to-close").remove(),b.off("click.fndtn.tooltip.tapclose MSPointerDown.fndtn.tapclose"),a.removeClass("open")})},off:function(){var b=this;this.S(this.scope).off(".fndtn.tooltip"),this.S(this.settings.tooltip_class).each(function(c){a("["+b.attr_name()+"]").eq(c).attr("title",a(this).text())}).remove()},reflow:function(){}}}(jQuery,window,window.document),function(a,b,c,d){"use strict";Foundation.libs.topbar={name:"topbar",version:"5.5.3",settings:{index:0,start_offset:0,sticky_class:"sticky",custom_back_text:!0,back_text:"Back",mobile_show_parent_link:!0,is_hover:!0,scrolltop:!0,sticky_on:"all",dropdown_autoclose:!0},init:function(b,c,d){Foundation.inherit(this,"add_custom_rule register_media throttle");var e=this;e.register_media("topbar","foundation-mq-topbar"),this.bindings(c,d),e.S("["+this.attr_name()+"]",this.scope).each(function(){var b=a(this),c=b.data(e.attr_name(!0)+"-init");e.S("section, .top-bar-section",this);b.data("index",0);var d=b.parent();d.hasClass("fixed")||e.is_sticky(b,d,c)?(e.settings.sticky_class=c.sticky_class,e.settings.sticky_topbar=b,b.data("height",d.outerHeight()),b.data("stickyoffset",d.offset().top)):b.data("height",b.outerHeight()),c.assembled||e.assemble(b),c.is_hover?e.S(".has-dropdown",b).addClass("not-click"):e.S(".has-dropdown",b).removeClass("not-click"),e.add_custom_rule(".f-topbar-fixed { padding-top: "+b.data("height")+"px }"),d.hasClass("fixed")&&e.S("body").addClass("f-topbar-fixed")})},is_sticky:function(a,b,c){var d=b.hasClass(c.sticky_class),e=matchMedia(Foundation.media_queries.small).matches,f=matchMedia(Foundation.media_queries.medium).matches,g=matchMedia(Foundation.media_queries.large).matches;return d&&"all"===c.sticky_on?!0:d&&this.small()&&-1!==c.sticky_on.indexOf("small")&&e&&!f&&!g?!0:d&&this.medium()&&-1!==c.sticky_on.indexOf("medium")&&e&&f&&!g?!0:d&&this.large()&&-1!==c.sticky_on.indexOf("large")&&e&&f&&g?!0:!1},toggle:function(c){var d,e=this;d=c?e.S(c).closest("["+this.attr_name()+"]"):e.S("["+this.attr_name()+"]");var f=d.data(this.attr_name(!0)+"-init"),g=e.S("section, .top-bar-section",d);e.breakpoint()&&(e.rtl?(g.css({right:"0%"}),a(">.name",g).css({right:"100%"})):(g.css({left:"0%"}),a(">.name",g).css({left:"100%"})),e.S("li.moved",g).removeClass("moved"),d.data("index",0),d.toggleClass("expanded").css("height","")),f.scrolltop?d.hasClass("expanded")?d.parent().hasClass("fixed")&&(f.scrolltop?(d.parent().removeClass("fixed"),d.addClass("fixed"),e.S("body").removeClass("f-topbar-fixed"),b.scrollTo(0,0)):d.parent().removeClass("expanded")):d.hasClass("fixed")&&(d.parent().addClass("fixed"),d.removeClass("fixed"),e.S("body").addClass("f-topbar-fixed")):(e.is_sticky(d,d.parent(),f)&&d.parent().addClass("fixed"),d.parent().hasClass("fixed")&&(d.hasClass("expanded")?(d.addClass("fixed"),d.parent().addClass("expanded"),e.S("body").addClass("f-topbar-fixed")):(d.removeClass("fixed"),d.parent().removeClass("expanded"),e.update_sticky_positioning())))},timer:null,events:function(c){var d=this,e=this.S;e(this.scope).off(".topbar").on("click.fndtn.topbar","["+this.attr_name()+"] .toggle-topbar",function(a){a.preventDefault(),d.toggle(this)}).on("click.fndtn.topbar contextmenu.fndtn.topbar",'.top-bar .top-bar-section li a[href^="#"],['+this.attr_name()+'] .top-bar-section li a[href^="#"]',function(b){var c=a(this).closest("li"),e=c.closest("["+d.attr_name()+"]"),f=e.data(d.attr_name(!0)+"-init");if(f.dropdown_autoclose&&f.is_hover){var g=a(this).closest(".hover");g.removeClass("hover")}!d.breakpoint()||c.hasClass("back")||c.hasClass("has-dropdown")||d.toggle()}).on("click.fndtn.topbar","["+this.attr_name()+"] li.has-dropdown",function(b){var c=e(this),f=e(b.target),g=c.closest("["+d.attr_name()+"]"),h=g.data(d.attr_name(!0)+"-init");return f.data("revealId")?void d.toggle():void(d.breakpoint()||(!h.is_hover||Modernizr.touch)&&(b.stopImmediatePropagation(),c.hasClass("hover")?(c.removeClass("hover").find("li").removeClass("hover"),c.parents("li.hover").removeClass("hover")):(c.addClass("hover"),a(c).siblings().removeClass("hover"),"A"===f[0].nodeName&&f.parent().hasClass("has-dropdown")&&b.preventDefault())))}).on("click.fndtn.topbar","["+this.attr_name()+"] .has-dropdown>a",function(a){if(d.breakpoint()){a.preventDefault();var b=e(this),c=b.closest("["+d.attr_name()+"]"),f=c.find("section, .top-bar-section"),g=(b.next(".dropdown").outerHeight(),b.closest("li"));c.data("index",c.data("index")+1),g.addClass("moved"),d.rtl?(f.css({right:-(100*c.data("index"))+"%"}),f.find(">.name").css({right:100*c.data("index")+"%"})):(f.css({left:-(100*c.data("index"))+"%"}),f.find(">.name").css({left:100*c.data("index")+"%"})),c.css("height",b.siblings("ul").outerHeight(!0)+c.data("height"))}}),e(b).off(".topbar").on("resize.fndtn.topbar",d.throttle(function(){d.resize.call(d)},50)).trigger("resize.fndtn.topbar").load(function(){e(this).trigger("resize.fndtn.topbar")}),e("body").off(".topbar").on("click.fndtn.topbar",function(a){var b=e(a.target).closest("li").closest("li.hover");b.length>0||e("["+d.attr_name()+"] li.hover").removeClass("hover")}),e(this.scope).on("click.fndtn.topbar","["+this.attr_name()+"] .has-dropdown .back",function(a){a.preventDefault();var b=e(this),c=b.closest("["+d.attr_name()+"]"),f=c.find("section, .top-bar-section"),g=(c.data(d.attr_name(!0)+"-init"),b.closest("li.moved")),h=g.parent();c.data("index",c.data("index")-1),d.rtl?(f.css({right:-(100*c.data("index"))+"%"}),f.find(">.name").css({right:100*c.data("index")+"%"})):(f.css({left:-(100*c.data("index"))+"%"}),f.find(">.name").css({left:100*c.data("index")+"%"})),0===c.data("index")?c.css("height",""):c.css("height",h.outerHeight(!0)+c.data("height")),setTimeout(function(){g.removeClass("moved")},300)}),e(this.scope).find(".dropdown a").focus(function(){a(this).parents(".has-dropdown").addClass("hover")}).blur(function(){a(this).parents(".has-dropdown").removeClass("hover")})},resize:function(){var a=this;a.S("["+this.attr_name()+"]").each(function(){var b,d=a.S(this),e=d.data(a.attr_name(!0)+"-init"),f=d.parent("."+a.settings.sticky_class);if(!a.breakpoint()){var g=d.hasClass("expanded");d.css("height","").removeClass("expanded").find("li").removeClass("hover"),g&&a.toggle(d)}a.is_sticky(d,f,e)&&(f.hasClass("fixed")?(f.removeClass("fixed"),b=f.offset().top,a.S(c.body).hasClass("f-topbar-fixed")&&(b-=d.data("height")),d.data("stickyoffset",b),f.addClass("fixed")):(b=f.offset().top,d.data("stickyoffset",b)))})},breakpoint:function(){return!matchMedia(Foundation.media_queries.topbar).matches},small:function(){return matchMedia(Foundation.media_queries.small).matches},medium:function(){return matchMedia(Foundation.media_queries.medium).matches},large:function(){return matchMedia(Foundation.media_queries.large).matches},assemble:function(b){var c=this,d=b.data(this.attr_name(!0)+"-init"),e=c.S("section, .top-bar-section",b);e.detach(),c.S(".has-dropdown>a",e).each(function(){var b,e=c.S(this),f=e.siblings(".dropdown"),g=e.attr("href");f.find(".title.back").length||(b=a(1==d.mobile_show_parent_link&&g?'<li class="title back js-generated"><h5><a href="javascript:void(0)"></a></h5></li><li class="parent-link hide-for-medium-up"><a class="parent-link js-generated" href="'+g+'">'+e.html()+"</a></li>":'<li class="title back js-generated"><h5><a href="javascript:void(0)"></a></h5>'),1==d.custom_back_text?a("h5>a",b).html(d.back_text):a("h5>a",b).html("&laquo; "+e.html()),f.prepend(b))}),e.appendTo(b),this.sticky(),this.assembled(b)},assembled:function(b){b.data(this.attr_name(!0),a.extend({},b.data(this.attr_name(!0)),{assembled:!0}))},height:function(b){var c=0,d=this;return a("> li",b).each(function(){c+=d.S(this).outerHeight(!0)}),c},sticky:function(){var a=this;this.S(b).on("scroll",function(){a.update_sticky_positioning()})},update_sticky_positioning:function(){var a="."+this.settings.sticky_class,c=this.S(b),d=this;if(d.settings.sticky_topbar&&d.is_sticky(this.settings.sticky_topbar,this.settings.sticky_topbar.parent(),this.settings)){var e=this.settings.sticky_topbar.data("stickyoffset")+this.settings.start_offset;d.S(a).hasClass("expanded")||(c.scrollTop()>e?d.S(a).hasClass("fixed")||(d.S(a).addClass("fixed"),d.S("body").addClass("f-topbar-fixed")):c.scrollTop()<=e&&d.S(a).hasClass("fixed")&&(d.S(a).removeClass("fixed"),d.S("body").removeClass("f-topbar-fixed")))}},off:function(){this.S(this.scope).off(".fndtn.topbar"),this.S(b).off(".fndtn.topbar")},reflow:function(){}}}(jQuery,window,window.document);
\ No newline at end of file
diff --git a/js/foundation/js/foundation/foundation.abide.js b/js/foundation/js/foundation/foundation.abide.js
new file mode 100644 (file)
index 0000000..82ea787
--- /dev/null
@@ -0,0 +1,426 @@
+;(function ($, window, document, undefined) {
+  'use strict';
+
+  Foundation.libs.abide = {
+    name : 'abide',
+
+    version : '5.5.3',
+
+    settings : {
+      live_validate : true, // validate the form as you go
+      validate_on_blur : true, // validate whenever you focus/blur on an input field
+      // validate_on: 'tab', // tab (when user tabs between fields), change (input changes), manual (call custom events)
+
+      focus_on_invalid : true, // automatically bring the focus to an invalid input field
+      error_labels : true, // labels with a for="inputId" will receive an `error` class
+      error_class : 'error', // labels with a for="inputId" will receive an `error` class
+      // the amount of time Abide will take before it validates the form (in ms).
+      // smaller time will result in faster validation
+      timeout : 1000,
+      patterns : {
+        alpha : /^[a-zA-Z]+$/,
+        alpha_numeric : /^[a-zA-Z0-9]+$/,
+        integer : /^[-+]?\d+$/,
+        number : /^[-+]?\d*(?:[\.\,]\d+)?$/,
+
+        // amex, visa, diners
+        card : /^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|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})$/,
+        cvv : /^([0-9]){3,4}$/,
+
+        // http://www.whatwg.org/specs/web-apps/current-work/multipage/states-of-the-type-attribute.html#valid-e-mail-address
+        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])?)+$/,
+
+        // http://blogs.lse.ac.uk/lti/2008/04/23/a-regular-expression-to-match-any-url/
+        url: /^(https?|ftp|file|ssh):\/\/([-;:&=\+\$,\w]+@{1})?([-A-Za-z0-9\.]+)+:?(\d+)?((\/[-\+~%\/\.\w]+)?\??([-\+=&;%@\.\w]+)?#?([\w]+)?)?/,
+        // abc.de
+        domain : /^([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,8}$/,
+
+        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))$/,
+        // YYYY-MM-DD
+        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))$/,
+        // HH:MM:SS
+        time : /^(0[0-9]|1[0-9]|2[0-3])(:[0-5][0-9]){2}$/,
+        dateISO : /^\d{4}[\/\-]\d{1,2}[\/\-]\d{1,2}$/,
+        // MM/DD/YYYY
+        month_day_year : /^(0[1-9]|1[012])[- \/.](0[1-9]|[12][0-9]|3[01])[- \/.]\d{4}$/,
+        // DD/MM/YYYY
+        day_month_year : /^(0[1-9]|[12][0-9]|3[01])[- \/.](0[1-9]|1[012])[- \/.]\d{4}$/,
+
+        // #FFF or #FFFFFF
+        color : /^#?([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$/
+      },
+      validators : {
+        equalTo : function (el, required, parent) {
+          var from  = document.getElementById(el.getAttribute(this.add_namespace('data-equalto'))).value,
+              to    = el.value,
+              valid = (from === to);
+
+          return valid;
+        }
+      }
+    },
+
+    timer : null,
+
+    init : function (scope, method, options) {
+      this.bindings(method, options);
+    },
+
+    events : function (scope) {
+      var self = this,
+          form = self.S(scope).attr('novalidate', 'novalidate'),
+          settings = form.data(this.attr_name(true) + '-init') || {};
+
+      this.invalid_attr = this.add_namespace('data-invalid');
+
+      function validate(originalSelf, e) {
+        clearTimeout(self.timer);
+        self.timer = setTimeout(function () {
+          self.validate([originalSelf], e);
+        }.bind(originalSelf), settings.timeout);
+      }
+
+      form
+        .off('.abide')
+        .on('submit.fndtn.abide', function (e) {
+          var is_ajax = /ajax/i.test(self.S(this).attr(self.attr_name()));
+          return self.validate(self.S(this).find('input, textarea, select').not(":hidden, [data-abide-ignore]").get(), e, is_ajax);
+        })
+        .on('validate.fndtn.abide', function (e) {
+          if (settings.validate_on === 'manual') {
+            self.validate([e.target], e);
+          }
+        })
+        .on('reset', function (e) {
+          return self.reset($(this), e);
+        })
+        .find('input, textarea, select').not(":hidden, [data-abide-ignore]")
+          .off('.abide')
+          .on('blur.fndtn.abide change.fndtn.abide', function (e) {
+              var id = this.getAttribute('id'),
+                  eqTo = form.find('[data-equalto="'+ id +'"]');
+            // old settings fallback
+            // will be deprecated with F6 release
+            if (settings.validate_on_blur && settings.validate_on_blur === true) {
+              validate(this, e);
+            }
+            // checks if there is an equalTo equivalent related by id
+            if(typeof eqTo.get(0) !== "undefined" && eqTo.val().length){
+              validate(eqTo.get(0),e);
+            }
+            // new settings combining validate options into one setting
+            if (settings.validate_on === 'change') {
+              validate(this, e);
+            }
+          })
+          .on('keydown.fndtn.abide', function (e) {
+            var id = this.getAttribute('id'),
+                eqTo = form.find('[data-equalto="'+ id +'"]');
+            // old settings fallback
+            // will be deprecated with F6 release
+            if (settings.live_validate && settings.live_validate === true && e.which != 9) {
+              validate(this, e);
+            }
+            // checks if there is an equalTo equivalent related by id
+            if(typeof eqTo.get(0) !== "undefined" && eqTo.val().length){
+              validate(eqTo.get(0),e);
+            }
+            // new settings combining validate options into one setting
+            if (settings.validate_on === 'tab' && e.which === 9) {
+              validate(this, e);
+            }
+            else if (settings.validate_on === 'change') {
+              validate(this, e);
+            }
+          })
+          .on('focus', function (e) {
+            if (navigator.userAgent.match(/iPad|iPhone|Android|BlackBerry|Windows Phone|webOS/i)) {
+              $('html, body').animate({
+                  scrollTop: $(e.target).offset().top
+              }, 100);
+            }
+          });
+    },
+
+    reset : function (form, e) {
+      var self = this;
+      form.removeAttr(self.invalid_attr);
+
+      $('[' + self.invalid_attr + ']', form).removeAttr(self.invalid_attr);
+      $('.' + self.settings.error_class, form).not('small').removeClass(self.settings.error_class);
+      $(':input', form).not(':button, :submit, :reset, :hidden, [data-abide-ignore]').val('').removeAttr(self.invalid_attr);
+    },
+
+    validate : function (els, e, is_ajax) {
+      var validations = this.parse_patterns(els),
+          validation_count = validations.length,
+          form = this.S(els[0]).closest('form'),
+          submit_event = /submit/.test(e.type);
+
+      // Has to count up to make sure the focus gets applied to the top error
+      for (var i = 0; i < validation_count; i++) {
+        if (!validations[i] && (submit_event || is_ajax)) {
+          if (this.settings.focus_on_invalid) {
+            els[i].focus();
+          }
+          form.trigger('invalid.fndtn.abide');
+          this.S(els[i]).closest('form').attr(this.invalid_attr, '');
+          return false;
+        }
+      }
+
+      if (submit_event || is_ajax) {
+        form.trigger('valid.fndtn.abide');
+      }
+
+      form.removeAttr(this.invalid_attr);
+
+      if (is_ajax) {
+        return false;
+      }
+
+      return true;
+    },
+
+    parse_patterns : function (els) {
+      var i = els.length,
+          el_patterns = [];
+
+      while (i--) {
+        el_patterns.push(this.pattern(els[i]));
+      }
+
+      return this.check_validation_and_apply_styles(el_patterns);
+    },
+
+    pattern : function (el) {
+      var type = el.getAttribute('type'),
+          required = typeof el.getAttribute('required') === 'string';
+
+      var pattern = el.getAttribute('pattern') || '';
+
+      if (this.settings.patterns.hasOwnProperty(pattern) && pattern.length > 0) {
+        return [el, this.settings.patterns[pattern], required];
+      } else if (pattern.length > 0) {
+        return [el, new RegExp(pattern), required];
+      }
+
+      if (this.settings.patterns.hasOwnProperty(type)) {
+        return [el, this.settings.patterns[type], required];
+      }
+
+      pattern = /.*/;
+
+      return [el, pattern, required];
+    },
+
+    // TODO: Break this up into smaller methods, getting hard to read.
+    check_validation_and_apply_styles : function (el_patterns) {
+      var i = el_patterns.length,
+          validations = [];
+      if (i == 0) {
+        return validations;
+      }
+      var form = this.S(el_patterns[0][0]).closest('[data-' + this.attr_name(true) + ']'),
+          settings = form.data(this.attr_name(true) + '-init') || {};
+      while (i--) {
+        var el = el_patterns[i][0],
+            required = el_patterns[i][2],
+            value = el.value.trim(),
+            direct_parent = this.S(el).parent(),
+            validator = el.getAttribute(this.add_namespace('data-abide-validator')),
+            is_radio = el.type === 'radio',
+            is_checkbox = el.type === 'checkbox',
+            label = this.S('label[for="' + el.getAttribute('id') + '"]'),
+            valid_length = (required) ? (el.value.length > 0) : true,
+            el_validations = [];
+
+        var parent, valid;
+
+        // support old way to do equalTo validations
+        if (el.getAttribute(this.add_namespace('data-equalto'))) { validator = 'equalTo' }
+
+        if (!direct_parent.is('label')) {
+          parent = direct_parent;
+        } else {
+          parent = direct_parent.parent();
+        }
+
+        if (is_radio && required) {
+          el_validations.push(this.valid_radio(el, required));
+        } else if (is_checkbox && required) {
+          el_validations.push(this.valid_checkbox(el, required));
+
+        } else if (validator) {
+          // Validate using each of the specified (space-delimited) validators.
+          var validators = validator.split(' ');
+          var last_valid = true, all_valid = true;
+          for (var iv = 0; iv < validators.length; iv++) {
+              valid = this.settings.validators[validators[iv]].apply(this, [el, required, parent])
+              el_validations.push(valid);
+              all_valid = valid && last_valid;
+              last_valid = valid;
+          }
+          if (all_valid) {
+              this.S(el).removeAttr(this.invalid_attr);
+              parent.removeClass('error');
+              if (label.length > 0 && this.settings.error_labels) {
+                label.removeClass(this.settings.error_class).removeAttr('role');
+              }
+              $(el).triggerHandler('valid');
+          } else {
+              this.S(el).attr(this.invalid_attr, '');
+              parent.addClass('error');
+              if (label.length > 0 && this.settings.error_labels) {
+                label.addClass(this.settings.error_class).attr('role', 'alert');
+              }
+              $(el).triggerHandler('invalid');
+          }
+        } else {
+
+          if (el_patterns[i][1].test(value) && valid_length ||
+            !required && el.value.length < 1 || $(el).attr('disabled')) {
+            el_validations.push(true);
+          } else {
+            el_validations.push(false);
+          }
+
+          el_validations = [el_validations.every(function (valid) {return valid;})];
+          if (el_validations[0]) {
+            this.S(el).removeAttr(this.invalid_attr);
+            el.setAttribute('aria-invalid', 'false');
+            el.removeAttribute('aria-describedby');
+            parent.removeClass(this.settings.error_class);
+            if (label.length > 0 && this.settings.error_labels) {
+              label.removeClass(this.settings.error_class).removeAttr('role');
+            }
+            $(el).triggerHandler('valid');
+          } else {
+            this.S(el).attr(this.invalid_attr, '');
+            el.setAttribute('aria-invalid', 'true');
+
+            // Try to find the error associated with the input
+            var errorElem = parent.find('small.' + this.settings.error_class, 'span.' + this.settings.error_class);
+            var errorID = errorElem.length > 0 ? errorElem[0].id : '';
+            if (errorID.length > 0) {
+              el.setAttribute('aria-describedby', errorID);
+            }
+
+            // el.setAttribute('aria-describedby', $(el).find('.error')[0].id);
+            parent.addClass(this.settings.error_class);
+            if (label.length > 0 && this.settings.error_labels) {
+              label.addClass(this.settings.error_class).attr('role', 'alert');
+            }
+            $(el).triggerHandler('invalid');
+          }
+        }
+        validations = validations.concat(el_validations);
+      }
+
+      return validations;
+    },
+
+    valid_checkbox : function (el, required) {
+      var el = this.S(el),
+          valid = (el.is(':checked') || !required || el.get(0).getAttribute('disabled'));
+
+      if (valid) {
+        el.removeAttr(this.invalid_attr).parent().removeClass(this.settings.error_class);
+        $(el).triggerHandler('valid');
+      } else {
+        el.attr(this.invalid_attr, '').parent().addClass(this.settings.error_class);
+        $(el).triggerHandler('invalid');
+      }
+
+      return valid;
+    },
+
+    valid_radio : function (el, required) {
+      var name = el.getAttribute('name'),
+          group = this.S(el).closest('[data-' + this.attr_name(true) + ']').find("[name='" + name + "']"),
+          count = group.length,
+          valid = false,
+          disabled = false;
+
+      // Has to count up to make sure the focus gets applied to the top error
+      for (var i=0; i < count; i++) {
+        if( group[i].getAttribute('disabled') ){
+          disabled=true;
+          valid=true;
+        } else {
+          if (group[i].checked){
+            valid = true;
+          } else {
+            if( disabled ){
+              valid = false;
+            }
+          }
+        }
+      }
+
+      // Has to count up to make sure the focus gets applied to the top error
+      for (var i = 0; i < count; i++) {
+        if (valid) {
+          this.S(group[i]).removeAttr(this.invalid_attr).parent().removeClass(this.settings.error_class);
+          $(group[i]).triggerHandler('valid');
+        } else {
+          this.S(group[i]).attr(this.invalid_attr, '').parent().addClass(this.settings.error_class);
+          $(group[i]).triggerHandler('invalid');
+        }
+      }
+
+      return valid;
+    },
+
+    valid_equal : function (el, required, parent) {
+      var from  = document.getElementById(el.getAttribute(this.add_namespace('data-equalto'))).value,
+          to    = el.value,
+          valid = (from === to);
+
+      if (valid) {
+        this.S(el).removeAttr(this.invalid_attr);
+        parent.removeClass(this.settings.error_class);
+        if (label.length > 0 && settings.error_labels) {
+          label.removeClass(this.settings.error_class);
+        }
+      } else {
+        this.S(el).attr(this.invalid_attr, '');
+        parent.addClass(this.settings.error_class);
+        if (label.length > 0 && settings.error_labels) {
+          label.addClass(this.settings.error_class);
+        }
+      }
+
+      return valid;
+    },
+
+    valid_oneof : function (el, required, parent, doNotValidateOthers) {
+      var el = this.S(el),
+        others = this.S('[' + this.add_namespace('data-oneof') + ']'),
+        valid = others.filter(':checked').length > 0;
+
+      if (valid) {
+        el.removeAttr(this.invalid_attr).parent().removeClass(this.settings.error_class);
+      } else {
+        el.attr(this.invalid_attr, '').parent().addClass(this.settings.error_class);
+      }
+
+      if (!doNotValidateOthers) {
+        var _this = this;
+        others.each(function () {
+          _this.valid_oneof.call(_this, this, null, null, true);
+        });
+      }
+
+      return valid;
+    },
+
+    reflow : function(scope, options) {
+      var self = this,
+          form = self.S('[' + this.attr_name() + ']').attr('novalidate', 'novalidate');
+          self.S(form).each(function (idx, el) {
+            self.events(el);
+          });
+    }
+  };
+}(jQuery, window, window.document));
diff --git a/js/foundation/js/foundation/foundation.accordion.js b/js/foundation/js/foundation/foundation.accordion.js
new file mode 100644 (file)
index 0000000..be329ae
--- /dev/null
@@ -0,0 +1,125 @@
+;(function ($, window, document, undefined) {
+  'use strict';
+
+  Foundation.libs.accordion = {
+    name : 'accordion',
+
+    version : '5.5.3',
+
+    settings : {
+      content_class : 'content',
+      active_class : 'active',
+      multi_expand : false,
+      toggleable : true,
+      callback : function () {}
+    },
+
+    init : function (scope, method, options) {
+      this.bindings(method, options);
+    },
+
+    events : function (instance) {
+      var self = this;
+      var S = this.S;
+      self.create(this.S(instance));
+
+      S(this.scope)
+      .off('.fndtn.accordion')
+      .on('click.fndtn.accordion', '[' + this.attr_name() + '] > dd > a, [' + this.attr_name() + '] > li > a', function (e) {
+        var accordion = S(this).closest('[' + self.attr_name() + ']'),
+            groupSelector = self.attr_name() + '=' + accordion.attr(self.attr_name()),
+            settings = accordion.data(self.attr_name(true) + '-init') || self.settings,
+            target = S('#' + this.href.split('#')[1]),
+            aunts = $('> dd, > li', accordion),
+            siblings = aunts.children('.' + settings.content_class),
+            active_content = siblings.filter('.' + settings.active_class);
+
+        e.preventDefault();
+
+        if (accordion.attr(self.attr_name())) {
+          siblings = siblings.add('[' + groupSelector + '] dd > ' + '.' + settings.content_class + ', [' + groupSelector + '] li > ' + '.' + settings.content_class);
+          aunts = aunts.add('[' + groupSelector + '] dd, [' + groupSelector + '] li');
+        }
+
+        if (settings.toggleable && target.is(active_content)) {
+          target.parent('dd, li').toggleClass(settings.active_class, false);
+          target.toggleClass(settings.active_class, false);
+          S(this).attr('aria-expanded', function(i, attr){
+              return attr === 'true' ? 'false' : 'true';
+          });
+          settings.callback(target);
+          target.triggerHandler('toggled', [accordion]);
+          accordion.triggerHandler('toggled', [target]);
+          return;
+        }
+
+        if (!settings.multi_expand) {
+          siblings.removeClass(settings.active_class);
+          aunts.removeClass(settings.active_class);
+          aunts.children('a').attr('aria-expanded','false');
+        }
+
+        target.addClass(settings.active_class).parent().addClass(settings.active_class);
+        settings.callback(target);
+        target.triggerHandler('toggled', [accordion]);
+        accordion.triggerHandler('toggled', [target]);
+        S(this).attr('aria-expanded','true');
+      });
+    },
+
+    create: function($instance) {
+      var self = this,
+          accordion = $instance,
+          aunts = $('> .accordion-navigation', accordion),
+          settings = accordion.data(self.attr_name(true) + '-init') || self.settings;
+
+      aunts.children('a').attr('aria-expanded','false');
+      aunts.has('.' + settings.content_class + '.' + settings.active_class).addClass(settings.active_class).children('a').attr('aria-expanded','true');
+
+      if (settings.multi_expand) {
+        $instance.attr('aria-multiselectable','true');
+      }
+    },
+       
+       toggle : function(options) {
+               var options = typeof options !== 'undefined' ? options : {};
+               var selector = typeof options.selector !== 'undefined' ? options.selector : '';
+               var toggle_state = typeof options.toggle_state !== 'undefined' ? options.toggle_state : '';
+               var $accordion = typeof options.$accordion !== 'undefined' ? options.$accordion : this.S(this.scope).closest('[' + this.attr_name() + ']');
+  
+               var $items = $accordion.find('> dd' + selector + ', > li' + selector);
+               if ( $items.length < 1 ) {
+                       if ( window.console ) {
+                               console.error('Selection not found.', selector);
+                       }
+                       return false;
+               }
+  
+               var S = this.S;
+               var active_class = this.settings.active_class;
+               $items.each(function() {
+                       var $item = S(this);
+                       var is_active = $item.hasClass(active_class);
+                       if ( ( is_active && toggle_state === 'close' ) || ( !is_active && toggle_state === 'open' ) || toggle_state === '' ) {
+                               $item.find('> a').trigger('click.fndtn.accordion');
+                       }
+               });
+       },
+  
+       open : function(options) {
+               var options = typeof options !== 'undefined' ? options : {};
+               options.toggle_state = 'open';
+               this.toggle(options);
+       },
+  
+       close : function(options) {
+               var options = typeof options !== 'undefined' ? options : {};
+               options.toggle_state = 'close';
+               this.toggle(options);
+       },      
+
+    off : function () {},
+
+    reflow : function () {}
+  };
+}(jQuery, window, window.document));
diff --git a/js/foundation/js/foundation/foundation.alert.js b/js/foundation/js/foundation/foundation.alert.js
new file mode 100644 (file)
index 0000000..0ab934c
--- /dev/null
@@ -0,0 +1,43 @@
+;(function ($, window, document, undefined) {
+  'use strict';
+
+  Foundation.libs.alert = {
+    name : 'alert',
+
+    version : '5.5.3',
+
+    settings : {
+      callback : function () {}
+    },
+
+    init : function (scope, method, options) {
+      this.bindings(method, options);
+    },
+
+    events : function () {
+      var self = this,
+          S = this.S;
+
+      $(this.scope).off('.alert').on('click.fndtn.alert', '[' + this.attr_name() + '] .close', function (e) {
+        var alertBox = S(this).closest('[' + self.attr_name() + ']'),
+            settings = alertBox.data(self.attr_name(true) + '-init') || self.settings;
+
+        e.preventDefault();
+        if (Modernizr.csstransitions) {
+          alertBox.addClass('alert-close');
+          alertBox.on('transitionend webkitTransitionEnd oTransitionEnd', function (e) {
+            S(this).trigger('close.fndtn.alert').remove();
+            settings.callback();
+          });
+        } else {
+          alertBox.fadeOut(300, function () {
+            S(this).trigger('close.fndtn.alert').remove();
+            settings.callback();
+          });
+        }
+      });
+    },
+
+    reflow : function () {}
+  };
+}(jQuery, window, window.document));
diff --git a/js/foundation/js/foundation/foundation.clearing.js b/js/foundation/js/foundation/foundation.clearing.js
new file mode 100644 (file)
index 0000000..f63ff91
--- /dev/null
@@ -0,0 +1,586 @@
+;(function ($, window, document, undefined) {
+  'use strict';
+
+  Foundation.libs.clearing = {
+    name : 'clearing',
+
+    version : '5.5.3',
+
+    settings : {
+      templates : {
+        viewing : '<a href="#" class="clearing-close">&times;</a>' +
+          '<div class="visible-img" style="display: none"><div class="clearing-touch-label"></div><img src="data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs%3D" alt="" />' +
+          '<p class="clearing-caption"></p><a href="#" class="clearing-main-prev"><span></span></a>' +
+          '<a href="#" class="clearing-main-next"><span></span></a></div>' +
+          '<img class="clearing-preload-next" style="display: none" src="data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs%3D" alt="" />' +
+          '<img class="clearing-preload-prev" style="display: none" src="data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs%3D" alt="" />'
+      },
+
+      // comma delimited list of selectors that, on click, will close clearing,
+      // add 'div.clearing-blackout, div.visible-img' to close on background click
+      close_selectors : '.clearing-close, div.clearing-blackout',
+
+      // Default to the entire li element.
+      open_selectors : '',
+
+      // Image will be skipped in carousel.
+      skip_selector : '',
+
+      touch_label : '',
+
+      // event initializer and locks
+      init : false,
+      locked : false
+    },
+
+    init : function (scope, method, options) {
+      var self = this;
+      Foundation.inherit(this, 'throttle image_loaded');
+
+      this.bindings(method, options);
+
+      if (self.S(this.scope).is('[' + this.attr_name() + ']')) {
+        this.assemble(self.S('li', this.scope));
+      } else {
+        self.S('[' + this.attr_name() + ']', this.scope).each(function () {
+          self.assemble(self.S('li', this));
+        });
+      }
+    },
+
+    events : function (scope) {
+      var self = this,
+          S = self.S,
+          $scroll_container = $('.scroll-container');
+
+      if ($scroll_container.length > 0) {
+        this.scope = $scroll_container;
+      }
+
+      S(this.scope)
+        .off('.clearing')
+        .on('click.fndtn.clearing', 'ul[' + this.attr_name() + '] li ' + this.settings.open_selectors,
+          function (e, current, target) {
+            var current = current || S(this),
+                target = target || current,
+                next = current.next('li'),
+                settings = current.closest('[' + self.attr_name() + ']').data(self.attr_name(true) + '-init'),
+                image = S(e.target);
+
+            e.preventDefault();
+
+            if (!settings) {
+              self.init();
+              settings = current.closest('[' + self.attr_name() + ']').data(self.attr_name(true) + '-init');
+            }
+
+            // if clearing is open and the current image is
+            // clicked, go to the next image in sequence
+            if (target.hasClass('visible') &&
+              current[0] === target[0] &&
+              next.length > 0 && self.is_open(current)) {
+              target = next;
+              image = S('img', target);
+            }
+
+            // set current and target to the clicked li if not otherwise defined.
+            self.open(image, current, target);
+            self.update_paddles(target);
+          })
+
+        .on('click.fndtn.clearing', '.clearing-main-next',
+          function (e) { self.nav(e, 'next') })
+        .on('click.fndtn.clearing', '.clearing-main-prev',
+          function (e) { self.nav(e, 'prev') })
+        .on('click.fndtn.clearing', this.settings.close_selectors,
+          function (e) { Foundation.libs.clearing.close(e, this) });
+
+      $(document).on('keydown.fndtn.clearing',
+          function (e) { self.keydown(e) });
+
+      S(window).off('.clearing').on('resize.fndtn.clearing',
+        function () { self.resize() });
+
+      this.swipe_events(scope);
+    },
+
+    swipe_events : function (scope) {
+      var self = this,
+      S = self.S;
+
+      S(this.scope)
+        .on('touchstart.fndtn.clearing', '.visible-img', function (e) {
+          if (!e.touches) { e = e.originalEvent; }
+          var data = {
+                start_page_x : e.touches[0].pageX,
+                start_page_y : e.touches[0].pageY,
+                start_time : (new Date()).getTime(),
+                delta_x : 0,
+                is_scrolling : undefined
+              };
+
+          S(this).data('swipe-transition', data);
+          e.stopPropagation();
+        })
+        .on('touchmove.fndtn.clearing', '.visible-img', function (e) {
+          if (!e.touches) {
+            e = e.originalEvent;
+          }
+          // Ignore pinch/zoom events
+          if (e.touches.length > 1 || e.scale && e.scale !== 1) {
+            return;
+          }
+
+          var data = S(this).data('swipe-transition');
+
+          if (typeof data === 'undefined') {
+            data = {};
+          }
+
+          data.delta_x = e.touches[0].pageX - data.start_page_x;
+
+          if (Foundation.rtl) {
+            data.delta_x = -data.delta_x;
+          }
+
+          if (typeof data.is_scrolling === 'undefined') {
+            data.is_scrolling = !!( data.is_scrolling || Math.abs(data.delta_x) < Math.abs(e.touches[0].pageY - data.start_page_y) );
+          }
+
+          if (!data.is_scrolling && !data.active) {
+            e.preventDefault();
+            var direction = (data.delta_x < 0) ? 'next' : 'prev';
+            data.active = true;
+            self.nav(e, direction);
+          }
+        })
+        .on('touchend.fndtn.clearing', '.visible-img', function (e) {
+          S(this).data('swipe-transition', {});
+          e.stopPropagation();
+        });
+    },
+
+    assemble : function ($li) {
+      var $el = $li.parent();
+
+      if ($el.parent().hasClass('carousel')) {
+        return;
+      }
+
+      $el.after('<div id="foundationClearingHolder"></div>');
+
+      var grid = $el.detach(),
+          grid_outerHTML = '';
+
+      if (grid[0] == null) {
+        return;
+      } else {
+        grid_outerHTML = grid[0].outerHTML;
+      }
+
+      var holder = this.S('#foundationClearingHolder'),
+          settings = $el.data(this.attr_name(true) + '-init'),
+          data = {
+            grid : '<div class="carousel">' + grid_outerHTML + '</div>',
+            viewing : settings.templates.viewing
+          },
+          wrapper = '<div class="clearing-assembled"><div>' + data.viewing +
+            data.grid + '</div></div>',
+          touch_label = this.settings.touch_label;
+
+      if (Modernizr.touch) {
+        wrapper = $(wrapper).find('.clearing-touch-label').html(touch_label).end();
+      }
+
+      holder.after(wrapper).remove();
+    },
+
+    open : function ($image, current, target) {
+      var self = this,
+          body = $(document.body),
+          root = target.closest('.clearing-assembled'),
+          container = self.S('div', root).first(),
+          visible_image = self.S('.visible-img', container),
+          image = self.S('img', visible_image).not($image),
+          label = self.S('.clearing-touch-label', container),
+          error = false,
+          loaded = {};
+
+      // Event to disable scrolling on touch devices when Clearing is activated
+      $('body').on('touchmove', function (e) {
+        e.preventDefault();
+      });
+
+      image.error(function () {
+        error = true;
+      });
+
+      function startLoad() {
+        setTimeout(function () {
+          this.image_loaded(image, function () {
+            if (image.outerWidth() === 1 && !error) {
+              startLoad.call(this);
+            } else {
+              cb.call(this, image);
+            }
+          }.bind(this));
+        }.bind(this), 100);
+      }
+
+      function cb (image) {
+        var $image = $(image);
+        $image.css('visibility', 'visible');
+        $image.trigger('imageVisible');
+        // toggle the gallery
+        body.css('overflow', 'hidden');
+        root.addClass('clearing-blackout');
+        container.addClass('clearing-container');
+        visible_image.show();
+        this.fix_height(target)
+          .caption(self.S('.clearing-caption', visible_image), self.S('img', target))
+          .center_and_label(image, label)
+          .shift(current, target, function () {
+            target.closest('li').siblings().removeClass('visible');
+            target.closest('li').addClass('visible');
+          });
+        visible_image.trigger('opened.fndtn.clearing')
+      }
+
+      if (!this.locked()) {
+        visible_image.trigger('open.fndtn.clearing');
+        // set the image to the selected thumbnail
+        loaded = this.load($image);
+        if (loaded.interchange) {
+          image
+            .attr('data-interchange', loaded.interchange)
+            .foundation('interchange', 'reflow');
+        } else {
+          image
+            .attr('src', loaded.src)
+            .attr('data-interchange', '');
+        }
+        image.css('visibility', 'hidden');
+
+        startLoad.call(this);
+      }
+    },
+
+    close : function (e, el) {
+      e.preventDefault();
+
+      var root = (function (target) {
+            if (/blackout/.test(target.selector)) {
+              return target;
+            } else {
+              return target.closest('.clearing-blackout');
+            }
+          }($(el))),
+          body = $(document.body), container, visible_image;
+
+      if (el === e.target && root) {
+        body.css('overflow', '');
+        container = $('div', root).first();
+        visible_image = $('.visible-img', container);
+        visible_image.trigger('close.fndtn.clearing');
+        this.settings.prev_index = 0;
+        $('ul[' + this.attr_name() + ']', root)
+          .attr('style', '').closest('.clearing-blackout')
+          .removeClass('clearing-blackout');
+        container.removeClass('clearing-container');
+        visible_image.hide();
+        visible_image.trigger('closed.fndtn.clearing');
+      }
+
+      // Event to re-enable scrolling on touch devices
+      $('body').off('touchmove');
+
+      return false;
+    },
+
+    is_open : function (current) {
+      return current.parent().prop('style').length > 0;
+    },
+
+    keydown : function (e) {
+      var clearing = $('.clearing-blackout ul[' + this.attr_name() + ']'),
+          NEXT_KEY = this.rtl ? 37 : 39,
+          PREV_KEY = this.rtl ? 39 : 37,
+          ESC_KEY = 27;
+
+      if (e.which === NEXT_KEY) {
+        this.go(clearing, 'next');
+      }
+      if (e.which === PREV_KEY) {
+        this.go(clearing, 'prev');
+      }
+      if (e.which === ESC_KEY) {
+        this.S('a.clearing-close').trigger('click.fndtn.clearing');
+      }
+    },
+
+    nav : function (e, direction) {
+      var clearing = $('ul[' + this.attr_name() + ']', '.clearing-blackout');
+
+      e.preventDefault();
+      this.go(clearing, direction);
+    },
+
+    resize : function () {
+      var image = $('img', '.clearing-blackout .visible-img'),
+          label = $('.clearing-touch-label', '.clearing-blackout');
+
+      if (image.length) {
+        this.center_and_label(image, label);
+        image.trigger('resized.fndtn.clearing')
+      }
+    },
+
+    // visual adjustments
+    fix_height : function (target) {
+      var lis = target.parent().children(),
+          self = this;
+
+      lis.each(function () {
+        var li = self.S(this),
+            image = li.find('img');
+
+        if (li.height() > image.outerHeight()) {
+          li.addClass('fix-height');
+        }
+      })
+      .closest('ul')
+      .width(lis.length * 100 + '%');
+
+      return this;
+    },
+
+    update_paddles : function (target) {
+      target = target.closest('li');
+      var visible_image = target
+        .closest('.carousel')
+        .siblings('.visible-img');
+
+      if (target.next().length > 0) {
+        this.S('.clearing-main-next', visible_image).removeClass('disabled');
+      } else {
+        this.S('.clearing-main-next', visible_image).addClass('disabled');
+      }
+
+      if (target.prev().length > 0) {
+        this.S('.clearing-main-prev', visible_image).removeClass('disabled');
+      } else {
+        this.S('.clearing-main-prev', visible_image).addClass('disabled');
+      }
+    },
+
+    center_and_label : function (target, label) {
+      if (!this.rtl && label.length > 0) {
+        label.css({
+          marginLeft : -(label.outerWidth() / 2),
+          marginTop : -(target.outerHeight() / 2)-label.outerHeight()-10
+        });
+      } else {
+        label.css({
+          marginRight : -(label.outerWidth() / 2),
+          marginTop : -(target.outerHeight() / 2)-label.outerHeight()-10,
+          left: 'auto',
+          right: '50%'
+        });
+      }
+      return this;
+    },
+
+    // image loading and preloading
+
+    load : function ($image) {
+      var href,
+          interchange,
+          closest_a;
+
+      if ($image[0].nodeName === 'A') {
+        href = $image.attr('href');
+        interchange = $image.data('clearing-interchange');
+      } else {
+        closest_a = $image.closest('a');
+        href = closest_a.attr('href');
+        interchange = closest_a.data('clearing-interchange');
+      }
+
+      this.preload($image);
+
+      return {
+        'src': href ? href : $image.attr('src'),
+        'interchange': href ? interchange : $image.data('clearing-interchange')
+      }
+    },
+
+    preload : function ($image) {
+      this
+        .img($image.closest('li').next(), 'next')
+        .img($image.closest('li').prev(), 'prev');
+    },
+
+    img : function (img, sibling_type) {
+      if (img.length) {
+        var preload_img = $('.clearing-preload-' + sibling_type),
+            new_a = this.S('a', img),
+            src,
+            interchange,
+            image;
+
+        if (new_a.length) {
+          src = new_a.attr('href');
+          interchange = new_a.data('clearing-interchange');
+        } else {
+          image = this.S('img', img);
+          src = image.attr('src');
+          interchange = image.data('clearing-interchange');
+        }
+
+        if (interchange) {
+          preload_img.attr('data-interchange', interchange);
+        } else {
+          preload_img.attr('src', src);
+          preload_img.attr('data-interchange', '');
+        }
+      }
+      return this;
+    },
+
+    // image caption
+
+    caption : function (container, $image) {
+      var caption = $image.attr('data-caption');
+
+      if (caption) {
+       var containerPlain = container.get(0);
+       containerPlain.innerHTML = caption;
+        container.show();
+      } else {
+        container
+          .text('')
+          .hide();
+      }
+      return this;
+    },
+
+    // directional methods
+
+    go : function ($ul, direction) {
+      var current = this.S('.visible', $ul),
+          target = current[direction]();
+
+      // Check for skip selector.
+      if (this.settings.skip_selector && target.find(this.settings.skip_selector).length != 0) {
+        target = target[direction]();
+      }
+
+      if (target.length) {
+        this.S('img', target)
+          .trigger('click.fndtn.clearing', [current, target])
+          .trigger('change.fndtn.clearing');
+      }
+    },
+
+    shift : function (current, target, callback) {
+      var clearing = target.parent(),
+          old_index = this.settings.prev_index || target.index(),
+          direction = this.direction(clearing, current, target),
+          dir = this.rtl ? 'right' : 'left',
+          left = parseInt(clearing.css('left'), 10),
+          width = target.outerWidth(),
+          skip_shift;
+
+      var dir_obj = {};
+
+      // we use jQuery animate instead of CSS transitions because we
+      // need a callback to unlock the next animation
+      // needs support for RTL **
+      if (target.index() !== old_index && !/skip/.test(direction)) {
+        if (/left/.test(direction)) {
+          this.lock();
+          dir_obj[dir] = left + width;
+          clearing.animate(dir_obj, 300, this.unlock());
+        } else if (/right/.test(direction)) {
+          this.lock();
+          dir_obj[dir] = left - width;
+          clearing.animate(dir_obj, 300, this.unlock());
+        }
+      } else if (/skip/.test(direction)) {
+        // the target image is not adjacent to the current image, so
+        // do we scroll right or not
+        skip_shift = target.index() - this.settings.up_count;
+        this.lock();
+
+        if (skip_shift > 0) {
+          dir_obj[dir] = -(skip_shift * width);
+          clearing.animate(dir_obj, 300, this.unlock());
+        } else {
+          dir_obj[dir] = 0;
+          clearing.animate(dir_obj, 300, this.unlock());
+        }
+      }
+
+      callback();
+    },
+
+    direction : function ($el, current, target) {
+      var lis = this.S('li', $el),
+          li_width = lis.outerWidth() + (lis.outerWidth() / 4),
+          up_count = Math.floor(this.S('.clearing-container').outerWidth() / li_width) - 1,
+          target_index = lis.index(target),
+          response;
+
+      this.settings.up_count = up_count;
+
+      if (this.adjacent(this.settings.prev_index, target_index)) {
+        if ((target_index > up_count) && target_index > this.settings.prev_index) {
+          response = 'right';
+        } else if ((target_index > up_count - 1) && target_index <= this.settings.prev_index) {
+          response = 'left';
+        } else {
+          response = false;
+        }
+      } else {
+        response = 'skip';
+      }
+
+      this.settings.prev_index = target_index;
+
+      return response;
+    },
+
+    adjacent : function (current_index, target_index) {
+      for (var i = target_index + 1; i >= target_index - 1; i--) {
+        if (i === current_index) {
+          return true;
+        }
+      }
+      return false;
+    },
+
+    // lock management
+
+    lock : function () {
+      this.settings.locked = true;
+    },
+
+    unlock : function () {
+      this.settings.locked = false;
+    },
+
+    locked : function () {
+      return this.settings.locked;
+    },
+
+    off : function () {
+      this.S(this.scope).off('.fndtn.clearing');
+      this.S(window).off('.fndtn.clearing');
+    },
+
+    reflow : function () {
+      this.init();
+    }
+  };
+
+}(jQuery, window, window.document));
diff --git a/js/foundation/js/foundation/foundation.dropdown.js b/js/foundation/js/foundation/foundation.dropdown.js
new file mode 100644 (file)
index 0000000..5db3dea
--- /dev/null
@@ -0,0 +1,468 @@
+;(function ($, window, document, undefined) {
+  'use strict';
+
+  Foundation.libs.dropdown = {
+    name : 'dropdown',
+
+    version : '5.5.3',
+
+    settings : {
+      active_class : 'open',
+      disabled_class : 'disabled',
+      mega_class : 'mega',
+      align : 'bottom',
+      is_hover : false,
+      hover_timeout : 150,
+      opened : function () {},
+      closed : function () {}
+    },
+
+    init : function (scope, method, options) {
+      Foundation.inherit(this, 'throttle');
+
+      $.extend(true, this.settings, method, options);
+      this.bindings(method, options);
+    },
+
+    events : function (scope) {
+      var self = this,
+          S = self.S;
+
+      S(this.scope)
+        .off('.dropdown')
+        .on('click.fndtn.dropdown', '[' + this.attr_name() + ']', function (e) {
+          var settings = S(this).data(self.attr_name(true) + '-init') || self.settings;
+          if (!settings.is_hover || Modernizr.touch) {
+            e.preventDefault();
+            if (S(this).parent('[data-reveal-id]').length) {
+              e.stopPropagation();
+            }
+            self.toggle($(this));
+          }
+        })
+        .on('mouseenter.fndtn.dropdown', '[' + this.attr_name() + '], [' + this.attr_name() + '-content]', function (e) {
+          var $this = S(this),
+              dropdown,
+              target;
+
+          clearTimeout(self.timeout);
+
+          if ($this.data(self.data_attr())) {
+            dropdown = S('#' + $this.data(self.data_attr()));
+            target = $this;
+          } else {
+            dropdown = $this;
+            target = S('[' + self.attr_name() + '="' + dropdown.attr('id') + '"]');
+          }
+
+          var settings = target.data(self.attr_name(true) + '-init') || self.settings;
+
+          if (S(e.currentTarget).data(self.data_attr()) && settings.is_hover) {
+            self.closeall.call(self);
+          }
+
+          if (settings.is_hover) {
+            self.open.apply(self, [dropdown, target]);
+          }
+        })
+        .on('mouseleave.fndtn.dropdown', '[' + this.attr_name() + '], [' + this.attr_name() + '-content]', function (e) {
+          var $this = S(this);
+          var settings;
+
+          if ($this.data(self.data_attr())) {
+              settings = $this.data(self.data_attr(true) + '-init') || self.settings;
+          } else {
+              var target   = S('[' + self.attr_name() + '="' + S(this).attr('id') + '"]'),
+                  settings = target.data(self.attr_name(true) + '-init') || self.settings;
+          }
+
+          self.timeout = setTimeout(function () {
+            if ($this.data(self.data_attr())) {
+              if (settings.is_hover) {
+                self.close.call(self, S('#' + $this.data(self.data_attr())));
+              }
+            } else {
+              if (settings.is_hover) {
+                self.close.call(self, $this);
+              }
+            }
+          }.bind(this), settings.hover_timeout);
+        })
+        .on('click.fndtn.dropdown', function (e) {
+          var parent = S(e.target).closest('[' + self.attr_name() + '-content]');
+          var links  = parent.find('a');
+
+          if (links.length > 0 && parent.attr('aria-autoclose') !== 'false') {
+              self.close.call(self, S('[' + self.attr_name() + '-content]'));
+          }
+
+          if (e.target !== document && !$.contains(document.documentElement, e.target)) {
+            return;
+          }
+
+          if (S(e.target).closest('[' + self.attr_name() + ']').length > 0) {
+            return;
+          }
+
+          if (!(S(e.target).data('revealId')) &&
+            (parent.length > 0 && (S(e.target).is('[' + self.attr_name() + '-content]') ||
+              $.contains(parent.first()[0], e.target)))) {
+            e.stopPropagation();
+            return;
+          }
+
+          self.close.call(self, S('[' + self.attr_name() + '-content]'));
+        })
+        .on('opened.fndtn.dropdown', '[' + self.attr_name() + '-content]', function () {
+          self.settings.opened.call(this);
+        })
+        .on('closed.fndtn.dropdown', '[' + self.attr_name() + '-content]', function () {
+          self.settings.closed.call(this);
+        });
+
+      S(window)
+        .off('.dropdown')
+        .on('resize.fndtn.dropdown', self.throttle(function () {
+          self.resize.call(self);
+        }, 50));
+
+      this.resize();
+    },
+
+    close : function (dropdown) {
+      var self = this;
+      dropdown.each(function (idx) {
+        var original_target = $('[' + self.attr_name() + '=' + dropdown[idx].id + ']') || $('aria-controls=' + dropdown[idx].id + ']');
+        original_target.attr('aria-expanded', 'false');
+        if (self.S(this).hasClass(self.settings.active_class)) {
+          self.S(this)
+            .css(Foundation.rtl ? 'right' : 'left', '-99999px')
+            .attr('aria-hidden', 'true')
+            .removeClass(self.settings.active_class)
+            .prev('[' + self.attr_name() + ']')
+            .removeClass(self.settings.active_class)
+            .removeData('target');
+
+          self.S(this).trigger('closed.fndtn.dropdown', [dropdown]);
+        }
+      });
+      dropdown.removeClass('f-open-' + this.attr_name(true));
+    },
+
+    closeall : function () {
+      var self = this;
+      $.each(self.S('.f-open-' + this.attr_name(true)), function () {
+        self.close.call(self, self.S(this));
+      });
+    },
+
+    open : function (dropdown, target) {
+      this
+        .css(dropdown
+        .addClass(this.settings.active_class), target);
+      dropdown.prev('[' + this.attr_name() + ']').addClass(this.settings.active_class);
+      dropdown.data('target', target.get(0)).trigger('opened.fndtn.dropdown', [dropdown, target]);
+      dropdown.attr('aria-hidden', 'false');
+      target.attr('aria-expanded', 'true');
+      dropdown.focus();
+      dropdown.addClass('f-open-' + this.attr_name(true));
+    },
+
+    data_attr : function () {
+      if (this.namespace.length > 0) {
+        return this.namespace + '-' + this.name;
+      }
+
+      return this.name;
+    },
+
+    toggle : function (target) {
+      if (target.hasClass(this.settings.disabled_class)) {
+        return;
+      }
+      var dropdown = this.S('#' + target.data(this.data_attr()));
+      if (dropdown.length === 0) {
+        // No dropdown found, not continuing
+        return;
+      }
+
+      this.close.call(this, this.S('[' + this.attr_name() + '-content]').not(dropdown));
+
+      if (dropdown.hasClass(this.settings.active_class)) {
+        this.close.call(this, dropdown);
+        if (dropdown.data('target') !== target.get(0)) {
+          this.open.call(this, dropdown, target);
+        }
+      } else {
+        this.open.call(this, dropdown, target);
+      }
+    },
+
+    resize : function () {
+      var dropdown = this.S('[' + this.attr_name() + '-content].open');
+      var target = $(dropdown.data("target"));
+
+      if (dropdown.length && target.length) {
+        this.css(dropdown, target);
+      }
+    },
+
+    css : function (dropdown, target) {
+      var left_offset = Math.max((target.width() - dropdown.width()) / 2, 8),
+          settings = target.data(this.attr_name(true) + '-init') || this.settings,
+          parentOverflow = dropdown.parent().css('overflow-y') || dropdown.parent().css('overflow');
+
+      this.clear_idx();
+
+
+
+      if (this.small()) {
+        var p = this.dirs.bottom.call(dropdown, target, settings);
+
+        dropdown.attr('style', '').removeClass('drop-left drop-right drop-top').css({
+          position : 'absolute',
+          width : '95%',
+          'max-width' : 'none',
+          top : p.top
+        });
+
+        dropdown.css(Foundation.rtl ? 'right' : 'left', left_offset);
+      }
+      // detect if dropdown is in an overflow container
+      else if (parentOverflow !== 'visible') {
+        var offset = target[0].offsetTop + target[0].offsetHeight;
+
+        dropdown.attr('style', '').css({
+          position : 'absolute',
+          top : offset
+        });
+
+        dropdown.css(Foundation.rtl ? 'right' : 'left', left_offset);
+      }
+      else {
+
+        this.style(dropdown, target, settings);
+      }
+
+      return dropdown;
+    },
+
+    style : function (dropdown, target, settings) {
+      var css = $.extend({position : 'absolute'},
+        this.dirs[settings.align].call(dropdown, target, settings));
+
+      dropdown.attr('style', '').css(css);
+    },
+
+    // return CSS property object
+    // `this` is the dropdown
+    dirs : {
+      // Calculate target offset
+      _base : function (t, s) {
+        var o_p = this.offsetParent(),
+            o = o_p.offset(),
+            p = t.offset();
+
+        p.top -= o.top;
+        p.left -= o.left;
+
+        //set some flags on the p object to pass along
+        p.missRight = false;
+        p.missTop = false;
+        p.missLeft = false;
+        p.leftRightFlag = false;
+
+        //lets see if the panel will be off the screen
+        //get the actual width of the page and store it
+        var actualBodyWidth;
+        var windowWidth = window.innerWidth;
+        
+        if (document.getElementsByClassName('row')[0]) {
+          actualBodyWidth = document.getElementsByClassName('row')[0].clientWidth;
+        } else {
+          actualBodyWidth = windowWidth;
+        }
+
+        var actualMarginWidth = (windowWidth - actualBodyWidth) / 2;
+        var actualBoundary = actualBodyWidth;
+
+        if (!this.hasClass('mega') && !s.ignore_repositioning) {
+          var outerWidth = this.outerWidth();
+          var o_left = t.offset().left;
+                 
+          //miss top
+          if (t.offset().top <= this.outerHeight()) {
+            p.missTop = true;
+            actualBoundary = windowWidth - actualMarginWidth;
+            p.leftRightFlag = true;
+          }
+
+          //miss right
+          if (o_left + outerWidth > o_left + actualMarginWidth && o_left - actualMarginWidth > outerWidth) {
+            p.missRight = true;
+            p.missLeft = false;
+          }
+
+          //miss left
+          if (o_left - outerWidth <= 0) {
+            p.missLeft = true;
+            p.missRight = false;
+          }
+        }
+
+        return p;
+      },
+
+      top : function (t, s) {
+        var self = Foundation.libs.dropdown,
+            p = self.dirs._base.call(this, t, s);
+
+        this.addClass('drop-top');
+
+        if (p.missTop == true) {
+          p.top = p.top + t.outerHeight() + this.outerHeight();
+          this.removeClass('drop-top');
+        }
+
+        if (p.missRight == true) {
+          p.left = p.left - this.outerWidth() + t.outerWidth();
+        }
+
+        if (t.outerWidth() < this.outerWidth() || self.small() || this.hasClass(s.mega_menu)) {
+          self.adjust_pip(this, t, s, p);
+        }
+
+        if (Foundation.rtl) {
+          return {left : p.left - this.outerWidth() + t.outerWidth(),
+            top : p.top - this.outerHeight()};
+        }
+
+        return {left : p.left, top : p.top - this.outerHeight()};
+      },
+
+      bottom : function (t, s) {
+        var self = Foundation.libs.dropdown,
+            p = self.dirs._base.call(this, t, s);
+
+        if (p.missRight == true) {
+          p.left = p.left - this.outerWidth() + t.outerWidth();
+        }
+
+        if (t.outerWidth() < this.outerWidth() || self.small() || this.hasClass(s.mega_menu)) {
+          self.adjust_pip(this, t, s, p);
+        }
+
+        if (self.rtl) {
+          return {left : p.left - this.outerWidth() + t.outerWidth(), top : p.top + t.outerHeight()};
+        }
+
+        return {left : p.left, top : p.top + t.outerHeight()};
+      },
+
+      left : function (t, s) {
+        var p = Foundation.libs.dropdown.dirs._base.call(this, t, s);
+
+        this.addClass('drop-left');
+
+        if (p.missLeft == true) {
+          p.left =  p.left + this.outerWidth();
+          p.top = p.top + t.outerHeight();
+          this.removeClass('drop-left');
+        }
+
+        return {left : p.left - this.outerWidth(), top : p.top};
+      },
+
+      right : function (t, s) {
+        var p = Foundation.libs.dropdown.dirs._base.call(this, t, s);
+
+        this.addClass('drop-right');
+
+        if (p.missRight == true) {
+          p.left = p.left - this.outerWidth();
+          p.top = p.top + t.outerHeight();
+          this.removeClass('drop-right');
+        } else {
+          p.triggeredRight = true;
+        }
+
+        var self = Foundation.libs.dropdown;
+
+        if (t.outerWidth() < this.outerWidth() || self.small() || this.hasClass(s.mega_menu)) {
+          self.adjust_pip(this, t, s, p);
+        }
+
+        return {left : p.left + t.outerWidth(), top : p.top};
+      }
+    },
+
+    // Insert rule to style psuedo elements
+    adjust_pip : function (dropdown, target, settings, position) {
+      var sheet = Foundation.stylesheet,
+          pip_offset_base = 8;
+
+      if (dropdown.hasClass(settings.mega_class)) {
+        pip_offset_base = position.left + (target.outerWidth() / 2) - 8;
+      } else if (this.small()) {
+        pip_offset_base += position.left - 8;
+      }
+
+      this.rule_idx = sheet.cssRules.length;
+
+      //default
+      var sel_before = '.f-dropdown.open:before',
+          sel_after  = '.f-dropdown.open:after',
+          css_before = 'left: ' + pip_offset_base + 'px;',
+          css_after  = 'left: ' + (pip_offset_base - 1) + 'px;';
+
+      if (position.missRight == true) {
+        pip_offset_base = dropdown.outerWidth() - 23;
+        sel_before = '.f-dropdown.open:before',
+        sel_after  = '.f-dropdown.open:after',
+        css_before = 'left: ' + pip_offset_base + 'px;',
+        css_after  = 'left: ' + (pip_offset_base - 1) + 'px;';
+      }
+
+      //just a case where right is fired, but its not missing right
+      if (position.triggeredRight == true) {
+        sel_before = '.f-dropdown.open:before',
+        sel_after  = '.f-dropdown.open:after',
+        css_before = 'left:-12px;',
+        css_after  = 'left:-14px;';
+      }
+
+      if (sheet.insertRule) {
+        sheet.insertRule([sel_before, '{', css_before, '}'].join(' '), this.rule_idx);
+        sheet.insertRule([sel_after, '{', css_after, '}'].join(' '), this.rule_idx + 1);
+      } else {
+        sheet.addRule(sel_before, css_before, this.rule_idx);
+        sheet.addRule(sel_after, css_after, this.rule_idx + 1);
+      }
+    },
+
+    // Remove old dropdown rule index
+    clear_idx : function () {
+      var sheet = Foundation.stylesheet;
+
+      if (typeof this.rule_idx !== 'undefined') {
+        sheet.deleteRule(this.rule_idx);
+        sheet.deleteRule(this.rule_idx);
+        delete this.rule_idx;
+      }
+    },
+
+    small : function () {
+      return matchMedia(Foundation.media_queries.small).matches &&
+        !matchMedia(Foundation.media_queries.medium).matches;
+    },
+
+    off : function () {
+      this.S(this.scope).off('.fndtn.dropdown');
+      this.S('html, body').off('.fndtn.dropdown');
+      this.S(window).off('.fndtn.dropdown');
+      this.S('[data-dropdown-content]').off('.fndtn.dropdown');
+    },
+
+    reflow : function () {}
+  };
+}(jQuery, window, window.document));
diff --git a/js/foundation/js/foundation/foundation.equalizer.js b/js/foundation/js/foundation/foundation.equalizer.js
new file mode 100644 (file)
index 0000000..a61a330
--- /dev/null
@@ -0,0 +1,104 @@
+;(function ($, window, document, undefined) {
+  'use strict';
+
+  Foundation.libs.equalizer = {
+    name : 'equalizer',
+
+    version : '5.5.3',
+
+    settings : {
+      use_tallest : true,
+      before_height_change : $.noop,
+      after_height_change : $.noop,
+      equalize_on_stack : false,
+      act_on_hidden_el: false
+    },
+
+    init : function (scope, method, options) {
+      Foundation.inherit(this, 'image_loaded');
+      this.bindings(method, options);
+      this.reflow();
+    },
+
+    events : function () {
+      this.S(window).off('.equalizer').on('resize.fndtn.equalizer', function (e) {
+        this.reflow();
+      }.bind(this));
+    },
+
+    equalize : function (equalizer) {
+      var isStacked = false,
+          group = equalizer.data('equalizer'),
+          settings = equalizer.data(this.attr_name(true)+'-init') || this.settings,
+          vals,
+          firstTopOffset;
+
+      if (settings.act_on_hidden_el) {
+        vals = group ? equalizer.find('['+this.attr_name()+'-watch="'+group+'"]') : equalizer.find('['+this.attr_name()+'-watch]');
+      }
+      else {
+        vals = group ? equalizer.find('['+this.attr_name()+'-watch="'+group+'"]:visible') : equalizer.find('['+this.attr_name()+'-watch]:visible');
+      }
+      
+      if (vals.length === 0) {
+        return;
+      }
+
+      settings.before_height_change();
+      equalizer.trigger('before-height-change.fndth.equalizer');
+      vals.height('inherit');
+
+      if (settings.equalize_on_stack === false) {
+        firstTopOffset = vals.first().offset().top;
+        vals.each(function () {
+          if ($(this).offset().top !== firstTopOffset) {
+            isStacked = true;
+            return false;
+          }
+        });
+        if (isStacked) {
+          return;
+        }
+      }
+
+      var heights = vals.map(function () { return $(this).outerHeight(false) }).get();
+
+      if (settings.use_tallest) {
+        var max = Math.max.apply(null, heights);
+        vals.css('height', max);
+      } else {
+        var min = Math.min.apply(null, heights);
+        vals.css('height', min);
+      }
+
+      settings.after_height_change();
+      equalizer.trigger('after-height-change.fndtn.equalizer');
+    },
+
+    reflow : function () {
+      var self = this;
+
+      this.S('[' + this.attr_name() + ']', this.scope).each(function () {
+        var $eq_target = $(this),
+            media_query = $eq_target.data('equalizer-mq'),
+            ignore_media_query = true;
+
+        if (media_query) {
+          media_query = 'is_' + media_query.replace(/-/g, '_');
+          if (Foundation.utils.hasOwnProperty(media_query)) {
+            ignore_media_query = false;
+          }
+        }
+
+        self.image_loaded(self.S('img', this), function () {
+          if (ignore_media_query || Foundation.utils[media_query]()) {
+            self.equalize($eq_target)
+          } else {
+            var vals = $eq_target.find('[' + self.attr_name() + '-watch]:visible');
+            vals.css('height', 'auto');
+          }
+        });
+      });
+    }
+  };
+})(jQuery, window, window.document);
diff --git a/js/foundation/js/foundation/foundation.interchange.js b/js/foundation/js/foundation/foundation.interchange.js
new file mode 100644 (file)
index 0000000..1096fad
--- /dev/null
@@ -0,0 +1,360 @@
+;(function ($, window, document, undefined) {
+  'use strict';
+
+  Foundation.libs.interchange = {
+    name : 'interchange',
+
+    version : '5.5.3',
+
+    cache : {},
+
+    images_loaded : false,
+    nodes_loaded : false,
+
+    settings : {
+      load_attr : 'interchange',
+
+      named_queries : {
+        'default'     : 'only screen',
+        'small'       : Foundation.media_queries['small'],
+        'small-only'  : Foundation.media_queries['small-only'],
+        'medium'      : Foundation.media_queries['medium'],
+        'medium-only' : Foundation.media_queries['medium-only'],
+        'large'       : Foundation.media_queries['large'],
+        'large-only'  : Foundation.media_queries['large-only'],
+        'xlarge'      : Foundation.media_queries['xlarge'],
+        'xlarge-only' : Foundation.media_queries['xlarge-only'],
+        'xxlarge'     : Foundation.media_queries['xxlarge'],
+        'landscape'   : 'only screen and (orientation: landscape)',
+        'portrait'    : 'only screen and (orientation: portrait)',
+        '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)'
+      },
+
+      directives : {
+        replace : function (el, path, trigger) {
+          // The trigger argument, if called within the directive, fires
+          // an event named after the directive on the element, passing
+          // any parameters along to the event that you pass to trigger.
+          //
+          // ex. trigger(), trigger([a, b, c]), or trigger(a, b, c)
+          //
+          // This allows you to bind a callback like so:
+          // $('#interchangeContainer').on('replace', function (e, a, b, c) {
+          //   console.log($(this).html(), a, b, c);
+          // });
+
+          if (el !== null && /IMG/.test(el[0].nodeName)) {
+            var orig_path = $.each(el, function(){this.src = path;});
+            // var orig_path = el[0].src;
+
+            if (new RegExp(path, 'i').test(orig_path)) {
+              return;
+            }
+
+            el.attr("src", path);
+
+            return trigger(el[0].src);
+          }
+          var last_path = el.data(this.data_attr + '-last-path'),
+              self = this;
+
+          if (last_path == path) {
+            return;
+          }
+
+          if (/\.(gif|jpg|jpeg|tiff|png)([?#].*)?/i.test(path)) {
+            $(el).css('background-image', 'url(' + path + ')');
+            el.data('interchange-last-path', path);
+            return trigger(path);
+          }
+
+          return $.get(path, function (response) {
+            el.html(response);
+            el.data(self.data_attr + '-last-path', path);
+            trigger();
+          });
+
+        }
+      }
+    },
+
+    init : function (scope, method, options) {
+      Foundation.inherit(this, 'throttle random_str');
+
+      this.data_attr = this.set_data_attr();
+      $.extend(true, this.settings, method, options);
+      this.bindings(method, options);
+      this.reflow();
+    },
+
+    get_media_hash : function () {
+        var mediaHash = '';
+        for (var queryName in this.settings.named_queries ) {
+            mediaHash += matchMedia(this.settings.named_queries[queryName]).matches.toString();
+        }
+        return mediaHash;
+    },
+
+    events : function () {
+      var self = this, prevMediaHash;
+
+      $(window)
+        .off('.interchange')
+        .on('resize.fndtn.interchange', self.throttle(function () {
+            var currMediaHash = self.get_media_hash();
+            if (currMediaHash !== prevMediaHash) {
+                self.resize();
+            }
+            prevMediaHash = currMediaHash;
+        }, 50));
+
+      return this;
+    },
+
+    resize : function () {
+      var cache = this.cache;
+
+      if (!this.images_loaded || !this.nodes_loaded) {
+        setTimeout($.proxy(this.resize, this), 50);
+        return;
+      }
+
+      for (var uuid in cache) {
+        if (cache.hasOwnProperty(uuid)) {
+          var passed = this.results(uuid, cache[uuid]);
+          if (passed) {
+            this.settings.directives[passed
+              .scenario[1]].call(this, passed.el, passed.scenario[0], (function (passed) {
+                if (arguments[0] instanceof Array) {
+                  var args = arguments[0];
+                } else {
+                  var args = Array.prototype.slice.call(arguments, 0);
+                }
+
+                return function() {
+                  passed.el.trigger(passed.scenario[1], args);
+                }
+              }(passed)));
+          }
+        }
+      }
+
+    },
+
+    results : function (uuid, scenarios) {
+      var count = scenarios.length;
+
+      if (count > 0) {
+        var el = this.S('[' + this.add_namespace('data-uuid') + '="' + uuid + '"]');
+
+        while (count--) {
+          var mq, rule = scenarios[count][2];
+          if (this.settings.named_queries.hasOwnProperty(rule)) {
+            mq = matchMedia(this.settings.named_queries[rule]);
+          } else {
+            mq = matchMedia(rule);
+          }
+          if (mq.matches) {
+            return {el : el, scenario : scenarios[count]};
+          }
+        }
+      }
+
+      return false;
+    },
+
+    load : function (type, force_update) {
+      if (typeof this['cached_' + type] === 'undefined' || force_update) {
+        this['update_' + type]();
+      }
+
+      return this['cached_' + type];
+    },
+
+    update_images : function () {
+      var images = this.S('img[' + this.data_attr + ']'),
+          count = images.length,
+          i = count,
+          loaded_count = 0,
+          data_attr = this.data_attr;
+
+      this.cache = {};
+      this.cached_images = [];
+      this.images_loaded = (count === 0);
+
+      while (i--) {
+        loaded_count++;
+        if (images[i]) {
+          var str = images[i].getAttribute(data_attr) || '';
+
+          if (str.length > 0) {
+            this.cached_images.push(images[i]);
+          }
+        }
+
+        if (loaded_count === count) {
+          this.images_loaded = true;
+          this.enhance('images');
+        }
+      }
+
+      return this;
+    },
+
+    update_nodes : function () {
+      var nodes = this.S('[' + this.data_attr + ']').not('img'),
+          count = nodes.length,
+          i = count,
+          loaded_count = 0,
+          data_attr = this.data_attr;
+
+      this.cached_nodes = [];
+      this.nodes_loaded = (count === 0);
+
+      while (i--) {
+        loaded_count++;
+        var str = nodes[i].getAttribute(data_attr) || '';
+
+        if (str.length > 0) {
+          this.cached_nodes.push(nodes[i]);
+        }
+
+        if (loaded_count === count) {
+          this.nodes_loaded = true;
+          this.enhance('nodes');
+        }
+      }
+
+      return this;
+    },
+
+    enhance : function (type) {
+      var i = this['cached_' + type].length;
+
+      while (i--) {
+        this.object($(this['cached_' + type][i]));
+      }
+
+      return $(window).trigger('resize.fndtn.interchange');
+    },
+
+    convert_directive : function (directive) {
+
+      var trimmed = this.trim(directive);
+
+      if (trimmed.length > 0) {
+        return trimmed;
+      }
+
+      return 'replace';
+    },
+
+    parse_scenario : function (scenario) {
+      // This logic had to be made more complex since some users were using commas in the url path
+      // So we cannot simply just split on a comma
+
+      var directive_match = scenario[0].match(/(.+),\s*(\w+)\s*$/),
+      // getting the mq has gotten a bit complicated since we started accounting for several use cases
+      // of URLs. For now we'll continue to match these scenarios, but we may consider having these scenarios
+      // as nested objects or arrays in F6.
+      // regex: match everything before close parenthesis for mq
+      media_query         = scenario[1].match(/(.*)\)/);
+
+      if (directive_match) {
+        var path  = directive_match[1],
+        directive = directive_match[2];
+
+      } else {
+        var cached_split = scenario[0].split(/,\s*$/),
+        path             = cached_split[0],
+        directive        = '';
+      }
+
+      return [this.trim(path), this.convert_directive(directive), this.trim(media_query[1])];
+    },
+
+    object : function (el) {
+      var raw_arr = this.parse_data_attr(el),
+          scenarios = [],
+          i = raw_arr.length;
+
+      if (i > 0) {
+        while (i--) {
+          // split array between comma delimited content and mq
+          // regex: comma, optional space, open parenthesis
+          var scenario = raw_arr[i].split(/,\s?\(/);
+
+          if (scenario.length > 1) {
+            var params = this.parse_scenario(scenario);
+            scenarios.push(params);
+          }
+        }
+      }
+
+      return this.store(el, scenarios);
+    },
+
+    store : function (el, scenarios) {
+      var uuid = this.random_str(),
+          current_uuid = el.data(this.add_namespace('uuid', true));
+
+      if (this.cache[current_uuid]) {
+        return this.cache[current_uuid];
+      }
+
+      el.attr(this.add_namespace('data-uuid'), uuid);
+      return this.cache[uuid] = scenarios;
+    },
+
+    trim : function (str) {
+
+      if (typeof str === 'string') {
+        return $.trim(str);
+      }
+
+      return str;
+    },
+
+    set_data_attr : function (init) {
+      if (init) {
+        if (this.namespace.length > 0) {
+          return this.namespace + '-' + this.settings.load_attr;
+        }
+
+        return this.settings.load_attr;
+      }
+
+      if (this.namespace.length > 0) {
+        return 'data-' + this.namespace + '-' + this.settings.load_attr;
+      }
+
+      return 'data-' + this.settings.load_attr;
+    },
+
+    parse_data_attr : function (el) {
+      var raw = el.attr(this.attr_name()).split(/\[(.*?)\]/),
+          i = raw.length,
+          output = [];
+
+      while (i--) {
+        if (raw[i].replace(/[\W\d]+/, '').length > 4) {
+          output.push(raw[i]);
+        }
+      }
+
+      return output;
+    },
+
+    reflow : function () {
+      this.load('images', true);
+      this.load('nodes', true);
+    }
+
+  };
+
+}(jQuery, window, window.document));
diff --git a/js/foundation/js/foundation/foundation.joyride.js b/js/foundation/js/foundation/foundation.joyride.js
new file mode 100644 (file)
index 0000000..f251119
--- /dev/null
@@ -0,0 +1,935 @@
+;(function ($, window, document, undefined) {
+  'use strict';
+
+  var Modernizr = Modernizr || false;
+
+  Foundation.libs.joyride = {
+    name : 'joyride',
+
+    version : '5.5.3',
+
+    defaults : {
+      expose                   : false,     // turn on or off the expose feature
+      modal                    : true,      // Whether to cover page with modal during the tour
+      keyboard                 : true,      // enable left, right and esc keystrokes
+      tip_location             : 'bottom',  // 'top', 'bottom', 'left' or 'right' in relation to parent
+      nub_position             : 'auto',    // override on a per tooltip bases
+      scroll_speed             : 1500,      // Page scrolling speed in milliseconds, 0 = no scroll animation
+      scroll_animation         : 'linear',  // supports 'swing' and 'linear', extend with jQuery UI.
+      timer                    : 0,         // 0 = no timer , all other numbers = timer in milliseconds
+      start_timer_on_click     : true,      // true or false - true requires clicking the first button start the timer
+      start_offset             : 0,         // the index of the tooltip you want to start on (index of the li)
+      next_button              : true,      // true or false to control whether a next button is used
+      prev_button              : true,      // true or false to control whether a prev button is used
+      tip_animation            : 'fade',    // 'pop' or 'fade' in each tip
+      pause_after              : [],        // array of indexes where to pause the tour after
+      exposed                  : [],        // array of expose elements
+      tip_animation_fade_speed : 300,       // when tipAnimation = 'fade' this is speed in milliseconds for the transition
+      cookie_monster           : false,     // true or false to control whether cookies are used
+      cookie_name              : 'joyride', // Name the cookie you'll use
+      cookie_domain            : false,     // Will this cookie be attached to a domain, ie. '.notableapp.com'
+      cookie_expires           : 365,       // set when you would like the cookie to expire.
+      tip_container            : 'body',    // Where will the tip be attached
+      abort_on_close           : true,      // When true, the close event will not fire any callback
+      tip_location_patterns    : {
+        top : ['bottom'],
+        bottom : [], // bottom should not need to be repositioned
+        left : ['right', 'top', 'bottom'],
+        right : ['left', 'top', 'bottom']
+      },
+      post_ride_callback     : function () {},    // A method to call once the tour closes (canceled or complete)
+      post_step_callback     : function () {},    // A method to call after each step
+      pre_step_callback      : function () {},    // A method to call before each step
+      pre_ride_callback      : function () {},    // A method to call before the tour starts (passed index, tip, and cloned exposed element)
+      post_expose_callback   : function () {},    // A method to call after an element has been exposed
+      template : { // HTML segments for tip layout
+        link          : '<a href="#close" class="joyride-close-tip">&times;</a>',
+        timer         : '<div class="joyride-timer-indicator-wrap"><span class="joyride-timer-indicator"></span></div>',
+        tip           : '<div class="joyride-tip-guide"><span class="joyride-nub"></span></div>',
+        wrapper       : '<div class="joyride-content-wrapper"></div>',
+        button        : '<a href="#" class="small button joyride-next-tip"></a>',
+        prev_button   : '<a href="#" class="small button joyride-prev-tip"></a>',
+        modal         : '<div class="joyride-modal-bg"></div>',
+        expose        : '<div class="joyride-expose-wrapper"></div>',
+        expose_cover  : '<div class="joyride-expose-cover"></div>'
+      },
+      expose_add_class : '' // One or more space-separated class names to be added to exposed element
+    },
+
+    init : function (scope, method, options) {
+      Foundation.inherit(this, 'throttle random_str');
+
+      this.settings = this.settings || $.extend({}, this.defaults, (options || method));
+
+      this.bindings(method, options)
+    },
+
+    go_next : function () {
+      if (this.settings.$li.next().length < 1) {
+        this.end();
+      } else if (this.settings.timer > 0) {
+        clearTimeout(this.settings.automate);
+        this.hide();
+        this.show();
+        this.startTimer();
+      } else {
+        this.hide();
+        this.show();
+      }
+    },
+
+    go_prev : function () {
+      if (this.settings.$li.prev().length < 1) {
+        // Do nothing if there are no prev element
+      } else if (this.settings.timer > 0) {
+        clearTimeout(this.settings.automate);
+        this.hide();
+        this.show(null, true);
+        this.startTimer();
+      } else {
+        this.hide();
+        this.show(null, true);
+      }
+    },
+
+    events : function () {
+      var self = this;
+
+      $(this.scope)
+        .off('.joyride')
+        .on('click.fndtn.joyride', '.joyride-next-tip, .joyride-modal-bg', function (e) {
+          e.preventDefault();
+          this.go_next()
+        }.bind(this))
+        .on('click.fndtn.joyride', '.joyride-prev-tip', function (e) {
+          e.preventDefault();
+          this.go_prev();
+        }.bind(this))
+
+        .on('click.fndtn.joyride', '.joyride-close-tip', function (e) {
+          e.preventDefault();
+          this.end(this.settings.abort_on_close);
+        }.bind(this))
+
+        .on('keyup.fndtn.joyride', function (e) {
+          // Don't do anything if keystrokes are disabled
+          // or if the joyride is not being shown
+          if (!this.settings.keyboard || !this.settings.riding) {
+            return;
+          }
+
+          switch (e.which) {
+            case 39: // right arrow
+              e.preventDefault();
+              this.go_next();
+              break;
+            case 37: // left arrow
+              e.preventDefault();
+              this.go_prev();
+              break;
+            case 27: // escape
+              e.preventDefault();
+              this.end(this.settings.abort_on_close);
+          }
+        }.bind(this));
+
+      $(window)
+        .off('.joyride')
+        .on('resize.fndtn.joyride', self.throttle(function () {
+          if ($('[' + self.attr_name() + ']').length > 0 && self.settings.$next_tip && self.settings.riding) {
+            if (self.settings.exposed.length > 0) {
+              var $els = $(self.settings.exposed);
+
+              $els.each(function () {
+                var $this = $(this);
+                self.un_expose($this);
+                self.expose($this);
+              });
+            }
+
+            if (self.is_phone()) {
+              self.pos_phone();
+            } else {
+              self.pos_default(false);
+            }
+          }
+        }, 100));
+    },
+
+    start : function () {
+      var self = this,
+          $this = $('[' + this.attr_name() + ']', this.scope),
+          integer_settings = ['timer', 'scrollSpeed', 'startOffset', 'tipAnimationFadeSpeed', 'cookieExpires'],
+          int_settings_count = integer_settings.length;
+
+      if (!$this.length > 0) {
+        return;
+      }
+
+      if (!this.settings.init) {
+        this.events();
+      }
+
+      this.settings = $this.data(this.attr_name(true) + '-init');
+
+      // non configureable settings
+      this.settings.$content_el = $this;
+      this.settings.$body = $(this.settings.tip_container);
+      this.settings.body_offset = $(this.settings.tip_container).position();
+      this.settings.$tip_content = this.settings.$content_el.find('> li');
+      this.settings.paused = false;
+      this.settings.attempts = 0;
+      this.settings.riding = true;
+
+      // can we create cookies?
+      if (typeof $.cookie !== 'function') {
+        this.settings.cookie_monster = false;
+      }
+
+      // generate the tips and insert into dom.
+      if (!this.settings.cookie_monster || this.settings.cookie_monster && !$.cookie(this.settings.cookie_name)) {
+        this.settings.$tip_content.each(function (index) {
+          var $this = $(this);
+          this.settings = $.extend({}, self.defaults, self.data_options($this));
+
+          // Make sure that settings parsed from data_options are integers where necessary
+          var i = int_settings_count;
+          while (i--) {
+            self.settings[integer_settings[i]] = parseInt(self.settings[integer_settings[i]], 10);
+          }
+          self.create({$li : $this, index : index});
+        });
+
+        // show first tip
+        if (!this.settings.start_timer_on_click && this.settings.timer > 0) {
+          this.show('init');
+          this.startTimer();
+        } else {
+          this.show('init');
+        }
+
+      }
+    },
+
+    resume : function () {
+      this.set_li();
+      this.show();
+    },
+
+    tip_template : function (opts) {
+      var $blank, content;
+
+      opts.tip_class = opts.tip_class || '';
+
+      $blank = $(this.settings.template.tip).addClass(opts.tip_class);
+      content = $.trim($(opts.li).html()) +
+        this.prev_button_text(opts.prev_button_text, opts.index) +
+        this.button_text(opts.button_text) +
+        this.settings.template.link +
+        this.timer_instance(opts.index);
+
+      $blank.append($(this.settings.template.wrapper));
+      $blank.first().attr(this.add_namespace('data-index'), opts.index);
+      $('.joyride-content-wrapper', $blank).append(content);
+
+      return $blank[0];
+    },
+
+    timer_instance : function (index) {
+      var txt;
+
+      if ((index === 0 && this.settings.start_timer_on_click && this.settings.timer > 0) || this.settings.timer === 0) {
+        txt = '';
+      } else {
+        txt = $(this.settings.template.timer)[0].outerHTML;
+      }
+      return txt;
+    },
+
+    button_text : function (txt) {
+      if (this.settings.tip_settings.next_button) {
+        txt = $.trim(txt) || 'Next';
+        txt = $(this.settings.template.button).append(txt)[0].outerHTML;
+      } else {
+        txt = '';
+      }
+      return txt;
+    },
+
+    prev_button_text : function (txt, idx) {
+      if (this.settings.tip_settings.prev_button) {
+        txt = $.trim(txt) || 'Previous';
+
+        // Add the disabled class to the button if it's the first element
+        if (idx == 0) {
+          txt = $(this.settings.template.prev_button).append(txt).addClass('disabled')[0].outerHTML;
+        } else {
+          txt = $(this.settings.template.prev_button).append(txt)[0].outerHTML;
+        }
+      } else {
+        txt = '';
+      }
+      return txt;
+    },
+
+    create : function (opts) {
+      this.settings.tip_settings = $.extend({}, this.settings, this.data_options(opts.$li));
+      var buttonText = opts.$li.attr(this.add_namespace('data-button')) || opts.$li.attr(this.add_namespace('data-text')),
+          prevButtonText = opts.$li.attr(this.add_namespace('data-button-prev')) || opts.$li.attr(this.add_namespace('data-prev-text')),
+        tipClass = opts.$li.attr('class'),
+        $tip_content = $(this.tip_template({
+          tip_class : tipClass,
+          index : opts.index,
+          button_text : buttonText,
+          prev_button_text : prevButtonText,
+          li : opts.$li
+        }));
+
+      $(this.settings.tip_container).append($tip_content);
+    },
+
+    show : function (init, is_prev) {
+      var $timer = null;
+
+      // are we paused?
+      if (this.settings.$li === undefined || ($.inArray(this.settings.$li.index(), this.settings.pause_after) === -1)) {
+
+        // don't go to the next li if the tour was paused
+        if (this.settings.paused) {
+          this.settings.paused = false;
+        } else {
+          this.set_li(init, is_prev);
+        }
+
+        this.settings.attempts = 0;
+
+        if (this.settings.$li.length && this.settings.$target.length > 0) {
+          if (init) { //run when we first start
+            this.settings.pre_ride_callback(this.settings.$li.index(), this.settings.$next_tip);
+            if (this.settings.modal) {
+              this.show_modal();
+            }
+          }
+
+          this.settings.pre_step_callback(this.settings.$li.index(), this.settings.$next_tip);
+
+          if (this.settings.modal && this.settings.expose) {
+            this.expose();
+          }
+
+          this.settings.tip_settings = $.extend({}, this.settings, this.data_options(this.settings.$li));
+
+          this.settings.timer = parseInt(this.settings.timer, 10);
+
+          this.settings.tip_settings.tip_location_pattern = this.settings.tip_location_patterns[this.settings.tip_settings.tip_location];
+
+          // scroll and hide bg if not modal and not expose
+          if (!/body/i.test(this.settings.$target.selector) && !this.settings.expose) {
+            var joyridemodalbg = $('.joyride-modal-bg');
+            if (/pop/i.test(this.settings.tipAnimation)) {
+                joyridemodalbg.hide();
+            } else {
+                joyridemodalbg.fadeOut(this.settings.tipAnimationFadeSpeed);
+            }
+            this.scroll_to();
+          }
+
+          if (this.is_phone()) {
+            this.pos_phone(true);
+          } else {
+            this.pos_default(true);
+          }
+
+          $timer = this.settings.$next_tip.find('.joyride-timer-indicator');
+
+          if (/pop/i.test(this.settings.tip_animation)) {
+
+            $timer.width(0);
+
+            if (this.settings.timer > 0) {
+
+              this.settings.$next_tip.show();
+
+              setTimeout(function () {
+                $timer.animate({
+                  width : $timer.parent().width()
+                }, this.settings.timer, 'linear');
+              }.bind(this), this.settings.tip_animation_fade_speed);
+
+            } else {
+              this.settings.$next_tip.show();
+
+            }
+
+          } else if (/fade/i.test(this.settings.tip_animation)) {
+
+            $timer.width(0);
+
+            if (this.settings.timer > 0) {
+
+              this.settings.$next_tip
+                .fadeIn(this.settings.tip_animation_fade_speed)
+                .show();
+
+              setTimeout(function () {
+                $timer.animate({
+                  width : $timer.parent().width()
+                }, this.settings.timer, 'linear');
+              }.bind(this), this.settings.tip_animation_fade_speed);
+
+            } else {
+              this.settings.$next_tip.fadeIn(this.settings.tip_animation_fade_speed);
+            }
+          }
+
+          this.settings.$current_tip = this.settings.$next_tip;
+
+        // skip non-existant targets
+        } else if (this.settings.$li && this.settings.$target.length < 1) {
+
+          this.show(init, is_prev);
+
+        } else {
+
+          this.end();
+
+        }
+      } else {
+
+        this.settings.paused = true;
+
+      }
+
+    },
+
+    is_phone : function () {
+      return matchMedia(Foundation.media_queries.small).matches &&
+        !matchMedia(Foundation.media_queries.medium).matches;
+    },
+
+    hide : function () {
+      if (this.settings.modal && this.settings.expose) {
+        this.un_expose();
+      }
+
+      if (!this.settings.modal) {
+        $('.joyride-modal-bg').hide();
+      }
+
+      // Prevent scroll bouncing...wait to remove from layout
+      this.settings.$current_tip.css('visibility', 'hidden');
+      setTimeout($.proxy(function () {
+        this.hide();
+        this.css('visibility', 'visible');
+      }, this.settings.$current_tip), 0);
+      this.settings.post_step_callback(this.settings.$li.index(),
+        this.settings.$current_tip);
+    },
+
+    set_li : function (init, is_prev) {
+      if (init) {
+        this.settings.$li = this.settings.$tip_content.eq(this.settings.start_offset);
+        this.set_next_tip();
+        this.settings.$current_tip = this.settings.$next_tip;
+      } else {
+        if (is_prev) {
+          this.settings.$li = this.settings.$li.prev();
+        } else {
+          this.settings.$li = this.settings.$li.next();
+        }
+        this.set_next_tip();
+      }
+
+      this.set_target();
+    },
+
+    set_next_tip : function () {
+      this.settings.$next_tip = $('.joyride-tip-guide').eq(this.settings.$li.index());
+      this.settings.$next_tip.data('closed', '');
+    },
+
+    set_target : function () {
+      var cl = this.settings.$li.attr(this.add_namespace('data-class')),
+          id = this.settings.$li.attr(this.add_namespace('data-id')),
+          $sel = function () {
+            if (id) {
+              return $(document.getElementById(id));
+            } else if (cl) {
+              return $('.' + cl).first();
+            } else {
+              return $('body');
+            }
+          };
+
+      this.settings.$target = $sel();
+    },
+
+    scroll_to : function () {
+      var window_half, tipOffset;
+
+      window_half = $(window).height() / 2;
+      tipOffset = Math.ceil(this.settings.$target.offset().top - window_half + this.settings.$next_tip.outerHeight());
+
+      if (tipOffset != 0) {
+        $('html, body').stop().animate({
+          scrollTop : tipOffset
+        }, this.settings.scroll_speed, 'swing');
+      }
+    },
+
+    paused : function () {
+      return ($.inArray((this.settings.$li.index() + 1), this.settings.pause_after) === -1);
+    },
+
+    restart : function () {
+      this.hide();
+      this.settings.$li = undefined;
+      this.show('init');
+    },
+
+    pos_default : function (init) {
+      var $nub = this.settings.$next_tip.find('.joyride-nub'),
+          nub_width = Math.ceil($nub.outerWidth() / 2),
+          nub_height = Math.ceil($nub.outerHeight() / 2),
+          toggle = init || false;
+
+      // tip must not be "display: none" to calculate position
+      if (toggle) {
+        this.settings.$next_tip.css('visibility', 'hidden');
+        this.settings.$next_tip.show();
+      }
+
+      if (!/body/i.test(this.settings.$target.selector)) {
+        var topAdjustment = this.settings.tip_settings.tipAdjustmentY ? parseInt(this.settings.tip_settings.tipAdjustmentY) : 0,
+            leftAdjustment = this.settings.tip_settings.tipAdjustmentX ? parseInt(this.settings.tip_settings.tipAdjustmentX) : 0;
+
+        if (this.bottom()) {
+          if (this.rtl) {
+            this.settings.$next_tip.css({
+              top : (this.settings.$target.offset().top + nub_height + this.settings.$target.outerHeight() + topAdjustment),
+              left : this.settings.$target.offset().left + this.settings.$target.outerWidth() - this.settings.$next_tip.outerWidth() + leftAdjustment});
+          } else {
+            this.settings.$next_tip.css({
+              top : (this.settings.$target.offset().top + nub_height + this.settings.$target.outerHeight() + topAdjustment),
+              left : this.settings.$target.offset().left + leftAdjustment});
+          }
+
+          this.nub_position($nub, this.settings.tip_settings.nub_position, 'top');
+
+        } else if (this.top()) {
+          if (this.rtl) {
+            this.settings.$next_tip.css({
+              top : (this.settings.$target.offset().top - this.settings.$next_tip.outerHeight() - nub_height + topAdjustment),
+              left : this.settings.$target.offset().left + this.settings.$target.outerWidth() - this.settings.$next_tip.outerWidth()});
+          } else {
+            this.settings.$next_tip.css({
+              top : (this.settings.$target.offset().top - this.settings.$next_tip.outerHeight() - nub_height + topAdjustment),
+              left : this.settings.$target.offset().left + leftAdjustment});
+          }
+
+          this.nub_position($nub, this.settings.tip_settings.nub_position, 'bottom');
+
+        } else if (this.right()) {
+
+          this.settings.$next_tip.css({
+            top : this.settings.$target.offset().top + topAdjustment,
+            left : (this.settings.$target.outerWidth() + this.settings.$target.offset().left + nub_width + leftAdjustment)});
+
+          this.nub_position($nub, this.settings.tip_settings.nub_position, 'left');
+
+        } else if (this.left()) {
+
+          this.settings.$next_tip.css({
+            top : this.settings.$target.offset().top + topAdjustment,
+            left : (this.settings.$target.offset().left - this.settings.$next_tip.outerWidth() - nub_width + leftAdjustment)});
+
+          this.nub_position($nub, this.settings.tip_settings.nub_position, 'right');
+
+        }
+
+        if (!this.visible(this.corners(this.settings.$next_tip)) && this.settings.attempts < this.settings.tip_settings.tip_location_pattern.length) {
+
+          $nub.removeClass('bottom')
+            .removeClass('top')
+            .removeClass('right')
+            .removeClass('left');
+
+          this.settings.tip_settings.tip_location = this.settings.tip_settings.tip_location_pattern[this.settings.attempts];
+
+          this.settings.attempts++;
+
+          this.pos_default();
+
+        }
+
+      } else if (this.settings.$li.length) {
+
+        this.pos_modal($nub);
+
+      }
+
+      if (toggle) {
+        this.settings.$next_tip.hide();
+        this.settings.$next_tip.css('visibility', 'visible');
+      }
+
+    },
+
+    pos_phone : function (init) {
+      var tip_height = this.settings.$next_tip.outerHeight(),
+          tip_offset = this.settings.$next_tip.offset(),
+          target_height = this.settings.$target.outerHeight(),
+          $nub = $('.joyride-nub', this.settings.$next_tip),
+          nub_height = Math.ceil($nub.outerHeight() / 2),
+          toggle = init || false;
+
+      $nub.removeClass('bottom')
+        .removeClass('top')
+        .removeClass('right')
+        .removeClass('left');
+
+      if (toggle) {
+        this.settings.$next_tip.css('visibility', 'hidden');
+        this.settings.$next_tip.show();
+      }
+
+      if (!/body/i.test(this.settings.$target.selector)) {
+
+        if (this.top()) {
+
+            this.settings.$next_tip.offset({top : this.settings.$target.offset().top - tip_height - nub_height});
+            $nub.addClass('bottom');
+
+        } else {
+
+          this.settings.$next_tip.offset({top : this.settings.$target.offset().top + target_height + nub_height});
+          $nub.addClass('top');
+
+        }
+
+      } else if (this.settings.$li.length) {
+        this.pos_modal($nub);
+      }
+
+      if (toggle) {
+        this.settings.$next_tip.hide();
+        this.settings.$next_tip.css('visibility', 'visible');
+      }
+    },
+
+    pos_modal : function ($nub) {
+      this.center();
+      $nub.hide();
+
+      this.show_modal();
+    },
+
+    show_modal : function () {
+      if (!this.settings.$next_tip.data('closed')) {
+        var joyridemodalbg =  $('.joyride-modal-bg');
+        if (joyridemodalbg.length < 1) {
+          var joyridemodalbg = $(this.settings.template.modal);
+          joyridemodalbg.appendTo('body');
+        }
+
+        if (/pop/i.test(this.settings.tip_animation)) {
+            joyridemodalbg.show();
+        } else {
+            joyridemodalbg.fadeIn(this.settings.tip_animation_fade_speed);
+        }
+      }
+    },
+
+    expose : function () {
+      var expose,
+          exposeCover,
+          el,
+          origCSS,
+          origClasses,
+          randId = 'expose-' + this.random_str(6);
+
+      if (arguments.length > 0 && arguments[0] instanceof $) {
+        el = arguments[0];
+      } else if (this.settings.$target && !/body/i.test(this.settings.$target.selector)) {
+        el = this.settings.$target;
+      } else {
+        return false;
+      }
+
+      if (el.length < 1) {
+        if (window.console) {
+          console.error('element not valid', el);
+        }
+        return false;
+      }
+
+      expose = $(this.settings.template.expose);
+      this.settings.$body.append(expose);
+      expose.css({
+        top : el.offset().top,
+        left : el.offset().left,
+        width : el.outerWidth(true),
+        height : el.outerHeight(true)
+      });
+
+      exposeCover = $(this.settings.template.expose_cover);
+
+      origCSS = {
+        zIndex : el.css('z-index'),
+        position : el.css('position')
+      };
+
+      origClasses = el.attr('class') == null ? '' : el.attr('class');
+
+      el.css('z-index', parseInt(expose.css('z-index')) + 1);
+
+      if (origCSS.position == 'static') {
+        el.css('position', 'relative');
+      }
+
+      el.data('expose-css', origCSS);
+      el.data('orig-class', origClasses);
+      el.attr('class', origClasses + ' ' + this.settings.expose_add_class);
+
+      exposeCover.css({
+        top : el.offset().top,
+        left : el.offset().left,
+        width : el.outerWidth(true),
+        height : el.outerHeight(true)
+      });
+
+      if (this.settings.modal) {
+        this.show_modal();
+      }
+
+      this.settings.$body.append(exposeCover);
+      expose.addClass(randId);
+      exposeCover.addClass(randId);
+      el.data('expose', randId);
+      this.settings.post_expose_callback(this.settings.$li.index(), this.settings.$next_tip, el);
+      this.add_exposed(el);
+    },
+
+    un_expose : function () {
+      var exposeId,
+          el,
+          expose,
+          origCSS,
+          origClasses,
+          clearAll = false;
+
+      if (arguments.length > 0 && arguments[0] instanceof $) {
+        el = arguments[0];
+      } else if (this.settings.$target && !/body/i.test(this.settings.$target.selector)) {
+        el = this.settings.$target;
+      } else {
+        return false;
+      }
+
+      if (el.length < 1) {
+        if (window.console) {
+          console.error('element not valid', el);
+        }
+        return false;
+      }
+
+      exposeId = el.data('expose');
+      expose = $('.' + exposeId);
+
+      if (arguments.length > 1) {
+        clearAll = arguments[1];
+      }
+
+      if (clearAll === true) {
+        $('.joyride-expose-wrapper,.joyride-expose-cover').remove();
+      } else {
+        expose.remove();
+      }
+
+      origCSS = el.data('expose-css');
+
+      if (origCSS.zIndex == 'auto') {
+        el.css('z-index', '');
+      } else {
+        el.css('z-index', origCSS.zIndex);
+      }
+
+      if (origCSS.position != el.css('position')) {
+        if (origCSS.position == 'static') {// this is default, no need to set it.
+          el.css('position', '');
+        } else {
+          el.css('position', origCSS.position);
+        }
+      }
+
+      origClasses = el.data('orig-class');
+      el.attr('class', origClasses);
+      el.removeData('orig-classes');
+
+      el.removeData('expose');
+      el.removeData('expose-z-index');
+      this.remove_exposed(el);
+    },
+
+    add_exposed : function (el) {
+      this.settings.exposed = this.settings.exposed || [];
+      if (el instanceof $ || typeof el === 'object') {
+        this.settings.exposed.push(el[0]);
+      } else if (typeof el == 'string') {
+        this.settings.exposed.push(el);
+      }
+    },
+
+    remove_exposed : function (el) {
+      var search, i;
+      if (el instanceof $) {
+        search = el[0]
+      } else if (typeof el == 'string') {
+        search = el;
+      }
+
+      this.settings.exposed = this.settings.exposed || [];
+      i = this.settings.exposed.length;
+
+      while (i--) {
+        if (this.settings.exposed[i] == search) {
+          this.settings.exposed.splice(i, 1);
+          return;
+        }
+      }
+    },
+
+    center : function () {
+      var $w = $(window);
+
+      this.settings.$next_tip.css({
+        top : ((($w.height() - this.settings.$next_tip.outerHeight()) / 2) + $w.scrollTop()),
+        left : ((($w.width() - this.settings.$next_tip.outerWidth()) / 2) + $w.scrollLeft())
+      });
+
+      return true;
+    },
+
+    bottom : function () {
+      return /bottom/i.test(this.settings.tip_settings.tip_location);
+    },
+
+    top : function () {
+      return /top/i.test(this.settings.tip_settings.tip_location);
+    },
+
+    right : function () {
+      return /right/i.test(this.settings.tip_settings.tip_location);
+    },
+
+    left : function () {
+      return /left/i.test(this.settings.tip_settings.tip_location);
+    },
+
+    corners : function (el) {
+      if (el.length === 0) {
+         return [false, false, false, false];   
+      }
+      
+      var w = $(window),
+          window_half = w.height() / 2,
+          //using this to calculate since scroll may not have finished yet.
+          tipOffset = Math.ceil(this.settings.$target.offset().top - window_half + this.settings.$next_tip.outerHeight()),
+          right = w.width() + w.scrollLeft(),
+          offsetBottom =  w.height() + tipOffset,
+          bottom = w.height() + w.scrollTop(),
+          top = w.scrollTop();
+
+      if (tipOffset < top) {
+        if (tipOffset < 0) {
+          top = 0;
+        } else {
+          top = tipOffset;
+        }
+      }
+
+      if (offsetBottom > bottom) {
+        bottom = offsetBottom;
+      }
+
+      return [
+        el.offset().top < top,
+        right < el.offset().left + el.outerWidth(),
+        bottom < el.offset().top + el.outerHeight(),
+        w.scrollLeft() > el.offset().left
+      ];
+    },
+
+    visible : function (hidden_corners) {
+      var i = hidden_corners.length;
+
+      while (i--) {
+        if (hidden_corners[i]) {
+          return false;
+        }
+      }
+
+      return true;
+    },
+
+    nub_position : function (nub, pos, def) {
+      if (pos === 'auto') {
+        nub.addClass(def);
+      } else {
+        nub.addClass(pos);
+      }
+    },
+
+    startTimer : function () {
+      if (this.settings.$li.length) {
+        this.settings.automate = setTimeout(function () {
+          this.hide();
+          this.show();
+          this.startTimer();
+        }.bind(this), this.settings.timer);
+      } else {
+        clearTimeout(this.settings.automate);
+      }
+    },
+
+    end : function (abort) {
+      if (this.settings.cookie_monster) {
+        $.cookie(this.settings.cookie_name, 'ridden', {expires : this.settings.cookie_expires, domain : this.settings.cookie_domain});
+      }
+
+      if (this.settings.timer > 0) {
+        clearTimeout(this.settings.automate);
+      }
+
+      if (this.settings.modal && this.settings.expose) {
+        this.un_expose();
+      }
+
+      // Unplug keystrokes listener
+      $(this.scope).off('keyup.joyride')
+
+      this.settings.$next_tip.data('closed', true);
+      this.settings.riding = false;
+
+      $('.joyride-modal-bg').hide();
+      this.settings.$current_tip.hide();
+
+      if (typeof abort === 'undefined' || abort === false) {
+        this.settings.post_step_callback(this.settings.$li.index(), this.settings.$current_tip);
+        this.settings.post_ride_callback(this.settings.$li.index(), this.settings.$current_tip);
+      }
+
+      $('.joyride-tip-guide').remove();
+    },
+
+    off : function () {
+      $(this.scope).off('.joyride');
+      $(window).off('.joyride');
+      $('.joyride-close-tip, .joyride-next-tip, .joyride-modal-bg').off('.joyride');
+      $('.joyride-tip-guide, .joyride-modal-bg').remove();
+      clearTimeout(this.settings.automate);
+    },
+
+    reflow : function () {}
+  };
+}(jQuery, window, window.document));
diff --git a/js/foundation/js/foundation/foundation.js b/js/foundation/js/foundation/foundation.js
new file mode 100644 (file)
index 0000000..c5a359d
--- /dev/null
@@ -0,0 +1,732 @@
+/*
+ * Foundation Responsive Library
+ * http://foundation.zurb.com
+ * Copyright 2015, ZURB
+ * Free to use under the MIT license.
+ * http://www.opensource.org/licenses/mit-license.php
+*/
+
+(function ($, window, document, undefined) {
+  'use strict';
+
+  var header_helpers = function (class_array) {
+    var head = $('head');
+    head.prepend($.map(class_array, function (class_name) {
+      if (head.has('.' + class_name).length === 0) {
+        return '<meta class="' + class_name + '" />';
+      }
+    }));
+  };
+
+  header_helpers([
+    'foundation-mq-small',
+    'foundation-mq-small-only',
+    'foundation-mq-medium',
+    'foundation-mq-medium-only',
+    'foundation-mq-large',
+    'foundation-mq-large-only',
+    'foundation-mq-xlarge',
+    'foundation-mq-xlarge-only',
+    'foundation-mq-xxlarge',
+    'foundation-data-attribute-namespace']);
+
+  // Enable FastClick if present
+
+  $(function () {
+    if (typeof FastClick !== 'undefined') {
+      // Don't attach to body if undefined
+      if (typeof document.body !== 'undefined') {
+        FastClick.attach(document.body);
+      }
+    }
+  });
+
+  // private Fast Selector wrapper,
+  // returns jQuery object. Only use where
+  // getElementById is not available.
+  var S = function (selector, context) {
+    if (typeof selector === 'string') {
+      if (context) {
+        var cont;
+        if (context.jquery) {
+          cont = context[0];
+          if (!cont) {
+            return context;
+          }
+        } else {
+          cont = context;
+        }
+        return $(cont.querySelectorAll(selector));
+      }
+
+      return $(document.querySelectorAll(selector));
+    }
+
+    return $(selector, context);
+  };
+
+  // Namespace functions.
+
+  var attr_name = function (init) {
+    var arr = [];
+    if (!init) {
+      arr.push('data');
+    }
+    if (this.namespace.length > 0) {
+      arr.push(this.namespace);
+    }
+    arr.push(this.name);
+
+    return arr.join('-');
+  };
+
+  var add_namespace = function (str) {
+    var parts = str.split('-'),
+        i = parts.length,
+        arr = [];
+
+    while (i--) {
+      if (i !== 0) {
+        arr.push(parts[i]);
+      } else {
+        if (this.namespace.length > 0) {
+          arr.push(this.namespace, parts[i]);
+        } else {
+          arr.push(parts[i]);
+        }
+      }
+    }
+
+    return arr.reverse().join('-');
+  };
+
+  // Event binding and data-options updating.
+
+  var bindings = function (method, options) {
+    var self = this,
+        bind = function(){
+          var $this = S(this),
+              should_bind_events = !$this.data(self.attr_name(true) + '-init');
+          $this.data(self.attr_name(true) + '-init', $.extend({}, self.settings, (options || method), self.data_options($this)));
+
+          if (should_bind_events) {
+            self.events(this);
+          }
+        };
+
+    if (S(this.scope).is('[' + this.attr_name() +']')) {
+      bind.call(this.scope);
+    } else {
+      S('[' + this.attr_name() +']', this.scope).each(bind);
+    }
+    // # Patch to fix #5043 to move this *after* the if/else clause in order for Backbone and similar frameworks to have improved control over event binding and data-options updating.
+    if (typeof method === 'string') {
+      return this[method].call(this, options);
+    }
+
+  };
+
+  var single_image_loaded = function (image, callback) {
+    function loaded () {
+      callback(image[0]);
+    }
+
+    function bindLoad () {
+      this.one('load', loaded);
+
+      if (/MSIE (\d+\.\d+);/.test(navigator.userAgent)) {
+        var src = this.attr( 'src' ),
+            param = src.match( /\?/ ) ? '&' : '?';
+
+        param += 'random=' + (new Date()).getTime();
+        this.attr('src', src + param);
+      }
+    }
+
+    if (!image.attr('src')) {
+      loaded();
+      return;
+    }
+
+    if (image[0].complete || image[0].readyState === 4) {
+      loaded();
+    } else {
+      bindLoad.call(image);
+    }
+  };
+
+  /*! matchMedia() polyfill - Test a CSS media type/query in JS. Authors & copyright (c) 2012: Scott Jehl, Paul Irish, Nicholas Zakas, David Knight. Dual MIT/BSD license */
+
+  window.matchMedia || (window.matchMedia = function() {
+      "use strict";
+
+      // For browsers that support matchMedium api such as IE 9 and webkit
+      var styleMedia = (window.styleMedia || window.media);
+
+      // For those that don't support matchMedium
+      if (!styleMedia) {
+          var style       = document.createElement('style'),
+              script      = document.getElementsByTagName('script')[0],
+              info        = null;
+
+          style.type  = 'text/css';
+          style.id    = 'matchmediajs-test';
+
+          script.parentNode.insertBefore(style, script);
+
+          // 'style.currentStyle' is used by IE <= 8 and 'window.getComputedStyle' for all other browsers
+          info = ('getComputedStyle' in window) && window.getComputedStyle(style, null) || style.currentStyle;
+
+          styleMedia = {
+              matchMedium: function(media) {
+                  var text = '@media ' + media + '{ #matchmediajs-test { width: 1px; } }';
+
+                  // 'style.styleSheet' is used by IE <= 8 and 'style.textContent' for all other browsers
+                  if (style.styleSheet) {
+                      style.styleSheet.cssText = text;
+                  } else {
+                      style.textContent = text;
+                  }
+
+                  // Test if media query is true or false
+                  return info.width === '1px';
+              }
+          };
+      }
+
+      return function(media) {
+          return {
+              matches: styleMedia.matchMedium(media || 'all'),
+              media: media || 'all'
+          };
+      };
+  }());
+
+  /*
+   * jquery.requestAnimationFrame
+   * https://github.com/gnarf37/jquery-requestAnimationFrame
+   * Requires jQuery 1.8+
+   *
+   * Copyright (c) 2012 Corey Frang
+   * Licensed under the MIT license.
+   */
+
+  (function(jQuery) {
+
+
+  // requestAnimationFrame polyfill adapted from Erik Möller
+  // fixes from Paul Irish and Tino Zijdel
+  // http://paulirish.com/2011/requestanimationframe-for-smart-animating/
+  // http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating
+
+  var animating,
+      lastTime = 0,
+      vendors = ['webkit', 'moz'],
+      requestAnimationFrame = window.requestAnimationFrame,
+      cancelAnimationFrame = window.cancelAnimationFrame,
+      jqueryFxAvailable = 'undefined' !== typeof jQuery.fx;
+
+  for (; lastTime < vendors.length && !requestAnimationFrame; lastTime++) {
+    requestAnimationFrame = window[ vendors[lastTime] + 'RequestAnimationFrame' ];
+    cancelAnimationFrame = cancelAnimationFrame ||
+      window[ vendors[lastTime] + 'CancelAnimationFrame' ] ||
+      window[ vendors[lastTime] + 'CancelRequestAnimationFrame' ];
+  }
+
+  function raf() {
+    if (animating) {
+      requestAnimationFrame(raf);
+
+      if (jqueryFxAvailable) {
+        jQuery.fx.tick();
+      }
+    }
+  }
+
+  if (requestAnimationFrame) {
+    // use rAF
+    window.requestAnimationFrame = requestAnimationFrame;
+    window.cancelAnimationFrame = cancelAnimationFrame;
+
+    if (jqueryFxAvailable) {
+      jQuery.fx.timer = function (timer) {
+        if (timer() && jQuery.timers.push(timer) && !animating) {
+          animating = true;
+          raf();
+        }
+      };
+
+      jQuery.fx.stop = function () {
+        animating = false;
+      };
+    }
+  } else {
+    // polyfill
+    window.requestAnimationFrame = function (callback) {
+      var currTime = new Date().getTime(),
+        timeToCall = Math.max(0, 16 - (currTime - lastTime)),
+        id = window.setTimeout(function () {
+          callback(currTime + timeToCall);
+        }, timeToCall);
+      lastTime = currTime + timeToCall;
+      return id;
+    };
+
+    window.cancelAnimationFrame = function (id) {
+      clearTimeout(id);
+    };
+
+  }
+
+  }( $ ));
+
+  function removeQuotes (string) {
+    if (typeof string === 'string' || string instanceof String) {
+      string = string.replace(/^['\\/"]+|(;\s?})+|['\\/"]+$/g, '');
+    }
+
+    return string;
+  }
+
+  function MediaQuery(selector) {
+    this.selector = selector;
+    this.query = '';
+  }
+
+  MediaQuery.prototype.toString = function () {
+    return this.query || (this.query = S(this.selector).css('font-family').replace(/^[\/\\'"]+|(;\s?})+|[\/\\'"]+$/g, ''));
+  };
+
+  window.Foundation = {
+    name : 'Foundation',
+
+    version : '5.5.3',
+
+    media_queries : {
+      'small'       : new MediaQuery('.foundation-mq-small'),
+      'small-only'  : new MediaQuery('.foundation-mq-small-only'),
+      'medium'      : new MediaQuery('.foundation-mq-medium'),
+      'medium-only' : new MediaQuery('.foundation-mq-medium-only'),
+      'large'       : new MediaQuery('.foundation-mq-large'),
+      'large-only'  : new MediaQuery('.foundation-mq-large-only'),
+      'xlarge'      : new MediaQuery('.foundation-mq-xlarge'),
+      'xlarge-only' : new MediaQuery('.foundation-mq-xlarge-only'),
+      'xxlarge'     : new MediaQuery('.foundation-mq-xxlarge')
+    },
+
+    stylesheet : $('<style></style>').appendTo('head')[0].sheet,
+
+    global : {
+      namespace : undefined
+    },
+
+    init : function (scope, libraries, method, options, response) {
+      var args = [scope, method, options, response],
+          responses = [];
+
+      // check RTL
+      this.rtl = /rtl/i.test(S('html').attr('dir'));
+
+      // set foundation global scope
+      this.scope = scope || this.scope;
+
+      this.set_namespace();
+
+      if (libraries && typeof libraries === 'string' && !/reflow/i.test(libraries)) {
+        if (this.libs.hasOwnProperty(libraries)) {
+          responses.push(this.init_lib(libraries, args));
+        }
+      } else {
+        for (var lib in this.libs) {
+          responses.push(this.init_lib(lib, libraries));
+        }
+      }
+
+      S(window).load(function () {
+        S(window)
+          .trigger('resize.fndtn.clearing')
+          .trigger('resize.fndtn.dropdown')
+          .trigger('resize.fndtn.equalizer')
+          .trigger('resize.fndtn.interchange')
+          .trigger('resize.fndtn.joyride')
+          .trigger('resize.fndtn.magellan')
+          .trigger('resize.fndtn.topbar')
+          .trigger('resize.fndtn.slider');
+      });
+
+      return scope;
+    },
+
+    init_lib : function (lib, args) {
+      if (this.libs.hasOwnProperty(lib)) {
+        this.patch(this.libs[lib]);
+
+        if (args && args.hasOwnProperty(lib)) {
+            if (typeof this.libs[lib].settings !== 'undefined') {
+              $.extend(true, this.libs[lib].settings, args[lib]);
+            } else if (typeof this.libs[lib].defaults !== 'undefined') {
+              $.extend(true, this.libs[lib].defaults, args[lib]);
+            }
+          return this.libs[lib].init.apply(this.libs[lib], [this.scope, args[lib]]);
+        }
+
+        args = args instanceof Array ? args : new Array(args);
+        return this.libs[lib].init.apply(this.libs[lib], args);
+      }
+
+      return function () {};
+    },
+
+    patch : function (lib) {
+      lib.scope = this.scope;
+      lib.namespace = this.global.namespace;
+      lib.rtl = this.rtl;
+      lib['data_options'] = this.utils.data_options;
+      lib['attr_name'] = attr_name;
+      lib['add_namespace'] = add_namespace;
+      lib['bindings'] = bindings;
+      lib['S'] = this.utils.S;
+    },
+
+    inherit : function (scope, methods) {
+      var methods_arr = methods.split(' '),
+          i = methods_arr.length;
+
+      while (i--) {
+        if (this.utils.hasOwnProperty(methods_arr[i])) {
+          scope[methods_arr[i]] = this.utils[methods_arr[i]];
+        }
+      }
+    },
+
+    set_namespace : function () {
+
+      // Description:
+      //    Don't bother reading the namespace out of the meta tag
+      //    if the namespace has been set globally in javascript
+      //
+      // Example:
+      //    Foundation.global.namespace = 'my-namespace';
+      // or make it an empty string:
+      //    Foundation.global.namespace = '';
+      //
+      //
+
+      // If the namespace has not been set (is undefined), try to read it out of the meta element.
+      // Otherwise use the globally defined namespace, even if it's empty ('')
+      var namespace = ( this.global.namespace === undefined ) ? $('.foundation-data-attribute-namespace').css('font-family') : this.global.namespace;
+
+      // Finally, if the namsepace is either undefined or false, set it to an empty string.
+      // Otherwise use the namespace value.
+      this.global.namespace = ( namespace === undefined || /false/i.test(namespace) ) ? '' : namespace;
+    },
+
+    libs : {},
+
+    // methods that can be inherited in libraries
+    utils : {
+
+      // Description:
+      //    Fast Selector wrapper returns jQuery object. Only use where getElementById
+      //    is not available.
+      //
+      // Arguments:
+      //    Selector (String): CSS selector describing the element(s) to be
+      //    returned as a jQuery object.
+      //
+      //    Scope (String): CSS selector describing the area to be searched. Default
+      //    is document.
+      //
+      // Returns:
+      //    Element (jQuery Object): jQuery object containing elements matching the
+      //    selector within the scope.
+      S : S,
+
+      // Description:
+      //    Executes a function a max of once every n milliseconds
+      //
+      // Arguments:
+      //    Func (Function): Function to be throttled.
+      //
+      //    Delay (Integer): Function execution threshold in milliseconds.
+      //
+      // Returns:
+      //    Lazy_function (Function): Function with throttling applied.
+      throttle : function (func, delay) {
+        var timer = null;
+
+        return function () {
+          var context = this, args = arguments;
+
+          if (timer == null) {
+            timer = setTimeout(function () {
+              func.apply(context, args);
+              timer = null;
+            }, delay);
+          }
+        };
+      },
+
+      // Description:
+      //    Executes a function when it stops being invoked for n seconds
+      //    Modified version of _.debounce() http://underscorejs.org
+      //
+      // Arguments:
+      //    Func (Function): Function to be debounced.
+      //
+      //    Delay (Integer): Function execution threshold in milliseconds.
+      //
+      //    Immediate (Bool): Whether the function should be called at the beginning
+      //    of the delay instead of the end. Default is false.
+      //
+      // Returns:
+      //    Lazy_function (Function): Function with debouncing applied.
+      debounce : function (func, delay, immediate) {
+        var timeout, result;
+        return function () {
+          var context = this, args = arguments;
+          var later = function () {
+            timeout = null;
+            if (!immediate) {
+              result = func.apply(context, args);
+            }
+          };
+          var callNow = immediate && !timeout;
+          clearTimeout(timeout);
+          timeout = setTimeout(later, delay);
+          if (callNow) {
+            result = func.apply(context, args);
+          }
+          return result;
+        };
+      },
+
+      // Description:
+      //    Parses data-options attribute
+      //
+      // Arguments:
+      //    El (jQuery Object): Element to be parsed.
+      //
+      // Returns:
+      //    Options (Javascript Object): Contents of the element's data-options
+      //    attribute.
+      data_options : function (el, data_attr_name) {
+        data_attr_name = data_attr_name || 'options';
+        var opts = {}, ii, p, opts_arr,
+            data_options = function (el) {
+              var namespace = Foundation.global.namespace;
+
+              if (namespace.length > 0) {
+                return el.data(namespace + '-' + data_attr_name);
+              }
+
+              return el.data(data_attr_name);
+            };
+
+        var cached_options = data_options(el);
+
+        if (typeof cached_options === 'object') {
+          return cached_options;
+        }
+
+        opts_arr = (cached_options || ':').split(';');
+        ii = opts_arr.length;
+
+        function isNumber (o) {
+          return !isNaN (o - 0) && o !== null && o !== '' && o !== false && o !== true;
+        }
+
+        function trim (str) {
+          if (typeof str === 'string') {
+            return $.trim(str);
+          }
+          return str;
+        }
+
+        while (ii--) {
+          p = opts_arr[ii].split(':');
+          p = [p[0], p.slice(1).join(':')];
+
+          if (/true/i.test(p[1])) {
+            p[1] = true;
+          }
+          if (/false/i.test(p[1])) {
+            p[1] = false;
+          }
+          if (isNumber(p[1])) {
+            if (p[1].indexOf('.') === -1) {
+              p[1] = parseInt(p[1], 10);
+            } else {
+              p[1] = parseFloat(p[1]);
+            }
+          }
+
+          if (p.length === 2 && p[0].length > 0) {
+            opts[trim(p[0])] = trim(p[1]);
+          }
+        }
+
+        return opts;
+      },
+
+      // Description:
+      //    Adds JS-recognizable media queries
+      //
+      // Arguments:
+      //    Media (String): Key string for the media query to be stored as in
+      //    Foundation.media_queries
+      //
+      //    Class (String): Class name for the generated <meta> tag
+      register_media : function (media, media_class) {
+        if (Foundation.media_queries[media] === undefined) {
+          $('head').append('<meta class="' + media_class + '"/>');
+          Foundation.media_queries[media] = removeQuotes($('.' + media_class).css('font-family'));
+        }
+      },
+
+      // Description:
+      //    Add custom CSS within a JS-defined media query
+      //
+      // Arguments:
+      //    Rule (String): CSS rule to be appended to the document.
+      //
+      //    Media (String): Optional media query string for the CSS rule to be
+      //    nested under.
+      add_custom_rule : function (rule, media) {
+        if (media === undefined && Foundation.stylesheet) {
+          Foundation.stylesheet.insertRule(rule, Foundation.stylesheet.cssRules.length);
+        } else {
+          var query = Foundation.media_queries[media];
+
+          if (query !== undefined) {
+            Foundation.stylesheet.insertRule('@media ' +
+              Foundation.media_queries[media] + '{ ' + rule + ' }', Foundation.stylesheet.cssRules.length);
+          }
+        }
+      },
+
+      // Description:
+      //    Performs a callback function when an image is fully loaded
+      //
+      // Arguments:
+      //    Image (jQuery Object): Image(s) to check if loaded.
+      //
+      //    Callback (Function): Function to execute when image is fully loaded.
+      image_loaded : function (images, callback) {
+        var self = this,
+            unloaded = images.length;
+
+        function pictures_has_height(images) {
+          var pictures_number = images.length;
+
+          for (var i = pictures_number - 1; i >= 0; i--) {
+            if(images.attr('height') === undefined) {
+              return false;
+            };
+          };
+
+          return true;
+        }
+
+        if (unloaded === 0 || pictures_has_height(images)) {
+          callback(images);
+        }
+
+        images.each(function () {
+          single_image_loaded(self.S(this), function () {
+            unloaded -= 1;
+            if (unloaded === 0) {
+              callback(images);
+            }
+          });
+        });
+      },
+
+      // Description:
+      //    Returns a random, alphanumeric string
+      //
+      // Arguments:
+      //    Length (Integer): Length of string to be generated. Defaults to random
+      //    integer.
+      //
+      // Returns:
+      //    Rand (String): Pseudo-random, alphanumeric string.
+      random_str : function () {
+        if (!this.fidx) {
+          this.fidx = 0;
+        }
+        this.prefix = this.prefix || [(this.name || 'F'), (+new Date).toString(36)].join('-');
+
+        return this.prefix + (this.fidx++).toString(36);
+      },
+
+      // Description:
+      //    Helper for window.matchMedia
+      //
+      // Arguments:
+      //    mq (String): Media query
+      //
+      // Returns:
+      //    (Boolean): Whether the media query passes or not
+      match : function (mq) {
+        return window.matchMedia(mq).matches;
+      },
+
+      // Description:
+      //    Helpers for checking Foundation default media queries with JS
+      //
+      // Returns:
+      //    (Boolean): Whether the media query passes or not
+
+      is_small_up : function () {
+        return this.match(Foundation.media_queries.small);
+      },
+
+      is_medium_up : function () {
+        return this.match(Foundation.media_queries.medium);
+      },
+
+      is_large_up : function () {
+        return this.match(Foundation.media_queries.large);
+      },
+
+      is_xlarge_up : function () {
+        return this.match(Foundation.media_queries.xlarge);
+      },
+
+      is_xxlarge_up : function () {
+        return this.match(Foundation.media_queries.xxlarge);
+      },
+
+      is_small_only : function () {
+        return !this.is_medium_up() && !this.is_large_up() && !this.is_xlarge_up() && !this.is_xxlarge_up();
+      },
+
+      is_medium_only : function () {
+        return this.is_medium_up() && !this.is_large_up() && !this.is_xlarge_up() && !this.is_xxlarge_up();
+      },
+
+      is_large_only : function () {
+        return this.is_medium_up() && this.is_large_up() && !this.is_xlarge_up() && !this.is_xxlarge_up();
+      },
+
+      is_xlarge_only : function () {
+        return this.is_medium_up() && this.is_large_up() && this.is_xlarge_up() && !this.is_xxlarge_up();
+      },
+
+      is_xxlarge_only : function () {
+        return this.is_medium_up() && this.is_large_up() && this.is_xlarge_up() && this.is_xxlarge_up();
+      }
+    }
+  };
+
+  $.fn.foundation = function () {
+    var args = Array.prototype.slice.call(arguments, 0);
+
+    return this.each(function () {
+      Foundation.init.apply(Foundation, [this].concat(args));
+      return this;
+    });
+  };
+
+}(jQuery, window, window.document));
diff --git a/js/foundation/js/foundation/foundation.magellan.js b/js/foundation/js/foundation/foundation.magellan.js
new file mode 100644 (file)
index 0000000..aac36a7
--- /dev/null
@@ -0,0 +1,214 @@
+;(function ($, window, document, undefined) {
+  'use strict';
+
+  Foundation.libs['magellan-expedition'] = {
+    name : 'magellan-expedition',
+
+    version : '5.5.3',
+
+    settings : {
+      active_class : 'active',
+      threshold : 0, // pixels from the top of the expedition for it to become fixes
+      destination_threshold : 20, // pixels from the top of destination for it to be considered active
+      throttle_delay : 30, // calculation throttling to increase framerate
+      fixed_top : 0, // top distance in pixels assigend to the fixed element on scroll
+      offset_by_height : true,  // whether to offset the destination by the expedition height. Usually you want this to be true, unless your expedition is on the side.
+      duration : 700, // animation duration time
+      easing : 'swing' // animation easing
+    },
+
+    init : function (scope, method, options) {
+      Foundation.inherit(this, 'throttle');
+      this.bindings(method, options);
+    },
+
+    events : function () {
+      var self = this,
+          S = self.S,
+          settings = self.settings;
+
+      // initialize expedition offset
+      self.set_expedition_position();
+
+      S(self.scope)
+        .off('.magellan')
+        .on('click.fndtn.magellan', '[' + self.add_namespace('data-magellan-arrival') + '] a[href*=#]', function (e) {
+          var sameHost = ((this.hostname === location.hostname) || !this.hostname),
+              samePath = self.filterPathname(location.pathname) === self.filterPathname(this.pathname),
+              testHash = this.hash.replace(/(:|\.|\/)/g, '\\$1'),
+              anchor = this;
+
+          if (sameHost && samePath && testHash) {
+            e.preventDefault();
+            var expedition = $(this).closest('[' + self.attr_name() + ']'),
+                settings = expedition.data('magellan-expedition-init'),
+                hash = this.hash.split('#').join(''),
+                target = $('a[name="' + hash + '"]');
+
+            if (target.length === 0) {
+              target = $('#' + hash);
+
+            }
+
+            // Account for expedition height if fixed position
+            var scroll_top = target.offset().top - settings.destination_threshold + 1;
+            if (settings.offset_by_height) {
+              scroll_top = scroll_top - expedition.outerHeight();
+            }
+            $('html, body').stop().animate({
+              'scrollTop' : scroll_top
+            }, settings.duration, settings.easing, function () {
+              if (history.pushState) {
+                history.pushState(null, null, anchor.pathname + anchor.search + '#' + hash);
+              } else {
+                location.hash = anchor.pathname + anchor.search + '#' + hash;
+              }
+            });
+          }
+        })
+        .on('scroll.fndtn.magellan', self.throttle(this.check_for_arrivals.bind(this), settings.throttle_delay));
+    },
+
+    check_for_arrivals : function () {
+      var self = this;
+      self.update_arrivals();
+      self.update_expedition_positions();
+    },
+
+    set_expedition_position : function () {
+      var self = this;
+      $('[' + this.attr_name() + '=fixed]', self.scope).each(function (idx, el) {
+        var expedition = $(this),
+            settings = expedition.data('magellan-expedition-init'),
+            styles = expedition.attr('styles'), // save styles
+            top_offset, fixed_top;
+
+        expedition.attr('style', '');
+        top_offset = expedition.offset().top + settings.threshold;
+
+        //set fixed-top by attribute
+        fixed_top = parseInt(expedition.data('magellan-fixed-top'));
+        if (!isNaN(fixed_top)) {
+          self.settings.fixed_top = fixed_top;
+        }
+
+        expedition.data(self.data_attr('magellan-top-offset'), top_offset);
+        expedition.attr('style', styles);
+      });
+    },
+
+    update_expedition_positions : function () {
+      var self = this,
+          window_top_offset = $(window).scrollTop();
+
+      $('[' + this.attr_name() + '=fixed]', self.scope).each(function () {
+        var expedition = $(this),
+            settings = expedition.data('magellan-expedition-init'),
+            styles = expedition.attr('style'), // save styles
+            top_offset = expedition.data('magellan-top-offset');
+
+        //scroll to the top distance
+        if (window_top_offset + self.settings.fixed_top >= top_offset) {
+          // Placeholder allows height calculations to be consistent even when
+          // appearing to switch between fixed/non-fixed placement
+          var placeholder = expedition.prev('[' + self.add_namespace('data-magellan-expedition-clone') + ']');
+          if (placeholder.length === 0) {
+            placeholder = expedition.clone();
+            placeholder.removeAttr(self.attr_name());
+            placeholder.attr(self.add_namespace('data-magellan-expedition-clone'), '');
+            expedition.before(placeholder);
+          }
+          expedition.css({position :'fixed', top : settings.fixed_top}).addClass('fixed');
+        } else {
+          expedition.prev('[' + self.add_namespace('data-magellan-expedition-clone') + ']').remove();
+          expedition.attr('style', styles).css('position', '').css('top', '').removeClass('fixed');
+        }
+      });
+    },
+
+    update_arrivals : function () {
+      var self = this,
+          window_top_offset = $(window).scrollTop();
+
+      $('[' + this.attr_name() + ']', self.scope).each(function () {
+        var expedition = $(this),
+            settings = expedition.data(self.attr_name(true) + '-init'),
+            offsets = self.offsets(expedition, window_top_offset),
+            arrivals = expedition.find('[' + self.add_namespace('data-magellan-arrival') + ']'),
+            active_item = false;
+        offsets.each(function (idx, item) {
+          if (item.viewport_offset >= item.top_offset) {
+            var arrivals = expedition.find('[' + self.add_namespace('data-magellan-arrival') + ']');
+            arrivals.not(item.arrival).removeClass(settings.active_class);
+            item.arrival.addClass(settings.active_class);
+            active_item = true;
+            return true;
+          }
+        });
+
+        if (!active_item) {
+          arrivals.removeClass(settings.active_class);
+        }
+      });
+    },
+
+    offsets : function (expedition, window_offset) {
+      var self = this,
+          settings = expedition.data(self.attr_name(true) + '-init'),
+          viewport_offset = window_offset;
+
+      return expedition.find('[' + self.add_namespace('data-magellan-arrival') + ']').map(function (idx, el) {
+        var name = $(this).data(self.data_attr('magellan-arrival')),
+            dest = $('[' + self.add_namespace('data-magellan-destination') + '=' + name + ']');
+        if (dest.length > 0) {
+          var top_offset = dest.offset().top - settings.destination_threshold;
+          if (settings.offset_by_height) {
+            top_offset = top_offset - expedition.outerHeight();
+          }
+          top_offset = Math.floor(top_offset);
+          return {
+            destination : dest,
+            arrival : $(this),
+            top_offset : top_offset,
+            viewport_offset : viewport_offset
+          }
+        }
+      }).sort(function (a, b) {
+        if (a.top_offset < b.top_offset) {
+          return -1;
+        }
+        if (a.top_offset > b.top_offset) {
+          return 1;
+        }
+        return 0;
+      });
+    },
+
+    data_attr : function (str) {
+      if (this.namespace.length > 0) {
+        return this.namespace + '-' + str;
+      }
+
+      return str;
+    },
+
+    off : function () {
+      this.S(this.scope).off('.magellan');
+      this.S(window).off('.magellan');
+    },
+
+    filterPathname : function (pathname) {
+      pathname = pathname || '';
+      return pathname
+          .replace(/^\//,'')
+          .replace(/(?:index|default).[a-zA-Z]{3,4}$/,'')
+          .replace(/\/$/,'');
+    },
+
+    reflow : function () {
+      var self = this;
+      // remove placeholder expeditions used for height calculation purposes
+      $('[' + self.add_namespace('data-magellan-expedition-clone') + ']', self.scope).remove();
+    }
+  };
+}(jQuery, window, window.document));
diff --git a/js/foundation/js/foundation/foundation.offcanvas.js b/js/foundation/js/foundation/foundation.offcanvas.js
new file mode 100644 (file)
index 0000000..685e9a0
--- /dev/null
@@ -0,0 +1,225 @@
+;(function ($, window, document, undefined) {
+  'use strict';
+
+  Foundation.libs.offcanvas = {
+    name : 'offcanvas',
+
+    version : '5.5.3',
+
+    settings : {
+      open_method : 'move',
+      close_on_click : false
+    },
+
+    init : function (scope, method, options) {
+      this.bindings(method, options);
+    },
+
+    events : function () {
+      var self = this,
+          S = self.S,
+          move_class = '',
+          right_postfix = '',
+          left_postfix = '',
+          top_postfix = '',
+          bottom_postfix = '';
+
+      if (this.settings.open_method === 'move') {
+        move_class = 'move-';
+        right_postfix = 'right';
+        left_postfix = 'left';
+        top_postfix = 'top';
+        bottom_postfix = 'bottom';
+      } else if (this.settings.open_method === 'overlap_single') {
+        move_class = 'offcanvas-overlap-';
+        right_postfix = 'right';
+        left_postfix = 'left';
+        top_postfix = 'top';
+        bottom_postfix = 'bottom';
+      } else if (this.settings.open_method === 'overlap') {
+        move_class = 'offcanvas-overlap';
+      }
+
+      S(this.scope).off('.offcanvas')
+        .on('click.fndtn.offcanvas', '.left-off-canvas-toggle', function (e) {
+          self.click_toggle_class(e, move_class + right_postfix);
+          if (self.settings.open_method !== 'overlap') {
+            S('.left-submenu').removeClass(move_class + right_postfix);
+          }
+          $('.left-off-canvas-toggle').attr('aria-expanded', 'true');
+        })
+        .on('click.fndtn.offcanvas', '.left-off-canvas-menu a', function (e) {
+          var settings = self.get_settings(e);
+          var parent = S(this).parent();
+
+          if (settings.close_on_click && !parent.hasClass('has-submenu') && !parent.hasClass('back')) {
+            self.hide.call(self, move_class + right_postfix, self.get_wrapper(e));
+            parent.parent().removeClass(move_class + right_postfix);
+          } else if (S(this).parent().hasClass('has-submenu')) {
+            e.preventDefault();
+            S(this).siblings('.left-submenu').toggleClass(move_class + right_postfix);
+          } else if (parent.hasClass('back')) {
+            e.preventDefault();
+            parent.parent().removeClass(move_class + right_postfix);
+          }
+          $('.left-off-canvas-toggle').attr('aria-expanded', 'true');
+        })
+        //end of left canvas
+        .on('click.fndtn.offcanvas', '.right-off-canvas-toggle', function (e) {
+          self.click_toggle_class(e, move_class + left_postfix);
+          if (self.settings.open_method !== 'overlap') {
+            S('.right-submenu').removeClass(move_class + left_postfix);
+          }
+          $('.right-off-canvas-toggle').attr('aria-expanded', 'true');
+        })
+        .on('click.fndtn.offcanvas', '.right-off-canvas-menu a', function (e) {
+          var settings = self.get_settings(e);
+          var parent = S(this).parent();
+
+          if (settings.close_on_click && !parent.hasClass('has-submenu') && !parent.hasClass('back')) {
+            self.hide.call(self, move_class + left_postfix, self.get_wrapper(e));
+            parent.parent().removeClass(move_class + left_postfix);
+          } else if (S(this).parent().hasClass('has-submenu')) {
+            e.preventDefault();
+            S(this).siblings('.right-submenu').toggleClass(move_class + left_postfix);
+          } else if (parent.hasClass('back')) {
+            e.preventDefault();
+            parent.parent().removeClass(move_class + left_postfix);
+          }
+          $('.right-off-canvas-toggle').attr('aria-expanded', 'true');
+        })
+        //end of right canvas
+        .on('click.fndtn.offcanvas', '.top-off-canvas-toggle', function (e) {
+          self.click_toggle_class(e, move_class + bottom_postfix);
+          if (self.settings.open_method !== 'overlap') {
+            S('.top-submenu').removeClass(move_class + bottom_postfix);
+          }
+          $('.top-off-canvas-toggle').attr('aria-expanded', 'true');
+        })
+        .on('click.fndtn.offcanvas', '.top-off-canvas-menu a', function (e) {
+          var settings = self.get_settings(e);
+          var parent = S(this).parent();
+
+          if (settings.close_on_click && !parent.hasClass('has-submenu') && !parent.hasClass('back')) {
+            self.hide.call(self, move_class + bottom_postfix, self.get_wrapper(e));
+            parent.parent().removeClass(move_class + bottom_postfix);
+          } else if (S(this).parent().hasClass('has-submenu')) {
+            e.preventDefault();
+            S(this).siblings('.top-submenu').toggleClass(move_class + bottom_postfix);
+          } else if (parent.hasClass('back')) {
+            e.preventDefault();
+            parent.parent().removeClass(move_class + bottom_postfix);
+          }
+          $('.top-off-canvas-toggle').attr('aria-expanded', 'true');
+        })
+        //end of top canvas
+        .on('click.fndtn.offcanvas', '.bottom-off-canvas-toggle', function (e) {
+          self.click_toggle_class(e, move_class + top_postfix);
+          if (self.settings.open_method !== 'overlap') {
+            S('.bottom-submenu').removeClass(move_class + top_postfix);
+          }
+          $('.bottom-off-canvas-toggle').attr('aria-expanded', 'true');
+        })
+        .on('click.fndtn.offcanvas', '.bottom-off-canvas-menu a', function (e) {
+          var settings = self.get_settings(e);
+          var parent = S(this).parent();
+
+          if (settings.close_on_click && !parent.hasClass('has-submenu') && !parent.hasClass('back')) {
+            self.hide.call(self, move_class + top_postfix, self.get_wrapper(e));
+            parent.parent().removeClass(move_class + top_postfix);
+          } else if (S(this).parent().hasClass('has-submenu')) {
+            e.preventDefault();
+            S(this).siblings('.bottom-submenu').toggleClass(move_class + top_postfix);
+          } else if (parent.hasClass('back')) {
+            e.preventDefault();
+            parent.parent().removeClass(move_class + top_postfix);
+          }
+          $('.bottom-off-canvas-toggle').attr('aria-expanded', 'true');
+        })
+        //end of bottom
+        .on('click.fndtn.offcanvas', '.exit-off-canvas', function (e) {
+          self.click_remove_class(e, move_class + left_postfix);
+          S('.right-submenu').removeClass(move_class + left_postfix);
+          if (right_postfix) {
+            self.click_remove_class(e, move_class + right_postfix);
+            S('.left-submenu').removeClass(move_class + left_postfix);
+          }
+          $('.right-off-canvas-toggle').attr('aria-expanded', 'true');
+        })
+        .on('click.fndtn.offcanvas', '.exit-off-canvas', function (e) {
+          self.click_remove_class(e, move_class + left_postfix);
+          $('.left-off-canvas-toggle').attr('aria-expanded', 'false');
+          if (right_postfix) {
+            self.click_remove_class(e, move_class + right_postfix);
+            $('.right-off-canvas-toggle').attr('aria-expanded', 'false');
+          }
+        })
+        .on('click.fndtn.offcanvas', '.exit-off-canvas', function (e) {
+          self.click_remove_class(e, move_class + top_postfix);
+          S('.bottom-submenu').removeClass(move_class + top_postfix);
+          if (bottom_postfix) {
+            self.click_remove_class(e, move_class + bottom_postfix);
+            S('.top-submenu').removeClass(move_class + top_postfix);
+          }
+          $('.bottom-off-canvas-toggle').attr('aria-expanded', 'true');
+        })
+        .on('click.fndtn.offcanvas', '.exit-off-canvas', function (e) {
+          self.click_remove_class(e, move_class + top_postfix);
+          $('.top-off-canvas-toggle').attr('aria-expanded', 'false');
+          if (bottom_postfix) {
+            self.click_remove_class(e, move_class + bottom_postfix);
+            $('.bottom-off-canvas-toggle').attr('aria-expanded', 'false');
+          }
+        });
+    },
+
+    toggle : function (class_name, $off_canvas) {
+      $off_canvas = $off_canvas || this.get_wrapper();
+      if ($off_canvas.is('.' + class_name)) {
+        this.hide(class_name, $off_canvas);
+      } else {
+        this.show(class_name, $off_canvas);
+      }
+    },
+
+    show : function (class_name, $off_canvas) {
+      $off_canvas = $off_canvas || this.get_wrapper();
+      $off_canvas.trigger('open.fndtn.offcanvas');
+      $off_canvas.addClass(class_name);
+    },
+
+    hide : function (class_name, $off_canvas) {
+      $off_canvas = $off_canvas || this.get_wrapper();
+      $off_canvas.trigger('close.fndtn.offcanvas');
+      $off_canvas.removeClass(class_name);
+    },
+
+    click_toggle_class : function (e, class_name) {
+      e.preventDefault();
+      var $off_canvas = this.get_wrapper(e);
+      this.toggle(class_name, $off_canvas);
+    },
+
+    click_remove_class : function (e, class_name) {
+      e.preventDefault();
+      var $off_canvas = this.get_wrapper(e);
+      this.hide(class_name, $off_canvas);
+    },
+
+    get_settings : function (e) {
+      var offcanvas  = this.S(e.target).closest('[' + this.attr_name() + ']');
+      return offcanvas.data(this.attr_name(true) + '-init') || this.settings;
+    },
+
+    get_wrapper : function (e) {
+      var $off_canvas = this.S(e ? e.target : this.scope).closest('.off-canvas-wrap');
+
+      if ($off_canvas.length === 0) {
+        $off_canvas = this.S('.off-canvas-wrap');
+      }
+      return $off_canvas;
+    },
+
+    reflow : function () {}
+  };
+}(jQuery, window, window.document));
diff --git a/js/foundation/js/foundation/foundation.orbit.js b/js/foundation/js/foundation/foundation.orbit.js
new file mode 100644 (file)
index 0000000..d88bb46
--- /dev/null
@@ -0,0 +1,476 @@
+;(function ($, window, document, undefined) {
+  'use strict';
+
+  var noop = function () {};
+
+  var Orbit = function (el, settings) {
+    // Don't reinitialize plugin
+    if (el.hasClass(settings.slides_container_class)) {
+      return this;
+    }
+
+    var self = this,
+        container,
+        slides_container = el,
+        number_container,
+        bullets_container,
+        timer_container,
+        idx = 0,
+        animate,
+        timer,
+        locked = false,
+        adjust_height_after = false;
+
+    self.slides = function () {
+      return slides_container.children(settings.slide_selector);
+    };
+
+    self.slides().first().addClass(settings.active_slide_class);
+
+    self.update_slide_number = function (index) {
+      if (settings.slide_number) {
+        number_container.find('span:first').text(parseInt(index) + 1);
+        number_container.find('span:last').text(self.slides().length);
+      }
+      if (settings.bullets) {
+        bullets_container.children().removeClass(settings.bullets_active_class);
+        $(bullets_container.children().get(index)).addClass(settings.bullets_active_class);
+      }
+    };
+
+    self.update_active_link = function (index) {
+      var link = $('[data-orbit-link="' + self.slides().eq(index).attr('data-orbit-slide') + '"]');
+      link.siblings().removeClass(settings.bullets_active_class);
+      link.addClass(settings.bullets_active_class);
+    };
+
+    self.build_markup = function () {
+      slides_container.wrap('<div class="' + settings.container_class + '"></div>');
+      container = slides_container.parent();
+      slides_container.addClass(settings.slides_container_class);
+
+      if (settings.stack_on_small) {
+        container.addClass(settings.stack_on_small_class);
+      }
+
+      if (settings.navigation_arrows) {
+        container.append($('<a href="#"><span></span></a>').addClass(settings.prev_class));
+        container.append($('<a href="#"><span></span></a>').addClass(settings.next_class));
+      }
+
+      if (settings.timer) {
+        timer_container = $('<div>').addClass(settings.timer_container_class);
+        timer_container.append('<span>');
+        timer_container.append($('<div>').addClass(settings.timer_progress_class));
+        timer_container.addClass(settings.timer_paused_class);
+        container.append(timer_container);
+      }
+
+      if (settings.slide_number) {
+        number_container = $('<div>').addClass(settings.slide_number_class);
+        number_container.append('<span></span> ' + settings.slide_number_text + ' <span></span>');
+        container.append(number_container);
+      }
+
+      if (settings.bullets) {
+        bullets_container = $('<ol>').addClass(settings.bullets_container_class);
+        container.append(bullets_container);
+        bullets_container.wrap('<div class="orbit-bullets-container"></div>');
+        self.slides().each(function (idx, el) {
+          var bullet = $('<li>').attr('data-orbit-slide', idx).on('click', self.link_bullet);;
+          bullets_container.append(bullet);
+        });
+      }
+
+    };
+
+    self._goto = function (next_idx, start_timer) {
+      // if (locked) {return false;}
+      if (next_idx === idx) {return false;}
+      if (typeof timer === 'object') {timer.restart();}
+      var slides = self.slides();
+
+      var dir = 'next';
+      locked = true;
+      if (next_idx < idx) {dir = 'prev';}
+      if (next_idx >= slides.length) {
+        if (!settings.circular) {
+          return false;
+        }
+        next_idx = 0;
+      } else if (next_idx < 0) {
+        if (!settings.circular) {
+          return false;
+        }
+        next_idx = slides.length - 1;
+      }
+
+      var current = $(slides.get(idx));
+      var next = $(slides.get(next_idx));
+
+      current.css('zIndex', 2);
+      current.removeClass(settings.active_slide_class);
+      next.css('zIndex', 4).addClass(settings.active_slide_class);
+
+      slides_container.trigger('before-slide-change.fndtn.orbit');
+      settings.before_slide_change();
+      self.update_active_link(next_idx);
+
+      var callback = function () {
+        var unlock = function () {
+          idx = next_idx;
+          locked = false;
+          if (start_timer === true) {timer = self.create_timer(); timer.start();}
+          self.update_slide_number(idx);
+          slides_container.trigger('after-slide-change.fndtn.orbit', [{slide_number : idx, total_slides : slides.length}]);
+          settings.after_slide_change(idx, slides.length);
+        };
+        if (slides_container.outerHeight() != next.outerHeight() && settings.variable_height) {
+          slides_container.animate({'height': next.outerHeight()}, 250, 'linear', unlock);
+        } else {
+          unlock();
+        }
+      };
+
+      if (slides.length === 1) {callback(); return false;}
+
+      var start_animation = function () {
+        if (dir === 'next') {animate.next(current, next, callback);}
+        if (dir === 'prev') {animate.prev(current, next, callback);}
+      };
+
+      if (next.outerHeight() > slides_container.outerHeight() && settings.variable_height) {
+        slides_container.animate({'height': next.outerHeight()}, 250, 'linear', start_animation);
+      } else {
+        start_animation();
+      }
+    };
+
+    self.next = function (e) {
+      e.stopImmediatePropagation();
+      e.preventDefault();
+      self._goto(idx + 1);
+    };
+
+    self.prev = function (e) {
+      e.stopImmediatePropagation();
+      e.preventDefault();
+      self._goto(idx - 1);
+    };
+
+    self.link_custom = function (e) {
+      e.preventDefault();
+      var link = $(this).attr('data-orbit-link');
+      if ((typeof link === 'string') && (link = $.trim(link)) != '') {
+        var slide = container.find('[data-orbit-slide=' + link + ']');
+        if (slide.index() != -1) {self._goto(slide.index());}
+      }
+    };
+
+    self.link_bullet = function (e) {
+      var index = $(this).attr('data-orbit-slide');
+      if ((typeof index === 'string') && (index = $.trim(index)) != '') {
+        if (isNaN(parseInt(index))) {
+          var slide = container.find('[data-orbit-slide=' + index + ']');
+          if (slide.index() != -1) {self._goto(slide.index() + 1);}
+        } else {
+          self._goto(parseInt(index));
+        }
+      }
+
+    }
+
+    self.timer_callback = function () {
+      self._goto(idx + 1, true);
+    }
+
+    self.compute_dimensions = function () {
+      var current = $(self.slides().get(idx));
+      var h = current.outerHeight();
+      if (!settings.variable_height) {
+        self.slides().each(function(){
+          if ($(this).outerHeight() > h) { h = $(this).outerHeight(); }
+        });
+      }
+      slides_container.height(h);
+    };
+
+    self.create_timer = function () {
+      var t = new Timer(
+        container.find('.' + settings.timer_container_class),
+        settings,
+        self.timer_callback
+      );
+      return t;
+    };
+
+    self.stop_timer = function () {
+      if (typeof timer === 'object') {
+        timer.stop();
+      }
+    };
+
+    self.toggle_timer = function () {
+      var t = container.find('.' + settings.timer_container_class);
+      if (t.hasClass(settings.timer_paused_class)) {
+        if (typeof timer === 'undefined') {timer = self.create_timer();}
+        timer.start();
+      } else {
+        if (typeof timer === 'object') {timer.stop();}
+      }
+    };
+
+    self.init = function () {
+      self.build_markup();
+      if (settings.timer) {
+        timer = self.create_timer();
+        Foundation.utils.image_loaded(this.slides().children('img'), timer.start);
+      }
+      animate = new FadeAnimation(settings, slides_container);
+      if (settings.animation === 'slide') {
+        animate = new SlideAnimation(settings, slides_container);
+      }
+
+      container.on('click', '.' + settings.next_class, self.next);
+      container.on('click', '.' + settings.prev_class, self.prev);
+
+      if (settings.next_on_click) {
+        container.on('click', '.' + settings.slides_container_class + ' [data-orbit-slide]', self.link_bullet);
+      }
+
+      container.on('click', self.toggle_timer);
+      if (settings.swipe) {
+        container.on('touchstart.fndtn.orbit', function (e) {
+          if (!e.touches) {e = e.originalEvent;}
+          var data = {
+            start_page_x : e.touches[0].pageX,
+            start_page_y : e.touches[0].pageY,
+            start_time : (new Date()).getTime(),
+            delta_x : 0,
+            is_scrolling : undefined
+          };
+          container.data('swipe-transition', data);
+          e.stopPropagation();
+        })
+        .on('touchmove.fndtn.orbit', function (e) {
+          if (!e.touches) {
+            e = e.originalEvent;
+          }
+          // Ignore pinch/zoom events
+          if (e.touches.length > 1 || e.scale && e.scale !== 1) {
+            return;
+          }
+
+          var data = container.data('swipe-transition');
+          if (typeof data === 'undefined') {data = {};}
+
+          data.delta_x = e.touches[0].pageX - data.start_page_x;
+
+          if ( typeof data.is_scrolling === 'undefined') {
+            data.is_scrolling = !!( data.is_scrolling || Math.abs(data.delta_x) < Math.abs(e.touches[0].pageY - data.start_page_y) );
+          }
+
+          if (!data.is_scrolling && !data.active) {
+            e.preventDefault();
+            var direction = (data.delta_x < 0) ? (idx + 1) : (idx - 1);
+            data.active = true;
+            self._goto(direction);
+          }
+        })
+        .on('touchend.fndtn.orbit', function (e) {
+          container.data('swipe-transition', {});
+          e.stopPropagation();
+        })
+      }
+      container.on('mouseenter.fndtn.orbit', function (e) {
+        if (settings.timer && settings.pause_on_hover) {
+          self.stop_timer();
+        }
+      })
+      .on('mouseleave.fndtn.orbit', function (e) {
+        if (settings.timer && settings.resume_on_mouseout) {
+          timer.start();
+        }
+      });
+
+      $(document).on('click', '[data-orbit-link]', self.link_custom);
+      $(window).on('load resize', self.compute_dimensions);
+      Foundation.utils.image_loaded(this.slides().children('img'), self.compute_dimensions);
+      Foundation.utils.image_loaded(this.slides().children('img'), function () {
+        container.prev('.' + settings.preloader_class).css('display', 'none');
+        self.update_slide_number(0);
+        self.update_active_link(0);
+        slides_container.trigger('ready.fndtn.orbit');
+      });
+    };
+
+    self.init();
+  };
+
+  var Timer = function (el, settings, callback) {
+    var self = this,
+        duration = settings.timer_speed,
+        progress = el.find('.' + settings.timer_progress_class),
+        start,
+        timeout,
+        left = -1;
+
+    this.update_progress = function (w) {
+      var new_progress = progress.clone();
+      new_progress.attr('style', '');
+      new_progress.css('width', w + '%');
+      progress.replaceWith(new_progress);
+      progress = new_progress;
+    };
+
+    this.restart = function () {
+      clearTimeout(timeout);
+      el.addClass(settings.timer_paused_class);
+      left = -1;
+      self.update_progress(0);
+    };
+
+    this.start = function () {
+      if (!el.hasClass(settings.timer_paused_class)) {return true;}
+      left = (left === -1) ? duration : left;
+      el.removeClass(settings.timer_paused_class);
+      start = new Date().getTime();
+      progress.animate({'width' : '100%'}, left, 'linear');
+      timeout = setTimeout(function () {
+        self.restart();
+        callback();
+      }, left);
+      el.trigger('timer-started.fndtn.orbit')
+    };
+
+    this.stop = function () {
+      if (el.hasClass(settings.timer_paused_class)) {return true;}
+      clearTimeout(timeout);
+      el.addClass(settings.timer_paused_class);
+      var end = new Date().getTime();
+      left = left - (end - start);
+      var w = 100 - ((left / duration) * 100);
+      self.update_progress(w);
+      el.trigger('timer-stopped.fndtn.orbit');
+    };
+  };
+
+  var SlideAnimation = function (settings, container) {
+    var duration = settings.animation_speed;
+    var is_rtl = ($('html[dir=rtl]').length === 1);
+    var margin = is_rtl ? 'marginRight' : 'marginLeft';
+    var animMargin = {};
+    animMargin[margin] = '0%';
+
+    this.next = function (current, next, callback) {
+      current.animate({marginLeft : '-100%'}, duration);
+      next.animate(animMargin, duration, function () {
+        current.css(margin, '100%');
+        callback();
+      });
+    };
+
+    this.prev = function (current, prev, callback) {
+      current.animate({marginLeft : '100%'}, duration);
+      prev.css(margin, '-100%');
+      prev.animate(animMargin, duration, function () {
+        current.css(margin, '100%');
+        callback();
+      });
+    };
+  };
+
+  var FadeAnimation = function (settings, container) {
+    var duration = settings.animation_speed;
+    var is_rtl = ($('html[dir=rtl]').length === 1);
+    var margin = is_rtl ? 'marginRight' : 'marginLeft';
+
+    this.next = function (current, next, callback) {
+      next.css({'margin' : '0%', 'opacity' : '0.01'});
+      next.animate({'opacity' :'1'}, duration, 'linear', function () {
+        current.css('margin', '100%');
+        callback();
+      });
+    };
+
+    this.prev = function (current, prev, callback) {
+      prev.css({'margin' : '0%', 'opacity' : '0.01'});
+      prev.animate({'opacity' : '1'}, duration, 'linear', function () {
+        current.css('margin', '100%');
+        callback();
+      });
+    };
+  };
+
+  Foundation.libs = Foundation.libs || {};
+
+  Foundation.libs.orbit = {
+    name : 'orbit',
+
+    version : '5.5.3',
+
+    settings : {
+      animation : 'slide',
+      timer_speed : 10000,
+      pause_on_hover : true,
+      resume_on_mouseout : false,
+      next_on_click : true,
+      animation_speed : 500,
+      stack_on_small : false,
+      navigation_arrows : true,
+      slide_number : true,
+      slide_number_text : 'of',
+      container_class : 'orbit-container',
+      stack_on_small_class : 'orbit-stack-on-small',
+      next_class : 'orbit-next',
+      prev_class : 'orbit-prev',
+      timer_container_class : 'orbit-timer',
+      timer_paused_class : 'paused',
+      timer_progress_class : 'orbit-progress',
+      slides_container_class : 'orbit-slides-container',
+      preloader_class : 'preloader',
+      slide_selector : '*',
+      bullets_container_class : 'orbit-bullets',
+      bullets_active_class : 'active',
+      slide_number_class : 'orbit-slide-number',
+      caption_class : 'orbit-caption',
+      active_slide_class : 'active',
+      orbit_transition_class : 'orbit-transitioning',
+      bullets : true,
+      circular : true,
+      timer : true,
+      variable_height : false,
+      swipe : true,
+      before_slide_change : noop,
+      after_slide_change : noop
+    },
+
+    init : function (scope, method, options) {
+      var self = this;
+      this.bindings(method, options);
+    },
+
+    events : function (instance) {
+      var orbit_instance = new Orbit(this.S(instance), this.S(instance).data('orbit-init'));
+      this.S(instance).data(this.name + '-instance', orbit_instance);
+    },
+
+    reflow : function () {
+      var self = this;
+
+      if (self.S(self.scope).is('[data-orbit]')) {
+        var $el = self.S(self.scope);
+        var instance = $el.data(self.name + '-instance');
+        instance.compute_dimensions();
+      } else {
+        self.S('[data-orbit]', self.scope).each(function (idx, el) {
+          var $el = self.S(el);
+          var opts = self.data_options($el);
+          var instance = $el.data(self.name + '-instance');
+          instance.compute_dimensions();
+        });
+      }
+    }
+  };
+
+}(jQuery, window, window.document));
diff --git a/js/foundation/js/foundation/foundation.reveal.js b/js/foundation/js/foundation/foundation.reveal.js
new file mode 100644 (file)
index 0000000..08ad413
--- /dev/null
@@ -0,0 +1,522 @@
+;(function ($, window, document, undefined) {
+  'use strict';
+
+  var openModals = [];
+
+  Foundation.libs.reveal = {
+    name : 'reveal',
+
+    version : '5.5.3',
+
+    locked : false,
+
+    settings : {
+      animation : 'fadeAndPop',
+      animation_speed : 250,
+      close_on_background_click : true,
+      close_on_esc : true,
+      dismiss_modal_class : 'close-reveal-modal',
+      multiple_opened : false,
+      bg_class : 'reveal-modal-bg',
+      root_element : 'body',
+      open : function(){},
+      opened : function(){},
+      close : function(){},
+      closed : function(){},
+      on_ajax_error: $.noop,
+      bg : $('.reveal-modal-bg'),
+      css : {
+        open : {
+          'opacity' : 0,
+          'visibility' : 'visible',
+          'display' : 'block'
+        },
+        close : {
+          'opacity' : 1,
+          'visibility' : 'hidden',
+          'display' : 'none'
+        }
+      }
+    },
+
+    init : function (scope, method, options) {
+      $.extend(true, this.settings, method, options);
+      this.bindings(method, options);
+    },
+
+    events : function (scope) {
+      var self = this,
+          S = self.S;
+
+      S(this.scope)
+        .off('.reveal')
+        .on('click.fndtn.reveal', '[' + this.add_namespace('data-reveal-id') + ']:not([disabled])', function (e) {
+          e.preventDefault();
+
+          if (!self.locked) {
+            var element = S(this),
+                ajax = element.data(self.data_attr('reveal-ajax')),
+                replaceContentSel = element.data(self.data_attr('reveal-replace-content'));
+
+            self.locked = true;
+
+            if (typeof ajax === 'undefined') {
+              self.open.call(self, element);
+            } else {
+              var url = ajax === true ? element.attr('href') : ajax;
+              self.open.call(self, element, {url : url}, { replaceContentSel : replaceContentSel });
+            }
+          }
+        });
+
+      S(document)
+        .on('click.fndtn.reveal', this.close_targets(), function (e) {
+          e.preventDefault();
+          if (!self.locked) {
+            var settings = S('[' + self.attr_name() + '].open').data(self.attr_name(true) + '-init') || self.settings,
+                bg_clicked = S(e.target)[0] === S('.' + settings.bg_class)[0];
+
+            if (bg_clicked) {
+              if (settings.close_on_background_click) {
+                e.stopPropagation();
+              } else {
+                return;
+              }
+            }
+
+            self.locked = true;
+            self.close.call(self, bg_clicked ? S('[' + self.attr_name() + '].open:not(.toback)') : S(this).closest('[' + self.attr_name() + ']'));
+          }
+        });
+
+      if (S('[' + self.attr_name() + ']', this.scope).length > 0) {
+        S(this.scope)
+          // .off('.reveal')
+          .on('open.fndtn.reveal', this.settings.open)
+          .on('opened.fndtn.reveal', this.settings.opened)
+          .on('opened.fndtn.reveal', this.open_video)
+          .on('close.fndtn.reveal', this.settings.close)
+          .on('closed.fndtn.reveal', this.settings.closed)
+          .on('closed.fndtn.reveal', this.close_video);
+      } else {
+        S(this.scope)
+          // .off('.reveal')
+          .on('open.fndtn.reveal', '[' + self.attr_name() + ']', this.settings.open)
+          .on('opened.fndtn.reveal', '[' + self.attr_name() + ']', this.settings.opened)
+          .on('opened.fndtn.reveal', '[' + self.attr_name() + ']', this.open_video)
+          .on('close.fndtn.reveal', '[' + self.attr_name() + ']', this.settings.close)
+          .on('closed.fndtn.reveal', '[' + self.attr_name() + ']', this.settings.closed)
+          .on('closed.fndtn.reveal', '[' + self.attr_name() + ']', this.close_video);
+      }
+
+      return true;
+    },
+
+    // PATCH #3: turning on key up capture only when a reveal window is open
+    key_up_on : function (scope) {
+      var self = this;
+
+      // PATCH #1: fixing multiple keyup event trigger from single key press
+      self.S('body').off('keyup.fndtn.reveal').on('keyup.fndtn.reveal', function ( event ) {
+        var open_modal = self.S('[' + self.attr_name() + '].open'),
+            settings = open_modal.data(self.attr_name(true) + '-init') || self.settings ;
+        // PATCH #2: making sure that the close event can be called only while unlocked,
+        //           so that multiple keyup.fndtn.reveal events don't prevent clean closing of the reveal window.
+        if ( settings && event.which === 27  && settings.close_on_esc && !self.locked) { // 27 is the keycode for the Escape key
+          self.close.call(self, open_modal);
+        }
+      });
+
+      return true;
+    },
+
+    // PATCH #3: turning on key up capture only when a reveal window is open
+    key_up_off : function (scope) {
+      this.S('body').off('keyup.fndtn.reveal');
+      return true;
+    },
+
+    open : function (target, ajax_settings) {
+      var self = this,
+          modal;
+
+      if (target) {
+        if (typeof target.selector !== 'undefined') {
+          // Find the named node; only use the first one found, since the rest of the code assumes there's only one node
+          modal = self.S('#' + target.data(self.data_attr('reveal-id'))).first();
+        } else {
+          modal = self.S(this.scope);
+
+          ajax_settings = target;
+        }
+      } else {
+        modal = self.S(this.scope);
+      }
+
+      var settings = modal.data(self.attr_name(true) + '-init');
+      settings = settings || this.settings;
+
+
+      if (modal.hasClass('open') && target !== undefined && target.attr('data-reveal-id') == modal.attr('id')) {
+        return self.close(modal);
+      }
+
+      if (!modal.hasClass('open')) {
+        var open_modal = self.S('[' + self.attr_name() + '].open');
+
+        if (typeof modal.data('css-top') === 'undefined') {
+          modal.data('css-top', parseInt(modal.css('top'), 10))
+            .data('offset', this.cache_offset(modal));
+        }
+
+        modal.attr('tabindex','0').attr('aria-hidden','false');
+
+        this.key_up_on(modal);    // PATCH #3: turning on key up capture only when a reveal window is open
+
+        // Prevent namespace event from triggering twice
+        modal.on('open.fndtn.reveal', function(e) {
+          if (e.namespace !== 'fndtn.reveal') return;
+        });
+
+        modal.on('open.fndtn.reveal').trigger('open.fndtn.reveal');
+
+        if (open_modal.length < 1) {
+          this.toggle_bg(modal, true);
+        }
+
+        if (typeof ajax_settings === 'string') {
+          ajax_settings = {
+            url : ajax_settings
+          };
+        }
+
+        var openModal = function() {
+          if(open_modal.length > 0) {
+            if(settings.multiple_opened) {
+              self.to_back(open_modal);
+            } else {
+              self.hide(open_modal, settings.css.close);
+            }
+          }
+
+          // bl: add the open_modal that isn't already in the background to the openModals array
+          if(settings.multiple_opened) {
+            openModals.push(modal);
+          }
+
+          self.show(modal, settings.css.open);
+        };
+
+        if (typeof ajax_settings === 'undefined' || !ajax_settings.url) {
+          openModal();
+        } else {
+          var old_success = typeof ajax_settings.success !== 'undefined' ? ajax_settings.success : null;
+          $.extend(ajax_settings, {
+            success : function (data, textStatus, jqXHR) {
+              if ( $.isFunction(old_success) ) {
+                var result = old_success(data, textStatus, jqXHR);
+                if (typeof result == 'string') {
+                  data = result;
+                }
+              }
+
+              if (typeof options !== 'undefined' && typeof options.replaceContentSel !== 'undefined') {
+                modal.find(options.replaceContentSel).html(data);
+              } else {
+                modal.html(data);
+              }
+
+              self.S(modal).foundation('section', 'reflow');
+              self.S(modal).children().foundation();
+
+              openModal();
+            }
+          });
+
+          // check for if user initalized with error callback
+          if (settings.on_ajax_error !== $.noop) {
+            $.extend(ajax_settings, {
+              error : settings.on_ajax_error
+            });
+          }
+
+          $.ajax(ajax_settings);
+        }
+      }
+      self.S(window).trigger('resize');
+    },
+
+    close : function (modal) {
+      var modal = modal && modal.length ? modal : this.S(this.scope),
+          open_modals = this.S('[' + this.attr_name() + '].open'),
+          settings = modal.data(this.attr_name(true) + '-init') || this.settings,
+          self = this;
+
+      if (open_modals.length > 0) {
+
+        modal.removeAttr('tabindex','0').attr('aria-hidden','true');
+
+        this.locked = true;
+        this.key_up_off(modal);   // PATCH #3: turning on key up capture only when a reveal window is open
+
+        modal.trigger('close.fndtn.reveal');
+
+        if ((settings.multiple_opened && open_modals.length === 1) || !settings.multiple_opened || modal.length > 1) {
+          self.toggle_bg(modal, false);
+          self.to_front(modal);
+        }
+
+        if (settings.multiple_opened) {
+          var isCurrent = modal.is(':not(.toback)');
+          self.hide(modal, settings.css.close, settings);
+          if(isCurrent) {
+            // remove the last modal since it is now closed
+            openModals.pop();
+          } else {
+            // if this isn't the current modal, then find it in the array and remove it
+            openModals = $.grep(openModals, function(elt) {
+              var isThis = elt[0]===modal[0];
+              if(isThis) {
+                // since it's not currently in the front, put it in the front now that it is hidden
+                // so that if it's re-opened, it won't be .toback
+                self.to_front(modal);
+              }
+              return !isThis;
+            });
+          }
+          // finally, show the next modal in the stack, if there is one
+          if(openModals.length>0) {
+            self.to_front(openModals[openModals.length - 1]);
+          }
+        } else {
+          self.hide(open_modals, settings.css.close, settings);
+        }
+      }
+    },
+
+    close_targets : function () {
+      var base = '.' + this.settings.dismiss_modal_class;
+
+      if (this.settings.close_on_background_click) {
+        return base + ', .' + this.settings.bg_class;
+      }
+
+      return base;
+    },
+
+    toggle_bg : function (modal, state) {
+      if (this.S('.' + this.settings.bg_class).length === 0) {
+        this.settings.bg = $('<div />', {'class': this.settings.bg_class})
+          .appendTo('body').hide();
+      }
+
+      var visible = this.settings.bg.filter(':visible').length > 0;
+      if ( state != visible ) {
+        if ( state == undefined ? visible : !state ) {
+          this.hide(this.settings.bg);
+        } else {
+          this.show(this.settings.bg);
+        }
+      }
+    },
+
+    show : function (el, css) {
+      // is modal
+      if (css) {
+        var settings = el.data(this.attr_name(true) + '-init') || this.settings,
+            root_element = settings.root_element,
+            context = this;
+
+        if (el.parent(root_element).length === 0) {
+          var placeholder = el.wrap('<div style="display: none;" />').parent();
+
+          el.on('closed.fndtn.reveal.wrapped', function () {
+            el.detach().appendTo(placeholder);
+            el.unwrap().unbind('closed.fndtn.reveal.wrapped');
+          });
+
+          el.detach().appendTo(root_element);
+        }
+
+        var animData = getAnimationData(settings.animation);
+        if (!animData.animate) {
+          this.locked = false;
+        }
+        if (animData.pop) {
+          css.top = $(window).scrollTop() - el.data('offset') + 'px';
+          var end_css = {
+            top: $(window).scrollTop() + el.data('css-top') + 'px',
+            opacity: 1
+          };
+
+          return setTimeout(function () {
+            return el
+              .css(css)
+              .animate(end_css, settings.animation_speed, 'linear', function () {
+                context.locked = false;
+                el.trigger('opened.fndtn.reveal');
+              })
+              .addClass('open');
+          }, settings.animation_speed / 2);
+        }
+
+        css.top = $(window).scrollTop() + el.data('css-top') + 'px';
+
+        if (animData.fade) {
+          var end_css = {opacity: 1};
+
+          return setTimeout(function () {
+            return el
+              .css(css)
+              .animate(end_css, settings.animation_speed, 'linear', function () {
+                context.locked = false;
+                el.trigger('opened.fndtn.reveal');
+              })
+              .addClass('open');
+          }, settings.animation_speed / 2);
+        }
+
+        return el.css(css).show().css({opacity : 1}).addClass('open').trigger('opened.fndtn.reveal');
+      }
+
+      var settings = this.settings;
+
+      // should we animate the background?
+      if (getAnimationData(settings.animation).fade) {
+        return el.fadeIn(settings.animation_speed / 2);
+      }
+
+      this.locked = false;
+
+      return el.show();
+    },
+
+    to_back : function(el) {
+      el.addClass('toback');
+    },
+
+    to_front : function(el) {
+      el.removeClass('toback');
+    },
+
+    hide : function (el, css) {
+      // is modal
+      if (css) {
+        var settings = el.data(this.attr_name(true) + '-init'),
+            context = this;
+        settings = settings || this.settings;
+
+        var animData = getAnimationData(settings.animation);
+        if (!animData.animate) {
+          this.locked = false;
+        }
+        if (animData.pop) {
+          var end_css = {
+            top: - $(window).scrollTop() - el.data('offset') + 'px',
+            opacity: 0
+          };
+
+          return setTimeout(function () {
+            return el
+              .animate(end_css, settings.animation_speed, 'linear', function () {
+                context.locked = false;
+                el.css(css).trigger('closed.fndtn.reveal');
+              })
+              .removeClass('open');
+          }, settings.animation_speed / 2);
+        }
+
+        if (animData.fade) {
+          var end_css = {opacity : 0};
+
+          return setTimeout(function () {
+            return el
+              .animate(end_css, settings.animation_speed, 'linear', function () {
+                context.locked = false;
+                el.css(css).trigger('closed.fndtn.reveal');
+              })
+              .removeClass('open');
+          }, settings.animation_speed / 2);
+        }
+
+        return el.hide().css(css).removeClass('open').trigger('closed.fndtn.reveal');
+      }
+
+      var settings = this.settings;
+
+      // should we animate the background?
+      if (getAnimationData(settings.animation).fade) {
+        return el.fadeOut(settings.animation_speed / 2);
+      }
+
+      return el.hide();
+    },
+
+    close_video : function (e) {
+      var video = $('.flex-video', e.target),
+          iframe = $('iframe', video);
+
+      if (iframe.length > 0) {
+        iframe.attr('data-src', iframe[0].src);
+        iframe.attr('src', iframe.attr('src'));
+        video.hide();
+      }
+    },
+
+    open_video : function (e) {
+      var video = $('.flex-video', e.target),
+          iframe = video.find('iframe');
+
+      if (iframe.length > 0) {
+        var data_src = iframe.attr('data-src');
+        if (typeof data_src === 'string') {
+          iframe[0].src = iframe.attr('data-src');
+        } else {
+          var src = iframe[0].src;
+          iframe[0].src = undefined;
+          iframe[0].src = src;
+        }
+        video.show();
+      }
+    },
+
+    data_attr : function (str) {
+      if (this.namespace.length > 0) {
+        return this.namespace + '-' + str;
+      }
+
+      return str;
+    },
+
+    cache_offset : function (modal) {
+      var offset = modal.show().height() + parseInt(modal.css('top'), 10) + modal.scrollY;
+
+      modal.hide();
+
+      return offset;
+    },
+
+    off : function () {
+      $(this.scope).off('.fndtn.reveal');
+    },
+
+    reflow : function () {}
+  };
+
+  /*
+   * getAnimationData('popAndFade') // {animate: true,  pop: true,  fade: true}
+   * getAnimationData('fade')       // {animate: true,  pop: false, fade: true}
+   * getAnimationData('pop')        // {animate: true,  pop: true,  fade: false}
+   * getAnimationData('foo')        // {animate: false, pop: false, fade: false}
+   * getAnimationData(null)         // {animate: false, pop: false, fade: false}
+   */
+  function getAnimationData(str) {
+    var fade = /fade/i.test(str);
+    var pop = /pop/i.test(str);
+    return {
+      animate : fade || pop,
+      pop : pop,
+      fade : fade
+    };
+  }
+}(jQuery, window, window.document));
diff --git a/js/foundation/js/foundation/foundation.slider.js b/js/foundation/js/foundation/foundation.slider.js
new file mode 100644 (file)
index 0000000..0d71d56
--- /dev/null
@@ -0,0 +1,296 @@
+;(function ($, window, document, undefined) {
+  'use strict';
+
+  Foundation.libs.slider = {
+    name : 'slider',
+
+    version : '5.5.3',
+
+    settings : {
+      start : 0,
+      end : 100,
+      step : 1,
+      precision : 2,
+      initial : null,
+      display_selector : '',
+      vertical : false,
+      trigger_input_change : false,
+      on_change : function () {}
+    },
+
+    cache : {},
+
+    init : function (scope, method, options) {
+      Foundation.inherit(this, 'throttle');
+      this.bindings(method, options);
+      this.reflow();
+    },
+
+    events : function () {
+      var self = this;
+      $(this.scope)
+        .off('.slider')
+        .on('mousedown.fndtn.slider touchstart.fndtn.slider pointerdown.fndtn.slider',
+        '[' + self.attr_name() + ']:not(.disabled, [disabled]) .range-slider-handle', function (e) {
+          if (!self.cache.active) {
+            e.preventDefault();
+            self.set_active_slider($(e.target));
+          }
+        })
+        .on('mousemove.fndtn.slider touchmove.fndtn.slider pointermove.fndtn.slider', function (e) {
+          if (!!self.cache.active) {
+            e.preventDefault();
+            if ($.data(self.cache.active[0], 'settings').vertical) {
+              var scroll_offset = 0;
+              if (!e.pageY) {
+                scroll_offset = window.scrollY;
+              }
+              self.calculate_position(self.cache.active, self.get_cursor_position(e, 'y') + scroll_offset);
+            } else {
+              self.calculate_position(self.cache.active, self.get_cursor_position(e, 'x'));
+            }
+          }
+        })
+        .on('mouseup.fndtn.slider touchend.fndtn.slider pointerup.fndtn.slider', function (e) {
+          if(!self.cache.active) {
+            // if the user has just clicked into the slider without starting to drag the handle
+            var slider = $(e.target).attr('role') === 'slider' ? $(e.target) : $(e.target).closest('.range-slider').find("[role='slider']");
+
+            if (slider.length && (!slider.parent().hasClass('disabled') && !slider.parent().attr('disabled'))) {
+              self.set_active_slider(slider);
+              if ($.data(self.cache.active[0], 'settings').vertical) {
+                var scroll_offset = 0;
+                if (!e.pageY) {
+                  scroll_offset = window.scrollY;
+                }
+                self.calculate_position(self.cache.active, self.get_cursor_position(e, 'y') + scroll_offset);
+              } else {
+                self.calculate_position(self.cache.active, self.get_cursor_position(e, 'x'));
+              }
+            }
+          }
+          self.remove_active_slider();
+        })
+        .on('change.fndtn.slider', function (e) {
+          self.settings.on_change();
+        });
+
+      self.S(window)
+        .on('resize.fndtn.slider', self.throttle(function (e) {
+          self.reflow();
+        }, 300));
+
+      // update slider value as users change input value
+      this.S('[' + this.attr_name() + ']').each(function () {
+        var slider = $(this),
+            handle = slider.children('.range-slider-handle')[0],
+            settings = self.initialize_settings(handle);
+
+        if (settings.display_selector != '') {
+          $(settings.display_selector).each(function(){
+            if ($(this).attr('value')) {
+              $(this).off('change').on('change', function () {
+                slider.foundation("slider", "set_value", $(this).val());
+              });
+            }
+          });
+        }
+      });
+    },
+
+    get_cursor_position : function (e, xy) {
+      var pageXY = 'page' + xy.toUpperCase(),
+          clientXY = 'client' + xy.toUpperCase(),
+          position;
+
+      if (typeof e[pageXY] !== 'undefined') {
+        position = e[pageXY];
+      } else if (typeof e.originalEvent[clientXY] !== 'undefined') {
+        position = e.originalEvent[clientXY];
+      } else if (e.originalEvent.touches && e.originalEvent.touches[0] && typeof e.originalEvent.touches[0][clientXY] !== 'undefined') {
+        position = e.originalEvent.touches[0][clientXY];
+      } else if (e.currentPoint && typeof e.currentPoint[xy] !== 'undefined') {
+        position = e.currentPoint[xy];
+      }
+
+      return position;
+    },
+
+    set_active_slider : function ($handle) {
+      this.cache.active = $handle;
+    },
+
+    remove_active_slider : function () {
+      this.cache.active = null;
+    },
+
+    calculate_position : function ($handle, cursor_x) {
+      var self = this,
+          settings = $.data($handle[0], 'settings'),
+          handle_l = $.data($handle[0], 'handle_l'),
+          handle_o = $.data($handle[0], 'handle_o'),
+          bar_l = $.data($handle[0], 'bar_l'),
+          bar_o = $.data($handle[0], 'bar_o');
+
+      requestAnimationFrame(function () {
+        var pct;
+
+        if (Foundation.rtl && !settings.vertical) {
+          pct = self.limit_to(((bar_o + bar_l - cursor_x) / bar_l), 0, 1);
+        } else {
+          pct = self.limit_to(((cursor_x - bar_o) / bar_l), 0, 1);
+        }
+
+        pct = settings.vertical ? 1 - pct : pct;
+
+        var norm = self.normalized_value(pct, settings.start, settings.end, settings.step, settings.precision);
+
+        self.set_ui($handle, norm);
+      });
+    },
+
+    set_ui : function ($handle, value) {
+      var settings = $.data($handle[0], 'settings'),
+          handle_l = $.data($handle[0], 'handle_l'),
+          bar_l = $.data($handle[0], 'bar_l'),
+          norm_pct = this.normalized_percentage(value, settings.start, settings.end),
+          handle_offset = norm_pct * (bar_l - handle_l) - 1,
+          progress_bar_length = norm_pct * 100,
+          $handle_parent = $handle.parent(),
+          $hidden_inputs = $handle.parent().children('input[type=hidden]');
+
+      if (Foundation.rtl && !settings.vertical) {
+        handle_offset = -handle_offset;
+      }
+
+      handle_offset = settings.vertical ? -handle_offset + bar_l - handle_l + 1 : handle_offset;
+      this.set_translate($handle, handle_offset, settings.vertical);
+
+      if (settings.vertical) {
+        $handle.siblings('.range-slider-active-segment').css('height', progress_bar_length + '%');
+      } else {
+        $handle.siblings('.range-slider-active-segment').css('width', progress_bar_length + '%');
+      }
+
+      $handle_parent.attr(this.attr_name(), value).trigger('change.fndtn.slider');
+
+      $hidden_inputs.val(value);
+      if (settings.trigger_input_change) {
+          $hidden_inputs.trigger('change.fndtn.slider');
+      }
+
+      if (!$handle[0].hasAttribute('aria-valuemin')) {
+        $handle.attr({
+          'aria-valuemin' : settings.start,
+          'aria-valuemax' : settings.end
+        });
+      }
+      $handle.attr('aria-valuenow', value);
+
+      if (settings.display_selector != '') {
+        $(settings.display_selector).each(function () {
+          if (this.hasAttribute('value')) {
+            $(this).val(value);
+          } else {
+            $(this).text(value);
+          }
+        });
+      }
+
+    },
+
+    normalized_percentage : function (val, start, end) {
+      return Math.min(1, (val - start) / (end - start));
+    },
+
+    normalized_value : function (val, start, end, step, precision) {
+      var range = end - start,
+          point = val * range,
+          mod = (point - (point % step)) / step,
+          rem = point % step,
+          round = ( rem >= step * 0.5 ? step : 0);
+      return ((mod * step + round) + start).toFixed(precision);
+    },
+
+    set_translate : function (ele, offset, vertical) {
+      if (vertical) {
+        $(ele)
+          .css('-webkit-transform', 'translateY(' + offset + 'px)')
+          .css('-moz-transform', 'translateY(' + offset + 'px)')
+          .css('-ms-transform', 'translateY(' + offset + 'px)')
+          .css('-o-transform', 'translateY(' + offset + 'px)')
+          .css('transform', 'translateY(' + offset + 'px)');
+      } else {
+        $(ele)
+          .css('-webkit-transform', 'translateX(' + offset + 'px)')
+          .css('-moz-transform', 'translateX(' + offset + 'px)')
+          .css('-ms-transform', 'translateX(' + offset + 'px)')
+          .css('-o-transform', 'translateX(' + offset + 'px)')
+          .css('transform', 'translateX(' + offset + 'px)');
+      }
+    },
+
+    limit_to : function (val, min, max) {
+      return Math.min(Math.max(val, min), max);
+    },
+
+    initialize_settings : function (handle) {
+      var settings = $.extend({}, this.settings, this.data_options($(handle).parent())),
+          decimal_places_match_result;
+
+      if (settings.precision === null) {
+        decimal_places_match_result = ('' + settings.step).match(/\.([\d]*)/);
+        settings.precision = decimal_places_match_result && decimal_places_match_result[1] ? decimal_places_match_result[1].length : 0;
+      }
+
+      if (settings.vertical) {
+        $.data(handle, 'bar_o', $(handle).parent().offset().top);
+        $.data(handle, 'bar_l', $(handle).parent().outerHeight());
+        $.data(handle, 'handle_o', $(handle).offset().top);
+        $.data(handle, 'handle_l', $(handle).outerHeight());
+      } else {
+        $.data(handle, 'bar_o', $(handle).parent().offset().left);
+        $.data(handle, 'bar_l', $(handle).parent().outerWidth());
+        $.data(handle, 'handle_o', $(handle).offset().left);
+        $.data(handle, 'handle_l', $(handle).outerWidth());
+      }
+
+      $.data(handle, 'bar', $(handle).parent());
+      return $.data(handle, 'settings', settings);
+    },
+
+    set_initial_position : function ($ele) {
+      var settings = $.data($ele.children('.range-slider-handle')[0], 'settings'),
+          initial = ((typeof settings.initial == 'number' && !isNaN(settings.initial)) ? settings.initial : Math.floor((settings.end - settings.start) * 0.5 / settings.step) * settings.step + settings.start),
+          $handle = $ele.children('.range-slider-handle');
+      this.set_ui($handle, initial);
+    },
+
+    set_value : function (value) {
+      var self = this;
+      $('[' + self.attr_name() + ']', this.scope).each(function () {
+        $(this).attr(self.attr_name(), value);
+      });
+      if (!!$(this.scope).attr(self.attr_name())) {
+        $(this.scope).attr(self.attr_name(), value);
+      }
+      self.reflow();
+    },
+
+    reflow : function () {
+      var self = this;
+      self.S('[' + this.attr_name() + ']').each(function () {
+        var handle = $(this).children('.range-slider-handle')[0],
+            val = $(this).attr(self.attr_name());
+        self.initialize_settings(handle);
+
+        if (val) {
+          self.set_ui($(handle), parseFloat(val));
+        } else {
+          self.set_initial_position($(this));
+        }
+      });
+    }
+  };
+
+}(jQuery, window, window.document));
diff --git a/js/foundation/js/foundation/foundation.tab.js b/js/foundation/js/foundation/foundation.tab.js
new file mode 100644 (file)
index 0000000..4b375c1
--- /dev/null
@@ -0,0 +1,247 @@
+;(function ($, window, document, undefined) {
+  'use strict';
+
+  Foundation.libs.tab = {
+    name : 'tab',
+
+    version : '5.5.3',
+
+    settings : {
+      active_class : 'active',
+      callback : function () {},
+      deep_linking : false,
+      scroll_to_content : true,
+      is_hover : false
+    },
+
+    default_tab_hashes : [],
+
+    init : function (scope, method, options) {
+      var self = this,
+          S = this.S;
+
+         // Store the default active tabs which will be referenced when the
+         // location hash is absent, as in the case of navigating the tabs and
+         // returning to the first viewing via the browser Back button.
+         S('[' + this.attr_name() + '] > .active > a', this.scope).each(function () {
+           self.default_tab_hashes.push(this.hash);
+         });
+
+      this.bindings(method, options);
+      this.handle_location_hash_change();
+    },
+
+    events : function () {
+      var self = this,
+          S = this.S;
+
+      var usual_tab_behavior =  function (e, target) {
+        var settings = S(target).closest('[' + self.attr_name() + ']').data(self.attr_name(true) + '-init');
+        if (!settings.is_hover || Modernizr.touch) {
+          // if user did not pressed tab key, prevent default action
+          var keyCode = e.keyCode || e.which;
+          if (keyCode !== 9) { 
+            e.preventDefault();
+            e.stopPropagation();
+          }
+          self.toggle_active_tab(S(target).parent());
+          
+        }
+      };
+
+      S(this.scope)
+        .off('.tab')
+        // Key event: focus/tab key
+        .on('keydown.fndtn.tab', '[' + this.attr_name() + '] > * > a', function(e) {
+          var keyCode = e.keyCode || e.which;
+          // if user pressed tab key
+          if (keyCode === 13 || keyCode === 32) { // enter or space
+            var el = this;
+            usual_tab_behavior(e, el);
+          } 
+        })
+        // Click event: tab title
+        .on('click.fndtn.tab', '[' + this.attr_name() + '] > * > a', function(e) {
+          var el = this;
+          usual_tab_behavior(e, el);
+        })
+        // Hover event: tab title
+        .on('mouseenter.fndtn.tab', '[' + this.attr_name() + '] > * > a', function (e) {
+          var settings = S(this).closest('[' + self.attr_name() + ']').data(self.attr_name(true) + '-init');
+          if (settings.is_hover) {
+            self.toggle_active_tab(S(this).parent());
+          }
+        });
+
+      // Location hash change event
+      S(window).on('hashchange.fndtn.tab', function (e) {
+        e.preventDefault();
+        self.handle_location_hash_change();
+      });
+    },
+
+    handle_location_hash_change : function () {
+
+      var self = this,
+          S = this.S;
+
+      S('[' + this.attr_name() + ']', this.scope).each(function () {
+        var settings = S(this).data(self.attr_name(true) + '-init');
+        if (settings.deep_linking) {
+          // Match the location hash to a label
+          var hash;
+          if (settings.scroll_to_content) {
+            hash = self.scope.location.hash;
+          } else {
+            // prefix the hash to prevent anchor scrolling
+            hash = self.scope.location.hash.replace('fndtn-', '');
+          }
+          if (hash != '') {
+            // Check whether the location hash references a tab content div or
+            // another element on the page (inside or outside the tab content div)
+            var hash_element = S(hash);
+            if (hash_element.hasClass('content') && hash_element.parent().hasClass('tabs-content')) {
+              // Tab content div
+              self.toggle_active_tab($('[' + self.attr_name() + '] > * > a[href=' + hash + ']').parent());
+            } else {
+              // Not the tab content div. If inside the tab content, find the
+              // containing tab and toggle it as active.
+              var hash_tab_container_id = hash_element.closest('.content').attr('id');
+              if (hash_tab_container_id != undefined) {
+                self.toggle_active_tab($('[' + self.attr_name() + '] > * > a[href=#' + hash_tab_container_id + ']').parent(), hash);
+              }
+            }
+          } else {
+            // Reference the default tab hashes which were initialized in the init function
+            for (var ind = 0; ind < self.default_tab_hashes.length; ind++) {
+              self.toggle_active_tab($('[' + self.attr_name() + '] > * > a[href=' + self.default_tab_hashes[ind] + ']').parent());
+            }
+          }
+        }
+       });
+     },
+
+    toggle_active_tab : function (tab, location_hash) {
+      var self = this,
+          S = self.S,
+          tabs = tab.closest('[' + this.attr_name() + ']'),
+          tab_link = tab.find('a'),
+          anchor = tab.children('a').first(),
+          target_hash = '#' + anchor.attr('href').split('#')[1],
+          target = S(target_hash),
+          siblings = tab.siblings(),
+          settings = tabs.data(this.attr_name(true) + '-init'),
+          interpret_keyup_action = function (e) {
+            // Light modification of Heydon Pickering's Practical ARIA Examples: http://heydonworks.com/practical_aria_examples/js/a11y.js
+
+            // define current, previous and next (possible) tabs
+
+            var $original = $(this);
+            var $prev = $(this).parents('li').prev().children('[role="tab"]');
+            var $next = $(this).parents('li').next().children('[role="tab"]');
+            var $target;
+
+            // find the direction (prev or next)
+
+            switch (e.keyCode) {
+              case 37:
+                $target = $prev;
+                break;
+              case 39:
+                $target = $next;
+                break;
+              default:
+                $target = false
+                  break;
+            }
+
+            if ($target.length) {
+              $original.attr({
+                'tabindex' : '-1',
+                'aria-selected' : null
+              });
+              $target.attr({
+                'tabindex' : '0',
+                'aria-selected' : true
+              }).focus();
+            }
+
+            // Hide panels
+
+            $('[role="tabpanel"]')
+              .attr('aria-hidden', 'true');
+
+            // Show panel which corresponds to target
+
+            $('#' + $(document.activeElement).attr('href').substring(1))
+              .attr('aria-hidden', null);
+
+          },
+          go_to_hash = function(hash) {
+            // This function allows correct behaviour of the browser's back button when deep linking is enabled. Without it
+            // the user would get continually redirected to the default hash.
+            var default_hash = settings.scroll_to_content ? self.default_tab_hashes[0] : 'fndtn-' + self.default_tab_hashes[0].replace('#', '');
+
+            if (hash !== default_hash || window.location.hash) {
+              window.location.hash = hash;
+            }
+          };
+
+      // allow usage of data-tab-content attribute instead of href
+      if (anchor.data('tab-content')) {
+        target_hash = '#' + anchor.data('tab-content').split('#')[1];
+        target = S(target_hash);
+      }
+
+      if (settings.deep_linking) {
+
+        if (settings.scroll_to_content) {
+
+          // retain current hash to scroll to content
+          go_to_hash(location_hash || target_hash);
+
+          if (location_hash == undefined || location_hash == target_hash) {
+            tab.parent()[0].scrollIntoView();
+          } else {
+            S(target_hash)[0].scrollIntoView();
+          }
+        } else {
+          // prefix the hashes so that the browser doesn't scroll down
+          if (location_hash != undefined) {
+            go_to_hash('fndtn-' + location_hash.replace('#', ''));
+          } else {
+            go_to_hash('fndtn-' + target_hash.replace('#', ''));
+          }
+        }
+      }
+
+      // WARNING: The activation and deactivation of the tab content must
+      // occur after the deep linking in order to properly refresh the browser
+      // window (notably in Chrome).
+      // Clean up multiple attr instances to done once
+      tab.addClass(settings.active_class).triggerHandler('opened');
+      tab_link.attr({'aria-selected' : 'true',  tabindex : 0});
+      siblings.removeClass(settings.active_class)
+      siblings.find('a').attr({'aria-selected' : 'false'/*,  tabindex : -1*/});
+      target.siblings().removeClass(settings.active_class).attr({'aria-hidden' : 'true'/*,  tabindex : -1*/});
+      target.addClass(settings.active_class).attr('aria-hidden', 'false').removeAttr('tabindex');
+      settings.callback(tab);
+      target.triggerHandler('toggled', [target]);
+      tabs.triggerHandler('toggled', [tab]);
+
+      tab_link.off('keydown').on('keydown', interpret_keyup_action );
+    },
+
+    data_attr : function (str) {
+      if (this.namespace.length > 0) {
+        return this.namespace + '-' + str;
+      }
+
+      return str;
+    },
+
+    off : function () {},
+
+    reflow : function () {}
+  };
+}(jQuery, window, window.document));
diff --git a/js/foundation/js/foundation/foundation.tooltip.js b/js/foundation/js/foundation/foundation.tooltip.js
new file mode 100644 (file)
index 0000000..0690e25
--- /dev/null
@@ -0,0 +1,348 @@
+;(function ($, window, document, undefined) {
+  'use strict';
+
+  Foundation.libs.tooltip = {
+    name : 'tooltip',
+
+    version : '5.5.3',
+
+    settings : {
+      additional_inheritable_classes : [],
+      tooltip_class : '.tooltip',
+      append_to : 'body',
+      touch_close_text : 'Tap To Close',
+      disable_for_touch : false,
+      hover_delay : 200,
+      fade_in_duration : 150,
+      fade_out_duration : 150,
+      show_on : 'all',
+      tip_template : function (selector, content) {
+        return '<span data-selector="' + selector + '" id="' + selector + '" class="'
+          + Foundation.libs.tooltip.settings.tooltip_class.substring(1)
+          + '" role="tooltip">' + content + '<span class="nub"></span></span>';
+      }
+    },
+
+    cache : {},
+
+    init : function (scope, method, options) {
+      Foundation.inherit(this, 'random_str');
+      this.bindings(method, options);
+    },
+
+    should_show : function (target, tip) {
+      var settings = $.extend({}, this.settings, this.data_options(target));
+
+      if (settings.show_on === 'all') {
+        return true;
+      } else if (this.small() && settings.show_on === 'small') {
+        return true;
+      } else if (this.medium() && settings.show_on === 'medium') {
+        return true;
+      } else if (this.large() && settings.show_on === 'large') {
+        return true;
+      }
+      return false;
+    },
+
+    medium : function () {
+      return matchMedia(Foundation.media_queries['medium']).matches;
+    },
+
+    large : function () {
+      return matchMedia(Foundation.media_queries['large']).matches;
+    },
+
+    events : function (instance) {
+      var self = this,
+          S = self.S;
+
+      self.create(this.S(instance));
+
+      function _startShow(elt, $this, immediate) {
+        if (elt.timer) {
+          return;
+        }
+
+        if (immediate) {
+          elt.timer = null;
+          self.showTip($this);
+        } else {
+          elt.timer = setTimeout(function () {
+            elt.timer = null;
+            self.showTip($this);
+          }.bind(elt), self.settings.hover_delay);
+        }
+      }
+
+      function _startHide(elt, $this) {
+        if (elt.timer) {
+          clearTimeout(elt.timer);
+          elt.timer = null;
+        }
+
+        self.hide($this);
+      }
+
+      $(this.scope)
+        .off('.tooltip')
+        .on('mouseenter.fndtn.tooltip mouseleave.fndtn.tooltip touchstart.fndtn.tooltip MSPointerDown.fndtn.tooltip',
+          '[' + this.attr_name() + ']', function (e) {
+          var $this = S(this),
+              settings = $.extend({}, self.settings, self.data_options($this)),
+              is_touch = false;
+
+          if (Modernizr.touch && /touchstart|MSPointerDown/i.test(e.type) && S(e.target).is('a')) {
+            return false;
+          }
+
+          if (/mouse/i.test(e.type) && self.ie_touch(e)) {
+            return false;
+          }
+          
+          if ($this.hasClass('open')) {
+            if (Modernizr.touch && /touchstart|MSPointerDown/i.test(e.type)) {
+              e.preventDefault();
+            }
+            self.hide($this);
+          } else {
+            if (settings.disable_for_touch && Modernizr.touch && /touchstart|MSPointerDown/i.test(e.type)) {
+              return;
+            } else if (!settings.disable_for_touch && Modernizr.touch && /touchstart|MSPointerDown/i.test(e.type)) {
+              e.preventDefault();
+              S(settings.tooltip_class + '.open').hide();
+              is_touch = true;
+              // close other open tooltips on touch
+              if ($('.open[' + self.attr_name() + ']').length > 0) {
+               var prevOpen = S($('.open[' + self.attr_name() + ']')[0]);
+               self.hide(prevOpen);
+              }
+            }
+
+            if (/enter|over/i.test(e.type)) {
+              _startShow(this, $this);
+
+            } else if (e.type === 'mouseout' || e.type === 'mouseleave') {
+              _startHide(this, $this);
+            } else {
+              _startShow(this, $this, true);
+            }
+          }
+        })
+        .on('mouseleave.fndtn.tooltip touchstart.fndtn.tooltip MSPointerDown.fndtn.tooltip', '[' + this.attr_name() + '].open', function (e) {
+          if (/mouse/i.test(e.type) && self.ie_touch(e)) {
+            return false;
+          }
+
+          if ($(this).data('tooltip-open-event-type') == 'touch' && e.type == 'mouseleave') {
+            return;
+          } else if ($(this).data('tooltip-open-event-type') == 'mouse' && /MSPointerDown|touchstart/i.test(e.type)) {
+            self.convert_to_touch($(this));
+          } else {
+            _startHide(this, $(this));
+          }
+        })
+        .on('DOMNodeRemoved DOMAttrModified', '[' + this.attr_name() + ']:not(a)', function (e) {
+          _startHide(this, S(this));
+        });
+    },
+
+    ie_touch : function (e) {
+      // How do I distinguish between IE11 and Windows Phone 8?????
+      return false;
+    },
+
+    showTip : function ($target) {
+      var $tip = this.getTip($target);
+      if (this.should_show($target, $tip)) {
+        return this.show($target);
+      }
+      return;
+    },
+
+    getTip : function ($target) {
+      var selector = this.selector($target),
+          settings = $.extend({}, this.settings, this.data_options($target)),
+          tip = null;
+
+      if (selector) {
+        tip = this.S('span[data-selector="' + selector + '"]' + settings.tooltip_class);
+      }
+
+      return (typeof tip === 'object') ? tip : false;
+    },
+
+    selector : function ($target) {
+      var dataSelector = $target.attr(this.attr_name()) || $target.attr('data-selector');
+
+      if (typeof dataSelector != 'string') {
+        dataSelector = this.random_str(6);
+        $target
+          .attr('data-selector', dataSelector)
+          .attr('aria-describedby', dataSelector);
+      }
+
+      return dataSelector;
+    },
+
+    create : function ($target) {
+      var self = this,
+          settings = $.extend({}, this.settings, this.data_options($target)),
+          tip_template = this.settings.tip_template;
+
+      if (typeof settings.tip_template === 'string' && window.hasOwnProperty(settings.tip_template)) {
+        tip_template = window[settings.tip_template];
+      }
+
+      var $tip = $(tip_template(this.selector($target), $('<div></div>').html($target.attr('title')).html())),
+          classes = this.inheritable_classes($target);
+
+      $tip.addClass(classes).appendTo(settings.append_to);
+
+      if (Modernizr.touch) {
+        $tip.append('<span class="tap-to-close">' + settings.touch_close_text + '</span>');
+        $tip.on('touchstart.fndtn.tooltip MSPointerDown.fndtn.tooltip', function (e) {
+          self.hide($target);
+        });
+      }
+
+      $target.removeAttr('title').attr('title', '');
+    },
+
+    reposition : function (target, tip, classes) {
+      var width, nub, nubHeight, nubWidth, objPos;
+
+      tip.css('visibility', 'hidden').show();
+
+      width = target.data('width');
+      nub = tip.children('.nub');
+      nubHeight = nub.outerHeight();
+      nubWidth = nub.outerWidth();
+
+      if (this.small()) {
+        tip.css({'width' : '100%'});
+      } else {
+        tip.css({'width' : (width) ? width : 'auto'});
+      }
+
+      objPos = function (obj, top, right, bottom, left, width) {
+        return obj.css({
+          'top' : (top) ? top : 'auto',
+          'bottom' : (bottom) ? bottom : 'auto',
+          'left' : (left) ? left : 'auto',
+          'right' : (right) ? right : 'auto'
+        }).end();
+      };
+      
+      var o_top = target.offset().top;
+      var o_left = target.offset().left;
+      var outerHeight = target.outerHeight();
+
+      objPos(tip, (o_top + outerHeight + 10), 'auto', 'auto', o_left);
+
+      if (this.small()) {
+        objPos(tip, (o_top + outerHeight + 10), 'auto', 'auto', 12.5, $(this.scope).width());
+        tip.addClass('tip-override');
+        objPos(nub, -nubHeight, 'auto', 'auto', o_left);
+      } else {
+        
+        if (Foundation.rtl) {
+          nub.addClass('rtl');
+          o_left = o_left + target.outerWidth() - tip.outerWidth();
+        }
+
+        objPos(tip, (o_top + outerHeight + 10), 'auto', 'auto', o_left);
+        // reset nub from small styles, if they've been applied
+        if (nub.attr('style')) {
+          nub.removeAttr('style');
+        }
+        
+        tip.removeClass('tip-override');
+        
+        var tip_outerHeight = tip.outerHeight();
+        
+        if (classes && classes.indexOf('tip-top') > -1) {
+          if (Foundation.rtl) {
+            nub.addClass('rtl');
+          }
+          objPos(tip, (o_top - tip_outerHeight), 'auto', 'auto', o_left)
+            .removeClass('tip-override');
+        } else if (classes && classes.indexOf('tip-left') > -1) {
+          objPos(tip, (o_top + (outerHeight / 2) - (tip_outerHeight / 2)), 'auto', 'auto', (o_left - tip.outerWidth() - nubHeight))
+            .removeClass('tip-override');
+          nub.removeClass('rtl');
+        } else if (classes && classes.indexOf('tip-right') > -1) {
+          objPos(tip, (o_top + (outerHeight / 2) - (tip_outerHeight / 2)), 'auto', 'auto', (o_left + target.outerWidth() + nubHeight))
+            .removeClass('tip-override');
+          nub.removeClass('rtl');
+        }
+      }
+
+      tip.css('visibility', 'visible').hide();
+    },
+
+    small : function () {
+      return matchMedia(Foundation.media_queries.small).matches &&
+        !matchMedia(Foundation.media_queries.medium).matches;
+    },
+
+    inheritable_classes : function ($target) {
+      var settings = $.extend({}, this.settings, this.data_options($target)),
+          inheritables = ['tip-top', 'tip-left', 'tip-bottom', 'tip-right', 'radius', 'round'].concat(settings.additional_inheritable_classes),
+          classes = $target.attr('class'),
+          filtered = classes ? $.map(classes.split(' '), function (el, i) {
+            if ($.inArray(el, inheritables) !== -1) {
+              return el;
+            }
+          }).join(' ') : '';
+
+      return $.trim(filtered);
+    },
+
+    convert_to_touch : function ($target) {
+      var self = this,
+          $tip = self.getTip($target),
+          settings = $.extend({}, self.settings, self.data_options($target));
+
+      if ($tip.find('.tap-to-close').length === 0) {
+        $tip.append('<span class="tap-to-close">' + settings.touch_close_text + '</span>');
+        $tip.on('click.fndtn.tooltip.tapclose touchstart.fndtn.tooltip.tapclose MSPointerDown.fndtn.tooltip.tapclose', function (e) {
+          self.hide($target);
+        });
+      }
+
+      $target.data('tooltip-open-event-type', 'touch');
+    },
+
+    show : function ($target) {
+      var $tip = this.getTip($target);
+      if ($target.data('tooltip-open-event-type') == 'touch') {
+        this.convert_to_touch($target);
+      }
+
+      this.reposition($target, $tip, $target.attr('class'));
+      $target.addClass('open');
+      $tip.fadeIn(this.settings.fade_in_duration);
+    },
+
+    hide : function ($target) {
+      var $tip = this.getTip($target);
+
+      $tip.fadeOut(this.settings.fade_out_duration, function () {
+        $tip.find('.tap-to-close').remove();
+        $tip.off('click.fndtn.tooltip.tapclose MSPointerDown.fndtn.tapclose');
+        $target.removeClass('open');
+      });
+    },
+
+    off : function () {
+      var self = this;
+      this.S(this.scope).off('.fndtn.tooltip');
+      this.S(this.settings.tooltip_class).each(function (i) {
+        $('[' + self.attr_name() + ']').eq(i).attr('title', $(this).text());
+      }).remove();
+    },
+
+    reflow : function () {}
+  };
+}(jQuery, window, window.document));
diff --git a/js/foundation/js/foundation/foundation.topbar.js b/js/foundation/js/foundation/foundation.topbar.js
new file mode 100644 (file)
index 0000000..23b7c7f
--- /dev/null
@@ -0,0 +1,458 @@
+;(function ($, window, document, undefined) {
+  'use strict';
+
+  Foundation.libs.topbar = {
+    name : 'topbar',
+
+    version : '5.5.3',
+
+    settings : {
+      index : 0,
+      start_offset : 0,
+      sticky_class : 'sticky',
+      custom_back_text : true,
+      back_text : 'Back',
+      mobile_show_parent_link : true,
+      is_hover : true,
+      scrolltop : true, // jump to top when sticky nav menu toggle is clicked
+      sticky_on : 'all',
+      dropdown_autoclose: true
+    },
+
+    init : function (section, method, options) {
+      Foundation.inherit(this, 'add_custom_rule register_media throttle');
+      var self = this;
+
+      self.register_media('topbar', 'foundation-mq-topbar');
+
+      this.bindings(method, options);
+
+      self.S('[' + this.attr_name() + ']', this.scope).each(function () {
+        var topbar = $(this),
+            settings = topbar.data(self.attr_name(true) + '-init'),
+            section = self.S('section, .top-bar-section', this);
+        topbar.data('index', 0);
+        var topbarContainer = topbar.parent();
+        if (topbarContainer.hasClass('fixed') || self.is_sticky(topbar, topbarContainer, settings) ) {
+          self.settings.sticky_class = settings.sticky_class;
+          self.settings.sticky_topbar = topbar;
+          topbar.data('height', topbarContainer.outerHeight());
+          topbar.data('stickyoffset', topbarContainer.offset().top);
+        } else {
+          topbar.data('height', topbar.outerHeight());
+        }
+
+        if (!settings.assembled) {
+          self.assemble(topbar);
+        }
+
+        if (settings.is_hover) {
+          self.S('.has-dropdown', topbar).addClass('not-click');
+        } else {
+          self.S('.has-dropdown', topbar).removeClass('not-click');
+        }
+
+        // Pad body when sticky (scrolled) or fixed.
+        self.add_custom_rule('.f-topbar-fixed { padding-top: ' + topbar.data('height') + 'px }');
+
+        if (topbarContainer.hasClass('fixed')) {
+          self.S('body').addClass('f-topbar-fixed');
+        }
+      });
+
+    },
+
+    is_sticky : function (topbar, topbarContainer, settings) {
+      var sticky     = topbarContainer.hasClass(settings.sticky_class);
+      var smallMatch = matchMedia(Foundation.media_queries.small).matches;
+      var medMatch   = matchMedia(Foundation.media_queries.medium).matches;
+      var lrgMatch   = matchMedia(Foundation.media_queries.large).matches;
+
+      if (sticky && settings.sticky_on === 'all') {
+        return true;
+      }
+      if (sticky && this.small() && settings.sticky_on.indexOf('small') !== -1) {
+        if (smallMatch && !medMatch && !lrgMatch) { return true; }
+      }
+      if (sticky && this.medium() && settings.sticky_on.indexOf('medium') !== -1) {
+        if (smallMatch && medMatch && !lrgMatch) { return true; }
+      }
+      if (sticky && this.large() && settings.sticky_on.indexOf('large') !== -1) {
+        if (smallMatch && medMatch && lrgMatch) { return true; }
+      }
+
+       return false;
+    },
+
+    toggle : function (toggleEl) {
+      var self = this,
+          topbar;
+
+      if (toggleEl) {
+        topbar = self.S(toggleEl).closest('[' + this.attr_name() + ']');
+      } else {
+        topbar = self.S('[' + this.attr_name() + ']');
+      }
+
+      var settings = topbar.data(this.attr_name(true) + '-init');
+
+      var section = self.S('section, .top-bar-section', topbar);
+
+      if (self.breakpoint()) {
+        if (!self.rtl) {
+          section.css({left : '0%'});
+          $('>.name', section).css({left : '100%'});
+        } else {
+          section.css({right : '0%'});
+          $('>.name', section).css({right : '100%'});
+        }
+
+        self.S('li.moved', section).removeClass('moved');
+        topbar.data('index', 0);
+
+        topbar
+          .toggleClass('expanded')
+          .css('height', '');
+      }
+
+      if (settings.scrolltop) {
+        if (!topbar.hasClass('expanded')) {
+          if (topbar.hasClass('fixed')) {
+            topbar.parent().addClass('fixed');
+            topbar.removeClass('fixed');
+            self.S('body').addClass('f-topbar-fixed');
+          }
+        } else if (topbar.parent().hasClass('fixed')) {
+          if (settings.scrolltop) {
+            topbar.parent().removeClass('fixed');
+            topbar.addClass('fixed');
+            self.S('body').removeClass('f-topbar-fixed');
+
+            window.scrollTo(0, 0);
+          } else {
+            topbar.parent().removeClass('expanded');
+          }
+        }
+      } else {
+        if (self.is_sticky(topbar, topbar.parent(), settings)) {
+          topbar.parent().addClass('fixed');
+        }
+
+        if (topbar.parent().hasClass('fixed')) {
+          if (!topbar.hasClass('expanded')) {
+            topbar.removeClass('fixed');
+            topbar.parent().removeClass('expanded');
+            self.update_sticky_positioning();
+          } else {
+            topbar.addClass('fixed');
+            topbar.parent().addClass('expanded');
+            self.S('body').addClass('f-topbar-fixed');
+          }
+        }
+      }
+    },
+
+    timer : null,
+
+    events : function (bar) {
+      var self = this,
+          S = this.S;
+
+      S(this.scope)
+        .off('.topbar')
+        .on('click.fndtn.topbar', '[' + this.attr_name() + '] .toggle-topbar', function (e) {
+          e.preventDefault();
+          self.toggle(this);
+        })
+        .on('click.fndtn.topbar contextmenu.fndtn.topbar', '.top-bar .top-bar-section li a[href^="#"],[' + this.attr_name() + '] .top-bar-section li a[href^="#"]', function (e) {
+          var li = $(this).closest('li'),
+              topbar = li.closest('[' + self.attr_name() + ']'),
+              settings = topbar.data(self.attr_name(true) + '-init');
+
+          if (settings.dropdown_autoclose && settings.is_hover) {
+            var hoverLi = $(this).closest('.hover');
+            hoverLi.removeClass('hover');
+          }
+          if (self.breakpoint() && !li.hasClass('back') && !li.hasClass('has-dropdown')) {
+            self.toggle();
+          }
+
+        })
+        .on('click.fndtn.topbar', '[' + this.attr_name() + '] li.has-dropdown', function (e) {
+          var li = S(this),
+              target = S(e.target),
+              topbar = li.closest('[' + self.attr_name() + ']'),
+              settings = topbar.data(self.attr_name(true) + '-init');
+
+          if (target.data('revealId')) {
+            self.toggle();
+            return;
+          }
+
+          if (self.breakpoint()) {
+            return;
+          }
+
+          if (settings.is_hover && !Modernizr.touch) {
+            return;
+          }
+
+          e.stopImmediatePropagation();
+
+          if (li.hasClass('hover')) {
+            li
+              .removeClass('hover')
+              .find('li')
+              .removeClass('hover');
+
+            li.parents('li.hover')
+              .removeClass('hover');
+          } else {
+            li.addClass('hover');
+
+            $(li).siblings().removeClass('hover');
+
+            if (target[0].nodeName === 'A' && target.parent().hasClass('has-dropdown')) {
+              e.preventDefault();
+            }
+          }
+        })
+        .on('click.fndtn.topbar', '[' + this.attr_name() + '] .has-dropdown>a', function (e) {
+          if (self.breakpoint()) {
+
+            e.preventDefault();
+
+            var $this = S(this),
+                topbar = $this.closest('[' + self.attr_name() + ']'),
+                section = topbar.find('section, .top-bar-section'),
+                dropdownHeight = $this.next('.dropdown').outerHeight(),
+                $selectedLi = $this.closest('li');
+
+            topbar.data('index', topbar.data('index') + 1);
+            $selectedLi.addClass('moved');
+
+            if (!self.rtl) {
+              section.css({left : -(100 * topbar.data('index')) + '%'});
+              section.find('>.name').css({left : 100 * topbar.data('index') + '%'});
+            } else {
+              section.css({right : -(100 * topbar.data('index')) + '%'});
+              section.find('>.name').css({right : 100 * topbar.data('index') + '%'});
+            }
+
+            topbar.css('height', $this.siblings('ul').outerHeight(true) + topbar.data('height'));
+          }
+        });
+
+      S(window).off('.topbar').on('resize.fndtn.topbar', self.throttle(function () {
+          self.resize.call(self);
+      }, 50)).trigger('resize.fndtn.topbar').load(function () {
+          // Ensure that the offset is calculated after all of the pages resources have loaded
+          S(this).trigger('resize.fndtn.topbar');
+      });
+
+      S('body').off('.topbar').on('click.fndtn.topbar', function (e) {
+        var parent = S(e.target).closest('li').closest('li.hover');
+
+        if (parent.length > 0) {
+          return;
+        }
+
+        S('[' + self.attr_name() + '] li.hover').removeClass('hover');
+      });
+
+      // Go up a level on Click
+      S(this.scope).on('click.fndtn.topbar', '[' + this.attr_name() + '] .has-dropdown .back', function (e) {
+        e.preventDefault();
+
+        var $this = S(this),
+            topbar = $this.closest('[' + self.attr_name() + ']'),
+            section = topbar.find('section, .top-bar-section'),
+            settings = topbar.data(self.attr_name(true) + '-init'),
+            $movedLi = $this.closest('li.moved'),
+            $previousLevelUl = $movedLi.parent();
+
+        topbar.data('index', topbar.data('index') - 1);
+
+        if (!self.rtl) {
+          section.css({left : -(100 * topbar.data('index')) + '%'});
+          section.find('>.name').css({left : 100 * topbar.data('index') + '%'});
+        } else {
+          section.css({right : -(100 * topbar.data('index')) + '%'});
+          section.find('>.name').css({right : 100 * topbar.data('index') + '%'});
+        }
+
+        if (topbar.data('index') === 0) {
+          topbar.css('height', '');
+        } else {
+          topbar.css('height', $previousLevelUl.outerHeight(true) + topbar.data('height'));
+        }
+
+        setTimeout(function () {
+          $movedLi.removeClass('moved');
+        }, 300);
+      });
+
+      // Show dropdown menus when their items are focused
+      S(this.scope).find('.dropdown a')
+        .focus(function () {
+          $(this).parents('.has-dropdown').addClass('hover');
+        })
+        .blur(function () {
+          $(this).parents('.has-dropdown').removeClass('hover');
+        });
+    },
+
+    resize : function () {
+      var self = this;
+      self.S('[' + this.attr_name() + ']').each(function () {
+        var topbar = self.S(this),
+            settings = topbar.data(self.attr_name(true) + '-init');
+
+        var stickyContainer = topbar.parent('.' + self.settings.sticky_class);
+        var stickyOffset;
+
+        if (!self.breakpoint()) {
+          var doToggle = topbar.hasClass('expanded');
+          topbar
+            .css('height', '')
+            .removeClass('expanded')
+            .find('li')
+            .removeClass('hover');
+
+            if (doToggle) {
+              self.toggle(topbar);
+            }
+        }
+
+        if (self.is_sticky(topbar, stickyContainer, settings)) {
+          if (stickyContainer.hasClass('fixed')) {
+            // Remove the fixed to allow for correct calculation of the offset.
+            stickyContainer.removeClass('fixed');
+
+            stickyOffset = stickyContainer.offset().top;
+            if (self.S(document.body).hasClass('f-topbar-fixed')) {
+              stickyOffset -= topbar.data('height');
+            }
+
+            topbar.data('stickyoffset', stickyOffset);
+            stickyContainer.addClass('fixed');
+          } else {
+            stickyOffset = stickyContainer.offset().top;
+            topbar.data('stickyoffset', stickyOffset);
+          }
+        }
+
+      });
+    },
+
+    breakpoint : function () {
+      return !matchMedia(Foundation.media_queries['topbar']).matches;
+    },
+
+    small : function () {
+      return matchMedia(Foundation.media_queries['small']).matches;
+    },
+
+    medium : function () {
+      return matchMedia(Foundation.media_queries['medium']).matches;
+    },
+
+    large : function () {
+      return matchMedia(Foundation.media_queries['large']).matches;
+    },
+
+    assemble : function (topbar) {
+      var self = this,
+          settings = topbar.data(this.attr_name(true) + '-init'),
+          section = self.S('section, .top-bar-section', topbar);
+
+      // Pull element out of the DOM for manipulation
+      section.detach();
+
+      self.S('.has-dropdown>a', section).each(function () {
+        var $link = self.S(this),
+            $dropdown = $link.siblings('.dropdown'),
+            url = $link.attr('href'),
+            $titleLi;
+
+        if (!$dropdown.find('.title.back').length) {
+
+          if (settings.mobile_show_parent_link == true && url) {
+            $titleLi = $('<li class="title back js-generated"><h5><a href="javascript:void(0)"></a></h5></li><li class="parent-link hide-for-medium-up"><a class="parent-link js-generated" href="' + url + '">' + $link.html() +'</a></li>');
+          } else {
+            $titleLi = $('<li class="title back js-generated"><h5><a href="javascript:void(0)"></a></h5>');
+          }
+
+          // Copy link to subnav
+          if (settings.custom_back_text == true) {
+            $('h5>a', $titleLi).html(settings.back_text);
+          } else {
+            $('h5>a', $titleLi).html('&laquo; ' + $link.html());
+          }
+          $dropdown.prepend($titleLi);
+        }
+      });
+
+      // Put element back in the DOM
+      section.appendTo(topbar);
+
+      // check for sticky
+      this.sticky();
+
+      this.assembled(topbar);
+    },
+
+    assembled : function (topbar) {
+      topbar.data(this.attr_name(true), $.extend({}, topbar.data(this.attr_name(true)), {assembled : true}));
+    },
+
+    height : function (ul) {
+      var total = 0,
+          self = this;
+
+      $('> li', ul).each(function () {
+        total += self.S(this).outerHeight(true);
+      });
+
+      return total;
+    },
+
+    sticky : function () {
+      var self = this;
+
+      this.S(window).on('scroll', function () {
+        self.update_sticky_positioning();
+      });
+    },
+
+    update_sticky_positioning : function () {
+      var klass = '.' + this.settings.sticky_class,
+          $window = this.S(window),
+          self = this;
+
+      if (self.settings.sticky_topbar && self.is_sticky(this.settings.sticky_topbar,this.settings.sticky_topbar.parent(), this.settings)) {
+        var distance = this.settings.sticky_topbar.data('stickyoffset') + this.settings.start_offset;
+        if (!self.S(klass).hasClass('expanded')) {
+          if ($window.scrollTop() > (distance)) {
+            if (!self.S(klass).hasClass('fixed')) {
+              self.S(klass).addClass('fixed');
+              self.S('body').addClass('f-topbar-fixed');
+            }
+          } else if ($window.scrollTop() <= distance) {
+            if (self.S(klass).hasClass('fixed')) {
+              self.S(klass).removeClass('fixed');
+              self.S('body').removeClass('f-topbar-fixed');
+            }
+          }
+        }
+      }
+    },
+
+    off : function () {
+      this.S(this.scope).off('.fndtn.topbar');
+      this.S(window).off('.fndtn.topbar');
+    },
+
+    reflow : function () {}
+  };
+}(jQuery, window, window.document));
diff --git a/js/foundation/js/vendor/fastclick.js b/js/foundation/js/vendor/fastclick.js
new file mode 100644 (file)
index 0000000..add0130
--- /dev/null
@@ -0,0 +1,8 @@
+!function(){"use strict";/**
+        * @preserve FastClick: polyfill to remove click delays on browsers with touch UIs.
+        *
+        * @codingstandard ftlabs-jsv2
+        * @copyright The Financial Times Limited [All Rights Reserved]
+        * @license MIT License (see LICENSE.txt)
+        */
+function a(b,d){function e(a,b){return function(){return a.apply(b,arguments)}}var f;if(d=d||{},this.trackingClick=!1,this.trackingClickStart=0,this.targetElement=null,this.touchStartX=0,this.touchStartY=0,this.lastTouchIdentifier=0,this.touchBoundary=d.touchBoundary||10,this.layer=b,this.tapDelay=d.tapDelay||200,this.tapTimeout=d.tapTimeout||700,!a.notNeeded(b)){for(var g=["onMouse","onClick","onTouchStart","onTouchMove","onTouchEnd","onTouchCancel"],h=this,i=0,j=g.length;j>i;i++)h[g[i]]=e(h[g[i]],h);c&&(b.addEventListener("mouseover",this.onMouse,!0),b.addEventListener("mousedown",this.onMouse,!0),b.addEventListener("mouseup",this.onMouse,!0)),b.addEventListener("click",this.onClick,!0),b.addEventListener("touchstart",this.onTouchStart,!1),b.addEventListener("touchmove",this.onTouchMove,!1),b.addEventListener("touchend",this.onTouchEnd,!1),b.addEventListener("touchcancel",this.onTouchCancel,!1),Event.prototype.stopImmediatePropagation||(b.removeEventListener=function(a,c,d){var e=Node.prototype.removeEventListener;"click"===a?e.call(b,a,c.hijacked||c,d):e.call(b,a,c,d)},b.addEventListener=function(a,c,d){var e=Node.prototype.addEventListener;"click"===a?e.call(b,a,c.hijacked||(c.hijacked=function(a){a.propagationStopped||c(a)}),d):e.call(b,a,c,d)}),"function"==typeof b.onclick&&(f=b.onclick,b.addEventListener("click",function(a){f(a)},!1),b.onclick=null)}}var b=navigator.userAgent.indexOf("Windows Phone")>=0,c=navigator.userAgent.indexOf("Android")>0&&!b,d=/iP(ad|hone|od)/.test(navigator.userAgent)&&!b,e=d&&/OS 4_\d(_\d)?/.test(navigator.userAgent),f=d&&/OS [6-7]_\d/.test(navigator.userAgent),g=navigator.userAgent.indexOf("BB10")>0;a.prototype.needsClick=function(a){switch(a.nodeName.toLowerCase()){case"button":case"select":case"textarea":if(a.disabled)return!0;break;case"input":if(d&&"file"===a.type||a.disabled)return!0;break;case"label":case"iframe":case"video":return!0}return/\bneedsclick\b/.test(a.className)},a.prototype.needsFocus=function(a){switch(a.nodeName.toLowerCase()){case"textarea":return!0;case"select":return!c;case"input":switch(a.type){case"button":case"checkbox":case"file":case"image":case"radio":case"submit":return!1}return!a.disabled&&!a.readOnly;default:return/\bneedsfocus\b/.test(a.className)}},a.prototype.sendClick=function(a,b){var c,d;document.activeElement&&document.activeElement!==a&&document.activeElement.blur(),d=b.changedTouches[0],c=document.createEvent("MouseEvents"),c.initMouseEvent(this.determineEventType(a),!0,!0,window,1,d.screenX,d.screenY,d.clientX,d.clientY,!1,!1,!1,!1,0,null),c.forwardedTouchEvent=!0,a.dispatchEvent(c)},a.prototype.determineEventType=function(a){return c&&"select"===a.tagName.toLowerCase()?"mousedown":"click"},a.prototype.focus=function(a){var b;d&&a.setSelectionRange&&0!==a.type.indexOf("date")&&"time"!==a.type&&"month"!==a.type?(b=a.value.length,a.setSelectionRange(b,b)):a.focus()},a.prototype.updateScrollParent=function(a){var b,c;if(b=a.fastClickScrollParent,!b||!b.contains(a)){c=a;do{if(c.scrollHeight>c.offsetHeight){b=c,a.fastClickScrollParent=c;break}c=c.parentElement}while(c)}b&&(b.fastClickLastScrollTop=b.scrollTop)},a.prototype.getTargetElementFromEventTarget=function(a){return a.nodeType===Node.TEXT_NODE?a.parentNode:a},a.prototype.onTouchStart=function(a){var b,c,f;if(a.targetTouches.length>1)return!0;if(b=this.getTargetElementFromEventTarget(a.target),c=a.targetTouches[0],d){if(f=window.getSelection(),f.rangeCount&&!f.isCollapsed)return!0;if(!e){if(c.identifier&&c.identifier===this.lastTouchIdentifier)return a.preventDefault(),!1;this.lastTouchIdentifier=c.identifier,this.updateScrollParent(b)}}return this.trackingClick=!0,this.trackingClickStart=a.timeStamp,this.targetElement=b,this.touchStartX=c.pageX,this.touchStartY=c.pageY,a.timeStamp-this.lastClickTime<this.tapDelay&&a.preventDefault(),!0},a.prototype.touchHasMoved=function(a){var b=a.changedTouches[0],c=this.touchBoundary;return Math.abs(b.pageX-this.touchStartX)>c||Math.abs(b.pageY-this.touchStartY)>c?!0:!1},a.prototype.onTouchMove=function(a){return this.trackingClick?((this.targetElement!==this.getTargetElementFromEventTarget(a.target)||this.touchHasMoved(a))&&(this.trackingClick=!1,this.targetElement=null),!0):!0},a.prototype.findControl=function(a){return void 0!==a.control?a.control:a.htmlFor?document.getElementById(a.htmlFor):a.querySelector("button, input:not([type=hidden]), keygen, meter, output, progress, select, textarea")},a.prototype.onTouchEnd=function(a){var b,g,h,i,j,k=this.targetElement;if(!this.trackingClick)return!0;if(a.timeStamp-this.lastClickTime<this.tapDelay)return this.cancelNextClick=!0,!0;if(a.timeStamp-this.trackingClickStart>this.tapTimeout)return!0;if(this.cancelNextClick=!1,this.lastClickTime=a.timeStamp,g=this.trackingClickStart,this.trackingClick=!1,this.trackingClickStart=0,f&&(j=a.changedTouches[0],k=document.elementFromPoint(j.pageX-window.pageXOffset,j.pageY-window.pageYOffset)||k,k.fastClickScrollParent=this.targetElement.fastClickScrollParent),h=k.tagName.toLowerCase(),"label"===h){if(b=this.findControl(k)){if(this.focus(k),c)return!1;k=b}}else if(this.needsFocus(k))return a.timeStamp-g>100||d&&window.top!==window&&"input"===h?(this.targetElement=null,!1):(this.focus(k),this.sendClick(k,a),d&&"select"===h||(this.targetElement=null,a.preventDefault()),!1);return d&&!e&&(i=k.fastClickScrollParent,i&&i.fastClickLastScrollTop!==i.scrollTop)?!0:(this.needsClick(k)||(a.preventDefault(),this.sendClick(k,a)),!1)},a.prototype.onTouchCancel=function(){this.trackingClick=!1,this.targetElement=null},a.prototype.onMouse=function(a){return this.targetElement?a.forwardedTouchEvent?!0:a.cancelable&&(!this.needsClick(this.targetElement)||this.cancelNextClick)?(a.stopImmediatePropagation?a.stopImmediatePropagation():a.propagationStopped=!0,a.stopPropagation(),a.preventDefault(),!1):!0:!0},a.prototype.onClick=function(a){var b;return this.trackingClick?(this.targetElement=null,this.trackingClick=!1,!0):"submit"===a.target.type&&0===a.detail?!0:(b=this.onMouse(a),b||(this.targetElement=null),b)},a.prototype.destroy=function(){var a=this.layer;c&&(a.removeEventListener("mouseover",this.onMouse,!0),a.removeEventListener("mousedown",this.onMouse,!0),a.removeEventListener("mouseup",this.onMouse,!0)),a.removeEventListener("click",this.onClick,!0),a.removeEventListener("touchstart",this.onTouchStart,!1),a.removeEventListener("touchmove",this.onTouchMove,!1),a.removeEventListener("touchend",this.onTouchEnd,!1),a.removeEventListener("touchcancel",this.onTouchCancel,!1)},a.notNeeded=function(a){var b,d,e,f;if("undefined"==typeof window.ontouchstart)return!0;if(d=+(/Chrome\/([0-9]+)/.exec(navigator.userAgent)||[,0])[1]){if(!c)return!0;if(b=document.querySelector("meta[name=viewport]")){if(-1!==b.content.indexOf("user-scalable=no"))return!0;if(d>31&&document.documentElement.scrollWidth<=window.outerWidth)return!0}}if(g&&(e=navigator.userAgent.match(/Version\/([0-9]*)\.([0-9]*)/),e[1]>=10&&e[2]>=3&&(b=document.querySelector("meta[name=viewport]")))){if(-1!==b.content.indexOf("user-scalable=no"))return!0;if(document.documentElement.scrollWidth<=window.outerWidth)return!0}return"none"===a.style.msTouchAction||"manipulation"===a.style.touchAction?!0:(f=+(/Firefox\/([0-9]+)/.exec(navigator.userAgent)||[,0])[1],f>=27&&(b=document.querySelector("meta[name=viewport]"),b&&(-1!==b.content.indexOf("user-scalable=no")||document.documentElement.scrollWidth<=window.outerWidth))?!0:"none"===a.style.touchAction||"manipulation"===a.style.touchAction?!0:!1)},a.attach=function(b,c){return new a(b,c)},"function"==typeof define&&"object"==typeof define.amd&&define.amd?define(function(){return a}):"undefined"!=typeof module&&module.exports?(module.exports=a.attach,module.exports.FastClick=a):window.FastClick=a}();
\ No newline at end of file
diff --git a/js/foundation/js/vendor/jquery.cookie.js b/js/foundation/js/vendor/jquery.cookie.js
new file mode 100644 (file)
index 0000000..5be813a
--- /dev/null
@@ -0,0 +1,8 @@
+/*!
+ * jQuery Cookie Plugin v1.4.1
+ * https://github.com/carhartl/jquery-cookie
+ *
+ * Copyright 2013 Klaus Hartl
+ * Released under the MIT license
+ */
+!function(a){"function"==typeof define&&define.amd?define(["jquery"],a):a("object"==typeof exports?require("jquery"):jQuery)}(function(a){function b(a){return h.raw?a:encodeURIComponent(a)}function c(a){return h.raw?a:decodeURIComponent(a)}function d(a){return b(h.json?JSON.stringify(a):String(a))}function e(a){0===a.indexOf('"')&&(a=a.slice(1,-1).replace(/\\"/g,'"').replace(/\\\\/g,"\\"));try{return a=decodeURIComponent(a.replace(g," ")),h.json?JSON.parse(a):a}catch(b){}}function f(b,c){var d=h.raw?b:e(b);return a.isFunction(c)?c(d):d}var g=/\+/g,h=a.cookie=function(e,g,i){if(void 0!==g&&!a.isFunction(g)){if(i=a.extend({},h.defaults,i),"number"==typeof i.expires){var j=i.expires,k=i.expires=new Date;k.setTime(+k+864e5*j)}return document.cookie=[b(e),"=",d(g),i.expires?"; expires="+i.expires.toUTCString():"",i.path?"; path="+i.path:"",i.domain?"; domain="+i.domain:"",i.secure?"; secure":""].join("")}for(var l=e?void 0:{},m=document.cookie?document.cookie.split("; "):[],n=0,o=m.length;o>n;n++){var p=m[n].split("="),q=c(p.shift()),r=p.join("=");if(e&&e===q){l=f(r,g);break}e||void 0===(r=f(r))||(l[q]=r)}return l};h.defaults={},a.removeCookie=function(b,c){return void 0===a.cookie(b)?!1:(a.cookie(b,"",a.extend({},c,{expires:-1})),!a.cookie(b))}});
\ No newline at end of file
diff --git a/js/foundation/js/vendor/jquery.js b/js/foundation/js/vendor/jquery.js
new file mode 100644 (file)
index 0000000..34b90c8
--- /dev/null
@@ -0,0 +1,26 @@
+/*!
+ * jQuery JavaScript Library v2.1.4
+ * http://jquery.com/
+ *
+ * Includes Sizzle.js
+ * http://sizzlejs.com/
+ *
+ * Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors
+ * Released under the MIT license
+ * http://jquery.org/license
+ *
+ * Date: 2015-04-28T16:01Z
+ */
+!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){function c(a){var b="length"in a&&a.length,c=_.type(a);return"function"===c||_.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}function d(a,b,c){if(_.isFunction(b))return _.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return _.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(ha.test(b))return _.filter(b,a,c);b=_.filter(b,a)}return _.grep(a,function(a){return U.call(b,a)>=0!==c})}function e(a,b){for(;(a=a[b])&&1!==a.nodeType;);return a}function f(a){var b=oa[a]={};return _.each(a.match(na)||[],function(a,c){b[c]=!0}),b}function g(){Z.removeEventListener("DOMContentLoaded",g,!1),a.removeEventListener("load",g,!1),_.ready()}function h(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=_.expando+h.uid++}function i(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(ua,"-$1").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:ta.test(c)?_.parseJSON(c):c}catch(e){}sa.set(a,b,c)}else c=void 0;return c}function j(){return!0}function k(){return!1}function l(){try{return Z.activeElement}catch(a){}}function m(a,b){return _.nodeName(a,"table")&&_.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function n(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function o(a){var b=Ka.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function p(a,b){for(var c=0,d=a.length;d>c;c++)ra.set(a[c],"globalEval",!b||ra.get(b[c],"globalEval"))}function q(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(ra.hasData(a)&&(f=ra.access(a),g=ra.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)_.event.add(b,e,j[e][c])}sa.hasData(a)&&(h=sa.access(a),i=_.extend({},h),sa.set(b,i))}}function r(a,b){var c=a.getElementsByTagName?a.getElementsByTagName(b||"*"):a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&_.nodeName(a,b)?_.merge([a],c):c}function s(a,b){var c=b.nodeName.toLowerCase();"input"===c&&ya.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}function t(b,c){var d,e=_(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:_.css(e[0],"display");return e.detach(),f}function u(a){var b=Z,c=Oa[a];return c||(c=t(a,b),"none"!==c&&c||(Na=(Na||_("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=Na[0].contentDocument,b.write(),b.close(),c=t(a,b),Na.detach()),Oa[a]=c),c}function v(a,b,c){var d,e,f,g,h=a.style;return c=c||Ra(a),c&&(g=c.getPropertyValue(b)||c[b]),c&&(""!==g||_.contains(a.ownerDocument,a)||(g=_.style(a,b)),Qa.test(g)&&Pa.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0!==g?g+"":g}function w(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}function x(a,b){if(b in a)return b;for(var c=b[0].toUpperCase()+b.slice(1),d=b,e=Xa.length;e--;)if(b=Xa[e]+c,b in a)return b;return d}function y(a,b,c){var d=Ta.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function z(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=_.css(a,c+wa[f],!0,e)),d?("content"===c&&(g-=_.css(a,"padding"+wa[f],!0,e)),"margin"!==c&&(g-=_.css(a,"border"+wa[f]+"Width",!0,e))):(g+=_.css(a,"padding"+wa[f],!0,e),"padding"!==c&&(g+=_.css(a,"border"+wa[f]+"Width",!0,e)));return g}function A(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=Ra(a),g="border-box"===_.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=v(a,b,f),(0>e||null==e)&&(e=a.style[b]),Qa.test(e))return e;d=g&&(Y.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+z(a,b,c||(g?"border":"content"),d,f)+"px"}function B(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=ra.get(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&xa(d)&&(f[g]=ra.access(d,"olddisplay",u(d.nodeName)))):(e=xa(d),"none"===c&&e||ra.set(d,"olddisplay",e?c:_.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}function C(a,b,c,d,e){return new C.prototype.init(a,b,c,d,e)}function D(){return setTimeout(function(){Ya=void 0}),Ya=_.now()}function E(a,b){var c,d=0,e={height:a};for(b=b?1:0;4>d;d+=2-b)c=wa[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function F(a,b,c){for(var d,e=(cb[b]||[]).concat(cb["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function G(a,b,c){var d,e,f,g,h,i,j,k,l=this,m={},n=a.style,o=a.nodeType&&xa(a),p=ra.get(a,"fxshow");c.queue||(h=_._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,l.always(function(){l.always(function(){h.unqueued--,_.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[n.overflow,n.overflowX,n.overflowY],j=_.css(a,"display"),k="none"===j?ra.get(a,"olddisplay")||u(a.nodeName):j,"inline"===k&&"none"===_.css(a,"float")&&(n.display="inline-block")),c.overflow&&(n.overflow="hidden",l.always(function(){n.overflow=c.overflow[0],n.overflowX=c.overflow[1],n.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],$a.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(o?"hide":"show")){if("show"!==e||!p||void 0===p[d])continue;o=!0}m[d]=p&&p[d]||_.style(a,d)}else j=void 0;if(_.isEmptyObject(m))"inline"===("none"===j?u(a.nodeName):j)&&(n.display=j);else{p?"hidden"in p&&(o=p.hidden):p=ra.access(a,"fxshow",{}),f&&(p.hidden=!o),o?_(a).show():l.done(function(){_(a).hide()}),l.done(function(){var b;ra.remove(a,"fxshow");for(b in m)_.style(a,b,m[b])});for(d in m)g=F(o?p[d]:0,d,l),d in p||(p[d]=g.start,o&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function H(a,b){var c,d,e,f,g;for(c in a)if(d=_.camelCase(c),e=b[d],f=a[c],_.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=_.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function I(a,b,c){var d,e,f=0,g=bb.length,h=_.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=Ya||D(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:_.extend({},b),opts:_.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:Ya||D(),duration:c.duration,tweens:[],createTween:function(b,c){var d=_.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(H(k,j.opts.specialEasing);g>f;f++)if(d=bb[f].call(j,a,k,j.opts))return d;return _.map(k,F,j),_.isFunction(j.opts.start)&&j.opts.start.call(a,j),_.fx.timer(_.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}function J(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(na)||[];if(_.isFunction(c))for(;d=f[e++];)"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function K(a,b,c,d){function e(h){var i;return f[h]=!0,_.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||g||f[j]?g?!(i=j):void 0:(b.dataTypes.unshift(j),e(j),!1)}),i}var f={},g=a===tb;return e(b.dataTypes[0])||!f["*"]&&e("*")}function L(a,b){var c,d,e=_.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&_.extend(!0,a,d),a}function M(a,b,c){for(var d,e,f,g,h=a.contents,i=a.dataTypes;"*"===i[0];)i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function N(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];for(f=k.shift();f;)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}function O(a,b,c,d){var e;if(_.isArray(b))_.each(b,function(b,e){c||yb.test(a)?d(a,e):O(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==_.type(b))d(a,b);else for(e in b)O(a+"["+e+"]",b[e],c,d)}function P(a){return _.isWindow(a)?a:9===a.nodeType&&a.defaultView}var Q=[],R=Q.slice,S=Q.concat,T=Q.push,U=Q.indexOf,V={},W=V.toString,X=V.hasOwnProperty,Y={},Z=a.document,$="2.1.4",_=function(a,b){return new _.fn.init(a,b)},aa=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,ba=/^-ms-/,ca=/-([\da-z])/gi,da=function(a,b){return b.toUpperCase()};_.fn=_.prototype={jquery:$,constructor:_,selector:"",length:0,toArray:function(){return R.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:R.call(this)},pushStack:function(a){var b=_.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return _.each(this,a,b)},map:function(a){return this.pushStack(_.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(R.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:T,sort:Q.sort,splice:Q.splice},_.extend=_.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||_.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(_.isPlainObject(d)||(e=_.isArray(d)))?(e?(e=!1,f=c&&_.isArray(c)?c:[]):f=c&&_.isPlainObject(c)?c:{},g[b]=_.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},_.extend({expando:"jQuery"+($+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===_.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){return!_.isArray(a)&&a-parseFloat(a)+1>=0},isPlainObject:function(a){return"object"!==_.type(a)||a.nodeType||_.isWindow(a)?!1:a.constructor&&!X.call(a.constructor.prototype,"isPrototypeOf")?!1:!0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?V[W.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=_.trim(a),a&&(1===a.indexOf("use strict")?(b=Z.createElement("script"),b.text=a,Z.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(ba,"ms-").replace(ca,da)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,d){var e,f=0,g=a.length,h=c(a);if(d){if(h)for(;g>f&&(e=b.apply(a[f],d),e!==!1);f++);else for(f in a)if(e=b.apply(a[f],d),e===!1)break}else if(h)for(;g>f&&(e=b.call(a[f],f,a[f]),e!==!1);f++);else for(f in a)if(e=b.call(a[f],f,a[f]),e===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(aa,"")},makeArray:function(a,b){var d=b||[];return null!=a&&(c(Object(a))?_.merge(d,"string"==typeof a?[a]:a):T.call(d,a)),d},inArray:function(a,b,c){return null==b?-1:U.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,d){var e,f=0,g=a.length,h=c(a),i=[];if(h)for(;g>f;f++)e=b(a[f],f,d),null!=e&&i.push(e);else for(f in a)e=b(a[f],f,d),null!=e&&i.push(e);return S.apply([],i)},guid:1,proxy:function(a,b){var c,d,e;return"string"==typeof b&&(c=a[b],b=a,a=c),_.isFunction(a)?(d=R.call(arguments,2),e=function(){return a.apply(b||this,d.concat(R.call(arguments)))},e.guid=a.guid=a.guid||_.guid++,e):void 0},now:Date.now,support:Y}),_.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){V["[object "+b+"]"]=b.toLowerCase()});var ea=/*!
+ * Sizzle CSS Selector Engine v2.2.0-pre
+ * http://sizzlejs.com/
+ *
+ * Copyright 2008, 2014 jQuery Foundation, Inc. and other contributors
+ * Released under the MIT license
+ * http://jquery.org/license
+ *
+ * Date: 2014-12-16
+ */
+function(a){function b(a,b,c,d){var e,f,g,h,i,j,l,n,o,p;if((b?b.ownerDocument||b:O)!==G&&F(b),b=b||G,c=c||[],h=b.nodeType,"string"!=typeof a||!a||1!==h&&9!==h&&11!==h)return c;if(!d&&I){if(11!==h&&(e=sa.exec(a)))if(g=e[1]){if(9===h){if(f=b.getElementById(g),!f||!f.parentNode)return c;if(f.id===g)return c.push(f),c}else if(b.ownerDocument&&(f=b.ownerDocument.getElementById(g))&&M(b,f)&&f.id===g)return c.push(f),c}else{if(e[2])return $.apply(c,b.getElementsByTagName(a)),c;if((g=e[3])&&v.getElementsByClassName)return $.apply(c,b.getElementsByClassName(g)),c}if(v.qsa&&(!J||!J.test(a))){if(n=l=N,o=b,p=1!==h&&a,1===h&&"object"!==b.nodeName.toLowerCase()){for(j=z(a),(l=b.getAttribute("id"))?n=l.replace(ua,"\\$&"):b.setAttribute("id",n),n="[id='"+n+"'] ",i=j.length;i--;)j[i]=n+m(j[i]);o=ta.test(a)&&k(b.parentNode)||b,p=j.join(",")}if(p)try{return $.apply(c,o.querySelectorAll(p)),c}catch(q){}finally{l||b.removeAttribute("id")}}}return B(a.replace(ia,"$1"),b,c,d)}function c(){function a(c,d){return b.push(c+" ")>w.cacheLength&&delete a[b.shift()],a[c+" "]=d}var b=[];return a}function d(a){return a[N]=!0,a}function e(a){var b=G.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function f(a,b){for(var c=a.split("|"),d=a.length;d--;)w.attrHandle[c[d]]=b}function g(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||V)-(~a.sourceIndex||V);if(d)return d;if(c)for(;c=c.nextSibling;)if(c===b)return-1;return a?1:-1}function h(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function i(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function j(a){return d(function(b){return b=+b,d(function(c,d){for(var e,f=a([],c.length,b),g=f.length;g--;)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function k(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}function l(){}function m(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function n(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=Q++;return b.first?function(b,c,f){for(;b=b[d];)if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[P,f];if(g){for(;b=b[d];)if((1===b.nodeType||e)&&a(b,c,g))return!0}else for(;b=b[d];)if(1===b.nodeType||e){if(i=b[N]||(b[N]={}),(h=i[d])&&h[0]===P&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function o(a){return a.length>1?function(b,c,d){for(var e=a.length;e--;)if(!a[e](b,c,d))return!1;return!0}:a[0]}function p(a,c,d){for(var e=0,f=c.length;f>e;e++)b(a,c[e],d);return d}function q(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function r(a,b,c,e,f,g){return e&&!e[N]&&(e=r(e)),f&&!f[N]&&(f=r(f,g)),d(function(d,g,h,i){var j,k,l,m=[],n=[],o=g.length,r=d||p(b||"*",h.nodeType?[h]:h,[]),s=!a||!d&&b?r:q(r,m,a,h,i),t=c?f||(d?a:o||e)?[]:g:s;if(c&&c(s,t,h,i),e)for(j=q(t,n),e(j,[],h,i),k=j.length;k--;)(l=j[k])&&(t[n[k]]=!(s[n[k]]=l));if(d){if(f||a){if(f){for(j=[],k=t.length;k--;)(l=t[k])&&j.push(s[k]=l);f(null,t=[],j,i)}for(k=t.length;k--;)(l=t[k])&&(j=f?aa(d,l):m[k])>-1&&(d[j]=!(g[j]=l))}}else t=q(t===g?t.splice(o,t.length):t),f?f(null,g,t,i):$.apply(g,t)})}function s(a){for(var b,c,d,e=a.length,f=w.relative[a[0].type],g=f||w.relative[" "],h=f?1:0,i=n(function(a){return a===b},g,!0),j=n(function(a){return aa(b,a)>-1},g,!0),k=[function(a,c,d){var e=!f&&(d||c!==C)||((b=c).nodeType?i(a,c,d):j(a,c,d));return b=null,e}];e>h;h++)if(c=w.relative[a[h].type])k=[n(o(k),c)];else{if(c=w.filter[a[h].type].apply(null,a[h].matches),c[N]){for(d=++h;e>d&&!w.relative[a[d].type];d++);return r(h>1&&o(k),h>1&&m(a.slice(0,h-1).concat({value:" "===a[h-2].type?"*":""})).replace(ia,"$1"),c,d>h&&s(a.slice(h,d)),e>d&&s(a=a.slice(d)),e>d&&m(a))}k.push(c)}return o(k)}function t(a,c){var e=c.length>0,f=a.length>0,g=function(d,g,h,i,j){var k,l,m,n=0,o="0",p=d&&[],r=[],s=C,t=d||f&&w.find.TAG("*",j),u=P+=null==s?1:Math.random()||.1,v=t.length;for(j&&(C=g!==G&&g);o!==v&&null!=(k=t[o]);o++){if(f&&k){for(l=0;m=a[l++];)if(m(k,g,h)){i.push(k);break}j&&(P=u)}e&&((k=!m&&k)&&n--,d&&p.push(k))}if(n+=o,e&&o!==n){for(l=0;m=c[l++];)m(p,r,g,h);if(d){if(n>0)for(;o--;)p[o]||r[o]||(r[o]=Y.call(i));r=q(r)}$.apply(i,r),j&&!d&&r.length>0&&n+c.length>1&&b.uniqueSort(i)}return j&&(P=u,C=s),p};return e?d(g):g}var u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N="sizzle"+1*new Date,O=a.document,P=0,Q=0,R=c(),S=c(),T=c(),U=function(a,b){return a===b&&(E=!0),0},V=1<<31,W={}.hasOwnProperty,X=[],Y=X.pop,Z=X.push,$=X.push,_=X.slice,aa=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},ba="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",ca="[\\x20\\t\\r\\n\\f]",da="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",ea=da.replace("w","w#"),fa="\\["+ca+"*("+da+")(?:"+ca+"*([*^$|!~]?=)"+ca+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+ea+"))|)"+ca+"*\\]",ga=":("+da+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+fa+")*)|.*)\\)|)",ha=new RegExp(ca+"+","g"),ia=new RegExp("^"+ca+"+|((?:^|[^\\\\])(?:\\\\.)*)"+ca+"+$","g"),ja=new RegExp("^"+ca+"*,"+ca+"*"),ka=new RegExp("^"+ca+"*([>+~]|"+ca+")"+ca+"*"),la=new RegExp("="+ca+"*([^\\]'\"]*?)"+ca+"*\\]","g"),ma=new RegExp(ga),na=new RegExp("^"+ea+"$"),oa={ID:new RegExp("^#("+da+")"),CLASS:new RegExp("^\\.("+da+")"),TAG:new RegExp("^("+da.replace("w","w*")+")"),ATTR:new RegExp("^"+fa),PSEUDO:new RegExp("^"+ga),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ca+"*(even|odd|(([+-]|)(\\d*)n|)"+ca+"*(?:([+-]|)"+ca+"*(\\d+)|))"+ca+"*\\)|)","i"),bool:new RegExp("^(?:"+ba+")$","i"),needsContext:new RegExp("^"+ca+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ca+"*((?:-\\d)?\\d*)"+ca+"*\\)|)(?=[^-]|$)","i")},pa=/^(?:input|select|textarea|button)$/i,qa=/^h\d$/i,ra=/^[^{]+\{\s*\[native \w/,sa=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ta=/[+~]/,ua=/'|\\/g,va=new RegExp("\\\\([\\da-f]{1,6}"+ca+"?|("+ca+")|.)","ig"),wa=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},xa=function(){F()};try{$.apply(X=_.call(O.childNodes),O.childNodes),X[O.childNodes.length].nodeType}catch(ya){$={apply:X.length?function(a,b){Z.apply(a,_.call(b))}:function(a,b){for(var c=a.length,d=0;a[c++]=b[d++];);a.length=c-1}}}v=b.support={},y=b.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},F=b.setDocument=function(a){var b,c,d=a?a.ownerDocument||a:O;return d!==G&&9===d.nodeType&&d.documentElement?(G=d,H=d.documentElement,c=d.defaultView,c&&c!==c.top&&(c.addEventListener?c.addEventListener("unload",xa,!1):c.attachEvent&&c.attachEvent("onunload",xa)),I=!y(d),v.attributes=e(function(a){return a.className="i",!a.getAttribute("className")}),v.getElementsByTagName=e(function(a){return a.appendChild(d.createComment("")),!a.getElementsByTagName("*").length}),v.getElementsByClassName=ra.test(d.getElementsByClassName),v.getById=e(function(a){return H.appendChild(a).id=N,!d.getElementsByName||!d.getElementsByName(N).length}),v.getById?(w.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&I){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},w.filter.ID=function(a){var b=a.replace(va,wa);return function(a){return a.getAttribute("id")===b}}):(delete w.find.ID,w.filter.ID=function(a){var b=a.replace(va,wa);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),w.find.TAG=v.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):v.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){for(;c=f[e++];)1===c.nodeType&&d.push(c);return d}return f},w.find.CLASS=v.getElementsByClassName&&function(a,b){return I?b.getElementsByClassName(a):void 0},K=[],J=[],(v.qsa=ra.test(d.querySelectorAll))&&(e(function(a){H.appendChild(a).innerHTML="<a id='"+N+"'></a><select id='"+N+"-\f]' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&J.push("[*^$]="+ca+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||J.push("\\["+ca+"*(?:value|"+ba+")"),a.querySelectorAll("[id~="+N+"-]").length||J.push("~="),a.querySelectorAll(":checked").length||J.push(":checked"),a.querySelectorAll("a#"+N+"+*").length||J.push(".#.+[+~]")}),e(function(a){var b=d.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&J.push("name"+ca+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||J.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),J.push(",.*:")})),(v.matchesSelector=ra.test(L=H.matches||H.webkitMatchesSelector||H.mozMatchesSelector||H.oMatchesSelector||H.msMatchesSelector))&&e(function(a){v.disconnectedMatch=L.call(a,"div"),L.call(a,"[s!='']:x"),K.push("!=",ga)}),J=J.length&&new RegExp(J.join("|")),K=K.length&&new RegExp(K.join("|")),b=ra.test(H.compareDocumentPosition),M=b||ra.test(H.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)for(;b=b.parentNode;)if(b===a)return!0;return!1},U=b?function(a,b){if(a===b)return E=!0,0;var c=!a.compareDocumentPosition-!b.compareDocumentPosition;return c?c:(c=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&c||!v.sortDetached&&b.compareDocumentPosition(a)===c?a===d||a.ownerDocument===O&&M(O,a)?-1:b===d||b.ownerDocument===O&&M(O,b)?1:D?aa(D,a)-aa(D,b):0:4&c?-1:1)}:function(a,b){if(a===b)return E=!0,0;var c,e=0,f=a.parentNode,h=b.parentNode,i=[a],j=[b];if(!f||!h)return a===d?-1:b===d?1:f?-1:h?1:D?aa(D,a)-aa(D,b):0;if(f===h)return g(a,b);for(c=a;c=c.parentNode;)i.unshift(c);for(c=b;c=c.parentNode;)j.unshift(c);for(;i[e]===j[e];)e++;return e?g(i[e],j[e]):i[e]===O?-1:j[e]===O?1:0},d):G},b.matches=function(a,c){return b(a,null,null,c)},b.matchesSelector=function(a,c){if((a.ownerDocument||a)!==G&&F(a),c=c.replace(la,"='$1']"),v.matchesSelector&&I&&(!K||!K.test(c))&&(!J||!J.test(c)))try{var d=L.call(a,c);if(d||v.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return b(c,G,null,[a]).length>0},b.contains=function(a,b){return(a.ownerDocument||a)!==G&&F(a),M(a,b)},b.attr=function(a,b){(a.ownerDocument||a)!==G&&F(a);var c=w.attrHandle[b.toLowerCase()],d=c&&W.call(w.attrHandle,b.toLowerCase())?c(a,b,!I):void 0;return void 0!==d?d:v.attributes||!I?a.getAttribute(b):(d=a.getAttributeNode(b))&&d.specified?d.value:null},b.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},b.uniqueSort=function(a){var b,c=[],d=0,e=0;if(E=!v.detectDuplicates,D=!v.sortStable&&a.slice(0),a.sort(U),E){for(;b=a[e++];)b===a[e]&&(d=c.push(e));for(;d--;)a.splice(c[d],1)}return D=null,a},x=b.getText=function(a){var b,c="",d=0,e=a.nodeType;if(e){if(1===e||9===e||11===e){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=x(a)}else if(3===e||4===e)return a.nodeValue}else for(;b=a[d++];)c+=x(b);return c},w=b.selectors={cacheLength:50,createPseudo:d,match:oa,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(va,wa),a[3]=(a[3]||a[4]||a[5]||"").replace(va,wa),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||b.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&b.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return oa.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&ma.test(c)&&(b=z(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(va,wa).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=R[a+" "];return b||(b=new RegExp("(^|"+ca+")"+a+"("+ca+"|$)"))&&R(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,c,d){return function(e){var f=b.attr(e,a);return null==f?"!="===c:c?(f+="","="===c?f===d:"!="===c?f!==d:"^="===c?d&&0===f.indexOf(d):"*="===c?d&&f.indexOf(d)>-1:"$="===c?d&&f.slice(-d.length)===d:"~="===c?(" "+f.replace(ha," ")+" ").indexOf(d)>-1:"|="===c?f===d||f.slice(0,d.length+1)===d+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){for(;p;){for(l=b;l=l[p];)if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){for(k=q[N]||(q[N]={}),j=k[a]||[],n=j[0]===P&&j[1],m=j[0]===P&&j[2],l=n&&q.childNodes[n];l=++n&&l&&l[p]||(m=n=0)||o.pop();)if(1===l.nodeType&&++m&&l===b){k[a]=[P,n,m];break}}else if(s&&(j=(b[N]||(b[N]={}))[a])&&j[0]===P)m=j[1];else for(;(l=++n&&l&&l[p]||(m=n=0)||o.pop())&&((h?l.nodeName.toLowerCase()!==r:1!==l.nodeType)||!++m||(s&&((l[N]||(l[N]={}))[a]=[P,m]),l!==b)););return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,c){var e,f=w.pseudos[a]||w.setFilters[a.toLowerCase()]||b.error("unsupported pseudo: "+a);return f[N]?f(c):f.length>1?(e=[a,a,"",c],w.setFilters.hasOwnProperty(a.toLowerCase())?d(function(a,b){for(var d,e=f(a,c),g=e.length;g--;)d=aa(a,e[g]),a[d]=!(b[d]=e[g])}):function(a){return f(a,0,e)}):f}},pseudos:{not:d(function(a){var b=[],c=[],e=A(a.replace(ia,"$1"));return e[N]?d(function(a,b,c,d){for(var f,g=e(a,null,d,[]),h=a.length;h--;)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,d,f){return b[0]=a,e(b,null,f,c),b[0]=null,!c.pop()}}),has:d(function(a){return function(c){return b(a,c).length>0}}),contains:d(function(a){return a=a.replace(va,wa),function(b){return(b.textContent||b.innerText||x(b)).indexOf(a)>-1}}),lang:d(function(a){return na.test(a||"")||b.error("unsupported lang: "+a),a=a.replace(va,wa).toLowerCase(),function(b){var c;do if(c=I?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===H},focus:function(a){return a===G.activeElement&&(!G.hasFocus||G.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!w.pseudos.empty(a)},header:function(a){return qa.test(a.nodeName)},input:function(a){return pa.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:j(function(){return[0]}),last:j(function(a,b){return[b-1]}),eq:j(function(a,b,c){return[0>c?c+b:c]}),even:j(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:j(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:j(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:j(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},w.pseudos.nth=w.pseudos.eq;for(u in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})w.pseudos[u]=h(u);for(u in{submit:!0,reset:!0})w.pseudos[u]=i(u);return l.prototype=w.filters=w.pseudos,w.setFilters=new l,z=b.tokenize=function(a,c){var d,e,f,g,h,i,j,k=S[a+" "];if(k)return c?0:k.slice(0);for(h=a,i=[],j=w.preFilter;h;){(!d||(e=ja.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),d=!1,(e=ka.exec(h))&&(d=e.shift(),f.push({value:d,type:e[0].replace(ia," ")}),h=h.slice(d.length));for(g in w.filter)!(e=oa[g].exec(h))||j[g]&&!(e=j[g](e))||(d=e.shift(),f.push({value:d,type:g,matches:e}),h=h.slice(d.length));if(!d)break}return c?h.length:h?b.error(a):S(a,i).slice(0)},A=b.compile=function(a,b){var c,d=[],e=[],f=T[a+" "];if(!f){for(b||(b=z(a)),c=b.length;c--;)f=s(b[c]),f[N]?d.push(f):e.push(f);f=T(a,t(e,d)),f.selector=a}return f},B=b.select=function(a,b,c,d){var e,f,g,h,i,j="function"==typeof a&&a,l=!d&&z(a=j.selector||a);if(c=c||[],1===l.length){if(f=l[0]=l[0].slice(0),f.length>2&&"ID"===(g=f[0]).type&&v.getById&&9===b.nodeType&&I&&w.relative[f[1].type]){if(b=(w.find.ID(g.matches[0].replace(va,wa),b)||[])[0],!b)return c;j&&(b=b.parentNode),a=a.slice(f.shift().value.length)}for(e=oa.needsContext.test(a)?0:f.length;e--&&(g=f[e],!w.relative[h=g.type]);)if((i=w.find[h])&&(d=i(g.matches[0].replace(va,wa),ta.test(f[0].type)&&k(b.parentNode)||b))){if(f.splice(e,1),a=d.length&&m(f),!a)return $.apply(c,d),c;break}}return(j||A(a,l))(d,b,!I,c,ta.test(a)&&k(b.parentNode)||b),c},v.sortStable=N.split("").sort(U).join("")===N,v.detectDuplicates=!!E,F(),v.sortDetached=e(function(a){return 1&a.compareDocumentPosition(G.createElement("div"))}),e(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||f("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),v.attributes&&e(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||f("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),e(function(a){return null==a.getAttribute("disabled")})||f(ba,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),b}(a);_.find=ea,_.expr=ea.selectors,_.expr[":"]=_.expr.pseudos,_.unique=ea.uniqueSort,_.text=ea.getText,_.isXMLDoc=ea.isXML,_.contains=ea.contains;var fa=_.expr.match.needsContext,ga=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,ha=/^.[^:#\[\.,]*$/;_.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?_.find.matchesSelector(d,a)?[d]:[]:_.find.matches(a,_.grep(b,function(a){return 1===a.nodeType}))},_.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(_(a).filter(function(){for(b=0;c>b;b++)if(_.contains(e[b],this))return!0}));for(b=0;c>b;b++)_.find(a,e[b],d);return d=this.pushStack(c>1?_.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(d(this,a||[],!1))},not:function(a){return this.pushStack(d(this,a||[],!0))},is:function(a){return!!d(this,"string"==typeof a&&fa.test(a)?_(a):a||[],!1).length}});var ia,ja=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,ka=_.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:ja.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||ia).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof _?b[0]:b,_.merge(this,_.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:Z,!0)),ga.test(c[1])&&_.isPlainObject(b))for(c in b)_.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}return d=Z.getElementById(c[2]),d&&d.parentNode&&(this.length=1,this[0]=d),this.context=Z,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):_.isFunction(a)?"undefined"!=typeof ia.ready?ia.ready(a):a(_):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),_.makeArray(a,this))};ka.prototype=_.fn,ia=_(Z);var la=/^(?:parents|prev(?:Until|All))/,ma={children:!0,contents:!0,next:!0,prev:!0};_.extend({dir:function(a,b,c){for(var d=[],e=void 0!==c;(a=a[b])&&9!==a.nodeType;)if(1===a.nodeType){if(e&&_(a).is(c))break;d.push(a)}return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),_.fn.extend({has:function(a){var b=_(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(_.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=fa.test(a)||"string"!=typeof a?_(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&_.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?_.unique(f):f)},index:function(a){return a?"string"==typeof a?U.call(_(a),this[0]):U.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(_.unique(_.merge(this.get(),_(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}}),_.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return _.dir(a,"parentNode")},parentsUntil:function(a,b,c){return _.dir(a,"parentNode",c)},next:function(a){return e(a,"nextSibling")},prev:function(a){return e(a,"previousSibling")},nextAll:function(a){return _.dir(a,"nextSibling")},prevAll:function(a){return _.dir(a,"previousSibling")},nextUntil:function(a,b,c){return _.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return _.dir(a,"previousSibling",c)},siblings:function(a){return _.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return _.sibling(a.firstChild)},contents:function(a){return a.contentDocument||_.merge([],a.childNodes)}},function(a,b){_.fn[a]=function(c,d){var e=_.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=_.filter(d,e)),this.length>1&&(ma[a]||_.unique(e),la.test(a)&&e.reverse()),this.pushStack(e)}});var na=/\S+/g,oa={};_.Callbacks=function(a){a="string"==typeof a?oa[a]||f(a):_.extend({},a);var b,c,d,e,g,h,i=[],j=!a.once&&[],k=function(f){for(b=a.memory&&f,c=!0,h=e||0,e=0,g=i.length,d=!0;i&&g>h;h++)if(i[h].apply(f[0],f[1])===!1&&a.stopOnFalse){b=!1;break}d=!1,i&&(j?j.length&&k(j.shift()):b?i=[]:l.disable())},l={add:function(){if(i){var c=i.length;!function f(b){_.each(b,function(b,c){var d=_.type(c);"function"===d?a.unique&&l.has(c)||i.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),d?g=i.length:b&&(e=c,k(b))}return this},remove:function(){return i&&_.each(arguments,function(a,b){for(var c;(c=_.inArray(b,i,c))>-1;)i.splice(c,1),d&&(g>=c&&g--,h>=c&&h--)}),this},has:function(a){return a?_.inArray(a,i)>-1:!(!i||!i.length)},empty:function(){return i=[],g=0,this},disable:function(){return i=j=b=void 0,this},disabled:function(){return!i},lock:function(){return j=void 0,b||l.disable(),this},locked:function(){return!j},fireWith:function(a,b){return!i||c&&!j||(b=b||[],b=[a,b.slice?b.slice():b],d?j.push(b):k(b)),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!c}};return l},_.extend({Deferred:function(a){var b=[["resolve","done",_.Callbacks("once memory"),"resolved"],["reject","fail",_.Callbacks("once memory"),"rejected"],["notify","progress",_.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return _.Deferred(function(c){_.each(b,function(b,f){var g=_.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&_.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?_.extend(a,d):d}},e={};return d.pipe=d.then,_.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b,c,d,e=0,f=R.call(arguments),g=f.length,h=1!==g||a&&_.isFunction(a.promise)?g:0,i=1===h?a:_.Deferred(),j=function(a,c,d){return function(e){c[a]=this,d[a]=arguments.length>1?R.call(arguments):e,d===b?i.notifyWith(c,d):--h||i.resolveWith(c,d)}};if(g>1)for(b=new Array(g),c=new Array(g),d=new Array(g);g>e;e++)f[e]&&_.isFunction(f[e].promise)?f[e].promise().done(j(e,d,f)).fail(i.reject).progress(j(e,c,b)):--h;return h||i.resolveWith(d,f),i.promise()}});var pa;_.fn.ready=function(a){return _.ready.promise().done(a),this},_.extend({isReady:!1,readyWait:1,holdReady:function(a){a?_.readyWait++:_.ready(!0)},ready:function(a){(a===!0?--_.readyWait:_.isReady)||(_.isReady=!0,a!==!0&&--_.readyWait>0||(pa.resolveWith(Z,[_]),_.fn.triggerHandler&&(_(Z).triggerHandler("ready"),_(Z).off("ready"))))}}),_.ready.promise=function(b){return pa||(pa=_.Deferred(),"complete"===Z.readyState?setTimeout(_.ready):(Z.addEventListener("DOMContentLoaded",g,!1),a.addEventListener("load",g,!1))),pa.promise(b)},_.ready.promise();var qa=_.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===_.type(c)){e=!0;for(h in c)_.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,_.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(_(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f};_.acceptData=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType},h.uid=1,h.accepts=_.acceptData,h.prototype={key:function(a){if(!h.accepts(a))return 0;var b={},c=a[this.expando];if(!c){c=h.uid++;try{b[this.expando]={value:c},Object.defineProperties(a,b)}catch(d){b[this.expando]=c,_.extend(a,b)}}return this.cache[c]||(this.cache[c]={}),c},set:function(a,b,c){var d,e=this.key(a),f=this.cache[e];if("string"==typeof b)f[b]=c;else if(_.isEmptyObject(f))_.extend(this.cache[e],b);else for(d in b)f[d]=b[d];return f},get:function(a,b){var c=this.cache[this.key(a)];return void 0===b?c:c[b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,_.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=this.key(a),g=this.cache[f];if(void 0===b)this.cache[f]={};else{_.isArray(b)?d=b.concat(b.map(_.camelCase)):(e=_.camelCase(b),b in g?d=[b,e]:(d=e,d=d in g?[d]:d.match(na)||[])),c=d.length;for(;c--;)delete g[d[c]]}},hasData:function(a){return!_.isEmptyObject(this.cache[a[this.expando]]||{})},discard:function(a){a[this.expando]&&delete this.cache[a[this.expando]]}};var ra=new h,sa=new h,ta=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,ua=/([A-Z])/g;_.extend({hasData:function(a){return sa.hasData(a)||ra.hasData(a)},data:function(a,b,c){return sa.access(a,b,c)},removeData:function(a,b){sa.remove(a,b)},_data:function(a,b,c){return ra.access(a,b,c)},_removeData:function(a,b){ra.remove(a,b)}}),_.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=sa.get(f),1===f.nodeType&&!ra.get(f,"hasDataAttrs"))){for(c=g.length;c--;)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=_.camelCase(d.slice(5)),i(f,d,e[d])));ra.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){sa.set(this,a)}):qa(this,function(b){var c,d=_.camelCase(a);if(f&&void 0===b){if(c=sa.get(f,a),void 0!==c)return c;if(c=sa.get(f,d),void 0!==c)return c;if(c=i(f,d,void 0),void 0!==c)return c}else this.each(function(){var c=sa.get(this,d);sa.set(this,d,b),-1!==a.indexOf("-")&&void 0!==c&&sa.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){sa.remove(this,a)})}}),_.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=ra.get(a,b),c&&(!d||_.isArray(c)?d=ra.access(a,b,_.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=_.queue(a,b),d=c.length,e=c.shift(),f=_._queueHooks(a,b),g=function(){_.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return ra.get(a,c)||ra.access(a,c,{empty:_.Callbacks("once memory").add(function(){ra.remove(a,[b+"queue",c])})})}}),_.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?_.queue(this[0],a):void 0===b?this:this.each(function(){var c=_.queue(this,a,b);_._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&_.dequeue(this,a)})},dequeue:function(a){return this.each(function(){_.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=_.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};for("string"!=typeof a&&(b=a,a=void 0),a=a||"fx";g--;)c=ra.get(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var va=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,wa=["Top","Right","Bottom","Left"],xa=function(a,b){return a=b||a,"none"===_.css(a,"display")||!_.contains(a.ownerDocument,a)},ya=/^(?:checkbox|radio)$/i;!function(){var a=Z.createDocumentFragment(),b=a.appendChild(Z.createElement("div")),c=Z.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),Y.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="<textarea>x</textarea>",Y.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var za="undefined";Y.focusinBubbles="onfocusin"in a;var Aa=/^key/,Ba=/^(?:mouse|pointer|contextmenu)|click/,Ca=/^(?:focusinfocus|focusoutblur)$/,Da=/^([^.]*)(?:\.(.+)|)$/;_.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=ra.get(a);if(q)for(c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=_.guid++),(i=q.events)||(i=q.events={}),(g=q.handle)||(g=q.handle=function(b){return typeof _!==za&&_.event.triggered!==b.type?_.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(na)||[""],j=b.length;j--;)h=Da.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n&&(l=_.event.special[n]||{},n=(e?l.delegateType:l.bindType)||n,l=_.event.special[n]||{},k=_.extend({type:n,origType:p,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&_.expr.match.needsContext.test(e),namespace:o.join(".")},f),(m=i[n])||(m=i[n]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,o,g)!==!1||a.addEventListener&&a.addEventListener(n,g,!1)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),_.event.global[n]=!0)},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=ra.hasData(a)&&ra.get(a);if(q&&(i=q.events)){for(b=(b||"").match(na)||[""],j=b.length;j--;)if(h=Da.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n){for(l=_.event.special[n]||{},n=(d?l.delegateType:l.bindType)||n,m=i[n]||[],h=h[2]&&new RegExp("(^|\\.)"+o.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;f--;)k=m[f],!e&&p!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,o,q.handle)!==!1||_.removeEvent(a,n,q.handle),delete i[n])}else for(n in i)_.event.remove(a,n+b[j],c,d,!0);_.isEmptyObject(i)&&(delete q.handle,ra.remove(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,j,k,l,m=[d||Z],n=X.call(b,"type")?b.type:b,o=X.call(b,"namespace")?b.namespace.split("."):[];if(g=h=d=d||Z,3!==d.nodeType&&8!==d.nodeType&&!Ca.test(n+_.event.triggered)&&(n.indexOf(".")>=0&&(o=n.split("."),n=o.shift(),o.sort()),j=n.indexOf(":")<0&&"on"+n,b=b[_.expando]?b:new _.Event(n,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=o.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+o.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),
+c=null==c?[b]:_.makeArray(c,[b]),l=_.event.special[n]||{},e||!l.trigger||l.trigger.apply(d,c)!==!1)){if(!e&&!l.noBubble&&!_.isWindow(d)){for(i=l.delegateType||n,Ca.test(i+n)||(g=g.parentNode);g;g=g.parentNode)m.push(g),h=g;h===(d.ownerDocument||Z)&&m.push(h.defaultView||h.parentWindow||a)}for(f=0;(g=m[f++])&&!b.isPropagationStopped();)b.type=f>1?i:l.bindType||n,k=(ra.get(g,"events")||{})[b.type]&&ra.get(g,"handle"),k&&k.apply(g,c),k=j&&g[j],k&&k.apply&&_.acceptData(g)&&(b.result=k.apply(g,c),b.result===!1&&b.preventDefault());return b.type=n,e||b.isDefaultPrevented()||l._default&&l._default.apply(m.pop(),c)!==!1||!_.acceptData(d)||j&&_.isFunction(d[n])&&!_.isWindow(d)&&(h=d[j],h&&(d[j]=null),_.event.triggered=n,d[n](),_.event.triggered=void 0,h&&(d[j]=h)),b.result}},dispatch:function(a){a=_.event.fix(a);var b,c,d,e,f,g=[],h=R.call(arguments),i=(ra.get(this,"events")||{})[a.type]||[],j=_.event.special[a.type]||{};if(h[0]=a,a.delegateTarget=this,!j.preDispatch||j.preDispatch.call(this,a)!==!1){for(g=_.event.handlers.call(this,a,i),b=0;(e=g[b++])&&!a.isPropagationStopped();)for(a.currentTarget=e.elem,c=0;(f=e.handlers[c++])&&!a.isImmediatePropagationStopped();)(!a.namespace_re||a.namespace_re.test(f.namespace))&&(a.handleObj=f,a.data=f.data,d=((_.event.special[f.origType]||{}).handle||f.handler).apply(e.elem,h),void 0!==d&&(a.result=d)===!1&&(a.preventDefault(),a.stopPropagation()));return j.postDispatch&&j.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!==this;i=i.parentNode||this)if(i.disabled!==!0||"click"!==a.type){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?_(e,this).index(i)>=0:_.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,d,e,f=b.button;return null==a.pageX&&null!=b.clientX&&(c=a.target.ownerDocument||Z,d=c.documentElement,e=c.body,a.pageX=b.clientX+(d&&d.scrollLeft||e&&e.scrollLeft||0)-(d&&d.clientLeft||e&&e.clientLeft||0),a.pageY=b.clientY+(d&&d.scrollTop||e&&e.scrollTop||0)-(d&&d.clientTop||e&&e.clientTop||0)),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},fix:function(a){if(a[_.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];for(g||(this.fixHooks[e]=g=Ba.test(e)?this.mouseHooks:Aa.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new _.Event(f),b=d.length;b--;)c=d[b],a[c]=f[c];return a.target||(a.target=Z),3===a.target.nodeType&&(a.target=a.target.parentNode),g.filter?g.filter(a,f):a},special:{load:{noBubble:!0},focus:{trigger:function(){return this!==l()&&this.focus?(this.focus(),!1):void 0},delegateType:"focusin"},blur:{trigger:function(){return this===l()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return"checkbox"===this.type&&this.click&&_.nodeName(this,"input")?(this.click(),!1):void 0},_default:function(a){return _.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=_.extend(new _.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?_.event.trigger(e,null,b):_.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},_.removeEvent=function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)},_.Event=function(a,b){return this instanceof _.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?j:k):this.type=a,b&&_.extend(this,b),this.timeStamp=a&&a.timeStamp||_.now(),void(this[_.expando]=!0)):new _.Event(a,b)},_.Event.prototype={isDefaultPrevented:k,isPropagationStopped:k,isImmediatePropagationStopped:k,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=j,a&&a.preventDefault&&a.preventDefault()},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=j,a&&a.stopPropagation&&a.stopPropagation()},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=j,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},_.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){_.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!_.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),Y.focusinBubbles||_.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){_.event.simulate(b,a.target,_.event.fix(a),!0)};_.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=ra.access(d,b);e||d.addEventListener(a,c,!0),ra.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=ra.access(d,b)-1;e?ra.access(d,b,e):(d.removeEventListener(a,c,!0),ra.remove(d,b))}}}),_.fn.extend({on:function(a,b,c,d,e){var f,g;if("object"==typeof a){"string"!=typeof b&&(c=c||b,b=void 0);for(g in a)this.on(g,b,c,a[g],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&("string"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=k;else if(!d)return this;return 1===e&&(f=d,d=function(a){return _().off(a),f.apply(this,arguments)},d.guid=f.guid||(f.guid=_.guid++)),this.each(function(){_.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,_(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return(b===!1||"function"==typeof b)&&(c=b,b=void 0),c===!1&&(c=k),this.each(function(){_.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){_.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?_.event.trigger(a,b,c,!0):void 0}});var Ea=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,Fa=/<([\w:]+)/,Ga=/<|&#?\w+;/,Ha=/<(?:script|style|link)/i,Ia=/checked\s*(?:[^=]|=\s*.checked.)/i,Ja=/^$|\/(?:java|ecma)script/i,Ka=/^true\/(.*)/,La=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,Ma={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};Ma.optgroup=Ma.option,Ma.tbody=Ma.tfoot=Ma.colgroup=Ma.caption=Ma.thead,Ma.th=Ma.td,_.extend({clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=_.contains(a.ownerDocument,a);if(!(Y.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||_.isXMLDoc(a)))for(g=r(h),f=r(a),d=0,e=f.length;e>d;d++)s(f[d],g[d]);if(b)if(c)for(f=f||r(a),g=g||r(h),d=0,e=f.length;e>d;d++)q(f[d],g[d]);else q(a,h);return g=r(h,"script"),g.length>0&&p(g,!i&&r(a,"script")),h},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k=b.createDocumentFragment(),l=[],m=0,n=a.length;n>m;m++)if(e=a[m],e||0===e)if("object"===_.type(e))_.merge(l,e.nodeType?[e]:e);else if(Ga.test(e)){for(f=f||k.appendChild(b.createElement("div")),g=(Fa.exec(e)||["",""])[1].toLowerCase(),h=Ma[g]||Ma._default,f.innerHTML=h[1]+e.replace(Ea,"<$1></$2>")+h[2],j=h[0];j--;)f=f.lastChild;_.merge(l,f.childNodes),f=k.firstChild,f.textContent=""}else l.push(b.createTextNode(e));for(k.textContent="",m=0;e=l[m++];)if((!d||-1===_.inArray(e,d))&&(i=_.contains(e.ownerDocument,e),f=r(k.appendChild(e),"script"),i&&p(f),c))for(j=0;e=f[j++];)Ja.test(e.type||"")&&c.push(e);return k},cleanData:function(a){for(var b,c,d,e,f=_.event.special,g=0;void 0!==(c=a[g]);g++){if(_.acceptData(c)&&(e=c[ra.expando],e&&(b=ra.cache[e]))){if(b.events)for(d in b.events)f[d]?_.event.remove(c,d):_.removeEvent(c,d,b.handle);ra.cache[e]&&delete ra.cache[e]}delete sa.cache[c[sa.expando]]}}}),_.fn.extend({text:function(a){return qa(this,function(a){return void 0===a?_.text(this):this.empty().each(function(){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&(this.textContent=a)})},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=m(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=m(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?_.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||_.cleanData(r(c)),c.parentNode&&(b&&_.contains(c.ownerDocument,c)&&p(r(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(_.cleanData(r(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return _.clone(this,a,b)})},html:function(a){return qa(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!Ha.test(a)&&!Ma[(Fa.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ea,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(_.cleanData(r(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,_.cleanData(r(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=S.apply([],a);var c,d,e,f,g,h,i=0,j=this.length,k=this,l=j-1,m=a[0],p=_.isFunction(m);if(p||j>1&&"string"==typeof m&&!Y.checkClone&&Ia.test(m))return this.each(function(c){var d=k.eq(c);p&&(a[0]=m.call(this,c,d.html())),d.domManip(a,b)});if(j&&(c=_.buildFragment(a,this[0].ownerDocument,!1,this),d=c.firstChild,1===c.childNodes.length&&(c=d),d)){for(e=_.map(r(c,"script"),n),f=e.length;j>i;i++)g=c,i!==l&&(g=_.clone(g,!0,!0),f&&_.merge(e,r(g,"script"))),b.call(this[i],g,i);if(f)for(h=e[e.length-1].ownerDocument,_.map(e,o),i=0;f>i;i++)g=e[i],Ja.test(g.type||"")&&!ra.access(g,"globalEval")&&_.contains(h,g)&&(g.src?_._evalUrl&&_._evalUrl(g.src):_.globalEval(g.textContent.replace(La,"")))}return this}}),_.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){_.fn[a]=function(a){for(var c,d=[],e=_(a),f=e.length-1,g=0;f>=g;g++)c=g===f?this:this.clone(!0),_(e[g])[b](c),T.apply(d,c.get());return this.pushStack(d)}});var Na,Oa={},Pa=/^margin/,Qa=new RegExp("^("+va+")(?!px)[a-z%]+$","i"),Ra=function(b){return b.ownerDocument.defaultView.opener?b.ownerDocument.defaultView.getComputedStyle(b,null):a.getComputedStyle(b,null)};!function(){function b(){g.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",g.innerHTML="",e.appendChild(f);var b=a.getComputedStyle(g,null);c="1%"!==b.top,d="4px"===b.width,e.removeChild(f)}var c,d,e=Z.documentElement,f=Z.createElement("div"),g=Z.createElement("div");g.style&&(g.style.backgroundClip="content-box",g.cloneNode(!0).style.backgroundClip="",Y.clearCloneStyle="content-box"===g.style.backgroundClip,f.style.cssText="border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;position:absolute",f.appendChild(g),a.getComputedStyle&&_.extend(Y,{pixelPosition:function(){return b(),c},boxSizingReliable:function(){return null==d&&b(),d},reliableMarginRight:function(){var b,c=g.appendChild(Z.createElement("div"));return c.style.cssText=g.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",c.style.marginRight=c.style.width="0",g.style.width="1px",e.appendChild(f),b=!parseFloat(a.getComputedStyle(c,null).marginRight),e.removeChild(f),g.removeChild(c),b}}))}(),_.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var Sa=/^(none|table(?!-c[ea]).+)/,Ta=new RegExp("^("+va+")(.*)$","i"),Ua=new RegExp("^([+-])=("+va+")","i"),Va={position:"absolute",visibility:"hidden",display:"block"},Wa={letterSpacing:"0",fontWeight:"400"},Xa=["Webkit","O","Moz","ms"];_.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=v(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=_.camelCase(b),i=a.style;return b=_.cssProps[h]||(_.cssProps[h]=x(i,h)),g=_.cssHooks[b]||_.cssHooks[h],void 0===c?g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b]:(f=typeof c,"string"===f&&(e=Ua.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(_.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||_.cssNumber[h]||(c+="px"),Y.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),g&&"set"in g&&void 0===(c=g.set(a,c,d))||(i[b]=c)),void 0)}},css:function(a,b,c,d){var e,f,g,h=_.camelCase(b);return b=_.cssProps[h]||(_.cssProps[h]=x(a.style,h)),g=_.cssHooks[b]||_.cssHooks[h],g&&"get"in g&&(e=g.get(a,!0,c)),void 0===e&&(e=v(a,b,d)),"normal"===e&&b in Wa&&(e=Wa[b]),""===c||c?(f=parseFloat(e),c===!0||_.isNumeric(f)?f||0:e):e}}),_.each(["height","width"],function(a,b){_.cssHooks[b]={get:function(a,c,d){return c?Sa.test(_.css(a,"display"))&&0===a.offsetWidth?_.swap(a,Va,function(){return A(a,b,d)}):A(a,b,d):void 0},set:function(a,c,d){var e=d&&Ra(a);return y(a,c,d?z(a,b,d,"border-box"===_.css(a,"boxSizing",!1,e),e):0)}}}),_.cssHooks.marginRight=w(Y.reliableMarginRight,function(a,b){return b?_.swap(a,{display:"inline-block"},v,[a,"marginRight"]):void 0}),_.each({margin:"",padding:"",border:"Width"},function(a,b){_.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+wa[d]+b]=f[d]||f[d-2]||f[0];return e}},Pa.test(a)||(_.cssHooks[a+b].set=y)}),_.fn.extend({css:function(a,b){return qa(this,function(a,b,c){var d,e,f={},g=0;if(_.isArray(b)){for(d=Ra(a),e=b.length;e>g;g++)f[b[g]]=_.css(a,b[g],!1,d);return f}return void 0!==c?_.style(a,b,c):_.css(a,b)},a,b,arguments.length>1)},show:function(){return B(this,!0)},hide:function(){return B(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){xa(this)?_(this).show():_(this).hide()})}}),_.Tween=C,C.prototype={constructor:C,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(_.cssNumber[c]?"":"px")},cur:function(){var a=C.propHooks[this.prop];return a&&a.get?a.get(this):C.propHooks._default.get(this)},run:function(a){var b,c=C.propHooks[this.prop];return this.options.duration?this.pos=b=_.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):C.propHooks._default.set(this),this}},C.prototype.init.prototype=C.prototype,C.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=_.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){_.fx.step[a.prop]?_.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[_.cssProps[a.prop]]||_.cssHooks[a.prop])?_.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},C.propHooks.scrollTop=C.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},_.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},_.fx=C.prototype.init,_.fx.step={};var Ya,Za,$a=/^(?:toggle|show|hide)$/,_a=new RegExp("^(?:([+-])=|)("+va+")([a-z%]*)$","i"),ab=/queueHooks$/,bb=[G],cb={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=_a.exec(b),f=e&&e[3]||(_.cssNumber[a]?"":"px"),g=(_.cssNumber[a]||"px"!==f&&+d)&&_a.exec(_.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,_.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};_.Animation=_.extend(I,{tweener:function(a,b){_.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],cb[c]=cb[c]||[],cb[c].unshift(b)},prefilter:function(a,b){b?bb.unshift(a):bb.push(a)}}),_.speed=function(a,b,c){var d=a&&"object"==typeof a?_.extend({},a):{complete:c||!c&&b||_.isFunction(a)&&a,duration:a,easing:c&&b||b&&!_.isFunction(b)&&b};return d.duration=_.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in _.fx.speeds?_.fx.speeds[d.duration]:_.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){_.isFunction(d.old)&&d.old.call(this),d.queue&&_.dequeue(this,d.queue)},d},_.fn.extend({fadeTo:function(a,b,c,d){return this.filter(xa).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=_.isEmptyObject(a),f=_.speed(b,c,d),g=function(){var b=I(this,_.extend({},a),f);(e||ra.get(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=_.timers,g=ra.get(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&ab.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&_.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=ra.get(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=_.timers,g=d?d.length:0;for(c.finish=!0,_.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),_.each(["toggle","show","hide"],function(a,b){var c=_.fn[b];_.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(E(b,!0),a,d,e)}}),_.each({slideDown:E("show"),slideUp:E("hide"),slideToggle:E("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){_.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),_.timers=[],_.fx.tick=function(){var a,b=0,c=_.timers;for(Ya=_.now();b<c.length;b++)a=c[b],a()||c[b]!==a||c.splice(b--,1);c.length||_.fx.stop(),Ya=void 0},_.fx.timer=function(a){_.timers.push(a),a()?_.fx.start():_.timers.pop()},_.fx.interval=13,_.fx.start=function(){Za||(Za=setInterval(_.fx.tick,_.fx.interval))},_.fx.stop=function(){clearInterval(Za),Za=null},_.fx.speeds={slow:600,fast:200,_default:400},_.fn.delay=function(a,b){return a=_.fx?_.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a=Z.createElement("input"),b=Z.createElement("select"),c=b.appendChild(Z.createElement("option"));a.type="checkbox",Y.checkOn=""!==a.value,Y.optSelected=c.selected,b.disabled=!0,Y.optDisabled=!c.disabled,a=Z.createElement("input"),a.value="t",a.type="radio",Y.radioValue="t"===a.value}();var db,eb,fb=_.expr.attrHandle;_.fn.extend({attr:function(a,b){return qa(this,_.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){_.removeAttr(this,a)})}}),_.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===za?_.prop(a,b,c):(1===f&&_.isXMLDoc(a)||(b=b.toLowerCase(),d=_.attrHooks[b]||(_.expr.match.bool.test(b)?eb:db)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=_.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void _.removeAttr(a,b))},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(na);if(f&&1===a.nodeType)for(;c=f[e++];)d=_.propFix[c]||c,_.expr.match.bool.test(c)&&(a[d]=!1),a.removeAttribute(c)},attrHooks:{type:{set:function(a,b){if(!Y.radioValue&&"radio"===b&&_.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),eb={set:function(a,b,c){return b===!1?_.removeAttr(a,c):a.setAttribute(c,c),c}},_.each(_.expr.match.bool.source.match(/\w+/g),function(a,b){var c=fb[b]||_.find.attr;fb[b]=function(a,b,d){var e,f;return d||(f=fb[b],fb[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,fb[b]=f),e}});var gb=/^(?:input|select|textarea|button)$/i;_.fn.extend({prop:function(a,b){return qa(this,_.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[_.propFix[a]||a]})}}),_.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!_.isXMLDoc(a),f&&(b=_.propFix[b]||b,e=_.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){return a.hasAttribute("tabindex")||gb.test(a.nodeName)||a.href?a.tabIndex:-1}}}}),Y.optSelected||(_.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null}}),_.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){_.propFix[this.toLowerCase()]=this});var hb=/[\t\r\n\f]/g;_.fn.extend({addClass:function(a){var b,c,d,e,f,g,h="string"==typeof a&&a,i=0,j=this.length;if(_.isFunction(a))return this.each(function(b){_(this).addClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(na)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(hb," "):" ")){for(f=0;e=b[f++];)d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=_.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0===arguments.length||"string"==typeof a&&a,i=0,j=this.length;if(_.isFunction(a))return this.each(function(b){_(this).removeClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(na)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(hb," "):"")){for(f=0;e=b[f++];)for(;d.indexOf(" "+e+" ")>=0;)d=d.replace(" "+e+" "," ");g=a?_.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):_.isFunction(a)?this.each(function(c){_(this).toggleClass(a.call(this,c,this.className,b),b)}):this.each(function(){if("string"===c)for(var b,d=0,e=_(this),f=a.match(na)||[];b=f[d++];)e.hasClass(b)?e.removeClass(b):e.addClass(b);else(c===za||"boolean"===c)&&(this.className&&ra.set(this,"__className__",this.className),this.className=this.className||a===!1?"":ra.get(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(hb," ").indexOf(b)>=0)return!0;return!1}});var ib=/\r/g;_.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=_.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,_(this).val()):a,null==e?e="":"number"==typeof e?e+="":_.isArray(e)&&(e=_.map(e,function(a){return null==a?"":a+""})),b=_.valHooks[this.type]||_.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=_.valHooks[e.type]||_.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(ib,""):null==c?"":c)}}}),_.extend({valHooks:{option:{get:function(a){var b=_.find.attr(a,"value");return null!=b?b:_.trim(_.text(a))}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],(c.selected||i===e)&&(Y.optDisabled?!c.disabled:null===c.getAttribute("disabled"))&&(!c.parentNode.disabled||!_.nodeName(c.parentNode,"optgroup"))){if(b=_(c).val(),f)return b;g.push(b)}return g},set:function(a,b){for(var c,d,e=a.options,f=_.makeArray(b),g=e.length;g--;)d=e[g],(d.selected=_.inArray(d.value,f)>=0)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),_.each(["radio","checkbox"],function(){_.valHooks[this]={set:function(a,b){return _.isArray(b)?a.checked=_.inArray(_(a).val(),b)>=0:void 0}},Y.checkOn||(_.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})}),_.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){_.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),_.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var jb=_.now(),kb=/\?/;_.parseJSON=function(a){return JSON.parse(a+"")},_.parseXML=function(a){var b,c;if(!a||"string"!=typeof a)return null;try{c=new DOMParser,b=c.parseFromString(a,"text/xml")}catch(d){b=void 0}return(!b||b.getElementsByTagName("parsererror").length)&&_.error("Invalid XML: "+a),b};var lb=/#.*$/,mb=/([?&])_=[^&]*/,nb=/^(.*?):[ \t]*([^\r\n]*)$/gm,ob=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,pb=/^(?:GET|HEAD)$/,qb=/^\/\//,rb=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,sb={},tb={},ub="*/".concat("*"),vb=a.location.href,wb=rb.exec(vb.toLowerCase())||[];_.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:vb,type:"GET",isLocal:ob.test(wb[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":ub,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":_.parseJSON,"text xml":_.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?L(L(a,_.ajaxSettings),b):L(_.ajaxSettings,a)},ajaxPrefilter:J(sb),ajaxTransport:J(tb),ajax:function(a,b){function c(a,b,c,g){var i,k,r,s,u,w=b;2!==t&&(t=2,h&&clearTimeout(h),d=void 0,f=g||"",v.readyState=a>0?4:0,i=a>=200&&300>a||304===a,c&&(s=M(l,v,c)),s=N(l,s,v,i),i?(l.ifModified&&(u=v.getResponseHeader("Last-Modified"),u&&(_.lastModified[e]=u),u=v.getResponseHeader("etag"),u&&(_.etag[e]=u)),204===a||"HEAD"===l.type?w="nocontent":304===a?w="notmodified":(w=s.state,k=s.data,r=s.error,i=!r)):(r=w,(a||!w)&&(w="error",0>a&&(a=0))),v.status=a,v.statusText=(b||w)+"",i?o.resolveWith(m,[k,w,v]):o.rejectWith(m,[v,w,r]),v.statusCode(q),q=void 0,j&&n.trigger(i?"ajaxSuccess":"ajaxError",[v,l,i?k:r]),p.fireWith(m,[v,w]),j&&(n.trigger("ajaxComplete",[v,l]),--_.active||_.event.trigger("ajaxStop")))}"object"==typeof a&&(b=a,a=void 0),b=b||{};var d,e,f,g,h,i,j,k,l=_.ajaxSetup({},b),m=l.context||l,n=l.context&&(m.nodeType||m.jquery)?_(m):_.event,o=_.Deferred(),p=_.Callbacks("once memory"),q=l.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!g)for(g={};b=nb.exec(f);)g[b[1].toLowerCase()]=b[2];b=g[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?f:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(l.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return d&&d.abort(b),c(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,l.url=((a||l.url||vb)+"").replace(lb,"").replace(qb,wb[1]+"//"),l.type=b.method||b.type||l.method||l.type,l.dataTypes=_.trim(l.dataType||"*").toLowerCase().match(na)||[""],null==l.crossDomain&&(i=rb.exec(l.url.toLowerCase()),l.crossDomain=!(!i||i[1]===wb[1]&&i[2]===wb[2]&&(i[3]||("http:"===i[1]?"80":"443"))===(wb[3]||("http:"===wb[1]?"80":"443")))),l.data&&l.processData&&"string"!=typeof l.data&&(l.data=_.param(l.data,l.traditional)),K(sb,l,b,v),2===t)return v;j=_.event&&l.global,j&&0===_.active++&&_.event.trigger("ajaxStart"),l.type=l.type.toUpperCase(),l.hasContent=!pb.test(l.type),e=l.url,l.hasContent||(l.data&&(e=l.url+=(kb.test(e)?"&":"?")+l.data,delete l.data),l.cache===!1&&(l.url=mb.test(e)?e.replace(mb,"$1_="+jb++):e+(kb.test(e)?"&":"?")+"_="+jb++)),l.ifModified&&(_.lastModified[e]&&v.setRequestHeader("If-Modified-Since",_.lastModified[e]),_.etag[e]&&v.setRequestHeader("If-None-Match",_.etag[e])),(l.data&&l.hasContent&&l.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",l.contentType),v.setRequestHeader("Accept",l.dataTypes[0]&&l.accepts[l.dataTypes[0]]?l.accepts[l.dataTypes[0]]+("*"!==l.dataTypes[0]?", "+ub+"; q=0.01":""):l.accepts["*"]);for(k in l.headers)v.setRequestHeader(k,l.headers[k]);if(l.beforeSend&&(l.beforeSend.call(m,v,l)===!1||2===t))return v.abort();u="abort";for(k in{success:1,error:1,complete:1})v[k](l[k]);if(d=K(tb,l,b,v)){v.readyState=1,j&&n.trigger("ajaxSend",[v,l]),l.async&&l.timeout>0&&(h=setTimeout(function(){v.abort("timeout")},l.timeout));try{t=1,d.send(r,c)}catch(w){if(!(2>t))throw w;c(-1,w)}}else c(-1,"No Transport");return v},getJSON:function(a,b,c){return _.get(a,b,c,"json")},getScript:function(a,b){return _.get(a,void 0,b,"script")}}),_.each(["get","post"],function(a,b){_[b]=function(a,c,d,e){return _.isFunction(c)&&(e=e||d,d=c,c=void 0),_.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),_._evalUrl=function(a){return _.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},_.fn.extend({wrapAll:function(a){var b;return _.isFunction(a)?this.each(function(b){_(this).wrapAll(a.call(this,b))}):(this[0]&&(b=_(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){for(var a=this;a.firstElementChild;)a=a.firstElementChild;return a}).append(this)),this)},wrapInner:function(a){return _.isFunction(a)?this.each(function(b){_(this).wrapInner(a.call(this,b))}):this.each(function(){var b=_(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=_.isFunction(a);return this.each(function(c){_(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){_.nodeName(this,"body")||_(this).replaceWith(this.childNodes)}).end()}}),_.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0},_.expr.filters.visible=function(a){return!_.expr.filters.hidden(a)};var xb=/%20/g,yb=/\[\]$/,zb=/\r?\n/g,Ab=/^(?:submit|button|image|reset|file)$/i,Bb=/^(?:input|select|textarea|keygen)/i;_.param=function(a,b){var c,d=[],e=function(a,b){b=_.isFunction(b)?b():null==b?"":b,
+d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=_.ajaxSettings&&_.ajaxSettings.traditional),_.isArray(a)||a.jquery&&!_.isPlainObject(a))_.each(a,function(){e(this.name,this.value)});else for(c in a)O(c,a[c],b,e);return d.join("&").replace(xb,"+")},_.fn.extend({serialize:function(){return _.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=_.prop(this,"elements");return a?_.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!_(this).is(":disabled")&&Bb.test(this.nodeName)&&!Ab.test(a)&&(this.checked||!ya.test(a))}).map(function(a,b){var c=_(this).val();return null==c?null:_.isArray(c)?_.map(c,function(a){return{name:b.name,value:a.replace(zb,"\r\n")}}):{name:b.name,value:c.replace(zb,"\r\n")}}).get()}}),_.ajaxSettings.xhr=function(){try{return new XMLHttpRequest}catch(a){}};var Cb=0,Db={},Eb={0:200,1223:204},Fb=_.ajaxSettings.xhr();a.attachEvent&&a.attachEvent("onunload",function(){for(var a in Db)Db[a]()}),Y.cors=!!Fb&&"withCredentials"in Fb,Y.ajax=Fb=!!Fb,_.ajaxTransport(function(a){var b;return Y.cors||Fb&&!a.crossDomain?{send:function(c,d){var e,f=a.xhr(),g=++Cb;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)f.setRequestHeader(e,c[e]);b=function(a){return function(){b&&(delete Db[g],b=f.onload=f.onerror=null,"abort"===a?f.abort():"error"===a?d(f.status,f.statusText):d(Eb[f.status]||f.status,f.statusText,"string"==typeof f.responseText?{text:f.responseText}:void 0,f.getAllResponseHeaders()))}},f.onload=b(),f.onerror=b("error"),b=Db[g]=b("abort");try{f.send(a.hasContent&&a.data||null)}catch(h){if(b)throw h}},abort:function(){b&&b()}}:void 0}),_.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return _.globalEval(a),a}}}),_.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),_.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(d,e){b=_("<script>").prop({async:!0,charset:a.scriptCharset,src:a.url}).on("load error",c=function(a){b.remove(),c=null,a&&e("error"===a.type?404:200,a.type)}),Z.head.appendChild(b[0])},abort:function(){c&&c()}}}});var Gb=[],Hb=/(=)\?(?=&|$)|\?\?/;_.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=Gb.pop()||_.expando+"_"+jb++;return this[a]=!0,a}}),_.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(Hb.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&Hb.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=_.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(Hb,"$1"+e):b.jsonp!==!1&&(b.url+=(kb.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||_.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,Gb.push(e)),g&&_.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),_.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||Z;var d=ga.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=_.buildFragment([a],b,e),e&&e.length&&_(e).remove(),_.merge([],d.childNodes))};var Ib=_.fn.load;_.fn.load=function(a,b,c){if("string"!=typeof a&&Ib)return Ib.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=_.trim(a.slice(h)),a=a.slice(0,h)),_.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&_.ajax({url:a,type:e,dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?_("<div>").append(_.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,f||[a.responseText,b,a])}),this},_.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){_.fn[b]=function(a){return this.on(b,a)}}),_.expr.filters.animated=function(a){return _.grep(_.timers,function(b){return a===b.elem}).length};var Jb=a.document.documentElement;_.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=_.css(a,"position"),l=_(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=_.css(a,"top"),i=_.css(a,"left"),j=("absolute"===k||"fixed"===k)&&(f+i).indexOf("auto")>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),_.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},_.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){_.offset.setOffset(this,a,b)});var b,c,d=this[0],e={top:0,left:0},f=d&&d.ownerDocument;if(f)return b=f.documentElement,_.contains(b,d)?(typeof d.getBoundingClientRect!==za&&(e=d.getBoundingClientRect()),c=P(f),{top:e.top+c.pageYOffset-b.clientTop,left:e.left+c.pageXOffset-b.clientLeft}):e},position:function(){if(this[0]){var a,b,c=this[0],d={top:0,left:0};return"fixed"===_.css(c,"position")?b=c.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),_.nodeName(a[0],"html")||(d=a.offset()),d.top+=_.css(a[0],"borderTopWidth",!0),d.left+=_.css(a[0],"borderLeftWidth",!0)),{top:b.top-d.top-_.css(c,"marginTop",!0),left:b.left-d.left-_.css(c,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||Jb;a&&!_.nodeName(a,"html")&&"static"===_.css(a,"position");)a=a.offsetParent;return a||Jb})}}),_.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(b,c){var d="pageYOffset"===c;_.fn[b]=function(e){return qa(this,function(b,e,f){var g=P(b);return void 0===f?g?g[c]:b[e]:void(g?g.scrollTo(d?a.pageXOffset:f,d?f:a.pageYOffset):b[e]=f)},b,e,arguments.length,null)}}),_.each(["top","left"],function(a,b){_.cssHooks[b]=w(Y.pixelPosition,function(a,c){return c?(c=v(a,b),Qa.test(c)?_(a).position()[b]+"px":c):void 0})}),_.each({Height:"height",Width:"width"},function(a,b){_.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){_.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return qa(this,function(b,c,d){var e;return _.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?_.css(b,c,g):_.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),_.fn.size=function(){return this.length},_.fn.andSelf=_.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return _});var Kb=a.jQuery,Lb=a.$;return _.noConflict=function(b){return a.$===_&&(a.$=Lb),b&&a.jQuery===_&&(a.jQuery=Kb),_},typeof b===za&&(a.jQuery=a.$=_),_});
\ No newline at end of file
diff --git a/js/foundation/js/vendor/modernizr.js b/js/foundation/js/vendor/modernizr.js
new file mode 100644 (file)
index 0000000..04508b5
--- /dev/null
@@ -0,0 +1,8 @@
+/*!
+ * Modernizr v2.8.3
+ * www.modernizr.com
+ *
+ * Copyright (c) Faruk Ates, Paul Irish, Alex Sexton
+ * Available under the BSD and MIT licenses: www.modernizr.com/license/
+ */
+window.Modernizr=function(a,b,c){function d(a){t.cssText=a}function e(a,b){return d(x.join(a+";")+(b||""))}function f(a,b){return typeof a===b}function g(a,b){return!!~(""+a).indexOf(b)}function h(a,b){for(var d in a){var e=a[d];if(!g(e,"-")&&t[e]!==c)return"pfx"==b?e:!0}return!1}function i(a,b,d){for(var e in a){var g=b[a[e]];if(g!==c)return d===!1?a[e]:f(g,"function")?g.bind(d||b):g}return!1}function j(a,b,c){var d=a.charAt(0).toUpperCase()+a.slice(1),e=(a+" "+z.join(d+" ")+d).split(" ");return f(b,"string")||f(b,"undefined")?h(e,b):(e=(a+" "+A.join(d+" ")+d).split(" "),i(e,b,c))}function k(){o.input=function(c){for(var d=0,e=c.length;e>d;d++)E[c[d]]=!!(c[d]in u);return E.list&&(E.list=!(!b.createElement("datalist")||!a.HTMLDataListElement)),E}("autocomplete autofocus list placeholder max min multiple pattern required step".split(" ")),o.inputtypes=function(a){for(var d,e,f,g=0,h=a.length;h>g;g++)u.setAttribute("type",e=a[g]),d="text"!==u.type,d&&(u.value=v,u.style.cssText="position:absolute;visibility:hidden;",/^range$/.test(e)&&u.style.WebkitAppearance!==c?(q.appendChild(u),f=b.defaultView,d=f.getComputedStyle&&"textfield"!==f.getComputedStyle(u,null).WebkitAppearance&&0!==u.offsetHeight,q.removeChild(u)):/^(search|tel)$/.test(e)||(d=/^(url|email)$/.test(e)?u.checkValidity&&u.checkValidity()===!1:u.value!=v)),D[a[g]]=!!d;return D}("search tel url email datetime date month week time datetime-local number range color".split(" "))}var l,m,n="2.8.3",o={},p=!0,q=b.documentElement,r="modernizr",s=b.createElement(r),t=s.style,u=b.createElement("input"),v=":)",w={}.toString,x=" -webkit- -moz- -o- -ms- ".split(" "),y="Webkit Moz O ms",z=y.split(" "),A=y.toLowerCase().split(" "),B={svg:"http://www.w3.org/2000/svg"},C={},D={},E={},F=[],G=F.slice,H=function(a,c,d,e){var f,g,h,i,j=b.createElement("div"),k=b.body,l=k||b.createElement("body");if(parseInt(d,10))for(;d--;)h=b.createElement("div"),h.id=e?e[d]:r+(d+1),j.appendChild(h);return f=["&#173;",'<style id="s',r,'">',a,"</style>"].join(""),j.id=r,(k?j:l).innerHTML+=f,l.appendChild(j),k||(l.style.background="",l.style.overflow="hidden",i=q.style.overflow,q.style.overflow="hidden",q.appendChild(l)),g=c(j,a),k?j.parentNode.removeChild(j):(l.parentNode.removeChild(l),q.style.overflow=i),!!g},I=function(b){var c=a.matchMedia||a.msMatchMedia;if(c)return c(b)&&c(b).matches||!1;var d;return H("@media "+b+" { #"+r+" { position: absolute; } }",function(b){d="absolute"==(a.getComputedStyle?getComputedStyle(b,null):b.currentStyle).position}),d},J=function(){function a(a,e){e=e||b.createElement(d[a]||"div"),a="on"+a;var g=a in e;return g||(e.setAttribute||(e=b.createElement("div")),e.setAttribute&&e.removeAttribute&&(e.setAttribute(a,""),g=f(e[a],"function"),f(e[a],"undefined")||(e[a]=c),e.removeAttribute(a))),e=null,g}var d={select:"input",change:"input",submit:"form",reset:"form",error:"img",load:"img",abort:"img"};return a}(),K={}.hasOwnProperty;m=f(K,"undefined")||f(K.call,"undefined")?function(a,b){return b in a&&f(a.constructor.prototype[b],"undefined")}:function(a,b){return K.call(a,b)},Function.prototype.bind||(Function.prototype.bind=function(a){var b=this;if("function"!=typeof b)throw new TypeError;var c=G.call(arguments,1),d=function(){if(this instanceof d){var e=function(){};e.prototype=b.prototype;var f=new e,g=b.apply(f,c.concat(G.call(arguments)));return Object(g)===g?g:f}return b.apply(a,c.concat(G.call(arguments)))};return d}),C.flexbox=function(){return j("flexWrap")},C.flexboxlegacy=function(){return j("boxDirection")},C.canvas=function(){var a=b.createElement("canvas");return!(!a.getContext||!a.getContext("2d"))},C.canvastext=function(){return!(!o.canvas||!f(b.createElement("canvas").getContext("2d").fillText,"function"))},C.webgl=function(){return!!a.WebGLRenderingContext},C.touch=function(){var c;return"ontouchstart"in a||a.DocumentTouch&&b instanceof DocumentTouch?c=!0:H(["@media (",x.join("touch-enabled),("),r,")","{#modernizr{top:9px;position:absolute}}"].join(""),function(a){c=9===a.offsetTop}),c},C.geolocation=function(){return"geolocation"in navigator},C.postmessage=function(){return!!a.postMessage},C.websqldatabase=function(){return!!a.openDatabase},C.indexedDB=function(){return!!j("indexedDB",a)},C.hashchange=function(){return J("hashchange",a)&&(b.documentMode===c||b.documentMode>7)},C.history=function(){return!(!a.history||!history.pushState)},C.draganddrop=function(){var a=b.createElement("div");return"draggable"in a||"ondragstart"in a&&"ondrop"in a},C.websockets=function(){return"WebSocket"in a||"MozWebSocket"in a},C.rgba=function(){return d("background-color:rgba(150,255,150,.5)"),g(t.backgroundColor,"rgba")},C.hsla=function(){return d("background-color:hsla(120,40%,100%,.5)"),g(t.backgroundColor,"rgba")||g(t.backgroundColor,"hsla")},C.multiplebgs=function(){return d("background:url(https://),url(https://),red url(https://)"),/(url\s*\(.*?){3}/.test(t.background)},C.backgroundsize=function(){return j("backgroundSize")},C.borderimage=function(){return j("borderImage")},C.borderradius=function(){return j("borderRadius")},C.boxshadow=function(){return j("boxShadow")},C.textshadow=function(){return""===b.createElement("div").style.textShadow},C.opacity=function(){return e("opacity:.55"),/^0.55$/.test(t.opacity)},C.cssanimations=function(){return j("animationName")},C.csscolumns=function(){return j("columnCount")},C.cssgradients=function(){var a="background-image:",b="gradient(linear,left top,right bottom,from(#9f9),to(white));",c="linear-gradient(left top,#9f9, white);";return d((a+"-webkit- ".split(" ").join(b+a)+x.join(c+a)).slice(0,-a.length)),g(t.backgroundImage,"gradient")},C.cssreflections=function(){return j("boxReflect")},C.csstransforms=function(){return!!j("transform")},C.csstransforms3d=function(){var a=!!j("perspective");return a&&"webkitPerspective"in q.style&&H("@media (transform-3d),(-webkit-transform-3d){#modernizr{left:9px;position:absolute;height:3px;}}",function(b,c){a=9===b.offsetLeft&&3===b.offsetHeight}),a},C.csstransitions=function(){return j("transition")},C.fontface=function(){var a;return H('@font-face {font-family:"font";src:url("https://")}',function(c,d){var e=b.getElementById("smodernizr"),f=e.sheet||e.styleSheet,g=f?f.cssRules&&f.cssRules[0]?f.cssRules[0].cssText:f.cssText||"":"";a=/src/i.test(g)&&0===g.indexOf(d.split(" ")[0])}),a},C.generatedcontent=function(){var a;return H(["#",r,"{font:0/0 a}#",r,':after{content:"',v,'";visibility:hidden;font:3px/1 a}'].join(""),function(b){a=b.offsetHeight>=3}),a},C.video=function(){var a=b.createElement("video"),c=!1;try{(c=!!a.canPlayType)&&(c=new Boolean(c),c.ogg=a.canPlayType('video/ogg; codecs="theora"').replace(/^no$/,""),c.h264=a.canPlayType('video/mp4; codecs="avc1.42E01E"').replace(/^no$/,""),c.webm=a.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/^no$/,""))}catch(d){}return c},C.audio=function(){var a=b.createElement("audio"),c=!1;try{(c=!!a.canPlayType)&&(c=new Boolean(c),c.ogg=a.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,""),c.mp3=a.canPlayType("audio/mpeg;").replace(/^no$/,""),c.wav=a.canPlayType('audio/wav; codecs="1"').replace(/^no$/,""),c.m4a=(a.canPlayType("audio/x-m4a;")||a.canPlayType("audio/aac;")).replace(/^no$/,""))}catch(d){}return c},C.localstorage=function(){try{return localStorage.setItem(r,r),localStorage.removeItem(r),!0}catch(a){return!1}},C.sessionstorage=function(){try{return sessionStorage.setItem(r,r),sessionStorage.removeItem(r),!0}catch(a){return!1}},C.webworkers=function(){return!!a.Worker},C.applicationcache=function(){return!!a.applicationCache},C.svg=function(){return!!b.createElementNS&&!!b.createElementNS(B.svg,"svg").createSVGRect},C.inlinesvg=function(){var a=b.createElement("div");return a.innerHTML="<svg/>",(a.firstChild&&a.firstChild.namespaceURI)==B.svg},C.smil=function(){return!!b.createElementNS&&/SVGAnimate/.test(w.call(b.createElementNS(B.svg,"animate")))},C.svgclippaths=function(){return!!b.createElementNS&&/SVGClipPath/.test(w.call(b.createElementNS(B.svg,"clipPath")))};for(var L in C)m(C,L)&&(l=L.toLowerCase(),o[l]=C[L](),F.push((o[l]?"":"no-")+l));return o.input||k(),o.addTest=function(a,b){if("object"==typeof a)for(var d in a)m(a,d)&&o.addTest(d,a[d]);else{if(a=a.toLowerCase(),o[a]!==c)return o;b="function"==typeof b?b():b,"undefined"!=typeof p&&p&&(q.className+=" "+(b?"":"no-")+a),o[a]=b}return o},d(""),s=u=null,function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x<style>"+b+"</style>",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=s.elements;return"string"==typeof a?a.split(" "):a}function e(a){var b=r[a[p]];return b||(b={},q++,a[p]=q,r[q]=b),b}function f(a,c,d){if(c||(c=b),k)return c.createElement(a);d||(d=e(c));var f;return f=d.cache[a]?d.cache[a].cloneNode():o.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!f.canHaveChildren||n.test(a)||f.tagUrn?f:d.frag.appendChild(f)}function g(a,c){if(a||(a=b),k)return a.createDocumentFragment();c=c||e(a);for(var f=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)f.createElement(h[g]);return f}function h(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return s.shivMethods?f(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(s,b.frag)}function i(a){a||(a=b);var d=e(a);return!s.shivCSS||j||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),k||h(a,d),a}var j,k,l="3.7.0",m=a.html5||{},n=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,o=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,p="_html5shiv",q=0,r={};!function(){try{var a=b.createElement("a");a.innerHTML="<xyz></xyz>",j="hidden"in a,k=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){j=!0,k=!0}}();var s={elements:m.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output progress section summary template time video",version:l,shivCSS:m.shivCSS!==!1,supportsUnknownElements:k,shivMethods:m.shivMethods!==!1,type:"default",shivDocument:i,createElement:f,createDocumentFragment:g};a.html5=s,i(b)}(this,b),o._version=n,o._prefixes=x,o._domPrefixes=A,o._cssomPrefixes=z,o.mq=I,o.hasEvent=J,o.testProp=function(a){return h([a])},o.testAllProps=j,o.testStyles=H,o.prefixed=function(a,b,c){return b?j(a,b,c):j(a,"pfx")},q.className=q.className.replace(/(^|\s)no-js(\s|$)/,"$1$2")+(p?" js "+F.join(" "):""),o}(this,this.document);
\ No newline at end of file
diff --git a/js/foundation/js/vendor/placeholder.js b/js/foundation/js/vendor/placeholder.js
new file mode 100644 (file)
index 0000000..caa5495
--- /dev/null
@@ -0,0 +1,2 @@
+/*! http://mths.be/placeholder v2.0.9 by @mathias */
+!function(a){"function"==typeof define&&define.amd?define(["jquery"],a):a(jQuery)}(function(a){function b(b){var c={},d=/^jQuery\d+$/;return a.each(b.attributes,function(a,b){b.specified&&!d.test(b.name)&&(c[b.name]=b.value)}),c}function c(b,c){var d=this,f=a(d);if(d.value==f.attr("placeholder")&&f.hasClass("placeholder"))if(f.data("placeholder-password")){if(f=f.hide().nextAll('input[type="password"]:first').show().attr("id",f.removeAttr("id").data("placeholder-id")),b===!0)return f[0].value=c;f.focus()}else d.value="",f.removeClass("placeholder"),d==e()&&d.select()}function d(){var d,e=this,f=a(e),g=this.id;if(""===e.value){if("password"===e.type){if(!f.data("placeholder-textinput")){try{d=f.clone().attr({type:"text"})}catch(h){d=a("<input>").attr(a.extend(b(this),{type:"text"}))}d.removeAttr("name").data({"placeholder-password":f,"placeholder-id":g}).bind("focus.placeholder",c),f.data({"placeholder-textinput":d,"placeholder-id":g}).before(d)}f=f.removeAttr("id").hide().prevAll('input[type="text"]:first').attr("id",g).show()}f.addClass("placeholder"),f[0].value=f.attr("placeholder")}else f.removeClass("placeholder")}function e(){try{return document.activeElement}catch(a){}}var f,g,h="[object OperaMini]"==Object.prototype.toString.call(window.operamini),i="placeholder"in document.createElement("input")&&!h,j="placeholder"in document.createElement("textarea")&&!h,k=a.valHooks,l=a.propHooks;i&&j?(g=a.fn.placeholder=function(){return this},g.input=g.textarea=!0):(g=a.fn.placeholder=function(){var a=this;return a.filter((i?"textarea":":input")+"[placeholder]").not(".placeholder").bind({"focus.placeholder":c,"blur.placeholder":d}).data("placeholder-enabled",!0).trigger("blur.placeholder"),a},g.input=i,g.textarea=j,f={get:function(b){var c=a(b),d=c.data("placeholder-password");return d?d[0].value:c.data("placeholder-enabled")&&c.hasClass("placeholder")?"":b.value},set:function(b,f){var g=a(b),h=g.data("placeholder-password");return h?h[0].value=f:g.data("placeholder-enabled")?(""===f?(b.value=f,b!=e()&&d.call(b)):g.hasClass("placeholder")?c.call(b,!0,f)||(b.value=f):b.value=f,g):b.value=f}},i||(k.input=f,l.value=f),j||(k.textarea=f,l.value=f),a(function(){a(document).delegate("form","submit.placeholder",function(){var b=a(".placeholder",this).each(c);setTimeout(function(){b.each(d)},10)})}),a(window).bind("beforeunload.placeholder",function(){a(".placeholder").each(function(){this.value=""})}))});
\ No newline at end of file
diff --git a/js/html5shiv.js b/js/html5shiv.js
deleted file mode 100644 (file)
index 77dace4..0000000
+++ /dev/null
@@ -1,322 +0,0 @@
-/**
-* @preserve HTML5 Shiv 3.7.2 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
-*/
-;(function(window, document) {
-/*jshint evil:true */
-  /** version */
-  var version = '3.7.2';
-
-  /** Preset options */
-  var options = window.html5 || {};
-
-  /** Used to skip problem elements */
-  var reSkip = /^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i;
-
-  /** Not all elements can be cloned in IE **/
-  var saveClones = /^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i;
-
-  /** Detect whether the browser supports default html5 styles */
-  var supportsHtml5Styles;
-
-  /** Name of the expando, to work with multiple documents or to re-shiv one document */
-  var expando = '_html5shiv';
-
-  /** The id for the the documents expando */
-  var expanID = 0;
-
-  /** Cached data for each document */
-  var expandoData = {};
-
-  /** Detect whether the browser supports unknown elements */
-  var supportsUnknownElements;
-
-  (function() {
-    try {
-        var a = document.createElement('a');
-        a.innerHTML = '<xyz></xyz>';
-        //if the hidden property is implemented we can assume, that the browser supports basic HTML5 Styles
-        supportsHtml5Styles = ('hidden' in a);
-
-        supportsUnknownElements = a.childNodes.length == 1 || (function() {
-          // assign a false positive if unable to shiv
-          (document.createElement)('a');
-          var frag = document.createDocumentFragment();
-          return (
-            typeof frag.cloneNode == 'undefined' ||
-            typeof frag.createDocumentFragment == 'undefined' ||
-            typeof frag.createElement == 'undefined'
-          );
-        }());
-    } catch(e) {
-      // assign a false positive if detection fails => unable to shiv
-      supportsHtml5Styles = true;
-      supportsUnknownElements = true;
-    }
-
-  }());
-
-  /*--------------------------------------------------------------------------*/
-
-  /**
-   * Creates a style sheet with the given CSS text and adds it to the document.
-   * @private
-   * @param {Document} ownerDocument The document.
-   * @param {String} cssText The CSS text.
-   * @returns {StyleSheet} The style element.
-   */
-  function addStyleSheet(ownerDocument, cssText) {
-    var p = ownerDocument.createElement('p'),
-        parent = ownerDocument.getElementsByTagName('head')[0] || ownerDocument.documentElement;
-
-    p.innerHTML = 'x<style>' + cssText + '</style>';
-    return parent.insertBefore(p.lastChild, parent.firstChild);
-  }
-
-  /**
-   * Returns the value of `html5.elements` as an array.
-   * @private
-   * @returns {Array} An array of shived element node names.
-   */
-  function getElements() {
-    var elements = html5.elements;
-    return typeof elements == 'string' ? elements.split(' ') : elements;
-  }
-
-  /**
-   * Extends the built-in list of html5 elements
-   * @memberOf html5
-   * @param {String|Array} newElements whitespace separated list or array of new element names to shiv
-   * @param {Document} ownerDocument The context document.
-   */
-  function addElements(newElements, ownerDocument) {
-    var elements = html5.elements;
-    if(typeof elements != 'string'){
-      elements = elements.join(' ');
-    }
-    if(typeof newElements != 'string'){
-      newElements = newElements.join(' ');
-    }
-    html5.elements = elements +' '+ newElements;
-    shivDocument(ownerDocument);
-  }
-
-   /**
-   * Returns the data associated to the given document
-   * @private
-   * @param {Document} ownerDocument The document.
-   * @returns {Object} An object of data.
-   */
-  function getExpandoData(ownerDocument) {
-    var data = expandoData[ownerDocument[expando]];
-    if (!data) {
-        data = {};
-        expanID++;
-        ownerDocument[expando] = expanID;
-        expandoData[expanID] = data;
-    }
-    return data;
-  }
-
-  /**
-   * returns a shived element for the given nodeName and document
-   * @memberOf html5
-   * @param {String} nodeName name of the element
-   * @param {Document} ownerDocument The context document.
-   * @returns {Object} The shived element.
-   */
-  function createElement(nodeName, ownerDocument, data){
-    if (!ownerDocument) {
-        ownerDocument = document;
-    }
-    if(supportsUnknownElements){
-        return ownerDocument.createElement(nodeName);
-    }
-    if (!data) {
-        data = getExpandoData(ownerDocument);
-    }
-    var node;
-
-    if (data.cache[nodeName]) {
-        node = data.cache[nodeName].cloneNode();
-    } else if (saveClones.test(nodeName)) {
-        node = (data.cache[nodeName] = data.createElem(nodeName)).cloneNode();
-    } else {
-        node = data.createElem(nodeName);
-    }
-
-    // Avoid adding some elements to fragments in IE < 9 because
-    // * Attributes like `name` or `type` cannot be set/changed once an element
-    //   is inserted into a document/fragment
-    // * Link elements with `src` attributes that are inaccessible, as with
-    //   a 403 response, will cause the tab/window to crash
-    // * Script elements appended to fragments will execute when their `src`
-    //   or `text` property is set
-    return node.canHaveChildren && !reSkip.test(nodeName) && !node.tagUrn ? data.frag.appendChild(node) : node;
-  }
-
-  /**
-   * returns a shived DocumentFragment for the given document
-   * @memberOf html5
-   * @param {Document} ownerDocument The context document.
-   * @returns {Object} The shived DocumentFragment.
-   */
-  function createDocumentFragment(ownerDocument, data){
-    if (!ownerDocument) {
-        ownerDocument = document;
-    }
-    if(supportsUnknownElements){
-        return ownerDocument.createDocumentFragment();
-    }
-    data = data || getExpandoData(ownerDocument);
-    var clone = data.frag.cloneNode(),
-        i = 0,
-        elems = getElements(),
-        l = elems.length;
-    for(;i<l;i++){
-        clone.createElement(elems[i]);
-    }
-    return clone;
-  }
-
-  /**
-   * Shivs the `createElement` and `createDocumentFragment` methods of the document.
-   * @private
-   * @param {Document|DocumentFragment} ownerDocument The document.
-   * @param {Object} data of the document.
-   */
-  function shivMethods(ownerDocument, data) {
-    if (!data.cache) {
-        data.cache = {};
-        data.createElem = ownerDocument.createElement;
-        data.createFrag = ownerDocument.createDocumentFragment;
-        data.frag = data.createFrag();
-    }
-
-
-    ownerDocument.createElement = function(nodeName) {
-      //abort shiv
-      if (!html5.shivMethods) {
-          return data.createElem(nodeName);
-      }
-      return createElement(nodeName, ownerDocument, data);
-    };
-
-    ownerDocument.createDocumentFragment = Function('h,f', 'return function(){' +
-      'var n=f.cloneNode(),c=n.createElement;' +
-      'h.shivMethods&&(' +
-        // unroll the `createElement` calls
-        getElements().join().replace(/[\w\-:]+/g, function(nodeName) {
-          data.createElem(nodeName);
-          data.frag.createElement(nodeName);
-          return 'c("' + nodeName + '")';
-        }) +
-      ');return n}'
-    )(html5, data.frag);
-  }
-
-  /*--------------------------------------------------------------------------*/
-
-  /**
-   * Shivs the given document.
-   * @memberOf html5
-   * @param {Document} ownerDocument The document to shiv.
-   * @returns {Document} The shived document.
-   */
-  function shivDocument(ownerDocument) {
-    if (!ownerDocument) {
-        ownerDocument = document;
-    }
-    var data = getExpandoData(ownerDocument);
-
-    if (html5.shivCSS && !supportsHtml5Styles && !data.hasCSS) {
-      data.hasCSS = !!addStyleSheet(ownerDocument,
-        // corrects block display not defined in IE6/7/8/9
-        'article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}' +
-        // adds styling not present in IE6/7/8/9
-        'mark{background:#FF0;color:#000}' +
-        // hides non-rendered elements
-        'template{display:none}'
-      );
-    }
-    if (!supportsUnknownElements) {
-      shivMethods(ownerDocument, data);
-    }
-    return ownerDocument;
-  }
-
-  /*--------------------------------------------------------------------------*/
-
-  /**
-   * The `html5` object is exposed so that more elements can be shived and
-   * existing shiving can be detected on iframes.
-   * @type Object
-   * @example
-   *
-   * // options can be changed before the script is included
-   * html5 = { 'elements': 'mark section', 'shivCSS': false, 'shivMethods': false };
-   */
-  var html5 = {
-
-    /**
-     * An array or space separated string of node names of the elements to shiv.
-     * @memberOf html5
-     * @type Array|String
-     */
-    'elements': options.elements || 'abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video',
-
-    /**
-     * current version of html5shiv
-     */
-    'version': version,
-
-    /**
-     * A flag to indicate that the HTML5 style sheet should be inserted.
-     * @memberOf html5
-     * @type Boolean
-     */
-    'shivCSS': (options.shivCSS !== false),
-
-    /**
-     * Is equal to true if a browser supports creating unknown/HTML5 elements
-     * @memberOf html5
-     * @type boolean
-     */
-    'supportsUnknownElements': supportsUnknownElements,
-
-    /**
-     * A flag to indicate that the document's `createElement` and `createDocumentFragment`
-     * methods should be overwritten.
-     * @memberOf html5
-     * @type Boolean
-     */
-    'shivMethods': (options.shivMethods !== false),
-
-    /**
-     * A string to describe the type of `html5` object ("default" or "default print").
-     * @memberOf html5
-     * @type String
-     */
-    'type': 'default',
-
-    // shivs the document according to the specified `html5` object options
-    'shivDocument': shivDocument,
-
-    //creates a shived element
-    createElement: createElement,
-
-    //creates a shived documentFragment
-    createDocumentFragment: createDocumentFragment,
-
-    //extends list of elements
-    addElements: addElements
-  };
-
-  /*--------------------------------------------------------------------------*/
-
-  // expose html5
-  window.html5 = html5;
-
-  // shiv the document
-  shivDocument(document);
-
-}(this, document));
diff --git a/js/jquery-placeholder/jquery.placeholder.js b/js/jquery-placeholder/jquery.placeholder.js
new file mode 100644 (file)
index 0000000..94e5e2c
--- /dev/null
@@ -0,0 +1,192 @@
+/*! http://mths.be/placeholder v2.0.9 by @mathias */
+(function(factory) {
+       if (typeof define === 'function' && define.amd) {
+               // AMD
+               define(['jquery'], factory);
+       } else {
+               // Browser globals
+               factory(jQuery);
+       }
+}(function($) {
+
+       // Opera Mini v7 doesn’t support placeholder although its DOM seems to indicate so
+       var isOperaMini = Object.prototype.toString.call(window.operamini) == '[object OperaMini]';
+       var isInputSupported = 'placeholder' in document.createElement('input') && !isOperaMini;
+       var isTextareaSupported = 'placeholder' in document.createElement('textarea') && !isOperaMini;
+       var valHooks = $.valHooks;
+       var propHooks = $.propHooks;
+       var hooks;
+       var placeholder;
+
+       if (isInputSupported && isTextareaSupported) {
+
+               placeholder = $.fn.placeholder = function() {
+                       return this;
+               };
+
+               placeholder.input = placeholder.textarea = true;
+
+       } else {
+
+               placeholder = $.fn.placeholder = function() {
+                       var $this = this;
+                       $this
+                               .filter((isInputSupported ? 'textarea' : ':input') + '[placeholder]')
+                               .not('.placeholder')
+                               .bind({
+                                       'focus.placeholder': clearPlaceholder,
+                                       'blur.placeholder': setPlaceholder
+                               })
+                               .data('placeholder-enabled', true)
+                               .trigger('blur.placeholder');
+                       return $this;
+               };
+
+               placeholder.input = isInputSupported;
+               placeholder.textarea = isTextareaSupported;
+
+               hooks = {
+                       'get': function(element) {
+                               var $element = $(element);
+
+                               var $passwordInput = $element.data('placeholder-password');
+                               if ($passwordInput) {
+                                       return $passwordInput[0].value;
+                               }
+
+                               return $element.data('placeholder-enabled') && $element.hasClass('placeholder') ? '' : element.value;
+                       },
+                       'set': function(element, value) {
+                               var $element = $(element);
+
+                               var $passwordInput = $element.data('placeholder-password');
+                               if ($passwordInput) {
+                                       return $passwordInput[0].value = value;
+                               }
+
+                               if (!$element.data('placeholder-enabled')) {
+                                       return element.value = value;
+                               }
+                               if (value === '') {
+                                       element.value = value;
+                                       // Issue #56: Setting the placeholder causes problems if the element continues to have focus.
+                                       if (element != safeActiveElement()) {
+                                               // We can't use `triggerHandler` here because of dummy text/password inputs :(
+                                               setPlaceholder.call(element);
+                                       }
+                               } else if ($element.hasClass('placeholder')) {
+                                       clearPlaceholder.call(element, true, value) || (element.value = value);
+                               } else {
+                                       element.value = value;
+                               }
+                               // `set` can not return `undefined`; see http://jsapi.info/jquery/1.7.1/val#L2363
+                               return $element;
+                       }
+               };
+
+               if (!isInputSupported) {
+                       valHooks.input = hooks;
+                       propHooks.value = hooks;
+               }
+               if (!isTextareaSupported) {
+                       valHooks.textarea = hooks;
+                       propHooks.value = hooks;
+               }
+
+               $(function() {
+                       // Look for forms
+                       $(document).delegate('form', 'submit.placeholder', function() {
+                               // Clear the placeholder values so they don't get submitted
+                               var $inputs = $('.placeholder', this).each(clearPlaceholder);
+                               setTimeout(function() {
+                                       $inputs.each(setPlaceholder);
+                               }, 10);
+                       });
+               });
+
+               // Clear placeholder values upon page reload
+               $(window).bind('beforeunload.placeholder', function() {
+                       $('.placeholder').each(function() {
+                               this.value = '';
+                       });
+               });
+
+       }
+
+       function args(elem) {
+               // Return an object of element attributes
+               var newAttrs = {};
+               var rinlinejQuery = /^jQuery\d+$/;
+               $.each(elem.attributes, function(i, attr) {
+                       if (attr.specified && !rinlinejQuery.test(attr.name)) {
+                               newAttrs[attr.name] = attr.value;
+                       }
+               });
+               return newAttrs;
+       }
+
+       function clearPlaceholder(event, value) {
+               var input = this;
+               var $input = $(input);
+               if (input.value == $input.attr('placeholder') && $input.hasClass('placeholder')) {
+                       if ($input.data('placeholder-password')) {
+                               $input = $input.hide().nextAll('input[type="password"]:first').show().attr('id', $input.removeAttr('id').data('placeholder-id'));
+                               // If `clearPlaceholder` was called from `$.valHooks.input.set`
+                               if (event === true) {
+                                       return $input[0].value = value;
+                               }
+                               $input.focus();
+                       } else {
+                               input.value = '';
+                               $input.removeClass('placeholder');
+                               input == safeActiveElement() && input.select();
+                       }
+               }
+       }
+
+       function setPlaceholder() {
+               var $replacement;
+               var input = this;
+               var $input = $(input);
+               var id = this.id;
+               if (input.value === '') {
+                       if (input.type === 'password') {
+                               if (!$input.data('placeholder-textinput')) {
+                                       try {
+                                               $replacement = $input.clone().attr({ 'type': 'text' });
+                                       } catch(e) {
+                                               $replacement = $('<input>').attr($.extend(args(this), { 'type': 'text' }));
+                                       }
+                                       $replacement
+                                               .removeAttr('name')
+                                               .data({
+                                                       'placeholder-password': $input,
+                                                       'placeholder-id': id
+                                               })
+                                               .bind('focus.placeholder', clearPlaceholder);
+                                       $input
+                                               .data({
+                                                       'placeholder-textinput': $replacement,
+                                                       'placeholder-id': id
+                                               })
+                                               .before($replacement);
+                               }
+                               $input = $input.removeAttr('id').hide().prevAll('input[type="text"]:first').attr('id', id).show();
+                               // Note: `$input[0] != input` now!
+                       }
+                       $input.addClass('placeholder');
+                       $input[0].value = $input.attr('placeholder');
+               } else {
+                       $input.removeClass('placeholder');
+               }
+       }
+
+       function safeActiveElement() {
+               // Avoid IE9 `document.activeElement` of death
+               // https://github.com/mathiasbynens/jquery-placeholder/pull/99
+               try {
+                       return document.activeElement;
+               } catch (exception) {}
+       }
+
+}));
diff --git a/js/jquery.cookie/jquery.cookie.js b/js/jquery.cookie/jquery.cookie.js
new file mode 100644 (file)
index 0000000..c7f3a59
--- /dev/null
@@ -0,0 +1,117 @@
+/*!
+ * jQuery Cookie Plugin v1.4.1
+ * https://github.com/carhartl/jquery-cookie
+ *
+ * Copyright 2013 Klaus Hartl
+ * Released under the MIT license
+ */
+(function (factory) {
+       if (typeof define === 'function' && define.amd) {
+               // AMD
+               define(['jquery'], factory);
+       } else if (typeof exports === 'object') {
+               // CommonJS
+               factory(require('jquery'));
+       } else {
+               // Browser globals
+               factory(jQuery);
+       }
+}(function ($) {
+
+       var pluses = /\+/g;
+
+       function encode(s) {
+               return config.raw ? s : encodeURIComponent(s);
+       }
+
+       function decode(s) {
+               return config.raw ? s : decodeURIComponent(s);
+       }
+
+       function stringifyCookieValue(value) {
+               return encode(config.json ? JSON.stringify(value) : String(value));
+       }
+
+       function parseCookieValue(s) {
+               if (s.indexOf('"') === 0) {
+                       // This is a quoted cookie as according to RFC2068, unescape...
+                       s = s.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, '\\');
+               }
+
+               try {
+                       // Replace server-side written pluses with spaces.
+                       // If we can't decode the cookie, ignore it, it's unusable.
+                       // If we can't parse the cookie, ignore it, it's unusable.
+                       s = decodeURIComponent(s.replace(pluses, ' '));
+                       return config.json ? JSON.parse(s) : s;
+               } catch(e) {}
+       }
+
+       function read(s, converter) {
+               var value = config.raw ? s : parseCookieValue(s);
+               return $.isFunction(converter) ? converter(value) : value;
+       }
+
+       var config = $.cookie = function (key, value, options) {
+
+               // Write
+
+               if (value !== undefined && !$.isFunction(value)) {
+                       options = $.extend({}, config.defaults, options);
+
+                       if (typeof options.expires === 'number') {
+                               var days = options.expires, t = options.expires = new Date();
+                               t.setTime(+t + days * 864e+5);
+                       }
+
+                       return (document.cookie = [
+                               encode(key), '=', stringifyCookieValue(value),
+                               options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE
+                               options.path    ? '; path=' + options.path : '',
+                               options.domain  ? '; domain=' + options.domain : '',
+                               options.secure  ? '; secure' : ''
+                       ].join(''));
+               }
+
+               // Read
+
+               var result = key ? undefined : {};
+
+               // To prevent the for loop in the first place assign an empty array
+               // in case there are no cookies at all. Also prevents odd result when
+               // calling $.cookie().
+               var cookies = document.cookie ? document.cookie.split('; ') : [];
+
+               for (var i = 0, l = cookies.length; i < l; i++) {
+                       var parts = cookies[i].split('=');
+                       var name = decode(parts.shift());
+                       var cookie = parts.join('=');
+
+                       if (key && key === name) {
+                               // If second argument (value) is a function it's a converter...
+                               result = read(cookie, value);
+                               break;
+                       }
+
+                       // Prevent storing a cookie that we couldn't decode.
+                       if (!key && (cookie = read(cookie)) !== undefined) {
+                               result[name] = cookie;
+                       }
+               }
+
+               return result;
+       };
+
+       config.defaults = {};
+
+       $.removeCookie = function (key, options) {
+               if ($.cookie(key) === undefined) {
+                       return false;
+               }
+
+               // Must not alter options, thus extending a fresh object...
+               $.cookie(key, '', $.extend({}, options, { expires: -1 }));
+               return !$.cookie(key);
+       };
+
+}));
diff --git a/js/jquery.easing.js b/js/jquery.easing.js
deleted file mode 100644 (file)
index ef74321..0000000
+++ /dev/null
@@ -1,205 +0,0 @@
-/*
- * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/
- *
- * Uses the built in easing capabilities added In jQuery 1.1
- * to offer multiple easing options
- *
- * TERMS OF USE - jQuery Easing
- * 
- * Open source under the BSD License. 
- * 
- * Copyright © 2008 George McGinley Smith
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without modification, 
- * are permitted provided that the following conditions are met:
- * 
- * Redistributions of source code must retain the above copyright notice, this list of 
- * conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright notice, this list 
- * of conditions and the following disclaimer in the documentation and/or other materials 
- * provided with the distribution.
- * 
- * Neither the name of the author nor the names of contributors may be used to endorse 
- * or promote products derived from this software without specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY 
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- *  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- *  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
- *  GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 
- * OF THE POSSIBILITY OF SUCH DAMAGE. 
- *
-*/
-
-// t: current time, b: begInnIng value, c: change In value, d: duration
-jQuery.easing['jswing'] = jQuery.easing['swing'];
-
-jQuery.extend( jQuery.easing,
-{
-       def: 'easeOutQuad',
-       swing: function (x, t, b, c, d) {
-               //alert(jQuery.easing.default);
-               return jQuery.easing[jQuery.easing.def](x, t, b, c, d);
-       },
-       easeInQuad: function (x, t, b, c, d) {
-               return c*(t/=d)*t + b;
-       },
-       easeOutQuad: function (x, t, b, c, d) {
-               return -c *(t/=d)*(t-2) + b;
-       },
-       easeInOutQuad: function (x, t, b, c, d) {
-               if ((t/=d/2) < 1) return c/2*t*t + b;
-               return -c/2 * ((--t)*(t-2) - 1) + b;
-       },
-       easeInCubic: function (x, t, b, c, d) {
-               return c*(t/=d)*t*t + b;
-       },
-       easeOutCubic: function (x, t, b, c, d) {
-               return c*((t=t/d-1)*t*t + 1) + b;
-       },
-       easeInOutCubic: function (x, t, b, c, d) {
-               if ((t/=d/2) < 1) return c/2*t*t*t + b;
-               return c/2*((t-=2)*t*t + 2) + b;
-       },
-       easeInQuart: function (x, t, b, c, d) {
-               return c*(t/=d)*t*t*t + b;
-       },
-       easeOutQuart: function (x, t, b, c, d) {
-               return -c * ((t=t/d-1)*t*t*t - 1) + b;
-       },
-       easeInOutQuart: function (x, t, b, c, d) {
-               if ((t/=d/2) < 1) return c/2*t*t*t*t + b;
-               return -c/2 * ((t-=2)*t*t*t - 2) + b;
-       },
-       easeInQuint: function (x, t, b, c, d) {
-               return c*(t/=d)*t*t*t*t + b;
-       },
-       easeOutQuint: function (x, t, b, c, d) {
-               return c*((t=t/d-1)*t*t*t*t + 1) + b;
-       },
-       easeInOutQuint: function (x, t, b, c, d) {
-               if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b;
-               return c/2*((t-=2)*t*t*t*t + 2) + b;
-       },
-       easeInSine: function (x, t, b, c, d) {
-               return -c * Math.cos(t/d * (Math.PI/2)) + c + b;
-       },
-       easeOutSine: function (x, t, b, c, d) {
-               return c * Math.sin(t/d * (Math.PI/2)) + b;
-       },
-       easeInOutSine: function (x, t, b, c, d) {
-               return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b;
-       },
-       easeInExpo: function (x, t, b, c, d) {
-               return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b;
-       },
-       easeOutExpo: function (x, t, b, c, d) {
-               return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b;
-       },
-       easeInOutExpo: function (x, t, b, c, d) {
-               if (t==0) return b;
-               if (t==d) return b+c;
-               if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b;
-               return c/2 * (-Math.pow(2, -10 * --t) + 2) + b;
-       },
-       easeInCirc: function (x, t, b, c, d) {
-               return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b;
-       },
-       easeOutCirc: function (x, t, b, c, d) {
-               return c * Math.sqrt(1 - (t=t/d-1)*t) + b;
-       },
-       easeInOutCirc: function (x, t, b, c, d) {
-               if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b;
-               return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b;
-       },
-       easeInElastic: function (x, t, b, c, d) {
-               var s=1.70158;var p=0;var a=c;
-               if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;
-               if (a < Math.abs(c)) { a=c; var s=p/4; }
-               else var s = p/(2*Math.PI) * Math.asin (c/a);
-               return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
-       },
-       easeOutElastic: function (x, t, b, c, d) {
-               var s=1.70158;var p=0;var a=c;
-               if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;
-               if (a < Math.abs(c)) { a=c; var s=p/4; }
-               else var s = p/(2*Math.PI) * Math.asin (c/a);
-               return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b;
-       },
-       easeInOutElastic: function (x, t, b, c, d) {
-               var s=1.70158;var p=0;var a=c;
-               if (t==0) return b;  if ((t/=d/2)==2) return b+c;  if (!p) p=d*(.3*1.5);
-               if (a < Math.abs(c)) { a=c; var s=p/4; }
-               else var s = p/(2*Math.PI) * Math.asin (c/a);
-               if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
-               return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b;
-       },
-       easeInBack: function (x, t, b, c, d, s) {
-               if (s == undefined) s = 1.70158;
-               return c*(t/=d)*t*((s+1)*t - s) + b;
-       },
-       easeOutBack: function (x, t, b, c, d, s) {
-               if (s == undefined) s = 1.70158;
-               return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;
-       },
-       easeInOutBack: function (x, t, b, c, d, s) {
-               if (s == undefined) s = 1.70158; 
-               if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b;
-               return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b;
-       },
-       easeInBounce: function (x, t, b, c, d) {
-               return c - jQuery.easing.easeOutBounce (x, d-t, 0, c, d) + b;
-       },
-       easeOutBounce: function (x, t, b, c, d) {
-               if ((t/=d) < (1/2.75)) {
-                       return c*(7.5625*t*t) + b;
-               } else if (t < (2/2.75)) {
-                       return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;
-               } else if (t < (2.5/2.75)) {
-                       return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;
-               } else {
-                       return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;
-               }
-       },
-       easeInOutBounce: function (x, t, b, c, d) {
-               if (t < d/2) return jQuery.easing.easeInBounce (x, t*2, 0, c, d) * .5 + b;
-               return jQuery.easing.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b;
-       }
-});
-
-/*
- *
- * TERMS OF USE - EASING EQUATIONS
- * 
- * Open source under the BSD License. 
- * 
- * Copyright © 2001 Robert Penner
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without modification, 
- * are permitted provided that the following conditions are met:
- * 
- * Redistributions of source code must retain the above copyright notice, this list of 
- * conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright notice, this list 
- * of conditions and the following disclaimer in the documentation and/or other materials 
- * provided with the distribution.
- * 
- * Neither the name of the author nor the names of contributors may be used to endorse 
- * or promote products derived from this software without specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY 
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- *  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- *  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
- *  GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 
- * OF THE POSSIBILITY OF SUCH DAMAGE. 
- *
- */
\ No newline at end of file
diff --git a/js/jquery.easing.min.js b/js/jquery.easing.min.js
deleted file mode 100644 (file)
index 83a4324..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/
- *
- * Uses the built in easing capabilities added In jQuery 1.1
- * to offer multiple easing options
- *
- * TERMS OF USE - EASING EQUATIONS
- * 
- * Open source under the BSD License. 
- * 
- * Copyright Â© 2001 Robert Penner
- * All rights reserved.
- *
- * TERMS OF USE - jQuery Easing
- * 
- * Open source under the BSD License. 
- * 
- * Copyright Â© 2008 George McGinley Smith
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without modification, 
- * are permitted provided that the following conditions are met:
- * 
- * Redistributions of source code must retain the above copyright notice, this list of 
- * conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright notice, this list 
- * of conditions and the following disclaimer in the documentation and/or other materials 
- * provided with the distribution.
- * 
- * Neither the name of the author nor the names of contributors may be used to endorse 
- * or promote products derived from this software without specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY 
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- *  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- *  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
- *  GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 
- * OF THE POSSIBILITY OF SUCH DAMAGE. 
- *
-*/
-jQuery.easing.jswing=jQuery.easing.swing;jQuery.extend(jQuery.easing,{def:"easeOutQuad",swing:function(e,f,a,h,g){return jQuery.easing[jQuery.easing.def](e,f,a,h,g)},easeInQuad:function(e,f,a,h,g){return h*(f/=g)*f+a},easeOutQuad:function(e,f,a,h,g){return -h*(f/=g)*(f-2)+a},easeInOutQuad:function(e,f,a,h,g){if((f/=g/2)<1){return h/2*f*f+a}return -h/2*((--f)*(f-2)-1)+a},easeInCubic:function(e,f,a,h,g){return h*(f/=g)*f*f+a},easeOutCubic:function(e,f,a,h,g){return h*((f=f/g-1)*f*f+1)+a},easeInOutCubic:function(e,f,a,h,g){if((f/=g/2)<1){return h/2*f*f*f+a}return h/2*((f-=2)*f*f+2)+a},easeInQuart:function(e,f,a,h,g){return h*(f/=g)*f*f*f+a},easeOutQuart:function(e,f,a,h,g){return -h*((f=f/g-1)*f*f*f-1)+a},easeInOutQuart:function(e,f,a,h,g){if((f/=g/2)<1){return h/2*f*f*f*f+a}return -h/2*((f-=2)*f*f*f-2)+a},easeInQuint:function(e,f,a,h,g){return h*(f/=g)*f*f*f*f+a},easeOutQuint:function(e,f,a,h,g){return h*((f=f/g-1)*f*f*f*f+1)+a},easeInOutQuint:function(e,f,a,h,g){if((f/=g/2)<1){return h/2*f*f*f*f*f+a}return h/2*((f-=2)*f*f*f*f+2)+a},easeInSine:function(e,f,a,h,g){return -h*Math.cos(f/g*(Math.PI/2))+h+a},easeOutSine:function(e,f,a,h,g){return h*Math.sin(f/g*(Math.PI/2))+a},easeInOutSine:function(e,f,a,h,g){return -h/2*(Math.cos(Math.PI*f/g)-1)+a},easeInExpo:function(e,f,a,h,g){return(f==0)?a:h*Math.pow(2,10*(f/g-1))+a},easeOutExpo:function(e,f,a,h,g){return(f==g)?a+h:h*(-Math.pow(2,-10*f/g)+1)+a},easeInOutExpo:function(e,f,a,h,g){if(f==0){return a}if(f==g){return a+h}if((f/=g/2)<1){return h/2*Math.pow(2,10*(f-1))+a}return h/2*(-Math.pow(2,-10*--f)+2)+a},easeInCirc:function(e,f,a,h,g){return -h*(Math.sqrt(1-(f/=g)*f)-1)+a},easeOutCirc:function(e,f,a,h,g){return h*Math.sqrt(1-(f=f/g-1)*f)+a},easeInOutCirc:function(e,f,a,h,g){if((f/=g/2)<1){return -h/2*(Math.sqrt(1-f*f)-1)+a}return h/2*(Math.sqrt(1-(f-=2)*f)+1)+a},easeInElastic:function(f,h,e,l,k){var i=1.70158;var j=0;var g=l;if(h==0){return e}if((h/=k)==1){return e+l}if(!j){j=k*0.3}if(g<Math.abs(l)){g=l;var i=j/4}else{var i=j/(2*Math.PI)*Math.asin(l/g)}return -(g*Math.pow(2,10*(h-=1))*Math.sin((h*k-i)*(2*Math.PI)/j))+e},easeOutElastic:function(f,h,e,l,k){var i=1.70158;var j=0;var g=l;if(h==0){return e}if((h/=k)==1){return e+l}if(!j){j=k*0.3}if(g<Math.abs(l)){g=l;var i=j/4}else{var i=j/(2*Math.PI)*Math.asin(l/g)}return g*Math.pow(2,-10*h)*Math.sin((h*k-i)*(2*Math.PI)/j)+l+e},easeInOutElastic:function(f,h,e,l,k){var i=1.70158;var j=0;var g=l;if(h==0){return e}if((h/=k/2)==2){return e+l}if(!j){j=k*(0.3*1.5)}if(g<Math.abs(l)){g=l;var i=j/4}else{var i=j/(2*Math.PI)*Math.asin(l/g)}if(h<1){return -0.5*(g*Math.pow(2,10*(h-=1))*Math.sin((h*k-i)*(2*Math.PI)/j))+e}return g*Math.pow(2,-10*(h-=1))*Math.sin((h*k-i)*(2*Math.PI)/j)*0.5+l+e},easeInBack:function(e,f,a,i,h,g){if(g==undefined){g=1.70158}return i*(f/=h)*f*((g+1)*f-g)+a},easeOutBack:function(e,f,a,i,h,g){if(g==undefined){g=1.70158}return i*((f=f/h-1)*f*((g+1)*f+g)+1)+a},easeInOutBack:function(e,f,a,i,h,g){if(g==undefined){g=1.70158}if((f/=h/2)<1){return i/2*(f*f*(((g*=(1.525))+1)*f-g))+a}return i/2*((f-=2)*f*(((g*=(1.525))+1)*f+g)+2)+a},easeInBounce:function(e,f,a,h,g){return h-jQuery.easing.easeOutBounce(e,g-f,0,h,g)+a},easeOutBounce:function(e,f,a,h,g){if((f/=g)<(1/2.75)){return h*(7.5625*f*f)+a}else{if(f<(2/2.75)){return h*(7.5625*(f-=(1.5/2.75))*f+0.75)+a}else{if(f<(2.5/2.75)){return h*(7.5625*(f-=(2.25/2.75))*f+0.9375)+a}else{return h*(7.5625*(f-=(2.625/2.75))*f+0.984375)+a}}}},easeInOutBounce:function(e,f,a,h,g){if(f<g/2){return jQuery.easing.easeInBounce(e,f*2,0,h,g)*0.5+a}return jQuery.easing.easeOutBounce(e,f*2-g,0,h,g)*0.5+h*0.5+a}});
diff --git a/js/jquery.fitvids.js b/js/jquery.fitvids.js
deleted file mode 100644 (file)
index d464f93..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-/*global jQuery */
-/*jshint multistr:true browser:true */
-/*!
-* FitVids 1.0
-*
-* Copyright 2011, Chris Coyier - http://css-tricks.com + Dave Rupert - http://daverupert.com
-* Credit to Thierry Koblentz - http://www.alistapart.com/articles/creating-intrinsic-ratios-for-video/
-* Released under the WTFPL license - http://sam.zoy.org/wtfpl/
-*
-* Date: Thu Sept 01 18:00:00 2011 -0500
-*/
-
-(function( $ ){
-
-  "use strict";
-
-  $.fn.fitVids = function( options ) {
-    var settings = {
-      customSelector: null
-    };
-
-    var div = document.createElement('div'),
-        ref = document.getElementsByTagName('base')[0] || document.getElementsByTagName('script')[0];
-
-    div.className = 'fit-vids-style';
-    div.innerHTML = '&shy;<style>         \
-      .fluid-width-video-wrapper {        \
-         width: 100%;                     \
-         position: relative;              \
-         padding: 0;                      \
-      }                                   \
-                                          \
-      .fluid-width-video-wrapper iframe,  \
-      .fluid-width-video-wrapper object,  \
-      .fluid-width-video-wrapper embed {  \
-         position: absolute;              \
-         top: 0;                          \
-         left: 0;                         \
-         width: 100%;                     \
-         height: 100%;                    \
-      }                                   \
-    </style>';
-
-    ref.parentNode.insertBefore(div,ref);
-
-    if ( options ) {
-      $.extend( settings, options );
-    }
-
-    return this.each(function(){
-      var selectors = [
-        "iframe[src*='player.vimeo.com']",
-        "iframe[src*='www.youtube.com']",
-        "iframe[src*='www.kickstarter.com']",
-        "object",
-        "embed"
-      ];
-
-      if (settings.customSelector) {
-        selectors.push(settings.customSelector);
-      }
-
-      var $allVideos = $(this).find(selectors.join(','));
-
-      $allVideos.each(function(){
-        var $this = $(this);
-        if (this.tagName.toLowerCase() === 'embed' && $this.parent('object').length || $this.parent('.fluid-width-video-wrapper').length) { return; }
-        var height = ( this.tagName.toLowerCase() === 'object' || ($this.attr('height') && !isNaN(parseInt($this.attr('height'), 10))) ) ? parseInt($this.attr('height'), 10) : $this.height(),
-            width = !isNaN(parseInt($this.attr('width'), 10)) ? parseInt($this.attr('width'), 10) : $this.width(),
-            aspectRatio = height / width;
-        if(!$this.attr('id')){
-          var videoID = 'fitvid' + Math.floor(Math.random()*999999);
-          $this.attr('id', videoID);
-        }
-        $this.wrap('<div class="fluid-width-video-wrapper"></div>').parent('.fluid-width-video-wrapper').css('padding-top', (aspectRatio * 100)+"%");
-        $this.removeAttr('height').removeAttr('width');
-      });
-    });
-  };
-})( jQuery );
diff --git a/js/jquery.localScroll.js b/js/jquery.localScroll.js
deleted file mode 100644 (file)
index 5811d41..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-/*!
- * jQuery.localScroll
- * Copyright (c) 2007-2014 Ariel Flesler - aflesler<a>gmail<d>com | http://flesler.blogspot.com
- * Licensed under MIT
- * http://flesler.blogspot.com/2007/10/jquerylocalscroll-10.html
- * @author Ariel Flesler
- * @version 1.3.5
- */
- ;(function(plugin) {
-    // AMD Support
-    if (typeof define === 'function' && define.amd) {
-        define(['jquery'], plugin);
-    } else {
-        plugin(jQuery);
-    }
-}(function($) {
-       var URI = location.href.replace(/#.*/, ''); // local url without hash
-
-       var $localScroll = $.localScroll = function(settings) {
-               $('body').localScroll(settings);
-       };
-
-       // Many of these defaults, belong to jQuery.ScrollTo, check it's demo for an example of each option.
-       // @see http://demos.flesler.com/jquery/scrollTo/
-       // The defaults are public and can be overriden.
-       $localScroll.defaults = {
-               duration: 1000, // How long to animate.
-               axis: 'y', // Which of top and left should be modified.
-               event: 'click', // On which event to react.
-               stop: true, // Avoid queuing animations 
-               target: window // What to scroll (selector or element). The whole window by default.
-               /*
-               lock: false, // ignore events if already animating
-               lazy: false, // if true, links can be added later, and will still work.
-               filter: null, // filter some anchors out of the matched elements.
-               hash: false // if true, the hash of the selected link, will appear on the address bar.
-               */
-       };
-
-       $.fn.localScroll = function(settings) {
-               settings = $.extend({}, $localScroll.defaults, settings);
-
-               if (settings.hash && location.hash) {
-                       if (settings.target) window.scrollTo(0, 0);
-                       scroll(0, location, settings);
-               }
-
-               return settings.lazy ?
-                       // use event delegation, more links can be added later.         
-                       this.on(settings.event, 'a,area', function(e) {
-                               if (filter.call(this)) {
-                                       scroll(e, this, settings); 
-                               }
-                       }) :
-                       // bind concretely, to each matching link
-                       this.find('a,area')
-                               .filter(filter).bind(settings.event, function(e) {
-                                       scroll(e, this, settings);
-                               }).end()
-                       .end();
-
-               function filter() {// is this a link that points to an anchor and passes a possible filter ? href is checked to avoid a bug in FF.
-                       return !!this.href && !!this.hash && this.href.replace(this.hash,'') == URI && (!settings.filter || $(this).is(settings.filter));
-               };
-       };
-
-       // Not needed anymore, kept for backwards compatibility
-       $localScroll.hash = function() {};
-
-       function scroll(e, link, settings) {
-               var id = link.hash.slice(1),
-                       elem = document.getElementById(id) || document.getElementsByName(id)[0];
-
-               if (!elem)
-                       return;
-
-               if (e)
-                       e.preventDefault();
-
-               var $target = $(settings.target);
-
-               if (settings.lock && $target.is(':animated') ||
-                       settings.onBefore && settings.onBefore(e, elem, $target) === false) 
-                       return;
-
-               if (settings.stop)
-                       $target._scrollable().stop(true); // remove all its animations
-
-               if (settings.hash) {
-                       var attr = elem.id === id ? 'id' : 'name',
-                               $a = $('<a> </a>').attr(attr, id).css({
-                                       position:'absolute',
-                                       top: $(window).scrollTop(),
-                                       left: $(window).scrollLeft()
-                               });
-
-                       elem[attr] = '';
-                       $('body').prepend($a);
-                       location.hash = link.hash;
-                       $a.remove();
-                       elem[attr] = id;
-               }
-                       
-               $target
-                       .scrollTo(elem, settings) // do scroll
-                       .trigger('notify.serialScroll',[elem]); // notify serialScroll about this change
-       };
-
-       // AMD requirement
-       return $localScroll;
-
-}));
\ No newline at end of file
diff --git a/js/jquery.localScroll.min.js b/js/jquery.localScroll.min.js
deleted file mode 100644 (file)
index cc64603..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-/**
- * Copyright (c) 2007 Ariel Flesler - aflesler<a>gmail<d>com | https://github.com/flesler
- * Licensed under MIT
- * @author Ariel Flesler
- * @version 2.0.0
- */
-!function(e){"function"==typeof define&&define.amd?define(["jquery"],e):e(jQuery)}(function(e){function t(t,o,n){var i=o.hash.slice(1),a=document.getElementById(i)||document.getElementsByName(i)[0];if(a){t&&t.preventDefault();var l=e(n.target);if(!(n.lock&&l.is(":animated")||n.onBefore&&!1===n.onBefore(t,a,l))){if(n.stop&&l.stop(!0),n.hash){var r=a.id===i?"id":"name",s=e("<a> </a>").attr(r,i).css({position:"absolute",top:e(window).scrollTop(),left:e(window).scrollLeft()});a[r]="",e("body").prepend(s),location.hash=o.hash,s.remove(),a[r]=i}l.scrollTo(a,n).trigger("notify.serialScroll",[a])}}}var o=location.href.replace(/#.*/,""),n=e.localScroll=function(t){e("body").localScroll(t)};return n.defaults={duration:1e3,axis:"y",event:"click",stop:!0,target:window,autoscroll:!0},e.fn.localScroll=function(i){function a(){return!!this.href&&!!this.hash&&this.href.replace(this.hash,"")===o&&(!i.filter||e(this).is(i.filter))}return(i=e.extend({},n.defaults,i)).autoscroll&&i.hash&&location.hash&&(i.target&&window.scrollTo(0,0),t(0,location,i)),i.lazy?this.on(i.event,"a,area",function(e){a.call(this)&&t(e,this,i)}):this.find("a,area").filter(a).bind(i.event,function(e){t(e,this,i)}).end().end()},n.hash=function(){},n});
diff --git a/js/jquery.nav.js b/js/jquery.nav.js
deleted file mode 100644 (file)
index de3e5af..0000000
+++ /dev/null
@@ -1,229 +0,0 @@
-/*
- * jQuery One Page Nav Plugin
- * http://github.com/davist11/jQuery-One-Page-Nav
- *
- * Copyright (c) 2010 Trevor Davis (http://trevordavis.net)
- * Dual licensed under the MIT and GPL licenses.
- * Uses the same license as jQuery, see:
- * http://jquery.org/license
- *
- * @version 3.0.0
- *
- * Example usage:
- * $('#nav').onePageNav({
- *   currentClass: 'current',
- *   changeHash: false,
- *   scrollSpeed: 750
- * });
- */
-
-;(function($, window, document, undefined){
-
-       // our plugin constructor
-       var OnePageNav = function(elem, options){
-               this.elem = elem;
-               this.$elem = $(elem);
-               this.options = options;
-               this.metadata = this.$elem.data('plugin-options');
-               this.$win = $(window);
-               this.sections = {};
-               this.didScroll = false;
-               this.$doc = $(document);
-               this.docHeight = this.$doc.height();
-       };
-
-       // the plugin prototype
-       OnePageNav.prototype = {
-               defaults: {
-                       navItems: 'a[href*="#"]',
-                       currentClass: 'current',
-                       changeHash: false,
-                       easing: 'swing',
-                       filter: '',
-                       scrollSpeed: 750,
-                       scrollOffset: 0,
-                       scrollThreshold: 0.5,
-                       begin: false,
-                       end: false,
-                       scrollChange: false
-               },
-
-               init: function() {
-                       // Introduce defaults that can be extended either
-                       // globally or using an object literal.
-                       this.config = $.extend({}, this.defaults, this.options, this.metadata);
-
-                       this.$nav = this.$elem.find(this.config.navItems);
-
-                       //Filter any links out of the nav
-                       if(this.config.filter !== '') {
-                               this.$nav = this.$nav.filter(this.config.filter);
-                       }
-
-                       //Handle clicks on the nav
-                       this.$nav.on('click.onePageNav', $.proxy(this.handleClick, this));
-
-                       //Get the section positions
-                       this.getPositions();
-
-                       //Handle scroll changes
-                       this.bindInterval();
-
-                       //Update the positions on resize too
-                       this.$win.on('resize.onePageNav', $.proxy(this.getPositions, this));
-
-                       return this;
-               },
-
-               adjustNav: function(self, $parent) {
-                       self.$elem.find('.' + self.config.currentClass).removeClass(self.config.currentClass);
-                       $parent.addClass(self.config.currentClass);
-               },
-
-               bindInterval: function() {
-                       var self = this;
-                       var docHeight;
-
-                       self.$win.on('scroll.onePageNav', function() {
-                               self.didScroll = true;
-                       });
-
-                       self.t = setInterval(function() {
-                               docHeight = self.$doc.height();
-
-                               //If it was scrolled
-                               if(self.didScroll) {
-                                       self.didScroll = false;
-                                       self.scrollChange();
-                               }
-
-                               //If the document height changes
-                               if(docHeight !== self.docHeight) {
-                                       self.docHeight = docHeight;
-                                       self.getPositions();
-                               }
-                       }, 250);
-               },
-
-               getHash: function($link) {
-                       return $link.attr('href').split('#')[1];
-               },
-
-               getPositions: function() {
-                       var self = this;
-                       var linkHref;
-                       var topPos;
-                       var $target;
-
-                       self.$nav.each(function() {
-                               linkHref = self.getHash($(this));
-                               $target = $('#' + linkHref);
-
-                               if($target.length) {
-                                       topPos = $target.offset().top;
-                                       self.sections[linkHref] = Math.round(topPos) - self.config.scrollOffset;
-                               }
-                       });
-               },
-
-               getSection: function(windowPos) {
-                       var returnValue = null;
-                       var windowHeight = Math.round(this.$win.height() * this.config.scrollThreshold);
-
-                       for(var section in this.sections) {
-                               if((this.sections[section] - windowHeight) < windowPos) {
-                                       returnValue = section;
-                               }
-                       }
-
-                       return returnValue;
-               },
-
-               handleClick: function(e) {
-                       var self = this;
-                       var $link = $(e.currentTarget);
-                       var $parent = $link.parent();
-                       var newLoc = '#' + self.getHash($link);
-
-                       //if(!$parent.hasClass(self.config.currentClass)) {
-                       if( $(newLoc).length > 0 ){
-                               //Start callback
-                               if(self.config.begin) {
-                                       self.config.begin();
-                               }
-
-                               //Change the highlighted nav item
-                               self.adjustNav(self, $parent);
-
-                               //Removing the auto-adjust on scroll
-                               self.unbindInterval();
-
-                               //Scroll to the correct position
-                               self.scrollTo(newLoc, function() {
-                                       //Do we need to change the hash?
-                                       if(self.config.changeHash) {
-                                               window.location.hash = newLoc;
-                                       }
-
-                                       //Add the auto-adjust on scroll back in
-                                       self.bindInterval();
-
-                                       //End callback
-                                       if(self.config.end) {
-                                               self.config.end();
-                                       }
-                               });
-                               e.preventDefault();
-                       }
-                       //}
-
-                       
-               },
-
-               scrollChange: function() {
-                       var windowTop = this.$win.scrollTop();
-                       var position = this.getSection(windowTop);
-                       var $parent;
-
-                       //If the position is set
-                       if(position !== null) {
-                               $parent = this.$elem.find('a[href$="#' + position + '"]').parent();
-
-                               //If it's not already the current section
-                               if(!$parent.hasClass(this.config.currentClass)) {
-                                       //Change the highlighted nav item
-                                       this.adjustNav(this, $parent);
-
-                                       //If there is a scrollChange callback
-                                       if(this.config.scrollChange) {
-                                               this.config.scrollChange($parent);
-                                       }
-                               }
-                       }
-               },
-
-               scrollTo: function(target, callback) {
-                       if($(target).length > 0){
-                               var offset = $(target).offset().top;
-
-                               $('html, body').animate({
-                                       scrollTop: offset - this.config.scrollOffset
-                               }, this.config.scrollSpeed, this.config.easing, callback);
-                       }
-               },
-
-               unbindInterval: function() {
-                       clearInterval(this.t);
-                       this.$win.unbind('scroll.onePageNav');
-               }
-       };
-
-       OnePageNav.defaults = OnePageNav.prototype.defaults;
-
-       $.fn.onePageNav = function(options) {
-               return this.each(function() {
-                       new OnePageNav(this, options).init();
-               });
-       };
-
-})( jQuery, window , document );
\ No newline at end of file
diff --git a/js/jquery.scrollTo.js b/js/jquery.scrollTo.js
deleted file mode 100644 (file)
index 8b88b8e..0000000
+++ /dev/null
@@ -1,187 +0,0 @@
-/*!
- * jQuery.scrollTo
- * Copyright (c) 2007-2014 Ariel Flesler - aflesler<a>gmail<d>com | http://flesler.blogspot.com
- * Licensed under MIT
- * http://flesler.blogspot.com/2007/10/jqueryscrollto.html
- * @projectDescription Easy element scrolling using jQuery.
- * @author Ariel Flesler
- * @version 1.4.14
- */
-;(function (define) {
-       'use strict';
-
-       define(['jquery'], function ($) {
-
-               var $scrollTo = $.scrollTo = function( target, duration, settings ) {
-                       return $(window).scrollTo( target, duration, settings );
-               };
-
-               $scrollTo.defaults = {
-                       axis:'xy',
-                       duration: 0,
-                       limit:true
-               };
-
-               // Returns the element that needs to be animated to scroll the window.
-               // Kept for backwards compatibility (specially for localScroll & serialScroll)
-               $scrollTo.window = function( scope ) {
-                       return $(window)._scrollable();
-               };
-
-               // Hack, hack, hack :)
-               // Returns the real elements to scroll (supports window/iframes, documents and regular nodes)
-               $.fn._scrollable = function() {
-                       return this.map(function() {
-                               var elem = this,
-                                       isWin = !elem.nodeName || $.inArray( elem.nodeName.toLowerCase(), ['iframe','#document','html','body'] ) != -1;
-
-                                       if (!isWin)
-                                               return elem;
-
-                               var doc = (elem.contentWindow || elem).document || elem.ownerDocument || elem;
-
-                               return /webkit/i.test(navigator.userAgent) || doc.compatMode == 'BackCompat' ?
-                                       doc.body :
-                                       doc.documentElement;
-                       });
-               };
-
-               $.fn.scrollTo = function( target, duration, settings ) {
-                       if (typeof duration == 'object') {
-                               settings = duration;
-                               duration = 0;
-                       }
-                       if (typeof settings == 'function')
-                               settings = { onAfter:settings };
-
-                       if (target == 'max')
-                               target = 9e9;
-
-                       settings = $.extend( {}, $scrollTo.defaults, settings );
-                       // Speed is still recognized for backwards compatibility
-                       duration = duration || settings.duration;
-                       // Make sure the settings are given right
-                       settings.queue = settings.queue && settings.axis.length > 1;
-
-                       if (settings.queue)
-                               // Let's keep the overall duration
-                               duration /= 2;
-                       settings.offset = both( settings.offset );
-                       settings.over = both( settings.over );
-
-                       return this._scrollable().each(function() {
-                               // Null target yields nothing, just like jQuery does
-                               if (target == null) return;
-
-                               var elem = this,
-                                       $elem = $(elem),
-                                       targ = target, toff, attr = {},
-                                       win = $elem.is('html,body');
-
-                               switch (typeof targ) {
-                                       // A number will pass the regex
-                                       case 'number':
-                                       case 'string':
-                                               if (/^([+-]=?)?\d+(\.\d+)?(px|%)?$/.test(targ)) {
-                                                       targ = both( targ );
-                                                       // We are done
-                                                       break;
-                                               }
-                                               // Relative/Absolute selector, no break!
-                                               targ = win ? $(targ) : $(targ, this);
-                                               if (!targ.length) return;
-                                       case 'object':
-                                               // DOMElement / jQuery
-                                               if (targ.is || targ.style)
-                                                       // Get the real position of the target
-                                                       toff = (targ = $(targ)).offset();
-                               }
-
-                               var offset = $.isFunction(settings.offset) && settings.offset(elem, targ) || settings.offset;
-
-                               $.each( settings.axis.split(''), function( i, axis ) {
-                                       var Pos = axis == 'x' ? 'Left' : 'Top',
-                                               pos = Pos.toLowerCase(),
-                                               key = 'scroll' + Pos,
-                                               old = elem[key],
-                                               max = $scrollTo.max(elem, axis);
-
-                                       if (toff) {// jQuery / DOMElement
-                                               attr[key] = toff[pos] + ( win ? 0 : old - $elem.offset()[pos] );
-
-                                               // If it's a dom element, reduce the margin
-                                               if (settings.margin) {
-                                                       attr[key] -= parseInt(targ.css('margin'+Pos)) || 0;
-                                                       attr[key] -= parseInt(targ.css('border'+Pos+'Width')) || 0;
-                                               }
-
-                                               attr[key] += offset[pos] || 0;
-
-                                               if(settings.over[pos])
-                                                       // Scroll to a fraction of its width/height
-                                                       attr[key] += targ[axis=='x'?'width':'height']() * settings.over[pos];
-                                       } else {
-                                               var val = targ[pos];
-                                               // Handle percentage values
-                                               attr[key] = val.slice && val.slice(-1) == '%' ?
-                                                       parseFloat(val) / 100 * max
-                                                       : val;
-                                       }
-
-                                       // Number or 'number'
-                                       if (settings.limit && /^\d+$/.test(attr[key]))
-                                               // Check the limits
-                                               attr[key] = attr[key] <= 0 ? 0 : Math.min( attr[key], max );
-
-                                       // Queueing axes
-                                       if (!i && settings.queue) {
-                                               // Don't waste time animating, if there's no need.
-                                               if (old != attr[key])
-                                                       // Intermediate animation
-                                                       animate( settings.onAfterFirst );
-                                               // Don't animate this axis again in the next iteration.
-                                               delete attr[key];
-                                       }
-                               });
-
-                               animate( settings.onAfter );
-
-                               function animate( callback ) {
-                                       $elem.animate( attr, duration, settings.easing, callback && function() {
-                                               callback.call(this, targ, settings);
-                                       });
-                               }
-                       }).end();
-               };
-
-               // Max scrolling position, works on quirks mode
-               // It only fails (not too badly) on IE, quirks mode.
-               $scrollTo.max = function( elem, axis ) {
-                       var Dim = axis == 'x' ? 'Width' : 'Height',
-                               scroll = 'scroll'+Dim;
-
-                       if (!$(elem).is('html,body'))
-                               return elem[scroll] - $(elem)[Dim.toLowerCase()]();
-
-                       var size = 'client' + Dim,
-                               html = elem.ownerDocument.documentElement,
-                               body = elem.ownerDocument.body;
-
-                       return Math.max( html[scroll], body[scroll] ) - Math.min( html[size]  , body[size]   );
-               };
-
-               function both( val ) {
-                       return $.isFunction(val) || $.isPlainObject(val) ? val : { top:val, left:val };
-               }
-
-               // AMD requirement
-               return $scrollTo;
-       })
-}(typeof define === 'function' && define.amd ? define : function (deps, factory) {
-       if (typeof module !== 'undefined' && module.exports) {
-               // Node
-               module.exports = factory(require('jquery'));
-       } else {
-               factory(jQuery);
-       }
-}));
diff --git a/js/jquery.scrollTo.min.js b/js/jquery.scrollTo.min.js
deleted file mode 100644 (file)
index 06f3845..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-/**
- * Copyright (c) 2007 Ariel Flesler - aflesler ○ gmail • com | https://github.com/flesler
- * Licensed under MIT
- * @author Ariel Flesler
- * @version 2.1.2
- */
-;(function(f){"use strict";"function"===typeof define&&define.amd?define(["jquery"],f):"undefined"!==typeof module&&module.exports?module.exports=f(require("jquery")):f(jQuery)})(function($){"use strict";function n(a){return!a.nodeName||-1!==$.inArray(a.nodeName.toLowerCase(),["iframe","#document","html","body"])}function h(a){return $.isFunction(a)||$.isPlainObject(a)?a:{top:a,left:a}}var p=$.scrollTo=function(a,d,b){return $(window).scrollTo(a,d,b)};p.defaults={axis:"xy",duration:0,limit:!0};$.fn.scrollTo=function(a,d,b){"object"=== typeof d&&(b=d,d=0);"function"===typeof b&&(b={onAfter:b});"max"===a&&(a=9E9);b=$.extend({},p.defaults,b);d=d||b.duration;var u=b.queue&&1<b.axis.length;u&&(d/=2);b.offset=h(b.offset);b.over=h(b.over);return this.each(function(){function k(a){var k=$.extend({},b,{queue:!0,duration:d,complete:a&&function(){a.call(q,e,b)}});r.animate(f,k)}if(null!==a){var l=n(this),q=l?this.contentWindow||window:this,r=$(q),e=a,f={},t;switch(typeof e){case "number":case "string":if(/^([+-]=?)?\d+(\.\d+)?(px|%)?$/.test(e)){e= h(e);break}e=l?$(e):$(e,q);case "object":if(e.length===0)return;if(e.is||e.style)t=(e=$(e)).offset()}var v=$.isFunction(b.offset)&&b.offset(q,e)||b.offset;$.each(b.axis.split(""),function(a,c){var d="x"===c?"Left":"Top",m=d.toLowerCase(),g="scroll"+d,h=r[g](),n=p.max(q,c);t?(f[g]=t[m]+(l?0:h-r.offset()[m]),b.margin&&(f[g]-=parseInt(e.css("margin"+d),10)||0,f[g]-=parseInt(e.css("border"+d+"Width"),10)||0),f[g]+=v[m]||0,b.over[m]&&(f[g]+=e["x"===c?"width":"height"]()*b.over[m])):(d=e[m],f[g]=d.slice&& "%"===d.slice(-1)?parseFloat(d)/100*n:d);b.limit&&/^\d+$/.test(f[g])&&(f[g]=0>=f[g]?0:Math.min(f[g],n));!a&&1<b.axis.length&&(h===f[g]?f={}:u&&(k(b.onAfterFirst),f={}))});k(b.onAfter)}})};p.max=function(a,d){var b="x"===d?"Width":"Height",h="scroll"+b;if(!n(a))return a[h]-$(a)[b.toLowerCase()]();var b="client"+b,k=a.ownerDocument||a.document,l=k.documentElement,k=k.body;return Math.max(l[h],k[h])-Math.min(l[b],k[b])};$.Tween.propHooks.scrollLeft=$.Tween.propHooks.scrollTop={get:function(a){return $(a.elem)[a.prop]()}, set:function(a){var d=this.get(a);if(a.options.interrupt&&a._last&&a._last!==d)return $(a.elem).stop();var b=Math.round(a.now);d!==b&&($(a.elem)[a.prop](b),a._last=this.get(a))}};return p});
\ No newline at end of file
diff --git a/js/jquery/dist/core.js b/js/jquery/dist/core.js
new file mode 100644 (file)
index 0000000..0e95274
--- /dev/null
@@ -0,0 +1,476 @@
+/* global Symbol */
+// Defining this global in .eslintrc.json would create a danger of using the global
+// unguarded in another place, it seems safer to define global only for this module
+
+define( [
+       "./var/arr",
+       "./var/document",
+       "./var/getProto",
+       "./var/slice",
+       "./var/concat",
+       "./var/push",
+       "./var/indexOf",
+       "./var/class2type",
+       "./var/toString",
+       "./var/hasOwn",
+       "./var/fnToString",
+       "./var/ObjectFunctionString",
+       "./var/support",
+       "./core/DOMEval"
+], function( arr, document, getProto, slice, concat, push, indexOf,
+       class2type, toString, hasOwn, fnToString, ObjectFunctionString,
+       support, DOMEval ) {
+
+"use strict";
+
+var
+       version = "3.2.1",
+
+       // Define a local copy of jQuery
+       jQuery = function( selector, context ) {
+
+               // The jQuery object is actually just the init constructor 'enhanced'
+               // Need init if jQuery is called (just allow error to be thrown if not included)
+               return new jQuery.fn.init( selector, context );
+       },
+
+       // Support: Android <=4.0 only
+       // Make sure we trim BOM and NBSP
+       rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
+
+       // Matches dashed string for camelizing
+       rmsPrefix = /^-ms-/,
+       rdashAlpha = /-([a-z])/g,
+
+       // Used by jQuery.camelCase as callback to replace()
+       fcamelCase = function( all, letter ) {
+               return letter.toUpperCase();
+       };
+
+jQuery.fn = jQuery.prototype = {
+
+       // The current version of jQuery being used
+       jquery: version,
+
+       constructor: jQuery,
+
+       // The default length of a jQuery object is 0
+       length: 0,
+
+       toArray: function() {
+               return slice.call( this );
+       },
+
+       // Get the Nth element in the matched element set OR
+       // Get the whole matched element set as a clean array
+       get: function( num ) {
+
+               // Return all the elements in a clean array
+               if ( num == null ) {
+                       return slice.call( this );
+               }
+
+               // Return just the one element from the set
+               return num < 0 ? this[ num + this.length ] : this[ num ];
+       },
+
+       // Take an array of elements and push it onto the stack
+       // (returning the new matched element set)
+       pushStack: function( elems ) {
+
+               // Build a new jQuery matched element set
+               var ret = jQuery.merge( this.constructor(), elems );
+
+               // Add the old object onto the stack (as a reference)
+               ret.prevObject = this;
+
+               // Return the newly-formed element set
+               return ret;
+       },
+
+       // Execute a callback for every element in the matched set.
+       each: function( callback ) {
+               return jQuery.each( this, callback );
+       },
+
+       map: function( callback ) {
+               return this.pushStack( jQuery.map( this, function( elem, i ) {
+                       return callback.call( elem, i, elem );
+               } ) );
+       },
+
+       slice: function() {
+               return this.pushStack( slice.apply( this, arguments ) );
+       },
+
+       first: function() {
+               return this.eq( 0 );
+       },
+
+       last: function() {
+               return this.eq( -1 );
+       },
+
+       eq: function( i ) {
+               var len = this.length,
+                       j = +i + ( i < 0 ? len : 0 );
+               return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );
+       },
+
+       end: function() {
+               return this.prevObject || this.constructor();
+       },
+
+       // For internal use only.
+       // Behaves like an Array's method, not like a jQuery method.
+       push: push,
+       sort: arr.sort,
+       splice: arr.splice
+};
+
+jQuery.extend = jQuery.fn.extend = function() {
+       var options, name, src, copy, copyIsArray, clone,
+               target = arguments[ 0 ] || {},
+               i = 1,
+               length = arguments.length,
+               deep = false;
+
+       // Handle a deep copy situation
+       if ( typeof target === "boolean" ) {
+               deep = target;
+
+               // Skip the boolean and the target
+               target = arguments[ i ] || {};
+               i++;
+       }
+
+       // Handle case when target is a string or something (possible in deep copy)
+       if ( typeof target !== "object" && !jQuery.isFunction( target ) ) {
+               target = {};
+       }
+
+       // Extend jQuery itself if only one argument is passed
+       if ( i === length ) {
+               target = this;
+               i--;
+       }
+
+       for ( ; i < length; i++ ) {
+
+               // Only deal with non-null/undefined values
+               if ( ( options = arguments[ i ] ) != null ) {
+
+                       // Extend the base object
+                       for ( name in options ) {
+                               src = target[ name ];
+                               copy = options[ name ];
+
+                               // Prevent never-ending loop
+                               if ( target === copy ) {
+                                       continue;
+                               }
+
+                               // Recurse if we're merging plain objects or arrays
+                               if ( deep && copy && ( jQuery.isPlainObject( copy ) ||
+                                       ( copyIsArray = Array.isArray( copy ) ) ) ) {
+
+                                       if ( copyIsArray ) {
+                                               copyIsArray = false;
+                                               clone = src && Array.isArray( src ) ? src : [];
+
+                                       } else {
+                                               clone = src && jQuery.isPlainObject( src ) ? src : {};
+                                       }
+
+                                       // Never move original objects, clone them
+                                       target[ name ] = jQuery.extend( deep, clone, copy );
+
+                               // Don't bring in undefined values
+                               } else if ( copy !== undefined ) {
+                                       target[ name ] = copy;
+                               }
+                       }
+               }
+       }
+
+       // Return the modified object
+       return target;
+};
+
+jQuery.extend( {
+
+       // Unique for each copy of jQuery on the page
+       expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
+
+       // Assume jQuery is ready without the ready module
+       isReady: true,
+
+       error: function( msg ) {
+               throw new Error( msg );
+       },
+
+       noop: function() {},
+
+       isFunction: function( obj ) {
+               return jQuery.type( obj ) === "function";
+       },
+
+       isWindow: function( obj ) {
+               return obj != null && obj === obj.window;
+       },
+
+       isNumeric: function( obj ) {
+
+               // As of jQuery 3.0, isNumeric is limited to
+               // strings and numbers (primitives or objects)
+               // that can be coerced to finite numbers (gh-2662)
+               var type = jQuery.type( obj );
+               return ( type === "number" || type === "string" ) &&
+
+                       // parseFloat NaNs numeric-cast false positives ("")
+                       // ...but misinterprets leading-number strings, particularly hex literals ("0x...")
+                       // subtraction forces infinities to NaN
+                       !isNaN( obj - parseFloat( obj ) );
+       },
+
+       isPlainObject: function( obj ) {
+               var proto, Ctor;
+
+               // Detect obvious negatives
+               // Use toString instead of jQuery.type to catch host objects
+               if ( !obj || toString.call( obj ) !== "[object Object]" ) {
+                       return false;
+               }
+
+               proto = getProto( obj );
+
+               // Objects with no prototype (e.g., `Object.create( null )`) are plain
+               if ( !proto ) {
+                       return true;
+               }
+
+               // Objects with prototype are plain iff they were constructed by a global Object function
+               Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor;
+               return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString;
+       },
+
+       isEmptyObject: function( obj ) {
+
+               /* eslint-disable no-unused-vars */
+               // See https://github.com/eslint/eslint/issues/6125
+               var name;
+
+               for ( name in obj ) {
+                       return false;
+               }
+               return true;
+       },
+
+       type: function( obj ) {
+               if ( obj == null ) {
+                       return obj + "";
+               }
+
+               // Support: Android <=2.3 only (functionish RegExp)
+               return typeof obj === "object" || typeof obj === "function" ?
+                       class2type[ toString.call( obj ) ] || "object" :
+                       typeof obj;
+       },
+
+       // Evaluates a script in a global context
+       globalEval: function( code ) {
+               DOMEval( code );
+       },
+
+       // Convert dashed to camelCase; used by the css and data modules
+       // Support: IE <=9 - 11, Edge 12 - 13
+       // Microsoft forgot to hump their vendor prefix (#9572)
+       camelCase: function( string ) {
+               return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
+       },
+
+       each: function( obj, callback ) {
+               var length, i = 0;
+
+               if ( isArrayLike( obj ) ) {
+                       length = obj.length;
+                       for ( ; i < length; i++ ) {
+                               if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
+                                       break;
+                               }
+                       }
+               } else {
+                       for ( i in obj ) {
+                               if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
+                                       break;
+                               }
+                       }
+               }
+
+               return obj;
+       },
+
+       // Support: Android <=4.0 only
+       trim: function( text ) {
+               return text == null ?
+                       "" :
+                       ( text + "" ).replace( rtrim, "" );
+       },
+
+       // results is for internal usage only
+       makeArray: function( arr, results ) {
+               var ret = results || [];
+
+               if ( arr != null ) {
+                       if ( isArrayLike( Object( arr ) ) ) {
+                               jQuery.merge( ret,
+                                       typeof arr === "string" ?
+                                       [ arr ] : arr
+                               );
+                       } else {
+                               push.call( ret, arr );
+                       }
+               }
+
+               return ret;
+       },
+
+       inArray: function( elem, arr, i ) {
+               return arr == null ? -1 : indexOf.call( arr, elem, i );
+       },
+
+       // Support: Android <=4.0 only, PhantomJS 1 only
+       // push.apply(_, arraylike) throws on ancient WebKit
+       merge: function( first, second ) {
+               var len = +second.length,
+                       j = 0,
+                       i = first.length;
+
+               for ( ; j < len; j++ ) {
+                       first[ i++ ] = second[ j ];
+               }
+
+               first.length = i;
+
+               return first;
+       },
+
+       grep: function( elems, callback, invert ) {
+               var callbackInverse,
+                       matches = [],
+                       i = 0,
+                       length = elems.length,
+                       callbackExpect = !invert;
+
+               // Go through the array, only saving the items
+               // that pass the validator function
+               for ( ; i < length; i++ ) {
+                       callbackInverse = !callback( elems[ i ], i );
+                       if ( callbackInverse !== callbackExpect ) {
+                               matches.push( elems[ i ] );
+                       }
+               }
+
+               return matches;
+       },
+
+       // arg is for internal usage only
+       map: function( elems, callback, arg ) {
+               var length, value,
+                       i = 0,
+                       ret = [];
+
+               // Go through the array, translating each of the items to their new values
+               if ( isArrayLike( elems ) ) {
+                       length = elems.length;
+                       for ( ; i < length; i++ ) {
+                               value = callback( elems[ i ], i, arg );
+
+                               if ( value != null ) {
+                                       ret.push( value );
+                               }
+                       }
+
+               // Go through every key on the object,
+               } else {
+                       for ( i in elems ) {
+                               value = callback( elems[ i ], i, arg );
+
+                               if ( value != null ) {
+                                       ret.push( value );
+                               }
+                       }
+               }
+
+               // Flatten any nested arrays
+               return concat.apply( [], ret );
+       },
+
+       // A global GUID counter for objects
+       guid: 1,
+
+       // Bind a function to a context, optionally partially applying any
+       // arguments.
+       proxy: function( fn, context ) {
+               var tmp, args, proxy;
+
+               if ( typeof context === "string" ) {
+                       tmp = fn[ context ];
+                       context = fn;
+                       fn = tmp;
+               }
+
+               // Quick check to determine if target is callable, in the spec
+               // this throws a TypeError, but we will just return undefined.
+               if ( !jQuery.isFunction( fn ) ) {
+                       return undefined;
+               }
+
+               // Simulated bind
+               args = slice.call( arguments, 2 );
+               proxy = function() {
+                       return fn.apply( context || this, args.concat( slice.call( arguments ) ) );
+               };
+
+               // Set the guid of unique handler to the same of original handler, so it can be removed
+               proxy.guid = fn.guid = fn.guid || jQuery.guid++;
+
+               return proxy;
+       },
+
+       now: Date.now,
+
+       // jQuery.support is not used in Core but other projects attach their
+       // properties to it so it needs to exist.
+       support: support
+} );
+
+if ( typeof Symbol === "function" ) {
+       jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];
+}
+
+// Populate the class2type map
+jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ),
+function( i, name ) {
+       class2type[ "[object " + name + "]" ] = name.toLowerCase();
+} );
+
+function isArrayLike( obj ) {
+
+       // Support: real iOS 8.2 only (not reproducible in simulator)
+       // `in` check used to prevent JIT error (gh-2145)
+       // hasOwn isn't used here due to false negatives
+       // regarding Nodelist length in IE
+       var length = !!obj && "length" in obj && obj.length,
+               type = jQuery.type( obj );
+
+       if ( type === "function" || jQuery.isWindow( obj ) ) {
+               return false;
+       }
+
+       return type === "array" || length === 0 ||
+               typeof length === "number" && length > 0 && ( length - 1 ) in obj;
+}
+
+return jQuery;
+} );
diff --git a/js/jquery/dist/jquery.js b/js/jquery/dist/jquery.js
new file mode 100644 (file)
index 0000000..d2d8ca4
--- /dev/null
@@ -0,0 +1,10253 @@
+/*!
+ * jQuery JavaScript Library v3.2.1
+ * https://jquery.com/
+ *
+ * Includes Sizzle.js
+ * https://sizzlejs.com/
+ *
+ * Copyright JS Foundation and other contributors
+ * Released under the MIT license
+ * https://jquery.org/license
+ *
+ * Date: 2017-03-20T18:59Z
+ */
+( function( global, factory ) {
+
+       "use strict";
+
+       if ( typeof module === "object" && typeof module.exports === "object" ) {
+
+               // For CommonJS and CommonJS-like environments where a proper `window`
+               // is present, execute the factory and get jQuery.
+               // For environments that do not have a `window` with a `document`
+               // (such as Node.js), expose a factory as module.exports.
+               // This accentuates the need for the creation of a real `window`.
+               // e.g. var jQuery = require("jquery")(window);
+               // See ticket #14549 for more info.
+               module.exports = global.document ?
+                       factory( global, true ) :
+                       function( w ) {
+                               if ( !w.document ) {
+                                       throw new Error( "jQuery requires a window with a document" );
+                               }
+                               return factory( w );
+                       };
+       } else {
+               factory( global );
+       }
+
+// Pass this if window is not defined yet
+} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
+
+// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1
+// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode
+// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common
+// enough that all such attempts are guarded in a try block.
+"use strict";
+
+var arr = [];
+
+var document = window.document;
+
+var getProto = Object.getPrototypeOf;
+
+var slice = arr.slice;
+
+var concat = arr.concat;
+
+var push = arr.push;
+
+var indexOf = arr.indexOf;
+
+var class2type = {};
+
+var toString = class2type.toString;
+
+var hasOwn = class2type.hasOwnProperty;
+
+var fnToString = hasOwn.toString;
+
+var ObjectFunctionString = fnToString.call( Object );
+
+var support = {};
+
+
+
+       function DOMEval( code, doc ) {
+               doc = doc || document;
+
+               var script = doc.createElement( "script" );
+
+               script.text = code;
+               doc.head.appendChild( script ).parentNode.removeChild( script );
+       }
+/* global Symbol */
+// Defining this global in .eslintrc.json would create a danger of using the global
+// unguarded in another place, it seems safer to define global only for this module
+
+
+
+var
+       version = "3.2.1",
+
+       // Define a local copy of jQuery
+       jQuery = function( selector, context ) {
+
+               // The jQuery object is actually just the init constructor 'enhanced'
+               // Need init if jQuery is called (just allow error to be thrown if not included)
+               return new jQuery.fn.init( selector, context );
+       },
+
+       // Support: Android <=4.0 only
+       // Make sure we trim BOM and NBSP
+       rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
+
+       // Matches dashed string for camelizing
+       rmsPrefix = /^-ms-/,
+       rdashAlpha = /-([a-z])/g,
+
+       // Used by jQuery.camelCase as callback to replace()
+       fcamelCase = function( all, letter ) {
+               return letter.toUpperCase();
+       };
+
+jQuery.fn = jQuery.prototype = {
+
+       // The current version of jQuery being used
+       jquery: version,
+
+       constructor: jQuery,
+
+       // The default length of a jQuery object is 0
+       length: 0,
+
+       toArray: function() {
+               return slice.call( this );
+       },
+
+       // Get the Nth element in the matched element set OR
+       // Get the whole matched element set as a clean array
+       get: function( num ) {
+
+               // Return all the elements in a clean array
+               if ( num == null ) {
+                       return slice.call( this );
+               }
+
+               // Return just the one element from the set
+               return num < 0 ? this[ num + this.length ] : this[ num ];
+       },
+
+       // Take an array of elements and push it onto the stack
+       // (returning the new matched element set)
+       pushStack: function( elems ) {
+
+               // Build a new jQuery matched element set
+               var ret = jQuery.merge( this.constructor(), elems );
+
+               // Add the old object onto the stack (as a reference)
+               ret.prevObject = this;
+
+               // Return the newly-formed element set
+               return ret;
+       },
+
+       // Execute a callback for every element in the matched set.
+       each: function( callback ) {
+               return jQuery.each( this, callback );
+       },
+
+       map: function( callback ) {
+               return this.pushStack( jQuery.map( this, function( elem, i ) {
+                       return callback.call( elem, i, elem );
+               } ) );
+       },
+
+       slice: function() {
+               return this.pushStack( slice.apply( this, arguments ) );
+       },
+
+       first: function() {
+               return this.eq( 0 );
+       },
+
+       last: function() {
+               return this.eq( -1 );
+       },
+
+       eq: function( i ) {
+               var len = this.length,
+                       j = +i + ( i < 0 ? len : 0 );
+               return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );
+       },
+
+       end: function() {
+               return this.prevObject || this.constructor();
+       },
+
+       // For internal use only.
+       // Behaves like an Array's method, not like a jQuery method.
+       push: push,
+       sort: arr.sort,
+       splice: arr.splice
+};
+
+jQuery.extend = jQuery.fn.extend = function() {
+       var options, name, src, copy, copyIsArray, clone,
+               target = arguments[ 0 ] || {},
+               i = 1,
+               length = arguments.length,
+               deep = false;
+
+       // Handle a deep copy situation
+       if ( typeof target === "boolean" ) {
+               deep = target;
+
+               // Skip the boolean and the target
+               target = arguments[ i ] || {};
+               i++;
+       }
+
+       // Handle case when target is a string or something (possible in deep copy)
+       if ( typeof target !== "object" && !jQuery.isFunction( target ) ) {
+               target = {};
+       }
+
+       // Extend jQuery itself if only one argument is passed
+       if ( i === length ) {
+               target = this;
+               i--;
+       }
+
+       for ( ; i < length; i++ ) {
+
+               // Only deal with non-null/undefined values
+               if ( ( options = arguments[ i ] ) != null ) {
+
+                       // Extend the base object
+                       for ( name in options ) {
+                               src = target[ name ];
+                               copy = options[ name ];
+
+                               // Prevent never-ending loop
+                               if ( target === copy ) {
+                                       continue;
+                               }
+
+                               // Recurse if we're merging plain objects or arrays
+                               if ( deep && copy && ( jQuery.isPlainObject( copy ) ||
+                                       ( copyIsArray = Array.isArray( copy ) ) ) ) {
+
+                                       if ( copyIsArray ) {
+                                               copyIsArray = false;
+                                               clone = src && Array.isArray( src ) ? src : [];
+
+                                       } else {
+                                               clone = src && jQuery.isPlainObject( src ) ? src : {};
+                                       }
+
+                                       // Never move original objects, clone them
+                                       target[ name ] = jQuery.extend( deep, clone, copy );
+
+                               // Don't bring in undefined values
+                               } else if ( copy !== undefined ) {
+                                       target[ name ] = copy;
+                               }
+                       }
+               }
+       }
+
+       // Return the modified object
+       return target;
+};
+
+jQuery.extend( {
+
+       // Unique for each copy of jQuery on the page
+       expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
+
+       // Assume jQuery is ready without the ready module
+       isReady: true,
+
+       error: function( msg ) {
+               throw new Error( msg );
+       },
+
+       noop: function() {},
+
+       isFunction: function( obj ) {
+               return jQuery.type( obj ) === "function";
+       },
+
+       isWindow: function( obj ) {
+               return obj != null && obj === obj.window;
+       },
+
+       isNumeric: function( obj ) {
+
+               // As of jQuery 3.0, isNumeric is limited to
+               // strings and numbers (primitives or objects)
+               // that can be coerced to finite numbers (gh-2662)
+               var type = jQuery.type( obj );
+               return ( type === "number" || type === "string" ) &&
+
+                       // parseFloat NaNs numeric-cast false positives ("")
+                       // ...but misinterprets leading-number strings, particularly hex literals ("0x...")
+                       // subtraction forces infinities to NaN
+                       !isNaN( obj - parseFloat( obj ) );
+       },
+
+       isPlainObject: function( obj ) {
+               var proto, Ctor;
+
+               // Detect obvious negatives
+               // Use toString instead of jQuery.type to catch host objects
+               if ( !obj || toString.call( obj ) !== "[object Object]" ) {
+                       return false;
+               }
+
+               proto = getProto( obj );
+
+               // Objects with no prototype (e.g., `Object.create( null )`) are plain
+               if ( !proto ) {
+                       return true;
+               }
+
+               // Objects with prototype are plain iff they were constructed by a global Object function
+               Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor;
+               return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString;
+       },
+
+       isEmptyObject: function( obj ) {
+
+               /* eslint-disable no-unused-vars */
+               // See https://github.com/eslint/eslint/issues/6125
+               var name;
+
+               for ( name in obj ) {
+                       return false;
+               }
+               return true;
+       },
+
+       type: function( obj ) {
+               if ( obj == null ) {
+                       return obj + "";
+               }
+
+               // Support: Android <=2.3 only (functionish RegExp)
+               return typeof obj === "object" || typeof obj === "function" ?
+                       class2type[ toString.call( obj ) ] || "object" :
+                       typeof obj;
+       },
+
+       // Evaluates a script in a global context
+       globalEval: function( code ) {
+               DOMEval( code );
+       },
+
+       // Convert dashed to camelCase; used by the css and data modules
+       // Support: IE <=9 - 11, Edge 12 - 13
+       // Microsoft forgot to hump their vendor prefix (#9572)
+       camelCase: function( string ) {
+               return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
+       },
+
+       each: function( obj, callback ) {
+               var length, i = 0;
+
+               if ( isArrayLike( obj ) ) {
+                       length = obj.length;
+                       for ( ; i < length; i++ ) {
+                               if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
+                                       break;
+                               }
+                       }
+               } else {
+                       for ( i in obj ) {
+                               if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
+                                       break;
+                               }
+                       }
+               }
+
+               return obj;
+       },
+
+       // Support: Android <=4.0 only
+       trim: function( text ) {
+               return text == null ?
+                       "" :
+                       ( text + "" ).replace( rtrim, "" );
+       },
+
+       // results is for internal usage only
+       makeArray: function( arr, results ) {
+               var ret = results || [];
+
+               if ( arr != null ) {
+                       if ( isArrayLike( Object( arr ) ) ) {
+                               jQuery.merge( ret,
+                                       typeof arr === "string" ?
+                                       [ arr ] : arr
+                               );
+                       } else {
+                               push.call( ret, arr );
+                       }
+               }
+
+               return ret;
+       },
+
+       inArray: function( elem, arr, i ) {
+               return arr == null ? -1 : indexOf.call( arr, elem, i );
+       },
+
+       // Support: Android <=4.0 only, PhantomJS 1 only
+       // push.apply(_, arraylike) throws on ancient WebKit
+       merge: function( first, second ) {
+               var len = +second.length,
+                       j = 0,
+                       i = first.length;
+
+               for ( ; j < len; j++ ) {
+                       first[ i++ ] = second[ j ];
+               }
+
+               first.length = i;
+
+               return first;
+       },
+
+       grep: function( elems, callback, invert ) {
+               var callbackInverse,
+                       matches = [],
+                       i = 0,
+                       length = elems.length,
+                       callbackExpect = !invert;
+
+               // Go through the array, only saving the items
+               // that pass the validator function
+               for ( ; i < length; i++ ) {
+                       callbackInverse = !callback( elems[ i ], i );
+                       if ( callbackInverse !== callbackExpect ) {
+                               matches.push( elems[ i ] );
+                       }
+               }
+
+               return matches;
+       },
+
+       // arg is for internal usage only
+       map: function( elems, callback, arg ) {
+               var length, value,
+                       i = 0,
+                       ret = [];
+
+               // Go through the array, translating each of the items to their new values
+               if ( isArrayLike( elems ) ) {
+                       length = elems.length;
+                       for ( ; i < length; i++ ) {
+                               value = callback( elems[ i ], i, arg );
+
+                               if ( value != null ) {
+                                       ret.push( value );
+                               }
+                       }
+
+               // Go through every key on the object,
+               } else {
+                       for ( i in elems ) {
+                               value = callback( elems[ i ], i, arg );
+
+                               if ( value != null ) {
+                                       ret.push( value );
+                               }
+                       }
+               }
+
+               // Flatten any nested arrays
+               return concat.apply( [], ret );
+       },
+
+       // A global GUID counter for objects
+       guid: 1,
+
+       // Bind a function to a context, optionally partially applying any
+       // arguments.
+       proxy: function( fn, context ) {
+               var tmp, args, proxy;
+
+               if ( typeof context === "string" ) {
+                       tmp = fn[ context ];
+                       context = fn;
+                       fn = tmp;
+               }
+
+               // Quick check to determine if target is callable, in the spec
+               // this throws a TypeError, but we will just return undefined.
+               if ( !jQuery.isFunction( fn ) ) {
+                       return undefined;
+               }
+
+               // Simulated bind
+               args = slice.call( arguments, 2 );
+               proxy = function() {
+                       return fn.apply( context || this, args.concat( slice.call( arguments ) ) );
+               };
+
+               // Set the guid of unique handler to the same of original handler, so it can be removed
+               proxy.guid = fn.guid = fn.guid || jQuery.guid++;
+
+               return proxy;
+       },
+
+       now: Date.now,
+
+       // jQuery.support is not used in Core but other projects attach their
+       // properties to it so it needs to exist.
+       support: support
+} );
+
+if ( typeof Symbol === "function" ) {
+       jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];
+}
+
+// Populate the class2type map
+jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ),
+function( i, name ) {
+       class2type[ "[object " + name + "]" ] = name.toLowerCase();
+} );
+
+function isArrayLike( obj ) {
+
+       // Support: real iOS 8.2 only (not reproducible in simulator)
+       // `in` check used to prevent JIT error (gh-2145)
+       // hasOwn isn't used here due to false negatives
+       // regarding Nodelist length in IE
+       var length = !!obj && "length" in obj && obj.length,
+               type = jQuery.type( obj );
+
+       if ( type === "function" || jQuery.isWindow( obj ) ) {
+               return false;
+       }
+
+       return type === "array" || length === 0 ||
+               typeof length === "number" && length > 0 && ( length - 1 ) in obj;
+}
+var Sizzle =
+/*!
+ * Sizzle CSS Selector Engine v2.3.3
+ * https://sizzlejs.com/
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license
+ * http://jquery.org/license
+ *
+ * Date: 2016-08-08
+ */
+(function( window ) {
+
+var i,
+       support,
+       Expr,
+       getText,
+       isXML,
+       tokenize,
+       compile,
+       select,
+       outermostContext,
+       sortInput,
+       hasDuplicate,
+
+       // Local document vars
+       setDocument,
+       document,
+       docElem,
+       documentIsHTML,
+       rbuggyQSA,
+       rbuggyMatches,
+       matches,
+       contains,
+
+       // Instance-specific data
+       expando = "sizzle" + 1 * new Date(),
+       preferredDoc = window.document,
+       dirruns = 0,
+       done = 0,
+       classCache = createCache(),
+       tokenCache = createCache(),
+       compilerCache = createCache(),
+       sortOrder = function( a, b ) {
+               if ( a === b ) {
+                       hasDuplicate = true;
+               }
+               return 0;
+       },
+
+       // Instance methods
+       hasOwn = ({}).hasOwnProperty,
+       arr = [],
+       pop = arr.pop,
+       push_native = arr.push,
+       push = arr.push,
+       slice = arr.slice,
+       // Use a stripped-down indexOf as it's faster than native
+       // https://jsperf.com/thor-indexof-vs-for/5
+       indexOf = function( list, elem ) {
+               var i = 0,
+                       len = list.length;
+               for ( ; i < len; i++ ) {
+                       if ( list[i] === elem ) {
+                               return i;
+                       }
+               }
+               return -1;
+       },
+
+       booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
+
+       // Regular expressions
+
+       // http://www.w3.org/TR/css3-selectors/#whitespace
+       whitespace = "[\\x20\\t\\r\\n\\f]",
+
+       // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
+       identifier = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+",
+
+       // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
+       attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace +
+               // Operator (capture 2)
+               "*([*^$|!~]?=)" + whitespace +
+               // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
+               "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace +
+               "*\\]",
+
+       pseudos = ":(" + identifier + ")(?:\\((" +
+               // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
+               // 1. quoted (capture 3; capture 4 or capture 5)
+               "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
+               // 2. simple (capture 6)
+               "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
+               // 3. anything else (capture 2)
+               ".*" +
+               ")\\)|)",
+
+       // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
+       rwhitespace = new RegExp( whitespace + "+", "g" ),
+       rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
+
+       rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
+       rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ),
+
+       rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ),
+
+       rpseudo = new RegExp( pseudos ),
+       ridentifier = new RegExp( "^" + identifier + "$" ),
+
+       matchExpr = {
+               "ID": new RegExp( "^#(" + identifier + ")" ),
+               "CLASS": new RegExp( "^\\.(" + identifier + ")" ),
+               "TAG": new RegExp( "^(" + identifier + "|[*])" ),
+               "ATTR": new RegExp( "^" + attributes ),
+               "PSEUDO": new RegExp( "^" + pseudos ),
+               "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
+                       "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
+                       "*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
+               "bool": new RegExp( "^(?:" + booleans + ")$", "i" ),
+               // For use in libraries implementing .is()
+               // We use this for POS matching in `select`
+               "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
+                       whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
+       },
+
+       rinputs = /^(?:input|select|textarea|button)$/i,
+       rheader = /^h\d$/i,
+
+       rnative = /^[^{]+\{\s*\[native \w/,
+
+       // Easily-parseable/retrievable ID or TAG or CLASS selectors
+       rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
+
+       rsibling = /[+~]/,
+
+       // CSS escapes
+       // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
+       runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ),
+       funescape = function( _, escaped, escapedWhitespace ) {
+               var high = "0x" + escaped - 0x10000;
+               // NaN means non-codepoint
+               // Support: Firefox<24
+               // Workaround erroneous numeric interpretation of +"0x"
+               return high !== high || escapedWhitespace ?
+                       escaped :
+                       high < 0 ?
+                               // BMP codepoint
+                               String.fromCharCode( high + 0x10000 ) :
+                               // Supplemental Plane codepoint (surrogate pair)
+                               String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
+       },
+
+       // CSS string/identifier serialization
+       // https://drafts.csswg.org/cssom/#common-serializing-idioms
+       rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,
+       fcssescape = function( ch, asCodePoint ) {
+               if ( asCodePoint ) {
+
+                       // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER
+                       if ( ch === "\0" ) {
+                               return "\uFFFD";
+                       }
+
+                       // Control characters and (dependent upon position) numbers get escaped as code points
+                       return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " ";
+               }
+
+               // Other potentially-special ASCII characters get backslash-escaped
+               return "\\" + ch;
+       },
+
+       // Used for iframes
+       // See setDocument()
+       // Removing the function wrapper causes a "Permission Denied"
+       // error in IE
+       unloadHandler = function() {
+               setDocument();
+       },
+
+       disabledAncestor = addCombinator(
+               function( elem ) {
+                       return elem.disabled === true && ("form" in elem || "label" in elem);
+               },
+               { dir: "parentNode", next: "legend" }
+       );
+
+// Optimize for push.apply( _, NodeList )
+try {
+       push.apply(
+               (arr = slice.call( preferredDoc.childNodes )),
+               preferredDoc.childNodes
+       );
+       // Support: Android<4.0
+       // Detect silently failing push.apply
+       arr[ preferredDoc.childNodes.length ].nodeType;
+} catch ( e ) {
+       push = { apply: arr.length ?
+
+               // Leverage slice if possible
+               function( target, els ) {
+                       push_native.apply( target, slice.call(els) );
+               } :
+
+               // Support: IE<9
+               // Otherwise append directly
+               function( target, els ) {
+                       var j = target.length,
+                               i = 0;
+                       // Can't trust NodeList.length
+                       while ( (target[j++] = els[i++]) ) {}
+                       target.length = j - 1;
+               }
+       };
+}
+
+function Sizzle( selector, context, results, seed ) {
+       var m, i, elem, nid, match, groups, newSelector,
+               newContext = context && context.ownerDocument,
+
+               // nodeType defaults to 9, since context defaults to document
+               nodeType = context ? context.nodeType : 9;
+
+       results = results || [];
+
+       // Return early from calls with invalid selector or context
+       if ( typeof selector !== "string" || !selector ||
+               nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {
+
+               return results;
+       }
+
+       // Try to shortcut find operations (as opposed to filters) in HTML documents
+       if ( !seed ) {
+
+               if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
+                       setDocument( context );
+               }
+               context = context || document;
+
+               if ( documentIsHTML ) {
+
+                       // If the selector is sufficiently simple, try using a "get*By*" DOM method
+                       // (excepting DocumentFragment context, where the methods don't exist)
+                       if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {
+
+                               // ID selector
+                               if ( (m = match[1]) ) {
+
+                                       // Document context
+                                       if ( nodeType === 9 ) {
+                                               if ( (elem = context.getElementById( m )) ) {
+
+                                                       // Support: IE, Opera, Webkit
+                                                       // TODO: identify versions
+                                                       // getElementById can match elements by name instead of ID
+                                                       if ( elem.id === m ) {
+                                                               results.push( elem );
+                                                               return results;
+                                                       }
+                                               } else {
+                                                       return results;
+                                               }
+
+                                       // Element context
+                                       } else {
+
+                                               // Support: IE, Opera, Webkit
+                                               // TODO: identify versions
+                                               // getElementById can match elements by name instead of ID
+                                               if ( newContext && (elem = newContext.getElementById( m )) &&
+                                                       contains( context, elem ) &&
+                                                       elem.id === m ) {
+
+                                                       results.push( elem );
+                                                       return results;
+                                               }
+                                       }
+
+                               // Type selector
+                               } else if ( match[2] ) {
+                                       push.apply( results, context.getElementsByTagName( selector ) );
+                                       return results;
+
+                               // Class selector
+                               } else if ( (m = match[3]) && support.getElementsByClassName &&
+                                       context.getElementsByClassName ) {
+
+                                       push.apply( results, context.getElementsByClassName( m ) );
+                                       return results;
+                               }
+                       }
+
+                       // Take advantage of querySelectorAll
+                       if ( support.qsa &&
+                               !compilerCache[ selector + " " ] &&
+                               (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {
+
+                               if ( nodeType !== 1 ) {
+                                       newContext = context;
+                                       newSelector = selector;
+
+                               // qSA looks outside Element context, which is not what we want
+                               // Thanks to Andrew Dupont for this workaround technique
+                               // Support: IE <=8
+                               // Exclude object elements
+                               } else if ( context.nodeName.toLowerCase() !== "object" ) {
+
+                                       // Capture the context ID, setting it first if necessary
+                                       if ( (nid = context.getAttribute( "id" )) ) {
+                                               nid = nid.replace( rcssescape, fcssescape );
+                                       } else {
+                                               context.setAttribute( "id", (nid = expando) );
+                                       }
+
+                                       // Prefix every selector in the list
+                                       groups = tokenize( selector );
+                                       i = groups.length;
+                                       while ( i-- ) {
+                                               groups[i] = "#" + nid + " " + toSelector( groups[i] );
+                                       }
+                                       newSelector = groups.join( "," );
+
+                                       // Expand context for sibling selectors
+                                       newContext = rsibling.test( selector ) && testContext( context.parentNode ) ||
+                                               context;
+                               }
+
+                               if ( newSelector ) {
+                                       try {
+                                               push.apply( results,
+                                                       newContext.querySelectorAll( newSelector )
+                                               );
+                                               return results;
+                                       } catch ( qsaError ) {
+                                       } finally {
+                                               if ( nid === expando ) {
+                                                       context.removeAttribute( "id" );
+                                               }
+                                       }
+                               }
+                       }
+               }
+       }
+
+       // All others
+       return select( selector.replace( rtrim, "$1" ), context, results, seed );
+}
+
+/**
+ * Create key-value caches of limited size
+ * @returns {function(string, object)} Returns the Object data after storing it on itself with
+ *     property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
+ *     deleting the oldest entry
+ */
+function createCache() {
+       var keys = [];
+
+       function cache( key, value ) {
+               // Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
+               if ( keys.push( key + " " ) > Expr.cacheLength ) {
+                       // Only keep the most recent entries
+                       delete cache[ keys.shift() ];
+               }
+               return (cache[ key + " " ] = value);
+       }
+       return cache;
+}
+
+/**
+ * Mark a function for special use by Sizzle
+ * @param {Function} fn The function to mark
+ */
+function markFunction( fn ) {
+       fn[ expando ] = true;
+       return fn;
+}
+
+/**
+ * Support testing using an element
+ * @param {Function} fn Passed the created element and returns a boolean result
+ */
+function assert( fn ) {
+       var el = document.createElement("fieldset");
+
+       try {
+               return !!fn( el );
+       } catch (e) {
+               return false;
+       } finally {
+               // Remove from its parent by default
+               if ( el.parentNode ) {
+                       el.parentNode.removeChild( el );
+               }
+               // release memory in IE
+               el = null;
+       }
+}
+
+/**
+ * Adds the same handler for all of the specified attrs
+ * @param {String} attrs Pipe-separated list of attributes
+ * @param {Function} handler The method that will be applied
+ */
+function addHandle( attrs, handler ) {
+       var arr = attrs.split("|"),
+               i = arr.length;
+
+       while ( i-- ) {
+               Expr.attrHandle[ arr[i] ] = handler;
+       }
+}
+
+/**
+ * Checks document order of two siblings
+ * @param {Element} a
+ * @param {Element} b
+ * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
+ */
+function siblingCheck( a, b ) {
+       var cur = b && a,
+               diff = cur && a.nodeType === 1 && b.nodeType === 1 &&
+                       a.sourceIndex - b.sourceIndex;
+
+       // Use IE sourceIndex if available on both nodes
+       if ( diff ) {
+               return diff;
+       }
+
+       // Check if b follows a
+       if ( cur ) {
+               while ( (cur = cur.nextSibling) ) {
+                       if ( cur === b ) {
+                               return -1;
+                       }
+               }
+       }
+
+       return a ? 1 : -1;
+}
+
+/**
+ * Returns a function to use in pseudos for input types
+ * @param {String} type
+ */
+function createInputPseudo( type ) {
+       return function( elem ) {
+               var name = elem.nodeName.toLowerCase();
+               return name === "input" && elem.type === type;
+       };
+}
+
+/**
+ * Returns a function to use in pseudos for buttons
+ * @param {String} type
+ */
+function createButtonPseudo( type ) {
+       return function( elem ) {
+               var name = elem.nodeName.toLowerCase();
+               return (name === "input" || name === "button") && elem.type === type;
+       };
+}
+
+/**
+ * Returns a function to use in pseudos for :enabled/:disabled
+ * @param {Boolean} disabled true for :disabled; false for :enabled
+ */
+function createDisabledPseudo( disabled ) {
+
+       // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable
+       return function( elem ) {
+
+               // Only certain elements can match :enabled or :disabled
+               // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled
+               // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled
+               if ( "form" in elem ) {
+
+                       // Check for inherited disabledness on relevant non-disabled elements:
+                       // * listed form-associated elements in a disabled fieldset
+                       //   https://html.spec.whatwg.org/multipage/forms.html#category-listed
+                       //   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled
+                       // * option elements in a disabled optgroup
+                       //   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled
+                       // All such elements have a "form" property.
+                       if ( elem.parentNode && elem.disabled === false ) {
+
+                               // Option elements defer to a parent optgroup if present
+                               if ( "label" in elem ) {
+                                       if ( "label" in elem.parentNode ) {
+                                               return elem.parentNode.disabled === disabled;
+                                       } else {
+                                               return elem.disabled === disabled;
+                                       }
+                               }
+
+                               // Support: IE 6 - 11
+                               // Use the isDisabled shortcut property to check for disabled fieldset ancestors
+                               return elem.isDisabled === disabled ||
+
+                                       // Where there is no isDisabled, check manually
+                                       /* jshint -W018 */
+                                       elem.isDisabled !== !disabled &&
+                                               disabledAncestor( elem ) === disabled;
+                       }
+
+                       return elem.disabled === disabled;
+
+               // Try to winnow out elements that can't be disabled before trusting the disabled property.
+               // Some victims get caught in our net (label, legend, menu, track), but it shouldn't
+               // even exist on them, let alone have a boolean value.
+               } else if ( "label" in elem ) {
+                       return elem.disabled === disabled;
+               }
+
+               // Remaining elements are neither :enabled nor :disabled
+               return false;
+       };
+}
+
+/**
+ * Returns a function to use in pseudos for positionals
+ * @param {Function} fn
+ */
+function createPositionalPseudo( fn ) {
+       return markFunction(function( argument ) {
+               argument = +argument;
+               return markFunction(function( seed, matches ) {
+                       var j,
+                               matchIndexes = fn( [], seed.length, argument ),
+                               i = matchIndexes.length;
+
+                       // Match elements found at the specified indexes
+                       while ( i-- ) {
+                               if ( seed[ (j = matchIndexes[i]) ] ) {
+                                       seed[j] = !(matches[j] = seed[j]);
+                               }
+                       }
+               });
+       });
+}
+
+/**
+ * Checks a node for validity as a Sizzle context
+ * @param {Element|Object=} context
+ * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
+ */
+function testContext( context ) {
+       return context && typeof context.getElementsByTagName !== "undefined" && context;
+}
+
+// Expose support vars for convenience
+support = Sizzle.support = {};
+
+/**
+ * Detects XML nodes
+ * @param {Element|Object} elem An element or a document
+ * @returns {Boolean} True iff elem is a non-HTML XML node
+ */
+isXML = Sizzle.isXML = function( elem ) {
+       // documentElement is verified for cases where it doesn't yet exist
+       // (such as loading iframes in IE - #4833)
+       var documentElement = elem && (elem.ownerDocument || elem).documentElement;
+       return documentElement ? documentElement.nodeName !== "HTML" : false;
+};
+
+/**
+ * Sets document-related variables once based on the current document
+ * @param {Element|Object} [doc] An element or document object to use to set the document
+ * @returns {Object} Returns the current document
+ */
+setDocument = Sizzle.setDocument = function( node ) {
+       var hasCompare, subWindow,
+               doc = node ? node.ownerDocument || node : preferredDoc;
+
+       // Return early if doc is invalid or already selected
+       if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
+               return document;
+       }
+
+       // Update global variables
+       document = doc;
+       docElem = document.documentElement;
+       documentIsHTML = !isXML( document );
+
+       // Support: IE 9-11, Edge
+       // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936)
+       if ( preferredDoc !== document &&
+               (subWindow = document.defaultView) && subWindow.top !== subWindow ) {
+
+               // Support: IE 11, Edge
+               if ( subWindow.addEventListener ) {
+                       subWindow.addEventListener( "unload", unloadHandler, false );
+
+               // Support: IE 9 - 10 only
+               } else if ( subWindow.attachEvent ) {
+                       subWindow.attachEvent( "onunload", unloadHandler );
+               }
+       }
+
+       /* Attributes
+       ---------------------------------------------------------------------- */
+
+       // Support: IE<8
+       // Verify that getAttribute really returns attributes and not properties
+       // (excepting IE8 booleans)
+       support.attributes = assert(function( el ) {
+               el.className = "i";
+               return !el.getAttribute("className");
+       });
+
+       /* getElement(s)By*
+       ---------------------------------------------------------------------- */
+
+       // Check if getElementsByTagName("*") returns only elements
+       support.getElementsByTagName = assert(function( el ) {
+               el.appendChild( document.createComment("") );
+               return !el.getElementsByTagName("*").length;
+       });
+
+       // Support: IE<9
+       support.getElementsByClassName = rnative.test( document.getElementsByClassName );
+
+       // Support: IE<10
+       // Check if getElementById returns elements by name
+       // The broken getElementById methods don't pick up programmatically-set names,
+       // so use a roundabout getElementsByName test
+       support.getById = assert(function( el ) {
+               docElem.appendChild( el ).id = expando;
+               return !document.getElementsByName || !document.getElementsByName( expando ).length;
+       });
+
+       // ID filter and find
+       if ( support.getById ) {
+               Expr.filter["ID"] = function( id ) {
+                       var attrId = id.replace( runescape, funescape );
+                       return function( elem ) {
+                               return elem.getAttribute("id") === attrId;
+                       };
+               };
+               Expr.find["ID"] = function( id, context ) {
+                       if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
+                               var elem = context.getElementById( id );
+                               return elem ? [ elem ] : [];
+                       }
+               };
+       } else {
+               Expr.filter["ID"] =  function( id ) {
+                       var attrId = id.replace( runescape, funescape );
+                       return function( elem ) {
+                               var node = typeof elem.getAttributeNode !== "undefined" &&
+                                       elem.getAttributeNode("id");
+                               return node && node.value === attrId;
+                       };
+               };
+
+               // Support: IE 6 - 7 only
+               // getElementById is not reliable as a find shortcut
+               Expr.find["ID"] = function( id, context ) {
+                       if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
+                               var node, i, elems,
+                                       elem = context.getElementById( id );
+
+                               if ( elem ) {
+
+                                       // Verify the id attribute
+                                       node = elem.getAttributeNode("id");
+                                       if ( node && node.value === id ) {
+                                               return [ elem ];
+                                       }
+
+                                       // Fall back on getElementsByName
+                                       elems = context.getElementsByName( id );
+                                       i = 0;
+                                       while ( (elem = elems[i++]) ) {
+                                               node = elem.getAttributeNode("id");
+                                               if ( node && node.value === id ) {
+                                                       return [ elem ];
+                                               }
+                                       }
+                               }
+
+                               return [];
+                       }
+               };
+       }
+
+       // Tag
+       Expr.find["TAG"] = support.getElementsByTagName ?
+               function( tag, context ) {
+                       if ( typeof context.getElementsByTagName !== "undefined" ) {
+                               return context.getElementsByTagName( tag );
+
+                       // DocumentFragment nodes don't have gEBTN
+                       } else if ( support.qsa ) {
+                               return context.querySelectorAll( tag );
+                       }
+               } :
+
+               function( tag, context ) {
+                       var elem,
+                               tmp = [],
+                               i = 0,
+                               // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too
+                               results = context.getElementsByTagName( tag );
+
+                       // Filter out possible comments
+                       if ( tag === "*" ) {
+                               while ( (elem = results[i++]) ) {
+                                       if ( elem.nodeType === 1 ) {
+                                               tmp.push( elem );
+                                       }
+                               }
+
+                               return tmp;
+                       }
+                       return results;
+               };
+
+       // Class
+       Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) {
+               if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) {
+                       return context.getElementsByClassName( className );
+               }
+       };
+
+       /* QSA/matchesSelector
+       ---------------------------------------------------------------------- */
+
+       // QSA and matchesSelector support
+
+       // matchesSelector(:active) reports false when true (IE9/Opera 11.5)
+       rbuggyMatches = [];
+
+       // qSa(:focus) reports false when true (Chrome 21)
+       // We allow this because of a bug in IE8/9 that throws an error
+       // whenever `document.activeElement` is accessed on an iframe
+       // So, we allow :focus to pass through QSA all the time to avoid the IE error
+       // See https://bugs.jquery.com/ticket/13378
+       rbuggyQSA = [];
+
+       if ( (support.qsa = rnative.test( document.querySelectorAll )) ) {
+               // Build QSA regex
+               // Regex strategy adopted from Diego Perini
+               assert(function( el ) {
+                       // Select is set to empty string on purpose
+                       // This is to test IE's treatment of not explicitly
+                       // setting a boolean content attribute,
+                       // since its presence should be enough
+                       // https://bugs.jquery.com/ticket/12359
+                       docElem.appendChild( el ).innerHTML = "<a id='" + expando + "'></a>" +
+                               "<select id='" + expando + "-\r\\' msallowcapture=''>" +
+                               "<option selected=''></option></select>";
+
+                       // Support: IE8, Opera 11-12.16
+                       // Nothing should be selected when empty strings follow ^= or $= or *=
+                       // The test attribute must be unknown in Opera but "safe" for WinRT
+                       // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
+                       if ( el.querySelectorAll("[msallowcapture^='']").length ) {
+                               rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
+                       }
+
+                       // Support: IE8
+                       // Boolean attributes and "value" are not treated correctly
+                       if ( !el.querySelectorAll("[selected]").length ) {
+                               rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
+                       }
+
+                       // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+
+                       if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) {
+                               rbuggyQSA.push("~=");
+                       }
+
+                       // Webkit/Opera - :checked should return selected option elements
+                       // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
+                       // IE8 throws error here and will not see later tests
+                       if ( !el.querySelectorAll(":checked").length ) {
+                               rbuggyQSA.push(":checked");
+                       }
+
+                       // Support: Safari 8+, iOS 8+
+                       // https://bugs.webkit.org/show_bug.cgi?id=136851
+                       // In-page `selector#id sibling-combinator selector` fails
+                       if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) {
+                               rbuggyQSA.push(".#.+[+~]");
+                       }
+               });
+
+               assert(function( el ) {
+                       el.innerHTML = "<a href='' disabled='disabled'></a>" +
+                               "<select disabled='disabled'><option/></select>";
+
+                       // Support: Windows 8 Native Apps
+                       // The type and name attributes are restricted during .innerHTML assignment
+                       var input = document.createElement("input");
+                       input.setAttribute( "type", "hidden" );
+                       el.appendChild( input ).setAttribute( "name", "D" );
+
+                       // Support: IE8
+                       // Enforce case-sensitivity of name attribute
+                       if ( el.querySelectorAll("[name=d]").length ) {
+                               rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" );
+                       }
+
+                       // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
+                       // IE8 throws error here and will not see later tests
+                       if ( el.querySelectorAll(":enabled").length !== 2 ) {
+                               rbuggyQSA.push( ":enabled", ":disabled" );
+                       }
+
+                       // Support: IE9-11+
+                       // IE's :disabled selector does not pick up the children of disabled fieldsets
+                       docElem.appendChild( el ).disabled = true;
+                       if ( el.querySelectorAll(":disabled").length !== 2 ) {
+                               rbuggyQSA.push( ":enabled", ":disabled" );
+                       }
+
+                       // Opera 10-11 does not throw on post-comma invalid pseudos
+                       el.querySelectorAll("*,:x");
+                       rbuggyQSA.push(",.*:");
+               });
+       }
+
+       if ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||
+               docElem.webkitMatchesSelector ||
+               docElem.mozMatchesSelector ||
+               docElem.oMatchesSelector ||
+               docElem.msMatchesSelector) )) ) {
+
+               assert(function( el ) {
+                       // Check to see if it's possible to do matchesSelector
+                       // on a disconnected node (IE 9)
+                       support.disconnectedMatch = matches.call( el, "*" );
+
+                       // This should fail with an exception
+                       // Gecko does not error, returns false instead
+                       matches.call( el, "[s!='']:x" );
+                       rbuggyMatches.push( "!=", pseudos );
+               });
+       }
+
+       rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") );
+       rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") );
+
+       /* Contains
+       ---------------------------------------------------------------------- */
+       hasCompare = rnative.test( docElem.compareDocumentPosition );
+
+       // Element contains another
+       // Purposefully self-exclusive
+       // As in, an element does not contain itself
+       contains = hasCompare || rnative.test( docElem.contains ) ?
+               function( a, b ) {
+                       var adown = a.nodeType === 9 ? a.documentElement : a,
+                               bup = b && b.parentNode;
+                       return a === bup || !!( bup && bup.nodeType === 1 && (
+                               adown.contains ?
+                                       adown.contains( bup ) :
+                                       a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
+                       ));
+               } :
+               function( a, b ) {
+                       if ( b ) {
+                               while ( (b = b.parentNode) ) {
+                                       if ( b === a ) {
+                                               return true;
+                                       }
+                               }
+                       }
+                       return false;
+               };
+
+       /* Sorting
+       ---------------------------------------------------------------------- */
+
+       // Document order sorting
+       sortOrder = hasCompare ?
+       function( a, b ) {
+
+               // Flag for duplicate removal
+               if ( a === b ) {
+                       hasDuplicate = true;
+                       return 0;
+               }
+
+               // Sort on method existence if only one input has compareDocumentPosition
+               var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
+               if ( compare ) {
+                       return compare;
+               }
+
+               // Calculate position if both inputs belong to the same document
+               compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?
+                       a.compareDocumentPosition( b ) :
+
+                       // Otherwise we know they are disconnected
+                       1;
+
+               // Disconnected nodes
+               if ( compare & 1 ||
+                       (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {
+
+                       // Choose the first element that is related to our preferred document
+                       if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {
+                               return -1;
+                       }
+                       if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {
+                               return 1;
+                       }
+
+                       // Maintain original order
+                       return sortInput ?
+                               ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
+                               0;
+               }
+
+               return compare & 4 ? -1 : 1;
+       } :
+       function( a, b ) {
+               // Exit early if the nodes are identical
+               if ( a === b ) {
+                       hasDuplicate = true;
+                       return 0;
+               }
+
+               var cur,
+                       i = 0,
+                       aup = a.parentNode,
+                       bup = b.parentNode,
+                       ap = [ a ],
+                       bp = [ b ];
+
+               // Parentless nodes are either documents or disconnected
+               if ( !aup || !bup ) {
+                       return a === document ? -1 :
+                               b === document ? 1 :
+                               aup ? -1 :
+                               bup ? 1 :
+                               sortInput ?
+                               ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
+                               0;
+
+               // If the nodes are siblings, we can do a quick check
+               } else if ( aup === bup ) {
+                       return siblingCheck( a, b );
+               }
+
+               // Otherwise we need full lists of their ancestors for comparison
+               cur = a;
+               while ( (cur = cur.parentNode) ) {
+                       ap.unshift( cur );
+               }
+               cur = b;
+               while ( (cur = cur.parentNode) ) {
+                       bp.unshift( cur );
+               }
+
+               // Walk down the tree looking for a discrepancy
+               while ( ap[i] === bp[i] ) {
+                       i++;
+               }
+
+               return i ?
+                       // Do a sibling check if the nodes have a common ancestor
+                       siblingCheck( ap[i], bp[i] ) :
+
+                       // Otherwise nodes in our document sort first
+                       ap[i] === preferredDoc ? -1 :
+                       bp[i] === preferredDoc ? 1 :
+                       0;
+       };
+
+       return document;
+};
+
+Sizzle.matches = function( expr, elements ) {
+       return Sizzle( expr, null, null, elements );
+};
+
+Sizzle.matchesSelector = function( elem, expr ) {
+       // Set document vars if needed
+       if ( ( elem.ownerDocument || elem ) !== document ) {
+               setDocument( elem );
+       }
+
+       // Make sure that attribute selectors are quoted
+       expr = expr.replace( rattributeQuotes, "='$1']" );
+
+       if ( support.matchesSelector && documentIsHTML &&
+               !compilerCache[ expr + " " ] &&
+               ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&
+               ( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {
+
+               try {
+                       var ret = matches.call( elem, expr );
+
+                       // IE 9's matchesSelector returns false on disconnected nodes
+                       if ( ret || support.disconnectedMatch ||
+                                       // As well, disconnected nodes are said to be in a document
+                                       // fragment in IE 9
+                                       elem.document && elem.document.nodeType !== 11 ) {
+                               return ret;
+                       }
+               } catch (e) {}
+       }
+
+       return Sizzle( expr, document, null, [ elem ] ).length > 0;
+};
+
+Sizzle.contains = function( context, elem ) {
+       // Set document vars if needed
+       if ( ( context.ownerDocument || context ) !== document ) {
+               setDocument( context );
+       }
+       return contains( context, elem );
+};
+
+Sizzle.attr = function( elem, name ) {
+       // Set document vars if needed
+       if ( ( elem.ownerDocument || elem ) !== document ) {
+               setDocument( elem );
+       }
+
+       var fn = Expr.attrHandle[ name.toLowerCase() ],
+               // Don't get fooled by Object.prototype properties (jQuery #13807)
+               val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
+                       fn( elem, name, !documentIsHTML ) :
+                       undefined;
+
+       return val !== undefined ?
+               val :
+               support.attributes || !documentIsHTML ?
+                       elem.getAttribute( name ) :
+                       (val = elem.getAttributeNode(name)) && val.specified ?
+                               val.value :
+                               null;
+};
+
+Sizzle.escape = function( sel ) {
+       return (sel + "").replace( rcssescape, fcssescape );
+};
+
+Sizzle.error = function( msg ) {
+       throw new Error( "Syntax error, unrecognized expression: " + msg );
+};
+
+/**
+ * Document sorting and removing duplicates
+ * @param {ArrayLike} results
+ */
+Sizzle.uniqueSort = function( results ) {
+       var elem,
+               duplicates = [],
+               j = 0,
+               i = 0;
+
+       // Unless we *know* we can detect duplicates, assume their presence
+       hasDuplicate = !support.detectDuplicates;
+       sortInput = !support.sortStable && results.slice( 0 );
+       results.sort( sortOrder );
+
+       if ( hasDuplicate ) {
+               while ( (elem = results[i++]) ) {
+                       if ( elem === results[ i ] ) {
+                               j = duplicates.push( i );
+                       }
+               }
+               while ( j-- ) {
+                       results.splice( duplicates[ j ], 1 );
+               }
+       }
+
+       // Clear input after sorting to release objects
+       // See https://github.com/jquery/sizzle/pull/225
+       sortInput = null;
+
+       return results;
+};
+
+/**
+ * Utility function for retrieving the text value of an array of DOM nodes
+ * @param {Array|Element} elem
+ */
+getText = Sizzle.getText = function( elem ) {
+       var node,
+               ret = "",
+               i = 0,
+               nodeType = elem.nodeType;
+
+       if ( !nodeType ) {
+               // If no nodeType, this is expected to be an array
+               while ( (node = elem[i++]) ) {
+                       // Do not traverse comment nodes
+                       ret += getText( node );
+               }
+       } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
+               // Use textContent for elements
+               // innerText usage removed for consistency of new lines (jQuery #11153)
+               if ( typeof elem.textContent === "string" ) {
+                       return elem.textContent;
+               } else {
+                       // Traverse its children
+                       for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
+                               ret += getText( elem );
+                       }
+               }
+       } else if ( nodeType === 3 || nodeType === 4 ) {
+               return elem.nodeValue;
+       }
+       // Do not include comment or processing instruction nodes
+
+       return ret;
+};
+
+Expr = Sizzle.selectors = {
+
+       // Can be adjusted by the user
+       cacheLength: 50,
+
+       createPseudo: markFunction,
+
+       match: matchExpr,
+
+       attrHandle: {},
+
+       find: {},
+
+       relative: {
+               ">": { dir: "parentNode", first: true },
+               " ": { dir: "parentNode" },
+               "+": { dir: "previousSibling", first: true },
+               "~": { dir: "previousSibling" }
+       },
+
+       preFilter: {
+               "ATTR": function( match ) {
+                       match[1] = match[1].replace( runescape, funescape );
+
+                       // Move the given value to match[3] whether quoted or unquoted
+                       match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape );
+
+                       if ( match[2] === "~=" ) {
+                               match[3] = " " + match[3] + " ";
+                       }
+
+                       return match.slice( 0, 4 );
+               },
+
+               "CHILD": function( match ) {
+                       /* matches from matchExpr["CHILD"]
+                               1 type (only|nth|...)
+                               2 what (child|of-type)
+                               3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
+                               4 xn-component of xn+y argument ([+-]?\d*n|)
+                               5 sign of xn-component
+                               6 x of xn-component
+                               7 sign of y-component
+                               8 y of y-component
+                       */
+                       match[1] = match[1].toLowerCase();
+
+                       if ( match[1].slice( 0, 3 ) === "nth" ) {
+                               // nth-* requires argument
+                               if ( !match[3] ) {
+                                       Sizzle.error( match[0] );
+                               }
+
+                               // numeric x and y parameters for Expr.filter.CHILD
+                               // remember that false/true cast respectively to 0/1
+                               match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
+                               match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );
+
+                       // other types prohibit arguments
+                       } else if ( match[3] ) {
+                               Sizzle.error( match[0] );
+                       }
+
+                       return match;
+               },
+
+               "PSEUDO": function( match ) {
+                       var excess,
+                               unquoted = !match[6] && match[2];
+
+                       if ( matchExpr["CHILD"].test( match[0] ) ) {
+                               return null;
+                       }
+
+                       // Accept quoted arguments as-is
+                       if ( match[3] ) {
+                               match[2] = match[4] || match[5] || "";
+
+                       // Strip excess characters from unquoted arguments
+                       } else if ( unquoted && rpseudo.test( unquoted ) &&
+                               // Get excess from tokenize (recursively)
+                               (excess = tokenize( unquoted, true )) &&
+                               // advance to the next closing parenthesis
+                               (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {
+
+                               // excess is a negative index
+                               match[0] = match[0].slice( 0, excess );
+                               match[2] = unquoted.slice( 0, excess );
+                       }
+
+                       // Return only captures needed by the pseudo filter method (type and argument)
+                       return match.slice( 0, 3 );
+               }
+       },
+
+       filter: {
+
+               "TAG": function( nodeNameSelector ) {
+                       var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
+                       return nodeNameSelector === "*" ?
+                               function() { return true; } :
+                               function( elem ) {
+                                       return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
+                               };
+               },
+
+               "CLASS": function( className ) {
+                       var pattern = classCache[ className + " " ];
+
+                       return pattern ||
+                               (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
+                               classCache( className, function( elem ) {
+                                       return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" );
+                               });
+               },
+
+               "ATTR": function( name, operator, check ) {
+                       return function( elem ) {
+                               var result = Sizzle.attr( elem, name );
+
+                               if ( result == null ) {
+                                       return operator === "!=";
+                               }
+                               if ( !operator ) {
+                                       return true;
+                               }
+
+                               result += "";
+
+                               return operator === "=" ? result === check :
+                                       operator === "!=" ? result !== check :
+                                       operator === "^=" ? check && result.indexOf( check ) === 0 :
+                                       operator === "*=" ? check && result.indexOf( check ) > -1 :
+                                       operator === "$=" ? check && result.slice( -check.length ) === check :
+                                       operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 :
+                                       operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
+                                       false;
+                       };
+               },
+
+               "CHILD": function( type, what, argument, first, last ) {
+                       var simple = type.slice( 0, 3 ) !== "nth",
+                               forward = type.slice( -4 ) !== "last",
+                               ofType = what === "of-type";
+
+                       return first === 1 && last === 0 ?
+
+                               // Shortcut for :nth-*(n)
+                               function( elem ) {
+                                       return !!elem.parentNode;
+                               } :
+
+                               function( elem, context, xml ) {
+                                       var cache, uniqueCache, outerCache, node, nodeIndex, start,
+                                               dir = simple !== forward ? "nextSibling" : "previousSibling",
+                                               parent = elem.parentNode,
+                                               name = ofType && elem.nodeName.toLowerCase(),
+                                               useCache = !xml && !ofType,
+                                               diff = false;
+
+                                       if ( parent ) {
+
+                                               // :(first|last|only)-(child|of-type)
+                                               if ( simple ) {
+                                                       while ( dir ) {
+                                                               node = elem;
+                                                               while ( (node = node[ dir ]) ) {
+                                                                       if ( ofType ?
+                                                                               node.nodeName.toLowerCase() === name :
+                                                                               node.nodeType === 1 ) {
+
+                                                                               return false;
+                                                                       }
+                                                               }
+                                                               // Reverse direction for :only-* (if we haven't yet done so)
+                                                               start = dir = type === "only" && !start && "nextSibling";
+                                                       }
+                                                       return true;
+                                               }
+
+                                               start = [ forward ? parent.firstChild : parent.lastChild ];
+
+                                               // non-xml :nth-child(...) stores cache data on `parent`
+                                               if ( forward && useCache ) {
+
+                                                       // Seek `elem` from a previously-cached index
+
+                                                       // ...in a gzip-friendly way
+                                                       node = parent;
+                                                       outerCache = node[ expando ] || (node[ expando ] = {});
+
+                                                       // Support: IE <9 only
+                                                       // Defend against cloned attroperties (jQuery gh-1709)
+                                                       uniqueCache = outerCache[ node.uniqueID ] ||
+                                                               (outerCache[ node.uniqueID ] = {});
+
+                                                       cache = uniqueCache[ type ] || [];
+                                                       nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
+                                                       diff = nodeIndex && cache[ 2 ];
+                                                       node = nodeIndex && parent.childNodes[ nodeIndex ];
+
+                                                       while ( (node = ++nodeIndex && node && node[ dir ] ||
+
+                                                               // Fallback to seeking `elem` from the start
+                                                               (diff = nodeIndex = 0) || start.pop()) ) {
+
+                                                               // When found, cache indexes on `parent` and break
+                                                               if ( node.nodeType === 1 && ++diff && node === elem ) {
+                                                                       uniqueCache[ type ] = [ dirruns, nodeIndex, diff ];
+                                                                       break;
+                                                               }
+                                                       }
+
+                                               } else {
+                                                       // Use previously-cached element index if available
+                                                       if ( useCache ) {
+                                                               // ...in a gzip-friendly way
+                                                               node = elem;
+                                                               outerCache = node[ expando ] || (node[ expando ] = {});
+
+                                                               // Support: IE <9 only
+                                                               // Defend against cloned attroperties (jQuery gh-1709)
+                                                               uniqueCache = outerCache[ node.uniqueID ] ||
+                                                                       (outerCache[ node.uniqueID ] = {});
+
+                                                               cache = uniqueCache[ type ] || [];
+                                                               nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
+                                                               diff = nodeIndex;
+                                                       }
+
+                                                       // xml :nth-child(...)
+                                                       // or :nth-last-child(...) or :nth(-last)?-of-type(...)
+                                                       if ( diff === false ) {
+                                                               // Use the same loop as above to seek `elem` from the start
+                                                               while ( (node = ++nodeIndex && node && node[ dir ] ||
+                                                                       (diff = nodeIndex = 0) || start.pop()) ) {
+
+                                                                       if ( ( ofType ?
+                                                                               node.nodeName.toLowerCase() === name :
+                                                                               node.nodeType === 1 ) &&
+                                                                               ++diff ) {
+
+                                                                               // Cache the index of each encountered element
+                                                                               if ( useCache ) {
+                                                                                       outerCache = node[ expando ] || (node[ expando ] = {});
+
+                                                                                       // Support: IE <9 only
+                                                                                       // Defend against cloned attroperties (jQuery gh-1709)
+                                                                                       uniqueCache = outerCache[ node.uniqueID ] ||
+                                                                                               (outerCache[ node.uniqueID ] = {});
+
+                                                                                       uniqueCache[ type ] = [ dirruns, diff ];
+                                                                               }
+
+                                                                               if ( node === elem ) {
+                                                                                       break;
+                                                                               }
+                                                                       }
+                                                               }
+                                                       }
+                                               }
+
+                                               // Incorporate the offset, then check against cycle size
+                                               diff -= last;
+                                               return diff === first || ( diff % first === 0 && diff / first >= 0 );
+                                       }
+                               };
+               },
+
+               "PSEUDO": function( pseudo, argument ) {
+                       // pseudo-class names are case-insensitive
+                       // http://www.w3.org/TR/selectors/#pseudo-classes
+                       // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
+                       // Remember that setFilters inherits from pseudos
+                       var args,
+                               fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
+                                       Sizzle.error( "unsupported pseudo: " + pseudo );
+
+                       // The user may use createPseudo to indicate that
+                       // arguments are needed to create the filter function
+                       // just as Sizzle does
+                       if ( fn[ expando ] ) {
+                               return fn( argument );
+                       }
+
+                       // But maintain support for old signatures
+                       if ( fn.length > 1 ) {
+                               args = [ pseudo, pseudo, "", argument ];
+                               return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
+                                       markFunction(function( seed, matches ) {
+                                               var idx,
+                                                       matched = fn( seed, argument ),
+                                                       i = matched.length;
+                                               while ( i-- ) {
+                                                       idx = indexOf( seed, matched[i] );
+                                                       seed[ idx ] = !( matches[ idx ] = matched[i] );
+                                               }
+                                       }) :
+                                       function( elem ) {
+                                               return fn( elem, 0, args );
+                                       };
+                       }
+
+                       return fn;
+               }
+       },
+
+       pseudos: {
+               // Potentially complex pseudos
+               "not": markFunction(function( selector ) {
+                       // Trim the selector passed to compile
+                       // to avoid treating leading and trailing
+                       // spaces as combinators
+                       var input = [],
+                               results = [],
+                               matcher = compile( selector.replace( rtrim, "$1" ) );
+
+                       return matcher[ expando ] ?
+                               markFunction(function( seed, matches, context, xml ) {
+                                       var elem,
+                                               unmatched = matcher( seed, null, xml, [] ),
+                                               i = seed.length;
+
+                                       // Match elements unmatched by `matcher`
+                                       while ( i-- ) {
+                                               if ( (elem = unmatched[i]) ) {
+                                                       seed[i] = !(matches[i] = elem);
+                                               }
+                                       }
+                               }) :
+                               function( elem, context, xml ) {
+                                       input[0] = elem;
+                                       matcher( input, null, xml, results );
+                                       // Don't keep the element (issue #299)
+                                       input[0] = null;
+                                       return !results.pop();
+                               };
+               }),
+
+               "has": markFunction(function( selector ) {
+                       return function( elem ) {
+                               return Sizzle( selector, elem ).length > 0;
+                       };
+               }),
+
+               "contains": markFunction(function( text ) {
+                       text = text.replace( runescape, funescape );
+                       return function( elem ) {
+                               return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;
+                       };
+               }),
+
+               // "Whether an element is represented by a :lang() selector
+               // is based solely on the element's language value
+               // being equal to the identifier C,
+               // or beginning with the identifier C immediately followed by "-".
+               // The matching of C against the element's language value is performed case-insensitively.
+               // The identifier C does not have to be a valid language name."
+               // http://www.w3.org/TR/selectors/#lang-pseudo
+               "lang": markFunction( function( lang ) {
+                       // lang value must be a valid identifier
+                       if ( !ridentifier.test(lang || "") ) {
+                               Sizzle.error( "unsupported lang: " + lang );
+                       }
+                       lang = lang.replace( runescape, funescape ).toLowerCase();
+                       return function( elem ) {
+                               var elemLang;
+                               do {
+                                       if ( (elemLang = documentIsHTML ?
+                                               elem.lang :
+                                               elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) {
+
+                                               elemLang = elemLang.toLowerCase();
+                                               return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
+                                       }
+                               } while ( (elem = elem.parentNode) && elem.nodeType === 1 );
+                               return false;
+                       };
+               }),
+
+               // Miscellaneous
+               "target": function( elem ) {
+                       var hash = window.location && window.location.hash;
+                       return hash && hash.slice( 1 ) === elem.id;
+               },
+
+               "root": function( elem ) {
+                       return elem === docElem;
+               },
+
+               "focus": function( elem ) {
+                       return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
+               },
+
+               // Boolean properties
+               "enabled": createDisabledPseudo( false ),
+               "disabled": createDisabledPseudo( true ),
+
+               "checked": function( elem ) {
+                       // In CSS3, :checked should return both checked and selected elements
+                       // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
+                       var nodeName = elem.nodeName.toLowerCase();
+                       return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
+               },
+
+               "selected": function( elem ) {
+                       // Accessing this property makes selected-by-default
+                       // options in Safari work properly
+                       if ( elem.parentNode ) {
+                               elem.parentNode.selectedIndex;
+                       }
+
+                       return elem.selected === true;
+               },
+
+               // Contents
+               "empty": function( elem ) {
+                       // http://www.w3.org/TR/selectors/#empty-pseudo
+                       // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
+                       //   but not by others (comment: 8; processing instruction: 7; etc.)
+                       // nodeType < 6 works because attributes (2) do not appear as children
+                       for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
+                               if ( elem.nodeType < 6 ) {
+                                       return false;
+                               }
+                       }
+                       return true;
+               },
+
+               "parent": function( elem ) {
+                       return !Expr.pseudos["empty"]( elem );
+               },
+
+               // Element/input types
+               "header": function( elem ) {
+                       return rheader.test( elem.nodeName );
+               },
+
+               "input": function( elem ) {
+                       return rinputs.test( elem.nodeName );
+               },
+
+               "button": function( elem ) {
+                       var name = elem.nodeName.toLowerCase();
+                       return name === "input" && elem.type === "button" || name === "button";
+               },
+
+               "text": function( elem ) {
+                       var attr;
+                       return elem.nodeName.toLowerCase() === "input" &&
+                               elem.type === "text" &&
+
+                               // Support: IE<8
+                               // New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
+                               ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" );
+               },
+
+               // Position-in-collection
+               "first": createPositionalPseudo(function() {
+                       return [ 0 ];
+               }),
+
+               "last": createPositionalPseudo(function( matchIndexes, length ) {
+                       return [ length - 1 ];
+               }),
+
+               "eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
+                       return [ argument < 0 ? argument + length : argument ];
+               }),
+
+               "even": createPositionalPseudo(function( matchIndexes, length ) {
+                       var i = 0;
+                       for ( ; i < length; i += 2 ) {
+                               matchIndexes.push( i );
+                       }
+                       return matchIndexes;
+               }),
+
+               "odd": createPositionalPseudo(function( matchIndexes, length ) {
+                       var i = 1;
+                       for ( ; i < length; i += 2 ) {
+                               matchIndexes.push( i );
+                       }
+                       return matchIndexes;
+               }),
+
+               "lt": createPositionalPseudo(function( matchIndexes, length, argument ) {
+                       var i = argument < 0 ? argument + length : argument;
+                       for ( ; --i >= 0; ) {
+                               matchIndexes.push( i );
+                       }
+                       return matchIndexes;
+               }),
+
+               "gt": createPositionalPseudo(function( matchIndexes, length, argument ) {
+                       var i = argument < 0 ? argument + length : argument;
+                       for ( ; ++i < length; ) {
+                               matchIndexes.push( i );
+                       }
+                       return matchIndexes;
+               })
+       }
+};
+
+Expr.pseudos["nth"] = Expr.pseudos["eq"];
+
+// Add button/input type pseudos
+for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
+       Expr.pseudos[ i ] = createInputPseudo( i );
+}
+for ( i in { submit: true, reset: true } ) {
+       Expr.pseudos[ i ] = createButtonPseudo( i );
+}
+
+// Easy API for creating new setFilters
+function setFilters() {}
+setFilters.prototype = Expr.filters = Expr.pseudos;
+Expr.setFilters = new setFilters();
+
+tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
+       var matched, match, tokens, type,
+               soFar, groups, preFilters,
+               cached = tokenCache[ selector + " " ];
+
+       if ( cached ) {
+               return parseOnly ? 0 : cached.slice( 0 );
+       }
+
+       soFar = selector;
+       groups = [];
+       preFilters = Expr.preFilter;
+
+       while ( soFar ) {
+
+               // Comma and first run
+               if ( !matched || (match = rcomma.exec( soFar )) ) {
+                       if ( match ) {
+                               // Don't consume trailing commas as valid
+                               soFar = soFar.slice( match[0].length ) || soFar;
+                       }
+                       groups.push( (tokens = []) );
+               }
+
+               matched = false;
+
+               // Combinators
+               if ( (match = rcombinators.exec( soFar )) ) {
+                       matched = match.shift();
+                       tokens.push({
+                               value: matched,
+                               // Cast descendant combinators to space
+                               type: match[0].replace( rtrim, " " )
+                       });
+                       soFar = soFar.slice( matched.length );
+               }
+
+               // Filters
+               for ( type in Expr.filter ) {
+                       if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
+                               (match = preFilters[ type ]( match ))) ) {
+                               matched = match.shift();
+                               tokens.push({
+                                       value: matched,
+                                       type: type,
+                                       matches: match
+                               });
+                               soFar = soFar.slice( matched.length );
+                       }
+               }
+
+               if ( !matched ) {
+                       break;
+               }
+       }
+
+       // Return the length of the invalid excess
+       // if we're just parsing
+       // Otherwise, throw an error or return tokens
+       return parseOnly ?
+               soFar.length :
+               soFar ?
+                       Sizzle.error( selector ) :
+                       // Cache the tokens
+                       tokenCache( selector, groups ).slice( 0 );
+};
+
+function toSelector( tokens ) {
+       var i = 0,
+               len = tokens.length,
+               selector = "";
+       for ( ; i < len; i++ ) {
+               selector += tokens[i].value;
+       }
+       return selector;
+}
+
+function addCombinator( matcher, combinator, base ) {
+       var dir = combinator.dir,
+               skip = combinator.next,
+               key = skip || dir,
+               checkNonElements = base && key === "parentNode",
+               doneName = done++;
+
+       return combinator.first ?
+               // Check against closest ancestor/preceding element
+               function( elem, context, xml ) {
+                       while ( (elem = elem[ dir ]) ) {
+                               if ( elem.nodeType === 1 || checkNonElements ) {
+                                       return matcher( elem, context, xml );
+                               }
+                       }
+                       return false;
+               } :
+
+               // Check against all ancestor/preceding elements
+               function( elem, context, xml ) {
+                       var oldCache, uniqueCache, outerCache,
+                               newCache = [ dirruns, doneName ];
+
+                       // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching
+                       if ( xml ) {
+                               while ( (elem = elem[ dir ]) ) {
+                                       if ( elem.nodeType === 1 || checkNonElements ) {
+                                               if ( matcher( elem, context, xml ) ) {
+                                                       return true;
+                                               }
+                                       }
+                               }
+                       } else {
+                               while ( (elem = elem[ dir ]) ) {
+                                       if ( elem.nodeType === 1 || checkNonElements ) {
+                                               outerCache = elem[ expando ] || (elem[ expando ] = {});
+
+                                               // Support: IE <9 only
+                                               // Defend against cloned attroperties (jQuery gh-1709)
+                                               uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});
+
+                                               if ( skip && skip === elem.nodeName.toLowerCase() ) {
+                                                       elem = elem[ dir ] || elem;
+                                               } else if ( (oldCache = uniqueCache[ key ]) &&
+                                                       oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {
+
+                                                       // Assign to newCache so results back-propagate to previous elements
+                                                       return (newCache[ 2 ] = oldCache[ 2 ]);
+                                               } else {
+                                                       // Reuse newcache so results back-propagate to previous elements
+                                                       uniqueCache[ key ] = newCache;
+
+                                                       // A match means we're done; a fail means we have to keep checking
+                                                       if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {
+                                                               return true;
+                                                       }
+                                               }
+                                       }
+                               }
+                       }
+                       return false;
+               };
+}
+
+function elementMatcher( matchers ) {
+       return matchers.length > 1 ?
+               function( elem, context, xml ) {
+                       var i = matchers.length;
+                       while ( i-- ) {
+                               if ( !matchers[i]( elem, context, xml ) ) {
+                                       return false;
+                               }
+                       }
+                       return true;
+               } :
+               matchers[0];
+}
+
+function multipleContexts( selector, contexts, results ) {
+       var i = 0,
+               len = contexts.length;
+       for ( ; i < len; i++ ) {
+               Sizzle( selector, contexts[i], results );
+       }
+       return results;
+}
+
+function condense( unmatched, map, filter, context, xml ) {
+       var elem,
+               newUnmatched = [],
+               i = 0,
+               len = unmatched.length,
+               mapped = map != null;
+
+       for ( ; i < len; i++ ) {
+               if ( (elem = unmatched[i]) ) {
+                       if ( !filter || filter( elem, context, xml ) ) {
+                               newUnmatched.push( elem );
+                               if ( mapped ) {
+                                       map.push( i );
+                               }
+                       }
+               }
+       }
+
+       return newUnmatched;
+}
+
+function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
+       if ( postFilter && !postFilter[ expando ] ) {
+               postFilter = setMatcher( postFilter );
+       }
+       if ( postFinder && !postFinder[ expando ] ) {
+               postFinder = setMatcher( postFinder, postSelector );
+       }
+       return markFunction(function( seed, results, context, xml ) {
+               var temp, i, elem,
+                       preMap = [],
+                       postMap = [],
+                       preexisting = results.length,
+
+                       // Get initial elements from seed or context
+                       elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),
+
+                       // Prefilter to get matcher input, preserving a map for seed-results synchronization
+                       matcherIn = preFilter && ( seed || !selector ) ?
+                               condense( elems, preMap, preFilter, context, xml ) :
+                               elems,
+
+                       matcherOut = matcher ?
+                               // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
+                               postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
+
+                                       // ...intermediate processing is necessary
+                                       [] :
+
+                                       // ...otherwise use results directly
+                                       results :
+                               matcherIn;
+
+               // Find primary matches
+               if ( matcher ) {
+                       matcher( matcherIn, matcherOut, context, xml );
+               }
+
+               // Apply postFilter
+               if ( postFilter ) {
+                       temp = condense( matcherOut, postMap );
+                       postFilter( temp, [], context, xml );
+
+                       // Un-match failing elements by moving them back to matcherIn
+                       i = temp.length;
+                       while ( i-- ) {
+                               if ( (elem = temp[i]) ) {
+                                       matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
+                               }
+                       }
+               }
+
+               if ( seed ) {
+                       if ( postFinder || preFilter ) {
+                               if ( postFinder ) {
+                                       // Get the final matcherOut by condensing this intermediate into postFinder contexts
+                                       temp = [];
+                                       i = matcherOut.length;
+                                       while ( i-- ) {
+                                               if ( (elem = matcherOut[i]) ) {
+                                                       // Restore matcherIn since elem is not yet a final match
+                                                       temp.push( (matcherIn[i] = elem) );
+                                               }
+                                       }
+                                       postFinder( null, (matcherOut = []), temp, xml );
+                               }
+
+                               // Move matched elements from seed to results to keep them synchronized
+                               i = matcherOut.length;
+                               while ( i-- ) {
+                                       if ( (elem = matcherOut[i]) &&
+                                               (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {
+
+                                               seed[temp] = !(results[temp] = elem);
+                                       }
+                               }
+                       }
+
+               // Add elements to results, through postFinder if defined
+               } else {
+                       matcherOut = condense(
+                               matcherOut === results ?
+                                       matcherOut.splice( preexisting, matcherOut.length ) :
+                                       matcherOut
+                       );
+                       if ( postFinder ) {
+                               postFinder( null, results, matcherOut, xml );
+                       } else {
+                               push.apply( results, matcherOut );
+                       }
+               }
+       });
+}
+
+function matcherFromTokens( tokens ) {
+       var checkContext, matcher, j,
+               len = tokens.length,
+               leadingRelative = Expr.relative[ tokens[0].type ],
+               implicitRelative = leadingRelative || Expr.relative[" "],
+               i = leadingRelative ? 1 : 0,
+
+               // The foundational matcher ensures that elements are reachable from top-level context(s)
+               matchContext = addCombinator( function( elem ) {
+                       return elem === checkContext;
+               }, implicitRelative, true ),
+               matchAnyContext = addCombinator( function( elem ) {
+                       return indexOf( checkContext, elem ) > -1;
+               }, implicitRelative, true ),
+               matchers = [ function( elem, context, xml ) {
+                       var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
+                               (checkContext = context).nodeType ?
+                                       matchContext( elem, context, xml ) :
+                                       matchAnyContext( elem, context, xml ) );
+                       // Avoid hanging onto element (issue #299)
+                       checkContext = null;
+                       return ret;
+               } ];
+
+       for ( ; i < len; i++ ) {
+               if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
+                       matchers = [ addCombinator(elementMatcher( matchers ), matcher) ];
+               } else {
+                       matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );
+
+                       // Return special upon seeing a positional matcher
+                       if ( matcher[ expando ] ) {
+                               // Find the next relative operator (if any) for proper handling
+                               j = ++i;
+                               for ( ; j < len; j++ ) {
+                                       if ( Expr.relative[ tokens[j].type ] ) {
+                                               break;
+                                       }
+                               }
+                               return setMatcher(
+                                       i > 1 && elementMatcher( matchers ),
+                                       i > 1 && toSelector(
+                                               // If the preceding token was a descendant combinator, insert an implicit any-element `*`
+                                               tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" })
+                                       ).replace( rtrim, "$1" ),
+                                       matcher,
+                                       i < j && matcherFromTokens( tokens.slice( i, j ) ),
+                                       j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
+                                       j < len && toSelector( tokens )
+                               );
+                       }
+                       matchers.push( matcher );
+               }
+       }
+
+       return elementMatcher( matchers );
+}
+
+function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
+       var bySet = setMatchers.length > 0,
+               byElement = elementMatchers.length > 0,
+               superMatcher = function( seed, context, xml, results, outermost ) {
+                       var elem, j, matcher,
+                               matchedCount = 0,
+                               i = "0",
+                               unmatched = seed && [],
+                               setMatched = [],
+                               contextBackup = outermostContext,
+                               // We must always have either seed elements or outermost context
+                               elems = seed || byElement && Expr.find["TAG"]( "*", outermost ),
+                               // Use integer dirruns iff this is the outermost matcher
+                               dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),
+                               len = elems.length;
+
+                       if ( outermost ) {
+                               outermostContext = context === document || context || outermost;
+                       }
+
+                       // Add elements passing elementMatchers directly to results
+                       // Support: IE<9, Safari
+                       // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id
+                       for ( ; i !== len && (elem = elems[i]) != null; i++ ) {
+                               if ( byElement && elem ) {
+                                       j = 0;
+                                       if ( !context && elem.ownerDocument !== document ) {
+                                               setDocument( elem );
+                                               xml = !documentIsHTML;
+                                       }
+                                       while ( (matcher = elementMatchers[j++]) ) {
+                                               if ( matcher( elem, context || document, xml) ) {
+                                                       results.push( elem );
+                                                       break;
+                                               }
+                                       }
+                                       if ( outermost ) {
+                                               dirruns = dirrunsUnique;
+                                       }
+                               }
+
+                               // Track unmatched elements for set filters
+                               if ( bySet ) {
+                                       // They will have gone through all possible matchers
+                                       if ( (elem = !matcher && elem) ) {
+                                               matchedCount--;
+                                       }
+
+                                       // Lengthen the array for every element, matched or not
+                                       if ( seed ) {
+                                               unmatched.push( elem );
+                                       }
+                               }
+                       }
+
+                       // `i` is now the count of elements visited above, and adding it to `matchedCount`
+                       // makes the latter nonnegative.
+                       matchedCount += i;
+
+                       // Apply set filters to unmatched elements
+                       // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`
+                       // equals `i`), unless we didn't visit _any_ elements in the above loop because we have
+                       // no element matchers and no seed.
+                       // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that
+                       // case, which will result in a "00" `matchedCount` that differs from `i` but is also
+                       // numerically zero.
+                       if ( bySet && i !== matchedCount ) {
+                               j = 0;
+                               while ( (matcher = setMatchers[j++]) ) {
+                                       matcher( unmatched, setMatched, context, xml );
+                               }
+
+                               if ( seed ) {
+                                       // Reintegrate element matches to eliminate the need for sorting
+                                       if ( matchedCount > 0 ) {
+                                               while ( i-- ) {
+                                                       if ( !(unmatched[i] || setMatched[i]) ) {
+                                                               setMatched[i] = pop.call( results );
+                                                       }
+                                               }
+                                       }
+
+                                       // Discard index placeholder values to get only actual matches
+                                       setMatched = condense( setMatched );
+                               }
+
+                               // Add matches to results
+                               push.apply( results, setMatched );
+
+                               // Seedless set matches succeeding multiple successful matchers stipulate sorting
+                               if ( outermost && !seed && setMatched.length > 0 &&
+                                       ( matchedCount + setMatchers.length ) > 1 ) {
+
+                                       Sizzle.uniqueSort( results );
+                               }
+                       }
+
+                       // Override manipulation of globals by nested matchers
+                       if ( outermost ) {
+                               dirruns = dirrunsUnique;
+                               outermostContext = contextBackup;
+                       }
+
+                       return unmatched;
+               };
+
+       return bySet ?
+               markFunction( superMatcher ) :
+               superMatcher;
+}
+
+compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {
+       var i,
+               setMatchers = [],
+               elementMatchers = [],
+               cached = compilerCache[ selector + " " ];
+
+       if ( !cached ) {
+               // Generate a function of recursive functions that can be used to check each element
+               if ( !match ) {
+                       match = tokenize( selector );
+               }
+               i = match.length;
+               while ( i-- ) {
+                       cached = matcherFromTokens( match[i] );
+                       if ( cached[ expando ] ) {
+                               setMatchers.push( cached );
+                       } else {
+                               elementMatchers.push( cached );
+                       }
+               }
+
+               // Cache the compiled function
+               cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
+
+               // Save selector and tokenization
+               cached.selector = selector;
+       }
+       return cached;
+};
+
+/**
+ * A low-level selection function that works with Sizzle's compiled
+ *  selector functions
+ * @param {String|Function} selector A selector or a pre-compiled
+ *  selector function built with Sizzle.compile
+ * @param {Element} context
+ * @param {Array} [results]
+ * @param {Array} [seed] A set of elements to match against
+ */
+select = Sizzle.select = function( selector, context, results, seed ) {
+       var i, tokens, token, type, find,
+               compiled = typeof selector === "function" && selector,
+               match = !seed && tokenize( (selector = compiled.selector || selector) );
+
+       results = results || [];
+
+       // Try to minimize operations if there is only one selector in the list and no seed
+       // (the latter of which guarantees us context)
+       if ( match.length === 1 ) {
+
+               // Reduce context if the leading compound selector is an ID
+               tokens = match[0] = match[0].slice( 0 );
+               if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
+                               context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) {
+
+                       context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];
+                       if ( !context ) {
+                               return results;
+
+                       // Precompiled matchers will still verify ancestry, so step up a level
+                       } else if ( compiled ) {
+                               context = context.parentNode;
+                       }
+
+                       selector = selector.slice( tokens.shift().value.length );
+               }
+
+               // Fetch a seed set for right-to-left matching
+               i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length;
+               while ( i-- ) {
+                       token = tokens[i];
+
+                       // Abort if we hit a combinator
+                       if ( Expr.relative[ (type = token.type) ] ) {
+                               break;
+                       }
+                       if ( (find = Expr.find[ type ]) ) {
+                               // Search, expanding context for leading sibling combinators
+                               if ( (seed = find(
+                                       token.matches[0].replace( runescape, funescape ),
+                                       rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context
+                               )) ) {
+
+                                       // If seed is empty or no tokens remain, we can return early
+                                       tokens.splice( i, 1 );
+                                       selector = seed.length && toSelector( tokens );
+                                       if ( !selector ) {
+                                               push.apply( results, seed );
+                                               return results;
+                                       }
+
+                                       break;
+                               }
+                       }
+               }
+       }
+
+       // Compile and execute a filtering function if one is not provided
+       // Provide `match` to avoid retokenization if we modified the selector above
+       ( compiled || compile( selector, match ) )(
+               seed,
+               context,
+               !documentIsHTML,
+               results,
+               !context || rsibling.test( selector ) && testContext( context.parentNode ) || context
+       );
+       return results;
+};
+
+// One-time assignments
+
+// Sort stability
+support.sortStable = expando.split("").sort( sortOrder ).join("") === expando;
+
+// Support: Chrome 14-35+
+// Always assume duplicates if they aren't passed to the comparison function
+support.detectDuplicates = !!hasDuplicate;
+
+// Initialize against the default document
+setDocument();
+
+// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
+// Detached nodes confoundingly follow *each other*
+support.sortDetached = assert(function( el ) {
+       // Should return 1, but returns 4 (following)
+       return el.compareDocumentPosition( document.createElement("fieldset") ) & 1;
+});
+
+// Support: IE<8
+// Prevent attribute/property "interpolation"
+// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
+if ( !assert(function( el ) {
+       el.innerHTML = "<a href='#'></a>";
+       return el.firstChild.getAttribute("href") === "#" ;
+}) ) {
+       addHandle( "type|href|height|width", function( elem, name, isXML ) {
+               if ( !isXML ) {
+                       return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 );
+               }
+       });
+}
+
+// Support: IE<9
+// Use defaultValue in place of getAttribute("value")
+if ( !support.attributes || !assert(function( el ) {
+       el.innerHTML = "<input/>";
+       el.firstChild.setAttribute( "value", "" );
+       return el.firstChild.getAttribute( "value" ) === "";
+}) ) {
+       addHandle( "value", function( elem, name, isXML ) {
+               if ( !isXML && elem.nodeName.toLowerCase() === "input" ) {
+                       return elem.defaultValue;
+               }
+       });
+}
+
+// Support: IE<9
+// Use getAttributeNode to fetch booleans when getAttribute lies
+if ( !assert(function( el ) {
+       return el.getAttribute("disabled") == null;
+}) ) {
+       addHandle( booleans, function( elem, name, isXML ) {
+               var val;
+               if ( !isXML ) {
+                       return elem[ name ] === true ? name.toLowerCase() :
+                                       (val = elem.getAttributeNode( name )) && val.specified ?
+                                       val.value :
+                               null;
+               }
+       });
+}
+
+return Sizzle;
+
+})( window );
+
+
+
+jQuery.find = Sizzle;
+jQuery.expr = Sizzle.selectors;
+
+// Deprecated
+jQuery.expr[ ":" ] = jQuery.expr.pseudos;
+jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;
+jQuery.text = Sizzle.getText;
+jQuery.isXMLDoc = Sizzle.isXML;
+jQuery.contains = Sizzle.contains;
+jQuery.escapeSelector = Sizzle.escape;
+
+
+
+
+var dir = function( elem, dir, until ) {
+       var matched = [],
+               truncate = until !== undefined;
+
+       while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {
+               if ( elem.nodeType === 1 ) {
+                       if ( truncate && jQuery( elem ).is( until ) ) {
+                               break;
+                       }
+                       matched.push( elem );
+               }
+       }
+       return matched;
+};
+
+
+var siblings = function( n, elem ) {
+       var matched = [];
+
+       for ( ; n; n = n.nextSibling ) {
+               if ( n.nodeType === 1 && n !== elem ) {
+                       matched.push( n );
+               }
+       }
+
+       return matched;
+};
+
+
+var rneedsContext = jQuery.expr.match.needsContext;
+
+
+
+function nodeName( elem, name ) {
+
+  return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
+
+};
+var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i );
+
+
+
+var risSimple = /^.[^:#\[\.,]*$/;
+
+// Implement the identical functionality for filter and not
+function winnow( elements, qualifier, not ) {
+       if ( jQuery.isFunction( qualifier ) ) {
+               return jQuery.grep( elements, function( elem, i ) {
+                       return !!qualifier.call( elem, i, elem ) !== not;
+               } );
+       }
+
+       // Single element
+       if ( qualifier.nodeType ) {
+               return jQuery.grep( elements, function( elem ) {
+                       return ( elem === qualifier ) !== not;
+               } );
+       }
+
+       // Arraylike of elements (jQuery, arguments, Array)
+       if ( typeof qualifier !== "string" ) {
+               return jQuery.grep( elements, function( elem ) {
+                       return ( indexOf.call( qualifier, elem ) > -1 ) !== not;
+               } );
+       }
+
+       // Simple selector that can be filtered directly, removing non-Elements
+       if ( risSimple.test( qualifier ) ) {
+               return jQuery.filter( qualifier, elements, not );
+       }
+
+       // Complex selector, compare the two sets, removing non-Elements
+       qualifier = jQuery.filter( qualifier, elements );
+       return jQuery.grep( elements, function( elem ) {
+               return ( indexOf.call( qualifier, elem ) > -1 ) !== not && elem.nodeType === 1;
+       } );
+}
+
+jQuery.filter = function( expr, elems, not ) {
+       var elem = elems[ 0 ];
+
+       if ( not ) {
+               expr = ":not(" + expr + ")";
+       }
+
+       if ( elems.length === 1 && elem.nodeType === 1 ) {
+               return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];
+       }
+
+       return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
+               return elem.nodeType === 1;
+       } ) );
+};
+
+jQuery.fn.extend( {
+       find: function( selector ) {
+               var i, ret,
+                       len = this.length,
+                       self = this;
+
+               if ( typeof selector !== "string" ) {
+                       return this.pushStack( jQuery( selector ).filter( function() {
+                               for ( i = 0; i < len; i++ ) {
+                                       if ( jQuery.contains( self[ i ], this ) ) {
+                                               return true;
+                                       }
+                               }
+                       } ) );
+               }
+
+               ret = this.pushStack( [] );
+
+               for ( i = 0; i < len; i++ ) {
+                       jQuery.find( selector, self[ i ], ret );
+               }
+
+               return len > 1 ? jQuery.uniqueSort( ret ) : ret;
+       },
+       filter: function( selector ) {
+               return this.pushStack( winnow( this, selector || [], false ) );
+       },
+       not: function( selector ) {
+               return this.pushStack( winnow( this, selector || [], true ) );
+       },
+       is: function( selector ) {
+               return !!winnow(
+                       this,
+
+                       // If this is a positional/relative selector, check membership in the returned set
+                       // so $("p:first").is("p:last") won't return true for a doc with two "p".
+                       typeof selector === "string" && rneedsContext.test( selector ) ?
+                               jQuery( selector ) :
+                               selector || [],
+                       false
+               ).length;
+       }
+} );
+
+
+// Initialize a jQuery object
+
+
+// A central reference to the root jQuery(document)
+var rootjQuery,
+
+       // A simple way to check for HTML strings
+       // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
+       // Strict HTML recognition (#11290: must start with <)
+       // Shortcut simple #id case for speed
+       rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,
+
+       init = jQuery.fn.init = function( selector, context, root ) {
+               var match, elem;
+
+               // HANDLE: $(""), $(null), $(undefined), $(false)
+               if ( !selector ) {
+                       return this;
+               }
+
+               // Method init() accepts an alternate rootjQuery
+               // so migrate can support jQuery.sub (gh-2101)
+               root = root || rootjQuery;
+
+               // Handle HTML strings
+               if ( typeof selector === "string" ) {
+                       if ( selector[ 0 ] === "<" &&
+                               selector[ selector.length - 1 ] === ">" &&
+                               selector.length >= 3 ) {
+
+                               // Assume that strings that start and end with <> are HTML and skip the regex check
+                               match = [ null, selector, null ];
+
+                       } else {
+                               match = rquickExpr.exec( selector );
+                       }
+
+                       // Match html or make sure no context is specified for #id
+                       if ( match && ( match[ 1 ] || !context ) ) {
+
+                               // HANDLE: $(html) -> $(array)
+                               if ( match[ 1 ] ) {
+                                       context = context instanceof jQuery ? context[ 0 ] : context;
+
+                                       // Option to run scripts is true for back-compat
+                                       // Intentionally let the error be thrown if parseHTML is not present
+                                       jQuery.merge( this, jQuery.parseHTML(
+                                               match[ 1 ],
+                                               context && context.nodeType ? context.ownerDocument || context : document,
+                                               true
+                                       ) );
+
+                                       // HANDLE: $(html, props)
+                                       if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {
+                                               for ( match in context ) {
+
+                                                       // Properties of context are called as methods if possible
+                                                       if ( jQuery.isFunction( this[ match ] ) ) {
+                                                               this[ match ]( context[ match ] );
+
+                                                       // ...and otherwise set as attributes
+                                                       } else {
+                                                               this.attr( match, context[ match ] );
+                                                       }
+                                               }
+                                       }
+
+                                       return this;
+
+                               // HANDLE: $(#id)
+                               } else {
+                                       elem = document.getElementById( match[ 2 ] );
+
+                                       if ( elem ) {
+
+                                               // Inject the element directly into the jQuery object
+                                               this[ 0 ] = elem;
+                                               this.length = 1;
+                                       }
+                                       return this;
+                               }
+
+                       // HANDLE: $(expr, $(...))
+                       } else if ( !context || context.jquery ) {
+                               return ( context || root ).find( selector );
+
+                       // HANDLE: $(expr, context)
+                       // (which is just equivalent to: $(context).find(expr)
+                       } else {
+                               return this.constructor( context ).find( selector );
+                       }
+
+               // HANDLE: $(DOMElement)
+               } else if ( selector.nodeType ) {
+                       this[ 0 ] = selector;
+                       this.length = 1;
+                       return this;
+
+               // HANDLE: $(function)
+               // Shortcut for document ready
+               } else if ( jQuery.isFunction( selector ) ) {
+                       return root.ready !== undefined ?
+                               root.ready( selector ) :
+
+                               // Execute immediately if ready is not present
+                               selector( jQuery );
+               }
+
+               return jQuery.makeArray( selector, this );
+       };
+
+// Give the init function the jQuery prototype for later instantiation
+init.prototype = jQuery.fn;
+
+// Initialize central reference
+rootjQuery = jQuery( document );
+
+
+var rparentsprev = /^(?:parents|prev(?:Until|All))/,
+
+       // Methods guaranteed to produce a unique set when starting from a unique set
+       guaranteedUnique = {
+               children: true,
+               contents: true,
+               next: true,
+               prev: true
+       };
+
+jQuery.fn.extend( {
+       has: function( target ) {
+               var targets = jQuery( target, this ),
+                       l = targets.length;
+
+               return this.filter( function() {
+                       var i = 0;
+                       for ( ; i < l; i++ ) {
+                               if ( jQuery.contains( this, targets[ i ] ) ) {
+                                       return true;
+                               }
+                       }
+               } );
+       },
+
+       closest: function( selectors, context ) {
+               var cur,
+                       i = 0,
+                       l = this.length,
+                       matched = [],
+                       targets = typeof selectors !== "string" && jQuery( selectors );
+
+               // Positional selectors never match, since there's no _selection_ context
+               if ( !rneedsContext.test( selectors ) ) {
+                       for ( ; i < l; i++ ) {
+                               for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {
+
+                                       // Always skip document fragments
+                                       if ( cur.nodeType < 11 && ( targets ?
+                                               targets.index( cur ) > -1 :
+
+                                               // Don't pass non-elements to Sizzle
+                                               cur.nodeType === 1 &&
+                                                       jQuery.find.matchesSelector( cur, selectors ) ) ) {
+
+                                               matched.push( cur );
+                                               break;
+                                       }
+                               }
+                       }
+               }
+
+               return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );
+       },
+
+       // Determine the position of an element within the set
+       index: function( elem ) {
+
+               // No argument, return index in parent
+               if ( !elem ) {
+                       return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;
+               }
+
+               // Index in selector
+               if ( typeof elem === "string" ) {
+                       return indexOf.call( jQuery( elem ), this[ 0 ] );
+               }
+
+               // Locate the position of the desired element
+               return indexOf.call( this,
+
+                       // If it receives a jQuery object, the first element is used
+                       elem.jquery ? elem[ 0 ] : elem
+               );
+       },
+
+       add: function( selector, context ) {
+               return this.pushStack(
+                       jQuery.uniqueSort(
+                               jQuery.merge( this.get(), jQuery( selector, context ) )
+                       )
+               );
+       },
+
+       addBack: function( selector ) {
+               return this.add( selector == null ?
+                       this.prevObject : this.prevObject.filter( selector )
+               );
+       }
+} );
+
+function sibling( cur, dir ) {
+       while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}
+       return cur;
+}
+
+jQuery.each( {
+       parent: function( elem ) {
+               var parent = elem.parentNode;
+               return parent && parent.nodeType !== 11 ? parent : null;
+       },
+       parents: function( elem ) {
+               return dir( elem, "parentNode" );
+       },
+       parentsUntil: function( elem, i, until ) {
+               return dir( elem, "parentNode", until );
+       },
+       next: function( elem ) {
+               return sibling( elem, "nextSibling" );
+       },
+       prev: function( elem ) {
+               return sibling( elem, "previousSibling" );
+       },
+       nextAll: function( elem ) {
+               return dir( elem, "nextSibling" );
+       },
+       prevAll: function( elem ) {
+               return dir( elem, "previousSibling" );
+       },
+       nextUntil: function( elem, i, until ) {
+               return dir( elem, "nextSibling", until );
+       },
+       prevUntil: function( elem, i, until ) {
+               return dir( elem, "previousSibling", until );
+       },
+       siblings: function( elem ) {
+               return siblings( ( elem.parentNode || {} ).firstChild, elem );
+       },
+       children: function( elem ) {
+               return siblings( elem.firstChild );
+       },
+       contents: function( elem ) {
+        if ( nodeName( elem, "iframe" ) ) {
+            return elem.contentDocument;
+        }
+
+        // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only
+        // Treat the template element as a regular one in browsers that
+        // don't support it.
+        if ( nodeName( elem, "template" ) ) {
+            elem = elem.content || elem;
+        }
+
+        return jQuery.merge( [], elem.childNodes );
+       }
+}, function( name, fn ) {
+       jQuery.fn[ name ] = function( until, selector ) {
+               var matched = jQuery.map( this, fn, until );
+
+               if ( name.slice( -5 ) !== "Until" ) {
+                       selector = until;
+               }
+
+               if ( selector && typeof selector === "string" ) {
+                       matched = jQuery.filter( selector, matched );
+               }
+
+               if ( this.length > 1 ) {
+
+                       // Remove duplicates
+                       if ( !guaranteedUnique[ name ] ) {
+                               jQuery.uniqueSort( matched );
+                       }
+
+                       // Reverse order for parents* and prev-derivatives
+                       if ( rparentsprev.test( name ) ) {
+                               matched.reverse();
+                       }
+               }
+
+               return this.pushStack( matched );
+       };
+} );
+var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g );
+
+
+
+// Convert String-formatted options into Object-formatted ones
+function createOptions( options ) {
+       var object = {};
+       jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {
+               object[ flag ] = true;
+       } );
+       return object;
+}
+
+/*
+ * Create a callback list using the following parameters:
+ *
+ *     options: an optional list of space-separated options that will change how
+ *                     the callback list behaves or a more traditional option object
+ *
+ * By default a callback list will act like an event callback list and can be
+ * "fired" multiple times.
+ *
+ * Possible options:
+ *
+ *     once:                   will ensure the callback list can only be fired once (like a Deferred)
+ *
+ *     memory:                 will keep track of previous values and will call any callback added
+ *                                     after the list has been fired right away with the latest "memorized"
+ *                                     values (like a Deferred)
+ *
+ *     unique:                 will ensure a callback can only be added once (no duplicate in the list)
+ *
+ *     stopOnFalse:    interrupt callings when a callback returns false
+ *
+ */
+jQuery.Callbacks = function( options ) {
+
+       // Convert options from String-formatted to Object-formatted if needed
+       // (we check in cache first)
+       options = typeof options === "string" ?
+               createOptions( options ) :
+               jQuery.extend( {}, options );
+
+       var // Flag to know if list is currently firing
+               firing,
+
+               // Last fire value for non-forgettable lists
+               memory,
+
+               // Flag to know if list was already fired
+               fired,
+
+               // Flag to prevent firing
+               locked,
+
+               // Actual callback list
+               list = [],
+
+               // Queue of execution data for repeatable lists
+               queue = [],
+
+               // Index of currently firing callback (modified by add/remove as needed)
+               firingIndex = -1,
+
+               // Fire callbacks
+               fire = function() {
+
+                       // Enforce single-firing
+                       locked = locked || options.once;
+
+                       // Execute callbacks for all pending executions,
+                       // respecting firingIndex overrides and runtime changes
+                       fired = firing = true;
+                       for ( ; queue.length; firingIndex = -1 ) {
+                               memory = queue.shift();
+                               while ( ++firingIndex < list.length ) {
+
+                                       // Run callback and check for early termination
+                                       if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&
+                                               options.stopOnFalse ) {
+
+                                               // Jump to end and forget the data so .add doesn't re-fire
+                                               firingIndex = list.length;
+                                               memory = false;
+                                       }
+                               }
+                       }
+
+                       // Forget the data if we're done with it
+                       if ( !options.memory ) {
+                               memory = false;
+                       }
+
+                       firing = false;
+
+                       // Clean up if we're done firing for good
+                       if ( locked ) {
+
+                               // Keep an empty list if we have data for future add calls
+                               if ( memory ) {
+                                       list = [];
+
+                               // Otherwise, this object is spent
+                               } else {
+                                       list = "";
+                               }
+                       }
+               },
+
+               // Actual Callbacks object
+               self = {
+
+                       // Add a callback or a collection of callbacks to the list
+                       add: function() {
+                               if ( list ) {
+
+                                       // If we have memory from a past run, we should fire after adding
+                                       if ( memory && !firing ) {
+                                               firingIndex = list.length - 1;
+                                               queue.push( memory );
+                                       }
+
+                                       ( function add( args ) {
+                                               jQuery.each( args, function( _, arg ) {
+                                                       if ( jQuery.isFunction( arg ) ) {
+                                                               if ( !options.unique || !self.has( arg ) ) {
+                                                                       list.push( arg );
+                                                               }
+                                                       } else if ( arg && arg.length && jQuery.type( arg ) !== "string" ) {
+
+                                                               // Inspect recursively
+                                                               add( arg );
+                                                       }
+                                               } );
+                                       } )( arguments );
+
+                                       if ( memory && !firing ) {
+                                               fire();
+                                       }
+                               }
+                               return this;
+                       },
+
+                       // Remove a callback from the list
+                       remove: function() {
+                               jQuery.each( arguments, function( _, arg ) {
+                                       var index;
+                                       while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
+                                               list.splice( index, 1 );
+
+                                               // Handle firing indexes
+                                               if ( index <= firingIndex ) {
+                                                       firingIndex--;
+                                               }
+                                       }
+                               } );
+                               return this;
+                       },
+
+                       // Check if a given callback is in the list.
+                       // If no argument is given, return whether or not list has callbacks attached.
+                       has: function( fn ) {
+                               return fn ?
+                                       jQuery.inArray( fn, list ) > -1 :
+                                       list.length > 0;
+                       },
+
+                       // Remove all callbacks from the list
+                       empty: function() {
+                               if ( list ) {
+                                       list = [];
+                               }
+                               return this;
+                       },
+
+                       // Disable .fire and .add
+                       // Abort any current/pending executions
+                       // Clear all callbacks and values
+                       disable: function() {
+                               locked = queue = [];
+                               list = memory = "";
+                               return this;
+                       },
+                       disabled: function() {
+                               return !list;
+                       },
+
+                       // Disable .fire
+                       // Also disable .add unless we have memory (since it would have no effect)
+                       // Abort any pending executions
+                       lock: function() {
+                               locked = queue = [];
+                               if ( !memory && !firing ) {
+                                       list = memory = "";
+                               }
+                               return this;
+                       },
+                       locked: function() {
+                               return !!locked;
+                       },
+
+                       // Call all callbacks with the given context and arguments
+                       fireWith: function( context, args ) {
+                               if ( !locked ) {
+                                       args = args || [];
+                                       args = [ context, args.slice ? args.slice() : args ];
+                                       queue.push( args );
+                                       if ( !firing ) {
+                                               fire();
+                                       }
+                               }
+                               return this;
+                       },
+
+                       // Call all the callbacks with the given arguments
+                       fire: function() {
+                               self.fireWith( this, arguments );
+                               return this;
+                       },
+
+                       // To know if the callbacks have already been called at least once
+                       fired: function() {
+                               return !!fired;
+                       }
+               };
+
+       return self;
+};
+
+
+function Identity( v ) {
+       return v;
+}
+function Thrower( ex ) {
+       throw ex;
+}
+
+function adoptValue( value, resolve, reject, noValue ) {
+       var method;
+
+       try {
+
+               // Check for promise aspect first to privilege synchronous behavior
+               if ( value && jQuery.isFunction( ( method = value.promise ) ) ) {
+                       method.call( value ).done( resolve ).fail( reject );
+
+               // Other thenables
+               } else if ( value && jQuery.isFunction( ( method = value.then ) ) ) {
+                       method.call( value, resolve, reject );
+
+               // Other non-thenables
+               } else {
+
+                       // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:
+                       // * false: [ value ].slice( 0 ) => resolve( value )
+                       // * true: [ value ].slice( 1 ) => resolve()
+                       resolve.apply( undefined, [ value ].slice( noValue ) );
+               }
+
+       // For Promises/A+, convert exceptions into rejections
+       // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in
+       // Deferred#then to conditionally suppress rejection.
+       } catch ( value ) {
+
+               // Support: Android 4.0 only
+               // Strict mode functions invoked without .call/.apply get global-object context
+               reject.apply( undefined, [ value ] );
+       }
+}
+
+jQuery.extend( {
+
+       Deferred: function( func ) {
+               var tuples = [
+
+                               // action, add listener, callbacks,
+                               // ... .then handlers, argument index, [final state]
+                               [ "notify", "progress", jQuery.Callbacks( "memory" ),
+                                       jQuery.Callbacks( "memory" ), 2 ],
+                               [ "resolve", "done", jQuery.Callbacks( "once memory" ),
+                                       jQuery.Callbacks( "once memory" ), 0, "resolved" ],
+                               [ "reject", "fail", jQuery.Callbacks( "once memory" ),
+                                       jQuery.Callbacks( "once memory" ), 1, "rejected" ]
+                       ],
+                       state = "pending",
+                       promise = {
+                               state: function() {
+                                       return state;
+                               },
+                               always: function() {
+                                       deferred.done( arguments ).fail( arguments );
+                                       return this;
+                               },
+                               "catch": function( fn ) {
+                                       return promise.then( null, fn );
+                               },
+
+                               // Keep pipe for back-compat
+                               pipe: function( /* fnDone, fnFail, fnProgress */ ) {
+                                       var fns = arguments;
+
+                                       return jQuery.Deferred( function( newDefer ) {
+                                               jQuery.each( tuples, function( i, tuple ) {
+
+                                                       // Map tuples (progress, done, fail) to arguments (done, fail, progress)
+                                                       var fn = jQuery.isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];
+
+                                                       // deferred.progress(function() { bind to newDefer or newDefer.notify })
+                                                       // deferred.done(function() { bind to newDefer or newDefer.resolve })
+                                                       // deferred.fail(function() { bind to newDefer or newDefer.reject })
+                                                       deferred[ tuple[ 1 ] ]( function() {
+                                                               var returned = fn && fn.apply( this, arguments );
+                                                               if ( returned && jQuery.isFunction( returned.promise ) ) {
+                                                                       returned.promise()
+                                                                               .progress( newDefer.notify )
+                                                                               .done( newDefer.resolve )
+                                                                               .fail( newDefer.reject );
+                                                               } else {
+                                                                       newDefer[ tuple[ 0 ] + "With" ](
+                                                                               this,
+                                                                               fn ? [ returned ] : arguments
+                                                                       );
+                                                               }
+                                                       } );
+                                               } );
+                                               fns = null;
+                                       } ).promise();
+                               },
+                               then: function( onFulfilled, onRejected, onProgress ) {
+                                       var maxDepth = 0;
+                                       function resolve( depth, deferred, handler, special ) {
+                                               return function() {
+                                                       var that = this,
+                                                               args = arguments,
+                                                               mightThrow = function() {
+                                                                       var returned, then;
+
+                                                                       // Support: Promises/A+ section 2.3.3.3.3
+                                                                       // https://promisesaplus.com/#point-59
+                                                                       // Ignore double-resolution attempts
+                                                                       if ( depth < maxDepth ) {
+                                                                               return;
+                                                                       }
+
+                                                                       returned = handler.apply( that, args );
+
+                                                                       // Support: Promises/A+ section 2.3.1
+                                                                       // https://promisesaplus.com/#point-48
+                                                                       if ( returned === deferred.promise() ) {
+                                                                               throw new TypeError( "Thenable self-resolution" );
+                                                                       }
+
+                                                                       // Support: Promises/A+ sections 2.3.3.1, 3.5
+                                                                       // https://promisesaplus.com/#point-54
+                                                                       // https://promisesaplus.com/#point-75
+                                                                       // Retrieve `then` only once
+                                                                       then = returned &&
+
+                                                                               // Support: Promises/A+ section 2.3.4
+                                                                               // https://promisesaplus.com/#point-64
+                                                                               // Only check objects and functions for thenability
+                                                                               ( typeof returned === "object" ||
+                                                                                       typeof returned === "function" ) &&
+                                                                               returned.then;
+
+                                                                       // Handle a returned thenable
+                                                                       if ( jQuery.isFunction( then ) ) {
+
+                                                                               // Special processors (notify) just wait for resolution
+                                                                               if ( special ) {
+                                                                                       then.call(
+                                                                                               returned,
+                                                                                               resolve( maxDepth, deferred, Identity, special ),
+                                                                                               resolve( maxDepth, deferred, Thrower, special )
+                                                                                       );
+
+                                                                               // Normal processors (resolve) also hook into progress
+                                                                               } else {
+
+                                                                                       // ...and disregard older resolution values
+                                                                                       maxDepth++;
+
+                                                                                       then.call(
+                                                                                               returned,
+                                                                                               resolve( maxDepth, deferred, Identity, special ),
+                                                                                               resolve( maxDepth, deferred, Thrower, special ),
+                                                                                               resolve( maxDepth, deferred, Identity,
+                                                                                                       deferred.notifyWith )
+                                                                                       );
+                                                                               }
+
+                                                                       // Handle all other returned values
+                                                                       } else {
+
+                                                                               // Only substitute handlers pass on context
+                                                                               // and multiple values (non-spec behavior)
+                                                                               if ( handler !== Identity ) {
+                                                                                       that = undefined;
+                                                                                       args = [ returned ];
+                                                                               }
+
+                                                                               // Process the value(s)
+                                                                               // Default process is resolve
+                                                                               ( special || deferred.resolveWith )( that, args );
+                                                                       }
+                                                               },
+
+                                                               // Only normal processors (resolve) catch and reject exceptions
+                                                               process = special ?
+                                                                       mightThrow :
+                                                                       function() {
+                                                                               try {
+                                                                                       mightThrow();
+                                                                               } catch ( e ) {
+
+                                                                                       if ( jQuery.Deferred.exceptionHook ) {
+                                                                                               jQuery.Deferred.exceptionHook( e,
+                                                                                                       process.stackTrace );
+                                                                                       }
+
+                                                                                       // Support: Promises/A+ section 2.3.3.3.4.1
+                                                                                       // https://promisesaplus.com/#point-61
+                                                                                       // Ignore post-resolution exceptions
+                                                                                       if ( depth + 1 >= maxDepth ) {
+
+                                                                                               // Only substitute handlers pass on context
+                                                                                               // and multiple values (non-spec behavior)
+                                                                                               if ( handler !== Thrower ) {
+                                                                                                       that = undefined;
+                                                                                                       args = [ e ];
+                                                                                               }
+
+                                                                                               deferred.rejectWith( that, args );
+                                                                                       }
+                                                                               }
+                                                                       };
+
+                                                       // Support: Promises/A+ section 2.3.3.3.1
+                                                       // https://promisesaplus.com/#point-57
+                                                       // Re-resolve promises immediately to dodge false rejection from
+                                                       // subsequent errors
+                                                       if ( depth ) {
+                                                               process();
+                                                       } else {
+
+                                                               // Call an optional hook to record the stack, in case of exception
+                                                               // since it's otherwise lost when execution goes async
+                                                               if ( jQuery.Deferred.getStackHook ) {
+                                                                       process.stackTrace = jQuery.Deferred.getStackHook();
+                                                               }
+                                                               window.setTimeout( process );
+                                                       }
+                                               };
+                                       }
+
+                                       return jQuery.Deferred( function( newDefer ) {
+
+                                               // progress_handlers.add( ... )
+                                               tuples[ 0 ][ 3 ].add(
+                                                       resolve(
+                                                               0,
+                                                               newDefer,
+                                                               jQuery.isFunction( onProgress ) ?
+                                                                       onProgress :
+                                                                       Identity,
+                                                               newDefer.notifyWith
+                                                       )
+                                               );
+
+                                               // fulfilled_handlers.add( ... )
+                                               tuples[ 1 ][ 3 ].add(
+                                                       resolve(
+                                                               0,
+                                                               newDefer,
+                                                               jQuery.isFunction( onFulfilled ) ?
+                                                                       onFulfilled :
+                                                                       Identity
+                                                       )
+                                               );
+
+                                               // rejected_handlers.add( ... )
+                                               tuples[ 2 ][ 3 ].add(
+                                                       resolve(
+                                                               0,
+                                                               newDefer,
+                                                               jQuery.isFunction( onRejected ) ?
+                                                                       onRejected :
+                                                                       Thrower
+                                                       )
+                                               );
+                                       } ).promise();
+                               },
+
+                               // Get a promise for this deferred
+                               // If obj is provided, the promise aspect is added to the object
+                               promise: function( obj ) {
+                                       return obj != null ? jQuery.extend( obj, promise ) : promise;
+                               }
+                       },
+                       deferred = {};
+
+               // Add list-specific methods
+               jQuery.each( tuples, function( i, tuple ) {
+                       var list = tuple[ 2 ],
+                               stateString = tuple[ 5 ];
+
+                       // promise.progress = list.add
+                       // promise.done = list.add
+                       // promise.fail = list.add
+                       promise[ tuple[ 1 ] ] = list.add;
+
+                       // Handle state
+                       if ( stateString ) {
+                               list.add(
+                                       function() {
+
+                                               // state = "resolved" (i.e., fulfilled)
+                                               // state = "rejected"
+                                               state = stateString;
+                                       },
+
+                                       // rejected_callbacks.disable
+                                       // fulfilled_callbacks.disable
+                                       tuples[ 3 - i ][ 2 ].disable,
+
+                                       // progress_callbacks.lock
+                                       tuples[ 0 ][ 2 ].lock
+                               );
+                       }
+
+                       // progress_handlers.fire
+                       // fulfilled_handlers.fire
+                       // rejected_handlers.fire
+                       list.add( tuple[ 3 ].fire );
+
+                       // deferred.notify = function() { deferred.notifyWith(...) }
+                       // deferred.resolve = function() { deferred.resolveWith(...) }
+                       // deferred.reject = function() { deferred.rejectWith(...) }
+                       deferred[ tuple[ 0 ] ] = function() {
+                               deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments );
+                               return this;
+                       };
+
+                       // deferred.notifyWith = list.fireWith
+                       // deferred.resolveWith = list.fireWith
+                       // deferred.rejectWith = list.fireWith
+                       deferred[ tuple[ 0 ] + "With" ] = list.fireWith;
+               } );
+
+               // Make the deferred a promise
+               promise.promise( deferred );
+
+               // Call given func if any
+               if ( func ) {
+                       func.call( deferred, deferred );
+               }
+
+               // All done!
+               return deferred;
+       },
+
+       // Deferred helper
+       when: function( singleValue ) {
+               var
+
+                       // count of uncompleted subordinates
+                       remaining = arguments.length,
+
+                       // count of unprocessed arguments
+                       i = remaining,
+
+                       // subordinate fulfillment data
+                       resolveContexts = Array( i ),
+                       resolveValues = slice.call( arguments ),
+
+                       // the master Deferred
+                       master = jQuery.Deferred(),
+
+                       // subordinate callback factory
+                       updateFunc = function( i ) {
+                               return function( value ) {
+                                       resolveContexts[ i ] = this;
+                                       resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
+                                       if ( !( --remaining ) ) {
+                                               master.resolveWith( resolveContexts, resolveValues );
+                                       }
+                               };
+                       };
+
+               // Single- and empty arguments are adopted like Promise.resolve
+               if ( remaining <= 1 ) {
+                       adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject,
+                               !remaining );
+
+                       // Use .then() to unwrap secondary thenables (cf. gh-3000)
+                       if ( master.state() === "pending" ||
+                               jQuery.isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {
+
+                               return master.then();
+                       }
+               }
+
+               // Multiple arguments are aggregated like Promise.all array elements
+               while ( i-- ) {
+                       adoptValue( resolveValues[ i ], updateFunc( i ), master.reject );
+               }
+
+               return master.promise();
+       }
+} );
+
+
+// These usually indicate a programmer mistake during development,
+// warn about them ASAP rather than swallowing them by default.
+var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;
+
+jQuery.Deferred.exceptionHook = function( error, stack ) {
+
+       // Support: IE 8 - 9 only
+       // Console exists when dev tools are open, which can happen at any time
+       if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {
+               window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack );
+       }
+};
+
+
+
+
+jQuery.readyException = function( error ) {
+       window.setTimeout( function() {
+               throw error;
+       } );
+};
+
+
+
+
+// The deferred used on DOM ready
+var readyList = jQuery.Deferred();
+
+jQuery.fn.ready = function( fn ) {
+
+       readyList
+               .then( fn )
+
+               // Wrap jQuery.readyException in a function so that the lookup
+               // happens at the time of error handling instead of callback
+               // registration.
+               .catch( function( error ) {
+                       jQuery.readyException( error );
+               } );
+
+       return this;
+};
+
+jQuery.extend( {
+
+       // Is the DOM ready to be used? Set to true once it occurs.
+       isReady: false,
+
+       // A counter to track how many items to wait for before
+       // the ready event fires. See #6781
+       readyWait: 1,
+
+       // Handle when the DOM is ready
+       ready: function( wait ) {
+
+               // Abort if there are pending holds or we're already ready
+               if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
+                       return;
+               }
+
+               // Remember that the DOM is ready
+               jQuery.isReady = true;
+
+               // If a normal DOM Ready event fired, decrement, and wait if need be
+               if ( wait !== true && --jQuery.readyWait > 0 ) {
+                       return;
+               }
+
+               // If there are functions bound, to execute
+               readyList.resolveWith( document, [ jQuery ] );
+       }
+} );
+
+jQuery.ready.then = readyList.then;
+
+// The ready event handler and self cleanup method
+function completed() {
+       document.removeEventListener( "DOMContentLoaded", completed );
+       window.removeEventListener( "load", completed );
+       jQuery.ready();
+}
+
+// Catch cases where $(document).ready() is called
+// after the browser event has already occurred.
+// Support: IE <=9 - 10 only
+// Older IE sometimes signals "interactive" too soon
+if ( document.readyState === "complete" ||
+       ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) {
+
+       // Handle it asynchronously to allow scripts the opportunity to delay ready
+       window.setTimeout( jQuery.ready );
+
+} else {
+
+       // Use the handy event callback
+       document.addEventListener( "DOMContentLoaded", completed );
+
+       // A fallback to window.onload, that will always work
+       window.addEventListener( "load", completed );
+}
+
+
+
+
+// Multifunctional method to get and set values of a collection
+// The value/s can optionally be executed if it's a function
+var access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
+       var i = 0,
+               len = elems.length,
+               bulk = key == null;
+
+       // Sets many values
+       if ( jQuery.type( key ) === "object" ) {
+               chainable = true;
+               for ( i in key ) {
+                       access( elems, fn, i, key[ i ], true, emptyGet, raw );
+               }
+
+       // Sets one value
+       } else if ( value !== undefined ) {
+               chainable = true;
+
+               if ( !jQuery.isFunction( value ) ) {
+                       raw = true;
+               }
+
+               if ( bulk ) {
+
+                       // Bulk operations run against the entire set
+                       if ( raw ) {
+                               fn.call( elems, value );
+                               fn = null;
+
+                       // ...except when executing function values
+                       } else {
+                               bulk = fn;
+                               fn = function( elem, key, value ) {
+                                       return bulk.call( jQuery( elem ), value );
+                               };
+                       }
+               }
+
+               if ( fn ) {
+                       for ( ; i < len; i++ ) {
+                               fn(
+                                       elems[ i ], key, raw ?
+                                       value :
+                                       value.call( elems[ i ], i, fn( elems[ i ], key ) )
+                               );
+                       }
+               }
+       }
+
+       if ( chainable ) {
+               return elems;
+       }
+
+       // Gets
+       if ( bulk ) {
+               return fn.call( elems );
+       }
+
+       return len ? fn( elems[ 0 ], key ) : emptyGet;
+};
+var acceptData = function( owner ) {
+
+       // Accepts only:
+       //  - Node
+       //    - Node.ELEMENT_NODE
+       //    - Node.DOCUMENT_NODE
+       //  - Object
+       //    - Any
+       return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );
+};
+
+
+
+
+function Data() {
+       this.expando = jQuery.expando + Data.uid++;
+}
+
+Data.uid = 1;
+
+Data.prototype = {
+
+       cache: function( owner ) {
+
+               // Check if the owner object already has a cache
+               var value = owner[ this.expando ];
+
+               // If not, create one
+               if ( !value ) {
+                       value = {};
+
+                       // We can accept data for non-element nodes in modern browsers,
+                       // but we should not, see #8335.
+                       // Always return an empty object.
+                       if ( acceptData( owner ) ) {
+
+                               // If it is a node unlikely to be stringify-ed or looped over
+                               // use plain assignment
+                               if ( owner.nodeType ) {
+                                       owner[ this.expando ] = value;
+
+                               // Otherwise secure it in a non-enumerable property
+                               // configurable must be true to allow the property to be
+                               // deleted when data is removed
+                               } else {
+                                       Object.defineProperty( owner, this.expando, {
+                                               value: value,
+                                               configurable: true
+                                       } );
+                               }
+                       }
+               }
+
+               return value;
+       },
+       set: function( owner, data, value ) {
+               var prop,
+                       cache = this.cache( owner );
+
+               // Handle: [ owner, key, value ] args
+               // Always use camelCase key (gh-2257)
+               if ( typeof data === "string" ) {
+                       cache[ jQuery.camelCase( data ) ] = value;
+
+               // Handle: [ owner, { properties } ] args
+               } else {
+
+                       // Copy the properties one-by-one to the cache object
+                       for ( prop in data ) {
+                               cache[ jQuery.camelCase( prop ) ] = data[ prop ];
+                       }
+               }
+               return cache;
+       },
+       get: function( owner, key ) {
+               return key === undefined ?
+                       this.cache( owner ) :
+
+                       // Always use camelCase key (gh-2257)
+                       owner[ this.expando ] && owner[ this.expando ][ jQuery.camelCase( key ) ];
+       },
+       access: function( owner, key, value ) {
+
+               // In cases where either:
+               //
+               //   1. No key was specified
+               //   2. A string key was specified, but no value provided
+               //
+               // Take the "read" path and allow the get method to determine
+               // which value to return, respectively either:
+               //
+               //   1. The entire cache object
+               //   2. The data stored at the key
+               //
+               if ( key === undefined ||
+                               ( ( key && typeof key === "string" ) && value === undefined ) ) {
+
+                       return this.get( owner, key );
+               }
+
+               // When the key is not a string, or both a key and value
+               // are specified, set or extend (existing objects) with either:
+               //
+               //   1. An object of properties
+               //   2. A key and value
+               //
+               this.set( owner, key, value );
+
+               // Since the "set" path can have two possible entry points
+               // return the expected data based on which path was taken[*]
+               return value !== undefined ? value : key;
+       },
+       remove: function( owner, key ) {
+               var i,
+                       cache = owner[ this.expando ];
+
+               if ( cache === undefined ) {
+                       return;
+               }
+
+               if ( key !== undefined ) {
+
+                       // Support array or space separated string of keys
+                       if ( Array.isArray( key ) ) {
+
+                               // If key is an array of keys...
+                               // We always set camelCase keys, so remove that.
+                               key = key.map( jQuery.camelCase );
+                       } else {
+                               key = jQuery.camelCase( key );
+
+                               // If a key with the spaces exists, use it.
+                               // Otherwise, create an array by matching non-whitespace
+                               key = key in cache ?
+                                       [ key ] :
+                                       ( key.match( rnothtmlwhite ) || [] );
+                       }
+
+                       i = key.length;
+
+                       while ( i-- ) {
+                               delete cache[ key[ i ] ];
+                       }
+               }
+
+               // Remove the expando if there's no more data
+               if ( key === undefined || jQuery.isEmptyObject( cache ) ) {
+
+                       // Support: Chrome <=35 - 45
+                       // Webkit & Blink performance suffers when deleting properties
+                       // from DOM nodes, so set to undefined instead
+                       // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)
+                       if ( owner.nodeType ) {
+                               owner[ this.expando ] = undefined;
+                       } else {
+                               delete owner[ this.expando ];
+                       }
+               }
+       },
+       hasData: function( owner ) {
+               var cache = owner[ this.expando ];
+               return cache !== undefined && !jQuery.isEmptyObject( cache );
+       }
+};
+var dataPriv = new Data();
+
+var dataUser = new Data();
+
+
+
+//     Implementation Summary
+//
+//     1. Enforce API surface and semantic compatibility with 1.9.x branch
+//     2. Improve the module's maintainability by reducing the storage
+//             paths to a single mechanism.
+//     3. Use the same single mechanism to support "private" and "user" data.
+//     4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData)
+//     5. Avoid exposing implementation details on user objects (eg. expando properties)
+//     6. Provide a clear path for implementation upgrade to WeakMap in 2014
+
+var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
+       rmultiDash = /[A-Z]/g;
+
+function getData( data ) {
+       if ( data === "true" ) {
+               return true;
+       }
+
+       if ( data === "false" ) {
+               return false;
+       }
+
+       if ( data === "null" ) {
+               return null;
+       }
+
+       // Only convert to a number if it doesn't change the string
+       if ( data === +data + "" ) {
+               return +data;
+       }
+
+       if ( rbrace.test( data ) ) {
+               return JSON.parse( data );
+       }
+
+       return data;
+}
+
+function dataAttr( elem, key, data ) {
+       var name;
+
+       // If nothing was found internally, try to fetch any
+       // data from the HTML5 data-* attribute
+       if ( data === undefined && elem.nodeType === 1 ) {
+               name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase();
+               data = elem.getAttribute( name );
+
+               if ( typeof data === "string" ) {
+                       try {
+                               data = getData( data );
+                       } catch ( e ) {}
+
+                       // Make sure we set the data so it isn't changed later
+                       dataUser.set( elem, key, data );
+               } else {
+                       data = undefined;
+               }
+       }
+       return data;
+}
+
+jQuery.extend( {
+       hasData: function( elem ) {
+               return dataUser.hasData( elem ) || dataPriv.hasData( elem );
+       },
+
+       data: function( elem, name, data ) {
+               return dataUser.access( elem, name, data );
+       },
+
+       removeData: function( elem, name ) {
+               dataUser.remove( elem, name );
+       },
+
+       // TODO: Now that all calls to _data and _removeData have been replaced
+       // with direct calls to dataPriv methods, these can be deprecated.
+       _data: function( elem, name, data ) {
+               return dataPriv.access( elem, name, data );
+       },
+
+       _removeData: function( elem, name ) {
+               dataPriv.remove( elem, name );
+       }
+} );
+
+jQuery.fn.extend( {
+       data: function( key, value ) {
+               var i, name, data,
+                       elem = this[ 0 ],
+                       attrs = elem && elem.attributes;
+
+               // Gets all values
+               if ( key === undefined ) {
+                       if ( this.length ) {
+                               data = dataUser.get( elem );
+
+                               if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) {
+                                       i = attrs.length;
+                                       while ( i-- ) {
+
+                                               // Support: IE 11 only
+                                               // The attrs elements can be null (#14894)
+                                               if ( attrs[ i ] ) {
+                                                       name = attrs[ i ].name;
+                                                       if ( name.indexOf( "data-" ) === 0 ) {
+                                                               name = jQuery.camelCase( name.slice( 5 ) );
+                                                               dataAttr( elem, name, data[ name ] );
+                                                       }
+                                               }
+                                       }
+                                       dataPriv.set( elem, "hasDataAttrs", true );
+                               }
+                       }
+
+                       return data;
+               }
+
+               // Sets multiple values
+               if ( typeof key === "object" ) {
+                       return this.each( function() {
+                               dataUser.set( this, key );
+                       } );
+               }
+
+               return access( this, function( value ) {
+                       var data;
+
+                       // The calling jQuery object (element matches) is not empty
+                       // (and therefore has an element appears at this[ 0 ]) and the
+                       // `value` parameter was not undefined. An empty jQuery object
+                       // will result in `undefined` for elem = this[ 0 ] which will
+                       // throw an exception if an attempt to read a data cache is made.
+                       if ( elem && value === undefined ) {
+
+                               // Attempt to get data from the cache
+                               // The key will always be camelCased in Data
+                               data = dataUser.get( elem, key );
+                               if ( data !== undefined ) {
+                                       return data;
+                               }
+
+                               // Attempt to "discover" the data in
+                               // HTML5 custom data-* attrs
+                               data = dataAttr( elem, key );
+                               if ( data !== undefined ) {
+                                       return data;
+                               }
+
+                               // We tried really hard, but the data doesn't exist.
+                               return;
+                       }
+
+                       // Set the data...
+                       this.each( function() {
+
+                               // We always store the camelCased key
+                               dataUser.set( this, key, value );
+                       } );
+               }, null, value, arguments.length > 1, null, true );
+       },
+
+       removeData: function( key ) {
+               return this.each( function() {
+                       dataUser.remove( this, key );
+               } );
+       }
+} );
+
+
+jQuery.extend( {
+       queue: function( elem, type, data ) {
+               var queue;
+
+               if ( elem ) {
+                       type = ( type || "fx" ) + "queue";
+                       queue = dataPriv.get( elem, type );
+
+                       // Speed up dequeue by getting out quickly if this is just a lookup
+                       if ( data ) {
+                               if ( !queue || Array.isArray( data ) ) {
+                                       queue = dataPriv.access( elem, type, jQuery.makeArray( data ) );
+                               } else {
+                                       queue.push( data );
+                               }
+                       }
+                       return queue || [];
+               }
+       },
+
+       dequeue: function( elem, type ) {
+               type = type || "fx";
+
+               var queue = jQuery.queue( elem, type ),
+                       startLength = queue.length,
+                       fn = queue.shift(),
+                       hooks = jQuery._queueHooks( elem, type ),
+                       next = function() {
+                               jQuery.dequeue( elem, type );
+                       };
+
+               // If the fx queue is dequeued, always remove the progress sentinel
+               if ( fn === "inprogress" ) {
+                       fn = queue.shift();
+                       startLength--;
+               }
+
+               if ( fn ) {
+
+                       // Add a progress sentinel to prevent the fx queue from being
+                       // automatically dequeued
+                       if ( type === "fx" ) {
+                               queue.unshift( "inprogress" );
+                       }
+
+                       // Clear up the last queue stop function
+                       delete hooks.stop;
+                       fn.call( elem, next, hooks );
+               }
+
+               if ( !startLength && hooks ) {
+                       hooks.empty.fire();
+               }
+       },
+
+       // Not public - generate a queueHooks object, or return the current one
+       _queueHooks: function( elem, type ) {
+               var key = type + "queueHooks";
+               return dataPriv.get( elem, key ) || dataPriv.access( elem, key, {
+                       empty: jQuery.Callbacks( "once memory" ).add( function() {
+                               dataPriv.remove( elem, [ type + "queue", key ] );
+                       } )
+               } );
+       }
+} );
+
+jQuery.fn.extend( {
+       queue: function( type, data ) {
+               var setter = 2;
+
+               if ( typeof type !== "string" ) {
+                       data = type;
+                       type = "fx";
+                       setter--;
+               }
+
+               if ( arguments.length < setter ) {
+                       return jQuery.queue( this[ 0 ], type );
+               }
+
+               return data === undefined ?
+                       this :
+                       this.each( function() {
+                               var queue = jQuery.queue( this, type, data );
+
+                               // Ensure a hooks for this queue
+                               jQuery._queueHooks( this, type );
+
+                               if ( type === "fx" && queue[ 0 ] !== "inprogress" ) {
+                                       jQuery.dequeue( this, type );
+                               }
+                       } );
+       },
+       dequeue: function( type ) {
+               return this.each( function() {
+                       jQuery.dequeue( this, type );
+               } );
+       },
+       clearQueue: function( type ) {
+               return this.queue( type || "fx", [] );
+       },
+
+       // Get a promise resolved when queues of a certain type
+       // are emptied (fx is the type by default)
+       promise: function( type, obj ) {
+               var tmp,
+                       count = 1,
+                       defer = jQuery.Deferred(),
+                       elements = this,
+                       i = this.length,
+                       resolve = function() {
+                               if ( !( --count ) ) {
+                                       defer.resolveWith( elements, [ elements ] );
+                               }
+                       };
+
+               if ( typeof type !== "string" ) {
+                       obj = type;
+                       type = undefined;
+               }
+               type = type || "fx";
+
+               while ( i-- ) {
+                       tmp = dataPriv.get( elements[ i ], type + "queueHooks" );
+                       if ( tmp && tmp.empty ) {
+                               count++;
+                               tmp.empty.add( resolve );
+                       }
+               }
+               resolve();
+               return defer.promise( obj );
+       }
+} );
+var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source;
+
+var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" );
+
+
+var cssExpand = [ "Top", "Right", "Bottom", "Left" ];
+
+var isHiddenWithinTree = function( elem, el ) {
+
+               // isHiddenWithinTree might be called from jQuery#filter function;
+               // in that case, element will be second argument
+               elem = el || elem;
+
+               // Inline style trumps all
+               return elem.style.display === "none" ||
+                       elem.style.display === "" &&
+
+                       // Otherwise, check computed style
+                       // Support: Firefox <=43 - 45
+                       // Disconnected elements can have computed display: none, so first confirm that elem is
+                       // in the document.
+                       jQuery.contains( elem.ownerDocument, elem ) &&
+
+                       jQuery.css( elem, "display" ) === "none";
+       };
+
+var swap = function( elem, options, callback, args ) {
+       var ret, name,
+               old = {};
+
+       // Remember the old values, and insert the new ones
+       for ( name in options ) {
+               old[ name ] = elem.style[ name ];
+               elem.style[ name ] = options[ name ];
+       }
+
+       ret = callback.apply( elem, args || [] );
+
+       // Revert the old values
+       for ( name in options ) {
+               elem.style[ name ] = old[ name ];
+       }
+
+       return ret;
+};
+
+
+
+
+function adjustCSS( elem, prop, valueParts, tween ) {
+       var adjusted,
+               scale = 1,
+               maxIterations = 20,
+               currentValue = tween ?
+                       function() {
+                               return tween.cur();
+                       } :
+                       function() {
+                               return jQuery.css( elem, prop, "" );
+                       },
+               initial = currentValue(),
+               unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),
+
+               // Starting value computation is required for potential unit mismatches
+               initialInUnit = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) &&
+                       rcssNum.exec( jQuery.css( elem, prop ) );
+
+       if ( initialInUnit && initialInUnit[ 3 ] !== unit ) {
+
+               // Trust units reported by jQuery.css
+               unit = unit || initialInUnit[ 3 ];
+
+               // Make sure we update the tween properties later on
+               valueParts = valueParts || [];
+
+               // Iteratively approximate from a nonzero starting point
+               initialInUnit = +initial || 1;
+
+               do {
+
+                       // If previous iteration zeroed out, double until we get *something*.
+                       // Use string for doubling so we don't accidentally see scale as unchanged below
+                       scale = scale || ".5";
+
+                       // Adjust and apply
+                       initialInUnit = initialInUnit / scale;
+                       jQuery.style( elem, prop, initialInUnit + unit );
+
+               // Update scale, tolerating zero or NaN from tween.cur()
+               // Break the loop if scale is unchanged or perfect, or if we've just had enough.
+               } while (
+                       scale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations
+               );
+       }
+
+       if ( valueParts ) {
+               initialInUnit = +initialInUnit || +initial || 0;
+
+               // Apply relative offset (+=/-=) if specified
+               adjusted = valueParts[ 1 ] ?
+                       initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :
+                       +valueParts[ 2 ];
+               if ( tween ) {
+                       tween.unit = unit;
+                       tween.start = initialInUnit;
+                       tween.end = adjusted;
+               }
+       }
+       return adjusted;
+}
+
+
+var defaultDisplayMap = {};
+
+function getDefaultDisplay( elem ) {
+       var temp,
+               doc = elem.ownerDocument,
+               nodeName = elem.nodeName,
+               display = defaultDisplayMap[ nodeName ];
+
+       if ( display ) {
+               return display;
+       }
+
+       temp = doc.body.appendChild( doc.createElement( nodeName ) );
+       display = jQuery.css( temp, "display" );
+
+       temp.parentNode.removeChild( temp );
+
+       if ( display === "none" ) {
+               display = "block";
+       }
+       defaultDisplayMap[ nodeName ] = display;
+
+       return display;
+}
+
+function showHide( elements, show ) {
+       var display, elem,
+               values = [],
+               index = 0,
+               length = elements.length;
+
+       // Determine new display value for elements that need to change
+       for ( ; index < length; index++ ) {
+               elem = elements[ index ];
+               if ( !elem.style ) {
+                       continue;
+               }
+
+               display = elem.style.display;
+               if ( show ) {
+
+                       // Since we force visibility upon cascade-hidden elements, an immediate (and slow)
+                       // check is required in this first loop unless we have a nonempty display value (either
+                       // inline or about-to-be-restored)
+                       if ( display === "none" ) {
+                               values[ index ] = dataPriv.get( elem, "display" ) || null;
+                               if ( !values[ index ] ) {
+                                       elem.style.display = "";
+                               }
+                       }
+                       if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) {
+                               values[ index ] = getDefaultDisplay( elem );
+                       }
+               } else {
+                       if ( display !== "none" ) {
+                               values[ index ] = "none";
+
+                               // Remember what we're overwriting
+                               dataPriv.set( elem, "display", display );
+                       }
+               }
+       }
+
+       // Set the display of the elements in a second loop to avoid constant reflow
+       for ( index = 0; index < length; index++ ) {
+               if ( values[ index ] != null ) {
+                       elements[ index ].style.display = values[ index ];
+               }
+       }
+
+       return elements;
+}
+
+jQuery.fn.extend( {
+       show: function() {
+               return showHide( this, true );
+       },
+       hide: function() {
+               return showHide( this );
+       },
+       toggle: function( state ) {
+               if ( typeof state === "boolean" ) {
+                       return state ? this.show() : this.hide();
+               }
+
+               return this.each( function() {
+                       if ( isHiddenWithinTree( this ) ) {
+                               jQuery( this ).show();
+                       } else {
+                               jQuery( this ).hide();
+                       }
+               } );
+       }
+} );
+var rcheckableType = ( /^(?:checkbox|radio)$/i );
+
+var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]+)/i );
+
+var rscriptType = ( /^$|\/(?:java|ecma)script/i );
+
+
+
+// We have to close these tags to support XHTML (#13200)
+var wrapMap = {
+
+       // Support: IE <=9 only
+       option: [ 1, "<select multiple='multiple'>", "</select>" ],
+
+       // XHTML parsers do not magically insert elements in the
+       // same way that tag soup parsers do. So we cannot shorten
+       // this by omitting <tbody> or other required elements.
+       thead: [ 1, "<table>", "</table>" ],
+       col: [ 2, "<table><colgroup>", "</colgroup></table>" ],
+       tr: [ 2, "<table><tbody>", "</tbody></table>" ],
+       td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
+
+       _default: [ 0, "", "" ]
+};
+
+// Support: IE <=9 only
+wrapMap.optgroup = wrapMap.option;
+
+wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
+wrapMap.th = wrapMap.td;
+
+
+function getAll( context, tag ) {
+
+       // Support: IE <=9 - 11 only
+       // Use typeof to avoid zero-argument method invocation on host objects (#15151)
+       var ret;
+
+       if ( typeof context.getElementsByTagName !== "undefined" ) {
+               ret = context.getElementsByTagName( tag || "*" );
+
+       } else if ( typeof context.querySelectorAll !== "undefined" ) {
+               ret = context.querySelectorAll( tag || "*" );
+
+       } else {
+               ret = [];
+       }
+
+       if ( tag === undefined || tag && nodeName( context, tag ) ) {
+               return jQuery.merge( [ context ], ret );
+       }
+
+       return ret;
+}
+
+
+// Mark scripts as having already been evaluated
+function setGlobalEval( elems, refElements ) {
+       var i = 0,
+               l = elems.length;
+
+       for ( ; i < l; i++ ) {
+               dataPriv.set(
+                       elems[ i ],
+                       "globalEval",
+                       !refElements || dataPriv.get( refElements[ i ], "globalEval" )
+               );
+       }
+}
+
+
+var rhtml = /<|&#?\w+;/;
+
+function buildFragment( elems, context, scripts, selection, ignored ) {
+       var elem, tmp, tag, wrap, contains, j,
+               fragment = context.createDocumentFragment(),
+               nodes = [],
+               i = 0,
+               l = elems.length;
+
+       for ( ; i < l; i++ ) {
+               elem = elems[ i ];
+
+               if ( elem || elem === 0 ) {
+
+                       // Add nodes directly
+                       if ( jQuery.type( elem ) === "object" ) {
+
+                               // Support: Android <=4.0 only, PhantomJS 1 only
+                               // push.apply(_, arraylike) throws on ancient WebKit
+                               jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
+
+                       // Convert non-html into a text node
+                       } else if ( !rhtml.test( elem ) ) {
+                               nodes.push( context.createTextNode( elem ) );
+
+                       // Convert html into DOM nodes
+                       } else {
+                               tmp = tmp || fragment.appendChild( context.createElement( "div" ) );
+
+                               // Deserialize a standard representation
+                               tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase();
+                               wrap = wrapMap[ tag ] || wrapMap._default;
+                               tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];
+
+                               // Descend through wrappers to the right content
+                               j = wrap[ 0 ];
+                               while ( j-- ) {
+                                       tmp = tmp.lastChild;
+                               }
+
+                               // Support: Android <=4.0 only, PhantomJS 1 only
+                               // push.apply(_, arraylike) throws on ancient WebKit
+                               jQuery.merge( nodes, tmp.childNodes );
+
+                               // Remember the top-level container
+                               tmp = fragment.firstChild;
+
+                               // Ensure the created nodes are orphaned (#12392)
+                               tmp.textContent = "";
+                       }
+               }
+       }
+
+       // Remove wrapper from fragment
+       fragment.textContent = "";
+
+       i = 0;
+       while ( ( elem = nodes[ i++ ] ) ) {
+
+               // Skip elements already in the context collection (trac-4087)
+               if ( selection && jQuery.inArray( elem, selection ) > -1 ) {
+                       if ( ignored ) {
+                               ignored.push( elem );
+                       }
+                       continue;
+               }
+
+               contains = jQuery.contains( elem.ownerDocument, elem );
+
+               // Append to fragment
+               tmp = getAll( fragment.appendChild( elem ), "script" );
+
+               // Preserve script evaluation history
+               if ( contains ) {
+                       setGlobalEval( tmp );
+               }
+
+               // Capture executables
+               if ( scripts ) {
+                       j = 0;
+                       while ( ( elem = tmp[ j++ ] ) ) {
+                               if ( rscriptType.test( elem.type || "" ) ) {
+                                       scripts.push( elem );
+                               }
+                       }
+               }
+       }
+
+       return fragment;
+}
+
+
+( function() {
+       var fragment = document.createDocumentFragment(),
+               div = fragment.appendChild( document.createElement( "div" ) ),
+               input = document.createElement( "input" );
+
+       // Support: Android 4.0 - 4.3 only
+       // Check state lost if the name is set (#11217)
+       // Support: Windows Web Apps (WWA)
+       // `name` and `type` must use .setAttribute for WWA (#14901)
+       input.setAttribute( "type", "radio" );
+       input.setAttribute( "checked", "checked" );
+       input.setAttribute( "name", "t" );
+
+       div.appendChild( input );
+
+       // Support: Android <=4.1 only
+       // Older WebKit doesn't clone checked state correctly in fragments
+       support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
+
+       // Support: IE <=11 only
+       // Make sure textarea (and checkbox) defaultValue is properly cloned
+       div.innerHTML = "<textarea>x</textarea>";
+       support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
+} )();
+var documentElement = document.documentElement;
+
+
+
+var
+       rkeyEvent = /^key/,
+       rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,
+       rtypenamespace = /^([^.]*)(?:\.(.+)|)/;
+
+function returnTrue() {
+       return true;
+}
+
+function returnFalse() {
+       return false;
+}
+
+// Support: IE <=9 only
+// See #13393 for more info
+function safeActiveElement() {
+       try {
+               return document.activeElement;
+       } catch ( err ) { }
+}
+
+function on( elem, types, selector, data, fn, one ) {
+       var origFn, type;
+
+       // Types can be a map of types/handlers
+       if ( typeof types === "object" ) {
+
+               // ( types-Object, selector, data )
+               if ( typeof selector !== "string" ) {
+
+                       // ( types-Object, data )
+                       data = data || selector;
+                       selector = undefined;
+               }
+               for ( type in types ) {
+                       on( elem, type, selector, data, types[ type ], one );
+               }
+               return elem;
+       }
+
+       if ( data == null && fn == null ) {
+
+               // ( types, fn )
+               fn = selector;
+               data = selector = undefined;
+       } else if ( fn == null ) {
+               if ( typeof selector === "string" ) {
+
+                       // ( types, selector, fn )
+                       fn = data;
+                       data = undefined;
+               } else {
+
+                       // ( types, data, fn )
+                       fn = data;
+                       data = selector;
+                       selector = undefined;
+               }
+       }
+       if ( fn === false ) {
+               fn = returnFalse;
+       } else if ( !fn ) {
+               return elem;
+       }
+
+       if ( one === 1 ) {
+               origFn = fn;
+               fn = function( event ) {
+
+                       // Can use an empty set, since event contains the info
+                       jQuery().off( event );
+                       return origFn.apply( this, arguments );
+               };
+
+               // Use same guid so caller can remove using origFn
+               fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
+       }
+       return elem.each( function() {
+               jQuery.event.add( this, types, fn, data, selector );
+       } );
+}
+
+/*
+ * Helper functions for managing events -- not part of the public interface.
+ * Props to Dean Edwards' addEvent library for many of the ideas.
+ */
+jQuery.event = {
+
+       global: {},
+
+       add: function( elem, types, handler, data, selector ) {
+
+               var handleObjIn, eventHandle, tmp,
+                       events, t, handleObj,
+                       special, handlers, type, namespaces, origType,
+                       elemData = dataPriv.get( elem );
+
+               // Don't attach events to noData or text/comment nodes (but allow plain objects)
+               if ( !elemData ) {
+                       return;
+               }
+
+               // Caller can pass in an object of custom data in lieu of the handler
+               if ( handler.handler ) {
+                       handleObjIn = handler;
+                       handler = handleObjIn.handler;
+                       selector = handleObjIn.selector;
+               }
+
+               // Ensure that invalid selectors throw exceptions at attach time
+               // Evaluate against documentElement in case elem is a non-element node (e.g., document)
+               if ( selector ) {
+                       jQuery.find.matchesSelector( documentElement, selector );
+               }
+
+               // Make sure that the handler has a unique ID, used to find/remove it later
+               if ( !handler.guid ) {
+                       handler.guid = jQuery.guid++;
+               }
+
+               // Init the element's event structure and main handler, if this is the first
+               if ( !( events = elemData.events ) ) {
+                       events = elemData.events = {};
+               }
+               if ( !( eventHandle = elemData.handle ) ) {
+                       eventHandle = elemData.handle = function( e ) {
+
+                               // Discard the second event of a jQuery.event.trigger() and
+                               // when an event is called after a page has unloaded
+                               return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ?
+                                       jQuery.event.dispatch.apply( elem, arguments ) : undefined;
+                       };
+               }
+
+               // Handle multiple events separated by a space
+               types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
+               t = types.length;
+               while ( t-- ) {
+                       tmp = rtypenamespace.exec( types[ t ] ) || [];
+                       type = origType = tmp[ 1 ];
+                       namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
+
+                       // There *must* be a type, no attaching namespace-only handlers
+                       if ( !type ) {
+                               continue;
+                       }
+
+                       // If event changes its type, use the special event handlers for the changed type
+                       special = jQuery.event.special[ type ] || {};
+
+                       // If selector defined, determine special event api type, otherwise given type
+                       type = ( selector ? special.delegateType : special.bindType ) || type;
+
+                       // Update special based on newly reset type
+                       special = jQuery.event.special[ type ] || {};
+
+                       // handleObj is passed to all event handlers
+                       handleObj = jQuery.extend( {
+                               type: type,
+                               origType: origType,
+                               data: data,
+                               handler: handler,
+                               guid: handler.guid,
+                               selector: selector,
+                               needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
+                               namespace: namespaces.join( "." )
+                       }, handleObjIn );
+
+                       // Init the event handler queue if we're the first
+                       if ( !( handlers = events[ type ] ) ) {
+                               handlers = events[ type ] = [];
+                               handlers.delegateCount = 0;
+
+                               // Only use addEventListener if the special events handler returns false
+                               if ( !special.setup ||
+                                       special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
+
+                                       if ( elem.addEventListener ) {
+                                               elem.addEventListener( type, eventHandle );
+                                       }
+                               }
+                       }
+
+                       if ( special.add ) {
+                               special.add.call( elem, handleObj );
+
+                               if ( !handleObj.handler.guid ) {
+                                       handleObj.handler.guid = handler.guid;
+                               }
+                       }
+
+                       // Add to the element's handler list, delegates in front
+                       if ( selector ) {
+                               handlers.splice( handlers.delegateCount++, 0, handleObj );
+                       } else {
+                               handlers.push( handleObj );
+                       }
+
+                       // Keep track of which events have ever been used, for event optimization
+                       jQuery.event.global[ type ] = true;
+               }
+
+       },
+
+       // Detach an event or set of events from an element
+       remove: function( elem, types, handler, selector, mappedTypes ) {
+
+               var j, origCount, tmp,
+                       events, t, handleObj,
+                       special, handlers, type, namespaces, origType,
+                       elemData = dataPriv.hasData( elem ) && dataPriv.get( elem );
+
+               if ( !elemData || !( events = elemData.events ) ) {
+                       return;
+               }
+
+               // Once for each type.namespace in types; type may be omitted
+               types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
+               t = types.length;
+               while ( t-- ) {
+                       tmp = rtypenamespace.exec( types[ t ] ) || [];
+                       type = origType = tmp[ 1 ];
+                       namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
+
+                       // Unbind all events (on this namespace, if provided) for the element
+                       if ( !type ) {
+                               for ( type in events ) {
+                                       jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
+                               }
+                               continue;
+                       }
+
+                       special = jQuery.event.special[ type ] || {};
+                       type = ( selector ? special.delegateType : special.bindType ) || type;
+                       handlers = events[ type ] || [];
+                       tmp = tmp[ 2 ] &&
+                               new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" );
+
+                       // Remove matching events
+                       origCount = j = handlers.length;
+                       while ( j-- ) {
+                               handleObj = handlers[ j ];
+
+                               if ( ( mappedTypes || origType === handleObj.origType ) &&
+                                       ( !handler || handler.guid === handleObj.guid ) &&
+                                       ( !tmp || tmp.test( handleObj.namespace ) ) &&
+                                       ( !selector || selector === handleObj.selector ||
+                                               selector === "**" && handleObj.selector ) ) {
+                                       handlers.splice( j, 1 );
+
+                                       if ( handleObj.selector ) {
+                                               handlers.delegateCount--;
+                                       }
+                                       if ( special.remove ) {
+                                               special.remove.call( elem, handleObj );
+                                       }
+                               }
+                       }
+
+                       // Remove generic event handler if we removed something and no more handlers exist
+                       // (avoids potential for endless recursion during removal of special event handlers)
+                       if ( origCount && !handlers.length ) {
+                               if ( !special.teardown ||
+                                       special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
+
+                                       jQuery.removeEvent( elem, type, elemData.handle );
+                               }
+
+                               delete events[ type ];
+                       }
+               }
+
+               // Remove data and the expando if it's no longer used
+               if ( jQuery.isEmptyObject( events ) ) {
+                       dataPriv.remove( elem, "handle events" );
+               }
+       },
+
+       dispatch: function( nativeEvent ) {
+
+               // Make a writable jQuery.Event from the native event object
+               var event = jQuery.event.fix( nativeEvent );
+
+               var i, j, ret, matched, handleObj, handlerQueue,
+                       args = new Array( arguments.length ),
+                       handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [],
+                       special = jQuery.event.special[ event.type ] || {};
+
+               // Use the fix-ed jQuery.Event rather than the (read-only) native event
+               args[ 0 ] = event;
+
+               for ( i = 1; i < arguments.length; i++ ) {
+                       args[ i ] = arguments[ i ];
+               }
+
+               event.delegateTarget = this;
+
+               // Call the preDispatch hook for the mapped type, and let it bail if desired
+               if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
+                       return;
+               }
+
+               // Determine handlers
+               handlerQueue = jQuery.event.handlers.call( this, event, handlers );
+
+               // Run delegates first; they may want to stop propagation beneath us
+               i = 0;
+               while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {
+                       event.currentTarget = matched.elem;
+
+                       j = 0;
+                       while ( ( handleObj = matched.handlers[ j++ ] ) &&
+                               !event.isImmediatePropagationStopped() ) {
+
+                               // Triggered event must either 1) have no namespace, or 2) have namespace(s)
+                               // a subset or equal to those in the bound event (both can have no namespace).
+                               if ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) {
+
+                                       event.handleObj = handleObj;
+                                       event.data = handleObj.data;
+
+                                       ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||
+                                               handleObj.handler ).apply( matched.elem, args );
+
+                                       if ( ret !== undefined ) {
+                                               if ( ( event.result = ret ) === false ) {
+                                                       event.preventDefault();
+                                                       event.stopPropagation();
+                                               }
+                                       }
+                               }
+                       }
+               }
+
+               // Call the postDispatch hook for the mapped type
+               if ( special.postDispatch ) {
+                       special.postDispatch.call( this, event );
+               }
+
+               return event.result;
+       },
+
+       handlers: function( event, handlers ) {
+               var i, handleObj, sel, matchedHandlers, matchedSelectors,
+                       handlerQueue = [],
+                       delegateCount = handlers.delegateCount,
+                       cur = event.target;
+
+               // Find delegate handlers
+               if ( delegateCount &&
+
+                       // Support: IE <=9
+                       // Black-hole SVG <use> instance trees (trac-13180)
+                       cur.nodeType &&
+
+                       // Support: Firefox <=42
+                       // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)
+                       // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click
+                       // Support: IE 11 only
+                       // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343)
+                       !( event.type === "click" && event.button >= 1 ) ) {
+
+                       for ( ; cur !== this; cur = cur.parentNode || this ) {
+
+                               // Don't check non-elements (#13208)
+                               // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
+                               if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) {
+                                       matchedHandlers = [];
+                                       matchedSelectors = {};
+                                       for ( i = 0; i < delegateCount; i++ ) {
+                                               handleObj = handlers[ i ];
+
+                                               // Don't conflict with Object.prototype properties (#13203)
+                                               sel = handleObj.selector + " ";
+
+                                               if ( matchedSelectors[ sel ] === undefined ) {
+                                                       matchedSelectors[ sel ] = handleObj.needsContext ?
+                                                               jQuery( sel, this ).index( cur ) > -1 :
+                                                               jQuery.find( sel, this, null, [ cur ] ).length;
+                                               }
+                                               if ( matchedSelectors[ sel ] ) {
+                                                       matchedHandlers.push( handleObj );
+                                               }
+                                       }
+                                       if ( matchedHandlers.length ) {
+                                               handlerQueue.push( { elem: cur, handlers: matchedHandlers } );
+                                       }
+                               }
+                       }
+               }
+
+               // Add the remaining (directly-bound) handlers
+               cur = this;
+               if ( delegateCount < handlers.length ) {
+                       handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );
+               }
+
+               return handlerQueue;
+       },
+
+       addProp: function( name, hook ) {
+               Object.defineProperty( jQuery.Event.prototype, name, {
+                       enumerable: true,
+                       configurable: true,
+
+                       get: jQuery.isFunction( hook ) ?
+                               function() {
+                                       if ( this.originalEvent ) {
+                                                       return hook( this.originalEvent );
+                                       }
+                               } :
+                               function() {
+                                       if ( this.originalEvent ) {
+                                                       return this.originalEvent[ name ];
+                                       }
+                               },
+
+                       set: function( value ) {
+                               Object.defineProperty( this, name, {
+                                       enumerable: true,
+                                       configurable: true,
+                                       writable: true,
+                                       value: value
+                               } );
+                       }
+               } );
+       },
+
+       fix: function( originalEvent ) {
+               return originalEvent[ jQuery.expando ] ?
+                       originalEvent :
+                       new jQuery.Event( originalEvent );
+       },
+
+       special: {
+               load: {
+
+                       // Prevent triggered image.load events from bubbling to window.load
+                       noBubble: true
+               },
+               focus: {
+
+                       // Fire native event if possible so blur/focus sequence is correct
+                       trigger: function() {
+                               if ( this !== safeActiveElement() && this.focus ) {
+                                       this.focus();
+                                       return false;
+                               }
+                       },
+                       delegateType: "focusin"
+               },
+               blur: {
+                       trigger: function() {
+                               if ( this === safeActiveElement() && this.blur ) {
+                                       this.blur();
+                                       return false;
+                               }
+                       },
+                       delegateType: "focusout"
+               },
+               click: {
+
+                       // For checkbox, fire native event so checked state will be right
+                       trigger: function() {
+                               if ( this.type === "checkbox" && this.click && nodeName( this, "input" ) ) {
+                                       this.click();
+                                       return false;
+                               }
+                       },
+
+                       // For cross-browser consistency, don't fire native .click() on links
+                       _default: function( event ) {
+                               return nodeName( event.target, "a" );
+                       }
+               },
+
+               beforeunload: {
+                       postDispatch: function( event ) {
+
+                               // Support: Firefox 20+
+                               // Firefox doesn't alert if the returnValue field is not set.
+                               if ( event.result !== undefined && event.originalEvent ) {
+                                       event.originalEvent.returnValue = event.result;
+                               }
+                       }
+               }
+       }
+};
+
+jQuery.removeEvent = function( elem, type, handle ) {
+
+       // This "if" is needed for plain objects
+       if ( elem.removeEventListener ) {
+               elem.removeEventListener( type, handle );
+       }
+};
+
+jQuery.Event = function( src, props ) {
+
+       // Allow instantiation without the 'new' keyword
+       if ( !( this instanceof jQuery.Event ) ) {
+               return new jQuery.Event( src, props );
+       }
+
+       // Event object
+       if ( src && src.type ) {
+               this.originalEvent = src;
+               this.type = src.type;
+
+               // Events bubbling up the document may have been marked as prevented
+               // by a handler lower down the tree; reflect the correct value.
+               this.isDefaultPrevented = src.defaultPrevented ||
+                               src.defaultPrevented === undefined &&
+
+                               // Support: Android <=2.3 only
+                               src.returnValue === false ?
+                       returnTrue :
+                       returnFalse;
+
+               // Create target properties
+               // Support: Safari <=6 - 7 only
+               // Target should not be a text node (#504, #13143)
+               this.target = ( src.target && src.target.nodeType === 3 ) ?
+                       src.target.parentNode :
+                       src.target;
+
+               this.currentTarget = src.currentTarget;
+               this.relatedTarget = src.relatedTarget;
+
+       // Event type
+       } else {
+               this.type = src;
+       }
+
+       // Put explicitly provided properties onto the event object
+       if ( props ) {
+               jQuery.extend( this, props );
+       }
+
+       // Create a timestamp if incoming event doesn't have one
+       this.timeStamp = src && src.timeStamp || jQuery.now();
+
+       // Mark it as fixed
+       this[ jQuery.expando ] = true;
+};
+
+// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
+// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
+jQuery.Event.prototype = {
+       constructor: jQuery.Event,
+       isDefaultPrevented: returnFalse,
+       isPropagationStopped: returnFalse,
+       isImmediatePropagationStopped: returnFalse,
+       isSimulated: false,
+
+       preventDefault: function() {
+               var e = this.originalEvent;
+
+               this.isDefaultPrevented = returnTrue;
+
+               if ( e && !this.isSimulated ) {
+                       e.preventDefault();
+               }
+       },
+       stopPropagation: function() {
+               var e = this.originalEvent;
+
+               this.isPropagationStopped = returnTrue;
+
+               if ( e && !this.isSimulated ) {
+                       e.stopPropagation();
+               }
+       },
+       stopImmediatePropagation: function() {
+               var e = this.originalEvent;
+
+               this.isImmediatePropagationStopped = returnTrue;
+
+               if ( e && !this.isSimulated ) {
+                       e.stopImmediatePropagation();
+               }
+
+               this.stopPropagation();
+       }
+};
+
+// Includes all common event props including KeyEvent and MouseEvent specific props
+jQuery.each( {
+       altKey: true,
+       bubbles: true,
+       cancelable: true,
+       changedTouches: true,
+       ctrlKey: true,
+       detail: true,
+       eventPhase: true,
+       metaKey: true,
+       pageX: true,
+       pageY: true,
+       shiftKey: true,
+       view: true,
+       "char": true,
+       charCode: true,
+       key: true,
+       keyCode: true,
+       button: true,
+       buttons: true,
+       clientX: true,
+       clientY: true,
+       offsetX: true,
+       offsetY: true,
+       pointerId: true,
+       pointerType: true,
+       screenX: true,
+       screenY: true,
+       targetTouches: true,
+       toElement: true,
+       touches: true,
+
+       which: function( event ) {
+               var button = event.button;
+
+               // Add which for key events
+               if ( event.which == null && rkeyEvent.test( event.type ) ) {
+                       return event.charCode != null ? event.charCode : event.keyCode;
+               }
+
+               // Add which for click: 1 === left; 2 === middle; 3 === right
+               if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {
+                       if ( button & 1 ) {
+                               return 1;
+                       }
+
+                       if ( button & 2 ) {
+                               return 3;
+                       }
+
+                       if ( button & 4 ) {
+                               return 2;
+                       }
+
+                       return 0;
+               }
+
+               return event.which;
+       }
+}, jQuery.event.addProp );
+
+// Create mouseenter/leave events using mouseover/out and event-time checks
+// so that event delegation works in jQuery.
+// Do the same for pointerenter/pointerleave and pointerover/pointerout
+//
+// Support: Safari 7 only
+// Safari sends mouseenter too often; see:
+// https://bugs.chromium.org/p/chromium/issues/detail?id=470258
+// for the description of the bug (it existed in older Chrome versions as well).
+jQuery.each( {
+       mouseenter: "mouseover",
+       mouseleave: "mouseout",
+       pointerenter: "pointerover",
+       pointerleave: "pointerout"
+}, function( orig, fix ) {
+       jQuery.event.special[ orig ] = {
+               delegateType: fix,
+               bindType: fix,
+
+               handle: function( event ) {
+                       var ret,
+                               target = this,
+                               related = event.relatedTarget,
+                               handleObj = event.handleObj;
+
+                       // For mouseenter/leave call the handler if related is outside the target.
+                       // NB: No relatedTarget if the mouse left/entered the browser window
+                       if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {
+                               event.type = handleObj.origType;
+                               ret = handleObj.handler.apply( this, arguments );
+                               event.type = fix;
+                       }
+                       return ret;
+               }
+       };
+} );
+
+jQuery.fn.extend( {
+
+       on: function( types, selector, data, fn ) {
+               return on( this, types, selector, data, fn );
+       },
+       one: function( types, selector, data, fn ) {
+               return on( this, types, selector, data, fn, 1 );
+       },
+       off: function( types, selector, fn ) {
+               var handleObj, type;
+               if ( types && types.preventDefault && types.handleObj ) {
+
+                       // ( event )  dispatched jQuery.Event
+                       handleObj = types.handleObj;
+                       jQuery( types.delegateTarget ).off(
+                               handleObj.namespace ?
+                                       handleObj.origType + "." + handleObj.namespace :
+                                       handleObj.origType,
+                               handleObj.selector,
+                               handleObj.handler
+                       );
+                       return this;
+               }
+               if ( typeof types === "object" ) {
+
+                       // ( types-object [, selector] )
+                       for ( type in types ) {
+                               this.off( type, selector, types[ type ] );
+                       }
+                       return this;
+               }
+               if ( selector === false || typeof selector === "function" ) {
+
+                       // ( types [, fn] )
+                       fn = selector;
+                       selector = undefined;
+               }
+               if ( fn === false ) {
+                       fn = returnFalse;
+               }
+               return this.each( function() {
+                       jQuery.event.remove( this, types, fn, selector );
+               } );
+       }
+} );
+
+
+var
+
+       /* eslint-disable max-len */
+
+       // See https://github.com/eslint/eslint/issues/3229
+       rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,
+
+       /* eslint-enable */
+
+       // Support: IE <=10 - 11, Edge 12 - 13
+       // In IE/Edge using regex groups here causes severe slowdowns.
+       // See https://connect.microsoft.com/IE/feedback/details/1736512/
+       rnoInnerhtml = /<script|<style|<link/i,
+
+       // checked="checked" or checked
+       rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
+       rscriptTypeMasked = /^true\/(.*)/,
+       rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;
+
+// Prefer a tbody over its parent table for containing new rows
+function manipulationTarget( elem, content ) {
+       if ( nodeName( elem, "table" ) &&
+               nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) {
+
+               return jQuery( ">tbody", elem )[ 0 ] || elem;
+       }
+
+       return elem;
+}
+
+// Replace/restore the type attribute of script elements for safe DOM manipulation
+function disableScript( elem ) {
+       elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type;
+       return elem;
+}
+function restoreScript( elem ) {
+       var match = rscriptTypeMasked.exec( elem.type );
+
+       if ( match ) {
+               elem.type = match[ 1 ];
+       } else {
+               elem.removeAttribute( "type" );
+       }
+
+       return elem;
+}
+
+function cloneCopyEvent( src, dest ) {
+       var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;
+
+       if ( dest.nodeType !== 1 ) {
+               return;
+       }
+
+       // 1. Copy private data: events, handlers, etc.
+       if ( dataPriv.hasData( src ) ) {
+               pdataOld = dataPriv.access( src );
+               pdataCur = dataPriv.set( dest, pdataOld );
+               events = pdataOld.events;
+
+               if ( events ) {
+                       delete pdataCur.handle;
+                       pdataCur.events = {};
+
+                       for ( type in events ) {
+                               for ( i = 0, l = events[ type ].length; i < l; i++ ) {
+                                       jQuery.event.add( dest, type, events[ type ][ i ] );
+                               }
+                       }
+               }
+       }
+
+       // 2. Copy user data
+       if ( dataUser.hasData( src ) ) {
+               udataOld = dataUser.access( src );
+               udataCur = jQuery.extend( {}, udataOld );
+
+               dataUser.set( dest, udataCur );
+       }
+}
+
+// Fix IE bugs, see support tests
+function fixInput( src, dest ) {
+       var nodeName = dest.nodeName.toLowerCase();
+
+       // Fails to persist the checked state of a cloned checkbox or radio button.
+       if ( nodeName === "input" && rcheckableType.test( src.type ) ) {
+               dest.checked = src.checked;
+
+       // Fails to return the selected option to the default selected state when cloning options
+       } else if ( nodeName === "input" || nodeName === "textarea" ) {
+               dest.defaultValue = src.defaultValue;
+       }
+}
+
+function domManip( collection, args, callback, ignored ) {
+
+       // Flatten any nested arrays
+       args = concat.apply( [], args );
+
+       var fragment, first, scripts, hasScripts, node, doc,
+               i = 0,
+               l = collection.length,
+               iNoClone = l - 1,
+               value = args[ 0 ],
+               isFunction = jQuery.isFunction( value );
+
+       // We can't cloneNode fragments that contain checked, in WebKit
+       if ( isFunction ||
+                       ( l > 1 && typeof value === "string" &&
+                               !support.checkClone && rchecked.test( value ) ) ) {
+               return collection.each( function( index ) {
+                       var self = collection.eq( index );
+                       if ( isFunction ) {
+                               args[ 0 ] = value.call( this, index, self.html() );
+                       }
+                       domManip( self, args, callback, ignored );
+               } );
+       }
+
+       if ( l ) {
+               fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );
+               first = fragment.firstChild;
+
+               if ( fragment.childNodes.length === 1 ) {
+                       fragment = first;
+               }
+
+               // Require either new content or an interest in ignored elements to invoke the callback
+               if ( first || ignored ) {
+                       scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
+                       hasScripts = scripts.length;
+
+                       // Use the original fragment for the last item
+                       // instead of the first because it can end up
+                       // being emptied incorrectly in certain situations (#8070).
+                       for ( ; i < l; i++ ) {
+                               node = fragment;
+
+                               if ( i !== iNoClone ) {
+                                       node = jQuery.clone( node, true, true );
+
+                                       // Keep references to cloned scripts for later restoration
+                                       if ( hasScripts ) {
+
+                                               // Support: Android <=4.0 only, PhantomJS 1 only
+                                               // push.apply(_, arraylike) throws on ancient WebKit
+                                               jQuery.merge( scripts, getAll( node, "script" ) );
+                                       }
+                               }
+
+                               callback.call( collection[ i ], node, i );
+                       }
+
+                       if ( hasScripts ) {
+                               doc = scripts[ scripts.length - 1 ].ownerDocument;
+
+                               // Reenable scripts
+                               jQuery.map( scripts, restoreScript );
+
+                               // Evaluate executable scripts on first document insertion
+                               for ( i = 0; i < hasScripts; i++ ) {
+                                       node = scripts[ i ];
+                                       if ( rscriptType.test( node.type || "" ) &&
+                                               !dataPriv.access( node, "globalEval" ) &&
+                                               jQuery.contains( doc, node ) ) {
+
+                                               if ( node.src ) {
+
+                                                       // Optional AJAX dependency, but won't run scripts if not present
+                                                       if ( jQuery._evalUrl ) {
+                                                               jQuery._evalUrl( node.src );
+                                                       }
+                                               } else {
+                                                       DOMEval( node.textContent.replace( rcleanScript, "" ), doc );
+                                               }
+                                       }
+                               }
+                       }
+               }
+       }
+
+       return collection;
+}
+
+function remove( elem, selector, keepData ) {
+       var node,
+               nodes = selector ? jQuery.filter( selector, elem ) : elem,
+               i = 0;
+
+       for ( ; ( node = nodes[ i ] ) != null; i++ ) {
+               if ( !keepData && node.nodeType === 1 ) {
+                       jQuery.cleanData( getAll( node ) );
+               }
+
+               if ( node.parentNode ) {
+                       if ( keepData && jQuery.contains( node.ownerDocument, node ) ) {
+                               setGlobalEval( getAll( node, "script" ) );
+                       }
+                       node.parentNode.removeChild( node );
+               }
+       }
+
+       return elem;
+}
+
+jQuery.extend( {
+       htmlPrefilter: function( html ) {
+               return html.replace( rxhtmlTag, "<$1></$2>" );
+       },
+
+       clone: function( elem, dataAndEvents, deepDataAndEvents ) {
+               var i, l, srcElements, destElements,
+                       clone = elem.cloneNode( true ),
+                       inPage = jQuery.contains( elem.ownerDocument, elem );
+
+               // Fix IE cloning issues
+               if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&
+                               !jQuery.isXMLDoc( elem ) ) {
+
+                       // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2
+                       destElements = getAll( clone );
+                       srcElements = getAll( elem );
+
+                       for ( i = 0, l = srcElements.length; i < l; i++ ) {
+                               fixInput( srcElements[ i ], destElements[ i ] );
+                       }
+               }
+
+               // Copy the events from the original to the clone
+               if ( dataAndEvents ) {
+                       if ( deepDataAndEvents ) {
+                               srcElements = srcElements || getAll( elem );
+                               destElements = destElements || getAll( clone );
+
+                               for ( i = 0, l = srcElements.length; i < l; i++ ) {
+                                       cloneCopyEvent( srcElements[ i ], destElements[ i ] );
+                               }
+                       } else {
+                               cloneCopyEvent( elem, clone );
+                       }
+               }
+
+               // Preserve script evaluation history
+               destElements = getAll( clone, "script" );
+               if ( destElements.length > 0 ) {
+                       setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
+               }
+
+               // Return the cloned set
+               return clone;
+       },
+
+       cleanData: function( elems ) {
+               var data, elem, type,
+                       special = jQuery.event.special,
+                       i = 0;
+
+               for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {
+                       if ( acceptData( elem ) ) {
+                               if ( ( data = elem[ dataPriv.expando ] ) ) {
+                                       if ( data.events ) {
+                                               for ( type in data.events ) {
+                                                       if ( special[ type ] ) {
+                                                               jQuery.event.remove( elem, type );
+
+                                                       // This is a shortcut to avoid jQuery.event.remove's overhead
+                                                       } else {
+                                                               jQuery.removeEvent( elem, type, data.handle );
+                                                       }
+                                               }
+                                       }
+
+                                       // Support: Chrome <=35 - 45+
+                                       // Assign undefined instead of using delete, see Data#remove
+                                       elem[ dataPriv.expando ] = undefined;
+                               }
+                               if ( elem[ dataUser.expando ] ) {
+
+                                       // Support: Chrome <=35 - 45+
+                                       // Assign undefined instead of using delete, see Data#remove
+                                       elem[ dataUser.expando ] = undefined;
+                               }
+                       }
+               }
+       }
+} );
+
+jQuery.fn.extend( {
+       detach: function( selector ) {
+               return remove( this, selector, true );
+       },
+
+       remove: function( selector ) {
+               return remove( this, selector );
+       },
+
+       text: function( value ) {
+               return access( this, function( value ) {
+                       return value === undefined ?
+                               jQuery.text( this ) :
+                               this.empty().each( function() {
+                                       if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+                                               this.textContent = value;
+                                       }
+                               } );
+               }, null, value, arguments.length );
+       },
+
+       append: function() {
+               return domManip( this, arguments, function( elem ) {
+                       if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+                               var target = manipulationTarget( this, elem );
+                               target.appendChild( elem );
+                       }
+               } );
+       },
+
+       prepend: function() {
+               return domManip( this, arguments, function( elem ) {
+                       if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+                               var target = manipulationTarget( this, elem );
+                               target.insertBefore( elem, target.firstChild );
+                       }
+               } );
+       },
+
+       before: function() {
+               return domManip( this, arguments, function( elem ) {
+                       if ( this.parentNode ) {
+                               this.parentNode.insertBefore( elem, this );
+                       }
+               } );
+       },
+
+       after: function() {
+               return domManip( this, arguments, function( elem ) {
+                       if ( this.parentNode ) {
+                               this.parentNode.insertBefore( elem, this.nextSibling );
+                       }
+               } );
+       },
+
+       empty: function() {
+               var elem,
+                       i = 0;
+
+               for ( ; ( elem = this[ i ] ) != null; i++ ) {
+                       if ( elem.nodeType === 1 ) {
+
+                               // Prevent memory leaks
+                               jQuery.cleanData( getAll( elem, false ) );
+
+                               // Remove any remaining nodes
+                               elem.textContent = "";
+                       }
+               }
+
+               return this;
+       },
+
+       clone: function( dataAndEvents, deepDataAndEvents ) {
+               dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
+               deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
+
+               return this.map( function() {
+                       return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
+               } );
+       },
+
+       html: function( value ) {
+               return access( this, function( value ) {
+                       var elem = this[ 0 ] || {},
+                               i = 0,
+                               l = this.length;
+
+                       if ( value === undefined && elem.nodeType === 1 ) {
+                               return elem.innerHTML;
+                       }
+
+                       // See if we can take a shortcut and just use innerHTML
+                       if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
+                               !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) {
+
+                               value = jQuery.htmlPrefilter( value );
+
+                               try {
+                                       for ( ; i < l; i++ ) {
+                                               elem = this[ i ] || {};
+
+                                               // Remove element nodes and prevent memory leaks
+                                               if ( elem.nodeType === 1 ) {
+                                                       jQuery.cleanData( getAll( elem, false ) );
+                                                       elem.innerHTML = value;
+                                               }
+                                       }
+
+                                       elem = 0;
+
+                               // If using innerHTML throws an exception, use the fallback method
+                               } catch ( e ) {}
+                       }
+
+                       if ( elem ) {
+                               this.empty().append( value );
+                       }
+               }, null, value, arguments.length );
+       },
+
+       replaceWith: function() {
+               var ignored = [];
+
+               // Make the changes, replacing each non-ignored context element with the new content
+               return domManip( this, arguments, function( elem ) {
+                       var parent = this.parentNode;
+
+                       if ( jQuery.inArray( this, ignored ) < 0 ) {
+                               jQuery.cleanData( getAll( this ) );
+                               if ( parent ) {
+                                       parent.replaceChild( elem, this );
+                               }
+                       }
+
+               // Force callback invocation
+               }, ignored );
+       }
+} );
+
+jQuery.each( {
+       appendTo: "append",
+       prependTo: "prepend",
+       insertBefore: "before",
+       insertAfter: "after",
+       replaceAll: "replaceWith"
+}, function( name, original ) {
+       jQuery.fn[ name ] = function( selector ) {
+               var elems,
+                       ret = [],
+                       insert = jQuery( selector ),
+                       last = insert.length - 1,
+                       i = 0;
+
+               for ( ; i <= last; i++ ) {
+                       elems = i === last ? this : this.clone( true );
+                       jQuery( insert[ i ] )[ original ]( elems );
+
+                       // Support: Android <=4.0 only, PhantomJS 1 only
+                       // .get() because push.apply(_, arraylike) throws on ancient WebKit
+                       push.apply( ret, elems.get() );
+               }
+
+               return this.pushStack( ret );
+       };
+} );
+var rmargin = ( /^margin/ );
+
+var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );
+
+var getStyles = function( elem ) {
+
+               // Support: IE <=11 only, Firefox <=30 (#15098, #14150)
+               // IE throws on elements created in popups
+               // FF meanwhile throws on frame elements through "defaultView.getComputedStyle"
+               var view = elem.ownerDocument.defaultView;
+
+               if ( !view || !view.opener ) {
+                       view = window;
+               }
+
+               return view.getComputedStyle( elem );
+       };
+
+
+
+( function() {
+
+       // Executing both pixelPosition & boxSizingReliable tests require only one layout
+       // so they're executed at the same time to save the second computation.
+       function computeStyleTests() {
+
+               // This is a singleton, we need to execute it only once
+               if ( !div ) {
+                       return;
+               }
+
+               div.style.cssText =
+                       "box-sizing:border-box;" +
+                       "position:relative;display:block;" +
+                       "margin:auto;border:1px;padding:1px;" +
+                       "top:1%;width:50%";
+               div.innerHTML = "";
+               documentElement.appendChild( container );
+
+               var divStyle = window.getComputedStyle( div );
+               pixelPositionVal = divStyle.top !== "1%";
+
+               // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44
+               reliableMarginLeftVal = divStyle.marginLeft === "2px";
+               boxSizingReliableVal = divStyle.width === "4px";
+
+               // Support: Android 4.0 - 4.3 only
+               // Some styles come back with percentage values, even though they shouldn't
+               div.style.marginRight = "50%";
+               pixelMarginRightVal = divStyle.marginRight === "4px";
+
+               documentElement.removeChild( container );
+
+               // Nullify the div so it wouldn't be stored in the memory and
+               // it will also be a sign that checks already performed
+               div = null;
+       }
+
+       var pixelPositionVal, boxSizingReliableVal, pixelMarginRightVal, reliableMarginLeftVal,
+               container = document.createElement( "div" ),
+               div = document.createElement( "div" );
+
+       // Finish early in limited (non-browser) environments
+       if ( !div.style ) {
+               return;
+       }
+
+       // Support: IE <=9 - 11 only
+       // Style of cloned element affects source element cloned (#8908)
+       div.style.backgroundClip = "content-box";
+       div.cloneNode( true ).style.backgroundClip = "";
+       support.clearCloneStyle = div.style.backgroundClip === "content-box";
+
+       container.style.cssText = "border:0;width:8px;height:0;top:0;left:-9999px;" +
+               "padding:0;margin-top:1px;position:absolute";
+       container.appendChild( div );
+
+       jQuery.extend( support, {
+               pixelPosition: function() {
+                       computeStyleTests();
+                       return pixelPositionVal;
+               },
+               boxSizingReliable: function() {
+                       computeStyleTests();
+                       return boxSizingReliableVal;
+               },
+               pixelMarginRight: function() {
+                       computeStyleTests();
+                       return pixelMarginRightVal;
+               },
+               reliableMarginLeft: function() {
+                       computeStyleTests();
+                       return reliableMarginLeftVal;
+               }
+       } );
+} )();
+
+
+function curCSS( elem, name, computed ) {
+       var width, minWidth, maxWidth, ret,
+
+               // Support: Firefox 51+
+               // Retrieving style before computed somehow
+               // fixes an issue with getting wrong values
+               // on detached elements
+               style = elem.style;
+
+       computed = computed || getStyles( elem );
+
+       // getPropertyValue is needed for:
+       //   .css('filter') (IE 9 only, #12537)
+       //   .css('--customProperty) (#3144)
+       if ( computed ) {
+               ret = computed.getPropertyValue( name ) || computed[ name ];
+
+               if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
+                       ret = jQuery.style( elem, name );
+               }
+
+               // A tribute to the "awesome hack by Dean Edwards"
+               // Android Browser returns percentage for some values,
+               // but width seems to be reliably pixels.
+               // This is against the CSSOM draft spec:
+               // https://drafts.csswg.org/cssom/#resolved-values
+               if ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) {
+
+                       // Remember the original values
+                       width = style.width;
+                       minWidth = style.minWidth;
+                       maxWidth = style.maxWidth;
+
+                       // Put in the new values to get a computed value out
+                       style.minWidth = style.maxWidth = style.width = ret;
+                       ret = computed.width;
+
+                       // Revert the changed values
+                       style.width = width;
+                       style.minWidth = minWidth;
+                       style.maxWidth = maxWidth;
+               }
+       }
+
+       return ret !== undefined ?
+
+               // Support: IE <=9 - 11 only
+               // IE returns zIndex value as an integer.
+               ret + "" :
+               ret;
+}
+
+
+function addGetHookIf( conditionFn, hookFn ) {
+
+       // Define the hook, we'll check on the first run if it's really needed.
+       return {
+               get: function() {
+                       if ( conditionFn() ) {
+
+                               // Hook not needed (or it's not possible to use it due
+                               // to missing dependency), remove it.
+                               delete this.get;
+                               return;
+                       }
+
+                       // Hook needed; redefine it so that the support test is not executed again.
+                       return ( this.get = hookFn ).apply( this, arguments );
+               }
+       };
+}
+
+
+var
+
+       // Swappable if display is none or starts with table
+       // except "table", "table-cell", or "table-caption"
+       // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
+       rdisplayswap = /^(none|table(?!-c[ea]).+)/,
+       rcustomProp = /^--/,
+       cssShow = { position: "absolute", visibility: "hidden", display: "block" },
+       cssNormalTransform = {
+               letterSpacing: "0",
+               fontWeight: "400"
+       },
+
+       cssPrefixes = [ "Webkit", "Moz", "ms" ],
+       emptyStyle = document.createElement( "div" ).style;
+
+// Return a css property mapped to a potentially vendor prefixed property
+function vendorPropName( name ) {
+
+       // Shortcut for names that are not vendor prefixed
+       if ( name in emptyStyle ) {
+               return name;
+       }
+
+       // Check for vendor prefixed names
+       var capName = name[ 0 ].toUpperCase() + name.slice( 1 ),
+               i = cssPrefixes.length;
+
+       while ( i-- ) {
+               name = cssPrefixes[ i ] + capName;
+               if ( name in emptyStyle ) {
+                       return name;
+               }
+       }
+}
+
+// Return a property mapped along what jQuery.cssProps suggests or to
+// a vendor prefixed property.
+function finalPropName( name ) {
+       var ret = jQuery.cssProps[ name ];
+       if ( !ret ) {
+               ret = jQuery.cssProps[ name ] = vendorPropName( name ) || name;
+       }
+       return ret;
+}
+
+function setPositiveNumber( elem, value, subtract ) {
+
+       // Any relative (+/-) values have already been
+       // normalized at this point
+       var matches = rcssNum.exec( value );
+       return matches ?
+
+               // Guard against undefined "subtract", e.g., when used as in cssHooks
+               Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) :
+               value;
+}
+
+function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
+       var i,
+               val = 0;
+
+       // If we already have the right measurement, avoid augmentation
+       if ( extra === ( isBorderBox ? "border" : "content" ) ) {
+               i = 4;
+
+       // Otherwise initialize for horizontal or vertical properties
+       } else {
+               i = name === "width" ? 1 : 0;
+       }
+
+       for ( ; i < 4; i += 2 ) {
+
+               // Both box models exclude margin, so add it if we want it
+               if ( extra === "margin" ) {
+                       val += jQuery.css( elem, extra + cssExpand[ i ], true, styles );
+               }
+
+               if ( isBorderBox ) {
+
+                       // border-box includes padding, so remove it if we want content
+                       if ( extra === "content" ) {
+                               val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
+                       }
+
+                       // At this point, extra isn't border nor margin, so remove border
+                       if ( extra !== "margin" ) {
+                               val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
+                       }
+               } else {
+
+                       // At this point, extra isn't content, so add padding
+                       val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
+
+                       // At this point, extra isn't content nor padding, so add border
+                       if ( extra !== "padding" ) {
+                               val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
+                       }
+               }
+       }
+
+       return val;
+}
+
+function getWidthOrHeight( elem, name, extra ) {
+
+       // Start with computed style
+       var valueIsBorderBox,
+               styles = getStyles( elem ),
+               val = curCSS( elem, name, styles ),
+               isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
+
+       // Computed unit is not pixels. Stop here and return.
+       if ( rnumnonpx.test( val ) ) {
+               return val;
+       }
+
+       // Check for style in case a browser which returns unreliable values
+       // for getComputedStyle silently falls back to the reliable elem.style
+       valueIsBorderBox = isBorderBox &&
+               ( support.boxSizingReliable() || val === elem.style[ name ] );
+
+       // Fall back to offsetWidth/Height when value is "auto"
+       // This happens for inline elements with no explicit setting (gh-3571)
+       if ( val === "auto" ) {
+               val = elem[ "offset" + name[ 0 ].toUpperCase() + name.slice( 1 ) ];
+       }
+
+       // Normalize "", auto, and prepare for extra
+       val = parseFloat( val ) || 0;
+
+       // Use the active box-sizing model to add/subtract irrelevant styles
+       return ( val +
+               augmentWidthOrHeight(
+                       elem,
+                       name,
+                       extra || ( isBorderBox ? "border" : "content" ),
+                       valueIsBorderBox,
+                       styles
+               )
+       ) + "px";
+}
+
+jQuery.extend( {
+
+       // Add in style property hooks for overriding the default
+       // behavior of getting and setting a style property
+       cssHooks: {
+               opacity: {
+                       get: function( elem, computed ) {
+                               if ( computed ) {
+
+                                       // We should always get a number back from opacity
+                                       var ret = curCSS( elem, "opacity" );
+                                       return ret === "" ? "1" : ret;
+                               }
+                       }
+               }
+       },
+
+       // Don't automatically add "px" to these possibly-unitless properties
+       cssNumber: {
+               "animationIterationCount": true,
+               "columnCount": true,
+               "fillOpacity": true,
+               "flexGrow": true,
+               "flexShrink": true,
+               "fontWeight": true,
+               "lineHeight": true,
+               "opacity": true,
+               "order": true,
+               "orphans": true,
+               "widows": true,
+               "zIndex": true,
+               "zoom": true
+       },
+
+       // Add in properties whose names you wish to fix before
+       // setting or getting the value
+       cssProps: {
+               "float": "cssFloat"
+       },
+
+       // Get and set the style property on a DOM Node
+       style: function( elem, name, value, extra ) {
+
+               // Don't set styles on text and comment nodes
+               if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
+                       return;
+               }
+
+               // Make sure that we're working with the right name
+               var ret, type, hooks,
+                       origName = jQuery.camelCase( name ),
+                       isCustomProp = rcustomProp.test( name ),
+                       style = elem.style;
+
+               // Make sure that we're working with the right name. We don't
+               // want to query the value if it is a CSS custom property
+               // since they are user-defined.
+               if ( !isCustomProp ) {
+                       name = finalPropName( origName );
+               }
+
+               // Gets hook for the prefixed version, then unprefixed version
+               hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
+
+               // Check if we're setting a value
+               if ( value !== undefined ) {
+                       type = typeof value;
+
+                       // Convert "+=" or "-=" to relative numbers (#7345)
+                       if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {
+                               value = adjustCSS( elem, name, ret );
+
+                               // Fixes bug #9237
+                               type = "number";
+                       }
+
+                       // Make sure that null and NaN values aren't set (#7116)
+                       if ( value == null || value !== value ) {
+                               return;
+                       }
+
+                       // If a number was passed in, add the unit (except for certain CSS properties)
+                       if ( type === "number" ) {
+                               value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" );
+                       }
+
+                       // background-* props affect original clone's values
+                       if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) {
+                               style[ name ] = "inherit";
+                       }
+
+                       // If a hook was provided, use that value, otherwise just set the specified value
+                       if ( !hooks || !( "set" in hooks ) ||
+                               ( value = hooks.set( elem, value, extra ) ) !== undefined ) {
+
+                               if ( isCustomProp ) {
+                                       style.setProperty( name, value );
+                               } else {
+                                       style[ name ] = value;
+                               }
+                       }
+
+               } else {
+
+                       // If a hook was provided get the non-computed value from there
+                       if ( hooks && "get" in hooks &&
+                               ( ret = hooks.get( elem, false, extra ) ) !== undefined ) {
+
+                               return ret;
+                       }
+
+                       // Otherwise just get the value from the style object
+                       return style[ name ];
+               }
+       },
+
+       css: function( elem, name, extra, styles ) {
+               var val, num, hooks,
+                       origName = jQuery.camelCase( name ),
+                       isCustomProp = rcustomProp.test( name );
+
+               // Make sure that we're working with the right name. We don't
+               // want to modify the value if it is a CSS custom property
+               // since they are user-defined.
+               if ( !isCustomProp ) {
+                       name = finalPropName( origName );
+               }
+
+               // Try prefixed name followed by the unprefixed name
+               hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
+
+               // If a hook was provided get the computed value from there
+               if ( hooks && "get" in hooks ) {
+                       val = hooks.get( elem, true, extra );
+               }
+
+               // Otherwise, if a way to get the computed value exists, use that
+               if ( val === undefined ) {
+                       val = curCSS( elem, name, styles );
+               }
+
+               // Convert "normal" to computed value
+               if ( val === "normal" && name in cssNormalTransform ) {
+                       val = cssNormalTransform[ name ];
+               }
+
+               // Make numeric if forced or a qualifier was provided and val looks numeric
+               if ( extra === "" || extra ) {
+                       num = parseFloat( val );
+                       return extra === true || isFinite( num ) ? num || 0 : val;
+               }
+
+               return val;
+       }
+} );
+
+jQuery.each( [ "height", "width" ], function( i, name ) {
+       jQuery.cssHooks[ name ] = {
+               get: function( elem, computed, extra ) {
+                       if ( computed ) {
+
+                               // Certain elements can have dimension info if we invisibly show them
+                               // but it must have a current display style that would benefit
+                               return rdisplayswap.test( jQuery.css( elem, "display" ) ) &&
+
+                                       // Support: Safari 8+
+                                       // Table columns in Safari have non-zero offsetWidth & zero
+                                       // getBoundingClientRect().width unless display is changed.
+                                       // Support: IE <=11 only
+                                       // Running getBoundingClientRect on a disconnected node
+                                       // in IE throws an error.
+                                       ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?
+                                               swap( elem, cssShow, function() {
+                                                       return getWidthOrHeight( elem, name, extra );
+                                               } ) :
+                                               getWidthOrHeight( elem, name, extra );
+                       }
+               },
+
+               set: function( elem, value, extra ) {
+                       var matches,
+                               styles = extra && getStyles( elem ),
+                               subtract = extra && augmentWidthOrHeight(
+                                       elem,
+                                       name,
+                                       extra,
+                                       jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
+                                       styles
+                               );
+
+                       // Convert to pixels if value adjustment is needed
+                       if ( subtract && ( matches = rcssNum.exec( value ) ) &&
+                               ( matches[ 3 ] || "px" ) !== "px" ) {
+
+                               elem.style[ name ] = value;
+                               value = jQuery.css( elem, name );
+                       }
+
+                       return setPositiveNumber( elem, value, subtract );
+               }
+       };
+} );
+
+jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,
+       function( elem, computed ) {
+               if ( computed ) {
+                       return ( parseFloat( curCSS( elem, "marginLeft" ) ) ||
+                               elem.getBoundingClientRect().left -
+                                       swap( elem, { marginLeft: 0 }, function() {
+                                               return elem.getBoundingClientRect().left;
+                                       } )
+                               ) + "px";
+               }
+       }
+);
+
+// These hooks are used by animate to expand properties
+jQuery.each( {
+       margin: "",
+       padding: "",
+       border: "Width"
+}, function( prefix, suffix ) {
+       jQuery.cssHooks[ prefix + suffix ] = {
+               expand: function( value ) {
+                       var i = 0,
+                               expanded = {},
+
+                               // Assumes a single number if not a string
+                               parts = typeof value === "string" ? value.split( " " ) : [ value ];
+
+                       for ( ; i < 4; i++ ) {
+                               expanded[ prefix + cssExpand[ i ] + suffix ] =
+                                       parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
+                       }
+
+                       return expanded;
+               }
+       };
+
+       if ( !rmargin.test( prefix ) ) {
+               jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
+       }
+} );
+
+jQuery.fn.extend( {
+       css: function( name, value ) {
+               return access( this, function( elem, name, value ) {
+                       var styles, len,
+                               map = {},
+                               i = 0;
+
+                       if ( Array.isArray( name ) ) {
+                               styles = getStyles( elem );
+                               len = name.length;
+
+                               for ( ; i < len; i++ ) {
+                                       map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
+                               }
+
+                               return map;
+                       }
+
+                       return value !== undefined ?
+                               jQuery.style( elem, name, value ) :
+                               jQuery.css( elem, name );
+               }, name, value, arguments.length > 1 );
+       }
+} );
+
+
+function Tween( elem, options, prop, end, easing ) {
+       return new Tween.prototype.init( elem, options, prop, end, easing );
+}
+jQuery.Tween = Tween;
+
+Tween.prototype = {
+       constructor: Tween,
+       init: function( elem, options, prop, end, easing, unit ) {
+               this.elem = elem;
+               this.prop = prop;
+               this.easing = easing || jQuery.easing._default;
+               this.options = options;
+               this.start = this.now = this.cur();
+               this.end = end;
+               this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
+       },
+       cur: function() {
+               var hooks = Tween.propHooks[ this.prop ];
+
+               return hooks && hooks.get ?
+                       hooks.get( this ) :
+                       Tween.propHooks._default.get( this );
+       },
+       run: function( percent ) {
+               var eased,
+                       hooks = Tween.propHooks[ this.prop ];
+
+               if ( this.options.duration ) {
+                       this.pos = eased = jQuery.easing[ this.easing ](
+                               percent, this.options.duration * percent, 0, 1, this.options.duration
+                       );
+               } else {
+                       this.pos = eased = percent;
+               }
+               this.now = ( this.end - this.start ) * eased + this.start;
+
+               if ( this.options.step ) {
+                       this.options.step.call( this.elem, this.now, this );
+               }
+
+               if ( hooks && hooks.set ) {
+                       hooks.set( this );
+               } else {
+                       Tween.propHooks._default.set( this );
+               }
+               return this;
+       }
+};
+
+Tween.prototype.init.prototype = Tween.prototype;
+
+Tween.propHooks = {
+       _default: {
+               get: function( tween ) {
+                       var result;
+
+                       // Use a property on the element directly when it is not a DOM element,
+                       // or when there is no matching style property that exists.
+                       if ( tween.elem.nodeType !== 1 ||
+                               tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {
+                               return tween.elem[ tween.prop ];
+                       }
+
+                       // Passing an empty string as a 3rd parameter to .css will automatically
+                       // attempt a parseFloat and fallback to a string if the parse fails.
+                       // Simple values such as "10px" are parsed to Float;
+                       // complex values such as "rotate(1rad)" are returned as-is.
+                       result = jQuery.css( tween.elem, tween.prop, "" );
+
+                       // Empty strings, null, undefined and "auto" are converted to 0.
+                       return !result || result === "auto" ? 0 : result;
+               },
+               set: function( tween ) {
+
+                       // Use step hook for back compat.
+                       // Use cssHook if its there.
+                       // Use .style if available and use plain properties where available.
+                       if ( jQuery.fx.step[ tween.prop ] ) {
+                               jQuery.fx.step[ tween.prop ]( tween );
+                       } else if ( tween.elem.nodeType === 1 &&
+                               ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null ||
+                                       jQuery.cssHooks[ tween.prop ] ) ) {
+                               jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
+                       } else {
+                               tween.elem[ tween.prop ] = tween.now;
+                       }
+               }
+       }
+};
+
+// Support: IE <=9 only
+// Panic based approach to setting things on disconnected nodes
+Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
+       set: function( tween ) {
+               if ( tween.elem.nodeType && tween.elem.parentNode ) {
+                       tween.elem[ tween.prop ] = tween.now;
+               }
+       }
+};
+
+jQuery.easing = {
+       linear: function( p ) {
+               return p;
+       },
+       swing: function( p ) {
+               return 0.5 - Math.cos( p * Math.PI ) / 2;
+       },
+       _default: "swing"
+};
+
+jQuery.fx = Tween.prototype.init;
+
+// Back compat <1.8 extension point
+jQuery.fx.step = {};
+
+
+
+
+var
+       fxNow, inProgress,
+       rfxtypes = /^(?:toggle|show|hide)$/,
+       rrun = /queueHooks$/;
+
+function schedule() {
+       if ( inProgress ) {
+               if ( document.hidden === false && window.requestAnimationFrame ) {
+                       window.requestAnimationFrame( schedule );
+               } else {
+                       window.setTimeout( schedule, jQuery.fx.interval );
+               }
+
+               jQuery.fx.tick();
+       }
+}
+
+// Animations created synchronously will run synchronously
+function createFxNow() {
+       window.setTimeout( function() {
+               fxNow = undefined;
+       } );
+       return ( fxNow = jQuery.now() );
+}
+
+// Generate parameters to create a standard animation
+function genFx( type, includeWidth ) {
+       var which,
+               i = 0,
+               attrs = { height: type };
+
+       // If we include width, step value is 1 to do all cssExpand values,
+       // otherwise step value is 2 to skip over Left and Right
+       includeWidth = includeWidth ? 1 : 0;
+       for ( ; i < 4; i += 2 - includeWidth ) {
+               which = cssExpand[ i ];
+               attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
+       }
+
+       if ( includeWidth ) {
+               attrs.opacity = attrs.width = type;
+       }
+
+       return attrs;
+}
+
+function createTween( value, prop, animation ) {
+       var tween,
+               collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ),
+               index = 0,
+               length = collection.length;
+       for ( ; index < length; index++ ) {
+               if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {
+
+                       // We're done with this property
+                       return tween;
+               }
+       }
+}
+
+function defaultPrefilter( elem, props, opts ) {
+       var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,
+               isBox = "width" in props || "height" in props,
+               anim = this,
+               orig = {},
+               style = elem.style,
+               hidden = elem.nodeType && isHiddenWithinTree( elem ),
+               dataShow = dataPriv.get( elem, "fxshow" );
+
+       // Queue-skipping animations hijack the fx hooks
+       if ( !opts.queue ) {
+               hooks = jQuery._queueHooks( elem, "fx" );
+               if ( hooks.unqueued == null ) {
+                       hooks.unqueued = 0;
+                       oldfire = hooks.empty.fire;
+                       hooks.empty.fire = function() {
+                               if ( !hooks.unqueued ) {
+                                       oldfire();
+                               }
+                       };
+               }
+               hooks.unqueued++;
+
+               anim.always( function() {
+
+                       // Ensure the complete handler is called before this completes
+                       anim.always( function() {
+                               hooks.unqueued--;
+                               if ( !jQuery.queue( elem, "fx" ).length ) {
+                                       hooks.empty.fire();
+                               }
+                       } );
+               } );
+       }
+
+       // Detect show/hide animations
+       for ( prop in props ) {
+               value = props[ prop ];
+               if ( rfxtypes.test( value ) ) {
+                       delete props[ prop ];
+                       toggle = toggle || value === "toggle";
+                       if ( value === ( hidden ? "hide" : "show" ) ) {
+
+                               // Pretend to be hidden if this is a "show" and
+                               // there is still data from a stopped show/hide
+                               if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) {
+                                       hidden = true;
+
+                               // Ignore all other no-op show/hide data
+                               } else {
+                                       continue;
+                               }
+                       }
+                       orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );
+               }
+       }
+
+       // Bail out if this is a no-op like .hide().hide()
+       propTween = !jQuery.isEmptyObject( props );
+       if ( !propTween && jQuery.isEmptyObject( orig ) ) {
+               return;
+       }
+
+       // Restrict "overflow" and "display" styles during box animations
+       if ( isBox && elem.nodeType === 1 ) {
+
+               // Support: IE <=9 - 11, Edge 12 - 13
+               // Record all 3 overflow attributes because IE does not infer the shorthand
+               // from identically-valued overflowX and overflowY
+               opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
+
+               // Identify a display type, preferring old show/hide data over the CSS cascade
+               restoreDisplay = dataShow && dataShow.display;
+               if ( restoreDisplay == null ) {
+                       restoreDisplay = dataPriv.get( elem, "display" );
+               }
+               display = jQuery.css( elem, "display" );
+               if ( display === "none" ) {
+                       if ( restoreDisplay ) {
+                               display = restoreDisplay;
+                       } else {
+
+                               // Get nonempty value(s) by temporarily forcing visibility
+                               showHide( [ elem ], true );
+                               restoreDisplay = elem.style.display || restoreDisplay;
+                               display = jQuery.css( elem, "display" );
+                               showHide( [ elem ] );
+                       }
+               }
+
+               // Animate inline elements as inline-block
+               if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) {
+                       if ( jQuery.css( elem, "float" ) === "none" ) {
+
+                               // Restore the original display value at the end of pure show/hide animations
+                               if ( !propTween ) {
+                                       anim.done( function() {
+                                               style.display = restoreDisplay;
+                                       } );
+                                       if ( restoreDisplay == null ) {
+                                               display = style.display;
+                                               restoreDisplay = display === "none" ? "" : display;
+                                       }
+                               }
+                               style.display = "inline-block";
+                       }
+               }
+       }
+
+       if ( opts.overflow ) {
+               style.overflow = "hidden";
+               anim.always( function() {
+                       style.overflow = opts.overflow[ 0 ];
+                       style.overflowX = opts.overflow[ 1 ];
+                       style.overflowY = opts.overflow[ 2 ];
+               } );
+       }
+
+       // Implement show/hide animations
+       propTween = false;
+       for ( prop in orig ) {
+
+               // General show/hide setup for this element animation
+               if ( !propTween ) {
+                       if ( dataShow ) {
+                               if ( "hidden" in dataShow ) {
+                                       hidden = dataShow.hidden;
+                               }
+                       } else {
+                               dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } );
+                       }
+
+                       // Store hidden/visible for toggle so `.stop().toggle()` "reverses"
+                       if ( toggle ) {
+                               dataShow.hidden = !hidden;
+                       }
+
+                       // Show elements before animating them
+                       if ( hidden ) {
+                               showHide( [ elem ], true );
+                       }
+
+                       /* eslint-disable no-loop-func */
+
+                       anim.done( function() {
+
+                       /* eslint-enable no-loop-func */
+
+                               // The final step of a "hide" animation is actually hiding the element
+                               if ( !hidden ) {
+                                       showHide( [ elem ] );
+                               }
+                               dataPriv.remove( elem, "fxshow" );
+                               for ( prop in orig ) {
+                                       jQuery.style( elem, prop, orig[ prop ] );
+                               }
+                       } );
+               }
+
+               // Per-property setup
+               propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );
+               if ( !( prop in dataShow ) ) {
+                       dataShow[ prop ] = propTween.start;
+                       if ( hidden ) {
+                               propTween.end = propTween.start;
+                               propTween.start = 0;
+                       }
+               }
+       }
+}
+
+function propFilter( props, specialEasing ) {
+       var index, name, easing, value, hooks;
+
+       // camelCase, specialEasing and expand cssHook pass
+       for ( index in props ) {
+               name = jQuery.camelCase( index );
+               easing = specialEasing[ name ];
+               value = props[ index ];
+               if ( Array.isArray( value ) ) {
+                       easing = value[ 1 ];
+                       value = props[ index ] = value[ 0 ];
+               }
+
+               if ( index !== name ) {
+                       props[ name ] = value;
+                       delete props[ index ];
+               }
+
+               hooks = jQuery.cssHooks[ name ];
+               if ( hooks && "expand" in hooks ) {
+                       value = hooks.expand( value );
+                       delete props[ name ];
+
+                       // Not quite $.extend, this won't overwrite existing keys.
+                       // Reusing 'index' because we have the correct "name"
+                       for ( index in value ) {
+                               if ( !( index in props ) ) {
+                                       props[ index ] = value[ index ];
+                                       specialEasing[ index ] = easing;
+                               }
+                       }
+               } else {
+                       specialEasing[ name ] = easing;
+               }
+       }
+}
+
+function Animation( elem, properties, options ) {
+       var result,
+               stopped,
+               index = 0,
+               length = Animation.prefilters.length,
+               deferred = jQuery.Deferred().always( function() {
+
+                       // Don't match elem in the :animated selector
+                       delete tick.elem;
+               } ),
+               tick = function() {
+                       if ( stopped ) {
+                               return false;
+                       }
+                       var currentTime = fxNow || createFxNow(),
+                               remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
+
+                               // Support: Android 2.3 only
+                               // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)
+                               temp = remaining / animation.duration || 0,
+                               percent = 1 - temp,
+                               index = 0,
+                               length = animation.tweens.length;
+
+                       for ( ; index < length; index++ ) {
+                               animation.tweens[ index ].run( percent );
+                       }
+
+                       deferred.notifyWith( elem, [ animation, percent, remaining ] );
+
+                       // If there's more to do, yield
+                       if ( percent < 1 && length ) {
+                               return remaining;
+                       }
+
+                       // If this was an empty animation, synthesize a final progress notification
+                       if ( !length ) {
+                               deferred.notifyWith( elem, [ animation, 1, 0 ] );
+                       }
+
+                       // Resolve the animation and report its conclusion
+                       deferred.resolveWith( elem, [ animation ] );
+                       return false;
+               },
+               animation = deferred.promise( {
+                       elem: elem,
+                       props: jQuery.extend( {}, properties ),
+                       opts: jQuery.extend( true, {
+                               specialEasing: {},
+                               easing: jQuery.easing._default
+                       }, options ),
+                       originalProperties: properties,
+                       originalOptions: options,
+                       startTime: fxNow || createFxNow(),
+                       duration: options.duration,
+                       tweens: [],
+                       createTween: function( prop, end ) {
+                               var tween = jQuery.Tween( elem, animation.opts, prop, end,
+                                               animation.opts.specialEasing[ prop ] || animation.opts.easing );
+                               animation.tweens.push( tween );
+                               return tween;
+                       },
+                       stop: function( gotoEnd ) {
+                               var index = 0,
+
+                                       // If we are going to the end, we want to run all the tweens
+                                       // otherwise we skip this part
+                                       length = gotoEnd ? animation.tweens.length : 0;
+                               if ( stopped ) {
+                                       return this;
+                               }
+                               stopped = true;
+                               for ( ; index < length; index++ ) {
+                                       animation.tweens[ index ].run( 1 );
+                               }
+
+                               // Resolve when we played the last frame; otherwise, reject
+                               if ( gotoEnd ) {
+                                       deferred.notifyWith( elem, [ animation, 1, 0 ] );
+                                       deferred.resolveWith( elem, [ animation, gotoEnd ] );
+                               } else {
+                                       deferred.rejectWith( elem, [ animation, gotoEnd ] );
+                               }
+                               return this;
+                       }
+               } ),
+               props = animation.props;
+
+       propFilter( props, animation.opts.specialEasing );
+
+       for ( ; index < length; index++ ) {
+               result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );
+               if ( result ) {
+                       if ( jQuery.isFunction( result.stop ) ) {
+                               jQuery._queueHooks( animation.elem, animation.opts.queue ).stop =
+                                       jQuery.proxy( result.stop, result );
+                       }
+                       return result;
+               }
+       }
+
+       jQuery.map( props, createTween, animation );
+
+       if ( jQuery.isFunction( animation.opts.start ) ) {
+               animation.opts.start.call( elem, animation );
+       }
+
+       // Attach callbacks from options
+       animation
+               .progress( animation.opts.progress )
+               .done( animation.opts.done, animation.opts.complete )
+               .fail( animation.opts.fail )
+               .always( animation.opts.always );
+
+       jQuery.fx.timer(
+               jQuery.extend( tick, {
+                       elem: elem,
+                       anim: animation,
+                       queue: animation.opts.queue
+               } )
+       );
+
+       return animation;
+}
+
+jQuery.Animation = jQuery.extend( Animation, {
+
+       tweeners: {
+               "*": [ function( prop, value ) {
+                       var tween = this.createTween( prop, value );
+                       adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );
+                       return tween;
+               } ]
+       },
+
+       tweener: function( props, callback ) {
+               if ( jQuery.isFunction( props ) ) {
+                       callback = props;
+                       props = [ "*" ];
+               } else {
+                       props = props.match( rnothtmlwhite );
+               }
+
+               var prop,
+                       index = 0,
+                       length = props.length;
+
+               for ( ; index < length; index++ ) {
+                       prop = props[ index ];
+                       Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];
+                       Animation.tweeners[ prop ].unshift( callback );
+               }
+       },
+
+       prefilters: [ defaultPrefilter ],
+
+       prefilter: function( callback, prepend ) {
+               if ( prepend ) {
+                       Animation.prefilters.unshift( callback );
+               } else {
+                       Animation.prefilters.push( callback );
+               }
+       }
+} );
+
+jQuery.speed = function( speed, easing, fn ) {
+       var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
+               complete: fn || !fn && easing ||
+                       jQuery.isFunction( speed ) && speed,
+               duration: speed,
+               easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
+       };
+
+       // Go to the end state if fx are off
+       if ( jQuery.fx.off ) {
+               opt.duration = 0;
+
+       } else {
+               if ( typeof opt.duration !== "number" ) {
+                       if ( opt.duration in jQuery.fx.speeds ) {
+                               opt.duration = jQuery.fx.speeds[ opt.duration ];
+
+                       } else {
+                               opt.duration = jQuery.fx.speeds._default;
+                       }
+               }
+       }
+
+       // Normalize opt.queue - true/undefined/null -> "fx"
+       if ( opt.queue == null || opt.queue === true ) {
+               opt.queue = "fx";
+       }
+
+       // Queueing
+       opt.old = opt.complete;
+
+       opt.complete = function() {
+               if ( jQuery.isFunction( opt.old ) ) {
+                       opt.old.call( this );
+               }
+
+               if ( opt.queue ) {
+                       jQuery.dequeue( this, opt.queue );
+               }
+       };
+
+       return opt;
+};
+
+jQuery.fn.extend( {
+       fadeTo: function( speed, to, easing, callback ) {
+
+               // Show any hidden elements after setting opacity to 0
+               return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show()
+
+                       // Animate to the value specified
+                       .end().animate( { opacity: to }, speed, easing, callback );
+       },
+       animate: function( prop, speed, easing, callback ) {
+               var empty = jQuery.isEmptyObject( prop ),
+                       optall = jQuery.speed( speed, easing, callback ),
+                       doAnimation = function() {
+
+                               // Operate on a copy of prop so per-property easing won't be lost
+                               var anim = Animation( this, jQuery.extend( {}, prop ), optall );
+
+                               // Empty animations, or finishing resolves immediately
+                               if ( empty || dataPriv.get( this, "finish" ) ) {
+                                       anim.stop( true );
+                               }
+                       };
+                       doAnimation.finish = doAnimation;
+
+               return empty || optall.queue === false ?
+                       this.each( doAnimation ) :
+                       this.queue( optall.queue, doAnimation );
+       },
+       stop: function( type, clearQueue, gotoEnd ) {
+               var stopQueue = function( hooks ) {
+                       var stop = hooks.stop;
+                       delete hooks.stop;
+                       stop( gotoEnd );
+               };
+
+               if ( typeof type !== "string" ) {
+                       gotoEnd = clearQueue;
+                       clearQueue = type;
+                       type = undefined;
+               }
+               if ( clearQueue && type !== false ) {
+                       this.queue( type || "fx", [] );
+               }
+
+               return this.each( function() {
+                       var dequeue = true,
+                               index = type != null && type + "queueHooks",
+                               timers = jQuery.timers,
+                               data = dataPriv.get( this );
+
+                       if ( index ) {
+                               if ( data[ index ] && data[ index ].stop ) {
+                                       stopQueue( data[ index ] );
+                               }
+                       } else {
+                               for ( index in data ) {
+                                       if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
+                                               stopQueue( data[ index ] );
+                                       }
+                               }
+                       }
+
+                       for ( index = timers.length; index--; ) {
+                               if ( timers[ index ].elem === this &&
+                                       ( type == null || timers[ index ].queue === type ) ) {
+
+                                       timers[ index ].anim.stop( gotoEnd );
+                                       dequeue = false;
+                                       timers.splice( index, 1 );
+                               }
+                       }
+
+                       // Start the next in the queue if the last step wasn't forced.
+                       // Timers currently will call their complete callbacks, which
+                       // will dequeue but only if they were gotoEnd.
+                       if ( dequeue || !gotoEnd ) {
+                               jQuery.dequeue( this, type );
+                       }
+               } );
+       },
+       finish: function( type ) {
+               if ( type !== false ) {
+                       type = type || "fx";
+               }
+               return this.each( function() {
+                       var index,
+                               data = dataPriv.get( this ),
+                               queue = data[ type + "queue" ],
+                               hooks = data[ type + "queueHooks" ],
+                               timers = jQuery.timers,
+                               length = queue ? queue.length : 0;
+
+                       // Enable finishing flag on private data
+                       data.finish = true;
+
+                       // Empty the queue first
+                       jQuery.queue( this, type, [] );
+
+                       if ( hooks && hooks.stop ) {
+                               hooks.stop.call( this, true );
+                       }
+
+                       // Look for any active animations, and finish them
+                       for ( index = timers.length; index--; ) {
+                               if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
+                                       timers[ index ].anim.stop( true );
+                                       timers.splice( index, 1 );
+                               }
+                       }
+
+                       // Look for any animations in the old queue and finish them
+                       for ( index = 0; index < length; index++ ) {
+                               if ( queue[ index ] && queue[ index ].finish ) {
+                                       queue[ index ].finish.call( this );
+                               }
+                       }
+
+                       // Turn off finishing flag
+                       delete data.finish;
+               } );
+       }
+} );
+
+jQuery.each( [ "toggle", "show", "hide" ], function( i, name ) {
+       var cssFn = jQuery.fn[ name ];
+       jQuery.fn[ name ] = function( speed, easing, callback ) {
+               return speed == null || typeof speed === "boolean" ?
+                       cssFn.apply( this, arguments ) :
+                       this.animate( genFx( name, true ), speed, easing, callback );
+       };
+} );
+
+// Generate shortcuts for custom animations
+jQuery.each( {
+       slideDown: genFx( "show" ),
+       slideUp: genFx( "hide" ),
+       slideToggle: genFx( "toggle" ),
+       fadeIn: { opacity: "show" },
+       fadeOut: { opacity: "hide" },
+       fadeToggle: { opacity: "toggle" }
+}, function( name, props ) {
+       jQuery.fn[ name ] = function( speed, easing, callback ) {
+               return this.animate( props, speed, easing, callback );
+       };
+} );
+
+jQuery.timers = [];
+jQuery.fx.tick = function() {
+       var timer,
+               i = 0,
+               timers = jQuery.timers;
+
+       fxNow = jQuery.now();
+
+       for ( ; i < timers.length; i++ ) {
+               timer = timers[ i ];
+
+               // Run the timer and safely remove it when done (allowing for external removal)
+               if ( !timer() && timers[ i ] === timer ) {
+                       timers.splice( i--, 1 );
+               }
+       }
+
+       if ( !timers.length ) {
+               jQuery.fx.stop();
+       }
+       fxNow = undefined;
+};
+
+jQuery.fx.timer = function( timer ) {
+       jQuery.timers.push( timer );
+       jQuery.fx.start();
+};
+
+jQuery.fx.interval = 13;
+jQuery.fx.start = function() {
+       if ( inProgress ) {
+               return;
+       }
+
+       inProgress = true;
+       schedule();
+};
+
+jQuery.fx.stop = function() {
+       inProgress = null;
+};
+
+jQuery.fx.speeds = {
+       slow: 600,
+       fast: 200,
+
+       // Default speed
+       _default: 400
+};
+
+
+// Based off of the plugin by Clint Helfers, with permission.
+// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/
+jQuery.fn.delay = function( time, type ) {
+       time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
+       type = type || "fx";
+
+       return this.queue( type, function( next, hooks ) {
+               var timeout = window.setTimeout( next, time );
+               hooks.stop = function() {
+                       window.clearTimeout( timeout );
+               };
+       } );
+};
+
+
+( function() {
+       var input = document.createElement( "input" ),
+               select = document.createElement( "select" ),
+               opt = select.appendChild( document.createElement( "option" ) );
+
+       input.type = "checkbox";
+
+       // Support: Android <=4.3 only
+       // Default value for a checkbox should be "on"
+       support.checkOn = input.value !== "";
+
+       // Support: IE <=11 only
+       // Must access selectedIndex to make default options select
+       support.optSelected = opt.selected;
+
+       // Support: IE <=11 only
+       // An input loses its value after becoming a radio
+       input = document.createElement( "input" );
+       input.value = "t";
+       input.type = "radio";
+       support.radioValue = input.value === "t";
+} )();
+
+
+var boolHook,
+       attrHandle = jQuery.expr.attrHandle;
+
+jQuery.fn.extend( {
+       attr: function( name, value ) {
+               return access( this, jQuery.attr, name, value, arguments.length > 1 );
+       },
+
+       removeAttr: function( name ) {
+               return this.each( function() {
+                       jQuery.removeAttr( this, name );
+               } );
+       }
+} );
+
+jQuery.extend( {
+       attr: function( elem, name, value ) {
+               var ret, hooks,
+                       nType = elem.nodeType;
+
+               // Don't get/set attributes on text, comment and attribute nodes
+               if ( nType === 3 || nType === 8 || nType === 2 ) {
+                       return;
+               }
+
+               // Fallback to prop when attributes are not supported
+               if ( typeof elem.getAttribute === "undefined" ) {
+                       return jQuery.prop( elem, name, value );
+               }
+
+               // Attribute hooks are determined by the lowercase version
+               // Grab necessary hook if one is defined
+               if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
+                       hooks = jQuery.attrHooks[ name.toLowerCase() ] ||
+                               ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );
+               }
+
+               if ( value !== undefined ) {
+                       if ( value === null ) {
+                               jQuery.removeAttr( elem, name );
+                               return;
+                       }
+
+                       if ( hooks && "set" in hooks &&
+                               ( ret = hooks.set( elem, value, name ) ) !== undefined ) {
+                               return ret;
+                       }
+
+                       elem.setAttribute( name, value + "" );
+                       return value;
+               }
+
+               if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
+                       return ret;
+               }
+
+               ret = jQuery.find.attr( elem, name );
+
+               // Non-existent attributes return null, we normalize to undefined
+               return ret == null ? undefined : ret;
+       },
+
+       attrHooks: {
+               type: {
+                       set: function( elem, value ) {
+                               if ( !support.radioValue && value === "radio" &&
+                                       nodeName( elem, "input" ) ) {
+                                       var val = elem.value;
+                                       elem.setAttribute( "type", value );
+                                       if ( val ) {
+                                               elem.value = val;
+                                       }
+                                       return value;
+                               }
+                       }
+               }
+       },
+
+       removeAttr: function( elem, value ) {
+               var name,
+                       i = 0,
+
+                       // Attribute names can contain non-HTML whitespace characters
+                       // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2
+                       attrNames = value && value.match( rnothtmlwhite );
+
+               if ( attrNames && elem.nodeType === 1 ) {
+                       while ( ( name = attrNames[ i++ ] ) ) {
+                               elem.removeAttribute( name );
+                       }
+               }
+       }
+} );
+
+// Hooks for boolean attributes
+boolHook = {
+       set: function( elem, value, name ) {
+               if ( value === false ) {
+
+                       // Remove boolean attributes when set to false
+                       jQuery.removeAttr( elem, name );
+               } else {
+                       elem.setAttribute( name, name );
+               }
+               return name;
+       }
+};
+
+jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) {
+       var getter = attrHandle[ name ] || jQuery.find.attr;
+
+       attrHandle[ name ] = function( elem, name, isXML ) {
+               var ret, handle,
+                       lowercaseName = name.toLowerCase();
+
+               if ( !isXML ) {
+
+                       // Avoid an infinite loop by temporarily removing this function from the getter
+                       handle = attrHandle[ lowercaseName ];
+                       attrHandle[ lowercaseName ] = ret;
+                       ret = getter( elem, name, isXML ) != null ?
+                               lowercaseName :
+                               null;
+                       attrHandle[ lowercaseName ] = handle;
+               }
+               return ret;
+       };
+} );
+
+
+
+
+var rfocusable = /^(?:input|select|textarea|button)$/i,
+       rclickable = /^(?:a|area)$/i;
+
+jQuery.fn.extend( {
+       prop: function( name, value ) {
+               return access( this, jQuery.prop, name, value, arguments.length > 1 );
+       },
+
+       removeProp: function( name ) {
+               return this.each( function() {
+                       delete this[ jQuery.propFix[ name ] || name ];
+               } );
+       }
+} );
+
+jQuery.extend( {
+       prop: function( elem, name, value ) {
+               var ret, hooks,
+                       nType = elem.nodeType;
+
+               // Don't get/set properties on text, comment and attribute nodes
+               if ( nType === 3 || nType === 8 || nType === 2 ) {
+                       return;
+               }
+
+               if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
+
+                       // Fix name and attach hooks
+                       name = jQuery.propFix[ name ] || name;
+                       hooks = jQuery.propHooks[ name ];
+               }
+
+               if ( value !== undefined ) {
+                       if ( hooks && "set" in hooks &&
+                               ( ret = hooks.set( elem, value, name ) ) !== undefined ) {
+                               return ret;
+                       }
+
+                       return ( elem[ name ] = value );
+               }
+
+               if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
+                       return ret;
+               }
+
+               return elem[ name ];
+       },
+
+       propHooks: {
+               tabIndex: {
+                       get: function( elem ) {
+
+                               // Support: IE <=9 - 11 only
+                               // elem.tabIndex doesn't always return the
+                               // correct value when it hasn't been explicitly set
+                               // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
+                               // Use proper attribute retrieval(#12072)
+                               var tabindex = jQuery.find.attr( elem, "tabindex" );
+
+                               if ( tabindex ) {
+                                       return parseInt( tabindex, 10 );
+                               }
+
+                               if (
+                                       rfocusable.test( elem.nodeName ) ||
+                                       rclickable.test( elem.nodeName ) &&
+                                       elem.href
+                               ) {
+                                       return 0;
+                               }
+
+                               return -1;
+                       }
+               }
+       },
+
+       propFix: {
+               "for": "htmlFor",
+               "class": "className"
+       }
+} );
+
+// Support: IE <=11 only
+// Accessing the selectedIndex property
+// forces the browser to respect setting selected
+// on the option
+// The getter ensures a default option is selected
+// when in an optgroup
+// eslint rule "no-unused-expressions" is disabled for this code
+// since it considers such accessions noop
+if ( !support.optSelected ) {
+       jQuery.propHooks.selected = {
+               get: function( elem ) {
+
+                       /* eslint no-unused-expressions: "off" */
+
+                       var parent = elem.parentNode;
+                       if ( parent && parent.parentNode ) {
+                               parent.parentNode.selectedIndex;
+                       }
+                       return null;
+               },
+               set: function( elem ) {
+
+                       /* eslint no-unused-expressions: "off" */
+
+                       var parent = elem.parentNode;
+                       if ( parent ) {
+                               parent.selectedIndex;
+
+                               if ( parent.parentNode ) {
+                                       parent.parentNode.selectedIndex;
+                               }
+                       }
+               }
+       };
+}
+
+jQuery.each( [
+       "tabIndex",
+       "readOnly",
+       "maxLength",
+       "cellSpacing",
+       "cellPadding",
+       "rowSpan",
+       "colSpan",
+       "useMap",
+       "frameBorder",
+       "contentEditable"
+], function() {
+       jQuery.propFix[ this.toLowerCase() ] = this;
+} );
+
+
+
+
+       // Strip and collapse whitespace according to HTML spec
+       // https://html.spec.whatwg.org/multipage/infrastructure.html#strip-and-collapse-whitespace
+       function stripAndCollapse( value ) {
+               var tokens = value.match( rnothtmlwhite ) || [];
+               return tokens.join( " " );
+       }
+
+
+function getClass( elem ) {
+       return elem.getAttribute && elem.getAttribute( "class" ) || "";
+}
+
+jQuery.fn.extend( {
+       addClass: function( value ) {
+               var classes, elem, cur, curValue, clazz, j, finalValue,
+                       i = 0;
+
+               if ( jQuery.isFunction( value ) ) {
+                       return this.each( function( j ) {
+                               jQuery( this ).addClass( value.call( this, j, getClass( this ) ) );
+                       } );
+               }
+
+               if ( typeof value === "string" && value ) {
+                       classes = value.match( rnothtmlwhite ) || [];
+
+                       while ( ( elem = this[ i++ ] ) ) {
+                               curValue = getClass( elem );
+                               cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
+
+                               if ( cur ) {
+                                       j = 0;
+                                       while ( ( clazz = classes[ j++ ] ) ) {
+                                               if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
+                                                       cur += clazz + " ";
+                                               }
+                                       }
+
+                                       // Only assign if different to avoid unneeded rendering.
+                                       finalValue = stripAndCollapse( cur );
+                                       if ( curValue !== finalValue ) {
+                                               elem.setAttribute( "class", finalValue );
+                                       }
+                               }
+                       }
+               }
+
+               return this;
+       },
+
+       removeClass: function( value ) {
+               var classes, elem, cur, curValue, clazz, j, finalValue,
+                       i = 0;
+
+               if ( jQuery.isFunction( value ) ) {
+                       return this.each( function( j ) {
+                               jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );
+                       } );
+               }
+
+               if ( !arguments.length ) {
+                       return this.attr( "class", "" );
+               }
+
+               if ( typeof value === "string" && value ) {
+                       classes = value.match( rnothtmlwhite ) || [];
+
+                       while ( ( elem = this[ i++ ] ) ) {
+                               curValue = getClass( elem );
+
+                               // This expression is here for better compressibility (see addClass)
+                               cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
+
+                               if ( cur ) {
+                                       j = 0;
+                                       while ( ( clazz = classes[ j++ ] ) ) {
+
+                                               // Remove *all* instances
+                                               while ( cur.indexOf( " " + clazz + " " ) > -1 ) {
+                                                       cur = cur.replace( " " + clazz + " ", " " );
+                                               }
+                                       }
+
+                                       // Only assign if different to avoid unneeded rendering.
+                                       finalValue = stripAndCollapse( cur );
+                                       if ( curValue !== finalValue ) {
+                                               elem.setAttribute( "class", finalValue );
+                                       }
+                               }
+                       }
+               }
+
+               return this;
+       },
+
+       toggleClass: function( value, stateVal ) {
+               var type = typeof value;
+
+               if ( typeof stateVal === "boolean" && type === "string" ) {
+                       return stateVal ? this.addClass( value ) : this.removeClass( value );
+               }
+
+               if ( jQuery.isFunction( value ) ) {
+                       return this.each( function( i ) {
+                               jQuery( this ).toggleClass(
+                                       value.call( this, i, getClass( this ), stateVal ),
+                                       stateVal
+                               );
+                       } );
+               }
+
+               return this.each( function() {
+                       var className, i, self, classNames;
+
+                       if ( type === "string" ) {
+
+                               // Toggle individual class names
+                               i = 0;
+                               self = jQuery( this );
+                               classNames = value.match( rnothtmlwhite ) || [];
+
+                               while ( ( className = classNames[ i++ ] ) ) {
+
+                                       // Check each className given, space separated list
+                                       if ( self.hasClass( className ) ) {
+                                               self.removeClass( className );
+                                       } else {
+                                               self.addClass( className );
+                                       }
+                               }
+
+                       // Toggle whole class name
+                       } else if ( value === undefined || type === "boolean" ) {
+                               className = getClass( this );
+                               if ( className ) {
+
+                                       // Store className if set
+                                       dataPriv.set( this, "__className__", className );
+                               }
+
+                               // If the element has a class name or if we're passed `false`,
+                               // then remove the whole classname (if there was one, the above saved it).
+                               // Otherwise bring back whatever was previously saved (if anything),
+                               // falling back to the empty string if nothing was stored.
+                               if ( this.setAttribute ) {
+                                       this.setAttribute( "class",
+                                               className || value === false ?
+                                               "" :
+                                               dataPriv.get( this, "__className__" ) || ""
+                                       );
+                               }
+                       }
+               } );
+       },
+
+       hasClass: function( selector ) {
+               var className, elem,
+                       i = 0;
+
+               className = " " + selector + " ";
+               while ( ( elem = this[ i++ ] ) ) {
+                       if ( elem.nodeType === 1 &&
+                               ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) {
+                                       return true;
+                       }
+               }
+
+               return false;
+       }
+} );
+
+
+
+
+var rreturn = /\r/g;
+
+jQuery.fn.extend( {
+       val: function( value ) {
+               var hooks, ret, isFunction,
+                       elem = this[ 0 ];
+
+               if ( !arguments.length ) {
+                       if ( elem ) {
+                               hooks = jQuery.valHooks[ elem.type ] ||
+                                       jQuery.valHooks[ elem.nodeName.toLowerCase() ];
+
+                               if ( hooks &&
+                                       "get" in hooks &&
+                                       ( ret = hooks.get( elem, "value" ) ) !== undefined
+                               ) {
+                                       return ret;
+                               }
+
+                               ret = elem.value;
+
+                               // Handle most common string cases
+                               if ( typeof ret === "string" ) {
+                                       return ret.replace( rreturn, "" );
+                               }
+
+                               // Handle cases where value is null/undef or number
+                               return ret == null ? "" : ret;
+                       }
+
+                       return;
+               }
+
+               isFunction = jQuery.isFunction( value );
+
+               return this.each( function( i ) {
+                       var val;
+
+                       if ( this.nodeType !== 1 ) {
+                               return;
+                       }
+
+                       if ( isFunction ) {
+                               val = value.call( this, i, jQuery( this ).val() );
+                       } else {
+                               val = value;
+                       }
+
+                       // Treat null/undefined as ""; convert numbers to string
+                       if ( val == null ) {
+                               val = "";
+
+                       } else if ( typeof val === "number" ) {
+                               val += "";
+
+                       } else if ( Array.isArray( val ) ) {
+                               val = jQuery.map( val, function( value ) {
+                                       return value == null ? "" : value + "";
+                               } );
+                       }
+
+                       hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
+
+                       // If set returns undefined, fall back to normal setting
+                       if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) {
+                               this.value = val;
+                       }
+               } );
+       }
+} );
+
+jQuery.extend( {
+       valHooks: {
+               option: {
+                       get: function( elem ) {
+
+                               var val = jQuery.find.attr( elem, "value" );
+                               return val != null ?
+                                       val :
+
+                                       // Support: IE <=10 - 11 only
+                                       // option.text throws exceptions (#14686, #14858)
+                                       // Strip and collapse whitespace
+                                       // https://html.spec.whatwg.org/#strip-and-collapse-whitespace
+                                       stripAndCollapse( jQuery.text( elem ) );
+                       }
+               },
+               select: {
+                       get: function( elem ) {
+                               var value, option, i,
+                                       options = elem.options,
+                                       index = elem.selectedIndex,
+                                       one = elem.type === "select-one",
+                                       values = one ? null : [],
+                                       max = one ? index + 1 : options.length;
+
+                               if ( index < 0 ) {
+                                       i = max;
+
+                               } else {
+                                       i = one ? index : 0;
+                               }
+
+                               // Loop through all the selected options
+                               for ( ; i < max; i++ ) {
+                                       option = options[ i ];
+
+                                       // Support: IE <=9 only
+                                       // IE8-9 doesn't update selected after form reset (#2551)
+                                       if ( ( option.selected || i === index ) &&
+
+                                                       // Don't return options that are disabled or in a disabled optgroup
+                                                       !option.disabled &&
+                                                       ( !option.parentNode.disabled ||
+                                                               !nodeName( option.parentNode, "optgroup" ) ) ) {
+
+                                               // Get the specific value for the option
+                                               value = jQuery( option ).val();
+
+                                               // We don't need an array for one selects
+                                               if ( one ) {
+                                                       return value;
+                                               }
+
+                                               // Multi-Selects return an array
+                                               values.push( value );
+                                       }
+                               }
+
+                               return values;
+                       },
+
+                       set: function( elem, value ) {
+                               var optionSet, option,
+                                       options = elem.options,
+                                       values = jQuery.makeArray( value ),
+                                       i = options.length;
+
+                               while ( i-- ) {
+                                       option = options[ i ];
+
+                                       /* eslint-disable no-cond-assign */
+
+                                       if ( option.selected =
+                                               jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1
+                                       ) {
+                                               optionSet = true;
+                                       }
+
+                                       /* eslint-enable no-cond-assign */
+                               }
+
+                               // Force browsers to behave consistently when non-matching value is set
+                               if ( !optionSet ) {
+                                       elem.selectedIndex = -1;
+                               }
+                               return values;
+                       }
+               }
+       }
+} );
+
+// Radios and checkboxes getter/setter
+jQuery.each( [ "radio", "checkbox" ], function() {
+       jQuery.valHooks[ this ] = {
+               set: function( elem, value ) {
+                       if ( Array.isArray( value ) ) {
+                               return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );
+                       }
+               }
+       };
+       if ( !support.checkOn ) {
+               jQuery.valHooks[ this ].get = function( elem ) {
+                       return elem.getAttribute( "value" ) === null ? "on" : elem.value;
+               };
+       }
+} );
+
+
+
+
+// Return jQuery for attributes-only inclusion
+
+
+var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/;
+
+jQuery.extend( jQuery.event, {
+
+       trigger: function( event, data, elem, onlyHandlers ) {
+
+               var i, cur, tmp, bubbleType, ontype, handle, special,
+                       eventPath = [ elem || document ],
+                       type = hasOwn.call( event, "type" ) ? event.type : event,
+                       namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : [];
+
+               cur = tmp = elem = elem || document;
+
+               // Don't do events on text and comment nodes
+               if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
+                       return;
+               }
+
+               // focus/blur morphs to focusin/out; ensure we're not firing them right now
+               if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
+                       return;
+               }
+
+               if ( type.indexOf( "." ) > -1 ) {
+
+                       // Namespaced trigger; create a regexp to match event type in handle()
+                       namespaces = type.split( "." );
+                       type = namespaces.shift();
+                       namespaces.sort();
+               }
+               ontype = type.indexOf( ":" ) < 0 && "on" + type;
+
+               // Caller can pass in a jQuery.Event object, Object, or just an event type string
+               event = event[ jQuery.expando ] ?
+                       event :
+                       new jQuery.Event( type, typeof event === "object" && event );
+
+               // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
+               event.isTrigger = onlyHandlers ? 2 : 3;
+               event.namespace = namespaces.join( "." );
+               event.rnamespace = event.namespace ?
+                       new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) :
+                       null;
+
+               // Clean up the event in case it is being reused
+               event.result = undefined;
+               if ( !event.target ) {
+                       event.target = elem;
+               }
+
+               // Clone any incoming data and prepend the event, creating the handler arg list
+               data = data == null ?
+                       [ event ] :
+                       jQuery.makeArray( data, [ event ] );
+
+               // Allow special events to draw outside the lines
+               special = jQuery.event.special[ type ] || {};
+               if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
+                       return;
+               }
+
+               // Determine event propagation path in advance, per W3C events spec (#9951)
+               // Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
+               if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
+
+                       bubbleType = special.delegateType || type;
+                       if ( !rfocusMorph.test( bubbleType + type ) ) {
+                               cur = cur.parentNode;
+                       }
+                       for ( ; cur; cur = cur.parentNode ) {
+                               eventPath.push( cur );
+                               tmp = cur;
+                       }
+
+                       // Only add window if we got to document (e.g., not plain obj or detached DOM)
+                       if ( tmp === ( elem.ownerDocument || document ) ) {
+                               eventPath.push( tmp.defaultView || tmp.parentWindow || window );
+                       }
+               }
+
+               // Fire handlers on the event path
+               i = 0;
+               while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {
+
+                       event.type = i > 1 ?
+                               bubbleType :
+                               special.bindType || type;
+
+                       // jQuery handler
+                       handle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] &&
+                               dataPriv.get( cur, "handle" );
+                       if ( handle ) {
+                               handle.apply( cur, data );
+                       }
+
+                       // Native handler
+                       handle = ontype && cur[ ontype ];
+                       if ( handle && handle.apply && acceptData( cur ) ) {
+                               event.result = handle.apply( cur, data );
+                               if ( event.result === false ) {
+                                       event.preventDefault();
+                               }
+                       }
+               }
+               event.type = type;
+
+               // If nobody prevented the default action, do it now
+               if ( !onlyHandlers && !event.isDefaultPrevented() ) {
+
+                       if ( ( !special._default ||
+                               special._default.apply( eventPath.pop(), data ) === false ) &&
+                               acceptData( elem ) ) {
+
+                               // Call a native DOM method on the target with the same name as the event.
+                               // Don't do default actions on window, that's where global variables be (#6170)
+                               if ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) {
+
+                                       // Don't re-trigger an onFOO event when we call its FOO() method
+                                       tmp = elem[ ontype ];
+
+                                       if ( tmp ) {
+                                               elem[ ontype ] = null;
+                                       }
+
+                                       // Prevent re-triggering of the same event, since we already bubbled it above
+                                       jQuery.event.triggered = type;
+                                       elem[ type ]();
+                                       jQuery.event.triggered = undefined;
+
+                                       if ( tmp ) {
+                                               elem[ ontype ] = tmp;
+                                       }
+                               }
+                       }
+               }
+
+               return event.result;
+       },
+
+       // Piggyback on a donor event to simulate a different one
+       // Used only for `focus(in | out)` events
+       simulate: function( type, elem, event ) {
+               var e = jQuery.extend(
+                       new jQuery.Event(),
+                       event,
+                       {
+                               type: type,
+                               isSimulated: true
+                       }
+               );
+
+               jQuery.event.trigger( e, null, elem );
+       }
+
+} );
+
+jQuery.fn.extend( {
+
+       trigger: function( type, data ) {
+               return this.each( function() {
+                       jQuery.event.trigger( type, data, this );
+               } );
+       },
+       triggerHandler: function( type, data ) {
+               var elem = this[ 0 ];
+               if ( elem ) {
+                       return jQuery.event.trigger( type, data, elem, true );
+               }
+       }
+} );
+
+
+jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " +
+       "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
+       "change select submit keydown keypress keyup contextmenu" ).split( " " ),
+       function( i, name ) {
+
+       // Handle event binding
+       jQuery.fn[ name ] = function( data, fn ) {
+               return arguments.length > 0 ?
+                       this.on( name, null, data, fn ) :
+                       this.trigger( name );
+       };
+} );
+
+jQuery.fn.extend( {
+       hover: function( fnOver, fnOut ) {
+               return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
+       }
+} );
+
+
+
+
+support.focusin = "onfocusin" in window;
+
+
+// Support: Firefox <=44
+// Firefox doesn't have focus(in | out) events
+// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787
+//
+// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1
+// focus(in | out) events fire after focus & blur events,
+// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order
+// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857
+if ( !support.focusin ) {
+       jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) {
+
+               // Attach a single capturing handler on the document while someone wants focusin/focusout
+               var handler = function( event ) {
+                       jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );
+               };
+
+               jQuery.event.special[ fix ] = {
+                       setup: function() {
+                               var doc = this.ownerDocument || this,
+                                       attaches = dataPriv.access( doc, fix );
+
+                               if ( !attaches ) {
+                                       doc.addEventListener( orig, handler, true );
+                               }
+                               dataPriv.access( doc, fix, ( attaches || 0 ) + 1 );
+                       },
+                       teardown: function() {
+                               var doc = this.ownerDocument || this,
+                                       attaches = dataPriv.access( doc, fix ) - 1;
+
+                               if ( !attaches ) {
+                                       doc.removeEventListener( orig, handler, true );
+                                       dataPriv.remove( doc, fix );
+
+                               } else {
+                                       dataPriv.access( doc, fix, attaches );
+                               }
+                       }
+               };
+       } );
+}
+var location = window.location;
+
+var nonce = jQuery.now();
+
+var rquery = ( /\?/ );
+
+
+
+// Cross-browser xml parsing
+jQuery.parseXML = function( data ) {
+       var xml;
+       if ( !data || typeof data !== "string" ) {
+               return null;
+       }
+
+       // Support: IE 9 - 11 only
+       // IE throws on parseFromString with invalid input.
+       try {
+               xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" );
+       } catch ( e ) {
+               xml = undefined;
+       }
+
+       if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) {
+               jQuery.error( "Invalid XML: " + data );
+       }
+       return xml;
+};
+
+
+var
+       rbracket = /\[\]$/,
+       rCRLF = /\r?\n/g,
+       rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
+       rsubmittable = /^(?:input|select|textarea|keygen)/i;
+
+function buildParams( prefix, obj, traditional, add ) {
+       var name;
+
+       if ( Array.isArray( obj ) ) {
+
+               // Serialize array item.
+               jQuery.each( obj, function( i, v ) {
+                       if ( traditional || rbracket.test( prefix ) ) {
+
+                               // Treat each array item as a scalar.
+                               add( prefix, v );
+
+                       } else {
+
+                               // Item is non-scalar (array or object), encode its numeric index.
+                               buildParams(
+                                       prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]",
+                                       v,
+                                       traditional,
+                                       add
+                               );
+                       }
+               } );
+
+       } else if ( !traditional && jQuery.type( obj ) === "object" ) {
+
+               // Serialize object item.
+               for ( name in obj ) {
+                       buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
+               }
+
+       } else {
+
+               // Serialize scalar item.
+               add( prefix, obj );
+       }
+}
+
+// Serialize an array of form elements or a set of
+// key/values into a query string
+jQuery.param = function( a, traditional ) {
+       var prefix,
+               s = [],
+               add = function( key, valueOrFunction ) {
+
+                       // If value is a function, invoke it and use its return value
+                       var value = jQuery.isFunction( valueOrFunction ) ?
+                               valueOrFunction() :
+                               valueOrFunction;
+
+                       s[ s.length ] = encodeURIComponent( key ) + "=" +
+                               encodeURIComponent( value == null ? "" : value );
+               };
+
+       // If an array was passed in, assume that it is an array of form elements.
+       if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
+
+               // Serialize the form elements
+               jQuery.each( a, function() {
+                       add( this.name, this.value );
+               } );
+
+       } else {
+
+               // If traditional, encode the "old" way (the way 1.3.2 or older
+               // did it), otherwise encode params recursively.
+               for ( prefix in a ) {
+                       buildParams( prefix, a[ prefix ], traditional, add );
+               }
+       }
+
+       // Return the resulting serialization
+       return s.join( "&" );
+};
+
+jQuery.fn.extend( {
+       serialize: function() {
+               return jQuery.param( this.serializeArray() );
+       },
+       serializeArray: function() {
+               return this.map( function() {
+
+                       // Can add propHook for "elements" to filter or add form elements
+                       var elements = jQuery.prop( this, "elements" );
+                       return elements ? jQuery.makeArray( elements ) : this;
+               } )
+               .filter( function() {
+                       var type = this.type;
+
+                       // Use .is( ":disabled" ) so that fieldset[disabled] works
+                       return this.name && !jQuery( this ).is( ":disabled" ) &&
+                               rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
+                               ( this.checked || !rcheckableType.test( type ) );
+               } )
+               .map( function( i, elem ) {
+                       var val = jQuery( this ).val();
+
+                       if ( val == null ) {
+                               return null;
+                       }
+
+                       if ( Array.isArray( val ) ) {
+                               return jQuery.map( val, function( val ) {
+                                       return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+                               } );
+                       }
+
+                       return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+               } ).get();
+       }
+} );
+
+
+var
+       r20 = /%20/g,
+       rhash = /#.*$/,
+       rantiCache = /([?&])_=[^&]*/,
+       rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg,
+
+       // #7653, #8125, #8152: local protocol detection
+       rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
+       rnoContent = /^(?:GET|HEAD)$/,
+       rprotocol = /^\/\//,
+
+       /* Prefilters
+        * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
+        * 2) These are called:
+        *    - BEFORE asking for a transport
+        *    - AFTER param serialization (s.data is a string if s.processData is true)
+        * 3) key is the dataType
+        * 4) the catchall symbol "*" can be used
+        * 5) execution will start with transport dataType and THEN continue down to "*" if needed
+        */
+       prefilters = {},
+
+       /* Transports bindings
+        * 1) key is the dataType
+        * 2) the catchall symbol "*" can be used
+        * 3) selection will start with transport dataType and THEN go to "*" if needed
+        */
+       transports = {},
+
+       // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
+       allTypes = "*/".concat( "*" ),
+
+       // Anchor tag for parsing the document origin
+       originAnchor = document.createElement( "a" );
+       originAnchor.href = location.href;
+
+// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
+function addToPrefiltersOrTransports( structure ) {
+
+       // dataTypeExpression is optional and defaults to "*"
+       return function( dataTypeExpression, func ) {
+
+               if ( typeof dataTypeExpression !== "string" ) {
+                       func = dataTypeExpression;
+                       dataTypeExpression = "*";
+               }
+
+               var dataType,
+                       i = 0,
+                       dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];
+
+               if ( jQuery.isFunction( func ) ) {
+
+                       // For each dataType in the dataTypeExpression
+                       while ( ( dataType = dataTypes[ i++ ] ) ) {
+
+                               // Prepend if requested
+                               if ( dataType[ 0 ] === "+" ) {
+                                       dataType = dataType.slice( 1 ) || "*";
+                                       ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );
+
+                               // Otherwise append
+                               } else {
+                                       ( structure[ dataType ] = structure[ dataType ] || [] ).push( func );
+                               }
+                       }
+               }
+       };
+}
+
+// Base inspection function for prefilters and transports
+function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
+
+       var inspected = {},
+               seekingTransport = ( structure === transports );
+
+       function inspect( dataType ) {
+               var selected;
+               inspected[ dataType ] = true;
+               jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
+                       var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
+                       if ( typeof dataTypeOrTransport === "string" &&
+                               !seekingTransport && !inspected[ dataTypeOrTransport ] ) {
+
+                               options.dataTypes.unshift( dataTypeOrTransport );
+                               inspect( dataTypeOrTransport );
+                               return false;
+                       } else if ( seekingTransport ) {
+                               return !( selected = dataTypeOrTransport );
+                       }
+               } );
+               return selected;
+       }
+
+       return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
+}
+
+// A special extend for ajax options
+// that takes "flat" options (not to be deep extended)
+// Fixes #9887
+function ajaxExtend( target, src ) {
+       var key, deep,
+               flatOptions = jQuery.ajaxSettings.flatOptions || {};
+
+       for ( key in src ) {
+               if ( src[ key ] !== undefined ) {
+                       ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];
+               }
+       }
+       if ( deep ) {
+               jQuery.extend( true, target, deep );
+       }
+
+       return target;
+}
+
+/* Handles responses to an ajax request:
+ * - finds the right dataType (mediates between content-type and expected dataType)
+ * - returns the corresponding response
+ */
+function ajaxHandleResponses( s, jqXHR, responses ) {
+
+       var ct, type, finalDataType, firstDataType,
+               contents = s.contents,
+               dataTypes = s.dataTypes;
+
+       // Remove auto dataType and get content-type in the process
+       while ( dataTypes[ 0 ] === "*" ) {
+               dataTypes.shift();
+               if ( ct === undefined ) {
+                       ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" );
+               }
+       }
+
+       // Check if we're dealing with a known content-type
+       if ( ct ) {
+               for ( type in contents ) {
+                       if ( contents[ type ] && contents[ type ].test( ct ) ) {
+                               dataTypes.unshift( type );
+                               break;
+                       }
+               }
+       }
+
+       // Check to see if we have a response for the expected dataType
+       if ( dataTypes[ 0 ] in responses ) {
+               finalDataType = dataTypes[ 0 ];
+       } else {
+
+               // Try convertible dataTypes
+               for ( type in responses ) {
+                       if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) {
+                               finalDataType = type;
+                               break;
+                       }
+                       if ( !firstDataType ) {
+                               firstDataType = type;
+                       }
+               }
+
+               // Or just use first one
+               finalDataType = finalDataType || firstDataType;
+       }
+
+       // If we found a dataType
+       // We add the dataType to the list if needed
+       // and return the corresponding response
+       if ( finalDataType ) {
+               if ( finalDataType !== dataTypes[ 0 ] ) {
+                       dataTypes.unshift( finalDataType );
+               }
+               return responses[ finalDataType ];
+       }
+}
+
+/* Chain conversions given the request and the original response
+ * Also sets the responseXXX fields on the jqXHR instance
+ */
+function ajaxConvert( s, response, jqXHR, isSuccess ) {
+       var conv2, current, conv, tmp, prev,
+               converters = {},
+
+               // Work with a copy of dataTypes in case we need to modify it for conversion
+               dataTypes = s.dataTypes.slice();
+
+       // Create converters map with lowercased keys
+       if ( dataTypes[ 1 ] ) {
+               for ( conv in s.converters ) {
+                       converters[ conv.toLowerCase() ] = s.converters[ conv ];
+               }
+       }
+
+       current = dataTypes.shift();
+
+       // Convert to each sequential dataType
+       while ( current ) {
+
+               if ( s.responseFields[ current ] ) {
+                       jqXHR[ s.responseFields[ current ] ] = response;
+               }
+
+               // Apply the dataFilter if provided
+               if ( !prev && isSuccess && s.dataFilter ) {
+                       response = s.dataFilter( response, s.dataType );
+               }
+
+               prev = current;
+               current = dataTypes.shift();
+
+               if ( current ) {
+
+                       // There's only work to do if current dataType is non-auto
+                       if ( current === "*" ) {
+
+                               current = prev;
+
+                       // Convert response if prev dataType is non-auto and differs from current
+                       } else if ( prev !== "*" && prev !== current ) {
+
+                               // Seek a direct converter
+                               conv = converters[ prev + " " + current ] || converters[ "* " + current ];
+
+                               // If none found, seek a pair
+                               if ( !conv ) {
+                                       for ( conv2 in converters ) {
+
+                                               // If conv2 outputs current
+                                               tmp = conv2.split( " " );
+                                               if ( tmp[ 1 ] === current ) {
+
+                                                       // If prev can be converted to accepted input
+                                                       conv = converters[ prev + " " + tmp[ 0 ] ] ||
+                                                               converters[ "* " + tmp[ 0 ] ];
+                                                       if ( conv ) {
+
+                                                               // Condense equivalence converters
+                                                               if ( conv === true ) {
+                                                                       conv = converters[ conv2 ];
+
+                                                               // Otherwise, insert the intermediate dataType
+                                                               } else if ( converters[ conv2 ] !== true ) {
+                                                                       current = tmp[ 0 ];
+                                                                       dataTypes.unshift( tmp[ 1 ] );
+                                                               }
+                                                               break;
+                                                       }
+                                               }
+                                       }
+                               }
+
+                               // Apply converter (if not an equivalence)
+                               if ( conv !== true ) {
+
+                                       // Unless errors are allowed to bubble, catch and return them
+                                       if ( conv && s.throws ) {
+                                               response = conv( response );
+                                       } else {
+                                               try {
+                                                       response = conv( response );
+                                               } catch ( e ) {
+                                                       return {
+                                                               state: "parsererror",
+                                                               error: conv ? e : "No conversion from " + prev + " to " + current
+                                                       };
+                                               }
+                                       }
+                               }
+                       }
+               }
+       }
+
+       return { state: "success", data: response };
+}
+
+jQuery.extend( {
+
+       // Counter for holding the number of active queries
+       active: 0,
+
+       // Last-Modified header cache for next request
+       lastModified: {},
+       etag: {},
+
+       ajaxSettings: {
+               url: location.href,
+               type: "GET",
+               isLocal: rlocalProtocol.test( location.protocol ),
+               global: true,
+               processData: true,
+               async: true,
+               contentType: "application/x-www-form-urlencoded; charset=UTF-8",
+
+               /*
+               timeout: 0,
+               data: null,
+               dataType: null,
+               username: null,
+               password: null,
+               cache: null,
+               throws: false,
+               traditional: false,
+               headers: {},
+               */
+
+               accepts: {
+                       "*": allTypes,
+                       text: "text/plain",
+                       html: "text/html",
+                       xml: "application/xml, text/xml",
+                       json: "application/json, text/javascript"
+               },
+
+               contents: {
+                       xml: /\bxml\b/,
+                       html: /\bhtml/,
+                       json: /\bjson\b/
+               },
+
+               responseFields: {
+                       xml: "responseXML",
+                       text: "responseText",
+                       json: "responseJSON"
+               },
+
+               // Data converters
+               // Keys separate source (or catchall "*") and destination types with a single space
+               converters: {
+
+                       // Convert anything to text
+                       "* text": String,
+
+                       // Text to html (true = no transformation)
+                       "text html": true,
+
+                       // Evaluate text as a json expression
+                       "text json": JSON.parse,
+
+                       // Parse text as xml
+                       "text xml": jQuery.parseXML
+               },
+
+               // For options that shouldn't be deep extended:
+               // you can add your own custom options here if
+               // and when you create one that shouldn't be
+               // deep extended (see ajaxExtend)
+               flatOptions: {
+                       url: true,
+                       context: true
+               }
+       },
+
+       // Creates a full fledged settings object into target
+       // with both ajaxSettings and settings fields.
+       // If target is omitted, writes into ajaxSettings.
+       ajaxSetup: function( target, settings ) {
+               return settings ?
+
+                       // Building a settings object
+                       ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
+
+                       // Extending ajaxSettings
+                       ajaxExtend( jQuery.ajaxSettings, target );
+       },
+
+       ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
+       ajaxTransport: addToPrefiltersOrTransports( transports ),
+
+       // Main method
+       ajax: function( url, options ) {
+
+               // If url is an object, simulate pre-1.5 signature
+               if ( typeof url === "object" ) {
+                       options = url;
+                       url = undefined;
+               }
+
+               // Force options to be an object
+               options = options || {};
+
+               var transport,
+
+                       // URL without anti-cache param
+                       cacheURL,
+
+                       // Response headers
+                       responseHeadersString,
+                       responseHeaders,
+
+                       // timeout handle
+                       timeoutTimer,
+
+                       // Url cleanup var
+                       urlAnchor,
+
+                       // Request state (becomes false upon send and true upon completion)
+                       completed,
+
+                       // To know if global events are to be dispatched
+                       fireGlobals,
+
+                       // Loop variable
+                       i,
+
+                       // uncached part of the url
+                       uncached,
+
+                       // Create the final options object
+                       s = jQuery.ajaxSetup( {}, options ),
+
+                       // Callbacks context
+                       callbackContext = s.context || s,
+
+                       // Context for global events is callbackContext if it is a DOM node or jQuery collection
+                       globalEventContext = s.context &&
+                               ( callbackContext.nodeType || callbackContext.jquery ) ?
+                                       jQuery( callbackContext ) :
+                                       jQuery.event,
+
+                       // Deferreds
+                       deferred = jQuery.Deferred(),
+                       completeDeferred = jQuery.Callbacks( "once memory" ),
+
+                       // Status-dependent callbacks
+                       statusCode = s.statusCode || {},
+
+                       // Headers (they are sent all at once)
+                       requestHeaders = {},
+                       requestHeadersNames = {},
+
+                       // Default abort message
+                       strAbort = "canceled",
+
+                       // Fake xhr
+                       jqXHR = {
+                               readyState: 0,
+
+                               // Builds headers hashtable if needed
+                               getResponseHeader: function( key ) {
+                                       var match;
+                                       if ( completed ) {
+                                               if ( !responseHeaders ) {
+                                                       responseHeaders = {};
+                                                       while ( ( match = rheaders.exec( responseHeadersString ) ) ) {
+                                                               responseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ];
+                                                       }
+                                               }
+                                               match = responseHeaders[ key.toLowerCase() ];
+                                       }
+                                       return match == null ? null : match;
+                               },
+
+                               // Raw string
+                               getAllResponseHeaders: function() {
+                                       return completed ? responseHeadersString : null;
+                               },
+
+                               // Caches the header
+                               setRequestHeader: function( name, value ) {
+                                       if ( completed == null ) {
+                                               name = requestHeadersNames[ name.toLowerCase() ] =
+                                                       requestHeadersNames[ name.toLowerCase() ] || name;
+                                               requestHeaders[ name ] = value;
+                                       }
+                                       return this;
+                               },
+
+                               // Overrides response content-type header
+                               overrideMimeType: function( type ) {
+                                       if ( completed == null ) {
+                                               s.mimeType = type;
+                                       }
+                                       return this;
+                               },
+
+                               // Status-dependent callbacks
+                               statusCode: function( map ) {
+                                       var code;
+                                       if ( map ) {
+                                               if ( completed ) {
+
+                                                       // Execute the appropriate callbacks
+                                                       jqXHR.always( map[ jqXHR.status ] );
+                                               } else {
+
+                                                       // Lazy-add the new callbacks in a way that preserves old ones
+                                                       for ( code in map ) {
+                                                               statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
+                                                       }
+                                               }
+                                       }
+                                       return this;
+                               },
+
+                               // Cancel the request
+                               abort: function( statusText ) {
+                                       var finalText = statusText || strAbort;
+                                       if ( transport ) {
+                                               transport.abort( finalText );
+                                       }
+                                       done( 0, finalText );
+                                       return this;
+                               }
+                       };
+
+               // Attach deferreds
+               deferred.promise( jqXHR );
+
+               // Add protocol if not provided (prefilters might expect it)
+               // Handle falsy url in the settings object (#10093: consistency with old signature)
+               // We also use the url parameter if available
+               s.url = ( ( url || s.url || location.href ) + "" )
+                       .replace( rprotocol, location.protocol + "//" );
+
+               // Alias method option to type as per ticket #12004
+               s.type = options.method || options.type || s.method || s.type;
+
+               // Extract dataTypes list
+               s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ];
+
+               // A cross-domain request is in order when the origin doesn't match the current origin.
+               if ( s.crossDomain == null ) {
+                       urlAnchor = document.createElement( "a" );
+
+                       // Support: IE <=8 - 11, Edge 12 - 13
+                       // IE throws exception on accessing the href property if url is malformed,
+                       // e.g. http://example.com:80x/
+                       try {
+                               urlAnchor.href = s.url;
+
+                               // Support: IE <=8 - 11 only
+                               // Anchor's host property isn't correctly set when s.url is relative
+                               urlAnchor.href = urlAnchor.href;
+                               s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !==
+                                       urlAnchor.protocol + "//" + urlAnchor.host;
+                       } catch ( e ) {
+
+                               // If there is an error parsing the URL, assume it is crossDomain,
+                               // it can be rejected by the transport if it is invalid
+                               s.crossDomain = true;
+                       }
+               }
+
+               // Convert data if not already a string
+               if ( s.data && s.processData && typeof s.data !== "string" ) {
+                       s.data = jQuery.param( s.data, s.traditional );
+               }
+
+               // Apply prefilters
+               inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
+
+               // If request was aborted inside a prefilter, stop there
+               if ( completed ) {
+                       return jqXHR;
+               }
+
+               // We can fire global events as of now if asked to
+               // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)
+               fireGlobals = jQuery.event && s.global;
+
+               // Watch for a new set of requests
+               if ( fireGlobals && jQuery.active++ === 0 ) {
+                       jQuery.event.trigger( "ajaxStart" );
+               }
+
+               // Uppercase the type
+               s.type = s.type.toUpperCase();
+
+               // Determine if request has content
+               s.hasContent = !rnoContent.test( s.type );
+
+               // Save the URL in case we're toying with the If-Modified-Since
+               // and/or If-None-Match header later on
+               // Remove hash to simplify url manipulation
+               cacheURL = s.url.replace( rhash, "" );
+
+               // More options handling for requests with no content
+               if ( !s.hasContent ) {
+
+                       // Remember the hash so we can put it back
+                       uncached = s.url.slice( cacheURL.length );
+
+                       // If data is available, append data to url
+                       if ( s.data ) {
+                               cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data;
+
+                               // #9682: remove data so that it's not used in an eventual retry
+                               delete s.data;
+                       }
+
+                       // Add or update anti-cache param if needed
+                       if ( s.cache === false ) {
+                               cacheURL = cacheURL.replace( rantiCache, "$1" );
+                               uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce++ ) + uncached;
+                       }
+
+                       // Put hash and anti-cache on the URL that will be requested (gh-1732)
+                       s.url = cacheURL + uncached;
+
+               // Change '%20' to '+' if this is encoded form body content (gh-2658)
+               } else if ( s.data && s.processData &&
+                       ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) {
+                       s.data = s.data.replace( r20, "+" );
+               }
+
+               // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+               if ( s.ifModified ) {
+                       if ( jQuery.lastModified[ cacheURL ] ) {
+                               jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
+                       }
+                       if ( jQuery.etag[ cacheURL ] ) {
+                               jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
+                       }
+               }
+
+               // Set the correct header, if data is being sent
+               if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
+                       jqXHR.setRequestHeader( "Content-Type", s.contentType );
+               }
+
+               // Set the Accepts header for the server, depending on the dataType
+               jqXHR.setRequestHeader(
+                       "Accept",
+                       s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?
+                               s.accepts[ s.dataTypes[ 0 ] ] +
+                                       ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
+                               s.accepts[ "*" ]
+               );
+
+               // Check for headers option
+               for ( i in s.headers ) {
+                       jqXHR.setRequestHeader( i, s.headers[ i ] );
+               }
+
+               // Allow custom headers/mimetypes and early abort
+               if ( s.beforeSend &&
+                       ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {
+
+                       // Abort if not done already and return
+                       return jqXHR.abort();
+               }
+
+               // Aborting is no longer a cancellation
+               strAbort = "abort";
+
+               // Install callbacks on deferreds
+               completeDeferred.add( s.complete );
+               jqXHR.done( s.success );
+               jqXHR.fail( s.error );
+
+               // Get transport
+               transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
+
+               // If no transport, we auto-abort
+               if ( !transport ) {
+                       done( -1, "No Transport" );
+               } else {
+                       jqXHR.readyState = 1;
+
+                       // Send global event
+                       if ( fireGlobals ) {
+                               globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
+                       }
+
+                       // If request was aborted inside ajaxSend, stop there
+                       if ( completed ) {
+                               return jqXHR;
+                       }
+
+                       // Timeout
+                       if ( s.async && s.timeout > 0 ) {
+                               timeoutTimer = window.setTimeout( function() {
+                                       jqXHR.abort( "timeout" );
+                               }, s.timeout );
+                       }
+
+                       try {
+                               completed = false;
+                               transport.send( requestHeaders, done );
+                       } catch ( e ) {
+
+                               // Rethrow post-completion exceptions
+                               if ( completed ) {
+                                       throw e;
+                               }
+
+                               // Propagate others as results
+                               done( -1, e );
+                       }
+               }
+
+               // Callback for when everything is done
+               function done( status, nativeStatusText, responses, headers ) {
+                       var isSuccess, success, error, response, modified,
+                               statusText = nativeStatusText;
+
+                       // Ignore repeat invocations
+                       if ( completed ) {
+                               return;
+                       }
+
+                       completed = true;
+
+                       // Clear timeout if it exists
+                       if ( timeoutTimer ) {
+                               window.clearTimeout( timeoutTimer );
+                       }
+
+                       // Dereference transport for early garbage collection
+                       // (no matter how long the jqXHR object will be used)
+                       transport = undefined;
+
+                       // Cache response headers
+                       responseHeadersString = headers || "";
+
+                       // Set readyState
+                       jqXHR.readyState = status > 0 ? 4 : 0;
+
+                       // Determine if successful
+                       isSuccess = status >= 200 && status < 300 || status === 304;
+
+                       // Get response data
+                       if ( responses ) {
+                               response = ajaxHandleResponses( s, jqXHR, responses );
+                       }
+
+                       // Convert no matter what (that way responseXXX fields are always set)
+                       response = ajaxConvert( s, response, jqXHR, isSuccess );
+
+                       // If successful, handle type chaining
+                       if ( isSuccess ) {
+
+                               // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+                               if ( s.ifModified ) {
+                                       modified = jqXHR.getResponseHeader( "Last-Modified" );
+                                       if ( modified ) {
+                                               jQuery.lastModified[ cacheURL ] = modified;
+                                       }
+                                       modified = jqXHR.getResponseHeader( "etag" );
+                                       if ( modified ) {
+                                               jQuery.etag[ cacheURL ] = modified;
+                                       }
+                               }
+
+                               // if no content
+                               if ( status === 204 || s.type === "HEAD" ) {
+                                       statusText = "nocontent";
+
+                               // if not modified
+                               } else if ( status === 304 ) {
+                                       statusText = "notmodified";
+
+                               // If we have data, let's convert it
+                               } else {
+                                       statusText = response.state;
+                                       success = response.data;
+                                       error = response.error;
+                                       isSuccess = !error;
+                               }
+                       } else {
+
+                               // Extract error from statusText and normalize for non-aborts
+                               error = statusText;
+                               if ( status || !statusText ) {
+                                       statusText = "error";
+                                       if ( status < 0 ) {
+                                               status = 0;
+                                       }
+                               }
+                       }
+
+                       // Set data for the fake xhr object
+                       jqXHR.status = status;
+                       jqXHR.statusText = ( nativeStatusText || statusText ) + "";
+
+                       // Success/Error
+                       if ( isSuccess ) {
+                               deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
+                       } else {
+                               deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
+                       }
+
+                       // Status-dependent callbacks
+                       jqXHR.statusCode( statusCode );
+                       statusCode = undefined;
+
+                       if ( fireGlobals ) {
+                               globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
+                                       [ jqXHR, s, isSuccess ? success : error ] );
+                       }
+
+                       // Complete
+                       completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
+
+                       if ( fireGlobals ) {
+                               globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
+
+                               // Handle the global AJAX counter
+                               if ( !( --jQuery.active ) ) {
+                                       jQuery.event.trigger( "ajaxStop" );
+                               }
+                       }
+               }
+
+               return jqXHR;
+       },
+
+       getJSON: function( url, data, callback ) {
+               return jQuery.get( url, data, callback, "json" );
+       },
+
+       getScript: function( url, callback ) {
+               return jQuery.get( url, undefined, callback, "script" );
+       }
+} );
+
+jQuery.each( [ "get", "post" ], function( i, method ) {
+       jQuery[ method ] = function( url, data, callback, type ) {
+
+               // Shift arguments if data argument was omitted
+               if ( jQuery.isFunction( data ) ) {
+                       type = type || callback;
+                       callback = data;
+                       data = undefined;
+               }
+
+               // The url can be an options object (which then must have .url)
+               return jQuery.ajax( jQuery.extend( {
+                       url: url,
+                       type: method,
+                       dataType: type,
+                       data: data,
+                       success: callback
+               }, jQuery.isPlainObject( url ) && url ) );
+       };
+} );
+
+
+jQuery._evalUrl = function( url ) {
+       return jQuery.ajax( {
+               url: url,
+
+               // Make this explicit, since user can override this through ajaxSetup (#11264)
+               type: "GET",
+               dataType: "script",
+               cache: true,
+               async: false,
+               global: false,
+               "throws": true
+       } );
+};
+
+
+jQuery.fn.extend( {
+       wrapAll: function( html ) {
+               var wrap;
+
+               if ( this[ 0 ] ) {
+                       if ( jQuery.isFunction( html ) ) {
+                               html = html.call( this[ 0 ] );
+                       }
+
+                       // The elements to wrap the target around
+                       wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );
+
+                       if ( this[ 0 ].parentNode ) {
+                               wrap.insertBefore( this[ 0 ] );
+                       }
+
+                       wrap.map( function() {
+                               var elem = this;
+
+                               while ( elem.firstElementChild ) {
+                                       elem = elem.firstElementChild;
+                               }
+
+                               return elem;
+                       } ).append( this );
+               }
+
+               return this;
+       },
+
+       wrapInner: function( html ) {
+               if ( jQuery.isFunction( html ) ) {
+                       return this.each( function( i ) {
+                               jQuery( this ).wrapInner( html.call( this, i ) );
+                       } );
+               }
+
+               return this.each( function() {
+                       var self = jQuery( this ),
+                               contents = self.contents();
+
+                       if ( contents.length ) {
+                               contents.wrapAll( html );
+
+                       } else {
+                               self.append( html );
+                       }
+               } );
+       },
+
+       wrap: function( html ) {
+               var isFunction = jQuery.isFunction( html );
+
+               return this.each( function( i ) {
+                       jQuery( this ).wrapAll( isFunction ? html.call( this, i ) : html );
+               } );
+       },
+
+       unwrap: function( selector ) {
+               this.parent( selector ).not( "body" ).each( function() {
+                       jQuery( this ).replaceWith( this.childNodes );
+               } );
+               return this;
+       }
+} );
+
+
+jQuery.expr.pseudos.hidden = function( elem ) {
+       return !jQuery.expr.pseudos.visible( elem );
+};
+jQuery.expr.pseudos.visible = function( elem ) {
+       return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );
+};
+
+
+
+
+jQuery.ajaxSettings.xhr = function() {
+       try {
+               return new window.XMLHttpRequest();
+       } catch ( e ) {}
+};
+
+var xhrSuccessStatus = {
+
+               // File protocol always yields status code 0, assume 200
+               0: 200,
+
+               // Support: IE <=9 only
+               // #1450: sometimes IE returns 1223 when it should be 204
+               1223: 204
+       },
+       xhrSupported = jQuery.ajaxSettings.xhr();
+
+support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
+support.ajax = xhrSupported = !!xhrSupported;
+
+jQuery.ajaxTransport( function( options ) {
+       var callback, errorCallback;
+
+       // Cross domain only allowed if supported through XMLHttpRequest
+       if ( support.cors || xhrSupported && !options.crossDomain ) {
+               return {
+                       send: function( headers, complete ) {
+                               var i,
+                                       xhr = options.xhr();
+
+                               xhr.open(
+                                       options.type,
+                                       options.url,
+                                       options.async,
+                                       options.username,
+                                       options.password
+                               );
+
+                               // Apply custom fields if provided
+                               if ( options.xhrFields ) {
+                                       for ( i in options.xhrFields ) {
+                                               xhr[ i ] = options.xhrFields[ i ];
+                                       }
+                               }
+
+                               // Override mime type if needed
+                               if ( options.mimeType && xhr.overrideMimeType ) {
+                                       xhr.overrideMimeType( options.mimeType );
+                               }
+
+                               // X-Requested-With header
+                               // For cross-domain requests, seeing as conditions for a preflight are
+                               // akin to a jigsaw puzzle, we simply never set it to be sure.
+                               // (it can always be set on a per-request basis or even using ajaxSetup)
+                               // For same-domain requests, won't change header if already provided.
+                               if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) {
+                                       headers[ "X-Requested-With" ] = "XMLHttpRequest";
+                               }
+
+                               // Set headers
+                               for ( i in headers ) {
+                                       xhr.setRequestHeader( i, headers[ i ] );
+                               }
+
+                               // Callback
+                               callback = function( type ) {
+                                       return function() {
+                                               if ( callback ) {
+                                                       callback = errorCallback = xhr.onload =
+                                                               xhr.onerror = xhr.onabort = xhr.onreadystatechange = null;
+
+                                                       if ( type === "abort" ) {
+                                                               xhr.abort();
+                                                       } else if ( type === "error" ) {
+
+                                                               // Support: IE <=9 only
+                                                               // On a manual native abort, IE9 throws
+                                                               // errors on any property access that is not readyState
+                                                               if ( typeof xhr.status !== "number" ) {
+                                                                       complete( 0, "error" );
+                                                               } else {
+                                                                       complete(
+
+                                                                               // File: protocol always yields status 0; see #8605, #14207
+                                                                               xhr.status,
+                                                                               xhr.statusText
+                                                                       );
+                                                               }
+                                                       } else {
+                                                               complete(
+                                                                       xhrSuccessStatus[ xhr.status ] || xhr.status,
+                                                                       xhr.statusText,
+
+                                                                       // Support: IE <=9 only
+                                                                       // IE9 has no XHR2 but throws on binary (trac-11426)
+                                                                       // For XHR2 non-text, let the caller handle it (gh-2498)
+                                                                       ( xhr.responseType || "text" ) !== "text"  ||
+                                                                       typeof xhr.responseText !== "string" ?
+                                                                               { binary: xhr.response } :
+                                                                               { text: xhr.responseText },
+                                                                       xhr.getAllResponseHeaders()
+                                                               );
+                                                       }
+                                               }
+                                       };
+                               };
+
+                               // Listen to events
+                               xhr.onload = callback();
+                               errorCallback = xhr.onerror = callback( "error" );
+
+                               // Support: IE 9 only
+                               // Use onreadystatechange to replace onabort
+                               // to handle uncaught aborts
+                               if ( xhr.onabort !== undefined ) {
+                                       xhr.onabort = errorCallback;
+                               } else {
+                                       xhr.onreadystatechange = function() {
+
+                                               // Check readyState before timeout as it changes
+                                               if ( xhr.readyState === 4 ) {
+
+                                                       // Allow onerror to be called first,
+                                                       // but that will not handle a native abort
+                                                       // Also, save errorCallback to a variable
+                                                       // as xhr.onerror cannot be accessed
+                                                       window.setTimeout( function() {
+                                                               if ( callback ) {
+                                                                       errorCallback();
+                                                               }
+                                                       } );
+                                               }
+                                       };
+                               }
+
+                               // Create the abort callback
+                               callback = callback( "abort" );
+
+                               try {
+
+                                       // Do send the request (this may raise an exception)
+                                       xhr.send( options.hasContent && options.data || null );
+                               } catch ( e ) {
+
+                                       // #14683: Only rethrow if this hasn't been notified as an error yet
+                                       if ( callback ) {
+                                               throw e;
+                                       }
+                               }
+                       },
+
+                       abort: function() {
+                               if ( callback ) {
+                                       callback();
+                               }
+                       }
+               };
+       }
+} );
+
+
+
+
+// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)
+jQuery.ajaxPrefilter( function( s ) {
+       if ( s.crossDomain ) {
+               s.contents.script = false;
+       }
+} );
+
+// Install script dataType
+jQuery.ajaxSetup( {
+       accepts: {
+               script: "text/javascript, application/javascript, " +
+                       "application/ecmascript, application/x-ecmascript"
+       },
+       contents: {
+               script: /\b(?:java|ecma)script\b/
+       },
+       converters: {
+               "text script": function( text ) {
+                       jQuery.globalEval( text );
+                       return text;
+               }
+       }
+} );
+
+// Handle cache's special case and crossDomain
+jQuery.ajaxPrefilter( "script", function( s ) {
+       if ( s.cache === undefined ) {
+               s.cache = false;
+       }
+       if ( s.crossDomain ) {
+               s.type = "GET";
+       }
+} );
+
+// Bind script tag hack transport
+jQuery.ajaxTransport( "script", function( s ) {
+
+       // This transport only deals with cross domain requests
+       if ( s.crossDomain ) {
+               var script, callback;
+               return {
+                       send: function( _, complete ) {
+                               script = jQuery( "<script>" ).prop( {
+                                       charset: s.scriptCharset,
+                                       src: s.url
+                               } ).on(
+                                       "load error",
+                                       callback = function( evt ) {
+                                               script.remove();
+                                               callback = null;
+                                               if ( evt ) {
+                                                       complete( evt.type === "error" ? 404 : 200, evt.type );
+                                               }
+                                       }
+                               );
+
+                               // Use native DOM manipulation to avoid our domManip AJAX trickery
+                               document.head.appendChild( script[ 0 ] );
+                       },
+                       abort: function() {
+                               if ( callback ) {
+                                       callback();
+                               }
+                       }
+               };
+       }
+} );
+
+
+
+
+var oldCallbacks = [],
+       rjsonp = /(=)\?(?=&|$)|\?\?/;
+
+// Default jsonp settings
+jQuery.ajaxSetup( {
+       jsonp: "callback",
+       jsonpCallback: function() {
+               var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) );
+               this[ callback ] = true;
+               return callback;
+       }
+} );
+
+// Detect, normalize options and install callbacks for jsonp requests
+jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
+
+       var callbackName, overwritten, responseContainer,
+               jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
+                       "url" :
+                       typeof s.data === "string" &&
+                               ( s.contentType || "" )
+                                       .indexOf( "application/x-www-form-urlencoded" ) === 0 &&
+                               rjsonp.test( s.data ) && "data"
+               );
+
+       // Handle iff the expected data type is "jsonp" or we have a parameter to set
+       if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
+
+               // Get callback name, remembering preexisting value associated with it
+               callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?
+                       s.jsonpCallback() :
+                       s.jsonpCallback;
+
+               // Insert callback into url or form data
+               if ( jsonProp ) {
+                       s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
+               } else if ( s.jsonp !== false ) {
+                       s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
+               }
+
+               // Use data converter to retrieve json after script execution
+               s.converters[ "script json" ] = function() {
+                       if ( !responseContainer ) {
+                               jQuery.error( callbackName + " was not called" );
+                       }
+                       return responseContainer[ 0 ];
+               };
+
+               // Force json dataType
+               s.dataTypes[ 0 ] = "json";
+
+               // Install callback
+               overwritten = window[ callbackName ];
+               window[ callbackName ] = function() {
+                       responseContainer = arguments;
+               };
+
+               // Clean-up function (fires after converters)
+               jqXHR.always( function() {
+
+                       // If previous value didn't exist - remove it
+                       if ( overwritten === undefined ) {
+                               jQuery( window ).removeProp( callbackName );
+
+                       // Otherwise restore preexisting value
+                       } else {
+                               window[ callbackName ] = overwritten;
+                       }
+
+                       // Save back as free
+                       if ( s[ callbackName ] ) {
+
+                               // Make sure that re-using the options doesn't screw things around
+                               s.jsonpCallback = originalSettings.jsonpCallback;
+
+                               // Save the callback name for future use
+                               oldCallbacks.push( callbackName );
+                       }
+
+                       // Call if it was a function and we have a response
+                       if ( responseContainer && jQuery.isFunction( overwritten ) ) {
+                               overwritten( responseContainer[ 0 ] );
+                       }
+
+                       responseContainer = overwritten = undefined;
+               } );
+
+               // Delegate to script
+               return "script";
+       }
+} );
+
+
+
+
+// Support: Safari 8 only
+// In Safari 8 documents created via document.implementation.createHTMLDocument
+// collapse sibling forms: the second one becomes a child of the first one.
+// Because of that, this security measure has to be disabled in Safari 8.
+// https://bugs.webkit.org/show_bug.cgi?id=137337
+support.createHTMLDocument = ( function() {
+       var body = document.implementation.createHTMLDocument( "" ).body;
+       body.innerHTML = "<form></form><form></form>";
+       return body.childNodes.length === 2;
+} )();
+
+
+// Argument "data" should be string of html
+// context (optional): If specified, the fragment will be created in this context,
+// defaults to document
+// keepScripts (optional): If true, will include scripts passed in the html string
+jQuery.parseHTML = function( data, context, keepScripts ) {
+       if ( typeof data !== "string" ) {
+               return [];
+       }
+       if ( typeof context === "boolean" ) {
+               keepScripts = context;
+               context = false;
+       }
+
+       var base, parsed, scripts;
+
+       if ( !context ) {
+
+               // Stop scripts or inline event handlers from being executed immediately
+               // by using document.implementation
+               if ( support.createHTMLDocument ) {
+                       context = document.implementation.createHTMLDocument( "" );
+
+                       // Set the base href for the created document
+                       // so any parsed elements with URLs
+                       // are based on the document's URL (gh-2965)
+                       base = context.createElement( "base" );
+                       base.href = document.location.href;
+                       context.head.appendChild( base );
+               } else {
+                       context = document;
+               }
+       }
+
+       parsed = rsingleTag.exec( data );
+       scripts = !keepScripts && [];
+
+       // Single tag
+       if ( parsed ) {
+               return [ context.createElement( parsed[ 1 ] ) ];
+       }
+
+       parsed = buildFragment( [ data ], context, scripts );
+
+       if ( scripts && scripts.length ) {
+               jQuery( scripts ).remove();
+       }
+
+       return jQuery.merge( [], parsed.childNodes );
+};
+
+
+/**
+ * Load a url into a page
+ */
+jQuery.fn.load = function( url, params, callback ) {
+       var selector, type, response,
+               self = this,
+               off = url.indexOf( " " );
+
+       if ( off > -1 ) {
+               selector = stripAndCollapse( url.slice( off ) );
+               url = url.slice( 0, off );
+       }
+
+       // If it's a function
+       if ( jQuery.isFunction( params ) ) {
+
+               // We assume that it's the callback
+               callback = params;
+               params = undefined;
+
+       // Otherwise, build a param string
+       } else if ( params && typeof params === "object" ) {
+               type = "POST";
+       }
+
+       // If we have elements to modify, make the request
+       if ( self.length > 0 ) {
+               jQuery.ajax( {
+                       url: url,
+
+                       // If "type" variable is undefined, then "GET" method will be used.
+                       // Make value of this field explicit since
+                       // user can override it through ajaxSetup method
+                       type: type || "GET",
+                       dataType: "html",
+                       data: params
+               } ).done( function( responseText ) {
+
+                       // Save response for use in complete callback
+                       response = arguments;
+
+                       self.html( selector ?
+
+                               // If a selector was specified, locate the right elements in a dummy div
+                               // Exclude scripts to avoid IE 'Permission Denied' errors
+                               jQuery( "<div>" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :
+
+                               // Otherwise use the full result
+                               responseText );
+
+               // If the request succeeds, this function gets "data", "status", "jqXHR"
+               // but they are ignored because response was set above.
+               // If it fails, this function gets "jqXHR", "status", "error"
+               } ).always( callback && function( jqXHR, status ) {
+                       self.each( function() {
+                               callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );
+                       } );
+               } );
+       }
+
+       return this;
+};
+
+
+
+
+// Attach a bunch of functions for handling common AJAX events
+jQuery.each( [
+       "ajaxStart",
+       "ajaxStop",
+       "ajaxComplete",
+       "ajaxError",
+       "ajaxSuccess",
+       "ajaxSend"
+], function( i, type ) {
+       jQuery.fn[ type ] = function( fn ) {
+               return this.on( type, fn );
+       };
+} );
+
+
+
+
+jQuery.expr.pseudos.animated = function( elem ) {
+       return jQuery.grep( jQuery.timers, function( fn ) {
+               return elem === fn.elem;
+       } ).length;
+};
+
+
+
+
+jQuery.offset = {
+       setOffset: function( elem, options, i ) {
+               var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,
+                       position = jQuery.css( elem, "position" ),
+                       curElem = jQuery( elem ),
+                       props = {};
+
+               // Set position first, in-case top/left are set even on static elem
+               if ( position === "static" ) {
+                       elem.style.position = "relative";
+               }
+
+               curOffset = curElem.offset();
+               curCSSTop = jQuery.css( elem, "top" );
+               curCSSLeft = jQuery.css( elem, "left" );
+               calculatePosition = ( position === "absolute" || position === "fixed" ) &&
+                       ( curCSSTop + curCSSLeft ).indexOf( "auto" ) > -1;
+
+               // Need to be able to calculate position if either
+               // top or left is auto and position is either absolute or fixed
+               if ( calculatePosition ) {
+                       curPosition = curElem.position();
+                       curTop = curPosition.top;
+                       curLeft = curPosition.left;
+
+               } else {
+                       curTop = parseFloat( curCSSTop ) || 0;
+                       curLeft = parseFloat( curCSSLeft ) || 0;
+               }
+
+               if ( jQuery.isFunction( options ) ) {
+
+                       // Use jQuery.extend here to allow modification of coordinates argument (gh-1848)
+                       options = options.call( elem, i, jQuery.extend( {}, curOffset ) );
+               }
+
+               if ( options.top != null ) {
+                       props.top = ( options.top - curOffset.top ) + curTop;
+               }
+               if ( options.left != null ) {
+                       props.left = ( options.left - curOffset.left ) + curLeft;
+               }
+
+               if ( "using" in options ) {
+                       options.using.call( elem, props );
+
+               } else {
+                       curElem.css( props );
+               }
+       }
+};
+
+jQuery.fn.extend( {
+       offset: function( options ) {
+
+               // Preserve chaining for setter
+               if ( arguments.length ) {
+                       return options === undefined ?
+                               this :
+                               this.each( function( i ) {
+                                       jQuery.offset.setOffset( this, options, i );
+                               } );
+               }
+
+               var doc, docElem, rect, win,
+                       elem = this[ 0 ];
+
+               if ( !elem ) {
+                       return;
+               }
+
+               // Return zeros for disconnected and hidden (display: none) elements (gh-2310)
+               // Support: IE <=11 only
+               // Running getBoundingClientRect on a
+               // disconnected node in IE throws an error
+               if ( !elem.getClientRects().length ) {
+                       return { top: 0, left: 0 };
+               }
+
+               rect = elem.getBoundingClientRect();
+
+               doc = elem.ownerDocument;
+               docElem = doc.documentElement;
+               win = doc.defaultView;
+
+               return {
+                       top: rect.top + win.pageYOffset - docElem.clientTop,
+                       left: rect.left + win.pageXOffset - docElem.clientLeft
+               };
+       },
+
+       position: function() {
+               if ( !this[ 0 ] ) {
+                       return;
+               }
+
+               var offsetParent, offset,
+                       elem = this[ 0 ],
+                       parentOffset = { top: 0, left: 0 };
+
+               // Fixed elements are offset from window (parentOffset = {top:0, left: 0},
+               // because it is its only offset parent
+               if ( jQuery.css( elem, "position" ) === "fixed" ) {
+
+                       // Assume getBoundingClientRect is there when computed position is fixed
+                       offset = elem.getBoundingClientRect();
+
+               } else {
+
+                       // Get *real* offsetParent
+                       offsetParent = this.offsetParent();
+
+                       // Get correct offsets
+                       offset = this.offset();
+                       if ( !nodeName( offsetParent[ 0 ], "html" ) ) {
+                               parentOffset = offsetParent.offset();
+                       }
+
+                       // Add offsetParent borders
+                       parentOffset = {
+                               top: parentOffset.top + jQuery.css( offsetParent[ 0 ], "borderTopWidth", true ),
+                               left: parentOffset.left + jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true )
+                       };
+               }
+
+               // Subtract parent offsets and element margins
+               return {
+                       top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ),
+                       left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true )
+               };
+       },
+
+       // This method will return documentElement in the following cases:
+       // 1) For the element inside the iframe without offsetParent, this method will return
+       //    documentElement of the parent window
+       // 2) For the hidden or detached element
+       // 3) For body or html element, i.e. in case of the html node - it will return itself
+       //
+       // but those exceptions were never presented as a real life use-cases
+       // and might be considered as more preferable results.
+       //
+       // This logic, however, is not guaranteed and can change at any point in the future
+       offsetParent: function() {
+               return this.map( function() {
+                       var offsetParent = this.offsetParent;
+
+                       while ( offsetParent && jQuery.css( offsetParent, "position" ) === "static" ) {
+                               offsetParent = offsetParent.offsetParent;
+                       }
+
+                       return offsetParent || documentElement;
+               } );
+       }
+} );
+
+// Create scrollLeft and scrollTop methods
+jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) {
+       var top = "pageYOffset" === prop;
+
+       jQuery.fn[ method ] = function( val ) {
+               return access( this, function( elem, method, val ) {
+
+                       // Coalesce documents and windows
+                       var win;
+                       if ( jQuery.isWindow( elem ) ) {
+                               win = elem;
+                       } else if ( elem.nodeType === 9 ) {
+                               win = elem.defaultView;
+                       }
+
+                       if ( val === undefined ) {
+                               return win ? win[ prop ] : elem[ method ];
+                       }
+
+                       if ( win ) {
+                               win.scrollTo(
+                                       !top ? val : win.pageXOffset,
+                                       top ? val : win.pageYOffset
+                               );
+
+                       } else {
+                               elem[ method ] = val;
+                       }
+               }, method, val, arguments.length );
+       };
+} );
+
+// Support: Safari <=7 - 9.1, Chrome <=37 - 49
+// Add the top/left cssHooks using jQuery.fn.position
+// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
+// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347
+// getComputedStyle returns percent when specified for top/left/bottom/right;
+// rather than make the css module depend on the offset module, just check for it here
+jQuery.each( [ "top", "left" ], function( i, prop ) {
+       jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,
+               function( elem, computed ) {
+                       if ( computed ) {
+                               computed = curCSS( elem, prop );
+
+                               // If curCSS returns percentage, fallback to offset
+                               return rnumnonpx.test( computed ) ?
+                                       jQuery( elem ).position()[ prop ] + "px" :
+                                       computed;
+                       }
+               }
+       );
+} );
+
+
+// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
+jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
+       jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name },
+               function( defaultExtra, funcName ) {
+
+               // Margin is only for outerHeight, outerWidth
+               jQuery.fn[ funcName ] = function( margin, value ) {
+                       var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
+                               extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
+
+                       return access( this, function( elem, type, value ) {
+                               var doc;
+
+                               if ( jQuery.isWindow( elem ) ) {
+
+                                       // $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)
+                                       return funcName.indexOf( "outer" ) === 0 ?
+                                               elem[ "inner" + name ] :
+                                               elem.document.documentElement[ "client" + name ];
+                               }
+
+                               // Get document width or height
+                               if ( elem.nodeType === 9 ) {
+                                       doc = elem.documentElement;
+
+                                       // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],
+                                       // whichever is greatest
+                                       return Math.max(
+                                               elem.body[ "scroll" + name ], doc[ "scroll" + name ],
+                                               elem.body[ "offset" + name ], doc[ "offset" + name ],
+                                               doc[ "client" + name ]
+                                       );
+                               }
+
+                               return value === undefined ?
+
+                                       // Get width or height on the element, requesting but not forcing parseFloat
+                                       jQuery.css( elem, type, extra ) :
+
+                                       // Set width or height on the element
+                                       jQuery.style( elem, type, value, extra );
+                       }, type, chainable ? margin : undefined, chainable );
+               };
+       } );
+} );
+
+
+jQuery.fn.extend( {
+
+       bind: function( types, data, fn ) {
+               return this.on( types, null, data, fn );
+       },
+       unbind: function( types, fn ) {
+               return this.off( types, null, fn );
+       },
+
+       delegate: function( selector, types, data, fn ) {
+               return this.on( types, selector, data, fn );
+       },
+       undelegate: function( selector, types, fn ) {
+
+               // ( namespace ) or ( selector, types [, fn] )
+               return arguments.length === 1 ?
+                       this.off( selector, "**" ) :
+                       this.off( types, selector || "**", fn );
+       }
+} );
+
+jQuery.holdReady = function( hold ) {
+       if ( hold ) {
+               jQuery.readyWait++;
+       } else {
+               jQuery.ready( true );
+       }
+};
+jQuery.isArray = Array.isArray;
+jQuery.parseJSON = JSON.parse;
+jQuery.nodeName = nodeName;
+
+
+
+
+// Register as a named AMD module, since jQuery can be concatenated with other
+// files that may use define, but not via a proper concatenation script that
+// understands anonymous AMD modules. A named AMD is safest and most robust
+// way to register. Lowercase jquery is used because AMD module names are
+// derived from file names, and jQuery is normally delivered in a lowercase
+// file name. Do this after creating the global so that if an AMD module wants
+// to call noConflict to hide this version of jQuery, it will work.
+
+// Note that for maximum portability, libraries that are not jQuery should
+// declare themselves as anonymous modules, and avoid setting a global if an
+// AMD loader is present. jQuery is a special case. For more information, see
+// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon
+
+if ( typeof define === "function" && define.amd ) {
+       define( "jquery", [], function() {
+               return jQuery;
+       } );
+}
+
+
+
+
+var
+
+       // Map over jQuery in case of overwrite
+       _jQuery = window.jQuery,
+
+       // Map over the $ in case of overwrite
+       _$ = window.$;
+
+jQuery.noConflict = function( deep ) {
+       if ( window.$ === jQuery ) {
+               window.$ = _$;
+       }
+
+       if ( deep && window.jQuery === jQuery ) {
+               window.jQuery = _jQuery;
+       }
+
+       return jQuery;
+};
+
+// Expose jQuery and $ identifiers, even in AMD
+// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
+// and CommonJS for browser emulators (#13566)
+if ( !noGlobal ) {
+       window.jQuery = window.$ = jQuery;
+}
+
+
+
+
+return jQuery;
+} );
diff --git a/js/jquery/dist/jquery.min.js b/js/jquery/dist/jquery.min.js
new file mode 100644 (file)
index 0000000..644d35e
--- /dev/null
@@ -0,0 +1,4 @@
+/*! jQuery v3.2.1 | (c) JS Foundation and other contributors | jquery.org/license */
+!function(a,b){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){"use strict";var c=[],d=a.document,e=Object.getPrototypeOf,f=c.slice,g=c.concat,h=c.push,i=c.indexOf,j={},k=j.toString,l=j.hasOwnProperty,m=l.toString,n=m.call(Object),o={};function p(a,b){b=b||d;var c=b.createElement("script");c.text=a,b.head.appendChild(c).parentNode.removeChild(c)}var q="3.2.1",r=function(a,b){return new r.fn.init(a,b)},s=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,t=/^-ms-/,u=/-([a-z])/g,v=function(a,b){return b.toUpperCase()};r.fn=r.prototype={jquery:q,constructor:r,length:0,toArray:function(){return f.call(this)},get:function(a){return null==a?f.call(this):a<0?this[a+this.length]:this[a]},pushStack:function(a){var b=r.merge(this.constructor(),a);return b.prevObject=this,b},each:function(a){return r.each(this,a)},map:function(a){return this.pushStack(r.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(f.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(a<0?b:0);return this.pushStack(c>=0&&c<b?[this[c]]:[])},end:function(){return this.prevObject||this.constructor()},push:h,sort:c.sort,splice:c.splice},r.extend=r.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||r.isFunction(g)||(g={}),h===i&&(g=this,h--);h<i;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(r.isPlainObject(d)||(e=Array.isArray(d)))?(e?(e=!1,f=c&&Array.isArray(c)?c:[]):f=c&&r.isPlainObject(c)?c:{},g[b]=r.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},r.extend({expando:"jQuery"+(q+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===r.type(a)},isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){var b=r.type(a);return("number"===b||"string"===b)&&!isNaN(a-parseFloat(a))},isPlainObject:function(a){var b,c;return!(!a||"[object Object]"!==k.call(a))&&(!(b=e(a))||(c=l.call(b,"constructor")&&b.constructor,"function"==typeof c&&m.call(c)===n))},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?j[k.call(a)]||"object":typeof a},globalEval:function(a){p(a)},camelCase:function(a){return a.replace(t,"ms-").replace(u,v)},each:function(a,b){var c,d=0;if(w(a)){for(c=a.length;d<c;d++)if(b.call(a[d],d,a[d])===!1)break}else for(d in a)if(b.call(a[d],d,a[d])===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(s,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(w(Object(a))?r.merge(c,"string"==typeof a?[a]:a):h.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:i.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;d<c;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;f<g;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,e,f=0,h=[];if(w(a))for(d=a.length;f<d;f++)e=b(a[f],f,c),null!=e&&h.push(e);else for(f in a)e=b(a[f],f,c),null!=e&&h.push(e);return g.apply([],h)},guid:1,proxy:function(a,b){var c,d,e;if("string"==typeof b&&(c=a[b],b=a,a=c),r.isFunction(a))return d=f.call(arguments,2),e=function(){return a.apply(b||this,d.concat(f.call(arguments)))},e.guid=a.guid=a.guid||r.guid++,e},now:Date.now,support:o}),"function"==typeof Symbol&&(r.fn[Symbol.iterator]=c[Symbol.iterator]),r.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(a,b){j["[object "+b+"]"]=b.toLowerCase()});function w(a){var b=!!a&&"length"in a&&a.length,c=r.type(a);return"function"!==c&&!r.isWindow(a)&&("array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a)}var x=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=function(a,b){for(var c=0,d=a.length;c<d;c++)if(a[c]===b)return c;return-1},J="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",K="[\\x20\\t\\r\\n\\f]",L="(?:\\\\.|[\\w-]|[^\0-\\xa0])+",M="\\["+K+"*("+L+")(?:"+K+"*([*^$|!~]?=)"+K+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+L+"))|)"+K+"*\\]",N=":("+L+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+M+")*)|.*)\\)|)",O=new RegExp(K+"+","g"),P=new RegExp("^"+K+"+|((?:^|[^\\\\])(?:\\\\.)*)"+K+"+$","g"),Q=new RegExp("^"+K+"*,"+K+"*"),R=new RegExp("^"+K+"*([>+~]|"+K+")"+K+"*"),S=new RegExp("="+K+"*([^\\]'\"]*?)"+K+"*\\]","g"),T=new RegExp(N),U=new RegExp("^"+L+"$"),V={ID:new RegExp("^#("+L+")"),CLASS:new RegExp("^\\.("+L+")"),TAG:new RegExp("^("+L+"|[*])"),ATTR:new RegExp("^"+M),PSEUDO:new RegExp("^"+N),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+K+"*(even|odd|(([+-]|)(\\d*)n|)"+K+"*(?:([+-]|)"+K+"*(\\d+)|))"+K+"*\\)|)","i"),bool:new RegExp("^(?:"+J+")$","i"),needsContext:new RegExp("^"+K+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+K+"*((?:-\\d)?\\d*)"+K+"*\\)|)(?=[^-]|$)","i")},W=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Y=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,$=/[+~]/,_=new RegExp("\\\\([\\da-f]{1,6}"+K+"?|("+K+")|.)","ig"),aa=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:d<0?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ba=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ca=function(a,b){return b?"\0"===a?"\ufffd":a.slice(0,-1)+"\\"+a.charCodeAt(a.length-1).toString(16)+" ":"\\"+a},da=function(){m()},ea=ta(function(a){return a.disabled===!0&&("form"in a||"label"in a)},{dir:"parentNode",next:"legend"});try{G.apply(D=H.call(v.childNodes),v.childNodes),D[v.childNodes.length].nodeType}catch(fa){G={apply:D.length?function(a,b){F.apply(a,H.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s=b&&b.ownerDocument,w=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==w&&9!==w&&11!==w)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==w&&(l=Z.exec(a)))if(f=l[1]){if(9===w){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(s&&(j=s.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(l[2])return G.apply(d,b.getElementsByTagName(a)),d;if((f=l[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==w)s=b,r=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(ba,ca):b.setAttribute("id",k=u),o=g(a),h=o.length;while(h--)o[h]="#"+k+" "+sa(o[h]);r=o.join(","),s=$.test(a)&&qa(b.parentNode)||b}if(r)try{return G.apply(d,s.querySelectorAll(r)),d}catch(x){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(P,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("fieldset");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&a.sourceIndex-b.sourceIndex;if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return function(b){return"form"in b?b.parentNode&&b.disabled===!1?"label"in b?"label"in b.parentNode?b.parentNode.disabled===a:b.disabled===a:b.isDisabled===a||b.isDisabled!==!a&&ea(b)===a:b.disabled===a:"label"in b&&b.disabled===a}}function pa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function qa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return!!b&&"HTML"!==b.nodeName},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),v!==n&&(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Y.test(n.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){return a.getAttribute("id")===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}}):(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c,d,e,f=b.getElementById(a);if(f){if(c=f.getAttributeNode("id"),c&&c.value===a)return[f];e=b.getElementsByName(a),d=0;while(f=e[d++])if(c=f.getAttributeNode("id"),c&&c.value===a)return[f]}return[]}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){if("undefined"!=typeof b.getElementsByClassName&&p)return b.getElementsByClassName(a)},r=[],q=[],(c.qsa=Y.test(n.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="<a id='"+u+"'></a><select id='"+u+"-\r\\' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+K+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+K+"*(?:value|"+J+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){a.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+K+"*[*^$|!~]?="),2!==a.querySelectorAll(":enabled").length&&q.push(":enabled",":disabled"),o.appendChild(a).disabled=!0,2!==a.querySelectorAll(":disabled").length&&q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Y.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"*"),s.call(a,"[s!='']:x"),r.push("!=",N)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Y.test(o.compareDocumentPosition),t=b||Y.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?I(k,a)-I(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?I(k,a)-I(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?la(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(S,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.escape=function(a){return(a+"").replace(ba,ca)},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(_,aa),a[3]=(a[3]||a[4]||a[5]||"").replace(_,aa),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return V.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&T.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(_,aa).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+K+")"+a+"("+K+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:!b||(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(O," ")+" ").indexOf(c)>-1:"|="===b&&(e===c||e.slice(0,c.length+1)===c+"-"))}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(P,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(_,aa),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return U.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(_,aa).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:oa(!1),disabled:oa(!0),checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return X.test(a.nodeName)},input:function(a){return W.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:pa(function(){return[0]}),last:pa(function(a,b){return[b-1]}),eq:pa(function(a,b,c){return[c<0?c+b:c]}),even:pa(function(a,b){for(var c=0;c<b;c+=2)a.push(c);return a}),odd:pa(function(a,b){for(var c=1;c<b;c+=2)a.push(c);return a}),lt:pa(function(a,b,c){for(var d=c<0?c+b:c;--d>=0;)a.push(d);return a}),gt:pa(function(a,b,c){for(var d=c<0?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=ma(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=na(b);function ra(){}ra.prototype=d.filters=d.pseudos,d.setFilters=new ra,g=ga.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){c&&!(e=Q.exec(h))||(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=R.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(P," ")}),h=h.slice(c.length));for(g in d.filter)!(e=V[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?ga.error(a):z(a,i).slice(0)};function sa(a){for(var b=0,c=a.length,d="";b<c;b++)d+=a[b].value;return d}function ta(a,b,c){var d=b.dir,e=b.next,f=e||d,g=c&&"parentNode"===f,h=x++;return b.first?function(b,c,e){while(b=b[d])if(1===b.nodeType||g)return a(b,c,e);return!1}:function(b,c,i){var j,k,l,m=[w,h];if(i){while(b=b[d])if((1===b.nodeType||g)&&a(b,c,i))return!0}else while(b=b[d])if(1===b.nodeType||g)if(l=b[u]||(b[u]={}),k=l[b.uniqueID]||(l[b.uniqueID]={}),e&&e===b.nodeName.toLowerCase())b=b[d]||b;else{if((j=k[f])&&j[0]===w&&j[1]===h)return m[2]=j[2];if(k[f]=m,m[2]=a(b,c,i))return!0}return!1}}function ua(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function va(a,b,c){for(var d=0,e=b.length;d<e;d++)ga(a,b[d],c);return c}function wa(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;h<i;h++)(f=a[h])&&(c&&!c(f,d,e)||(g.push(f),j&&b.push(h)));return g}function xa(a,b,c,d,e,f){return d&&!d[u]&&(d=xa(d)),e&&!e[u]&&(e=xa(e,f)),ia(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||va(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:wa(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=wa(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?I(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=wa(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ya(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ta(function(a){return a===b},h,!0),l=ta(function(a){return I(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];i<f;i++)if(c=d.relative[a[i].type])m=[ta(ua(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;e<f;e++)if(d.relative[a[e].type])break;return xa(i>1&&ua(m),i>1&&sa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(P,"$1"),c,i<e&&ya(a.slice(i,e)),e<f&&ya(a=a.slice(e)),e<f&&sa(a))}m.push(c)}return ua(m)}function za(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=E.call(i));u=wa(u)}G.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&ga.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=ya(b[c]),f[u]?d.push(f):e.push(f);f=A(a,za(e,d)),f.selector=a}return f},i=ga.select=function(a,b,c,e){var f,i,j,k,l,m="function"==typeof a&&a,n=!e&&g(a=m.selector||a);if(c=c||[],1===n.length){if(i=n[0]=n[0].slice(0),i.length>2&&"ID"===(j=i[0]).type&&9===b.nodeType&&p&&d.relative[i[1].type]){if(b=(d.find.ID(j.matches[0].replace(_,aa),b)||[])[0],!b)return c;m&&(b=b.parentNode),a=a.slice(i.shift().value.length)}f=V.needsContext.test(a)?0:i.length;while(f--){if(j=i[f],d.relative[k=j.type])break;if((l=d.find[k])&&(e=l(j.matches[0].replace(_,aa),$.test(i[0].type)&&qa(b.parentNode)||b))){if(i.splice(f,1),a=e.length&&sa(i),!a)return G.apply(c,e),c;break}}}return(m||h(a,n))(e,b,!p,c,!b||$.test(a)&&qa(b.parentNode)||b),c},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("fieldset"))}),ja(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){if(!c)return a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){if(!c&&"input"===a.nodeName.toLowerCase())return a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(J,function(a,b,c){var d;if(!c)return a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);r.find=x,r.expr=x.selectors,r.expr[":"]=r.expr.pseudos,r.uniqueSort=r.unique=x.uniqueSort,r.text=x.getText,r.isXMLDoc=x.isXML,r.contains=x.contains,r.escapeSelector=x.escape;var y=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&r(a).is(c))break;d.push(a)}return d},z=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},A=r.expr.match.needsContext;function B(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()}var C=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i,D=/^.[^:#\[\.,]*$/;function E(a,b,c){return r.isFunction(b)?r.grep(a,function(a,d){return!!b.call(a,d,a)!==c}):b.nodeType?r.grep(a,function(a){return a===b!==c}):"string"!=typeof b?r.grep(a,function(a){return i.call(b,a)>-1!==c}):D.test(b)?r.filter(b,a,c):(b=r.filter(b,a),r.grep(a,function(a){return i.call(b,a)>-1!==c&&1===a.nodeType}))}r.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?r.find.matchesSelector(d,a)?[d]:[]:r.find.matches(a,r.grep(b,function(a){return 1===a.nodeType}))},r.fn.extend({find:function(a){var b,c,d=this.length,e=this;if("string"!=typeof a)return this.pushStack(r(a).filter(function(){for(b=0;b<d;b++)if(r.contains(e[b],this))return!0}));for(c=this.pushStack([]),b=0;b<d;b++)r.find(a,e[b],c);return d>1?r.uniqueSort(c):c},filter:function(a){return this.pushStack(E(this,a||[],!1))},not:function(a){return this.pushStack(E(this,a||[],!0))},is:function(a){return!!E(this,"string"==typeof a&&A.test(a)?r(a):a||[],!1).length}});var F,G=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,H=r.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||F,"string"==typeof a){if(e="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:G.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof r?b[0]:b,r.merge(this,r.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),C.test(e[1])&&r.isPlainObject(b))for(e in b)r.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}return f=d.getElementById(e[2]),f&&(this[0]=f,this.length=1),this}return a.nodeType?(this[0]=a,this.length=1,this):r.isFunction(a)?void 0!==c.ready?c.ready(a):a(r):r.makeArray(a,this)};H.prototype=r.fn,F=r(d);var I=/^(?:parents|prev(?:Until|All))/,J={children:!0,contents:!0,next:!0,prev:!0};r.fn.extend({has:function(a){var b=r(a,this),c=b.length;return this.filter(function(){for(var a=0;a<c;a++)if(r.contains(this,b[a]))return!0})},closest:function(a,b){var c,d=0,e=this.length,f=[],g="string"!=typeof a&&r(a);if(!A.test(a))for(;d<e;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&r.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?r.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?i.call(r(a),this[0]):i.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(r.uniqueSort(r.merge(this.get(),r(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function K(a,b){while((a=a[b])&&1!==a.nodeType);return a}r.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return y(a,"parentNode")},parentsUntil:function(a,b,c){return y(a,"parentNode",c)},next:function(a){return K(a,"nextSibling")},prev:function(a){return K(a,"previousSibling")},nextAll:function(a){return y(a,"nextSibling")},prevAll:function(a){return y(a,"previousSibling")},nextUntil:function(a,b,c){return y(a,"nextSibling",c)},prevUntil:function(a,b,c){return y(a,"previousSibling",c)},siblings:function(a){return z((a.parentNode||{}).firstChild,a)},children:function(a){return z(a.firstChild)},contents:function(a){return B(a,"iframe")?a.contentDocument:(B(a,"template")&&(a=a.content||a),r.merge([],a.childNodes))}},function(a,b){r.fn[a]=function(c,d){var e=r.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=r.filter(d,e)),this.length>1&&(J[a]||r.uniqueSort(e),I.test(a)&&e.reverse()),this.pushStack(e)}});var L=/[^\x20\t\r\n\f]+/g;function M(a){var b={};return r.each(a.match(L)||[],function(a,c){b[c]=!0}),b}r.Callbacks=function(a){a="string"==typeof a?M(a):r.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=e||a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h<f.length)f[h].apply(c[0],c[1])===!1&&a.stopOnFalse&&(h=f.length,c=!1)}a.memory||(c=!1),b=!1,e&&(f=c?[]:"")},j={add:function(){return f&&(c&&!b&&(h=f.length-1,g.push(c)),function d(b){r.each(b,function(b,c){r.isFunction(c)?a.unique&&j.has(c)||f.push(c):c&&c.length&&"string"!==r.type(c)&&d(c)})}(arguments),c&&!b&&i()),this},remove:function(){return r.each(arguments,function(a,b){var c;while((c=r.inArray(b,f,c))>-1)f.splice(c,1),c<=h&&h--}),this},has:function(a){return a?r.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=g=[],c||b||(f=c=""),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j};function N(a){return a}function O(a){throw a}function P(a,b,c,d){var e;try{a&&r.isFunction(e=a.promise)?e.call(a).done(b).fail(c):a&&r.isFunction(e=a.then)?e.call(a,b,c):b.apply(void 0,[a].slice(d))}catch(a){c.apply(void 0,[a])}}r.extend({Deferred:function(b){var c=[["notify","progress",r.Callbacks("memory"),r.Callbacks("memory"),2],["resolve","done",r.Callbacks("once memory"),r.Callbacks("once memory"),0,"resolved"],["reject","fail",r.Callbacks("once memory"),r.Callbacks("once memory"),1,"rejected"]],d="pending",e={state:function(){return d},always:function(){return f.done(arguments).fail(arguments),this},"catch":function(a){return e.then(null,a)},pipe:function(){var a=arguments;return r.Deferred(function(b){r.each(c,function(c,d){var e=r.isFunction(a[d[4]])&&a[d[4]];f[d[1]](function(){var a=e&&e.apply(this,arguments);a&&r.isFunction(a.promise)?a.promise().progress(b.notify).done(b.resolve).fail(b.reject):b[d[0]+"With"](this,e?[a]:arguments)})}),a=null}).promise()},then:function(b,d,e){var f=0;function g(b,c,d,e){return function(){var h=this,i=arguments,j=function(){var a,j;if(!(b<f)){if(a=d.apply(h,i),a===c.promise())throw new TypeError("Thenable self-resolution");j=a&&("object"==typeof a||"function"==typeof a)&&a.then,r.isFunction(j)?e?j.call(a,g(f,c,N,e),g(f,c,O,e)):(f++,j.call(a,g(f,c,N,e),g(f,c,O,e),g(f,c,N,c.notifyWith))):(d!==N&&(h=void 0,i=[a]),(e||c.resolveWith)(h,i))}},k=e?j:function(){try{j()}catch(a){r.Deferred.exceptionHook&&r.Deferred.exceptionHook(a,k.stackTrace),b+1>=f&&(d!==O&&(h=void 0,i=[a]),c.rejectWith(h,i))}};b?k():(r.Deferred.getStackHook&&(k.stackTrace=r.Deferred.getStackHook()),a.setTimeout(k))}}return r.Deferred(function(a){c[0][3].add(g(0,a,r.isFunction(e)?e:N,a.notifyWith)),c[1][3].add(g(0,a,r.isFunction(b)?b:N)),c[2][3].add(g(0,a,r.isFunction(d)?d:O))}).promise()},promise:function(a){return null!=a?r.extend(a,e):e}},f={};return r.each(c,function(a,b){var g=b[2],h=b[5];e[b[1]]=g.add,h&&g.add(function(){d=h},c[3-a][2].disable,c[0][2].lock),g.add(b[3].fire),f[b[0]]=function(){return f[b[0]+"With"](this===f?void 0:this,arguments),this},f[b[0]+"With"]=g.fireWith}),e.promise(f),b&&b.call(f,f),f},when:function(a){var b=arguments.length,c=b,d=Array(c),e=f.call(arguments),g=r.Deferred(),h=function(a){return function(c){d[a]=this,e[a]=arguments.length>1?f.call(arguments):c,--b||g.resolveWith(d,e)}};if(b<=1&&(P(a,g.done(h(c)).resolve,g.reject,!b),"pending"===g.state()||r.isFunction(e[c]&&e[c].then)))return g.then();while(c--)P(e[c],h(c),g.reject);return g.promise()}});var Q=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;r.Deferred.exceptionHook=function(b,c){a.console&&a.console.warn&&b&&Q.test(b.name)&&a.console.warn("jQuery.Deferred exception: "+b.message,b.stack,c)},r.readyException=function(b){a.setTimeout(function(){throw b})};var R=r.Deferred();r.fn.ready=function(a){return R.then(a)["catch"](function(a){r.readyException(a)}),this},r.extend({isReady:!1,readyWait:1,ready:function(a){(a===!0?--r.readyWait:r.isReady)||(r.isReady=!0,a!==!0&&--r.readyWait>0||R.resolveWith(d,[r]))}}),r.ready.then=R.then;function S(){d.removeEventListener("DOMContentLoaded",S),
+a.removeEventListener("load",S),r.ready()}"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll?a.setTimeout(r.ready):(d.addEventListener("DOMContentLoaded",S),a.addEventListener("load",S));var T=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===r.type(c)){e=!0;for(h in c)T(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,r.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(r(a),c)})),b))for(;h<i;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},U=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function V(){this.expando=r.expando+V.uid++}V.uid=1,V.prototype={cache:function(a){var b=a[this.expando];return b||(b={},U(a)&&(a.nodeType?a[this.expando]=b:Object.defineProperty(a,this.expando,{value:b,configurable:!0}))),b},set:function(a,b,c){var d,e=this.cache(a);if("string"==typeof b)e[r.camelCase(b)]=c;else for(d in b)e[r.camelCase(d)]=b[d];return e},get:function(a,b){return void 0===b?this.cache(a):a[this.expando]&&a[this.expando][r.camelCase(b)]},access:function(a,b,c){return void 0===b||b&&"string"==typeof b&&void 0===c?this.get(a,b):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d=a[this.expando];if(void 0!==d){if(void 0!==b){Array.isArray(b)?b=b.map(r.camelCase):(b=r.camelCase(b),b=b in d?[b]:b.match(L)||[]),c=b.length;while(c--)delete d[b[c]]}(void 0===b||r.isEmptyObject(d))&&(a.nodeType?a[this.expando]=void 0:delete a[this.expando])}},hasData:function(a){var b=a[this.expando];return void 0!==b&&!r.isEmptyObject(b)}};var W=new V,X=new V,Y=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,Z=/[A-Z]/g;function $(a){return"true"===a||"false"!==a&&("null"===a?null:a===+a+""?+a:Y.test(a)?JSON.parse(a):a)}function _(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(Z,"-$&").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c=$(c)}catch(e){}X.set(a,b,c)}else c=void 0;return c}r.extend({hasData:function(a){return X.hasData(a)||W.hasData(a)},data:function(a,b,c){return X.access(a,b,c)},removeData:function(a,b){X.remove(a,b)},_data:function(a,b,c){return W.access(a,b,c)},_removeData:function(a,b){W.remove(a,b)}}),r.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=X.get(f),1===f.nodeType&&!W.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=r.camelCase(d.slice(5)),_(f,d,e[d])));W.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){X.set(this,a)}):T(this,function(b){var c;if(f&&void 0===b){if(c=X.get(f,a),void 0!==c)return c;if(c=_(f,a),void 0!==c)return c}else this.each(function(){X.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){X.remove(this,a)})}}),r.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=W.get(a,b),c&&(!d||Array.isArray(c)?d=W.access(a,b,r.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=r.queue(a,b),d=c.length,e=c.shift(),f=r._queueHooks(a,b),g=function(){r.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return W.get(a,c)||W.access(a,c,{empty:r.Callbacks("once memory").add(function(){W.remove(a,[b+"queue",c])})})}}),r.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?r.queue(this[0],a):void 0===b?this:this.each(function(){var c=r.queue(this,a,b);r._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&r.dequeue(this,a)})},dequeue:function(a){return this.each(function(){r.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=r.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=W.get(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var aa=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,ba=new RegExp("^(?:([+-])=|)("+aa+")([a-z%]*)$","i"),ca=["Top","Right","Bottom","Left"],da=function(a,b){return a=b||a,"none"===a.style.display||""===a.style.display&&r.contains(a.ownerDocument,a)&&"none"===r.css(a,"display")},ea=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};function fa(a,b,c,d){var e,f=1,g=20,h=d?function(){return d.cur()}:function(){return r.css(a,b,"")},i=h(),j=c&&c[3]||(r.cssNumber[b]?"":"px"),k=(r.cssNumber[b]||"px"!==j&&+i)&&ba.exec(r.css(a,b));if(k&&k[3]!==j){j=j||k[3],c=c||[],k=+i||1;do f=f||".5",k/=f,r.style(a,b,k+j);while(f!==(f=h()/i)&&1!==f&&--g)}return c&&(k=+k||+i||0,e=c[1]?k+(c[1]+1)*c[2]:+c[2],d&&(d.unit=j,d.start=k,d.end=e)),e}var ga={};function ha(a){var b,c=a.ownerDocument,d=a.nodeName,e=ga[d];return e?e:(b=c.body.appendChild(c.createElement(d)),e=r.css(b,"display"),b.parentNode.removeChild(b),"none"===e&&(e="block"),ga[d]=e,e)}function ia(a,b){for(var c,d,e=[],f=0,g=a.length;f<g;f++)d=a[f],d.style&&(c=d.style.display,b?("none"===c&&(e[f]=W.get(d,"display")||null,e[f]||(d.style.display="")),""===d.style.display&&da(d)&&(e[f]=ha(d))):"none"!==c&&(e[f]="none",W.set(d,"display",c)));for(f=0;f<g;f++)null!=e[f]&&(a[f].style.display=e[f]);return a}r.fn.extend({show:function(){return ia(this,!0)},hide:function(){return ia(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){da(this)?r(this).show():r(this).hide()})}});var ja=/^(?:checkbox|radio)$/i,ka=/<([a-z][^\/\0>\x20\t\r\n\f]+)/i,la=/^$|\/(?:java|ecma)script/i,ma={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ma.optgroup=ma.option,ma.tbody=ma.tfoot=ma.colgroup=ma.caption=ma.thead,ma.th=ma.td;function na(a,b){var c;return c="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):[],void 0===b||b&&B(a,b)?r.merge([a],c):c}function oa(a,b){for(var c=0,d=a.length;c<d;c++)W.set(a[c],"globalEval",!b||W.get(b[c],"globalEval"))}var pa=/<|&#?\w+;/;function qa(a,b,c,d,e){for(var f,g,h,i,j,k,l=b.createDocumentFragment(),m=[],n=0,o=a.length;n<o;n++)if(f=a[n],f||0===f)if("object"===r.type(f))r.merge(m,f.nodeType?[f]:f);else if(pa.test(f)){g=g||l.appendChild(b.createElement("div")),h=(ka.exec(f)||["",""])[1].toLowerCase(),i=ma[h]||ma._default,g.innerHTML=i[1]+r.htmlPrefilter(f)+i[2],k=i[0];while(k--)g=g.lastChild;r.merge(m,g.childNodes),g=l.firstChild,g.textContent=""}else m.push(b.createTextNode(f));l.textContent="",n=0;while(f=m[n++])if(d&&r.inArray(f,d)>-1)e&&e.push(f);else if(j=r.contains(f.ownerDocument,f),g=na(l.appendChild(f),"script"),j&&oa(g),c){k=0;while(f=g[k++])la.test(f.type||"")&&c.push(f)}return l}!function(){var a=d.createDocumentFragment(),b=a.appendChild(d.createElement("div")),c=d.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),o.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="<textarea>x</textarea>",o.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var ra=d.documentElement,sa=/^key/,ta=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,ua=/^([^.]*)(?:\.(.+)|)/;function va(){return!0}function wa(){return!1}function xa(){try{return d.activeElement}catch(a){}}function ya(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)ya(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=wa;else if(!e)return a;return 1===f&&(g=e,e=function(a){return r().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=r.guid++)),a.each(function(){r.event.add(this,b,e,d,c)})}r.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=W.get(a);if(q){c.handler&&(f=c,c=f.handler,e=f.selector),e&&r.find.matchesSelector(ra,e),c.guid||(c.guid=r.guid++),(i=q.events)||(i=q.events={}),(g=q.handle)||(g=q.handle=function(b){return"undefined"!=typeof r&&r.event.triggered!==b.type?r.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(L)||[""],j=b.length;while(j--)h=ua.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n&&(l=r.event.special[n]||{},n=(e?l.delegateType:l.bindType)||n,l=r.event.special[n]||{},k=r.extend({type:n,origType:p,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&r.expr.match.needsContext.test(e),namespace:o.join(".")},f),(m=i[n])||(m=i[n]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,o,g)!==!1||a.addEventListener&&a.addEventListener(n,g)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),r.event.global[n]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=W.hasData(a)&&W.get(a);if(q&&(i=q.events)){b=(b||"").match(L)||[""],j=b.length;while(j--)if(h=ua.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n){l=r.event.special[n]||{},n=(d?l.delegateType:l.bindType)||n,m=i[n]||[],h=h[2]&&new RegExp("(^|\\.)"+o.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&p!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,o,q.handle)!==!1||r.removeEvent(a,n,q.handle),delete i[n])}else for(n in i)r.event.remove(a,n+b[j],c,d,!0);r.isEmptyObject(i)&&W.remove(a,"handle events")}},dispatch:function(a){var b=r.event.fix(a),c,d,e,f,g,h,i=new Array(arguments.length),j=(W.get(this,"events")||{})[b.type]||[],k=r.event.special[b.type]||{};for(i[0]=b,c=1;c<arguments.length;c++)i[c]=arguments[c];if(b.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,b)!==!1){h=r.event.handlers.call(this,b,j),c=0;while((f=h[c++])&&!b.isPropagationStopped()){b.currentTarget=f.elem,d=0;while((g=f.handlers[d++])&&!b.isImmediatePropagationStopped())b.rnamespace&&!b.rnamespace.test(g.namespace)||(b.handleObj=g,b.data=g.data,e=((r.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(b.result=e)===!1&&(b.preventDefault(),b.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,b),b.result}},handlers:function(a,b){var c,d,e,f,g,h=[],i=b.delegateCount,j=a.target;if(i&&j.nodeType&&!("click"===a.type&&a.button>=1))for(;j!==this;j=j.parentNode||this)if(1===j.nodeType&&("click"!==a.type||j.disabled!==!0)){for(f=[],g={},c=0;c<i;c++)d=b[c],e=d.selector+" ",void 0===g[e]&&(g[e]=d.needsContext?r(e,this).index(j)>-1:r.find(e,this,null,[j]).length),g[e]&&f.push(d);f.length&&h.push({elem:j,handlers:f})}return j=this,i<b.length&&h.push({elem:j,handlers:b.slice(i)}),h},addProp:function(a,b){Object.defineProperty(r.Event.prototype,a,{enumerable:!0,configurable:!0,get:r.isFunction(b)?function(){if(this.originalEvent)return b(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[a]},set:function(b){Object.defineProperty(this,a,{enumerable:!0,configurable:!0,writable:!0,value:b})}})},fix:function(a){return a[r.expando]?a:new r.Event(a)},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==xa()&&this.focus)return this.focus(),!1},delegateType:"focusin"},blur:{trigger:function(){if(this===xa()&&this.blur)return this.blur(),!1},delegateType:"focusout"},click:{trigger:function(){if("checkbox"===this.type&&this.click&&B(this,"input"))return this.click(),!1},_default:function(a){return B(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}}},r.removeEvent=function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c)},r.Event=function(a,b){return this instanceof r.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?va:wa,this.target=a.target&&3===a.target.nodeType?a.target.parentNode:a.target,this.currentTarget=a.currentTarget,this.relatedTarget=a.relatedTarget):this.type=a,b&&r.extend(this,b),this.timeStamp=a&&a.timeStamp||r.now(),void(this[r.expando]=!0)):new r.Event(a,b)},r.Event.prototype={constructor:r.Event,isDefaultPrevented:wa,isPropagationStopped:wa,isImmediatePropagationStopped:wa,isSimulated:!1,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=va,a&&!this.isSimulated&&a.preventDefault()},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=va,a&&!this.isSimulated&&a.stopPropagation()},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=va,a&&!this.isSimulated&&a.stopImmediatePropagation(),this.stopPropagation()}},r.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(a){var b=a.button;return null==a.which&&sa.test(a.type)?null!=a.charCode?a.charCode:a.keyCode:!a.which&&void 0!==b&&ta.test(a.type)?1&b?1:2&b?3:4&b?2:0:a.which}},r.event.addProp),r.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){r.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return e&&(e===d||r.contains(d,e))||(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),r.fn.extend({on:function(a,b,c,d){return ya(this,a,b,c,d)},one:function(a,b,c,d){return ya(this,a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,r(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return b!==!1&&"function"!=typeof b||(c=b,b=void 0),c===!1&&(c=wa),this.each(function(){r.event.remove(this,a,c,b)})}});var za=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,Aa=/<script|<style|<link/i,Ba=/checked\s*(?:[^=]|=\s*.checked.)/i,Ca=/^true\/(.*)/,Da=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function Ea(a,b){return B(a,"table")&&B(11!==b.nodeType?b:b.firstChild,"tr")?r(">tbody",a)[0]||a:a}function Fa(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function Ga(a){var b=Ca.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Ha(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(W.hasData(a)&&(f=W.access(a),g=W.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;c<d;c++)r.event.add(b,e,j[e][c])}X.hasData(a)&&(h=X.access(a),i=r.extend({},h),X.set(b,i))}}function Ia(a,b){var c=b.nodeName.toLowerCase();"input"===c&&ja.test(a.type)?b.checked=a.checked:"input"!==c&&"textarea"!==c||(b.defaultValue=a.defaultValue)}function Ja(a,b,c,d){b=g.apply([],b);var e,f,h,i,j,k,l=0,m=a.length,n=m-1,q=b[0],s=r.isFunction(q);if(s||m>1&&"string"==typeof q&&!o.checkClone&&Ba.test(q))return a.each(function(e){var f=a.eq(e);s&&(b[0]=q.call(this,e,f.html())),Ja(f,b,c,d)});if(m&&(e=qa(b,a[0].ownerDocument,!1,a,d),f=e.firstChild,1===e.childNodes.length&&(e=f),f||d)){for(h=r.map(na(e,"script"),Fa),i=h.length;l<m;l++)j=e,l!==n&&(j=r.clone(j,!0,!0),i&&r.merge(h,na(j,"script"))),c.call(a[l],j,l);if(i)for(k=h[h.length-1].ownerDocument,r.map(h,Ga),l=0;l<i;l++)j=h[l],la.test(j.type||"")&&!W.access(j,"globalEval")&&r.contains(k,j)&&(j.src?r._evalUrl&&r._evalUrl(j.src):p(j.textContent.replace(Da,""),k))}return a}function Ka(a,b,c){for(var d,e=b?r.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||r.cleanData(na(d)),d.parentNode&&(c&&r.contains(d.ownerDocument,d)&&oa(na(d,"script")),d.parentNode.removeChild(d));return a}r.extend({htmlPrefilter:function(a){return a.replace(za,"<$1></$2>")},clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=r.contains(a.ownerDocument,a);if(!(o.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||r.isXMLDoc(a)))for(g=na(h),f=na(a),d=0,e=f.length;d<e;d++)Ia(f[d],g[d]);if(b)if(c)for(f=f||na(a),g=g||na(h),d=0,e=f.length;d<e;d++)Ha(f[d],g[d]);else Ha(a,h);return g=na(h,"script"),g.length>0&&oa(g,!i&&na(a,"script")),h},cleanData:function(a){for(var b,c,d,e=r.event.special,f=0;void 0!==(c=a[f]);f++)if(U(c)){if(b=c[W.expando]){if(b.events)for(d in b.events)e[d]?r.event.remove(c,d):r.removeEvent(c,d,b.handle);c[W.expando]=void 0}c[X.expando]&&(c[X.expando]=void 0)}}}),r.fn.extend({detach:function(a){return Ka(this,a,!0)},remove:function(a){return Ka(this,a)},text:function(a){return T(this,function(a){return void 0===a?r.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=a)})},null,a,arguments.length)},append:function(){return Ja(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ea(this,a);b.appendChild(a)}})},prepend:function(){return Ja(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ea(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ja(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ja(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(r.cleanData(na(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null!=a&&a,b=null==b?a:b,this.map(function(){return r.clone(this,a,b)})},html:function(a){return T(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!Aa.test(a)&&!ma[(ka.exec(a)||["",""])[1].toLowerCase()]){a=r.htmlPrefilter(a);try{for(;c<d;c++)b=this[c]||{},1===b.nodeType&&(r.cleanData(na(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return Ja(this,arguments,function(b){var c=this.parentNode;r.inArray(this,a)<0&&(r.cleanData(na(this)),c&&c.replaceChild(b,this))},a)}}),r.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){r.fn[a]=function(a){for(var c,d=[],e=r(a),f=e.length-1,g=0;g<=f;g++)c=g===f?this:this.clone(!0),r(e[g])[b](c),h.apply(d,c.get());return this.pushStack(d)}});var La=/^margin/,Ma=new RegExp("^("+aa+")(?!px)[a-z%]+$","i"),Na=function(b){var c=b.ownerDocument.defaultView;return c&&c.opener||(c=a),c.getComputedStyle(b)};!function(){function b(){if(i){i.style.cssText="box-sizing:border-box;position:relative;display:block;margin:auto;border:1px;padding:1px;top:1%;width:50%",i.innerHTML="",ra.appendChild(h);var b=a.getComputedStyle(i);c="1%"!==b.top,g="2px"===b.marginLeft,e="4px"===b.width,i.style.marginRight="50%",f="4px"===b.marginRight,ra.removeChild(h),i=null}}var c,e,f,g,h=d.createElement("div"),i=d.createElement("div");i.style&&(i.style.backgroundClip="content-box",i.cloneNode(!0).style.backgroundClip="",o.clearCloneStyle="content-box"===i.style.backgroundClip,h.style.cssText="border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute",h.appendChild(i),r.extend(o,{pixelPosition:function(){return b(),c},boxSizingReliable:function(){return b(),e},pixelMarginRight:function(){return b(),f},reliableMarginLeft:function(){return b(),g}}))}();function Oa(a,b,c){var d,e,f,g,h=a.style;return c=c||Na(a),c&&(g=c.getPropertyValue(b)||c[b],""!==g||r.contains(a.ownerDocument,a)||(g=r.style(a,b)),!o.pixelMarginRight()&&Ma.test(g)&&La.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0!==g?g+"":g}function Pa(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}var Qa=/^(none|table(?!-c[ea]).+)/,Ra=/^--/,Sa={position:"absolute",visibility:"hidden",display:"block"},Ta={letterSpacing:"0",fontWeight:"400"},Ua=["Webkit","Moz","ms"],Va=d.createElement("div").style;function Wa(a){if(a in Va)return a;var b=a[0].toUpperCase()+a.slice(1),c=Ua.length;while(c--)if(a=Ua[c]+b,a in Va)return a}function Xa(a){var b=r.cssProps[a];return b||(b=r.cssProps[a]=Wa(a)||a),b}function Ya(a,b,c){var d=ba.exec(b);return d?Math.max(0,d[2]-(c||0))+(d[3]||"px"):b}function Za(a,b,c,d,e){var f,g=0;for(f=c===(d?"border":"content")?4:"width"===b?1:0;f<4;f+=2)"margin"===c&&(g+=r.css(a,c+ca[f],!0,e)),d?("content"===c&&(g-=r.css(a,"padding"+ca[f],!0,e)),"margin"!==c&&(g-=r.css(a,"border"+ca[f]+"Width",!0,e))):(g+=r.css(a,"padding"+ca[f],!0,e),"padding"!==c&&(g+=r.css(a,"border"+ca[f]+"Width",!0,e)));return g}function $a(a,b,c){var d,e=Na(a),f=Oa(a,b,e),g="border-box"===r.css(a,"boxSizing",!1,e);return Ma.test(f)?f:(d=g&&(o.boxSizingReliable()||f===a.style[b]),"auto"===f&&(f=a["offset"+b[0].toUpperCase()+b.slice(1)]),f=parseFloat(f)||0,f+Za(a,b,c||(g?"border":"content"),d,e)+"px")}r.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Oa(a,"opacity");return""===c?"1":c}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=r.camelCase(b),i=Ra.test(b),j=a.style;return i||(b=Xa(h)),g=r.cssHooks[b]||r.cssHooks[h],void 0===c?g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:j[b]:(f=typeof c,"string"===f&&(e=ba.exec(c))&&e[1]&&(c=fa(a,b,e),f="number"),null!=c&&c===c&&("number"===f&&(c+=e&&e[3]||(r.cssNumber[h]?"":"px")),o.clearCloneStyle||""!==c||0!==b.indexOf("background")||(j[b]="inherit"),g&&"set"in g&&void 0===(c=g.set(a,c,d))||(i?j.setProperty(b,c):j[b]=c)),void 0)}},css:function(a,b,c,d){var e,f,g,h=r.camelCase(b),i=Ra.test(b);return i||(b=Xa(h)),g=r.cssHooks[b]||r.cssHooks[h],g&&"get"in g&&(e=g.get(a,!0,c)),void 0===e&&(e=Oa(a,b,d)),"normal"===e&&b in Ta&&(e=Ta[b]),""===c||c?(f=parseFloat(e),c===!0||isFinite(f)?f||0:e):e}}),r.each(["height","width"],function(a,b){r.cssHooks[b]={get:function(a,c,d){if(c)return!Qa.test(r.css(a,"display"))||a.getClientRects().length&&a.getBoundingClientRect().width?$a(a,b,d):ea(a,Sa,function(){return $a(a,b,d)})},set:function(a,c,d){var e,f=d&&Na(a),g=d&&Za(a,b,d,"border-box"===r.css(a,"boxSizing",!1,f),f);return g&&(e=ba.exec(c))&&"px"!==(e[3]||"px")&&(a.style[b]=c,c=r.css(a,b)),Ya(a,c,g)}}}),r.cssHooks.marginLeft=Pa(o.reliableMarginLeft,function(a,b){if(b)return(parseFloat(Oa(a,"marginLeft"))||a.getBoundingClientRect().left-ea(a,{marginLeft:0},function(){return a.getBoundingClientRect().left}))+"px"}),r.each({margin:"",padding:"",border:"Width"},function(a,b){r.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];d<4;d++)e[a+ca[d]+b]=f[d]||f[d-2]||f[0];return e}},La.test(a)||(r.cssHooks[a+b].set=Ya)}),r.fn.extend({css:function(a,b){return T(this,function(a,b,c){var d,e,f={},g=0;if(Array.isArray(b)){for(d=Na(a),e=b.length;g<e;g++)f[b[g]]=r.css(a,b[g],!1,d);return f}return void 0!==c?r.style(a,b,c):r.css(a,b)},a,b,arguments.length>1)}});function _a(a,b,c,d,e){return new _a.prototype.init(a,b,c,d,e)}r.Tween=_a,_a.prototype={constructor:_a,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||r.easing._default,this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(r.cssNumber[c]?"":"px")},cur:function(){var a=_a.propHooks[this.prop];return a&&a.get?a.get(this):_a.propHooks._default.get(this)},run:function(a){var b,c=_a.propHooks[this.prop];return this.options.duration?this.pos=b=r.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):_a.propHooks._default.set(this),this}},_a.prototype.init.prototype=_a.prototype,_a.propHooks={_default:{get:function(a){var b;return 1!==a.elem.nodeType||null!=a.elem[a.prop]&&null==a.elem.style[a.prop]?a.elem[a.prop]:(b=r.css(a.elem,a.prop,""),b&&"auto"!==b?b:0)},set:function(a){r.fx.step[a.prop]?r.fx.step[a.prop](a):1!==a.elem.nodeType||null==a.elem.style[r.cssProps[a.prop]]&&!r.cssHooks[a.prop]?a.elem[a.prop]=a.now:r.style(a.elem,a.prop,a.now+a.unit)}}},_a.propHooks.scrollTop=_a.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},r.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},_default:"swing"},r.fx=_a.prototype.init,r.fx.step={};var ab,bb,cb=/^(?:toggle|show|hide)$/,db=/queueHooks$/;function eb(){bb&&(d.hidden===!1&&a.requestAnimationFrame?a.requestAnimationFrame(eb):a.setTimeout(eb,r.fx.interval),r.fx.tick())}function fb(){return a.setTimeout(function(){ab=void 0}),ab=r.now()}function gb(a,b){var c,d=0,e={height:a};for(b=b?1:0;d<4;d+=2-b)c=ca[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function hb(a,b,c){for(var d,e=(kb.tweeners[b]||[]).concat(kb.tweeners["*"]),f=0,g=e.length;f<g;f++)if(d=e[f].call(c,b,a))return d}function ib(a,b,c){var d,e,f,g,h,i,j,k,l="width"in b||"height"in b,m=this,n={},o=a.style,p=a.nodeType&&da(a),q=W.get(a,"fxshow");c.queue||(g=r._queueHooks(a,"fx"),null==g.unqueued&&(g.unqueued=0,h=g.empty.fire,g.empty.fire=function(){g.unqueued||h()}),g.unqueued++,m.always(function(){m.always(function(){g.unqueued--,r.queue(a,"fx").length||g.empty.fire()})}));for(d in b)if(e=b[d],cb.test(e)){if(delete b[d],f=f||"toggle"===e,e===(p?"hide":"show")){if("show"!==e||!q||void 0===q[d])continue;p=!0}n[d]=q&&q[d]||r.style(a,d)}if(i=!r.isEmptyObject(b),i||!r.isEmptyObject(n)){l&&1===a.nodeType&&(c.overflow=[o.overflow,o.overflowX,o.overflowY],j=q&&q.display,null==j&&(j=W.get(a,"display")),k=r.css(a,"display"),"none"===k&&(j?k=j:(ia([a],!0),j=a.style.display||j,k=r.css(a,"display"),ia([a]))),("inline"===k||"inline-block"===k&&null!=j)&&"none"===r.css(a,"float")&&(i||(m.done(function(){o.display=j}),null==j&&(k=o.display,j="none"===k?"":k)),o.display="inline-block")),c.overflow&&(o.overflow="hidden",m.always(function(){o.overflow=c.overflow[0],o.overflowX=c.overflow[1],o.overflowY=c.overflow[2]})),i=!1;for(d in n)i||(q?"hidden"in q&&(p=q.hidden):q=W.access(a,"fxshow",{display:j}),f&&(q.hidden=!p),p&&ia([a],!0),m.done(function(){p||ia([a]),W.remove(a,"fxshow");for(d in n)r.style(a,d,n[d])})),i=hb(p?q[d]:0,d,m),d in q||(q[d]=i.start,p&&(i.end=i.start,i.start=0))}}function jb(a,b){var c,d,e,f,g;for(c in a)if(d=r.camelCase(c),e=b[d],f=a[c],Array.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=r.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function kb(a,b,c){var d,e,f=0,g=kb.prefilters.length,h=r.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=ab||fb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;g<i;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),f<1&&i?c:(i||h.notifyWith(a,[j,1,0]),h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:r.extend({},b),opts:r.extend(!0,{specialEasing:{},easing:r.easing._default},c),originalProperties:b,originalOptions:c,startTime:ab||fb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=r.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;c<d;c++)j.tweens[c].run(1);return b?(h.notifyWith(a,[j,1,0]),h.resolveWith(a,[j,b])):h.rejectWith(a,[j,b]),this}}),k=j.props;for(jb(k,j.opts.specialEasing);f<g;f++)if(d=kb.prefilters[f].call(j,a,k,j.opts))return r.isFunction(d.stop)&&(r._queueHooks(j.elem,j.opts.queue).stop=r.proxy(d.stop,d)),d;return r.map(k,hb,j),r.isFunction(j.opts.start)&&j.opts.start.call(a,j),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always),r.fx.timer(r.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j}r.Animation=r.extend(kb,{tweeners:{"*":[function(a,b){var c=this.createTween(a,b);return fa(c.elem,a,ba.exec(b),c),c}]},tweener:function(a,b){r.isFunction(a)?(b=a,a=["*"]):a=a.match(L);for(var c,d=0,e=a.length;d<e;d++)c=a[d],kb.tweeners[c]=kb.tweeners[c]||[],kb.tweeners[c].unshift(b)},prefilters:[ib],prefilter:function(a,b){b?kb.prefilters.unshift(a):kb.prefilters.push(a)}}),r.speed=function(a,b,c){var d=a&&"object"==typeof a?r.extend({},a):{complete:c||!c&&b||r.isFunction(a)&&a,duration:a,easing:c&&b||b&&!r.isFunction(b)&&b};return r.fx.off?d.duration=0:"number"!=typeof d.duration&&(d.duration in r.fx.speeds?d.duration=r.fx.speeds[d.duration]:d.duration=r.fx.speeds._default),null!=d.queue&&d.queue!==!0||(d.queue="fx"),d.old=d.complete,d.complete=function(){r.isFunction(d.old)&&d.old.call(this),d.queue&&r.dequeue(this,d.queue)},d},r.fn.extend({fadeTo:function(a,b,c,d){return this.filter(da).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=r.isEmptyObject(a),f=r.speed(b,c,d),g=function(){var b=kb(this,r.extend({},a),f);(e||W.get(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=r.timers,g=W.get(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&db.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));!b&&c||r.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=W.get(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=r.timers,g=d?d.length:0;for(c.finish=!0,r.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;b<g;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),r.each(["toggle","show","hide"],function(a,b){var c=r.fn[b];r.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(gb(b,!0),a,d,e)}}),r.each({slideDown:gb("show"),slideUp:gb("hide"),slideToggle:gb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){r.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),r.timers=[],r.fx.tick=function(){var a,b=0,c=r.timers;for(ab=r.now();b<c.length;b++)a=c[b],a()||c[b]!==a||c.splice(b--,1);c.length||r.fx.stop(),ab=void 0},r.fx.timer=function(a){r.timers.push(a),r.fx.start()},r.fx.interval=13,r.fx.start=function(){bb||(bb=!0,eb())},r.fx.stop=function(){bb=null},r.fx.speeds={slow:600,fast:200,_default:400},r.fn.delay=function(b,c){return b=r.fx?r.fx.speeds[b]||b:b,c=c||"fx",this.queue(c,function(c,d){var e=a.setTimeout(c,b);d.stop=function(){a.clearTimeout(e)}})},function(){var a=d.createElement("input"),b=d.createElement("select"),c=b.appendChild(d.createElement("option"));a.type="checkbox",o.checkOn=""!==a.value,o.optSelected=c.selected,a=d.createElement("input"),a.value="t",a.type="radio",o.radioValue="t"===a.value}();var lb,mb=r.expr.attrHandle;r.fn.extend({attr:function(a,b){return T(this,r.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){r.removeAttr(this,a)})}}),r.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return"undefined"==typeof a.getAttribute?r.prop(a,b,c):(1===f&&r.isXMLDoc(a)||(e=r.attrHooks[b.toLowerCase()]||(r.expr.match.bool.test(b)?lb:void 0)),void 0!==c?null===c?void r.removeAttr(a,b):e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:(a.setAttribute(b,c+""),c):e&&"get"in e&&null!==(d=e.get(a,b))?d:(d=r.find.attr(a,b),
+null==d?void 0:d))},attrHooks:{type:{set:function(a,b){if(!o.radioValue&&"radio"===b&&B(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,d=0,e=b&&b.match(L);if(e&&1===a.nodeType)while(c=e[d++])a.removeAttribute(c)}}),lb={set:function(a,b,c){return b===!1?r.removeAttr(a,c):a.setAttribute(c,c),c}},r.each(r.expr.match.bool.source.match(/\w+/g),function(a,b){var c=mb[b]||r.find.attr;mb[b]=function(a,b,d){var e,f,g=b.toLowerCase();return d||(f=mb[g],mb[g]=e,e=null!=c(a,b,d)?g:null,mb[g]=f),e}});var nb=/^(?:input|select|textarea|button)$/i,ob=/^(?:a|area)$/i;r.fn.extend({prop:function(a,b){return T(this,r.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[r.propFix[a]||a]})}}),r.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&r.isXMLDoc(a)||(b=r.propFix[b]||b,e=r.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=r.find.attr(a,"tabindex");return b?parseInt(b,10):nb.test(a.nodeName)||ob.test(a.nodeName)&&a.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),o.optSelected||(r.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null},set:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}}),r.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){r.propFix[this.toLowerCase()]=this});function pb(a){var b=a.match(L)||[];return b.join(" ")}function qb(a){return a.getAttribute&&a.getAttribute("class")||""}r.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).addClass(a.call(this,b,qb(this)))});if("string"==typeof a&&a){b=a.match(L)||[];while(c=this[i++])if(e=qb(c),d=1===c.nodeType&&" "+pb(e)+" "){g=0;while(f=b[g++])d.indexOf(" "+f+" ")<0&&(d+=f+" ");h=pb(d),e!==h&&c.setAttribute("class",h)}}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).removeClass(a.call(this,b,qb(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof a&&a){b=a.match(L)||[];while(c=this[i++])if(e=qb(c),d=1===c.nodeType&&" "+pb(e)+" "){g=0;while(f=b[g++])while(d.indexOf(" "+f+" ")>-1)d=d.replace(" "+f+" "," ");h=pb(d),e!==h&&c.setAttribute("class",h)}}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):r.isFunction(a)?this.each(function(c){r(this).toggleClass(a.call(this,c,qb(this),b),b)}):this.each(function(){var b,d,e,f;if("string"===c){d=0,e=r(this),f=a.match(L)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else void 0!==a&&"boolean"!==c||(b=qb(this),b&&W.set(this,"__className__",b),this.setAttribute&&this.setAttribute("class",b||a===!1?"":W.get(this,"__className__")||""))})},hasClass:function(a){var b,c,d=0;b=" "+a+" ";while(c=this[d++])if(1===c.nodeType&&(" "+pb(qb(c))+" ").indexOf(b)>-1)return!0;return!1}});var rb=/\r/g;r.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=r.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,r(this).val()):a,null==e?e="":"number"==typeof e?e+="":Array.isArray(e)&&(e=r.map(e,function(a){return null==a?"":a+""})),b=r.valHooks[this.type]||r.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=r.valHooks[e.type]||r.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(rb,""):null==c?"":c)}}}),r.extend({valHooks:{option:{get:function(a){var b=r.find.attr(a,"value");return null!=b?b:pb(r.text(a))}},select:{get:function(a){var b,c,d,e=a.options,f=a.selectedIndex,g="select-one"===a.type,h=g?null:[],i=g?f+1:e.length;for(d=f<0?i:g?f:0;d<i;d++)if(c=e[d],(c.selected||d===f)&&!c.disabled&&(!c.parentNode.disabled||!B(c.parentNode,"optgroup"))){if(b=r(c).val(),g)return b;h.push(b)}return h},set:function(a,b){var c,d,e=a.options,f=r.makeArray(b),g=e.length;while(g--)d=e[g],(d.selected=r.inArray(r.valHooks.option.get(d),f)>-1)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),r.each(["radio","checkbox"],function(){r.valHooks[this]={set:function(a,b){if(Array.isArray(b))return a.checked=r.inArray(r(a).val(),b)>-1}},o.checkOn||(r.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var sb=/^(?:focusinfocus|focusoutblur)$/;r.extend(r.event,{trigger:function(b,c,e,f){var g,h,i,j,k,m,n,o=[e||d],p=l.call(b,"type")?b.type:b,q=l.call(b,"namespace")?b.namespace.split("."):[];if(h=i=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!sb.test(p+r.event.triggered)&&(p.indexOf(".")>-1&&(q=p.split("."),p=q.shift(),q.sort()),k=p.indexOf(":")<0&&"on"+p,b=b[r.expando]?b:new r.Event(p,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=q.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:r.makeArray(c,[b]),n=r.event.special[p]||{},f||!n.trigger||n.trigger.apply(e,c)!==!1)){if(!f&&!n.noBubble&&!r.isWindow(e)){for(j=n.delegateType||p,sb.test(j+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),i=h;i===(e.ownerDocument||d)&&o.push(i.defaultView||i.parentWindow||a)}g=0;while((h=o[g++])&&!b.isPropagationStopped())b.type=g>1?j:n.bindType||p,m=(W.get(h,"events")||{})[b.type]&&W.get(h,"handle"),m&&m.apply(h,c),m=k&&h[k],m&&m.apply&&U(h)&&(b.result=m.apply(h,c),b.result===!1&&b.preventDefault());return b.type=p,f||b.isDefaultPrevented()||n._default&&n._default.apply(o.pop(),c)!==!1||!U(e)||k&&r.isFunction(e[p])&&!r.isWindow(e)&&(i=e[k],i&&(e[k]=null),r.event.triggered=p,e[p](),r.event.triggered=void 0,i&&(e[k]=i)),b.result}},simulate:function(a,b,c){var d=r.extend(new r.Event,c,{type:a,isSimulated:!0});r.event.trigger(d,null,b)}}),r.fn.extend({trigger:function(a,b){return this.each(function(){r.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];if(c)return r.event.trigger(a,b,c,!0)}}),r.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(a,b){r.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),r.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),o.focusin="onfocusin"in a,o.focusin||r.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){r.event.simulate(b,a.target,r.event.fix(a))};r.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=W.access(d,b);e||d.addEventListener(a,c,!0),W.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=W.access(d,b)-1;e?W.access(d,b,e):(d.removeEventListener(a,c,!0),W.remove(d,b))}}});var tb=a.location,ub=r.now(),vb=/\?/;r.parseXML=function(b){var c;if(!b||"string"!=typeof b)return null;try{c=(new a.DOMParser).parseFromString(b,"text/xml")}catch(d){c=void 0}return c&&!c.getElementsByTagName("parsererror").length||r.error("Invalid XML: "+b),c};var wb=/\[\]$/,xb=/\r?\n/g,yb=/^(?:submit|button|image|reset|file)$/i,zb=/^(?:input|select|textarea|keygen)/i;function Ab(a,b,c,d){var e;if(Array.isArray(b))r.each(b,function(b,e){c||wb.test(a)?d(a,e):Ab(a+"["+("object"==typeof e&&null!=e?b:"")+"]",e,c,d)});else if(c||"object"!==r.type(b))d(a,b);else for(e in b)Ab(a+"["+e+"]",b[e],c,d)}r.param=function(a,b){var c,d=[],e=function(a,b){var c=r.isFunction(b)?b():b;d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(null==c?"":c)};if(Array.isArray(a)||a.jquery&&!r.isPlainObject(a))r.each(a,function(){e(this.name,this.value)});else for(c in a)Ab(c,a[c],b,e);return d.join("&")},r.fn.extend({serialize:function(){return r.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=r.prop(this,"elements");return a?r.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!r(this).is(":disabled")&&zb.test(this.nodeName)&&!yb.test(a)&&(this.checked||!ja.test(a))}).map(function(a,b){var c=r(this).val();return null==c?null:Array.isArray(c)?r.map(c,function(a){return{name:b.name,value:a.replace(xb,"\r\n")}}):{name:b.name,value:c.replace(xb,"\r\n")}}).get()}});var Bb=/%20/g,Cb=/#.*$/,Db=/([?&])_=[^&]*/,Eb=/^(.*?):[ \t]*([^\r\n]*)$/gm,Fb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Gb=/^(?:GET|HEAD)$/,Hb=/^\/\//,Ib={},Jb={},Kb="*/".concat("*"),Lb=d.createElement("a");Lb.href=tb.href;function Mb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(L)||[];if(r.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Nb(a,b,c,d){var e={},f=a===Jb;function g(h){var i;return e[h]=!0,r.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Ob(a,b){var c,d,e=r.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&r.extend(!0,a,d),a}function Pb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}if(f)return f!==i[0]&&i.unshift(f),c[f]}function Qb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}r.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:tb.href,type:"GET",isLocal:Fb.test(tb.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Kb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":r.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Ob(Ob(a,r.ajaxSettings),b):Ob(r.ajaxSettings,a)},ajaxPrefilter:Mb(Ib),ajaxTransport:Mb(Jb),ajax:function(b,c){"object"==typeof b&&(c=b,b=void 0),c=c||{};var e,f,g,h,i,j,k,l,m,n,o=r.ajaxSetup({},c),p=o.context||o,q=o.context&&(p.nodeType||p.jquery)?r(p):r.event,s=r.Deferred(),t=r.Callbacks("once memory"),u=o.statusCode||{},v={},w={},x="canceled",y={readyState:0,getResponseHeader:function(a){var b;if(k){if(!h){h={};while(b=Eb.exec(g))h[b[1].toLowerCase()]=b[2]}b=h[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return k?g:null},setRequestHeader:function(a,b){return null==k&&(a=w[a.toLowerCase()]=w[a.toLowerCase()]||a,v[a]=b),this},overrideMimeType:function(a){return null==k&&(o.mimeType=a),this},statusCode:function(a){var b;if(a)if(k)y.always(a[y.status]);else for(b in a)u[b]=[u[b],a[b]];return this},abort:function(a){var b=a||x;return e&&e.abort(b),A(0,b),this}};if(s.promise(y),o.url=((b||o.url||tb.href)+"").replace(Hb,tb.protocol+"//"),o.type=c.method||c.type||o.method||o.type,o.dataTypes=(o.dataType||"*").toLowerCase().match(L)||[""],null==o.crossDomain){j=d.createElement("a");try{j.href=o.url,j.href=j.href,o.crossDomain=Lb.protocol+"//"+Lb.host!=j.protocol+"//"+j.host}catch(z){o.crossDomain=!0}}if(o.data&&o.processData&&"string"!=typeof o.data&&(o.data=r.param(o.data,o.traditional)),Nb(Ib,o,c,y),k)return y;l=r.event&&o.global,l&&0===r.active++&&r.event.trigger("ajaxStart"),o.type=o.type.toUpperCase(),o.hasContent=!Gb.test(o.type),f=o.url.replace(Cb,""),o.hasContent?o.data&&o.processData&&0===(o.contentType||"").indexOf("application/x-www-form-urlencoded")&&(o.data=o.data.replace(Bb,"+")):(n=o.url.slice(f.length),o.data&&(f+=(vb.test(f)?"&":"?")+o.data,delete o.data),o.cache===!1&&(f=f.replace(Db,"$1"),n=(vb.test(f)?"&":"?")+"_="+ub++ +n),o.url=f+n),o.ifModified&&(r.lastModified[f]&&y.setRequestHeader("If-Modified-Since",r.lastModified[f]),r.etag[f]&&y.setRequestHeader("If-None-Match",r.etag[f])),(o.data&&o.hasContent&&o.contentType!==!1||c.contentType)&&y.setRequestHeader("Content-Type",o.contentType),y.setRequestHeader("Accept",o.dataTypes[0]&&o.accepts[o.dataTypes[0]]?o.accepts[o.dataTypes[0]]+("*"!==o.dataTypes[0]?", "+Kb+"; q=0.01":""):o.accepts["*"]);for(m in o.headers)y.setRequestHeader(m,o.headers[m]);if(o.beforeSend&&(o.beforeSend.call(p,y,o)===!1||k))return y.abort();if(x="abort",t.add(o.complete),y.done(o.success),y.fail(o.error),e=Nb(Jb,o,c,y)){if(y.readyState=1,l&&q.trigger("ajaxSend",[y,o]),k)return y;o.async&&o.timeout>0&&(i=a.setTimeout(function(){y.abort("timeout")},o.timeout));try{k=!1,e.send(v,A)}catch(z){if(k)throw z;A(-1,z)}}else A(-1,"No Transport");function A(b,c,d,h){var j,m,n,v,w,x=c;k||(k=!0,i&&a.clearTimeout(i),e=void 0,g=h||"",y.readyState=b>0?4:0,j=b>=200&&b<300||304===b,d&&(v=Pb(o,y,d)),v=Qb(o,v,y,j),j?(o.ifModified&&(w=y.getResponseHeader("Last-Modified"),w&&(r.lastModified[f]=w),w=y.getResponseHeader("etag"),w&&(r.etag[f]=w)),204===b||"HEAD"===o.type?x="nocontent":304===b?x="notmodified":(x=v.state,m=v.data,n=v.error,j=!n)):(n=x,!b&&x||(x="error",b<0&&(b=0))),y.status=b,y.statusText=(c||x)+"",j?s.resolveWith(p,[m,x,y]):s.rejectWith(p,[y,x,n]),y.statusCode(u),u=void 0,l&&q.trigger(j?"ajaxSuccess":"ajaxError",[y,o,j?m:n]),t.fireWith(p,[y,x]),l&&(q.trigger("ajaxComplete",[y,o]),--r.active||r.event.trigger("ajaxStop")))}return y},getJSON:function(a,b,c){return r.get(a,b,c,"json")},getScript:function(a,b){return r.get(a,void 0,b,"script")}}),r.each(["get","post"],function(a,b){r[b]=function(a,c,d,e){return r.isFunction(c)&&(e=e||d,d=c,c=void 0),r.ajax(r.extend({url:a,type:b,dataType:e,data:c,success:d},r.isPlainObject(a)&&a))}}),r._evalUrl=function(a){return r.ajax({url:a,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},r.fn.extend({wrapAll:function(a){var b;return this[0]&&(r.isFunction(a)&&(a=a.call(this[0])),b=r(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this},wrapInner:function(a){return r.isFunction(a)?this.each(function(b){r(this).wrapInner(a.call(this,b))}):this.each(function(){var b=r(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=r.isFunction(a);return this.each(function(c){r(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(a){return this.parent(a).not("body").each(function(){r(this).replaceWith(this.childNodes)}),this}}),r.expr.pseudos.hidden=function(a){return!r.expr.pseudos.visible(a)},r.expr.pseudos.visible=function(a){return!!(a.offsetWidth||a.offsetHeight||a.getClientRects().length)},r.ajaxSettings.xhr=function(){try{return new a.XMLHttpRequest}catch(b){}};var Rb={0:200,1223:204},Sb=r.ajaxSettings.xhr();o.cors=!!Sb&&"withCredentials"in Sb,o.ajax=Sb=!!Sb,r.ajaxTransport(function(b){var c,d;if(o.cors||Sb&&!b.crossDomain)return{send:function(e,f){var g,h=b.xhr();if(h.open(b.type,b.url,b.async,b.username,b.password),b.xhrFields)for(g in b.xhrFields)h[g]=b.xhrFields[g];b.mimeType&&h.overrideMimeType&&h.overrideMimeType(b.mimeType),b.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest");for(g in e)h.setRequestHeader(g,e[g]);c=function(a){return function(){c&&(c=d=h.onload=h.onerror=h.onabort=h.onreadystatechange=null,"abort"===a?h.abort():"error"===a?"number"!=typeof h.status?f(0,"error"):f(h.status,h.statusText):f(Rb[h.status]||h.status,h.statusText,"text"!==(h.responseType||"text")||"string"!=typeof h.responseText?{binary:h.response}:{text:h.responseText},h.getAllResponseHeaders()))}},h.onload=c(),d=h.onerror=c("error"),void 0!==h.onabort?h.onabort=d:h.onreadystatechange=function(){4===h.readyState&&a.setTimeout(function(){c&&d()})},c=c("abort");try{h.send(b.hasContent&&b.data||null)}catch(i){if(c)throw i}},abort:function(){c&&c()}}}),r.ajaxPrefilter(function(a){a.crossDomain&&(a.contents.script=!1)}),r.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(a){return r.globalEval(a),a}}}),r.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),r.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(e,f){b=r("<script>").prop({charset:a.scriptCharset,src:a.url}).on("load error",c=function(a){b.remove(),c=null,a&&f("error"===a.type?404:200,a.type)}),d.head.appendChild(b[0])},abort:function(){c&&c()}}}});var Tb=[],Ub=/(=)\?(?=&|$)|\?\?/;r.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=Tb.pop()||r.expando+"_"+ub++;return this[a]=!0,a}}),r.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(Ub.test(b.url)?"url":"string"==typeof b.data&&0===(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ub.test(b.data)&&"data");if(h||"jsonp"===b.dataTypes[0])return e=b.jsonpCallback=r.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(Ub,"$1"+e):b.jsonp!==!1&&(b.url+=(vb.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||r.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){void 0===f?r(a).removeProp(e):a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,Tb.push(e)),g&&r.isFunction(f)&&f(g[0]),g=f=void 0}),"script"}),o.createHTMLDocument=function(){var a=d.implementation.createHTMLDocument("").body;return a.innerHTML="<form></form><form></form>",2===a.childNodes.length}(),r.parseHTML=function(a,b,c){if("string"!=typeof a)return[];"boolean"==typeof b&&(c=b,b=!1);var e,f,g;return b||(o.createHTMLDocument?(b=d.implementation.createHTMLDocument(""),e=b.createElement("base"),e.href=d.location.href,b.head.appendChild(e)):b=d),f=C.exec(a),g=!c&&[],f?[b.createElement(f[1])]:(f=qa([a],b,g),g&&g.length&&r(g).remove(),r.merge([],f.childNodes))},r.fn.load=function(a,b,c){var d,e,f,g=this,h=a.indexOf(" ");return h>-1&&(d=pb(a.slice(h)),a=a.slice(0,h)),r.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&r.ajax({url:a,type:e||"GET",dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?r("<div>").append(r.parseHTML(a)).find(d):a)}).always(c&&function(a,b){g.each(function(){c.apply(this,f||[a.responseText,b,a])})}),this},r.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){r.fn[b]=function(a){return this.on(b,a)}}),r.expr.pseudos.animated=function(a){return r.grep(r.timers,function(b){return a===b.elem}).length},r.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=r.css(a,"position"),l=r(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=r.css(a,"top"),i=r.css(a,"left"),j=("absolute"===k||"fixed"===k)&&(f+i).indexOf("auto")>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),r.isFunction(b)&&(b=b.call(a,c,r.extend({},h))),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},r.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){r.offset.setOffset(this,a,b)});var b,c,d,e,f=this[0];if(f)return f.getClientRects().length?(d=f.getBoundingClientRect(),b=f.ownerDocument,c=b.documentElement,e=b.defaultView,{top:d.top+e.pageYOffset-c.clientTop,left:d.left+e.pageXOffset-c.clientLeft}):{top:0,left:0}},position:function(){if(this[0]){var a,b,c=this[0],d={top:0,left:0};return"fixed"===r.css(c,"position")?b=c.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),B(a[0],"html")||(d=a.offset()),d={top:d.top+r.css(a[0],"borderTopWidth",!0),left:d.left+r.css(a[0],"borderLeftWidth",!0)}),{top:b.top-d.top-r.css(c,"marginTop",!0),left:b.left-d.left-r.css(c,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent;while(a&&"static"===r.css(a,"position"))a=a.offsetParent;return a||ra})}}),r.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c="pageYOffset"===b;r.fn[a]=function(d){return T(this,function(a,d,e){var f;return r.isWindow(a)?f=a:9===a.nodeType&&(f=a.defaultView),void 0===e?f?f[b]:a[d]:void(f?f.scrollTo(c?f.pageXOffset:e,c?e:f.pageYOffset):a[d]=e)},a,d,arguments.length)}}),r.each(["top","left"],function(a,b){r.cssHooks[b]=Pa(o.pixelPosition,function(a,c){if(c)return c=Oa(a,b),Ma.test(c)?r(a).position()[b]+"px":c})}),r.each({Height:"height",Width:"width"},function(a,b){r.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){r.fn[d]=function(e,f){var g=arguments.length&&(c||"boolean"!=typeof e),h=c||(e===!0||f===!0?"margin":"border");return T(this,function(b,c,e){var f;return r.isWindow(b)?0===d.indexOf("outer")?b["inner"+a]:b.document.documentElement["client"+a]:9===b.nodeType?(f=b.documentElement,Math.max(b.body["scroll"+a],f["scroll"+a],b.body["offset"+a],f["offset"+a],f["client"+a])):void 0===e?r.css(b,c,h):r.style(b,c,e,h)},b,g?e:void 0,g)}})}),r.fn.extend({bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}}),r.holdReady=function(a){a?r.readyWait++:r.ready(!0)},r.isArray=Array.isArray,r.parseJSON=JSON.parse,r.nodeName=B,"function"==typeof define&&define.amd&&define("jquery",[],function(){return r});var Vb=a.jQuery,Wb=a.$;return r.noConflict=function(b){return a.$===r&&(a.$=Wb),b&&a.jQuery===r&&(a.jQuery=Vb),r},b||(a.jQuery=a.$=r),r});
diff --git a/js/jquery/dist/jquery.min.map b/js/jquery/dist/jquery.min.map
new file mode 100644 (file)
index 0000000..e8f55ef
--- /dev/null
@@ -0,0 +1 @@
+{"version":3,"sources":["jquery.js"],"names":["global","factory","module","exports","document","w","Error","window","this","noGlobal","arr","getProto","Object","getPrototypeOf","slice","concat","push","indexOf","class2type","toString","hasOwn","hasOwnProperty","fnToString","ObjectFunctionString","call","support","DOMEval","code","doc","script","createElement","text","head","appendChild","parentNode","removeChild","version","jQuery","selector","context","fn","init","rtrim","rmsPrefix","rdashAlpha","fcamelCase","all","letter","toUpperCase","prototype","jquery","constructor","length","toArray","get","num","pushStack","elems","ret","merge","prevObject","each","callback","map","elem","i","apply","arguments","first","eq","last","len","j","end","sort","splice","extend","options","name","src","copy","copyIsArray","clone","target","deep","isFunction","isPlainObject","Array","isArray","undefined","expando","Math","random","replace","isReady","error","msg","noop","obj","type","isWindow","isNumeric","isNaN","parseFloat","proto","Ctor","isEmptyObject","globalEval","camelCase","string","isArrayLike","trim","makeArray","results","inArray","second","grep","invert","callbackInverse","matches","callbackExpect","arg","value","guid","proxy","tmp","args","now","Date","Symbol","iterator","split","toLowerCase","Sizzle","Expr","getText","isXML","tokenize","compile","select","outermostContext","sortInput","hasDuplicate","setDocument","docElem","documentIsHTML","rbuggyQSA","rbuggyMatches","contains","preferredDoc","dirruns","done","classCache","createCache","tokenCache","compilerCache","sortOrder","a","b","pop","push_native","list","booleans","whitespace","identifier","attributes","pseudos","rwhitespace","RegExp","rcomma","rcombinators","rattributeQuotes","rpseudo","ridentifier","matchExpr","ID","CLASS","TAG","ATTR","PSEUDO","CHILD","bool","needsContext","rinputs","rheader","rnative","rquickExpr","rsibling","runescape","funescape","_","escaped","escapedWhitespace","high","String","fromCharCode","rcssescape","fcssescape","ch","asCodePoint","charCodeAt","unloadHandler","disabledAncestor","addCombinator","disabled","dir","next","childNodes","nodeType","e","els","seed","m","nid","match","groups","newSelector","newContext","ownerDocument","exec","getElementById","id","getElementsByTagName","getElementsByClassName","qsa","test","nodeName","getAttribute","setAttribute","toSelector","join","testContext","querySelectorAll","qsaError","removeAttribute","keys","cache","key","cacheLength","shift","markFunction","assert","el","addHandle","attrs","handler","attrHandle","siblingCheck","cur","diff","sourceIndex","nextSibling","createInputPseudo","createButtonPseudo","createDisabledPseudo","isDisabled","createPositionalPseudo","argument","matchIndexes","documentElement","node","hasCompare","subWindow","defaultView","top","addEventListener","attachEvent","className","createComment","getById","getElementsByName","filter","attrId","find","getAttributeNode","tag","innerHTML","input","matchesSelector","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","msMatchesSelector","disconnectedMatch","compareDocumentPosition","adown","bup","compare","sortDetached","aup","ap","bp","unshift","expr","elements","attr","val","specified","escape","sel","uniqueSort","duplicates","detectDuplicates","sortStable","textContent","firstChild","nodeValue","selectors","createPseudo","relative",">"," ","+","~","preFilter","excess","unquoted","nodeNameSelector","pattern","operator","check","result","what","simple","forward","ofType","xml","uniqueCache","outerCache","nodeIndex","start","parent","useCache","lastChild","uniqueID","pseudo","setFilters","idx","matched","not","matcher","unmatched","has","innerText","lang","elemLang","hash","location","root","focus","activeElement","hasFocus","href","tabIndex","enabled","checked","selected","selectedIndex","empty","header","button","even","odd","lt","gt","radio","checkbox","file","password","image","submit","reset","filters","parseOnly","tokens","soFar","preFilters","cached","combinator","base","skip","checkNonElements","doneName","oldCache","newCache","elementMatcher","matchers","multipleContexts","contexts","condense","newUnmatched","mapped","setMatcher","postFilter","postFinder","postSelector","temp","preMap","postMap","preexisting","matcherIn","matcherOut","matcherFromTokens","checkContext","leadingRelative","implicitRelative","matchContext","matchAnyContext","matcherFromGroupMatchers","elementMatchers","setMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","token","compiled","defaultValue","unique","isXMLDoc","escapeSelector","until","truncate","is","siblings","n","rneedsContext","rsingleTag","risSimple","winnow","qualifier","self","rootjQuery","parseHTML","ready","rparentsprev","guaranteedUnique","children","contents","prev","targets","l","closest","index","prevAll","add","addBack","sibling","parents","parentsUntil","nextAll","nextUntil","prevUntil","contentDocument","content","reverse","rnothtmlwhite","createOptions","object","flag","Callbacks","firing","memory","fired","locked","queue","firingIndex","fire","once","stopOnFalse","remove","disable","lock","fireWith","Identity","v","Thrower","ex","adoptValue","resolve","reject","noValue","method","promise","fail","then","Deferred","func","tuples","state","always","deferred","catch","pipe","fns","newDefer","tuple","returned","progress","notify","onFulfilled","onRejected","onProgress","maxDepth","depth","special","that","mightThrow","TypeError","notifyWith","resolveWith","process","exceptionHook","stackTrace","rejectWith","getStackHook","setTimeout","stateString","when","singleValue","remaining","resolveContexts","resolveValues","master","updateFunc","rerrorNames","stack","console","warn","message","readyException","readyList","readyWait","wait","completed","removeEventListener","readyState","doScroll","access","chainable","emptyGet","raw","bulk","acceptData","owner","Data","uid","defineProperty","configurable","set","data","prop","hasData","dataPriv","dataUser","rbrace","rmultiDash","getData","JSON","parse","dataAttr","removeData","_data","_removeData","dequeue","startLength","hooks","_queueHooks","stop","setter","clearQueue","count","defer","pnum","source","rcssNum","cssExpand","isHiddenWithinTree","style","display","css","swap","old","adjustCSS","valueParts","tween","adjusted","scale","maxIterations","currentValue","initial","unit","cssNumber","initialInUnit","defaultDisplayMap","getDefaultDisplay","body","showHide","show","values","hide","toggle","rcheckableType","rtagName","rscriptType","wrapMap","option","thead","col","tr","td","_default","optgroup","tbody","tfoot","colgroup","caption","th","getAll","setGlobalEval","refElements","rhtml","buildFragment","scripts","selection","ignored","wrap","fragment","createDocumentFragment","nodes","htmlPrefilter","createTextNode","div","checkClone","cloneNode","noCloneChecked","rkeyEvent","rmouseEvent","rtypenamespace","returnTrue","returnFalse","safeActiveElement","err","on","types","one","origFn","event","off","handleObjIn","eventHandle","events","t","handleObj","handlers","namespaces","origType","elemData","handle","triggered","dispatch","delegateType","bindType","namespace","delegateCount","setup","mappedTypes","origCount","teardown","removeEvent","nativeEvent","fix","handlerQueue","delegateTarget","preDispatch","isPropagationStopped","currentTarget","isImmediatePropagationStopped","rnamespace","preventDefault","stopPropagation","postDispatch","matchedHandlers","matchedSelectors","addProp","hook","Event","enumerable","originalEvent","writable","load","noBubble","trigger","blur","click","beforeunload","returnValue","props","isDefaultPrevented","defaultPrevented","relatedTarget","timeStamp","isSimulated","stopImmediatePropagation","altKey","bubbles","cancelable","changedTouches","ctrlKey","detail","eventPhase","metaKey","pageX","pageY","shiftKey","view","char","charCode","keyCode","buttons","clientX","clientY","offsetX","offsetY","pointerId","pointerType","screenX","screenY","targetTouches","toElement","touches","which","mouseenter","mouseleave","pointerenter","pointerleave","orig","related","rxhtmlTag","rnoInnerhtml","rchecked","rscriptTypeMasked","rcleanScript","manipulationTarget","disableScript","restoreScript","cloneCopyEvent","dest","pdataOld","pdataCur","udataOld","udataCur","fixInput","domManip","collection","hasScripts","iNoClone","html","_evalUrl","keepData","cleanData","dataAndEvents","deepDataAndEvents","srcElements","destElements","inPage","detach","append","prepend","insertBefore","before","after","replaceWith","replaceChild","appendTo","prependTo","insertAfter","replaceAll","original","insert","rmargin","rnumnonpx","getStyles","opener","getComputedStyle","computeStyleTests","cssText","container","divStyle","pixelPositionVal","reliableMarginLeftVal","marginLeft","boxSizingReliableVal","width","marginRight","pixelMarginRightVal","backgroundClip","clearCloneStyle","pixelPosition","boxSizingReliable","pixelMarginRight","reliableMarginLeft","curCSS","computed","minWidth","maxWidth","getPropertyValue","addGetHookIf","conditionFn","hookFn","rdisplayswap","rcustomProp","cssShow","position","visibility","cssNormalTransform","letterSpacing","fontWeight","cssPrefixes","emptyStyle","vendorPropName","capName","finalPropName","cssProps","setPositiveNumber","subtract","max","augmentWidthOrHeight","extra","isBorderBox","styles","getWidthOrHeight","valueIsBorderBox","cssHooks","opacity","animationIterationCount","columnCount","fillOpacity","flexGrow","flexShrink","lineHeight","order","orphans","widows","zIndex","zoom","float","origName","isCustomProp","setProperty","isFinite","getClientRects","getBoundingClientRect","left","margin","padding","border","prefix","suffix","expand","expanded","parts","Tween","easing","propHooks","run","percent","eased","duration","pos","step","fx","scrollTop","scrollLeft","linear","p","swing","cos","PI","fxNow","inProgress","rfxtypes","rrun","schedule","hidden","requestAnimationFrame","interval","tick","createFxNow","genFx","includeWidth","height","createTween","animation","Animation","tweeners","defaultPrefilter","opts","oldfire","propTween","restoreDisplay","isBox","anim","dataShow","unqueued","overflow","overflowX","overflowY","propFilter","specialEasing","properties","stopped","prefilters","currentTime","startTime","tweens","originalProperties","originalOptions","gotoEnd","complete","timer","*","tweener","prefilter","speed","opt","speeds","fadeTo","to","animate","optall","doAnimation","finish","stopQueue","timers","cssFn","slideDown","slideUp","slideToggle","fadeIn","fadeOut","fadeToggle","slow","fast","delay","time","timeout","clearTimeout","checkOn","optSelected","radioValue","boolHook","removeAttr","nType","attrHooks","attrNames","getter","lowercaseName","rfocusable","rclickable","removeProp","propFix","tabindex","parseInt","for","class","stripAndCollapse","getClass","addClass","classes","curValue","clazz","finalValue","removeClass","toggleClass","stateVal","classNames","hasClass","rreturn","valHooks","optionSet","rfocusMorph","onlyHandlers","bubbleType","ontype","eventPath","isTrigger","parentWindow","simulate","triggerHandler","hover","fnOver","fnOut","focusin","attaches","nonce","rquery","parseXML","DOMParser","parseFromString","rbracket","rCRLF","rsubmitterTypes","rsubmittable","buildParams","traditional","param","s","valueOrFunction","encodeURIComponent","serialize","serializeArray","r20","rhash","rantiCache","rheaders","rlocalProtocol","rnoContent","rprotocol","transports","allTypes","originAnchor","addToPrefiltersOrTransports","structure","dataTypeExpression","dataType","dataTypes","inspectPrefiltersOrTransports","jqXHR","inspected","seekingTransport","inspect","prefilterOrFactory","dataTypeOrTransport","ajaxExtend","flatOptions","ajaxSettings","ajaxHandleResponses","responses","ct","finalDataType","firstDataType","mimeType","getResponseHeader","converters","ajaxConvert","response","isSuccess","conv2","current","conv","responseFields","dataFilter","active","lastModified","etag","url","isLocal","protocol","processData","async","contentType","accepts","json","* text","text html","text json","text xml","ajaxSetup","settings","ajaxPrefilter","ajaxTransport","ajax","transport","cacheURL","responseHeadersString","responseHeaders","timeoutTimer","urlAnchor","fireGlobals","uncached","callbackContext","globalEventContext","completeDeferred","statusCode","requestHeaders","requestHeadersNames","strAbort","getAllResponseHeaders","setRequestHeader","overrideMimeType","status","abort","statusText","finalText","crossDomain","host","hasContent","ifModified","headers","beforeSend","success","send","nativeStatusText","modified","getJSON","getScript","throws","wrapAll","firstElementChild","wrapInner","unwrap","visible","offsetWidth","offsetHeight","xhr","XMLHttpRequest","xhrSuccessStatus","0","1223","xhrSupported","cors","errorCallback","open","username","xhrFields","onload","onerror","onabort","onreadystatechange","responseType","responseText","binary","text script","charset","scriptCharset","evt","oldCallbacks","rjsonp","jsonp","jsonpCallback","originalSettings","callbackName","overwritten","responseContainer","jsonProp","createHTMLDocument","implementation","keepScripts","parsed","params","animated","offset","setOffset","curPosition","curLeft","curCSSTop","curTop","curOffset","curCSSLeft","calculatePosition","curElem","using","rect","win","pageYOffset","clientTop","pageXOffset","clientLeft","offsetParent","parentOffset","scrollTo","Height","Width","","defaultExtra","funcName","bind","unbind","delegate","undelegate","holdReady","hold","parseJSON","define","amd","_jQuery","_$","$","noConflict"],"mappings":";CAaA,SAAYA,EAAQC,GAEnB,YAEuB,iBAAXC,SAAiD,gBAAnBA,QAAOC,QAShDD,OAAOC,QAAUH,EAAOI,SACvBH,EAASD,GAAQ,GACjB,SAAUK,GACT,IAAMA,EAAED,SACP,KAAM,IAAIE,OAAO,2CAElB,OAAOL,GAASI,IAGlBJ,EAASD,IAIY,mBAAXO,QAAyBA,OAASC,KAAM,SAAUD,EAAQE,GAMtE,YAEA,IAAIC,MAEAN,EAAWG,EAAOH,SAElBO,EAAWC,OAAOC,eAElBC,EAAQJ,EAAII,MAEZC,EAASL,EAAIK,OAEbC,EAAON,EAAIM,KAEXC,EAAUP,EAAIO,QAEdC,KAEAC,EAAWD,EAAWC,SAEtBC,EAASF,EAAWG,eAEpBC,EAAaF,EAAOD,SAEpBI,EAAuBD,EAAWE,KAAMZ,QAExCa,IAIH,SAASC,GAASC,EAAMC,GACvBA,EAAMA,GAAOxB,CAEb,IAAIyB,GAASD,EAAIE,cAAe,SAEhCD,GAAOE,KAAOJ,EACdC,EAAII,KAAKC,YAAaJ,GAASK,WAAWC,YAAaN,GAQzD,GACCO,GAAU,QAGVC,EAAS,SAAUC,EAAUC,GAI5B,MAAO,IAAIF,GAAOG,GAAGC,KAAMH,EAAUC,IAKtCG,EAAQ,qCAGRC,EAAY,QACZC,EAAa,YAGbC,EAAa,SAAUC,EAAKC,GAC3B,MAAOA,GAAOC,cAGhBX,GAAOG,GAAKH,EAAOY,WAGlBC,OAAQd,EAERe,YAAad,EAGbe,OAAQ,EAERC,QAAS,WACR,MAAOvC,GAAMU,KAAMhB,OAKpB8C,IAAK,SAAUC,GAGd,MAAY,OAAPA,EACGzC,EAAMU,KAAMhB,MAIb+C,EAAM,EAAI/C,KAAM+C,EAAM/C,KAAK4C,QAAW5C,KAAM+C,IAKpDC,UAAW,SAAUC,GAGpB,GAAIC,GAAMrB,EAAOsB,MAAOnD,KAAK2C,cAAeM,EAM5C,OAHAC,GAAIE,WAAapD,KAGVkD,GAIRG,KAAM,SAAUC,GACf,MAAOzB,GAAOwB,KAAMrD,KAAMsD,IAG3BC,IAAK,SAAUD,GACd,MAAOtD,MAAKgD,UAAWnB,EAAO0B,IAAKvD,KAAM,SAAUwD,EAAMC,GACxD,MAAOH,GAAStC,KAAMwC,EAAMC,EAAGD,OAIjClD,MAAO,WACN,MAAON,MAAKgD,UAAW1C,EAAMoD,MAAO1D,KAAM2D,aAG3CC,MAAO,WACN,MAAO5D,MAAK6D,GAAI,IAGjBC,KAAM,WACL,MAAO9D,MAAK6D,QAGbA,GAAI,SAAUJ,GACb,GAAIM,GAAM/D,KAAK4C,OACdoB,GAAKP,GAAMA,EAAI,EAAIM,EAAM,EAC1B,OAAO/D,MAAKgD,UAAWgB,GAAK,GAAKA,EAAID,GAAQ/D,KAAMgE,SAGpDC,IAAK,WACJ,MAAOjE,MAAKoD,YAAcpD,KAAK2C,eAKhCnC,KAAMA,EACN0D,KAAMhE,EAAIgE,KACVC,OAAQjE,EAAIiE,QAGbtC,EAAOuC,OAASvC,EAAOG,GAAGoC,OAAS,WAClC,GAAIC,GAASC,EAAMC,EAAKC,EAAMC,EAAaC,EAC1CC,EAAShB,UAAW,OACpBF,EAAI,EACJb,EAASe,UAAUf,OACnBgC,GAAO,CAsBR,KAnBuB,iBAAXD,KACXC,EAAOD,EAGPA,EAAShB,UAAWF,OACpBA,KAIsB,gBAAXkB,IAAwB9C,EAAOgD,WAAYF,KACtDA,MAIIlB,IAAMb,IACV+B,EAAS3E,KACTyD,KAGOA,EAAIb,EAAQa,IAGnB,GAAqC,OAA9BY,EAAUV,UAAWF,IAG3B,IAAMa,IAAQD,GACbE,EAAMI,EAAQL,GACdE,EAAOH,EAASC,GAGXK,IAAWH,IAKXI,GAAQJ,IAAU3C,EAAOiD,cAAeN,KAC1CC,EAAcM,MAAMC,QAASR,MAE1BC,GACJA,GAAc,EACdC,EAAQH,GAAOQ,MAAMC,QAAST,GAAQA,MAGtCG,EAAQH,GAAO1C,EAAOiD,cAAeP,GAAQA,KAI9CI,EAAQL,GAASzC,EAAOuC,OAAQQ,EAAMF,EAAOF,IAGzBS,SAATT,IACXG,EAAQL,GAASE,GAOrB,OAAOG,IAGR9C,EAAOuC,QAGNc,QAAS,UAAatD,EAAUuD,KAAKC,UAAWC,QAAS,MAAO,IAGhEC,SAAS,EAETC,MAAO,SAAUC,GAChB,KAAM,IAAI1F,OAAO0F,IAGlBC,KAAM,aAENZ,WAAY,SAAUa,GACrB,MAA8B,aAAvB7D,EAAO8D,KAAMD,IAGrBE,SAAU,SAAUF,GACnB,MAAc,OAAPA,GAAeA,IAAQA,EAAI3F,QAGnC8F,UAAW,SAAUH,GAKpB,GAAIC,GAAO9D,EAAO8D,KAAMD,EACxB,QAAkB,WAATC,GAA8B,WAATA,KAK5BG,MAAOJ,EAAMK,WAAYL,KAG5BZ,cAAe,SAAUY,GACxB,GAAIM,GAAOC,CAIX,UAAMP,GAAgC,oBAAzB/E,EAASK,KAAM0E,QAI5BM,EAAQ7F,EAAUuF,MAQlBO,EAAOrF,EAAOI,KAAMgF,EAAO,gBAAmBA,EAAMrD,YAC7B,kBAATsD,IAAuBnF,EAAWE,KAAMiF,KAAWlF,KAGlEmF,cAAe,SAAUR,GAIxB,GAAIpB,EAEJ,KAAMA,IAAQoB,GACb,OAAO,CAER,QAAO,GAGRC,KAAM,SAAUD,GACf,MAAY,OAAPA,EACGA,EAAM,GAIQ,gBAARA,IAAmC,kBAARA,GACxChF,EAAYC,EAASK,KAAM0E,KAAW,eAC/BA,IAITS,WAAY,SAAUhF,GACrBD,EAASC,IAMViF,UAAW,SAAUC,GACpB,MAAOA,GAAOhB,QAASlD,EAAW,OAAQkD,QAASjD,EAAYC,IAGhEgB,KAAM,SAAUqC,EAAKpC,GACpB,GAAIV,GAAQa,EAAI,CAEhB,IAAK6C,EAAaZ,IAEjB,IADA9C,EAAS8C,EAAI9C,OACLa,EAAIb,EAAQa,IACnB,GAAKH,EAAStC,KAAM0E,EAAKjC,GAAKA,EAAGiC,EAAKjC,OAAU,EAC/C,UAIF,KAAMA,IAAKiC,GACV,GAAKpC,EAAStC,KAAM0E,EAAKjC,GAAKA,EAAGiC,EAAKjC,OAAU,EAC/C,KAKH,OAAOiC,IAIRa,KAAM,SAAUhF,GACf,MAAe,OAARA,EACN,IACEA,EAAO,IAAK8D,QAASnD,EAAO,KAIhCsE,UAAW,SAAUtG,EAAKuG,GACzB,GAAIvD,GAAMuD,KAaV,OAXY,OAAPvG,IACCoG,EAAalG,OAAQF,IACzB2B,EAAOsB,MAAOD,EACE,gBAARhD,IACLA,GAAQA,GAGXM,EAAKQ,KAAMkC,EAAKhD,IAIXgD,GAGRwD,QAAS,SAAUlD,EAAMtD,EAAKuD,GAC7B,MAAc,OAAPvD,KAAmBO,EAAQO,KAAMd,EAAKsD,EAAMC,IAKpDN,MAAO,SAAUS,EAAO+C,GAKvB,IAJA,GAAI5C,IAAO4C,EAAO/D,OACjBoB,EAAI,EACJP,EAAIG,EAAMhB,OAEHoB,EAAID,EAAKC,IAChBJ,EAAOH,KAAQkD,EAAQ3C,EAKxB,OAFAJ,GAAMhB,OAASa,EAERG,GAGRgD,KAAM,SAAU3D,EAAOK,EAAUuD,GAShC,IARA,GAAIC,GACHC,KACAtD,EAAI,EACJb,EAASK,EAAML,OACfoE,GAAkBH,EAIXpD,EAAIb,EAAQa,IACnBqD,GAAmBxD,EAAUL,EAAOQ,GAAKA,GACpCqD,IAAoBE,GACxBD,EAAQvG,KAAMyC,EAAOQ,GAIvB,OAAOsD,IAIRxD,IAAK,SAAUN,EAAOK,EAAU2D,GAC/B,GAAIrE,GAAQsE,EACXzD,EAAI,EACJP,IAGD,IAAKoD,EAAarD,GAEjB,IADAL,EAASK,EAAML,OACPa,EAAIb,EAAQa,IACnByD,EAAQ5D,EAAUL,EAAOQ,GAAKA,EAAGwD,GAEnB,MAATC,GACJhE,EAAI1C,KAAM0G,OAMZ,KAAMzD,IAAKR,GACViE,EAAQ5D,EAAUL,EAAOQ,GAAKA,EAAGwD,GAEnB,MAATC,GACJhE,EAAI1C,KAAM0G,EAMb,OAAO3G,GAAOmD,SAAWR,IAI1BiE,KAAM,EAINC,MAAO,SAAUpF,EAAID,GACpB,GAAIsF,GAAKC,EAAMF,CAUf,IARwB,gBAAZrF,KACXsF,EAAMrF,EAAID,GACVA,EAAUC,EACVA,EAAKqF,GAKAxF,EAAOgD,WAAY7C,GAazB,MARAsF,GAAOhH,EAAMU,KAAM2C,UAAW,GAC9ByD,EAAQ,WACP,MAAOpF,GAAG0B,MAAO3B,GAAW/B,KAAMsH,EAAK/G,OAAQD,EAAMU,KAAM2C,cAI5DyD,EAAMD,KAAOnF,EAAGmF,KAAOnF,EAAGmF,MAAQtF,EAAOsF,OAElCC,GAGRG,IAAKC,KAAKD,IAIVtG,QAASA,IAGa,kBAAXwG,UACX5F,EAAOG,GAAIyF,OAAOC,UAAaxH,EAAKuH,OAAOC,WAI5C7F,EAAOwB,KAAM,uEAAuEsE,MAAO,KAC3F,SAAUlE,EAAGa,GACZ5D,EAAY,WAAa4D,EAAO,KAAQA,EAAKsD,eAG9C,SAAStB,GAAaZ,GAMrB,GAAI9C,KAAW8C,GAAO,UAAYA,IAAOA,EAAI9C,OAC5C+C,EAAO9D,EAAO8D,KAAMD,EAErB,OAAc,aAATC,IAAuB9D,EAAO+D,SAAUF,KAI7B,UAATC,GAA+B,IAAX/C,GACR,gBAAXA,IAAuBA,EAAS,GAAOA,EAAS,IAAO8C,IAEhE,GAAImC,GAWJ,SAAW9H,GAEX,GAAI0D,GACHxC,EACA6G,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EAGAC,EACA3I,EACA4I,EACAC,EACAC,EACAC,EACA5B,EACA6B,EAGA1D,EAAU,SAAW,EAAI,GAAIsC,MAC7BqB,EAAe9I,EAAOH,SACtBkJ,EAAU,EACVC,EAAO,EACPC,EAAaC,KACbC,EAAaD,KACbE,EAAgBF,KAChBG,EAAY,SAAUC,EAAGC,GAIxB,MAHKD,KAAMC,IACVhB,GAAe,GAET,GAIR1H,KAAcC,eACdX,KACAqJ,EAAMrJ,EAAIqJ,IACVC,EAActJ,EAAIM,KAClBA,EAAON,EAAIM,KACXF,EAAQJ,EAAII,MAGZG,EAAU,SAAUgJ,EAAMjG,GAGzB,IAFA,GAAIC,GAAI,EACPM,EAAM0F,EAAK7G,OACJa,EAAIM,EAAKN,IAChB,GAAKgG,EAAKhG,KAAOD,EAChB,MAAOC,EAGT,WAGDiG,EAAW,6HAKXC,EAAa,sBAGbC,EAAa,gCAGbC,EAAa,MAAQF,EAAa,KAAOC,EAAa,OAASD,EAE9D,gBAAkBA,EAElB,2DAA6DC,EAAa,OAASD,EACnF,OAEDG,EAAU,KAAOF,EAAa,wFAKAC,EAAa,eAM3CE,EAAc,GAAIC,QAAQL,EAAa,IAAK,KAC5CzH,EAAQ,GAAI8H,QAAQ,IAAML,EAAa,8BAAgCA,EAAa,KAAM,KAE1FM,EAAS,GAAID,QAAQ,IAAML,EAAa,KAAOA,EAAa,KAC5DO,EAAe,GAAIF,QAAQ,IAAML,EAAa,WAAaA,EAAa,IAAMA,EAAa,KAE3FQ,EAAmB,GAAIH,QAAQ,IAAML,EAAa,iBAAmBA,EAAa,OAAQ,KAE1FS,EAAU,GAAIJ,QAAQF,GACtBO,EAAc,GAAIL,QAAQ,IAAMJ,EAAa,KAE7CU,GACCC,GAAM,GAAIP,QAAQ,MAAQJ,EAAa,KACvCY,MAAS,GAAIR,QAAQ,QAAUJ,EAAa,KAC5Ca,IAAO,GAAIT,QAAQ,KAAOJ,EAAa,SACvCc,KAAQ,GAAIV,QAAQ,IAAMH,GAC1Bc,OAAU,GAAIX,QAAQ,IAAMF,GAC5Bc,MAAS,GAAIZ,QAAQ,yDAA2DL,EAC/E,+BAAiCA,EAAa,cAAgBA,EAC9D,aAAeA,EAAa,SAAU,KACvCkB,KAAQ,GAAIb,QAAQ,OAASN,EAAW,KAAM,KAG9CoB,aAAgB,GAAId,QAAQ,IAAML,EAAa,mDAC9CA,EAAa,mBAAqBA,EAAa,mBAAoB,MAGrEoB,EAAU,sCACVC,EAAU,SAEVC,EAAU,yBAGVC,EAAa,mCAEbC,EAAW,OAIXC,EAAY,GAAIpB,QAAQ,qBAAuBL,EAAa,MAAQA,EAAa,OAAQ,MACzF0B,GAAY,SAAUC,EAAGC,EAASC,GACjC,GAAIC,GAAO,KAAOF,EAAU,KAI5B,OAAOE,KAASA,GAAQD,EACvBD,EACAE,EAAO,EAENC,OAAOC,aAAcF,EAAO,OAE5BC,OAAOC,aAAcF,GAAQ,GAAK,MAAe,KAAPA,EAAe,QAK5DG,GAAa,sDACbC,GAAa,SAAUC,EAAIC,GAC1B,MAAKA,GAGQ,OAAPD,EACG,SAIDA,EAAGxL,MAAO,MAAU,KAAOwL,EAAGE,WAAYF,EAAGlJ,OAAS,GAAIjC,SAAU,IAAO,IAI5E,KAAOmL,GAOfG,GAAgB,WACf1D,KAGD2D,GAAmBC,GAClB,SAAU3I,GACT,MAAOA,GAAK4I,YAAa,IAAS,QAAU5I,IAAQ,SAAWA,MAE9D6I,IAAK,aAAcC,KAAM,UAI7B,KACC9L,EAAKkD,MACHxD,EAAMI,EAAMU,KAAM6H,EAAa0D,YAChC1D,EAAa0D,YAIdrM,EAAK2I,EAAa0D,WAAW3J,QAAS4J,SACrC,MAAQC,IACTjM,GAASkD,MAAOxD,EAAI0C,OAGnB,SAAU+B,EAAQ+H,GACjBlD,EAAY9F,MAAOiB,EAAQrE,EAAMU,KAAK0L,KAKvC,SAAU/H,EAAQ+H,GACjB,GAAI1I,GAAIW,EAAO/B,OACda,EAAI,CAEL,OAASkB,EAAOX,KAAO0I,EAAIjJ,MAC3BkB,EAAO/B,OAASoB,EAAI,IAKvB,QAAS6D,IAAQ/F,EAAUC,EAAS0E,EAASkG,GAC5C,GAAIC,GAAGnJ,EAAGD,EAAMqJ,EAAKC,EAAOC,EAAQC,EACnCC,EAAalL,GAAWA,EAAQmL,cAGhCV,EAAWzK,EAAUA,EAAQyK,SAAW,CAKzC,IAHA/F,EAAUA,MAGe,gBAAb3E,KAA0BA,GACxB,IAAb0K,GAA+B,IAAbA,GAA+B,KAAbA,EAEpC,MAAO/F,EAIR,KAAMkG,KAEE5K,EAAUA,EAAQmL,eAAiBnL,EAAU8G,KAAmBjJ,GACtE2I,EAAaxG,GAEdA,EAAUA,GAAWnC,EAEhB6I,GAAiB,CAIrB,GAAkB,KAAb+D,IAAoBM,EAAQ5B,EAAWiC,KAAMrL,IAGjD,GAAM8K,EAAIE,EAAM,IAGf,GAAkB,IAAbN,EAAiB,CACrB,KAAMhJ,EAAOzB,EAAQqL,eAAgBR,IAUpC,MAAOnG,EALP,IAAKjD,EAAK6J,KAAOT,EAEhB,MADAnG,GAAQjG,KAAMgD,GACPiD,MAYT,IAAKwG,IAAezJ,EAAOyJ,EAAWG,eAAgBR,KACrDhE,EAAU7G,EAASyB,IACnBA,EAAK6J,KAAOT,EAGZ,MADAnG,GAAQjG,KAAMgD,GACPiD,MAKH,CAAA,GAAKqG,EAAM,GAEjB,MADAtM,GAAKkD,MAAO+C,EAAS1E,EAAQuL,qBAAsBxL,IAC5C2E,CAGD,KAAMmG,EAAIE,EAAM,KAAO7L,EAAQsM,wBACrCxL,EAAQwL,uBAGR,MADA/M,GAAKkD,MAAO+C,EAAS1E,EAAQwL,uBAAwBX,IAC9CnG,EAKT,GAAKxF,EAAQuM,MACXrE,EAAerH,EAAW,QACzB4G,IAAcA,EAAU+E,KAAM3L,IAAc,CAE9C,GAAkB,IAAb0K,EACJS,EAAalL,EACbiL,EAAclL,MAMR,IAAwC,WAAnCC,EAAQ2L,SAAS9F,cAA6B,EAGnDiF,EAAM9K,EAAQ4L,aAAc,OACjCd,EAAMA,EAAIxH,QAASuG,GAAYC,IAE/B9J,EAAQ6L,aAAc,KAAOf,EAAM3H,GAIpC6H,EAAS9E,EAAUnG,GACnB2B,EAAIsJ,EAAOnK,MACX,OAAQa,IACPsJ,EAAOtJ,GAAK,IAAMoJ,EAAM,IAAMgB,GAAYd,EAAOtJ,GAElDuJ,GAAcD,EAAOe,KAAM,KAG3Bb,EAAa9B,EAASsC,KAAM3L,IAAciM,GAAahM,EAAQL,aAC9DK,EAGF,GAAKiL,EACJ,IAIC,MAHAxM,GAAKkD,MAAO+C,EACXwG,EAAWe,iBAAkBhB,IAEvBvG,EACN,MAAQwH,IACR,QACIpB,IAAQ3H,GACZnD,EAAQmM,gBAAiB,QAS/B,MAAO/F,GAAQrG,EAASuD,QAASnD,EAAO,MAAQH,EAAS0E,EAASkG,GASnE,QAAS1D,MACR,GAAIkF,KAEJ,SAASC,GAAOC,EAAKnH,GAMpB,MAJKiH,GAAK3N,KAAM6N,EAAM,KAAQvG,EAAKwG,mBAE3BF,GAAOD,EAAKI,SAEZH,EAAOC,EAAM,KAAQnH,EAE9B,MAAOkH,GAOR,QAASI,IAAcxM,GAEtB,MADAA,GAAIkD,IAAY,EACTlD,EAOR,QAASyM,IAAQzM,GAChB,GAAI0M,GAAK9O,EAAS0B,cAAc,WAEhC,KACC,QAASU,EAAI0M,GACZ,MAAOjC,GACR,OAAO,EACN,QAEIiC,EAAGhN,YACPgN,EAAGhN,WAAWC,YAAa+M,GAG5BA,EAAK,MASP,QAASC,IAAWC,EAAOC,GAC1B,GAAI3O,GAAM0O,EAAMjH,MAAM,KACrBlE,EAAIvD,EAAI0C,MAET,OAAQa,IACPqE,EAAKgH,WAAY5O,EAAIuD,IAAOoL,EAU9B,QAASE,IAAc1F,EAAGC,GACzB,GAAI0F,GAAM1F,GAAKD,EACd4F,EAAOD,GAAsB,IAAf3F,EAAEmD,UAAiC,IAAflD,EAAEkD,UACnCnD,EAAE6F,YAAc5F,EAAE4F,WAGpB,IAAKD,EACJ,MAAOA,EAIR,IAAKD,EACJ,MAASA,EAAMA,EAAIG,YAClB,GAAKH,IAAQ1F,EACZ,QAKH,OAAOD,GAAI,KAOZ,QAAS+F,IAAmBzJ,GAC3B,MAAO,UAAUnC,GAChB,GAAIc,GAAOd,EAAKkK,SAAS9F,aACzB,OAAgB,UAATtD,GAAoBd,EAAKmC,OAASA,GAQ3C,QAAS0J,IAAoB1J,GAC5B,MAAO,UAAUnC,GAChB,GAAIc,GAAOd,EAAKkK,SAAS9F,aACzB,QAAiB,UAATtD,GAA6B,WAATA,IAAsBd,EAAKmC,OAASA,GAQlE,QAAS2J,IAAsBlD,GAG9B,MAAO,UAAU5I,GAKhB,MAAK,QAAUA,GASTA,EAAK9B,YAAc8B,EAAK4I,YAAa,EAGpC,SAAW5I,GACV,SAAWA,GAAK9B,WACb8B,EAAK9B,WAAW0K,WAAaA,EAE7B5I,EAAK4I,WAAaA,EAMpB5I,EAAK+L,aAAenD,GAI1B5I,EAAK+L,cAAgBnD,GACpBF,GAAkB1I,KAAW4I,EAGzB5I,EAAK4I,WAAaA,EAKd,SAAW5I,IACfA,EAAK4I,WAAaA,GAY5B,QAASoD,IAAwBxN,GAChC,MAAOwM,IAAa,SAAUiB,GAE7B,MADAA,IAAYA,EACLjB,GAAa,SAAU7B,EAAM5F,GACnC,GAAI/C,GACH0L,EAAe1N,KAAQ2K,EAAK/J,OAAQ6M,GACpChM,EAAIiM,EAAa9M,MAGlB,OAAQa,IACFkJ,EAAO3I,EAAI0L,EAAajM,MAC5BkJ,EAAK3I,KAAO+C,EAAQ/C,GAAK2I,EAAK3I,SAYnC,QAAS+J,IAAahM,GACrB,MAAOA,IAAmD,mBAAjCA,GAAQuL,sBAAwCvL,EAI1Ed,EAAU4G,GAAO5G,WAOjB+G,EAAQH,GAAOG,MAAQ,SAAUxE,GAGhC,GAAImM,GAAkBnM,IAASA,EAAK0J,eAAiB1J,GAAMmM,eAC3D,SAAOA,GAA+C,SAA7BA,EAAgBjC,UAQ1CnF,EAAcV,GAAOU,YAAc,SAAUqH,GAC5C,GAAIC,GAAYC,EACf1O,EAAMwO,EAAOA,EAAK1C,eAAiB0C,EAAO/G,CAG3C,OAAKzH,KAAQxB,GAA6B,IAAjBwB,EAAIoL,UAAmBpL,EAAIuO,iBAKpD/P,EAAWwB,EACXoH,EAAU5I,EAAS+P,gBACnBlH,GAAkBT,EAAOpI,GAIpBiJ,IAAiBjJ,IACpBkQ,EAAYlQ,EAASmQ,cAAgBD,EAAUE,MAAQF,IAGnDA,EAAUG,iBACdH,EAAUG,iBAAkB,SAAUhE,IAAe,GAG1C6D,EAAUI,aACrBJ,EAAUI,YAAa,WAAYjE,KAUrChL,EAAQ4I,WAAa4E,GAAO,SAAUC,GAErC,MADAA,GAAGyB,UAAY,KACPzB,EAAGf,aAAa,eAOzB1M,EAAQqM,qBAAuBmB,GAAO,SAAUC,GAE/C,MADAA,GAAGjN,YAAa7B,EAASwQ,cAAc,MAC/B1B,EAAGpB,qBAAqB,KAAK1K,SAItC3B,EAAQsM,uBAAyBtC,EAAQwC,KAAM7N,EAAS2N,wBAMxDtM,EAAQoP,QAAU5B,GAAO,SAAUC,GAElC,MADAlG,GAAQ/G,YAAaiN,GAAKrB,GAAKnI,GACvBtF,EAAS0Q,oBAAsB1Q,EAAS0Q,kBAAmBpL,GAAUtC,SAIzE3B,EAAQoP,SACZvI,EAAKyI,OAAW,GAAI,SAAUlD,GAC7B,GAAImD,GAASnD,EAAGhI,QAAS+F,EAAWC,GACpC,OAAO,UAAU7H,GAChB,MAAOA,GAAKmK,aAAa,QAAU6C,IAGrC1I,EAAK2I,KAAS,GAAI,SAAUpD,EAAItL,GAC/B,GAAuC,mBAA3BA,GAAQqL,gBAAkC3E,EAAiB,CACtE,GAAIjF,GAAOzB,EAAQqL,eAAgBC,EACnC,OAAO7J,IAASA,UAIlBsE,EAAKyI,OAAW,GAAK,SAAUlD,GAC9B,GAAImD,GAASnD,EAAGhI,QAAS+F,EAAWC,GACpC,OAAO,UAAU7H,GAChB,GAAIoM,GAAwC,mBAA1BpM,GAAKkN,kBACtBlN,EAAKkN,iBAAiB,KACvB,OAAOd,IAAQA,EAAK1I,QAAUsJ,IAMhC1I,EAAK2I,KAAS,GAAI,SAAUpD,EAAItL,GAC/B,GAAuC,mBAA3BA,GAAQqL,gBAAkC3E,EAAiB,CACtE,GAAImH,GAAMnM,EAAGR,EACZO,EAAOzB,EAAQqL,eAAgBC,EAEhC,IAAK7J,EAAO,CAIX,GADAoM,EAAOpM,EAAKkN,iBAAiB,MACxBd,GAAQA,EAAK1I,QAAUmG,EAC3B,OAAS7J,EAIVP,GAAQlB,EAAQuO,kBAAmBjD,GACnC5J,EAAI,CACJ,OAASD,EAAOP,EAAMQ,KAErB,GADAmM,EAAOpM,EAAKkN,iBAAiB,MACxBd,GAAQA,EAAK1I,QAAUmG,EAC3B,OAAS7J,GAKZ,YAMHsE,EAAK2I,KAAU,IAAIxP,EAAQqM,qBAC1B,SAAUqD,EAAK5O,GACd,MAA6C,mBAAjCA,GAAQuL,qBACZvL,EAAQuL,qBAAsBqD,GAG1B1P,EAAQuM,IACZzL,EAAQiM,iBAAkB2C,GAD3B,QAKR,SAAUA,EAAK5O,GACd,GAAIyB,GACH6D,KACA5D,EAAI,EAEJgD,EAAU1E,EAAQuL,qBAAsBqD,EAGzC,IAAa,MAARA,EAAc,CAClB,MAASnN,EAAOiD,EAAQhD,KACA,IAAlBD,EAAKgJ,UACTnF,EAAI7G,KAAMgD,EAIZ,OAAO6D,GAER,MAAOZ,IAITqB,EAAK2I,KAAY,MAAIxP,EAAQsM,wBAA0B,SAAU4C,EAAWpO,GAC3E,GAA+C,mBAAnCA,GAAQwL,wBAA0C9E,EAC7D,MAAO1G,GAAQwL,uBAAwB4C,IAUzCxH,KAOAD,MAEMzH,EAAQuM,IAAMvC,EAAQwC,KAAM7N,EAASoO,qBAG1CS,GAAO,SAAUC,GAMhBlG,EAAQ/G,YAAaiN,GAAKkC,UAAY,UAAY1L,EAAU,qBAC1CA,EAAU,kEAOvBwJ,EAAGV,iBAAiB,wBAAwBpL,QAChD8F,EAAUlI,KAAM,SAAWmJ,EAAa,gBAKnC+E,EAAGV,iBAAiB,cAAcpL,QACvC8F,EAAUlI,KAAM,MAAQmJ,EAAa,aAAeD,EAAW,KAI1DgF,EAAGV,iBAAkB,QAAU9I,EAAU,MAAOtC,QACrD8F,EAAUlI,KAAK,MAMVkO,EAAGV,iBAAiB,YAAYpL,QACrC8F,EAAUlI,KAAK,YAMVkO,EAAGV,iBAAkB,KAAO9I,EAAU,MAAOtC,QAClD8F,EAAUlI,KAAK,cAIjBiO,GAAO,SAAUC,GAChBA,EAAGkC,UAAY,mFAKf,IAAIC,GAAQjR,EAAS0B,cAAc,QACnCuP,GAAMjD,aAAc,OAAQ,UAC5Bc,EAAGjN,YAAaoP,GAAQjD,aAAc,OAAQ,KAIzCc,EAAGV,iBAAiB,YAAYpL,QACpC8F,EAAUlI,KAAM,OAASmJ,EAAa,eAKS,IAA3C+E,EAAGV,iBAAiB,YAAYpL,QACpC8F,EAAUlI,KAAM,WAAY,aAK7BgI,EAAQ/G,YAAaiN,GAAKtC,UAAW,EACY,IAA5CsC,EAAGV,iBAAiB,aAAapL,QACrC8F,EAAUlI,KAAM,WAAY,aAI7BkO,EAAGV,iBAAiB,QACpBtF,EAAUlI,KAAK,YAIXS,EAAQ6P,gBAAkB7F,EAAQwC,KAAO1G,EAAUyB,EAAQzB,SAChEyB,EAAQuI,uBACRvI,EAAQwI,oBACRxI,EAAQyI,kBACRzI,EAAQ0I,qBAERzC,GAAO,SAAUC,GAGhBzN,EAAQkQ,kBAAoBpK,EAAQ/F,KAAM0N,EAAI,KAI9C3H,EAAQ/F,KAAM0N,EAAI,aAClB/F,EAAcnI,KAAM,KAAMsJ,KAI5BpB,EAAYA,EAAU9F,QAAU,GAAIoH,QAAQtB,EAAUoF,KAAK,MAC3DnF,EAAgBA,EAAc/F,QAAU,GAAIoH,QAAQrB,EAAcmF,KAAK,MAIvE+B,EAAa5E,EAAQwC,KAAMjF,EAAQ4I,yBAKnCxI,EAAWiH,GAAc5E,EAAQwC,KAAMjF,EAAQI,UAC9C,SAAUS,EAAGC,GACZ,GAAI+H,GAAuB,IAAfhI,EAAEmD,SAAiBnD,EAAEsG,gBAAkBtG,EAClDiI,EAAMhI,GAAKA,EAAE5H,UACd,OAAO2H,KAAMiI,MAAWA,GAAwB,IAAjBA,EAAI9E,YAClC6E,EAAMzI,SACLyI,EAAMzI,SAAU0I,GAChBjI,EAAE+H,yBAA8D,GAAnC/H,EAAE+H,wBAAyBE,MAG3D,SAAUjI,EAAGC,GACZ,GAAKA,EACJ,MAASA,EAAIA,EAAE5H,WACd,GAAK4H,IAAMD,EACV,OAAO,CAIV,QAAO,GAOTD,EAAYyG,EACZ,SAAUxG,EAAGC,GAGZ,GAAKD,IAAMC,EAEV,MADAhB,IAAe,EACR,CAIR,IAAIiJ,IAAWlI,EAAE+H,yBAA2B9H,EAAE8H,uBAC9C,OAAKG,GACGA,GAIRA,GAAYlI,EAAE6D,eAAiB7D,MAAUC,EAAE4D,eAAiB5D,GAC3DD,EAAE+H,wBAAyB9H,GAG3B,EAGc,EAAViI,IACFtQ,EAAQuQ,cAAgBlI,EAAE8H,wBAAyB/H,KAAQkI,EAGxDlI,IAAMzJ,GAAYyJ,EAAE6D,gBAAkBrE,GAAgBD,EAASC,EAAcQ,MAG7EC,IAAM1J,GAAY0J,EAAE4D,gBAAkBrE,GAAgBD,EAASC,EAAcS,GAC1E,EAIDjB,EACJ5H,EAAS4H,EAAWgB,GAAM5I,EAAS4H,EAAWiB,GAChD,EAGe,EAAViI,KAAmB,IAE3B,SAAUlI,EAAGC,GAEZ,GAAKD,IAAMC,EAEV,MADAhB,IAAe,EACR,CAGR,IAAI0G,GACHvL,EAAI,EACJgO,EAAMpI,EAAE3H,WACR4P,EAAMhI,EAAE5H,WACRgQ,GAAOrI,GACPsI,GAAOrI,EAGR,KAAMmI,IAAQH,EACb,MAAOjI,KAAMzJ,KACZ0J,IAAM1J,EAAW,EACjB6R,KACAH,EAAM,EACNjJ,EACE5H,EAAS4H,EAAWgB,GAAM5I,EAAS4H,EAAWiB,GAChD,CAGK,IAAKmI,IAAQH,EACnB,MAAOvC,IAAc1F,EAAGC,EAIzB0F,GAAM3F,CACN,OAAS2F,EAAMA,EAAItN,WAClBgQ,EAAGE,QAAS5C,EAEbA,GAAM1F,CACN,OAAS0F,EAAMA,EAAItN,WAClBiQ,EAAGC,QAAS5C,EAIb,OAAQ0C,EAAGjO,KAAOkO,EAAGlO,GACpBA,GAGD,OAAOA,GAENsL,GAAc2C,EAAGjO,GAAIkO,EAAGlO,IAGxBiO,EAAGjO,KAAOoF,KACV8I,EAAGlO,KAAOoF,EAAe,EACzB,GAGKjJ,GA3YCA,GA8YTiI,GAAOd,QAAU,SAAU8K,EAAMC,GAChC,MAAOjK,IAAQgK,EAAM,KAAM,KAAMC,IAGlCjK,GAAOiJ,gBAAkB,SAAUtN,EAAMqO,GASxC,IAPOrO,EAAK0J,eAAiB1J,KAAW5D,GACvC2I,EAAa/E,GAIdqO,EAAOA,EAAKxM,QAAS8E,EAAkB,UAElClJ,EAAQ6P,iBAAmBrI,IAC9BU,EAAe0I,EAAO,QACpBlJ,IAAkBA,EAAc8E,KAAMoE,OACtCnJ,IAAkBA,EAAU+E,KAAMoE,IAErC,IACC,GAAI3O,GAAM6D,EAAQ/F,KAAMwC,EAAMqO,EAG9B,IAAK3O,GAAOjC,EAAQkQ,mBAGlB3N,EAAK5D,UAAuC,KAA3B4D,EAAK5D,SAAS4M,SAChC,MAAOtJ,GAEP,MAAOuJ,IAGV,MAAO5E,IAAQgK,EAAMjS,EAAU,MAAQ4D,IAASZ,OAAS,GAG1DiF,GAAOe,SAAW,SAAU7G,EAASyB,GAKpC,OAHOzB,EAAQmL,eAAiBnL,KAAcnC,GAC7C2I,EAAaxG,GAEP6G,EAAU7G,EAASyB,IAG3BqE,GAAOkK,KAAO,SAAUvO,EAAMc,IAEtBd,EAAK0J,eAAiB1J,KAAW5D,GACvC2I,EAAa/E,EAGd,IAAIxB,GAAK8F,EAAKgH,WAAYxK,EAAKsD,eAE9BoK,EAAMhQ,GAAMpB,EAAOI,KAAM8G,EAAKgH,WAAYxK,EAAKsD,eAC9C5F,EAAIwB,EAAMc,GAAOmE,GACjBxD,MAEF,OAAeA,UAAR+M,EACNA,EACA/Q,EAAQ4I,aAAepB,EACtBjF,EAAKmK,aAAcrJ,IAClB0N,EAAMxO,EAAKkN,iBAAiBpM,KAAU0N,EAAIC,UAC1CD,EAAI9K,MACJ,MAGJW,GAAOqK,OAAS,SAAUC,GACzB,OAAQA,EAAM,IAAI9M,QAASuG,GAAYC,KAGxChE,GAAOtC,MAAQ,SAAUC,GACxB,KAAM,IAAI1F,OAAO,0CAA4C0F,IAO9DqC,GAAOuK,WAAa,SAAU3L,GAC7B,GAAIjD,GACH6O,KACArO,EAAI,EACJP,EAAI,CAOL,IAJA6E,GAAgBrH,EAAQqR,iBACxBjK,GAAapH,EAAQsR,YAAc9L,EAAQnG,MAAO,GAClDmG,EAAQvC,KAAMkF,GAETd,EAAe,CACnB,MAAS9E,EAAOiD,EAAQhD,KAClBD,IAASiD,EAAShD,KACtBO,EAAIqO,EAAW7R,KAAMiD,GAGvB,OAAQO,IACPyC,EAAQtC,OAAQkO,EAAYrO,GAAK,GAQnC,MAFAqE,GAAY,KAEL5B,GAORsB,EAAUF,GAAOE,QAAU,SAAUvE,GACpC,GAAIoM,GACH1M,EAAM,GACNO,EAAI,EACJ+I,EAAWhJ,EAAKgJ,QAEjB,IAAMA,GAMC,GAAkB,IAAbA,GAA+B,IAAbA,GAA+B,KAAbA,EAAkB,CAGjE,GAAiC,gBAArBhJ,GAAKgP,YAChB,MAAOhP,GAAKgP,WAGZ,KAAMhP,EAAOA,EAAKiP,WAAYjP,EAAMA,EAAOA,EAAK2L,YAC/CjM,GAAO6E,EAASvE,OAGZ,IAAkB,IAAbgJ,GAA+B,IAAbA,EAC7B,MAAOhJ,GAAKkP,cAhBZ,OAAS9C,EAAOpM,EAAKC,KAEpBP,GAAO6E,EAAS6H,EAkBlB,OAAO1M,IAGR4E,EAAOD,GAAO8K,WAGbrE,YAAa,GAEbsE,aAAcpE,GAEd1B,MAAOxC,EAEPwE,cAEA2B,QAEAoC,UACCC,KAAOzG,IAAK,aAAczI,OAAO,GACjCmP,KAAO1G,IAAK,cACZ2G,KAAO3G,IAAK,kBAAmBzI,OAAO,GACtCqP,KAAO5G,IAAK,oBAGb6G,WACCxI,KAAQ,SAAUoC,GAUjB,MATAA,GAAM,GAAKA,EAAM,GAAGzH,QAAS+F,EAAWC,IAGxCyB,EAAM,IAAOA,EAAM,IAAMA,EAAM,IAAMA,EAAM,IAAM,IAAKzH,QAAS+F,EAAWC,IAExD,OAAbyB,EAAM,KACVA,EAAM,GAAK,IAAMA,EAAM,GAAK,KAGtBA,EAAMxM,MAAO,EAAG,IAGxBsK,MAAS,SAAUkC,GA6BlB,MAlBAA,GAAM,GAAKA,EAAM,GAAGlF,cAEY,QAA3BkF,EAAM,GAAGxM,MAAO,EAAG,IAEjBwM,EAAM,IACXjF,GAAOtC,MAAOuH,EAAM,IAKrBA,EAAM,KAAQA,EAAM,GAAKA,EAAM,IAAMA,EAAM,IAAM,GAAK,GAAmB,SAAbA,EAAM,IAA8B,QAAbA,EAAM,KACzFA,EAAM,KAAUA,EAAM,GAAKA,EAAM,IAAqB,QAAbA,EAAM,KAGpCA,EAAM,IACjBjF,GAAOtC,MAAOuH,EAAM,IAGdA,GAGRnC,OAAU,SAAUmC,GACnB,GAAIqG,GACHC,GAAYtG,EAAM,IAAMA,EAAM,EAE/B,OAAKxC,GAAiB,MAAEmD,KAAMX,EAAM,IAC5B,MAIHA,EAAM,GACVA,EAAM,GAAKA,EAAM,IAAMA,EAAM,IAAM,GAGxBsG,GAAYhJ,EAAQqD,KAAM2F,KAEpCD,EAASlL,EAAUmL,GAAU,MAE7BD,EAASC,EAAS3S,QAAS,IAAK2S,EAASxQ,OAASuQ,GAAWC,EAASxQ,UAGvEkK,EAAM,GAAKA,EAAM,GAAGxM,MAAO,EAAG6S,GAC9BrG,EAAM,GAAKsG,EAAS9S,MAAO,EAAG6S,IAIxBrG,EAAMxM,MAAO,EAAG,MAIzBiQ,QAEC9F,IAAO,SAAU4I,GAChB,GAAI3F,GAAW2F,EAAiBhO,QAAS+F,EAAWC,IAAYzD,aAChE,OAA4B,MAArByL,EACN,WAAa,OAAO,GACpB,SAAU7P,GACT,MAAOA,GAAKkK,UAAYlK,EAAKkK,SAAS9F,gBAAkB8F,IAI3DlD,MAAS,SAAU2F,GAClB,GAAImD,GAAUtK,EAAYmH,EAAY,IAEtC,OAAOmD,KACLA,EAAU,GAAItJ,QAAQ,MAAQL,EAAa,IAAMwG,EAAY,IAAMxG,EAAa,SACjFX,EAAYmH,EAAW,SAAU3M,GAChC,MAAO8P,GAAQ7F,KAAgC,gBAAnBjK,GAAK2M,WAA0B3M,EAAK2M,WAA0C,mBAAtB3M,GAAKmK,cAAgCnK,EAAKmK,aAAa,UAAY,OAI1JjD,KAAQ,SAAUpG,EAAMiP,EAAUC,GACjC,MAAO,UAAUhQ,GAChB,GAAIiQ,GAAS5L,GAAOkK,KAAMvO,EAAMc,EAEhC,OAAe,OAAVmP,EACgB,OAAbF,GAEFA,IAINE,GAAU,GAEU,MAAbF,EAAmBE,IAAWD,EACvB,OAAbD,EAAoBE,IAAWD,EAClB,OAAbD,EAAoBC,GAAqC,IAA5BC,EAAOhT,QAAS+S,GAChC,OAAbD,EAAoBC,GAASC,EAAOhT,QAAS+S,MAChC,OAAbD,EAAoBC,GAASC,EAAOnT,OAAQkT,EAAM5Q,UAAa4Q,EAClD,OAAbD,GAAsB,IAAME,EAAOpO,QAAS0E,EAAa,KAAQ,KAAMtJ,QAAS+S,MACnE,OAAbD,IAAoBE,IAAWD,GAASC,EAAOnT,MAAO,EAAGkT,EAAM5Q,OAAS,KAAQ4Q,EAAQ,QAK3F5I,MAAS,SAAUjF,EAAM+N,EAAMjE,EAAU7L,EAAOE,GAC/C,GAAI6P,GAAgC,QAAvBhO,EAAKrF,MAAO,EAAG,GAC3BsT,EAA+B,SAArBjO,EAAKrF,UACfuT,EAAkB,YAATH,CAEV,OAAiB,KAAV9P,GAAwB,IAATE,EAGrB,SAAUN,GACT,QAASA,EAAK9B,YAGf,SAAU8B,EAAMzB,EAAS+R,GACxB,GAAI1F,GAAO2F,EAAaC,EAAYpE,EAAMqE,EAAWC,EACpD7H,EAAMsH,IAAWC,EAAU,cAAgB,kBAC3CO,EAAS3Q,EAAK9B,WACd4C,EAAOuP,GAAUrQ,EAAKkK,SAAS9F,cAC/BwM,GAAYN,IAAQD,EACpB5E,GAAO,CAER,IAAKkF,EAAS,CAGb,GAAKR,EAAS,CACb,MAAQtH,EAAM,CACbuD,EAAOpM,CACP,OAASoM,EAAOA,EAAMvD,GACrB,GAAKwH,EACJjE,EAAKlC,SAAS9F,gBAAkBtD,EACd,IAAlBsL,EAAKpD,SAEL,OAAO,CAIT0H,GAAQ7H,EAAe,SAAT1G,IAAoBuO,GAAS,cAE5C,OAAO,EAMR,GAHAA,GAAUN,EAAUO,EAAO1B,WAAa0B,EAAOE,WAG1CT,GAAWQ,EAAW,CAK1BxE,EAAOuE,EACPH,EAAapE,EAAM1K,KAAc0K,EAAM1K,OAIvC6O,EAAcC,EAAYpE,EAAK0E,YAC7BN,EAAYpE,EAAK0E,cAEnBlG,EAAQ2F,EAAapO,OACrBsO,EAAY7F,EAAO,KAAQtF,GAAWsF,EAAO,GAC7Ca,EAAOgF,GAAa7F,EAAO,GAC3BwB,EAAOqE,GAAaE,EAAO5H,WAAY0H,EAEvC,OAASrE,IAASqE,GAAarE,GAAQA,EAAMvD,KAG3C4C,EAAOgF,EAAY,IAAMC,EAAM3K,MAGhC,GAAuB,IAAlBqG,EAAKpD,YAAoByC,GAAQW,IAASpM,EAAO,CACrDuQ,EAAapO,IAAWmD,EAASmL,EAAWhF,EAC5C,YAuBF,IAjBKmF,IAEJxE,EAAOpM,EACPwQ,EAAapE,EAAM1K,KAAc0K,EAAM1K,OAIvC6O,EAAcC,EAAYpE,EAAK0E,YAC7BN,EAAYpE,EAAK0E,cAEnBlG,EAAQ2F,EAAapO,OACrBsO,EAAY7F,EAAO,KAAQtF,GAAWsF,EAAO,GAC7Ca,EAAOgF,GAKHhF,KAAS,EAEb,MAASW,IAASqE,GAAarE,GAAQA,EAAMvD,KAC3C4C,EAAOgF,EAAY,IAAMC,EAAM3K,MAEhC,IAAOsK,EACNjE,EAAKlC,SAAS9F,gBAAkBtD,EACd,IAAlBsL,EAAKpD,aACHyC,IAGGmF,IACJJ,EAAapE,EAAM1K,KAAc0K,EAAM1K,OAIvC6O,EAAcC,EAAYpE,EAAK0E,YAC7BN,EAAYpE,EAAK0E,cAEnBP,EAAapO,IAAWmD,EAASmG,IAG7BW,IAASpM,GACb,KASL,OADAyL,IAAQnL,EACDmL,IAASrL,GAAWqL,EAAOrL,IAAU,GAAKqL,EAAOrL,GAAS,KAKrE+G,OAAU,SAAU4J,EAAQ9E,GAK3B,GAAInI,GACHtF,EAAK8F,EAAKgC,QAASyK,IAAYzM,EAAK0M,WAAYD,EAAO3M,gBACtDC,GAAOtC,MAAO,uBAAyBgP,EAKzC,OAAKvS,GAAIkD,GACDlD,EAAIyN,GAIPzN,EAAGY,OAAS,GAChB0E,GAASiN,EAAQA,EAAQ,GAAI9E,GACtB3H,EAAK0M,WAAW3T,eAAgB0T,EAAO3M,eAC7C4G,GAAa,SAAU7B,EAAM5F,GAC5B,GAAI0N,GACHC,EAAU1S,EAAI2K,EAAM8C,GACpBhM,EAAIiR,EAAQ9R,MACb,OAAQa,IACPgR,EAAMhU,EAASkM,EAAM+H,EAAQjR,IAC7BkJ,EAAM8H,KAAW1N,EAAS0N,GAAQC,EAAQjR,MAG5C,SAAUD,GACT,MAAOxB,GAAIwB,EAAM,EAAG8D,KAIhBtF,IAIT8H,SAEC6K,IAAOnG,GAAa,SAAU1M,GAI7B,GAAI+O,MACHpK,KACAmO,EAAU1M,EAASpG,EAASuD,QAASnD,EAAO,MAE7C,OAAO0S,GAAS1P,GACfsJ,GAAa,SAAU7B,EAAM5F,EAAShF,EAAS+R,GAC9C,GAAItQ,GACHqR,EAAYD,EAASjI,EAAM,KAAMmH,MACjCrQ,EAAIkJ,EAAK/J,MAGV,OAAQa,KACDD,EAAOqR,EAAUpR,MACtBkJ,EAAKlJ,KAAOsD,EAAQtD,GAAKD,MAI5B,SAAUA,EAAMzB,EAAS+R,GAKxB,MAJAjD,GAAM,GAAKrN,EACXoR,EAAS/D,EAAO,KAAMiD,EAAKrN,GAE3BoK,EAAM,GAAK,MACHpK,EAAQ8C,SAInBuL,IAAOtG,GAAa,SAAU1M,GAC7B,MAAO,UAAU0B,GAChB,MAAOqE,IAAQ/F,EAAU0B,GAAOZ,OAAS,KAI3CgG,SAAY4F,GAAa,SAAUjN,GAElC,MADAA,GAAOA,EAAK8D,QAAS+F,EAAWC,IACzB,SAAU7H,GAChB,OAASA,EAAKgP,aAAehP,EAAKuR,WAAahN,EAASvE,IAAS/C,QAASc,SAW5EyT,KAAQxG,GAAc,SAAUwG,GAM/B,MAJM3K,GAAYoD,KAAKuH,GAAQ,KAC9BnN,GAAOtC,MAAO,qBAAuByP,GAEtCA,EAAOA,EAAK3P,QAAS+F,EAAWC,IAAYzD,cACrC,SAAUpE,GAChB,GAAIyR,EACJ,GACC,IAAMA,EAAWxM,EAChBjF,EAAKwR,KACLxR,EAAKmK,aAAa,aAAenK,EAAKmK,aAAa,QAGnD,MADAsH,GAAWA,EAASrN,cACbqN,IAAaD,GAA2C,IAAnCC,EAASxU,QAASuU,EAAO,YAE5CxR,EAAOA,EAAK9B,aAAiC,IAAlB8B,EAAKgJ,SAC3C,QAAO,KAKT7H,OAAU,SAAUnB,GACnB,GAAI0R,GAAOnV,EAAOoV,UAAYpV,EAAOoV,SAASD,IAC9C,OAAOA,IAAQA,EAAK5U,MAAO,KAAQkD,EAAK6J,IAGzC+H,KAAQ,SAAU5R,GACjB,MAAOA,KAASgF,GAGjB6M,MAAS,SAAU7R,GAClB,MAAOA,KAAS5D,EAAS0V,iBAAmB1V,EAAS2V,UAAY3V,EAAS2V,gBAAkB/R,EAAKmC,MAAQnC,EAAKgS,OAAShS,EAAKiS,WAI7HC,QAAWpG,IAAsB,GACjClD,SAAYkD,IAAsB,GAElCqG,QAAW,SAAUnS,GAGpB,GAAIkK,GAAWlK,EAAKkK,SAAS9F,aAC7B,OAAqB,UAAb8F,KAA0BlK,EAAKmS,SAA0B,WAAbjI,KAA2BlK,EAAKoS,UAGrFA,SAAY,SAAUpS,GAOrB,MAJKA,GAAK9B,YACT8B,EAAK9B,WAAWmU,cAGVrS,EAAKoS,YAAa,GAI1BE,MAAS,SAAUtS,GAKlB,IAAMA,EAAOA,EAAKiP,WAAYjP,EAAMA,EAAOA,EAAK2L,YAC/C,GAAK3L,EAAKgJ,SAAW,EACpB,OAAO,CAGT,QAAO,GAGR2H,OAAU,SAAU3Q,GACnB,OAAQsE,EAAKgC,QAAe,MAAGtG,IAIhCuS,OAAU,SAAUvS,GACnB,MAAOwH,GAAQyC,KAAMjK,EAAKkK,WAG3BmD,MAAS,SAAUrN,GAClB,MAAOuH,GAAQ0C,KAAMjK,EAAKkK,WAG3BsI,OAAU,SAAUxS,GACnB,GAAIc,GAAOd,EAAKkK,SAAS9F,aACzB,OAAgB,UAATtD,GAAkC,WAAdd,EAAKmC,MAA8B,WAATrB,GAGtD/C,KAAQ,SAAUiC,GACjB,GAAIuO,EACJ,OAAuC,UAAhCvO,EAAKkK,SAAS9F,eACN,SAAdpE,EAAKmC,OAImC,OAArCoM,EAAOvO,EAAKmK,aAAa,UAA2C,SAAvBoE,EAAKnK,gBAIvDhE,MAAS4L,GAAuB,WAC/B,OAAS,KAGV1L,KAAQ0L,GAAuB,SAAUE,EAAc9M,GACtD,OAASA,EAAS,KAGnBiB,GAAM2L,GAAuB,SAAUE,EAAc9M,EAAQ6M,GAC5D,OAASA,EAAW,EAAIA,EAAW7M,EAAS6M,KAG7CwG,KAAQzG,GAAuB,SAAUE,EAAc9M,GAEtD,IADA,GAAIa,GAAI,EACAA,EAAIb,EAAQa,GAAK,EACxBiM,EAAalP,KAAMiD,EAEpB,OAAOiM,KAGRwG,IAAO1G,GAAuB,SAAUE,EAAc9M,GAErD,IADA,GAAIa,GAAI,EACAA,EAAIb,EAAQa,GAAK,EACxBiM,EAAalP,KAAMiD,EAEpB,OAAOiM,KAGRyG,GAAM3G,GAAuB,SAAUE,EAAc9M,EAAQ6M,GAE5D,IADA,GAAIhM,GAAIgM,EAAW,EAAIA,EAAW7M,EAAS6M,IACjChM,GAAK,GACdiM,EAAalP,KAAMiD,EAEpB,OAAOiM,KAGR0G,GAAM5G,GAAuB,SAAUE,EAAc9M,EAAQ6M,GAE5D,IADA,GAAIhM,GAAIgM,EAAW,EAAIA,EAAW7M,EAAS6M,IACjChM,EAAIb,GACb8M,EAAalP,KAAMiD,EAEpB,OAAOiM,OAKV5H,EAAKgC,QAAa,IAAIhC,EAAKgC,QAAY,EAGvC,KAAMrG,KAAO4S,OAAO,EAAMC,UAAU,EAAMC,MAAM,EAAMC,UAAU,EAAMC,OAAO,GAC5E3O,EAAKgC,QAASrG,GAAM2L,GAAmB3L,EAExC,KAAMA,KAAOiT,QAAQ,EAAMC,OAAO,GACjC7O,EAAKgC,QAASrG,GAAM4L,GAAoB5L,EAIzC,SAAS+Q,OACTA,GAAW/R,UAAYqF,EAAK8O,QAAU9O,EAAKgC,QAC3ChC,EAAK0M,WAAa,GAAIA,IAEtBvM,EAAWJ,GAAOI,SAAW,SAAUnG,EAAU+U,GAChD,GAAInC,GAAS5H,EAAOgK,EAAQnR,EAC3BoR,EAAOhK,EAAQiK,EACfC,EAAS/N,EAAYpH,EAAW,IAEjC,IAAKmV,EACJ,MAAOJ,GAAY,EAAII,EAAO3W,MAAO,EAGtCyW,GAAQjV,EACRiL,KACAiK,EAAalP,EAAKoL,SAElB,OAAQ6D,EAAQ,CAGTrC,KAAY5H,EAAQ7C,EAAOkD,KAAM4J,MACjCjK,IAEJiK,EAAQA,EAAMzW,MAAOwM,EAAM,GAAGlK,SAAYmU,GAE3ChK,EAAOvM,KAAOsW,OAGfpC,GAAU,GAGJ5H,EAAQ5C,EAAaiD,KAAM4J,MAChCrC,EAAU5H,EAAMyB,QAChBuI,EAAOtW,MACN0G,MAAOwN,EAEP/O,KAAMmH,EAAM,GAAGzH,QAASnD,EAAO,OAEhC6U,EAAQA,EAAMzW,MAAOoU,EAAQ9R,QAI9B,KAAM+C,IAAQmC,GAAKyI,SACZzD,EAAQxC,EAAW3E,GAAOwH,KAAM4J,KAAcC,EAAYrR,MAC9DmH,EAAQkK,EAAYrR,GAAQmH,MAC7B4H,EAAU5H,EAAMyB,QAChBuI,EAAOtW,MACN0G,MAAOwN,EACP/O,KAAMA,EACNoB,QAAS+F,IAEViK,EAAQA,EAAMzW,MAAOoU,EAAQ9R,QAI/B,KAAM8R,EACL,MAOF,MAAOmC,GACNE,EAAMnU,OACNmU,EACClP,GAAOtC,MAAOzD,GAEdoH,EAAYpH,EAAUiL,GAASzM,MAAO,GAGzC,SAASuN,IAAYiJ,GAIpB,IAHA,GAAIrT,GAAI,EACPM,EAAM+S,EAAOlU,OACbd,EAAW,GACJ2B,EAAIM,EAAKN,IAChB3B,GAAYgV,EAAOrT,GAAGyD,KAEvB,OAAOpF,GAGR,QAASqK,IAAeyI,EAASsC,EAAYC,GAC5C,GAAI9K,GAAM6K,EAAW7K,IACpB+K,EAAOF,EAAW5K,KAClB+B,EAAM+I,GAAQ/K,EACdgL,EAAmBF,GAAgB,eAAR9I,EAC3BiJ,EAAWvO,GAEZ,OAAOmO,GAAWtT,MAEjB,SAAUJ,EAAMzB,EAAS+R,GACxB,MAAStQ,EAAOA,EAAM6I,GACrB,GAAuB,IAAlB7I,EAAKgJ,UAAkB6K,EAC3B,MAAOzC,GAASpR,EAAMzB,EAAS+R,EAGjC,QAAO,GAIR,SAAUtQ,EAAMzB,EAAS+R,GACxB,GAAIyD,GAAUxD,EAAaC,EAC1BwD,GAAa1O,EAASwO,EAGvB,IAAKxD,GACJ,MAAStQ,EAAOA,EAAM6I,GACrB,IAAuB,IAAlB7I,EAAKgJ,UAAkB6K,IACtBzC,EAASpR,EAAMzB,EAAS+R,GAC5B,OAAO,MAKV,OAAStQ,EAAOA,EAAM6I,GACrB,GAAuB,IAAlB7I,EAAKgJ,UAAkB6K,EAO3B,GANArD,EAAaxQ,EAAM0B,KAAc1B,EAAM0B,OAIvC6O,EAAcC,EAAYxQ,EAAK8Q,YAAeN,EAAYxQ,EAAK8Q,cAE1D8C,GAAQA,IAAS5T,EAAKkK,SAAS9F,cACnCpE,EAAOA,EAAM6I,IAAS7I,MAChB,CAAA,IAAM+T,EAAWxD,EAAa1F,KACpCkJ,EAAU,KAAQzO,GAAWyO,EAAU,KAAQD,EAG/C,MAAQE,GAAU,GAAMD,EAAU,EAMlC,IAHAxD,EAAa1F,GAAQmJ,EAGfA,EAAU,GAAM5C,EAASpR,EAAMzB,EAAS+R,GAC7C,OAAO,EAMZ,OAAO,GAIV,QAAS2D,IAAgBC,GACxB,MAAOA,GAAS9U,OAAS,EACxB,SAAUY,EAAMzB,EAAS+R,GACxB,GAAIrQ,GAAIiU,EAAS9U,MACjB,OAAQa,IACP,IAAMiU,EAASjU,GAAID,EAAMzB,EAAS+R,GACjC,OAAO,CAGT,QAAO,GAER4D,EAAS,GAGX,QAASC,IAAkB7V,EAAU8V,EAAUnR,GAG9C,IAFA,GAAIhD,GAAI,EACPM,EAAM6T,EAAShV,OACRa,EAAIM,EAAKN,IAChBoE,GAAQ/F,EAAU8V,EAASnU,GAAIgD,EAEhC,OAAOA,GAGR,QAASoR,IAAUhD,EAAWtR,EAAKgN,EAAQxO,EAAS+R,GAOnD,IANA,GAAItQ,GACHsU,KACArU,EAAI,EACJM,EAAM8Q,EAAUjS,OAChBmV,EAAgB,MAAPxU,EAEFE,EAAIM,EAAKN,KACVD,EAAOqR,EAAUpR,MAChB8M,IAAUA,EAAQ/M,EAAMzB,EAAS+R,KACtCgE,EAAatX,KAAMgD,GACduU,GACJxU,EAAI/C,KAAMiD,IAMd,OAAOqU,GAGR,QAASE,IAAY9E,EAAWpR,EAAU8S,EAASqD,EAAYC,EAAYC,GAO1E,MANKF,KAAeA,EAAY/S,KAC/B+S,EAAaD,GAAYC,IAErBC,IAAeA,EAAYhT,KAC/BgT,EAAaF,GAAYE,EAAYC,IAE/B3J,GAAa,SAAU7B,EAAMlG,EAAS1E,EAAS+R,GACrD,GAAIsE,GAAM3U,EAAGD,EACZ6U,KACAC,KACAC,EAAc9R,EAAQ7D,OAGtBK,EAAQ0J,GAAQgL,GAAkB7V,GAAY,IAAKC,EAAQyK,UAAazK,GAAYA,MAGpFyW,GAAYtF,IAAevG,GAAS7K,EAEnCmB,EADA4U,GAAU5U,EAAOoV,EAAQnF,EAAWnR,EAAS+R,GAG9C2E,EAAa7D,EAEZsD,IAAgBvL,EAAOuG,EAAYqF,GAAeN,MAMjDxR,EACD+R,CAQF,IALK5D,GACJA,EAAS4D,EAAWC,EAAY1W,EAAS+R,GAIrCmE,EAAa,CACjBG,EAAOP,GAAUY,EAAYH,GAC7BL,EAAYG,KAAUrW,EAAS+R,GAG/BrQ,EAAI2U,EAAKxV,MACT,OAAQa,KACDD,EAAO4U,EAAK3U,MACjBgV,EAAYH,EAAQ7U,MAAS+U,EAAWF,EAAQ7U,IAAOD,IAK1D,GAAKmJ,GACJ,GAAKuL,GAAchF,EAAY,CAC9B,GAAKgF,EAAa,CAEjBE,KACA3U,EAAIgV,EAAW7V,MACf,OAAQa,KACDD,EAAOiV,EAAWhV,KAEvB2U,EAAK5X,KAAOgY,EAAU/U,GAAKD,EAG7B0U,GAAY,KAAOO,KAAkBL,EAAMtE,GAI5CrQ,EAAIgV,EAAW7V,MACf,OAAQa,KACDD,EAAOiV,EAAWhV,MACtB2U,EAAOF,EAAazX,EAASkM,EAAMnJ,GAAS6U,EAAO5U,SAEpDkJ,EAAKyL,KAAU3R,EAAQ2R,GAAQ5U,SAOlCiV,GAAaZ,GACZY,IAAehS,EACdgS,EAAWtU,OAAQoU,EAAaE,EAAW7V,QAC3C6V,GAEGP,EACJA,EAAY,KAAMzR,EAASgS,EAAY3E,GAEvCtT,EAAKkD,MAAO+C,EAASgS,KAMzB,QAASC,IAAmB5B,GAwB3B,IAvBA,GAAI6B,GAAc/D,EAAS5Q,EAC1BD,EAAM+S,EAAOlU,OACbgW,EAAkB9Q,EAAK+K,SAAUiE,EAAO,GAAGnR,MAC3CkT,EAAmBD,GAAmB9Q,EAAK+K,SAAS,KACpDpP,EAAImV,EAAkB,EAAI,EAG1BE,EAAe3M,GAAe,SAAU3I,GACvC,MAAOA,KAASmV,GACdE,GAAkB,GACrBE,EAAkB5M,GAAe,SAAU3I,GAC1C,MAAO/C,GAASkY,EAAcnV,OAC5BqV,GAAkB,GACrBnB,GAAa,SAAUlU,EAAMzB,EAAS+R,GACrC,GAAI5Q,IAAS0V,IAAqB9E,GAAO/R,IAAYqG,MACnDuQ,EAAe5W,GAASyK,SACxBsM,EAActV,EAAMzB,EAAS+R,GAC7BiF,EAAiBvV,EAAMzB,EAAS+R,GAGlC,OADA6E,GAAe,KACRzV,IAGDO,EAAIM,EAAKN,IAChB,GAAMmR,EAAU9M,EAAK+K,SAAUiE,EAAOrT,GAAGkC,MACxC+R,GAAavL,GAAcsL,GAAgBC,GAAY9C,QACjD,CAIN,GAHAA,EAAU9M,EAAKyI,OAAQuG,EAAOrT,GAAGkC,MAAOjC,MAAO,KAAMoT,EAAOrT,GAAGsD,SAG1D6N,EAAS1P,GAAY,CAGzB,IADAlB,IAAMP,EACEO,EAAID,EAAKC,IAChB,GAAK8D,EAAK+K,SAAUiE,EAAO9S,GAAG2B,MAC7B,KAGF,OAAOqS,IACNvU,EAAI,GAAKgU,GAAgBC,GACzBjU,EAAI,GAAKoK,GAERiJ,EAAOxW,MAAO,EAAGmD,EAAI,GAAIlD,QAAS2G,MAAgC,MAAzB4P,EAAQrT,EAAI,GAAIkC,KAAe,IAAM,MAC7EN,QAASnD,EAAO,MAClB0S,EACAnR,EAAIO,GAAK0U,GAAmB5B,EAAOxW,MAAOmD,EAAGO,IAC7CA,EAAID,GAAO2U,GAAoB5B,EAASA,EAAOxW,MAAO0D,IACtDA,EAAID,GAAO8J,GAAYiJ,IAGzBY,EAASlX,KAAMoU,GAIjB,MAAO6C,IAAgBC,GAGxB,QAASsB,IAA0BC,EAAiBC,GACnD,GAAIC,GAAQD,EAAYtW,OAAS,EAChCwW,EAAYH,EAAgBrW,OAAS,EACrCyW,EAAe,SAAU1M,EAAM5K,EAAS+R,EAAKrN,EAAS6S,GACrD,GAAI9V,GAAMQ,EAAG4Q,EACZ2E,EAAe,EACf9V,EAAI,IACJoR,EAAYlI,MACZ6M,KACAC,EAAgBrR,EAEhBnF,EAAQ0J,GAAQyM,GAAatR,EAAK2I,KAAU,IAAG,IAAK6I,GAEpDI,EAAiB5Q,GAA4B,MAAjB2Q,EAAwB,EAAItU,KAAKC,UAAY,GACzErB,EAAMd,EAAML,MASb,KAPK0W,IACJlR,EAAmBrG,IAAYnC,GAAYmC,GAAWuX,GAM/C7V,IAAMM,GAA4B,OAApBP,EAAOP,EAAMQ,IAAaA,IAAM,CACrD,GAAK2V,GAAa5V,EAAO,CACxBQ,EAAI,EACEjC,GAAWyB,EAAK0J,gBAAkBtN,IACvC2I,EAAa/E,GACbsQ,GAAOrL,EAER,OAASmM,EAAUqE,EAAgBjV,KAClC,GAAK4Q,EAASpR,EAAMzB,GAAWnC,EAAUkU,GAAO,CAC/CrN,EAAQjG,KAAMgD,EACd,OAGG8V,IACJxQ,EAAU4Q,GAKPP,KAEE3V,GAAQoR,GAAWpR,IACxB+V,IAII5M,GACJkI,EAAUrU,KAAMgD,IAgBnB,GATA+V,GAAgB9V,EASX0V,GAAS1V,IAAM8V,EAAe,CAClCvV,EAAI,CACJ,OAAS4Q,EAAUsE,EAAYlV,KAC9B4Q,EAASC,EAAW2E,EAAYzX,EAAS+R,EAG1C,IAAKnH,EAAO,CAEX,GAAK4M,EAAe,EACnB,MAAQ9V,IACAoR,EAAUpR,IAAM+V,EAAW/V,KACjC+V,EAAW/V,GAAK8F,EAAIvI,KAAMyF,GAM7B+S,GAAa3B,GAAU2B,GAIxBhZ,EAAKkD,MAAO+C,EAAS+S,GAGhBF,IAAc3M,GAAQ6M,EAAW5W,OAAS,GAC5C2W,EAAeL,EAAYtW,OAAW,GAExCiF,GAAOuK,WAAY3L,GAUrB,MALK6S,KACJxQ,EAAU4Q,EACVtR,EAAmBqR,GAGb5E,EAGT,OAAOsE,GACN3K,GAAc6K,GACdA,EA+KF,MA5KAnR,GAAUL,GAAOK,QAAU,SAAUpG,EAAUgL,GAC9C,GAAIrJ,GACHyV,KACAD,KACAhC,EAAS9N,EAAerH,EAAW,IAEpC,KAAMmV,EAAS,CAERnK,IACLA,EAAQ7E,EAAUnG,IAEnB2B,EAAIqJ,EAAMlK,MACV,OAAQa,IACPwT,EAASyB,GAAmB5L,EAAMrJ,IAC7BwT,EAAQ/R,GACZgU,EAAY1Y,KAAMyW,GAElBgC,EAAgBzY,KAAMyW,EAKxBA,GAAS9N,EAAerH,EAAUkX,GAA0BC,EAAiBC,IAG7EjC,EAAOnV,SAAWA,EAEnB,MAAOmV,IAYR9O,EAASN,GAAOM,OAAS,SAAUrG,EAAUC,EAAS0E,EAASkG,GAC9D,GAAIlJ,GAAGqT,EAAQ6C,EAAOhU,EAAM8K,EAC3BmJ,EAA+B,kBAAb9X,IAA2BA,EAC7CgL,GAASH,GAAQ1E,EAAWnG,EAAW8X,EAAS9X,UAAYA,EAM7D,IAJA2E,EAAUA,MAIY,IAAjBqG,EAAMlK,OAAe,CAIzB,GADAkU,EAAShK,EAAM,GAAKA,EAAM,GAAGxM,MAAO,GAC/BwW,EAAOlU,OAAS,GAAkC,QAA5B+W,EAAQ7C,EAAO,IAAInR,MACvB,IAArB5D,EAAQyK,UAAkB/D,GAAkBX,EAAK+K,SAAUiE,EAAO,GAAGnR,MAAS,CAG/E,GADA5D,GAAY+F,EAAK2I,KAAS,GAAGkJ,EAAM5S,QAAQ,GAAG1B,QAAQ+F,EAAWC,IAAYtJ,QAAkB,IACzFA,EACL,MAAO0E,EAGImT,KACX7X,EAAUA,EAAQL,YAGnBI,EAAWA,EAASxB,MAAOwW,EAAOvI,QAAQrH,MAAMtE,QAIjDa,EAAI6G,EAAwB,aAAEmD,KAAM3L,GAAa,EAAIgV,EAAOlU,MAC5D,OAAQa,IAAM,CAIb,GAHAkW,EAAQ7C,EAAOrT,GAGVqE,EAAK+K,SAAWlN,EAAOgU,EAAMhU,MACjC,KAED,KAAM8K,EAAO3I,EAAK2I,KAAM9K,MAEjBgH,EAAO8D,EACZkJ,EAAM5S,QAAQ,GAAG1B,QAAS+F,EAAWC,IACrCF,EAASsC,KAAMqJ,EAAO,GAAGnR,OAAUoI,GAAahM,EAAQL,aAAgBK,IACpE,CAKJ,GAFA+U,EAAO3S,OAAQV,EAAG,GAClB3B,EAAW6K,EAAK/J,QAAUiL,GAAYiJ,IAChChV,EAEL,MADAtB,GAAKkD,MAAO+C,EAASkG,GACdlG,CAGR,SAeJ,OAPEmT,GAAY1R,EAASpG,EAAUgL,IAChCH,EACA5K,GACC0G,EACDhC,GACC1E,GAAWoJ,EAASsC,KAAM3L,IAAciM,GAAahM,EAAQL,aAAgBK,GAExE0E,GAMRxF,EAAQsR,WAAarN,EAAQyC,MAAM,IAAIzD,KAAMkF,GAAY0E,KAAK,MAAQ5I,EAItEjE,EAAQqR,mBAAqBhK,EAG7BC,IAIAtH,EAAQuQ,aAAe/C,GAAO,SAAUC,GAEvC,MAA0E,GAAnEA,EAAG0C,wBAAyBxR,EAAS0B,cAAc,eAMrDmN,GAAO,SAAUC,GAEtB,MADAA,GAAGkC,UAAY,mBAC+B,MAAvClC,EAAG+D,WAAW9E,aAAa,WAElCgB,GAAW,yBAA0B,SAAUnL,EAAMc,EAAM0D,GAC1D,IAAMA,EACL,MAAOxE,GAAKmK,aAAcrJ,EAA6B,SAAvBA,EAAKsD,cAA2B,EAAI,KAOjE3G,EAAQ4I,YAAe4E,GAAO,SAAUC,GAG7C,MAFAA,GAAGkC,UAAY,WACflC,EAAG+D,WAAW7E,aAAc,QAAS,IACY,KAA1Cc,EAAG+D,WAAW9E,aAAc,YAEnCgB,GAAW,QAAS,SAAUnL,EAAMc,EAAM0D,GACzC,IAAMA,GAAyC,UAAhCxE,EAAKkK,SAAS9F,cAC5B,MAAOpE,GAAKqW,eAOTpL,GAAO,SAAUC,GACtB,MAAsC,OAA/BA,EAAGf,aAAa,eAEvBgB,GAAWjF,EAAU,SAAUlG,EAAMc,EAAM0D,GAC1C,GAAIgK,EACJ,KAAMhK,EACL,MAAOxE,GAAMc,MAAW,EAAOA,EAAKsD,eACjCoK,EAAMxO,EAAKkN,iBAAkBpM,KAAW0N,EAAIC,UAC7CD,EAAI9K,MACL,OAKGW,IAEH9H,EAIJ8B,GAAO4O,KAAO5I,EACdhG,EAAOgQ,KAAOhK,EAAO8K,UAGrB9Q,EAAOgQ,KAAM,KAAQhQ,EAAOgQ,KAAK/H,QACjCjI,EAAOuQ,WAAavQ,EAAOiY,OAASjS,EAAOuK,WAC3CvQ,EAAON,KAAOsG,EAAOE,QACrBlG,EAAOkY,SAAWlS,EAAOG,MACzBnG,EAAO+G,SAAWf,EAAOe,SACzB/G,EAAOmY,eAAiBnS,EAAOqK,MAK/B,IAAI7F,GAAM,SAAU7I,EAAM6I,EAAK4N,GAC9B,GAAIvF,MACHwF,EAAqBjV,SAAVgV,CAEZ,QAAUzW,EAAOA,EAAM6I,KAA6B,IAAlB7I,EAAKgJ,SACtC,GAAuB,IAAlBhJ,EAAKgJ,SAAiB,CAC1B,GAAK0N,GAAYrY,EAAQ2B,GAAO2W,GAAIF,GACnC,KAEDvF,GAAQlU,KAAMgD,GAGhB,MAAOkR,IAIJ0F,EAAW,SAAUC,EAAG7W,GAG3B,IAFA,GAAIkR,MAEI2F,EAAGA,EAAIA,EAAElL,YACI,IAAfkL,EAAE7N,UAAkB6N,IAAM7W,GAC9BkR,EAAQlU,KAAM6Z,EAIhB,OAAO3F,IAIJ4F,EAAgBzY,EAAOgQ,KAAK/E,MAAMhC,YAItC,SAAS4C,GAAUlK,EAAMc,GAEvB,MAAOd,GAAKkK,UAAYlK,EAAKkK,SAAS9F,gBAAkBtD,EAAKsD,cAG/D,GAAI2S,GAAa,kEAIbC,EAAY,gBAGhB,SAASC,GAAQ3I,EAAU4I,EAAW/F,GACrC,MAAK9S,GAAOgD,WAAY6V,GAChB7Y,EAAO+E,KAAMkL,EAAU,SAAUtO,EAAMC,GAC7C,QAASiX,EAAU1Z,KAAMwC,EAAMC,EAAGD,KAAWmR,IAK1C+F,EAAUlO,SACP3K,EAAO+E,KAAMkL,EAAU,SAAUtO,GACvC,MAASA,KAASkX,IAAgB/F,IAKV,gBAAd+F,GACJ7Y,EAAO+E,KAAMkL,EAAU,SAAUtO,GACvC,MAAS/C,GAAQO,KAAM0Z,EAAWlX,QAAkBmR,IAKjD6F,EAAU/M,KAAMiN,GACb7Y,EAAO0O,OAAQmK,EAAW5I,EAAU6C,IAI5C+F,EAAY7Y,EAAO0O,OAAQmK,EAAW5I,GAC/BjQ,EAAO+E,KAAMkL,EAAU,SAAUtO,GACvC,MAAS/C,GAAQO,KAAM0Z,EAAWlX,QAAkBmR,GAAyB,IAAlBnR,EAAKgJ,YAIlE3K,EAAO0O,OAAS,SAAUsB,EAAM5O,EAAO0R,GACtC,GAAInR,GAAOP,EAAO,EAMlB,OAJK0R,KACJ9C,EAAO,QAAUA,EAAO,KAGH,IAAjB5O,EAAML,QAAkC,IAAlBY,EAAKgJ,SACxB3K,EAAO4O,KAAKK,gBAAiBtN,EAAMqO,IAAWrO,MAG/C3B,EAAO4O,KAAK1J,QAAS8K,EAAMhQ,EAAO+E,KAAM3D,EAAO,SAAUO,GAC/D,MAAyB,KAAlBA,EAAKgJ,aAId3K,EAAOG,GAAGoC,QACTqM,KAAM,SAAU3O,GACf,GAAI2B,GAAGP,EACNa,EAAM/D,KAAK4C,OACX+X,EAAO3a,IAER,IAAyB,gBAAb8B,GACX,MAAO9B,MAAKgD,UAAWnB,EAAQC,GAAWyO,OAAQ,WACjD,IAAM9M,EAAI,EAAGA,EAAIM,EAAKN,IACrB,GAAK5B,EAAO+G,SAAU+R,EAAMlX,GAAKzD,MAChC,OAAO,IAQX,KAFAkD,EAAMlD,KAAKgD,cAELS,EAAI,EAAGA,EAAIM,EAAKN,IACrB5B,EAAO4O,KAAM3O,EAAU6Y,EAAMlX,GAAKP,EAGnC,OAAOa,GAAM,EAAIlC,EAAOuQ,WAAYlP,GAAQA,GAE7CqN,OAAQ,SAAUzO,GACjB,MAAO9B,MAAKgD,UAAWyX,EAAQza,KAAM8B,OAAgB,KAEtD6S,IAAK,SAAU7S,GACd,MAAO9B,MAAKgD,UAAWyX,EAAQza,KAAM8B,OAAgB,KAEtDqY,GAAI,SAAUrY,GACb,QAAS2Y,EACRza,KAIoB,gBAAb8B,IAAyBwY,EAAc7M,KAAM3L,GACnDD,EAAQC,GACRA,OACD,GACCc,SASJ,IAAIgY,GAMH1P,EAAa,sCAEbjJ,EAAOJ,EAAOG,GAAGC,KAAO,SAAUH,EAAUC,EAASqT,GACpD,GAAItI,GAAOtJ,CAGX,KAAM1B,EACL,MAAO9B,KAQR,IAHAoV,EAAOA,GAAQwF,EAGU,gBAAb9Y,GAAwB,CAanC,GAPCgL,EALsB,MAAlBhL,EAAU,IACsB,MAApCA,EAAUA,EAASc,OAAS,IAC5Bd,EAASc,QAAU,GAGT,KAAMd,EAAU,MAGlBoJ,EAAWiC,KAAMrL,IAIrBgL,IAAWA,EAAO,IAAQ/K,EA6CxB,OAAMA,GAAWA,EAAQW,QACtBX,GAAWqT,GAAO3E,KAAM3O,GAK1B9B,KAAK2C,YAAaZ,GAAU0O,KAAM3O,EAhDzC,IAAKgL,EAAO,GAAM,CAYjB,GAXA/K,EAAUA,YAAmBF,GAASE,EAAS,GAAMA,EAIrDF,EAAOsB,MAAOnD,KAAM6B,EAAOgZ,UAC1B/N,EAAO,GACP/K,GAAWA,EAAQyK,SAAWzK,EAAQmL,eAAiBnL,EAAUnC,GACjE,IAII2a,EAAW9M,KAAMX,EAAO,KAASjL,EAAOiD,cAAe/C,GAC3D,IAAM+K,IAAS/K,GAGTF,EAAOgD,WAAY7E,KAAM8M,IAC7B9M,KAAM8M,GAAS/K,EAAS+K,IAIxB9M,KAAK+R,KAAMjF,EAAO/K,EAAS+K,GAK9B,OAAO9M,MAYP,MARAwD,GAAO5D,EAASwN,eAAgBN,EAAO,IAElCtJ,IAGJxD,KAAM,GAAMwD,EACZxD,KAAK4C,OAAS,GAER5C,KAcH,MAAK8B,GAAS0K,UACpBxM,KAAM,GAAM8B,EACZ9B,KAAK4C,OAAS,EACP5C,MAII6B,EAAOgD,WAAY/C,GACRmD,SAAfmQ,EAAK0F,MACX1F,EAAK0F,MAAOhZ,GAGZA,EAAUD,GAGLA,EAAO2E,UAAW1E,EAAU9B,MAIrCiC,GAAKQ,UAAYZ,EAAOG,GAGxB4Y,EAAa/Y,EAAQjC,EAGrB,IAAImb,GAAe,iCAGlBC,GACCC,UAAU,EACVC,UAAU,EACV5O,MAAM,EACN6O,MAAM,EAGRtZ,GAAOG,GAAGoC,QACT0Q,IAAK,SAAUnQ,GACd,GAAIyW,GAAUvZ,EAAQ8C,EAAQ3E,MAC7Bqb,EAAID,EAAQxY,MAEb,OAAO5C,MAAKuQ,OAAQ,WAEnB,IADA,GAAI9M,GAAI,EACAA,EAAI4X,EAAG5X,IACd,GAAK5B,EAAO+G,SAAU5I,KAAMob,EAAS3X,IACpC,OAAO,KAMX6X,QAAS,SAAU3I,EAAW5Q,GAC7B,GAAIiN,GACHvL,EAAI,EACJ4X,EAAIrb,KAAK4C,OACT8R,KACA0G,EAA+B,gBAAdzI,IAA0B9Q,EAAQ8Q,EAGpD,KAAM2H,EAAc7M,KAAMkF,GACzB,KAAQlP,EAAI4X,EAAG5X,IACd,IAAMuL,EAAMhP,KAAMyD,GAAKuL,GAAOA,IAAQjN,EAASiN,EAAMA,EAAItN,WAGxD,GAAKsN,EAAIxC,SAAW,KAAQ4O,EAC3BA,EAAQG,MAAOvM,MAGE,IAAjBA,EAAIxC,UACH3K,EAAO4O,KAAKK,gBAAiB9B,EAAK2D,IAAgB,CAEnD+B,EAAQlU,KAAMwO,EACd,OAMJ,MAAOhP,MAAKgD,UAAW0R,EAAQ9R,OAAS,EAAIf,EAAOuQ,WAAYsC,GAAYA,IAI5E6G,MAAO,SAAU/X,GAGhB,MAAMA,GAKe,gBAATA,GACJ/C,EAAQO,KAAMa,EAAQ2B,GAAQxD,KAAM,IAIrCS,EAAQO,KAAMhB,KAGpBwD,EAAKd,OAASc,EAAM,GAAMA,GAZjBxD,KAAM,IAAOA,KAAM,GAAI0B,WAAe1B,KAAK4D,QAAQ4X,UAAU5Y,WAgBxE6Y,IAAK,SAAU3Z,EAAUC,GACxB,MAAO/B,MAAKgD,UACXnB,EAAOuQ,WACNvQ,EAAOsB,MAAOnD,KAAK8C,MAAOjB,EAAQC,EAAUC,OAK/C2Z,QAAS,SAAU5Z,GAClB,MAAO9B,MAAKyb,IAAiB,MAAZ3Z,EAChB9B,KAAKoD,WAAapD,KAAKoD,WAAWmN,OAAQzO,MAK7C,SAAS6Z,GAAS3M,EAAK3C,GACtB,OAAU2C,EAAMA,EAAK3C,KAA4B,IAAjB2C,EAAIxC,UACpC,MAAOwC,GAGRnN,EAAOwB,MACN8Q,OAAQ,SAAU3Q,GACjB,GAAI2Q,GAAS3Q,EAAK9B,UAClB,OAAOyS,IAA8B,KAApBA,EAAO3H,SAAkB2H,EAAS,MAEpDyH,QAAS,SAAUpY,GAClB,MAAO6I,GAAK7I,EAAM,eAEnBqY,aAAc,SAAUrY,EAAMC,EAAGwW,GAChC,MAAO5N,GAAK7I,EAAM,aAAcyW,IAEjC3N,KAAM,SAAU9I,GACf,MAAOmY,GAASnY,EAAM,gBAEvB2X,KAAM,SAAU3X,GACf,MAAOmY,GAASnY,EAAM,oBAEvBsY,QAAS,SAAUtY,GAClB,MAAO6I,GAAK7I,EAAM,gBAEnBgY,QAAS,SAAUhY,GAClB,MAAO6I,GAAK7I,EAAM,oBAEnBuY,UAAW,SAAUvY,EAAMC,EAAGwW,GAC7B,MAAO5N,GAAK7I,EAAM,cAAeyW,IAElC+B,UAAW,SAAUxY,EAAMC,EAAGwW,GAC7B,MAAO5N,GAAK7I,EAAM,kBAAmByW,IAEtCG,SAAU,SAAU5W,GACnB,MAAO4W,IAAY5W,EAAK9B,gBAAmB+Q,WAAYjP,IAExDyX,SAAU,SAAUzX,GACnB,MAAO4W,GAAU5W,EAAKiP,aAEvByI,SAAU,SAAU1X,GACb,MAAKkK,GAAUlK,EAAM,UACVA,EAAKyY,iBAMXvO,EAAUlK,EAAM,cACjBA,EAAOA,EAAK0Y,SAAW1Y,GAGpB3B,EAAOsB,SAAWK,EAAK+I,eAEnC,SAAUjI,EAAMtC,GAClBH,EAAOG,GAAIsC,GAAS,SAAU2V,EAAOnY,GACpC,GAAI4S,GAAU7S,EAAO0B,IAAKvD,KAAMgC,EAAIiY,EAuBpC,OArB0B,UAArB3V,EAAKhE,YACTwB,EAAWmY,GAGPnY,GAAgC,gBAAbA,KACvB4S,EAAU7S,EAAO0O,OAAQzO,EAAU4S,IAG/B1U,KAAK4C,OAAS,IAGZoY,EAAkB1W,IACvBzC,EAAOuQ,WAAYsC,GAIfqG,EAAatN,KAAMnJ,IACvBoQ,EAAQyH,WAIHnc,KAAKgD,UAAW0R,KAGzB,IAAI0H,GAAgB,mBAKpB,SAASC,GAAehY,GACvB,GAAIiY,KAIJ,OAHAza,GAAOwB,KAAMgB,EAAQyI,MAAOsP,OAAuB,SAAU9Q,EAAGiR,GAC/DD,EAAQC,IAAS,IAEXD,EAyBRza,EAAO2a,UAAY,SAAUnY,GAI5BA,EAA6B,gBAAZA,GAChBgY,EAAehY,GACfxC,EAAOuC,UAAYC,EAEpB,IACCoY,GAGAC,EAGAC,EAGAC,EAGAnT,KAGAoT,KAGAC,KAGAC,EAAO,WAQN,IALAH,EAASA,GAAUvY,EAAQ2Y,KAI3BL,EAAQF,GAAS,EACTI,EAAMja,OAAQka,KAAmB,CACxCJ,EAASG,EAAMtO,OACf,SAAUuO,EAAcrT,EAAK7G,OAGvB6G,EAAMqT,GAAcpZ,MAAOgZ,EAAQ,GAAKA,EAAQ,OAAU,GAC9DrY,EAAQ4Y,cAGRH,EAAcrT,EAAK7G,OACnB8Z,GAAS,GAMNrY,EAAQqY,SACbA,GAAS,GAGVD,GAAS,EAGJG,IAIHnT,EADIiT,KAKG,KAMV/B,GAGCc,IAAK,WA2BJ,MA1BKhS,KAGCiT,IAAWD,IACfK,EAAcrT,EAAK7G,OAAS,EAC5Bia,EAAMrc,KAAMkc,IAGb,QAAWjB,GAAKnU,GACfzF,EAAOwB,KAAMiE,EAAM,SAAUgE,EAAGrE,GAC1BpF,EAAOgD,WAAYoC,GACjB5C,EAAQyV,QAAWa,EAAK7F,IAAK7N,IAClCwC,EAAKjJ,KAAMyG,GAEDA,GAAOA,EAAIrE,QAAiC,WAAvBf,EAAO8D,KAAMsB,IAG7CwU,EAAKxU,MAGHtD,WAEA+Y,IAAWD,GACfM,KAGK/c,MAIRkd,OAAQ,WAYP,MAXArb,GAAOwB,KAAMM,UAAW,SAAU2H,EAAGrE,GACpC,GAAIsU,EACJ,QAAUA,EAAQ1Z,EAAO6E,QAASO,EAAKwC,EAAM8R,OAC5C9R,EAAKtF,OAAQoX,EAAO,GAGfA,GAASuB,GACbA,MAII9c,MAKR8U,IAAK,SAAU9S,GACd,MAAOA,GACNH,EAAO6E,QAAS1E,EAAIyH,MACpBA,EAAK7G,OAAS,GAIhBkT,MAAO,WAIN,MAHKrM,KACJA,MAEMzJ,MAMRmd,QAAS,WAGR,MAFAP,GAASC,KACTpT,EAAOiT,EAAS,GACT1c,MAERoM,SAAU,WACT,OAAQ3C,GAMT2T,KAAM,WAKL,MAJAR,GAASC,KACHH,GAAWD,IAChBhT,EAAOiT,EAAS,IAEV1c,MAER4c,OAAQ,WACP,QAASA,GAIVS,SAAU,SAAUtb,EAASuF,GAS5B,MARMsV,KACLtV,EAAOA,MACPA,GAASvF,EAASuF,EAAKhH,MAAQgH,EAAKhH,QAAUgH,GAC9CuV,EAAMrc,KAAM8G,GACNmV,GACLM,KAGK/c,MAIR+c,KAAM,WAEL,MADApC,GAAK0C,SAAUrd,KAAM2D,WACd3D,MAIR2c,MAAO,WACN,QAASA,GAIZ,OAAOhC,GAIR,SAAS2C,GAAUC,GAClB,MAAOA,GAER,QAASC,GAASC,GACjB,KAAMA,GAGP,QAASC,GAAYxW,EAAOyW,EAASC,EAAQC,GAC5C,GAAIC,EAEJ,KAGM5W,GAASrF,EAAOgD,WAAciZ,EAAS5W,EAAM6W,SACjDD,EAAO9c,KAAMkG,GAAQ6B,KAAM4U,GAAUK,KAAMJ,GAGhC1W,GAASrF,EAAOgD,WAAciZ,EAAS5W,EAAM+W,MACxDH,EAAO9c,KAAMkG,EAAOyW,EAASC,GAQ7BD,EAAQja,MAAOuB,QAAaiC,GAAQ5G,MAAOud,IAM3C,MAAQ3W,GAIT0W,EAAOla,MAAOuB,QAAaiC,KAI7BrF,EAAOuC,QAEN8Z,SAAU,SAAUC,GACnB,GAAIC,KAIA,SAAU,WAAYvc,EAAO2a,UAAW,UACzC3a,EAAO2a,UAAW,UAAY,IAC7B,UAAW,OAAQ3a,EAAO2a,UAAW,eACtC3a,EAAO2a,UAAW,eAAiB,EAAG,aACrC,SAAU,OAAQ3a,EAAO2a,UAAW,eACrC3a,EAAO2a,UAAW,eAAiB,EAAG,aAExC6B,EAAQ,UACRN,GACCM,MAAO,WACN,MAAOA,IAERC,OAAQ,WAEP,MADAC,GAASxV,KAAMpF,WAAYqa,KAAMra,WAC1B3D,MAERwe,QAAS,SAAUxc,GAClB,MAAO+b,GAAQE,KAAM,KAAMjc,IAI5Byc,KAAM,WACL,GAAIC,GAAM/a,SAEV,OAAO9B,GAAOqc,SAAU,SAAUS,GACjC9c,EAAOwB,KAAM+a,EAAQ,SAAU3a,EAAGmb,GAGjC,GAAI5c,GAAKH,EAAOgD,WAAY6Z,EAAKE,EAAO,MAAWF,EAAKE,EAAO,GAK/DL,GAAUK,EAAO,IAAO,WACvB,GAAIC,GAAW7c,GAAMA,EAAG0B,MAAO1D,KAAM2D,UAChCkb,IAAYhd,EAAOgD,WAAYga,EAASd,SAC5Cc,EAASd,UACPe,SAAUH,EAASI,QACnBhW,KAAM4V,EAAShB,SACfK,KAAMW,EAASf,QAEjBe,EAAUC,EAAO,GAAM,QACtB5e,KACAgC,GAAO6c,GAAalb,eAKxB+a,EAAM,OACHX,WAELE,KAAM,SAAUe,EAAaC,EAAYC,GACxC,GAAIC,GAAW,CACf,SAASxB,GAASyB,EAAOb,EAAU1P,EAASwQ,GAC3C,MAAO,YACN,GAAIC,GAAOtf,KACVsH,EAAO3D,UACP4b,EAAa,WACZ,GAAIV,GAAUZ,CAKd,MAAKmB,EAAQD,GAAb,CAQA,GAJAN,EAAWhQ,EAAQnL,MAAO4b,EAAMhY,GAI3BuX,IAAaN,EAASR,UAC1B,KAAM,IAAIyB,WAAW,2BAOtBvB,GAAOY,IAKgB,gBAAbA,IACY,kBAAbA,KACRA,EAASZ,KAGLpc,EAAOgD,WAAYoZ,GAGlBoB,EACJpB,EAAKjd,KACJ6d,EACAlB,EAASwB,EAAUZ,EAAUjB,EAAU+B,GACvC1B,EAASwB,EAAUZ,EAAUf,EAAS6B,KAOvCF,IAEAlB,EAAKjd,KACJ6d,EACAlB,EAASwB,EAAUZ,EAAUjB,EAAU+B,GACvC1B,EAASwB,EAAUZ,EAAUf,EAAS6B,GACtC1B,EAASwB,EAAUZ,EAAUjB,EAC5BiB,EAASkB,eASP5Q,IAAYyO,IAChBgC,EAAOra,OACPqC,GAASuX,KAKRQ,GAAWd,EAASmB,aAAeJ,EAAMhY,MAK7CqY,EAAUN,EACTE,EACA,WACC,IACCA,IACC,MAAQ9S,GAEJ5K,EAAOqc,SAAS0B,eACpB/d,EAAOqc,SAAS0B,cAAenT,EAC9BkT,EAAQE,YAMLT,EAAQ,GAAKD,IAIZtQ,IAAY2O,IAChB8B,EAAOra,OACPqC,GAASmF,IAGV8R,EAASuB,WAAYR,EAAMhY,KAS3B8X,GACJO,KAKK9d,EAAOqc,SAAS6B,eACpBJ,EAAQE,WAAahe,EAAOqc,SAAS6B,gBAEtChgB,EAAOigB,WAAYL,KAKtB,MAAO9d,GAAOqc,SAAU,SAAUS,GAGjCP,EAAQ,GAAK,GAAI3C,IAChBkC,EACC,EACAgB,EACA9c,EAAOgD,WAAYqa,GAClBA,EACA5B,EACDqB,EAASc,aAKXrB,EAAQ,GAAK,GAAI3C,IAChBkC,EACC,EACAgB,EACA9c,EAAOgD,WAAYma,GAClBA,EACA1B,IAKHc,EAAQ,GAAK,GAAI3C,IAChBkC,EACC,EACAgB,EACA9c,EAAOgD,WAAYoa,GAClBA,EACAzB,MAGAO,WAKLA,QAAS,SAAUrY,GAClB,MAAc,OAAPA,EAAc7D,EAAOuC,OAAQsB,EAAKqY,GAAYA,IAGvDQ,IA2DD,OAxDA1c,GAAOwB,KAAM+a,EAAQ,SAAU3a,EAAGmb,GACjC,GAAInV,GAAOmV,EAAO,GACjBqB,EAAcrB,EAAO,EAKtBb,GAASa,EAAO,IAAQnV,EAAKgS,IAGxBwE,GACJxW,EAAKgS,IACJ,WAIC4C,EAAQ4B,GAKT7B,EAAQ,EAAI3a,GAAK,GAAI0Z,QAGrBiB,EAAQ,GAAK,GAAIhB,MAOnB3T,EAAKgS,IAAKmD,EAAO,GAAI7B,MAKrBwB,EAAUK,EAAO,IAAQ,WAExB,MADAL,GAAUK,EAAO,GAAM,QAAU5e,OAASue,EAAWtZ,OAAYjF,KAAM2D,WAChE3D,MAMRue,EAAUK,EAAO,GAAM,QAAWnV,EAAK4T,WAIxCU,EAAQA,QAASQ,GAGZJ,GACJA,EAAKnd,KAAMud,EAAUA,GAIfA,GAIR2B,KAAM,SAAUC,GACf,GAGCC,GAAYzc,UAAUf,OAGtBa,EAAI2c,EAGJC,EAAkBtb,MAAOtB,GACzB6c,EAAgBhgB,EAAMU,KAAM2C,WAG5B4c,EAAS1e,EAAOqc,WAGhBsC,EAAa,SAAU/c,GACtB,MAAO,UAAUyD,GAChBmZ,EAAiB5c,GAAMzD,KACvBsgB,EAAe7c,GAAME,UAAUf,OAAS,EAAItC,EAAMU,KAAM2C,WAAcuD,IAC5DkZ,GACTG,EAAOb,YAAaW,EAAiBC,IAMzC,IAAKF,GAAa,IACjB1C,EAAYyC,EAAaI,EAAOxX,KAAMyX,EAAY/c,IAAMka,QAAS4C,EAAO3C,QACtEwC,GAGsB,YAAnBG,EAAOlC,SACXxc,EAAOgD,WAAYyb,EAAe7c,IAAO6c,EAAe7c,GAAIwa,OAE5D,MAAOsC,GAAOtC,MAKhB,OAAQxa,IACPia,EAAY4C,EAAe7c,GAAK+c,EAAY/c,GAAK8c,EAAO3C,OAGzD,OAAO2C,GAAOxC,YAOhB,IAAI0C,GAAc,wDAElB5e,GAAOqc,SAAS0B,cAAgB,SAAUra,EAAOmb,GAI3C3gB,EAAO4gB,SAAW5gB,EAAO4gB,QAAQC,MAAQrb,GAASkb,EAAYhT,KAAMlI,EAAMjB,OAC9EvE,EAAO4gB,QAAQC,KAAM,8BAAgCrb,EAAMsb,QAAStb,EAAMmb,MAAOA,IAOnF7e,EAAOif,eAAiB,SAAUvb,GACjCxF,EAAOigB,WAAY,WAClB,KAAMza,KAQR,IAAIwb,GAAYlf,EAAOqc,UAEvBrc,GAAOG,GAAG8Y,MAAQ,SAAU9Y,GAY3B,MAVA+e,GACE9C,KAAMjc,GADR+e,SAMS,SAAUxb,GACjB1D,EAAOif,eAAgBvb,KAGlBvF,MAGR6B,EAAOuC,QAGNkB,SAAS,EAIT0b,UAAW,EAGXlG,MAAO,SAAUmG,IAGXA,KAAS,IAASpf,EAAOmf,UAAYnf,EAAOyD,WAKjDzD,EAAOyD,SAAU,EAGZ2b,KAAS,KAAUpf,EAAOmf,UAAY,GAK3CD,EAAUrB,YAAa9f,GAAYiC,QAIrCA,EAAOiZ,MAAMmD,KAAO8C,EAAU9C,IAG9B,SAASiD,KACRthB,EAASuhB,oBAAqB,mBAAoBD;AAClDnhB,EAAOohB,oBAAqB,OAAQD,GACpCrf,EAAOiZ,QAOqB,aAAxBlb,EAASwhB,YACa,YAAxBxhB,EAASwhB,aAA6BxhB,EAAS+P,gBAAgB0R,SAGjEthB,EAAOigB,WAAYne,EAAOiZ,QAK1Blb,EAASqQ,iBAAkB,mBAAoBiR,GAG/CnhB,EAAOkQ,iBAAkB,OAAQiR,GAQlC,IAAII,GAAS,SAAUre,EAAOjB,EAAIqM,EAAKnH,EAAOqa,EAAWC,EAAUC,GAClE,GAAIhe,GAAI,EACPM,EAAMd,EAAML,OACZ8e,EAAc,MAAPrT,CAGR,IAA4B,WAAvBxM,EAAO8D,KAAM0I,GAAqB,CACtCkT,GAAY,CACZ,KAAM9d,IAAK4K,GACViT,EAAQre,EAAOjB,EAAIyB,EAAG4K,EAAK5K,IAAK,EAAM+d,EAAUC,OAI3C,IAAexc,SAAViC,IACXqa,GAAY,EAEN1f,EAAOgD,WAAYqC,KACxBua,GAAM,GAGFC,IAGCD,GACJzf,EAAGhB,KAAMiC,EAAOiE,GAChBlF,EAAK,OAIL0f,EAAO1f,EACPA,EAAK,SAAUwB,EAAM6K,EAAKnH,GACzB,MAAOwa,GAAK1gB,KAAMa,EAAQ2B,GAAQ0D,MAKhClF,GACJ,KAAQyB,EAAIM,EAAKN,IAChBzB,EACCiB,EAAOQ,GAAK4K,EAAKoT,EACjBva,EACAA,EAAMlG,KAAMiC,EAAOQ,GAAKA,EAAGzB,EAAIiB,EAAOQ,GAAK4K,IAM/C,OAAKkT,GACGte,EAIHye,EACG1f,EAAGhB,KAAMiC,GAGVc,EAAM/B,EAAIiB,EAAO,GAAKoL,GAAQmT,GAElCG,EAAa,SAAUC,GAQ1B,MAA0B,KAAnBA,EAAMpV,UAAqC,IAAnBoV,EAAMpV,YAAsBoV,EAAMpV,SAMlE,SAASqV,KACR7hB,KAAKkF,QAAUrD,EAAOqD,QAAU2c,EAAKC,MAGtCD,EAAKC,IAAM,EAEXD,EAAKpf,WAEJ2L,MAAO,SAAUwT,GAGhB,GAAI1a,GAAQ0a,EAAO5hB,KAAKkF,QA4BxB,OAzBMgC,KACLA,KAKKya,EAAYC,KAIXA,EAAMpV,SACVoV,EAAO5hB,KAAKkF,SAAYgC,EAMxB9G,OAAO2hB,eAAgBH,EAAO5hB,KAAKkF,SAClCgC,MAAOA,EACP8a,cAAc,MAMX9a,GAER+a,IAAK,SAAUL,EAAOM,EAAMhb,GAC3B,GAAIib,GACH/T,EAAQpO,KAAKoO,MAAOwT,EAIrB,IAAqB,gBAATM,GACX9T,EAAOvM,EAAOuE,UAAW8b,IAAWhb,MAMpC,KAAMib,IAAQD,GACb9T,EAAOvM,EAAOuE,UAAW+b,IAAWD,EAAMC,EAG5C,OAAO/T,IAERtL,IAAK,SAAU8e,EAAOvT,GACrB,MAAepJ,UAARoJ,EACNrO,KAAKoO,MAAOwT,GAGZA,EAAO5hB,KAAKkF,UAAa0c,EAAO5hB,KAAKkF,SAAWrD,EAAOuE,UAAWiI,KAEpEiT,OAAQ,SAAUM,EAAOvT,EAAKnH,GAa7B,MAAajC,UAARoJ,GACCA,GAAsB,gBAARA,IAAgCpJ,SAAViC,EAElClH,KAAK8C,IAAK8e,EAAOvT,IASzBrO,KAAKiiB,IAAKL,EAAOvT,EAAKnH,GAILjC,SAAViC,EAAsBA,EAAQmH,IAEtC6O,OAAQ,SAAU0E,EAAOvT,GACxB,GAAI5K,GACH2K,EAAQwT,EAAO5hB,KAAKkF,QAErB,IAAeD,SAAVmJ,EAAL,CAIA,GAAanJ,SAARoJ,EAAoB,CAGnBtJ,MAAMC,QAASqJ,GAInBA,EAAMA,EAAI9K,IAAK1B,EAAOuE,YAEtBiI,EAAMxM,EAAOuE,UAAWiI,GAIxBA,EAAMA,IAAOD,IACVC,GACAA,EAAIvB,MAAOsP,QAGf3Y,EAAI4K,EAAIzL,MAER,OAAQa,UACA2K,GAAOC,EAAK5K,KAKRwB,SAARoJ,GAAqBxM,EAAOqE,cAAekI,MAM1CwT,EAAMpV,SACVoV,EAAO5hB,KAAKkF,SAAYD,aAEjB2c,GAAO5hB,KAAKkF,YAItBkd,QAAS,SAAUR,GAClB,GAAIxT,GAAQwT,EAAO5hB,KAAKkF,QACxB,OAAiBD,UAAVmJ,IAAwBvM,EAAOqE,cAAekI,IAGvD,IAAIiU,GAAW,GAAIR,GAEfS,EAAW,GAAIT,GAcfU,EAAS,gCACZC,EAAa,QAEd,SAASC,GAASP,GACjB,MAAc,SAATA,GAIS,UAATA,IAIS,SAATA,EACG,KAIHA,KAAUA,EAAO,IACbA,EAGJK,EAAO9U,KAAMyU,GACVQ,KAAKC,MAAOT,GAGbA,GAGR,QAASU,GAAUpf,EAAM6K,EAAK6T,GAC7B,GAAI5d,EAIJ,IAAcW,SAATid,GAAwC,IAAlB1e,EAAKgJ,SAI/B,GAHAlI,EAAO,QAAU+J,EAAIhJ,QAASmd,EAAY,OAAQ5a,cAClDsa,EAAO1e,EAAKmK,aAAcrJ,GAEL,gBAAT4d,GAAoB,CAC/B,IACCA,EAAOO,EAASP,GACf,MAAQzV,IAGV6V,EAASL,IAAKze,EAAM6K,EAAK6T,OAEzBA,GAAOjd,MAGT,OAAOid,GAGRrgB,EAAOuC,QACNge,QAAS,SAAU5e,GAClB,MAAO8e,GAASF,QAAS5e,IAAU6e,EAASD,QAAS5e,IAGtD0e,KAAM,SAAU1e,EAAMc,EAAM4d,GAC3B,MAAOI,GAAShB,OAAQ9d,EAAMc,EAAM4d,IAGrCW,WAAY,SAAUrf,EAAMc,GAC3Bge,EAASpF,OAAQ1Z,EAAMc,IAKxBwe,MAAO,SAAUtf,EAAMc,EAAM4d,GAC5B,MAAOG,GAASf,OAAQ9d,EAAMc,EAAM4d,IAGrCa,YAAa,SAAUvf,EAAMc,GAC5B+d,EAASnF,OAAQ1Z,EAAMc,MAIzBzC,EAAOG,GAAGoC,QACT8d,KAAM,SAAU7T,EAAKnH,GACpB,GAAIzD,GAAGa,EAAM4d,EACZ1e,EAAOxD,KAAM,GACb4O,EAAQpL,GAAQA,EAAKqG,UAGtB,IAAa5E,SAARoJ,EAAoB,CACxB,GAAKrO,KAAK4C,SACTsf,EAAOI,EAASxf,IAAKU,GAEE,IAAlBA,EAAKgJ,WAAmB6V,EAASvf,IAAKU,EAAM,iBAAmB,CACnEC,EAAImL,EAAMhM,MACV,OAAQa,IAIFmL,EAAOnL,KACXa,EAAOsK,EAAOnL,GAAIa,KACe,IAA5BA,EAAK7D,QAAS,WAClB6D,EAAOzC,EAAOuE,UAAW9B,EAAKhE,MAAO,IACrCsiB,EAAUpf,EAAMc,EAAM4d,EAAM5d,KAI/B+d,GAASJ,IAAKze,EAAM,gBAAgB,GAItC,MAAO0e,GAIR,MAAoB,gBAAR7T,GACJrO,KAAKqD,KAAM,WACjBif,EAASL,IAAKjiB,KAAMqO,KAIfiT,EAAQthB,KAAM,SAAUkH,GAC9B,GAAIgb,EAOJ,IAAK1e,GAAkByB,SAAViC,EAAb,CAKC,GADAgb,EAAOI,EAASxf,IAAKU,EAAM6K,GACbpJ,SAATid,EACJ,MAAOA,EAMR,IADAA,EAAOU,EAAUpf,EAAM6K,GACTpJ,SAATid,EACJ,MAAOA,OAQTliB,MAAKqD,KAAM,WAGVif,EAASL,IAAKjiB,KAAMqO,EAAKnH,MAExB,KAAMA,EAAOvD,UAAUf,OAAS,EAAG,MAAM,IAG7CigB,WAAY,SAAUxU,GACrB,MAAOrO,MAAKqD,KAAM,WACjBif,EAASpF,OAAQld,KAAMqO,QAM1BxM,EAAOuC,QACNyY,MAAO,SAAUrZ,EAAMmC,EAAMuc,GAC5B,GAAIrF,EAEJ,IAAKrZ,EAYJ,MAXAmC,IAASA,GAAQ,MAAS,QAC1BkX,EAAQwF,EAASvf,IAAKU,EAAMmC,GAGvBuc,KACErF,GAAS9X,MAAMC,QAASkd,GAC7BrF,EAAQwF,EAASf,OAAQ9d,EAAMmC,EAAM9D,EAAO2E,UAAW0b,IAEvDrF,EAAMrc,KAAM0hB,IAGPrF,OAITmG,QAAS,SAAUxf,EAAMmC,GACxBA,EAAOA,GAAQ,IAEf,IAAIkX,GAAQhb,EAAOgb,MAAOrZ,EAAMmC,GAC/Bsd,EAAcpG,EAAMja,OACpBZ,EAAK6a,EAAMtO,QACX2U,EAAQrhB,EAAOshB,YAAa3f,EAAMmC,GAClC2G,EAAO,WACNzK,EAAOmhB,QAASxf,EAAMmC,GAIZ,gBAAP3D,IACJA,EAAK6a,EAAMtO,QACX0U,KAGIjhB,IAIU,OAAT2D,GACJkX,EAAMjL,QAAS,oBAITsR,GAAME,KACbphB,EAAGhB,KAAMwC,EAAM8I,EAAM4W,KAGhBD,GAAeC,GACpBA,EAAMpN,MAAMiH,QAKdoG,YAAa,SAAU3f,EAAMmC,GAC5B,GAAI0I,GAAM1I,EAAO,YACjB,OAAO0c,GAASvf,IAAKU,EAAM6K,IAASgU,EAASf,OAAQ9d,EAAM6K,GAC1DyH,MAAOjU,EAAO2a,UAAW,eAAgBf,IAAK,WAC7C4G,EAASnF,OAAQ1Z,GAAQmC,EAAO,QAAS0I,WAM7CxM,EAAOG,GAAGoC,QACTyY,MAAO,SAAUlX,EAAMuc,GACtB,GAAImB,GAAS,CAQb,OANqB,gBAAT1d,KACXuc,EAAOvc,EACPA,EAAO,KACP0d,KAGI1f,UAAUf,OAASygB,EAChBxhB,EAAOgb,MAAO7c,KAAM,GAAK2F,GAGjBV,SAATid,EACNliB,KACAA,KAAKqD,KAAM,WACV,GAAIwZ,GAAQhb,EAAOgb,MAAO7c,KAAM2F,EAAMuc,EAGtCrgB,GAAOshB,YAAanjB,KAAM2F,GAEZ,OAATA,GAAgC,eAAfkX,EAAO,IAC5Bhb,EAAOmhB,QAAShjB,KAAM2F,MAI1Bqd,QAAS,SAAUrd,GAClB,MAAO3F,MAAKqD,KAAM,WACjBxB,EAAOmhB,QAAShjB,KAAM2F,MAGxB2d,WAAY,SAAU3d,GACrB,MAAO3F,MAAK6c,MAAOlX,GAAQ,UAK5BoY,QAAS,SAAUpY,EAAMD,GACxB,GAAI2B,GACHkc,EAAQ,EACRC,EAAQ3hB,EAAOqc,WACfpM,EAAW9R,KACXyD,EAAIzD,KAAK4C,OACT+a,EAAU,aACC4F,GACTC,EAAM9D,YAAa5N,GAAYA,IAIb,iBAATnM,KACXD,EAAMC,EACNA,EAAOV,QAERU,EAAOA,GAAQ,IAEf,OAAQlC,IACP4D,EAAMgb,EAASvf,IAAKgP,EAAUrO,GAAKkC,EAAO,cACrC0B,GAAOA,EAAIyO,QACfyN,IACAlc,EAAIyO,MAAM2F,IAAKkC,GAIjB,OADAA,KACO6F,EAAMzF,QAASrY,KAGxB,IAAI+d,IAAO,sCAA0CC,OAEjDC,GAAU,GAAI3Z,QAAQ,iBAAmByZ,GAAO,cAAe,KAG/DG,IAAc,MAAO,QAAS,SAAU,QAExCC,GAAqB,SAAUrgB,EAAMkL,GAOvC,MAHAlL,GAAOkL,GAAMlL,EAGiB,SAAvBA,EAAKsgB,MAAMC,SACM,KAAvBvgB,EAAKsgB,MAAMC,SAMXliB,EAAO+G,SAAUpF,EAAK0J,cAAe1J,IAEH,SAAlC3B,EAAOmiB,IAAKxgB,EAAM,YAGjBygB,GAAO,SAAUzgB,EAAMa,EAASf,EAAUgE,GAC7C,GAAIpE,GAAKoB,EACR4f,IAGD,KAAM5f,IAAQD,GACb6f,EAAK5f,GAASd,EAAKsgB,MAAOxf,GAC1Bd,EAAKsgB,MAAOxf,GAASD,EAASC,EAG/BpB,GAAMI,EAASI,MAAOF,EAAM8D,MAG5B,KAAMhD,IAAQD,GACbb,EAAKsgB,MAAOxf,GAAS4f,EAAK5f,EAG3B,OAAOpB,GAMR,SAASihB,IAAW3gB,EAAM2e,EAAMiC,EAAYC,GAC3C,GAAIC,GACHC,EAAQ,EACRC,EAAgB,GAChBC,EAAeJ,EACd,WACC,MAAOA,GAAMrV,OAEd,WACC,MAAOnN,GAAOmiB,IAAKxgB,EAAM2e,EAAM,KAEjCuC,EAAUD,IACVE,EAAOP,GAAcA,EAAY,KAASviB,EAAO+iB,UAAWzC,GAAS,GAAK,MAG1E0C,GAAkBhjB,EAAO+iB,UAAWzC,IAAmB,OAATwC,IAAkBD,IAC/Df,GAAQxW,KAAMtL,EAAOmiB,IAAKxgB,EAAM2e,GAElC,IAAK0C,GAAiBA,EAAe,KAAQF,EAAO,CAGnDA,EAAOA,GAAQE,EAAe,GAG9BT,EAAaA,MAGbS,GAAiBH,GAAW,CAE5B,GAICH,GAAQA,GAAS,KAGjBM,GAAgCN,EAChC1iB,EAAOiiB,MAAOtgB,EAAM2e,EAAM0C,EAAgBF,SAK1CJ,KAAYA,EAAQE,IAAiBC,IAAuB,IAAVH,KAAiBC,GAiBrE,MAbKJ,KACJS,GAAiBA,IAAkBH,GAAW,EAG9CJ,EAAWF,EAAY,GACtBS,GAAkBT,EAAY,GAAM,GAAMA,EAAY,IACrDA,EAAY,GACTC,IACJA,EAAMM,KAAOA,EACbN,EAAMnQ,MAAQ2Q,EACdR,EAAMpgB,IAAMqgB,IAGPA,EAIR,GAAIQ,MAEJ,SAASC,IAAmBvhB,GAC3B,GAAI4U,GACHhX,EAAMoC,EAAK0J,cACXQ,EAAWlK,EAAKkK,SAChBqW,EAAUe,GAAmBpX,EAE9B,OAAKqW,GACGA,GAGR3L,EAAOhX,EAAI4jB,KAAKvjB,YAAaL,EAAIE,cAAeoM,IAChDqW,EAAUliB,EAAOmiB,IAAK5L,EAAM,WAE5BA,EAAK1W,WAAWC,YAAayW,GAEZ,SAAZ2L,IACJA,EAAU,SAEXe,GAAmBpX,GAAaqW,EAEzBA,GAGR,QAASkB,IAAUnT,EAAUoT,GAO5B,IANA,GAAInB,GAASvgB,EACZ2hB,KACA5J,EAAQ,EACR3Y,EAASkP,EAASlP,OAGX2Y,EAAQ3Y,EAAQ2Y,IACvB/X,EAAOsO,EAAUyJ,GACX/X,EAAKsgB,QAIXC,EAAUvgB,EAAKsgB,MAAMC,QAChBmB,GAKa,SAAZnB,IACJoB,EAAQ5J,GAAU8G,EAASvf,IAAKU,EAAM,YAAe,KAC/C2hB,EAAQ5J,KACb/X,EAAKsgB,MAAMC,QAAU,KAGK,KAAvBvgB,EAAKsgB,MAAMC,SAAkBF,GAAoBrgB,KACrD2hB,EAAQ5J,GAAUwJ,GAAmBvhB,KAGrB,SAAZugB,IACJoB,EAAQ5J,GAAU,OAGlB8G,EAASJ,IAAKze,EAAM,UAAWugB,IAMlC,KAAMxI,EAAQ,EAAGA,EAAQ3Y,EAAQ2Y,IACR,MAAnB4J,EAAQ5J,KACZzJ,EAAUyJ,GAAQuI,MAAMC,QAAUoB,EAAQ5J,GAI5C,OAAOzJ,GAGRjQ,EAAOG,GAAGoC,QACT8gB,KAAM,WACL,MAAOD,IAAUjlB,MAAM,IAExBolB,KAAM,WACL,MAAOH,IAAUjlB,OAElBqlB,OAAQ,SAAUhH,GACjB,MAAsB,iBAAVA,GACJA,EAAQre,KAAKklB,OAASllB,KAAKolB,OAG5BplB,KAAKqD,KAAM,WACZwgB,GAAoB7jB,MACxB6B,EAAQ7B,MAAOklB,OAEfrjB,EAAQ7B,MAAOolB,WAKnB,IAAIE,IAAiB,wBAEjBC,GAAW,iCAEXC,GAAc,4BAKdC,IAGHC,QAAU,EAAG,+BAAgC,aAK7CC,OAAS,EAAG,UAAW,YACvBC,KAAO,EAAG,oBAAqB,uBAC/BC,IAAM,EAAG,iBAAkB,oBAC3BC,IAAM,EAAG,qBAAsB,yBAE/BC,UAAY,EAAG,GAAI,IAIpBN,IAAQO,SAAWP,GAAQC,OAE3BD,GAAQQ,MAAQR,GAAQS,MAAQT,GAAQU,SAAWV,GAAQW,QAAUX,GAAQE,MAC7EF,GAAQY,GAAKZ,GAAQK,EAGrB,SAASQ,IAAQvkB,EAAS4O,GAIzB,GAAIzN,EAYJ,OATCA,GAD4C,mBAAjCnB,GAAQuL,qBACbvL,EAAQuL,qBAAsBqD,GAAO,KAEI,mBAA7B5O,GAAQiM,iBACpBjM,EAAQiM,iBAAkB2C,GAAO,QAM3B1L,SAAR0L,GAAqBA,GAAOjD,EAAU3L,EAAS4O,GAC5C9O,EAAOsB,OAASpB,GAAWmB,GAG5BA,EAKR,QAASqjB,IAAetjB,EAAOujB,GAI9B,IAHA,GAAI/iB,GAAI,EACP4X,EAAIpY,EAAML,OAEHa,EAAI4X,EAAG5X,IACd4e,EAASJ,IACRhf,EAAOQ,GACP,cACC+iB,GAAenE,EAASvf,IAAK0jB,EAAa/iB,GAAK,eAMnD,GAAIgjB,IAAQ,WAEZ,SAASC,IAAezjB,EAAOlB,EAAS4kB,EAASC,EAAWC,GAO3D,IANA,GAAIrjB,GAAM6D,EAAKsJ,EAAKmW,EAAMle,EAAU5E,EACnC+iB,EAAWhlB,EAAQilB,yBACnBC,KACAxjB,EAAI,EACJ4X,EAAIpY,EAAML,OAEHa,EAAI4X,EAAG5X,IAGd,GAFAD,EAAOP,EAAOQ,GAETD,GAAiB,IAATA,EAGZ,GAA6B,WAAxB3B,EAAO8D,KAAMnC,GAIjB3B,EAAOsB,MAAO8jB,EAAOzjB,EAAKgJ,UAAahJ,GAASA,OAG1C,IAAMijB,GAAMhZ,KAAMjK,GAIlB,CACN6D,EAAMA,GAAO0f,EAAStlB,YAAaM,EAAQT,cAAe,QAG1DqP,GAAQ4U,GAASpY,KAAM3J,KAAY,GAAI,KAAQ,GAAIoE,cACnDkf,EAAOrB,GAAS9U,IAAS8U,GAAQM,SACjC1e,EAAIuJ,UAAYkW,EAAM,GAAMjlB,EAAOqlB,cAAe1jB,GAASsjB,EAAM,GAGjE9iB,EAAI8iB,EAAM,EACV,OAAQ9iB,IACPqD,EAAMA,EAAIgN,SAKXxS,GAAOsB,MAAO8jB,EAAO5f,EAAIkF,YAGzBlF,EAAM0f,EAAStU,WAGfpL,EAAImL,YAAc,OAzBlByU,GAAMzmB,KAAMuB,EAAQolB,eAAgB3jB,GA+BvCujB,GAASvU,YAAc,GAEvB/O,EAAI,CACJ,OAAUD,EAAOyjB,EAAOxjB,KAGvB,GAAKmjB,GAAa/kB,EAAO6E,QAASlD,EAAMojB,MAClCC,GACJA,EAAQrmB,KAAMgD,OAgBhB,IAXAoF,EAAW/G,EAAO+G,SAAUpF,EAAK0J,cAAe1J,GAGhD6D,EAAMif,GAAQS,EAAStlB,YAAa+B,GAAQ,UAGvCoF,GACJ2d,GAAelf,GAIXsf,EAAU,CACd3iB,EAAI,CACJ,OAAUR,EAAO6D,EAAKrD,KAChBwhB,GAAY/X,KAAMjK,EAAKmC,MAAQ,KACnCghB,EAAQnmB,KAAMgD,GAMlB,MAAOujB,IAIR,WACC,GAAIA,GAAWnnB,EAASonB,yBACvBI,EAAML,EAAStlB,YAAa7B,EAAS0B,cAAe,QACpDuP,EAAQjR,EAAS0B,cAAe,QAMjCuP,GAAMjD,aAAc,OAAQ,SAC5BiD,EAAMjD,aAAc,UAAW,WAC/BiD,EAAMjD,aAAc,OAAQ,KAE5BwZ,EAAI3lB,YAAaoP,GAIjB5P,EAAQomB,WAAaD,EAAIE,WAAW,GAAOA,WAAW,GAAOjT,UAAUsB,QAIvEyR,EAAIxW,UAAY,yBAChB3P,EAAQsmB,iBAAmBH,EAAIE,WAAW,GAAOjT,UAAUwF,eAE5D,IAAIlK,IAAkB/P,EAAS+P,gBAK9B6X,GAAY,OACZC,GAAc,iDACdC,GAAiB,qBAElB,SAASC,MACR,OAAO,EAGR,QAASC,MACR,OAAO,EAKR,QAASC,MACR,IACC,MAAOjoB,GAAS0V,cACf,MAAQwS,KAGX,QAASC,IAAIvkB,EAAMwkB,EAAOlmB,EAAUogB,EAAMlgB,EAAIimB,GAC7C,GAAIC,GAAQviB,CAGZ,IAAsB,gBAAVqiB,GAAqB,CAGP,gBAAblmB,KAGXogB,EAAOA,GAAQpgB,EACfA,EAAWmD,OAEZ,KAAMU,IAAQqiB,GACbD,GAAIvkB,EAAMmC,EAAM7D,EAAUogB,EAAM8F,EAAOriB,GAAQsiB,EAEhD,OAAOzkB,GAsBR,GAnBa,MAAR0e,GAAsB,MAANlgB,GAGpBA,EAAKF,EACLogB,EAAOpgB,EAAWmD,QACD,MAANjD,IACc,gBAAbF,IAGXE,EAAKkgB,EACLA,EAAOjd,SAIPjD,EAAKkgB,EACLA,EAAOpgB,EACPA,EAAWmD,SAGRjD,KAAO,EACXA,EAAK4lB,OACC,KAAM5lB,EACZ,MAAOwB,EAeR,OAZa,KAARykB,IACJC,EAASlmB,EACTA,EAAK,SAAUmmB,GAId,MADAtmB,KAASumB,IAAKD,GACPD,EAAOxkB,MAAO1D,KAAM2D,YAI5B3B,EAAGmF,KAAO+gB,EAAO/gB,OAAU+gB,EAAO/gB,KAAOtF,EAAOsF,SAE1C3D,EAAKH,KAAM,WACjBxB,EAAOsmB,MAAM1M,IAAKzb,KAAMgoB,EAAOhmB,EAAIkgB,EAAMpgB,KAQ3CD,EAAOsmB,OAEN3oB,UAEAic,IAAK,SAAUjY,EAAMwkB,EAAOnZ,EAASqT,EAAMpgB,GAE1C,GAAIumB,GAAaC,EAAajhB,EAC7BkhB,EAAQC,EAAGC,EACXpJ,EAASqJ,EAAU/iB,EAAMgjB,EAAYC,EACrCC,EAAWxG,EAASvf,IAAKU,EAG1B,IAAMqlB,EAAN,CAKKha,EAAQA,UACZwZ,EAAcxZ,EACdA,EAAUwZ,EAAYxZ,QACtB/M,EAAWumB,EAAYvmB,UAKnBA,GACJD,EAAO4O,KAAKK,gBAAiBnB,GAAiB7N,GAIzC+M,EAAQ1H,OACb0H,EAAQ1H,KAAOtF,EAAOsF,SAIfohB,EAASM,EAASN,UACzBA,EAASM,EAASN,YAEXD,EAAcO,EAASC,UAC9BR,EAAcO,EAASC,OAAS,SAAUrc,GAIzC,MAAyB,mBAAX5K,IAA0BA,EAAOsmB,MAAMY,YAActc,EAAE9G,KACpE9D,EAAOsmB,MAAMa,SAAStlB,MAAOF,EAAMG,WAAcsB,SAKpD+iB,GAAUA,GAAS,IAAKlb,MAAOsP,KAAqB,IACpDoM,EAAIR,EAAMplB,MACV,OAAQ4lB,IACPnhB,EAAMqgB,GAAeva,KAAM6a,EAAOQ,QAClC7iB,EAAOijB,EAAWvhB,EAAK,GACvBshB,GAAethB,EAAK,IAAO,IAAKM,MAAO,KAAMzD,OAGvCyB,IAKN0Z,EAAUxd,EAAOsmB,MAAM9I,QAAS1Z,OAGhCA,GAAS7D,EAAWud,EAAQ4J,aAAe5J,EAAQ6J,WAAcvjB,EAGjE0Z,EAAUxd,EAAOsmB,MAAM9I,QAAS1Z,OAGhC8iB,EAAY5mB,EAAOuC,QAClBuB,KAAMA,EACNijB,SAAUA,EACV1G,KAAMA,EACNrT,QAASA,EACT1H,KAAM0H,EAAQ1H,KACdrF,SAAUA,EACVgJ,aAAchJ,GAAYD,EAAOgQ,KAAK/E,MAAMhC,aAAa2C,KAAM3L,GAC/DqnB,UAAWR,EAAW7a,KAAM,MAC1Bua,IAGKK,EAAWH,EAAQ5iB,MAC1B+iB,EAAWH,EAAQ5iB,MACnB+iB,EAASU,cAAgB,EAGnB/J,EAAQgK,OACbhK,EAAQgK,MAAMroB,KAAMwC,EAAM0e,EAAMyG,EAAYL,MAAkB,GAEzD9kB,EAAKyM,kBACTzM,EAAKyM,iBAAkBtK,EAAM2iB,IAK3BjJ,EAAQ5D,MACZ4D,EAAQ5D,IAAIza,KAAMwC,EAAMilB,GAElBA,EAAU5Z,QAAQ1H,OACvBshB,EAAU5Z,QAAQ1H,KAAO0H,EAAQ1H,OAK9BrF,EACJ4mB,EAASvkB,OAAQukB,EAASU,gBAAiB,EAAGX,GAE9CC,EAASloB,KAAMioB,GAIhB5mB,EAAOsmB,MAAM3oB,OAAQmG,IAAS,KAMhCuX,OAAQ,SAAU1Z,EAAMwkB,EAAOnZ,EAAS/M,EAAUwnB,GAEjD,GAAItlB,GAAGulB,EAAWliB,EACjBkhB,EAAQC,EAAGC,EACXpJ,EAASqJ,EAAU/iB,EAAMgjB,EAAYC,EACrCC,EAAWxG,EAASD,QAAS5e,IAAU6e,EAASvf,IAAKU,EAEtD,IAAMqlB,IAAeN,EAASM,EAASN,QAAvC,CAKAP,GAAUA,GAAS,IAAKlb,MAAOsP,KAAqB,IACpDoM,EAAIR,EAAMplB,MACV,OAAQ4lB,IAMP,GALAnhB,EAAMqgB,GAAeva,KAAM6a,EAAOQ,QAClC7iB,EAAOijB,EAAWvhB,EAAK,GACvBshB,GAAethB,EAAK,IAAO,IAAKM,MAAO,KAAMzD,OAGvCyB,EAAN,CAOA0Z,EAAUxd,EAAOsmB,MAAM9I,QAAS1Z,OAChCA,GAAS7D,EAAWud,EAAQ4J,aAAe5J,EAAQ6J,WAAcvjB,EACjE+iB,EAAWH,EAAQ5iB,OACnB0B,EAAMA,EAAK,IACV,GAAI2C,QAAQ,UAAY2e,EAAW7a,KAAM,iBAAoB,WAG9Dyb,EAAYvlB,EAAI0kB,EAAS9lB,MACzB,OAAQoB,IACPykB,EAAYC,EAAU1kB,IAEfslB,GAAeV,IAAaH,EAAUG,UACzC/Z,GAAWA,EAAQ1H,OAASshB,EAAUthB,MACtCE,IAAOA,EAAIoG,KAAMgb,EAAUU,YAC3BrnB,GAAYA,IAAa2mB,EAAU3mB,WACxB,OAAbA,IAAqB2mB,EAAU3mB,YAChC4mB,EAASvkB,OAAQH,EAAG,GAEfykB,EAAU3mB,UACd4mB,EAASU,gBAEL/J,EAAQnC,QACZmC,EAAQnC,OAAOlc,KAAMwC,EAAMilB,GAOzBc,KAAcb,EAAS9lB,SACrByc,EAAQmK,UACbnK,EAAQmK,SAASxoB,KAAMwC,EAAMmlB,EAAYE,EAASC,WAAa,GAE/DjnB,EAAO4nB,YAAajmB,EAAMmC,EAAMkjB,EAASC,cAGnCP,GAAQ5iB,QA1Cf,KAAMA,IAAQ4iB,GACb1mB,EAAOsmB,MAAMjL,OAAQ1Z,EAAMmC,EAAOqiB,EAAOQ,GAAK3Z,EAAS/M,GAAU,EA8C/DD,GAAOqE,cAAeqiB,IAC1BlG,EAASnF,OAAQ1Z,EAAM,mBAIzBwlB,SAAU,SAAUU,GAGnB,GAAIvB,GAAQtmB,EAAOsmB,MAAMwB,IAAKD,GAE1BjmB,EAAGO,EAAGd,EAAKwR,EAAS+T,EAAWmB,EAClCtiB,EAAO,GAAIvC,OAAOpB,UAAUf,QAC5B8lB,GAAarG,EAASvf,IAAK9C,KAAM,eAAoBmoB,EAAMxiB,UAC3D0Z,EAAUxd,EAAOsmB,MAAM9I,QAAS8I,EAAMxiB,SAKvC,KAFA2B,EAAM,GAAM6gB,EAEN1kB,EAAI,EAAGA,EAAIE,UAAUf,OAAQa,IAClC6D,EAAM7D,GAAME,UAAWF,EAMxB,IAHA0kB,EAAM0B,eAAiB7pB,MAGlBqf,EAAQyK,aAAezK,EAAQyK,YAAY9oB,KAAMhB,KAAMmoB,MAAY,EAAxE,CAKAyB,EAAe/nB,EAAOsmB,MAAMO,SAAS1nB,KAAMhB,KAAMmoB,EAAOO,GAGxDjlB,EAAI,CACJ,QAAUiR,EAAUkV,EAAcnmB,QAAY0kB,EAAM4B,uBAAyB,CAC5E5B,EAAM6B,cAAgBtV,EAAQlR,KAE9BQ,EAAI,CACJ,QAAUykB,EAAY/T,EAAQgU,SAAU1kB,QACtCmkB,EAAM8B,gCAID9B,EAAM+B,aAAc/B,EAAM+B,WAAWzc,KAAMgb,EAAUU,aAE1DhB,EAAMM,UAAYA,EAClBN,EAAMjG,KAAOuG,EAAUvG,KAEvBhf,IAAUrB,EAAOsmB,MAAM9I,QAASoJ,EAAUG,eAAmBE,QAC5DL,EAAU5Z,SAAUnL,MAAOgR,EAAQlR,KAAM8D,GAE7BrC,SAAR/B,IACGilB,EAAM1U,OAASvQ,MAAU,IAC/BilB,EAAMgC,iBACNhC,EAAMiC,oBAYX,MAJK/K,GAAQgL,cACZhL,EAAQgL,aAAarpB,KAAMhB,KAAMmoB,GAG3BA,EAAM1U,SAGdiV,SAAU,SAAUP,EAAOO,GAC1B,GAAIjlB,GAAGglB,EAAWtW,EAAKmY,EAAiBC,EACvCX,KACAR,EAAgBV,EAASU,cACzBpa,EAAMmZ,EAAMxjB,MAGb,IAAKykB,GAIJpa,EAAIxC,YAOc,UAAf2b,EAAMxiB,MAAoBwiB,EAAMnS,QAAU,GAE7C,KAAQhH,IAAQhP,KAAMgP,EAAMA,EAAItN,YAAc1B,KAI7C,GAAsB,IAAjBgP,EAAIxC,WAAoC,UAAf2b,EAAMxiB,MAAoBqJ,EAAI5C,YAAa,GAAS,CAGjF,IAFAke,KACAC,KACM9mB,EAAI,EAAGA,EAAI2lB,EAAe3lB,IAC/BglB,EAAYC,EAAUjlB,GAGtB0O,EAAMsW,EAAU3mB,SAAW,IAEMmD,SAA5BslB,EAAkBpY,KACtBoY,EAAkBpY,GAAQsW,EAAU3d,aACnCjJ,EAAQsQ,EAAKnS,MAAOub,MAAOvM,MAC3BnN,EAAO4O,KAAM0B,EAAKnS,KAAM,MAAQgP,IAAQpM,QAErC2nB,EAAkBpY,IACtBmY,EAAgB9pB,KAAMioB,EAGnB6B,GAAgB1nB,QACpBgnB,EAAappB,MAAQgD,KAAMwL,EAAK0Z,SAAU4B,IAY9C,MALAtb,GAAMhP,KACDopB,EAAgBV,EAAS9lB,QAC7BgnB,EAAappB,MAAQgD,KAAMwL,EAAK0Z,SAAUA,EAASpoB,MAAO8oB,KAGpDQ,GAGRY,QAAS,SAAUlmB,EAAMmmB,GACxBrqB,OAAO2hB,eAAgBlgB,EAAO6oB,MAAMjoB,UAAW6B,GAC9CqmB,YAAY,EACZ3I,cAAc,EAEdlf,IAAKjB,EAAOgD,WAAY4lB,GACvB,WACC,GAAKzqB,KAAK4qB,cACR,MAAOH,GAAMzqB,KAAK4qB,gBAGrB,WACC,GAAK5qB,KAAK4qB,cACR,MAAO5qB,MAAK4qB,cAAetmB,IAI/B2d,IAAK,SAAU/a,GACd9G,OAAO2hB,eAAgB/hB,KAAMsE,GAC5BqmB,YAAY,EACZ3I,cAAc,EACd6I,UAAU,EACV3jB,MAAOA,QAMXyiB,IAAK,SAAUiB,GACd,MAAOA,GAAe/oB,EAAOqD,SAC5B0lB,EACA,GAAI/oB,GAAO6oB,MAAOE,IAGpBvL,SACCyL,MAGCC,UAAU,GAEX1V,OAGC2V,QAAS,WACR,GAAKhrB,OAAS6nB,MAAuB7nB,KAAKqV,MAEzC,MADArV,MAAKqV,SACE,GAGT4T,aAAc,WAEfgC,MACCD,QAAS,WACR,GAAKhrB,OAAS6nB,MAAuB7nB,KAAKirB,KAEzC,MADAjrB,MAAKirB,QACE,GAGThC,aAAc,YAEfiC,OAGCF,QAAS,WACR,GAAmB,aAAdhrB,KAAK2F,MAAuB3F,KAAKkrB,OAASxd,EAAU1N,KAAM,SAE9D,MADAA,MAAKkrB,SACE,GAKTnF,SAAU,SAAUoC,GACnB,MAAOza,GAAUya,EAAMxjB,OAAQ,OAIjCwmB,cACCd,aAAc,SAAUlC,GAIDljB,SAAjBkjB,EAAM1U,QAAwB0U,EAAMyC,gBACxCzC,EAAMyC,cAAcQ,YAAcjD,EAAM1U,YAO7C5R,EAAO4nB,YAAc,SAAUjmB,EAAMmC,EAAMmjB,GAGrCtlB,EAAK2d,qBACT3d,EAAK2d,oBAAqBxb,EAAMmjB,IAIlCjnB,EAAO6oB,MAAQ,SAAUnmB,EAAK8mB,GAG7B,MAAQrrB,gBAAgB6B,GAAO6oB,OAK1BnmB,GAAOA,EAAIoB,MACf3F,KAAK4qB,cAAgBrmB,EACrBvE,KAAK2F,KAAOpB,EAAIoB,KAIhB3F,KAAKsrB,mBAAqB/mB,EAAIgnB,kBACHtmB,SAAzBV,EAAIgnB,kBAGJhnB,EAAI6mB,eAAgB,EACrBzD,GACAC,GAKD5nB,KAAK2E,OAAWJ,EAAII,QAAkC,IAAxBJ,EAAII,OAAO6H,SACxCjI,EAAII,OAAOjD,WACX6C,EAAII,OAEL3E,KAAKgqB,cAAgBzlB,EAAIylB,cACzBhqB,KAAKwrB,cAAgBjnB,EAAIinB,eAIzBxrB,KAAK2F,KAAOpB,EAIR8mB,GACJxpB,EAAOuC,OAAQpE,KAAMqrB,GAItBrrB,KAAKyrB,UAAYlnB,GAAOA,EAAIknB,WAAa5pB,EAAO0F,WAGhDvH,KAAM6B,EAAOqD,UAAY,IA1CjB,GAAIrD,GAAO6oB,MAAOnmB,EAAK8mB,IA+ChCxpB,EAAO6oB,MAAMjoB,WACZE,YAAad,EAAO6oB,MACpBY,mBAAoB1D,GACpBmC,qBAAsBnC,GACtBqC,8BAA+BrC,GAC/B8D,aAAa,EAEbvB,eAAgB,WACf,GAAI1d,GAAIzM,KAAK4qB,aAEb5qB,MAAKsrB,mBAAqB3D,GAErBlb,IAAMzM,KAAK0rB,aACfjf,EAAE0d,kBAGJC,gBAAiB,WAChB,GAAI3d,GAAIzM,KAAK4qB,aAEb5qB,MAAK+pB,qBAAuBpC,GAEvBlb,IAAMzM,KAAK0rB,aACfjf,EAAE2d,mBAGJuB,yBAA0B,WACzB,GAAIlf,GAAIzM,KAAK4qB,aAEb5qB,MAAKiqB,8BAAgCtC,GAEhClb,IAAMzM,KAAK0rB,aACfjf,EAAEkf,2BAGH3rB,KAAKoqB,oBAKPvoB,EAAOwB,MACNuoB,QAAQ,EACRC,SAAS,EACTC,YAAY,EACZC,gBAAgB,EAChBC,SAAS,EACTC,QAAQ,EACRC,YAAY,EACZC,SAAS,EACTC,OAAO,EACPC,OAAO,EACPC,UAAU,EACVC,MAAM,EACNC,QAAQ,EACRC,UAAU,EACVpe,KAAK,EACLqe,SAAS,EACT1W,QAAQ,EACR2W,SAAS,EACTC,SAAS,EACTC,SAAS,EACTC,SAAS,EACTC,SAAS,EACTC,WAAW,EACXC,aAAa,EACbC,SAAS,EACTC,SAAS,EACTC,eAAe,EACfC,WAAW,EACXC,SAAS,EAETC,MAAO,SAAUpF,GAChB,GAAInS,GAASmS,EAAMnS,MAGnB,OAAoB,OAAfmS,EAAMoF,OAAiB/F,GAAU/Z,KAAM0a,EAAMxiB,MACxB,MAAlBwiB,EAAMsE,SAAmBtE,EAAMsE,SAAWtE,EAAMuE,SAIlDvE,EAAMoF,OAAoBtoB,SAAX+Q,GAAwByR,GAAYha,KAAM0a,EAAMxiB,MACtD,EAATqQ,EACG,EAGM,EAATA,EACG,EAGM,EAATA,EACG,EAGD,EAGDmS,EAAMoF,QAEZ1rB,EAAOsmB,MAAMqC,SAUhB3oB,EAAOwB,MACNmqB,WAAY,YACZC,WAAY,WACZC,aAAc,cACdC,aAAc,cACZ,SAAUC,EAAMjE,GAClB9nB,EAAOsmB,MAAM9I,QAASuO,IACrB3E,aAAcU,EACdT,SAAUS,EAEVb,OAAQ,SAAUX,GACjB,GAAIjlB,GACHyB,EAAS3E,KACT6tB,EAAU1F,EAAMqD,cAChB/C,EAAYN,EAAMM,SASnB,OALMoF,KAAaA,IAAYlpB,GAAW9C,EAAO+G,SAAUjE,EAAQkpB,MAClE1F,EAAMxiB,KAAO8iB,EAAUG,SACvB1lB,EAAMulB,EAAU5Z,QAAQnL,MAAO1D,KAAM2D,WACrCwkB,EAAMxiB,KAAOgkB,GAEPzmB,MAKVrB,EAAOG,GAAGoC,QAET2jB,GAAI,SAAUC,EAAOlmB,EAAUogB,EAAMlgB,GACpC,MAAO+lB,IAAI/nB,KAAMgoB,EAAOlmB,EAAUogB,EAAMlgB,IAEzCimB,IAAK,SAAUD,EAAOlmB,EAAUogB,EAAMlgB,GACrC,MAAO+lB,IAAI/nB,KAAMgoB,EAAOlmB,EAAUogB,EAAMlgB,EAAI,IAE7ComB,IAAK,SAAUJ,EAAOlmB,EAAUE,GAC/B,GAAIymB,GAAW9iB,CACf,IAAKqiB,GAASA,EAAMmC,gBAAkBnC,EAAMS,UAW3C,MARAA,GAAYT,EAAMS,UAClB5mB,EAAQmmB,EAAM6B,gBAAiBzB,IAC9BK,EAAUU,UACTV,EAAUG,SAAW,IAAMH,EAAUU,UACrCV,EAAUG,SACXH,EAAU3mB,SACV2mB,EAAU5Z,SAEJ7O,IAER,IAAsB,gBAAVgoB,GAAqB,CAGhC,IAAMriB,IAAQqiB,GACbhoB,KAAKooB,IAAKziB,EAAM7D,EAAUkmB,EAAOriB,GAElC,OAAO3F,MAWR,MATK8B,MAAa,GAA6B,kBAAbA,KAGjCE,EAAKF,EACLA,EAAWmD,QAEPjD,KAAO,IACXA,EAAK4lB,IAEC5nB,KAAKqD,KAAM,WACjBxB,EAAOsmB,MAAMjL,OAAQld,KAAMgoB,EAAOhmB,EAAIF,OAMzC,IAKCgsB,IAAY,8FAOZC,GAAe,wBAGfC,GAAW,oCACXC,GAAoB,cACpBC,GAAe,0CAGhB,SAASC,IAAoB3qB,EAAM0Y,GAClC,MAAKxO,GAAUlK,EAAM,UACpBkK,EAA+B,KAArBwO,EAAQ1P,SAAkB0P,EAAUA,EAAQzJ,WAAY,MAE3D5Q,EAAQ,SAAU2B,GAAQ,IAAOA,EAGlCA,EAIR,QAAS4qB,IAAe5qB,GAEvB,MADAA,GAAKmC,MAAyC,OAAhCnC,EAAKmK,aAAc,SAAsB,IAAMnK,EAAKmC,KAC3DnC,EAER,QAAS6qB,IAAe7qB,GACvB,GAAIsJ,GAAQmhB,GAAkB9gB,KAAM3J,EAAKmC,KAQzC,OANKmH,GACJtJ,EAAKmC,KAAOmH,EAAO,GAEnBtJ,EAAK0K,gBAAiB,QAGhB1K,EAGR,QAAS8qB,IAAgB/pB,EAAKgqB,GAC7B,GAAI9qB,GAAG4X,EAAG1V,EAAM6oB,EAAUC,EAAUC,EAAUC,EAAUpG,CAExD,IAAuB,IAAlBgG,EAAK/hB,SAAV,CAKA,GAAK6V,EAASD,QAAS7d,KACtBiqB,EAAWnM,EAASf,OAAQ/c,GAC5BkqB,EAAWpM,EAASJ,IAAKsM,EAAMC,GAC/BjG,EAASiG,EAASjG,QAEJ,OACNkG,GAAS3F,OAChB2F,EAASlG,SAET,KAAM5iB,IAAQ4iB,GACb,IAAM9kB,EAAI,EAAG4X,EAAIkN,EAAQ5iB,GAAO/C,OAAQa,EAAI4X,EAAG5X,IAC9C5B,EAAOsmB,MAAM1M,IAAK8S,EAAM5oB,EAAM4iB,EAAQ5iB,GAAQlC,IAO7C6e,EAASF,QAAS7d,KACtBmqB,EAAWpM,EAAShB,OAAQ/c,GAC5BoqB,EAAW9sB,EAAOuC,UAAYsqB,GAE9BpM,EAASL,IAAKsM,EAAMI,KAKtB,QAASC,IAAUrqB,EAAKgqB,GACvB,GAAI7gB,GAAW6gB,EAAK7gB,SAAS9F,aAGX,WAAb8F,GAAwB4X,GAAe7X,KAAMlJ,EAAIoB,MACrD4oB,EAAK5Y,QAAUpR,EAAIoR,QAGK,UAAbjI,GAAqC,aAAbA,IACnC6gB,EAAK1U,aAAetV,EAAIsV,cAI1B,QAASgV,IAAUC,EAAYxnB,EAAMhE,EAAUujB,GAG9Cvf,EAAO/G,EAAOmD,SAAW4D,EAEzB,IAAIyf,GAAUnjB,EAAO+iB,EAASoI,EAAYnf,EAAMxO,EAC/CqC,EAAI,EACJ4X,EAAIyT,EAAWlsB,OACfosB,EAAW3T,EAAI,EACfnU,EAAQI,EAAM,GACdzC,EAAahD,EAAOgD,WAAYqC,EAGjC,IAAKrC,GACDwW,EAAI,GAAsB,gBAAVnU,KAChBjG,EAAQomB,YAAc2G,GAASvgB,KAAMvG,GACxC,MAAO4nB,GAAWzrB,KAAM,SAAUkY,GACjC,GAAIZ,GAAOmU,EAAWjrB,GAAI0X,EACrB1W,KACJyC,EAAM,GAAMJ,EAAMlG,KAAMhB,KAAMub,EAAOZ,EAAKsU,SAE3CJ,GAAUlU,EAAMrT,EAAMhE,EAAUujB,IAIlC,IAAKxL,IACJ0L,EAAWL,GAAepf,EAAMwnB,EAAY,GAAI5hB,eAAe,EAAO4hB,EAAYjI,GAClFjjB,EAAQmjB,EAAStU,WAEmB,IAA/BsU,EAASxa,WAAW3J,SACxBmkB,EAAWnjB,GAIPA,GAASijB,GAAU,CAOvB,IANAF,EAAU9kB,EAAO0B,IAAK+iB,GAAQS,EAAU,UAAYqH,IACpDW,EAAapI,EAAQ/jB,OAKba,EAAI4X,EAAG5X,IACdmM,EAAOmX,EAEFtjB,IAAMurB,IACVpf,EAAO/N,EAAO6C,MAAOkL,GAAM,GAAM,GAG5Bmf,GAIJltB,EAAOsB,MAAOwjB,EAASL,GAAQ1W,EAAM,YAIvCtM,EAAStC,KAAM8tB,EAAYrrB,GAAKmM,EAAMnM,EAGvC,IAAKsrB,EAOJ,IANA3tB,EAAMulB,EAASA,EAAQ/jB,OAAS,GAAIsK,cAGpCrL,EAAO0B,IAAKojB,EAAS0H,IAGf5qB,EAAI,EAAGA,EAAIsrB,EAAYtrB,IAC5BmM,EAAO+W,EAASljB,GACX+hB,GAAY/X,KAAMmC,EAAKjK,MAAQ,MAClC0c,EAASf,OAAQ1R,EAAM,eACxB/N,EAAO+G,SAAUxH,EAAKwO,KAEjBA,EAAKrL,IAGJ1C,EAAOqtB,UACXrtB,EAAOqtB,SAAUtf,EAAKrL,KAGvBrD,EAAS0O,EAAK4C,YAAYnN,QAAS6oB,GAAc,IAAM9sB,IAQ7D,MAAO0tB,GAGR,QAAS5R,IAAQ1Z,EAAM1B,EAAUqtB,GAKhC,IAJA,GAAIvf,GACHqX,EAAQnlB,EAAWD,EAAO0O,OAAQzO,EAAU0B,GAASA,EACrDC,EAAI,EAE4B,OAAvBmM,EAAOqX,EAAOxjB,IAAeA,IAChC0rB,GAA8B,IAAlBvf,EAAKpD,UACtB3K,EAAOutB,UAAW9I,GAAQ1W,IAGtBA,EAAKlO,aACJytB,GAAYttB,EAAO+G,SAAUgH,EAAK1C,cAAe0C,IACrD2W,GAAeD,GAAQ1W,EAAM,WAE9BA,EAAKlO,WAAWC,YAAaiO,GAI/B,OAAOpM,GAGR3B,EAAOuC,QACN8iB,cAAe,SAAU+H,GACxB,MAAOA,GAAK5pB,QAASyoB,GAAW,cAGjCppB,MAAO,SAAUlB,EAAM6rB,EAAeC,GACrC,GAAI7rB,GAAG4X,EAAGkU,EAAaC,EACtB9qB,EAAQlB,EAAK8jB,WAAW,GACxBmI,EAAS5tB,EAAO+G,SAAUpF,EAAK0J,cAAe1J,EAG/C,MAAMvC,EAAQsmB,gBAAsC,IAAlB/jB,EAAKgJ,UAAoC,KAAlBhJ,EAAKgJ,UAC3D3K,EAAOkY,SAAUvW,IAMnB,IAHAgsB,EAAelJ,GAAQ5hB,GACvB6qB,EAAcjJ,GAAQ9iB,GAEhBC,EAAI,EAAG4X,EAAIkU,EAAY3sB,OAAQa,EAAI4X,EAAG5X,IAC3CmrB,GAAUW,EAAa9rB,GAAK+rB,EAAc/rB,GAK5C,IAAK4rB,EACJ,GAAKC,EAIJ,IAHAC,EAAcA,GAAejJ,GAAQ9iB,GACrCgsB,EAAeA,GAAgBlJ,GAAQ5hB,GAEjCjB,EAAI,EAAG4X,EAAIkU,EAAY3sB,OAAQa,EAAI4X,EAAG5X,IAC3C6qB,GAAgBiB,EAAa9rB,GAAK+rB,EAAc/rB,QAGjD6qB,IAAgB9qB,EAAMkB,EAWxB,OANA8qB,GAAelJ,GAAQ5hB,EAAO,UACzB8qB,EAAa5sB,OAAS,GAC1B2jB,GAAeiJ,GAAeC,GAAUnJ,GAAQ9iB,EAAM,WAIhDkB,GAGR0qB,UAAW,SAAUnsB,GAKpB,IAJA,GAAIif,GAAM1e,EAAMmC,EACf0Z,EAAUxd,EAAOsmB,MAAM9I,QACvB5b,EAAI,EAE6BwB,UAAxBzB,EAAOP,EAAOQ,IAAqBA,IAC5C,GAAKke,EAAYne,GAAS,CACzB,GAAO0e,EAAO1e,EAAM6e,EAASnd,SAAc,CAC1C,GAAKgd,EAAKqG,OACT,IAAM5iB,IAAQuc,GAAKqG,OACblJ,EAAS1Z,GACb9D,EAAOsmB,MAAMjL,OAAQ1Z,EAAMmC,GAI3B9D,EAAO4nB,YAAajmB,EAAMmC,EAAMuc,EAAK4G,OAOxCtlB,GAAM6e,EAASnd,SAAYD,OAEvBzB,EAAM8e,EAASpd,WAInB1B,EAAM8e,EAASpd,SAAYD,YAOhCpD,EAAOG,GAAGoC,QACTsrB,OAAQ,SAAU5tB,GACjB,MAAOob,IAAQld,KAAM8B,GAAU,IAGhCob,OAAQ,SAAUpb,GACjB,MAAOob,IAAQld,KAAM8B,IAGtBP,KAAM,SAAU2F,GACf,MAAOoa,GAAQthB,KAAM,SAAUkH,GAC9B,MAAiBjC,UAAViC,EACNrF,EAAON,KAAMvB,MACbA,KAAK8V,QAAQzS,KAAM,WACK,IAAlBrD,KAAKwM,UAAoC,KAAlBxM,KAAKwM,UAAqC,IAAlBxM,KAAKwM,WACxDxM,KAAKwS,YAActL,MAGpB,KAAMA,EAAOvD,UAAUf,SAG3B+sB,OAAQ,WACP,MAAOd,IAAU7uB,KAAM2D,UAAW,SAAUH,GAC3C,GAAuB,IAAlBxD,KAAKwM,UAAoC,KAAlBxM,KAAKwM,UAAqC,IAAlBxM,KAAKwM,SAAiB,CACzE,GAAI7H,GAASwpB,GAAoBnuB,KAAMwD,EACvCmB,GAAOlD,YAAa+B,OAKvBosB,QAAS,WACR,MAAOf,IAAU7uB,KAAM2D,UAAW,SAAUH,GAC3C,GAAuB,IAAlBxD,KAAKwM,UAAoC,KAAlBxM,KAAKwM,UAAqC,IAAlBxM,KAAKwM,SAAiB,CACzE,GAAI7H,GAASwpB,GAAoBnuB,KAAMwD,EACvCmB,GAAOkrB,aAAcrsB,EAAMmB,EAAO8N,gBAKrCqd,OAAQ,WACP,MAAOjB,IAAU7uB,KAAM2D,UAAW,SAAUH,GACtCxD,KAAK0B,YACT1B,KAAK0B,WAAWmuB,aAAcrsB,EAAMxD,SAKvC+vB,MAAO,WACN,MAAOlB,IAAU7uB,KAAM2D,UAAW,SAAUH,GACtCxD,KAAK0B,YACT1B,KAAK0B,WAAWmuB,aAAcrsB,EAAMxD,KAAKmP,gBAK5C2G,MAAO,WAIN,IAHA,GAAItS,GACHC,EAAI,EAE2B,OAAtBD,EAAOxD,KAAMyD,IAAeA,IACd,IAAlBD,EAAKgJ,WAGT3K,EAAOutB,UAAW9I,GAAQ9iB,GAAM,IAGhCA,EAAKgP,YAAc,GAIrB,OAAOxS,OAGR0E,MAAO,SAAU2qB,EAAeC,GAI/B,MAHAD,GAAiC,MAAjBA,GAAgCA,EAChDC,EAAyC,MAArBA,EAA4BD,EAAgBC,EAEzDtvB,KAAKuD,IAAK,WAChB,MAAO1B,GAAO6C,MAAO1E,KAAMqvB,EAAeC,MAI5CL,KAAM,SAAU/nB,GACf,MAAOoa,GAAQthB,KAAM,SAAUkH,GAC9B,GAAI1D,GAAOxD,KAAM,OAChByD,EAAI,EACJ4X,EAAIrb,KAAK4C,MAEV,IAAeqC,SAAViC,GAAyC,IAAlB1D,EAAKgJ,SAChC,MAAOhJ,GAAKoN,SAIb,IAAsB,gBAAV1J,KAAuB6mB,GAAatgB,KAAMvG,KACpDue,IAAWF,GAASpY,KAAMjG,KAAa,GAAI,KAAQ,GAAIU,eAAkB,CAE1EV,EAAQrF,EAAOqlB,cAAehgB,EAE9B,KACC,KAAQzD,EAAI4X,EAAG5X,IACdD,EAAOxD,KAAMyD,OAGU,IAAlBD,EAAKgJ,WACT3K,EAAOutB,UAAW9I,GAAQ9iB,GAAM,IAChCA,EAAKoN,UAAY1J,EAInB1D,GAAO,EAGN,MAAQiJ,KAGNjJ,GACJxD,KAAK8V,QAAQ6Z,OAAQzoB,IAEpB,KAAMA,EAAOvD,UAAUf,SAG3BotB,YAAa,WACZ,GAAInJ,KAGJ,OAAOgI,IAAU7uB,KAAM2D,UAAW,SAAUH,GAC3C,GAAI2Q,GAASnU,KAAK0B,UAEbG,GAAO6E,QAAS1G,KAAM6mB,GAAY,IACtChlB,EAAOutB,UAAW9I,GAAQtmB,OACrBmU,GACJA,EAAO8b,aAAczsB,EAAMxD,QAK3B6mB,MAILhlB,EAAOwB,MACN6sB,SAAU,SACVC,UAAW,UACXN,aAAc,SACdO,YAAa,QACbC,WAAY,eACV,SAAU/rB,EAAMgsB,GAClBzuB,EAAOG,GAAIsC,GAAS,SAAUxC,GAO7B,IANA,GAAImB,GACHC,KACAqtB,EAAS1uB,EAAQC,GACjBgC,EAAOysB,EAAO3tB,OAAS,EACvBa,EAAI,EAEGA,GAAKK,EAAML,IAClBR,EAAQQ,IAAMK,EAAO9D,KAAOA,KAAK0E,OAAO,GACxC7C,EAAQ0uB,EAAQ9sB,IAAO6sB,GAAYrtB,GAInCzC,EAAKkD,MAAOR,EAAKD,EAAMH,MAGxB,OAAO9C,MAAKgD,UAAWE,KAGzB,IAAIstB,IAAU,UAEVC,GAAY,GAAIzmB,QAAQ,KAAOyZ,GAAO,kBAAmB,KAEzDiN,GAAY,SAAUltB,GAKxB,GAAI+oB,GAAO/oB,EAAK0J,cAAc6C,WAM9B,OAJMwc,IAASA,EAAKoE,SACnBpE,EAAOxsB,GAGDwsB,EAAKqE,iBAAkBptB,KAKhC,WAIC,QAASqtB,KAGR,GAAMzJ,EAAN,CAIAA,EAAItD,MAAMgN,QACT,4GAID1J,EAAIxW,UAAY,GAChBjB,GAAgBlO,YAAasvB,EAE7B,IAAIC,GAAWjxB,EAAO6wB,iBAAkBxJ,EACxC6J,GAAoC,OAAjBD,EAAShhB,IAG5BkhB,EAAgD,QAAxBF,EAASG,WACjCC,EAA0C,QAAnBJ,EAASK,MAIhCjK,EAAItD,MAAMwN,YAAc,MACxBC,EAA+C,QAAzBP,EAASM,YAE/B3hB,GAAgBhO,YAAaovB,GAI7B3J,EAAM,MAGP,GAAI6J,GAAkBG,EAAsBG,EAAqBL,EAChEH,EAAYnxB,EAAS0B,cAAe,OACpC8lB,EAAMxnB,EAAS0B,cAAe,MAGzB8lB,GAAItD,QAMVsD,EAAItD,MAAM0N,eAAiB,cAC3BpK,EAAIE,WAAW,GAAOxD,MAAM0N,eAAiB,GAC7CvwB,EAAQwwB,gBAA+C,gBAA7BrK,EAAItD,MAAM0N,eAEpCT,EAAUjN,MAAMgN,QAAU,4FAE1BC,EAAUtvB,YAAa2lB,GAEvBvlB,EAAOuC,OAAQnD,GACdywB,cAAe,WAEd,MADAb,KACOI,GAERU,kBAAmB,WAElB,MADAd,KACOO,GAERQ,iBAAkB,WAEjB,MADAf,KACOU,GAERM,mBAAoB,WAEnB,MADAhB,KACOK,QAMV,SAASY,IAAQtuB,EAAMc,EAAMytB,GAC5B,GAAIV,GAAOW,EAAUC,EAAU/uB,EAM9B4gB,EAAQtgB,EAAKsgB,KAqCd,OAnCAiO,GAAWA,GAAYrB,GAAWltB,GAK7BuuB,IACJ7uB,EAAM6uB,EAASG,iBAAkB5tB,IAAUytB,EAAUztB,GAExC,KAARpB,GAAerB,EAAO+G,SAAUpF,EAAK0J,cAAe1J,KACxDN,EAAMrB,EAAOiiB,MAAOtgB,EAAMc,KAQrBrD,EAAQ2wB,oBAAsBnB,GAAUhjB,KAAMvK,IAASstB,GAAQ/iB,KAAMnJ,KAG1E+sB,EAAQvN,EAAMuN,MACdW,EAAWlO,EAAMkO,SACjBC,EAAWnO,EAAMmO,SAGjBnO,EAAMkO,SAAWlO,EAAMmO,SAAWnO,EAAMuN,MAAQnuB,EAChDA,EAAM6uB,EAASV,MAGfvN,EAAMuN,MAAQA,EACdvN,EAAMkO,SAAWA,EACjBlO,EAAMmO,SAAWA,IAIJhtB,SAAR/B,EAINA,EAAM,GACNA,EAIF,QAASivB,IAAcC,EAAaC,GAGnC,OACCvvB,IAAK,WACJ,MAAKsvB,gBAIGpyB,MAAK8C,KAKJ9C,KAAK8C,IAAMuvB,GAAS3uB,MAAO1D,KAAM2D,aAM7C,GAKC2uB,IAAe,4BACfC,GAAc,MACdC,IAAYC,SAAU,WAAYC,WAAY,SAAU3O,QAAS,SACjE4O,IACCC,cAAe,IACfC,WAAY,OAGbC,IAAgB,SAAU,MAAO,MACjCC,GAAanzB,EAAS0B,cAAe,OAAQwiB,KAG9C,SAASkP,IAAgB1uB,GAGxB,GAAKA,IAAQyuB,IACZ,MAAOzuB,EAIR,IAAI2uB,GAAU3uB,EAAM,GAAI9B,cAAgB8B,EAAKhE,MAAO,GACnDmD,EAAIqvB,GAAYlwB,MAEjB,OAAQa,IAEP,GADAa,EAAOwuB,GAAarvB,GAAMwvB,EACrB3uB,IAAQyuB,IACZ,MAAOzuB,GAOV,QAAS4uB,IAAe5uB,GACvB,GAAIpB,GAAMrB,EAAOsxB,SAAU7uB,EAI3B,OAHMpB,KACLA,EAAMrB,EAAOsxB,SAAU7uB,GAAS0uB,GAAgB1uB,IAAUA,GAEpDpB,EAGR,QAASkwB,IAAmB5vB,EAAM0D,EAAOmsB,GAIxC,GAAItsB,GAAU4c,GAAQxW,KAAMjG,EAC5B,OAAOH,GAGN5B,KAAKmuB,IAAK,EAAGvsB,EAAS,IAAQssB,GAAY,KAAUtsB,EAAS,IAAO,MACpEG,EAGF,QAASqsB,IAAsB/vB,EAAMc,EAAMkvB,EAAOC,EAAaC,GAC9D,GAAIjwB,GACHuO,EAAM,CAWP,KAPCvO,EADI+vB,KAAYC,EAAc,SAAW,WACrC,EAIS,UAATnvB,EAAmB,EAAI,EAGpBb,EAAI,EAAGA,GAAK,EAGJ,WAAV+vB,IACJxhB,GAAOnQ,EAAOmiB,IAAKxgB,EAAMgwB,EAAQ5P,GAAWngB,IAAK,EAAMiwB,IAGnDD,GAGW,YAAVD,IACJxhB,GAAOnQ,EAAOmiB,IAAKxgB,EAAM,UAAYogB,GAAWngB,IAAK,EAAMiwB,IAI7C,WAAVF,IACJxhB,GAAOnQ,EAAOmiB,IAAKxgB,EAAM,SAAWogB,GAAWngB,GAAM,SAAS,EAAMiwB,MAKrE1hB,GAAOnQ,EAAOmiB,IAAKxgB,EAAM,UAAYogB,GAAWngB,IAAK,EAAMiwB,GAG5C,YAAVF,IACJxhB,GAAOnQ,EAAOmiB,IAAKxgB,EAAM,SAAWogB,GAAWngB,GAAM,SAAS,EAAMiwB,IAKvE,OAAO1hB,GAGR,QAAS2hB,IAAkBnwB,EAAMc,EAAMkvB,GAGtC,GAAII,GACHF,EAAShD,GAAWltB,GACpBwO,EAAM8f,GAAQtuB,EAAMc,EAAMovB,GAC1BD,EAAiE,eAAnD5xB,EAAOmiB,IAAKxgB,EAAM,aAAa,EAAOkwB,EAGrD,OAAKjD,IAAUhjB,KAAMuE,GACbA,GAKR4hB,EAAmBH,IAChBxyB,EAAQ0wB,qBAAuB3f,IAAQxO,EAAKsgB,MAAOxf,IAIzC,SAAR0N,IACJA,EAAMxO,EAAM,SAAWc,EAAM,GAAI9B,cAAgB8B,EAAKhE,MAAO,KAI9D0R,EAAMjM,WAAYiM,IAAS,EAGlBA,EACRuhB,GACC/vB,EACAc,EACAkvB,IAAWC,EAAc,SAAW,WACpCG,EACAF,GAEE,MAGL7xB,EAAOuC,QAINyvB,UACCC,SACChxB,IAAK,SAAUU,EAAMuuB,GACpB,GAAKA,EAAW,CAGf,GAAI7uB,GAAM4uB,GAAQtuB,EAAM,UACxB,OAAe,KAARN,EAAa,IAAMA,MAO9B0hB,WACCmP,yBAA2B,EAC3BC,aAAe,EACfC,aAAe,EACfC,UAAY,EACZC,YAAc,EACdtB,YAAc,EACduB,YAAc,EACdN,SAAW,EACXO,OAAS,EACTC,SAAW,EACXC,QAAU,EACVC,QAAU,EACVC,MAAQ,GAKTtB,UACCuB,QAAS,YAIV5Q,MAAO,SAAUtgB,EAAMc,EAAM4C,EAAOssB,GAGnC,GAAMhwB,GAA0B,IAAlBA,EAAKgJ,UAAoC,IAAlBhJ,EAAKgJ,UAAmBhJ,EAAKsgB,MAAlE,CAKA,GAAI5gB,GAAKyC,EAAMud,EACdyR,EAAW9yB,EAAOuE,UAAW9B,GAC7BswB,EAAerC,GAAY9kB,KAAMnJ,GACjCwf,EAAQtgB,EAAKsgB,KAad,OARM8Q,KACLtwB,EAAO4uB,GAAeyB,IAIvBzR,EAAQrhB,EAAOgyB,SAAUvvB,IAAUzC,EAAOgyB,SAAUc,GAGrC1vB,SAAViC,EAwCCgc,GAAS,OAASA,IACwBje,UAA5C/B,EAAMggB,EAAMpgB,IAAKU,GAAM,EAAOgwB,IAEzBtwB,EAID4gB,EAAOxf,IA9CdqB,QAAcuB,GAGA,WAATvB,IAAuBzC,EAAMygB,GAAQxW,KAAMjG,KAAahE,EAAK,KACjEgE,EAAQid,GAAW3gB,EAAMc,EAAMpB,GAG/ByC,EAAO,UAIM,MAATuB,GAAiBA,IAAUA,IAKlB,WAATvB,IACJuB,GAAShE,GAAOA,EAAK,KAASrB,EAAO+iB,UAAW+P,GAAa,GAAK,OAI7D1zB,EAAQwwB,iBAA6B,KAAVvqB,GAAiD,IAAjC5C,EAAK7D,QAAS,gBAC9DqjB,EAAOxf,GAAS,WAIX4e,GAAY,OAASA,IACsBje,UAA9CiC,EAAQgc,EAAMjB,IAAKze,EAAM0D,EAAOssB,MAE7BoB,EACJ9Q,EAAM+Q,YAAavwB,EAAM4C,GAEzB4c,EAAOxf,GAAS4C,IArBlB,UAuCF8c,IAAK,SAAUxgB,EAAMc,EAAMkvB,EAAOE,GACjC,GAAI1hB,GAAKjP,EAAKmgB,EACbyR,EAAW9yB,EAAOuE,UAAW9B,GAC7BswB,EAAerC,GAAY9kB,KAAMnJ,EA4BlC,OAvBMswB,KACLtwB,EAAO4uB,GAAeyB,IAIvBzR,EAAQrhB,EAAOgyB,SAAUvvB,IAAUzC,EAAOgyB,SAAUc,GAG/CzR,GAAS,OAASA,KACtBlR,EAAMkR,EAAMpgB,IAAKU,GAAM,EAAMgwB,IAIjBvuB,SAAR+M,IACJA,EAAM8f,GAAQtuB,EAAMc,EAAMovB,IAId,WAAR1hB,GAAoB1N,IAAQquB,MAChC3gB,EAAM2gB,GAAoBruB,IAIZ,KAAVkvB,GAAgBA,GACpBzwB,EAAMgD,WAAYiM,GACXwhB,KAAU,GAAQsB,SAAU/xB,GAAQA,GAAO,EAAIiP,GAGhDA,KAITnQ,EAAOwB,MAAQ,SAAU,SAAW,SAAUI,EAAGa,GAChDzC,EAAOgyB,SAAUvvB,IAChBxB,IAAK,SAAUU,EAAMuuB,EAAUyB,GAC9B,GAAKzB,EAIJ,OAAOO,GAAa7kB,KAAM5L,EAAOmiB,IAAKxgB,EAAM,aAQxCA,EAAKuxB,iBAAiBnyB,QAAWY,EAAKwxB,wBAAwB3D,MAIhEsC,GAAkBnwB,EAAMc,EAAMkvB,GAH9BvP,GAAMzgB,EAAMgvB,GAAS,WACpB,MAAOmB,IAAkBnwB,EAAMc,EAAMkvB,MAM1CvR,IAAK,SAAUze,EAAM0D,EAAOssB,GAC3B,GAAIzsB,GACH2sB,EAASF,GAAS9C,GAAWltB,GAC7B6vB,EAAWG,GAASD,GACnB/vB,EACAc,EACAkvB,EACmD,eAAnD3xB,EAAOmiB,IAAKxgB,EAAM,aAAa,EAAOkwB,GACtCA,EAWF,OAPKL,KAActsB,EAAU4c,GAAQxW,KAAMjG,KACb,QAA3BH,EAAS,IAAO,QAElBvD,EAAKsgB,MAAOxf,GAAS4C,EACrBA,EAAQrF,EAAOmiB,IAAKxgB,EAAMc,IAGpB8uB,GAAmB5vB,EAAM0D,EAAOmsB,OAK1CxxB,EAAOgyB,SAAS1C,WAAagB,GAAclxB,EAAQ4wB,mBAClD,SAAUruB,EAAMuuB,GACf,GAAKA,EACJ,OAAShsB,WAAY+rB,GAAQtuB,EAAM,gBAClCA,EAAKwxB,wBAAwBC,KAC5BhR,GAAMzgB,GAAQ2tB,WAAY,GAAK,WAC9B,MAAO3tB,GAAKwxB,wBAAwBC,QAElC,OAMRpzB,EAAOwB,MACN6xB,OAAQ,GACRC,QAAS,GACTC,OAAQ,SACN,SAAUC,EAAQC,GACpBzzB,EAAOgyB,SAAUwB,EAASC,IACzBC,OAAQ,SAAUruB,GAOjB,IANA,GAAIzD,GAAI,EACP+xB,KAGAC,EAAyB,gBAAVvuB,GAAqBA,EAAMS,MAAO,MAAUT,GAEpDzD,EAAI,EAAGA,IACd+xB,EAAUH,EAASzR,GAAWngB,GAAM6xB,GACnCG,EAAOhyB,IAAOgyB,EAAOhyB,EAAI,IAAOgyB,EAAO,EAGzC,OAAOD,KAIHhF,GAAQ/iB,KAAM4nB,KACnBxzB,EAAOgyB,SAAUwB,EAASC,GAASrT,IAAMmR,MAI3CvxB,EAAOG,GAAGoC,QACT4f,IAAK,SAAU1f,EAAM4C,GACpB,MAAOoa,GAAQthB,KAAM,SAAUwD,EAAMc,EAAM4C,GAC1C,GAAIwsB,GAAQ3vB,EACXR,KACAE,EAAI,CAEL,IAAKsB,MAAMC,QAASV,GAAS,CAI5B,IAHAovB,EAAShD,GAAWltB,GACpBO,EAAMO,EAAK1B,OAEHa,EAAIM,EAAKN,IAChBF,EAAKe,EAAMb,IAAQ5B,EAAOmiB,IAAKxgB,EAAMc,EAAMb,IAAK,EAAOiwB,EAGxD,OAAOnwB,GAGR,MAAiB0B,UAAViC,EACNrF,EAAOiiB,MAAOtgB,EAAMc,EAAM4C,GAC1BrF,EAAOmiB,IAAKxgB,EAAMc,IACjBA,EAAM4C,EAAOvD,UAAUf,OAAS,KAKrC,SAAS8yB,IAAOlyB,EAAMa,EAAS8d,EAAMle,EAAK0xB,GACzC,MAAO,IAAID,IAAMjzB,UAAUR,KAAMuB,EAAMa,EAAS8d,EAAMle,EAAK0xB,GAE5D9zB,EAAO6zB,MAAQA,GAEfA,GAAMjzB,WACLE,YAAa+yB,GACbzzB,KAAM,SAAUuB,EAAMa,EAAS8d,EAAMle,EAAK0xB,EAAQhR,GACjD3kB,KAAKwD,KAAOA,EACZxD,KAAKmiB,KAAOA,EACZniB,KAAK21B,OAASA,GAAU9zB,EAAO8zB,OAAO5P,SACtC/lB,KAAKqE,QAAUA,EACfrE,KAAKkU,MAAQlU,KAAKuH,IAAMvH,KAAKgP,MAC7BhP,KAAKiE,IAAMA,EACXjE,KAAK2kB,KAAOA,IAAU9iB,EAAO+iB,UAAWzC,GAAS,GAAK,OAEvDnT,IAAK,WACJ,GAAIkU,GAAQwS,GAAME,UAAW51B,KAAKmiB,KAElC,OAAOe,IAASA,EAAMpgB,IACrBogB,EAAMpgB,IAAK9C,MACX01B,GAAME,UAAU7P,SAASjjB,IAAK9C,OAEhC61B,IAAK,SAAUC,GACd,GAAIC,GACH7S,EAAQwS,GAAME,UAAW51B,KAAKmiB,KAoB/B,OAlBKniB,MAAKqE,QAAQ2xB,SACjBh2B,KAAKi2B,IAAMF,EAAQl0B,EAAO8zB,OAAQ31B,KAAK21B,QACtCG,EAAS91B,KAAKqE,QAAQ2xB,SAAWF,EAAS,EAAG,EAAG91B,KAAKqE,QAAQ2xB,UAG9Dh2B,KAAKi2B,IAAMF,EAAQD,EAEpB91B,KAAKuH,KAAQvH,KAAKiE,IAAMjE,KAAKkU,OAAU6hB,EAAQ/1B,KAAKkU,MAE/ClU,KAAKqE,QAAQ6xB,MACjBl2B,KAAKqE,QAAQ6xB,KAAKl1B,KAAMhB,KAAKwD,KAAMxD,KAAKuH,IAAKvH,MAGzCkjB,GAASA,EAAMjB,IACnBiB,EAAMjB,IAAKjiB,MAEX01B,GAAME,UAAU7P,SAAS9D,IAAKjiB,MAExBA,OAIT01B,GAAMjzB,UAAUR,KAAKQ,UAAYizB,GAAMjzB,UAEvCizB,GAAME,WACL7P,UACCjjB,IAAK,SAAUuhB,GACd,GAAI5Q,EAIJ,OAA6B,KAAxB4Q,EAAM7gB,KAAKgJ,UACa,MAA5B6X,EAAM7gB,KAAM6gB,EAAMlC,OAAoD,MAAlCkC,EAAM7gB,KAAKsgB,MAAOO,EAAMlC,MACrDkC,EAAM7gB,KAAM6gB,EAAMlC,OAO1B1O,EAAS5R,EAAOmiB,IAAKK,EAAM7gB,KAAM6gB,EAAMlC,KAAM,IAGrC1O,GAAqB,SAAXA,EAAwBA,EAAJ,IAEvCwO,IAAK,SAAUoC,GAKTxiB,EAAOs0B,GAAGD,KAAM7R,EAAMlC,MAC1BtgB,EAAOs0B,GAAGD,KAAM7R,EAAMlC,MAAQkC,GACK,IAAxBA,EAAM7gB,KAAKgJ,UACiC,MAArD6X,EAAM7gB,KAAKsgB,MAAOjiB,EAAOsxB,SAAU9O,EAAMlC,SAC1CtgB,EAAOgyB,SAAUxP,EAAMlC,MAGxBkC,EAAM7gB,KAAM6gB,EAAMlC,MAASkC,EAAM9c,IAFjC1F,EAAOiiB,MAAOO,EAAM7gB,KAAM6gB,EAAMlC,KAAMkC,EAAM9c,IAAM8c,EAAMM,SAU5D+Q,GAAME,UAAUQ,UAAYV,GAAME,UAAUS,YAC3CpU,IAAK,SAAUoC,GACTA,EAAM7gB,KAAKgJ,UAAY6X,EAAM7gB,KAAK9B,aACtC2iB,EAAM7gB,KAAM6gB,EAAMlC,MAASkC,EAAM9c,OAKpC1F,EAAO8zB,QACNW,OAAQ,SAAUC,GACjB,MAAOA,IAERC,MAAO,SAAUD,GAChB,MAAO,GAAMpxB,KAAKsxB,IAAKF,EAAIpxB,KAAKuxB,IAAO,GAExC3Q,SAAU,SAGXlkB,EAAOs0B,GAAKT,GAAMjzB,UAAUR,KAG5BJ,EAAOs0B,GAAGD,OAKV,IACCS,IAAOC,GACPC,GAAW,yBACXC,GAAO,aAER,SAASC,MACHH,KACCh3B,EAASo3B,UAAW,GAASj3B,EAAOk3B,sBACxCl3B,EAAOk3B,sBAAuBF,IAE9Bh3B,EAAOigB,WAAY+W,GAAUl1B,EAAOs0B,GAAGe,UAGxCr1B,EAAOs0B,GAAGgB,QAKZ,QAASC,MAIR,MAHAr3B,GAAOigB,WAAY,WAClB2W,GAAQ1xB,SAEA0xB,GAAQ90B,EAAO0F,MAIzB,QAAS8vB,IAAO1xB,EAAM2xB,GACrB,GAAI/J,GACH9pB,EAAI,EACJmL,GAAU2oB,OAAQ5xB,EAKnB,KADA2xB,EAAeA,EAAe,EAAI,EAC1B7zB,EAAI,EAAGA,GAAK,EAAI6zB,EACvB/J,EAAQ3J,GAAWngB,GACnBmL,EAAO,SAAW2e,GAAU3e,EAAO,UAAY2e,GAAU5nB,CAO1D,OAJK2xB,KACJ1oB,EAAMklB,QAAUllB,EAAMyiB,MAAQ1rB,GAGxBiJ,EAGR,QAAS4oB,IAAatwB,EAAOib,EAAMsV,GAKlC,IAJA,GAAIpT,GACHyK,GAAe4I,GAAUC,SAAUxV,QAAe5hB,OAAQm3B,GAAUC,SAAU,MAC9Epc,EAAQ,EACR3Y,EAASksB,EAAWlsB,OACb2Y,EAAQ3Y,EAAQ2Y,IACvB,GAAO8I,EAAQyK,EAAYvT,GAAQva,KAAMy2B,EAAWtV,EAAMjb,GAGzD,MAAOmd,GAKV,QAASuT,IAAkBp0B,EAAM6nB,EAAOwM,GACvC,GAAI1V,GAAMjb,EAAOme,EAAQnC,EAAO4U,EAASC,EAAWC,EAAgBjU,EACnEkU,EAAQ,SAAW5M,IAAS,UAAYA,GACxC6M,EAAOl4B,KACP4tB,KACA9J,EAAQtgB,EAAKsgB,MACbkT,EAASxzB,EAAKgJ,UAAYqX,GAAoBrgB,GAC9C20B,EAAW9V,EAASvf,IAAKU,EAAM,SAG1Bq0B,GAAKhb,QACVqG,EAAQrhB,EAAOshB,YAAa3f,EAAM,MACX,MAAlB0f,EAAMkV,WACVlV,EAAMkV,SAAW,EACjBN,EAAU5U,EAAMpN,MAAMiH,KACtBmG,EAAMpN,MAAMiH,KAAO,WACZmG,EAAMkV,UACXN,MAIH5U,EAAMkV,WAENF,EAAK5Z,OAAQ,WAGZ4Z,EAAK5Z,OAAQ,WACZ4E,EAAMkV,WACAv2B,EAAOgb,MAAOrZ,EAAM,MAAOZ,QAChCsgB,EAAMpN,MAAMiH,WAOhB,KAAMoF,IAAQkJ,GAEb,GADAnkB,EAAQmkB,EAAOlJ,GACV0U,GAASppB,KAAMvG,GAAU,CAG7B,SAFOmkB,GAAOlJ,GACdkD,EAASA,GAAoB,WAAVne,EACdA,KAAY8vB,EAAS,OAAS,QAAW,CAI7C,GAAe,SAAV9vB,IAAoBixB,GAAiClzB,SAArBkzB,EAAUhW,GAK9C,QAJA6U,IAAS,EAOXpJ,EAAMzL,GAASgW,GAAYA,EAAUhW,IAAUtgB,EAAOiiB,MAAOtgB,EAAM2e,GAMrE,GADA4V,GAAal2B,EAAOqE,cAAemlB,GAC7B0M,IAAal2B,EAAOqE,cAAe0nB,GAAzC,CAKKqK,GAA2B,IAAlBz0B,EAAKgJ,WAKlBqrB,EAAKQ,UAAavU,EAAMuU,SAAUvU,EAAMwU,UAAWxU,EAAMyU,WAGzDP,EAAiBG,GAAYA,EAASpU,QACf,MAAlBiU,IACJA,EAAiB3V,EAASvf,IAAKU,EAAM,YAEtCugB,EAAUliB,EAAOmiB,IAAKxgB,EAAM,WACX,SAAZugB,IACCiU,EACJjU,EAAUiU,GAIV/S,IAAYzhB,IAAQ,GACpBw0B,EAAiBx0B,EAAKsgB,MAAMC,SAAWiU,EACvCjU,EAAUliB,EAAOmiB,IAAKxgB,EAAM,WAC5ByhB,IAAYzhB,OAKG,WAAZugB,GAAoC,iBAAZA,GAAgD,MAAlBiU,IACrB,SAAhCn2B,EAAOmiB,IAAKxgB,EAAM,WAGhBu0B,IACLG,EAAKnvB,KAAM,WACV+a,EAAMC,QAAUiU,IAEM,MAAlBA,IACJjU,EAAUD,EAAMC,QAChBiU,EAA6B,SAAZjU,EAAqB,GAAKA,IAG7CD,EAAMC,QAAU,iBAKd8T,EAAKQ,WACTvU,EAAMuU,SAAW,SACjBH,EAAK5Z,OAAQ,WACZwF,EAAMuU,SAAWR,EAAKQ,SAAU,GAChCvU,EAAMwU,UAAYT,EAAKQ,SAAU,GACjCvU,EAAMyU,UAAYV,EAAKQ,SAAU,MAKnCN,GAAY,CACZ,KAAM5V,IAAQyL,GAGPmK,IACAI,EACC,UAAYA,KAChBnB,EAASmB,EAASnB,QAGnBmB,EAAW9V,EAASf,OAAQ9d,EAAM,UAAYugB,QAASiU,IAInD3S,IACJ8S,EAASnB,QAAUA,GAIfA,GACJ/R,IAAYzhB,IAAQ,GAKrB00B,EAAKnvB,KAAM,WAKJiuB,GACL/R,IAAYzhB,IAEb6e,EAASnF,OAAQ1Z,EAAM,SACvB,KAAM2e,IAAQyL,GACb/rB,EAAOiiB,MAAOtgB,EAAM2e,EAAMyL,EAAMzL,OAMnC4V,EAAYP,GAAaR,EAASmB,EAAUhW,GAAS,EAAGA,EAAM+V,GACtD/V,IAAQgW,KACfA,EAAUhW,GAAS4V,EAAU7jB,MACxB8iB,IACJe,EAAU9zB,IAAM8zB,EAAU7jB,MAC1B6jB,EAAU7jB,MAAQ,KAMtB,QAASskB,IAAYnN,EAAOoN,GAC3B,GAAIld,GAAOjX,EAAMqxB,EAAQzuB,EAAOgc,CAGhC,KAAM3H,IAAS8P,GAed,GAdA/mB,EAAOzC,EAAOuE,UAAWmV,GACzBoa,EAAS8C,EAAen0B,GACxB4C,EAAQmkB,EAAO9P,GACVxW,MAAMC,QAASkC,KACnByuB,EAASzuB,EAAO,GAChBA,EAAQmkB,EAAO9P,GAAUrU,EAAO,IAG5BqU,IAAUjX,IACd+mB,EAAO/mB,GAAS4C,QACTmkB,GAAO9P,IAGf2H,EAAQrhB,EAAOgyB,SAAUvvB,GACpB4e,GAAS,UAAYA,GAAQ,CACjChc,EAAQgc,EAAMqS,OAAQruB,SACfmkB,GAAO/mB,EAId,KAAMiX,IAASrU,GACNqU,IAAS8P,KAChBA,EAAO9P,GAAUrU,EAAOqU,GACxBkd,EAAeld,GAAUoa,OAI3B8C,GAAen0B,GAASqxB,EAK3B,QAAS+B,IAAWl0B,EAAMk1B,EAAYr0B,GACrC,GAAIoP,GACHklB,EACApd,EAAQ,EACR3Y,EAAS80B,GAAUkB,WAAWh2B,OAC9B2b,EAAW1c,EAAOqc,WAAWI,OAAQ,iBAG7B6Y,GAAK3zB,OAEb2zB,EAAO,WACN,GAAKwB,EACJ,OAAO,CAYR,KAVA,GAAIE,GAAclC,IAASS,KAC1BhX,EAAYjb,KAAKmuB,IAAK,EAAGmE,EAAUqB,UAAYrB,EAAUzB,SAAW6C,GAIpEzgB,EAAOgI,EAAYqX,EAAUzB,UAAY,EACzCF,EAAU,EAAI1d,EACdmD,EAAQ,EACR3Y,EAAS60B,EAAUsB,OAAOn2B,OAEnB2Y,EAAQ3Y,EAAQ2Y,IACvBkc,EAAUsB,OAAQxd,GAAQsa,IAAKC,EAMhC,OAHAvX,GAASkB,WAAYjc,GAAQi0B,EAAW3B,EAAS1V,IAG5C0V,EAAU,GAAKlzB,EACZwd,GAIFxd,GACL2b,EAASkB,WAAYjc,GAAQi0B,EAAW,EAAG,IAI5ClZ,EAASmB,YAAalc,GAAQi0B,KACvB,IAERA,EAAYlZ,EAASR,SACpBva,KAAMA,EACN6nB,MAAOxpB,EAAOuC,UAAYs0B,GAC1Bb,KAAMh2B,EAAOuC,QAAQ,GACpBq0B,iBACA9C,OAAQ9zB,EAAO8zB,OAAO5P,UACpB1hB,GACH20B,mBAAoBN,EACpBO,gBAAiB50B,EACjBy0B,UAAWnC,IAASS,KACpBpB,SAAU3xB,EAAQ2xB,SAClB+C,UACAvB,YAAa,SAAUrV,EAAMle,GAC5B,GAAIogB,GAAQxiB,EAAO6zB,MAAOlyB,EAAMi0B,EAAUI,KAAM1V,EAAMle,EACpDwzB,EAAUI,KAAKY,cAAetW,IAAUsV,EAAUI,KAAKlC,OAEzD,OADA8B,GAAUsB,OAAOv4B,KAAM6jB,GAChBA,GAERjB,KAAM,SAAU8V,GACf,GAAI3d,GAAQ,EAIX3Y,EAASs2B,EAAUzB,EAAUsB,OAAOn2B,OAAS,CAC9C,IAAK+1B,EACJ,MAAO34B,KAGR,KADA24B,GAAU,EACFpd,EAAQ3Y,EAAQ2Y,IACvBkc,EAAUsB,OAAQxd,GAAQsa,IAAK,EAUhC,OANKqD,IACJ3a,EAASkB,WAAYjc,GAAQi0B,EAAW,EAAG,IAC3ClZ,EAASmB,YAAalc,GAAQi0B,EAAWyB,KAEzC3a,EAASuB,WAAYtc,GAAQi0B,EAAWyB,IAElCl5B,QAGTqrB,EAAQoM,EAAUpM,KAInB,KAFAmN,GAAYnN,EAAOoM,EAAUI,KAAKY,eAE1Bld,EAAQ3Y,EAAQ2Y,IAEvB,GADA9H,EAASikB,GAAUkB,WAAYrd,GAAQva,KAAMy2B,EAAWj0B,EAAM6nB,EAAOoM,EAAUI,MAM9E,MAJKh2B,GAAOgD,WAAY4O,EAAO2P,QAC9BvhB,EAAOshB,YAAasU,EAAUj0B,KAAMi0B,EAAUI,KAAKhb,OAAQuG,KAC1DvhB,EAAOuF,MAAOqM,EAAO2P,KAAM3P,IAEtBA,CAyBT,OArBA5R,GAAO0B,IAAK8nB,EAAOmM,GAAaC,GAE3B51B,EAAOgD,WAAY4yB,EAAUI,KAAK3jB,QACtCujB,EAAUI,KAAK3jB,MAAMlT,KAAMwC,EAAMi0B,GAIlCA,EACE3Y,SAAU2Y,EAAUI,KAAK/Y,UACzB/V,KAAM0uB,EAAUI,KAAK9uB,KAAM0uB,EAAUI,KAAKsB,UAC1Cnb,KAAMyZ,EAAUI,KAAK7Z,MACrBM,OAAQmZ,EAAUI,KAAKvZ,QAEzBzc,EAAOs0B,GAAGiD,MACTv3B,EAAOuC,OAAQ+yB,GACd3zB,KAAMA,EACN00B,KAAMT,EACN5a,MAAO4a,EAAUI,KAAKhb,SAIjB4a,EAGR51B,EAAO61B,UAAY71B,EAAOuC,OAAQszB,IAEjCC,UACC0B,KAAO,SAAUlX,EAAMjb,GACtB,GAAImd,GAAQrkB,KAAKw3B,YAAarV,EAAMjb,EAEpC,OADAid,IAAWE,EAAM7gB,KAAM2e,EAAMwB,GAAQxW,KAAMjG,GAASmd,GAC7CA,KAITiV,QAAS,SAAUjO,EAAO/nB,GACpBzB,EAAOgD,WAAYwmB,IACvB/nB,EAAW+nB,EACXA,GAAU,MAEVA,EAAQA,EAAMve,MAAOsP,EAOtB,KAJA,GAAI+F,GACH5G,EAAQ,EACR3Y,EAASyoB,EAAMzoB,OAER2Y,EAAQ3Y,EAAQ2Y,IACvB4G,EAAOkJ,EAAO9P,GACdmc,GAAUC,SAAUxV,GAASuV,GAAUC,SAAUxV,OACjDuV,GAAUC,SAAUxV,GAAOvQ,QAAStO,IAItCs1B,YAAchB,IAEd2B,UAAW,SAAUj2B,EAAUssB,GACzBA,EACJ8H,GAAUkB,WAAWhnB,QAAStO,GAE9Bo0B,GAAUkB,WAAWp4B,KAAM8C,MAK9BzB,EAAO23B,MAAQ,SAAUA,EAAO7D,EAAQ3zB,GACvC,GAAIy3B,GAAMD,GAA0B,gBAAVA,GAAqB33B,EAAOuC,UAAYo1B,IACjEL,SAAUn3B,IAAOA,GAAM2zB,GACtB9zB,EAAOgD,WAAY20B,IAAWA,EAC/BxD,SAAUwD,EACV7D,OAAQ3zB,GAAM2zB,GAAUA,IAAW9zB,EAAOgD,WAAY8wB,IAAYA,EAoCnE,OAhCK9zB,GAAOs0B,GAAG/N,IACdqR,EAAIzD,SAAW,EAGc,gBAAjByD,GAAIzD,WACVyD,EAAIzD,WAAYn0B,GAAOs0B,GAAGuD,OAC9BD,EAAIzD,SAAWn0B,EAAOs0B,GAAGuD,OAAQD,EAAIzD,UAGrCyD,EAAIzD,SAAWn0B,EAAOs0B,GAAGuD,OAAO3T,UAMjB,MAAb0T,EAAI5c,OAAiB4c,EAAI5c,SAAU,IACvC4c,EAAI5c,MAAQ,MAIb4c,EAAIvV,IAAMuV,EAAIN,SAEdM,EAAIN,SAAW,WACTt3B,EAAOgD,WAAY40B,EAAIvV,MAC3BuV,EAAIvV,IAAIljB,KAAMhB,MAGVy5B,EAAI5c,OACRhb,EAAOmhB,QAAShjB,KAAMy5B,EAAI5c,QAIrB4c,GAGR53B,EAAOG,GAAGoC,QACTu1B,OAAQ,SAAUH,EAAOI,EAAIjE,EAAQryB,GAGpC,MAAOtD,MAAKuQ,OAAQsT,IAAqBG,IAAK,UAAW,GAAIkB,OAG3DjhB,MAAM41B,SAAW/F,QAAS8F,GAAMJ,EAAO7D,EAAQryB,IAElDu2B,QAAS,SAAU1X,EAAMqX,EAAO7D,EAAQryB,GACvC,GAAIwS,GAAQjU,EAAOqE,cAAeic,GACjC2X,EAASj4B,EAAO23B,MAAOA,EAAO7D,EAAQryB,GACtCy2B,EAAc,WAGb,GAAI7B,GAAOR,GAAW13B,KAAM6B,EAAOuC,UAAY+d,GAAQ2X,IAGlDhkB,GAASuM,EAASvf,IAAK9C,KAAM,YACjCk4B,EAAK9U,MAAM,GAKd,OAFC2W,GAAYC,OAASD,EAEfjkB,GAASgkB,EAAOjd,SAAU,EAChC7c,KAAKqD,KAAM02B,GACX/5B,KAAK6c,MAAOid,EAAOjd,MAAOkd,IAE5B3W,KAAM,SAAUzd,EAAM2d,EAAY4V,GACjC,GAAIe,GAAY,SAAU/W,GACzB,GAAIE,GAAOF,EAAME,WACVF,GAAME,KACbA,EAAM8V,GAYP,OATqB,gBAATvzB,KACXuzB,EAAU5V,EACVA,EAAa3d,EACbA,EAAOV,QAEHqe,GAAc3d,KAAS,GAC3B3F,KAAK6c,MAAOlX,GAAQ,SAGd3F,KAAKqD,KAAM,WACjB,GAAI2f,IAAU,EACbzH,EAAgB,MAAR5V,GAAgBA,EAAO,aAC/Bu0B,EAASr4B,EAAOq4B,OAChBhY,EAAOG,EAASvf,IAAK9C,KAEtB,IAAKub,EACC2G,EAAM3G,IAAW2G,EAAM3G,GAAQ6H,MACnC6W,EAAW/X,EAAM3G,QAGlB,KAAMA,IAAS2G,GACTA,EAAM3G,IAAW2G,EAAM3G,GAAQ6H,MAAQ0T,GAAKrpB,KAAM8N,IACtD0e,EAAW/X,EAAM3G,GAKpB,KAAMA,EAAQ2e,EAAOt3B,OAAQ2Y,KACvB2e,EAAQ3e,GAAQ/X,OAASxD,MACnB,MAAR2F,GAAgBu0B,EAAQ3e,GAAQsB,QAAUlX,IAE5Cu0B,EAAQ3e,GAAQ2c,KAAK9U,KAAM8V,GAC3BlW,GAAU,EACVkX,EAAO/1B,OAAQoX,EAAO,KAOnByH,GAAYkW,GAChBr3B,EAAOmhB,QAAShjB,KAAM2F,MAIzBq0B,OAAQ,SAAUr0B,GAIjB,MAHKA,MAAS,IACbA,EAAOA,GAAQ,MAET3F,KAAKqD,KAAM,WACjB,GAAIkY,GACH2G,EAAOG,EAASvf,IAAK9C,MACrB6c,EAAQqF,EAAMvc,EAAO,SACrBud,EAAQhB,EAAMvc,EAAO,cACrBu0B,EAASr4B,EAAOq4B,OAChBt3B,EAASia,EAAQA,EAAMja,OAAS,CAajC,KAVAsf,EAAK8X,QAAS,EAGdn4B,EAAOgb,MAAO7c,KAAM2F,MAEfud,GAASA,EAAME,MACnBF,EAAME,KAAKpiB,KAAMhB,MAAM,GAIlBub,EAAQ2e,EAAOt3B,OAAQ2Y,KACvB2e,EAAQ3e,GAAQ/X,OAASxD,MAAQk6B,EAAQ3e,GAAQsB,QAAUlX,IAC/Du0B,EAAQ3e,GAAQ2c,KAAK9U,MAAM,GAC3B8W,EAAO/1B,OAAQoX,EAAO,GAKxB,KAAMA,EAAQ,EAAGA,EAAQ3Y,EAAQ2Y,IAC3BsB,EAAOtB,IAAWsB,EAAOtB,GAAQye,QACrCnd,EAAOtB,GAAQye,OAAOh5B,KAAMhB,YAKvBkiB,GAAK8X,YAKfn4B,EAAOwB,MAAQ,SAAU,OAAQ,QAAU,SAAUI,EAAGa,GACvD,GAAI61B,GAAQt4B,EAAOG,GAAIsC,EACvBzC,GAAOG,GAAIsC,GAAS,SAAUk1B,EAAO7D,EAAQryB,GAC5C,MAAgB,OAATk2B,GAAkC,iBAAVA,GAC9BW,EAAMz2B,MAAO1D,KAAM2D,WACnB3D,KAAK65B,QAASxC,GAAO/yB,GAAM,GAAQk1B,EAAO7D,EAAQryB,MAKrDzB,EAAOwB,MACN+2B,UAAW/C,GAAO,QAClBgD,QAAShD,GAAO,QAChBiD,YAAajD,GAAO,UACpBkD,QAAUzG,QAAS,QACnB0G,SAAW1G,QAAS,QACpB2G,YAAc3G,QAAS,WACrB,SAAUxvB,EAAM+mB,GAClBxpB,EAAOG,GAAIsC,GAAS,SAAUk1B,EAAO7D,EAAQryB,GAC5C,MAAOtD,MAAK65B,QAASxO,EAAOmO,EAAO7D,EAAQryB,MAI7CzB,EAAOq4B,UACPr4B,EAAOs0B,GAAGgB,KAAO,WAChB,GAAIiC,GACH31B,EAAI,EACJy2B,EAASr4B,EAAOq4B,MAIjB,KAFAvD,GAAQ90B,EAAO0F,MAEP9D,EAAIy2B,EAAOt3B,OAAQa,IAC1B21B,EAAQc,EAAQz2B,GAGV21B,KAAWc,EAAQz2B,KAAQ21B,GAChCc,EAAO/1B,OAAQV,IAAK,EAIhBy2B,GAAOt3B,QACZf,EAAOs0B,GAAG/S,OAEXuT,GAAQ1xB,QAGTpD,EAAOs0B,GAAGiD,MAAQ,SAAUA,GAC3Bv3B,EAAOq4B,OAAO15B,KAAM44B,GACpBv3B,EAAOs0B,GAAGjiB,SAGXrS,EAAOs0B,GAAGe,SAAW,GACrBr1B,EAAOs0B,GAAGjiB,MAAQ,WACZ0iB,KAILA,IAAa,EACbG,OAGDl1B,EAAOs0B,GAAG/S,KAAO,WAChBwT,GAAa,MAGd/0B,EAAOs0B,GAAGuD,QACTgB,KAAM,IACNC,KAAM,IAGN5U,SAAU,KAMXlkB,EAAOG,GAAG44B,MAAQ,SAAUC,EAAMl1B,GAIjC,MAHAk1B,GAAOh5B,EAAOs0B,GAAKt0B,EAAOs0B,GAAGuD,OAAQmB,IAAUA,EAAOA,EACtDl1B,EAAOA,GAAQ,KAER3F,KAAK6c,MAAOlX,EAAM,SAAU2G,EAAM4W,GACxC,GAAI4X,GAAU/6B,EAAOigB,WAAY1T,EAAMuuB,EACvC3X,GAAME,KAAO,WACZrjB,EAAOg7B,aAAcD,OAMxB,WACC,GAAIjqB,GAAQjR,EAAS0B,cAAe,SACnC6G,EAASvI,EAAS0B,cAAe,UACjCm4B,EAAMtxB,EAAO1G,YAAa7B,EAAS0B,cAAe,UAEnDuP,GAAMlL,KAAO,WAIb1E,EAAQ+5B,QAA0B,KAAhBnqB,EAAM3J,MAIxBjG,EAAQg6B,YAAcxB,EAAI7jB,SAI1B/E,EAAQjR,EAAS0B,cAAe,SAChCuP,EAAM3J,MAAQ,IACd2J,EAAMlL,KAAO,QACb1E,EAAQi6B,WAA6B,MAAhBrqB,EAAM3J,QAI5B,IAAIi0B,IACHrsB,GAAajN,EAAOgQ,KAAK/C,UAE1BjN,GAAOG,GAAGoC,QACT2N,KAAM,SAAUzN,EAAM4C,GACrB,MAAOoa,GAAQthB,KAAM6B,EAAOkQ,KAAMzN,EAAM4C,EAAOvD,UAAUf,OAAS,IAGnEw4B,WAAY,SAAU92B,GACrB,MAAOtE,MAAKqD,KAAM,WACjBxB,EAAOu5B,WAAYp7B,KAAMsE,QAK5BzC,EAAOuC,QACN2N,KAAM,SAAUvO,EAAMc,EAAM4C,GAC3B,GAAIhE,GAAKggB,EACRmY,EAAQ73B,EAAKgJ,QAGd,IAAe,IAAV6uB,GAAyB,IAAVA,GAAyB,IAAVA,EAKnC,MAAkC,mBAAtB73B,GAAKmK,aACT9L,EAAOsgB,KAAM3e,EAAMc,EAAM4C,IAKlB,IAAVm0B,GAAgBx5B,EAAOkY,SAAUvW,KACrC0f,EAAQrhB,EAAOy5B,UAAWh3B,EAAKsD,iBAC5B/F,EAAOgQ,KAAK/E,MAAMjC,KAAK4C,KAAMnJ,GAAS62B,GAAWl2B,SAGtCA,SAAViC,EACW,OAAVA,MACJrF,GAAOu5B,WAAY53B,EAAMc,GAIrB4e,GAAS,OAASA,IACuBje,UAA3C/B,EAAMggB,EAAMjB,IAAKze,EAAM0D,EAAO5C,IACzBpB,GAGRM,EAAKoK,aAActJ,EAAM4C,EAAQ,IAC1BA,GAGHgc,GAAS,OAASA,IAA+C,QAApChgB,EAAMggB,EAAMpgB,IAAKU,EAAMc,IACjDpB,GAGRA,EAAMrB,EAAO4O,KAAKsB,KAAMvO,EAAMc;AAGhB,MAAPpB,EAAc+B,OAAY/B,KAGlCo4B,WACC31B,MACCsc,IAAK,SAAUze,EAAM0D,GACpB,IAAMjG,EAAQi6B,YAAwB,UAAVh0B,GAC3BwG,EAAUlK,EAAM,SAAY,CAC5B,GAAIwO,GAAMxO,EAAK0D,KAKf,OAJA1D,GAAKoK,aAAc,OAAQ1G,GACtB8K,IACJxO,EAAK0D,MAAQ8K,GAEP9K,MAMXk0B,WAAY,SAAU53B,EAAM0D,GAC3B,GAAI5C,GACHb,EAAI,EAIJ83B,EAAYr0B,GAASA,EAAM4F,MAAOsP,EAEnC,IAAKmf,GAA+B,IAAlB/3B,EAAKgJ,SACtB,MAAUlI,EAAOi3B,EAAW93B,KAC3BD,EAAK0K,gBAAiB5J,MAO1B62B,IACClZ,IAAK,SAAUze,EAAM0D,EAAO5C,GAQ3B,MAPK4C,MAAU,EAGdrF,EAAOu5B,WAAY53B,EAAMc,GAEzBd,EAAKoK,aAActJ,EAAMA,GAEnBA,IAITzC,EAAOwB,KAAMxB,EAAOgQ,KAAK/E,MAAMjC,KAAK6Y,OAAO5W,MAAO,QAAU,SAAUrJ,EAAGa,GACxE,GAAIk3B,GAAS1sB,GAAYxK,IAAUzC,EAAO4O,KAAKsB,IAE/CjD,IAAYxK,GAAS,SAAUd,EAAMc,EAAM0D,GAC1C,GAAI9E,GAAK4lB,EACR2S,EAAgBn3B,EAAKsD,aAYtB,OAVMI,KAGL8gB,EAASha,GAAY2sB,GACrB3sB,GAAY2sB,GAAkBv4B,EAC9BA,EAAqC,MAA/Bs4B,EAAQh4B,EAAMc,EAAM0D,GACzByzB,EACA,KACD3sB,GAAY2sB,GAAkB3S,GAExB5lB,IAOT,IAAIw4B,IAAa,sCAChBC,GAAa,eAEd95B,GAAOG,GAAGoC,QACT+d,KAAM,SAAU7d,EAAM4C,GACrB,MAAOoa,GAAQthB,KAAM6B,EAAOsgB,KAAM7d,EAAM4C,EAAOvD,UAAUf,OAAS,IAGnEg5B,WAAY,SAAUt3B,GACrB,MAAOtE,MAAKqD,KAAM,iBACVrD,MAAM6B,EAAOg6B,QAASv3B,IAAUA,QAK1CzC,EAAOuC,QACN+d,KAAM,SAAU3e,EAAMc,EAAM4C,GAC3B,GAAIhE,GAAKggB,EACRmY,EAAQ73B,EAAKgJ,QAGd,IAAe,IAAV6uB,GAAyB,IAAVA,GAAyB,IAAVA,EAWnC,MAPe,KAAVA,GAAgBx5B,EAAOkY,SAAUvW,KAGrCc,EAAOzC,EAAOg6B,QAASv3B,IAAUA,EACjC4e,EAAQrhB,EAAO+zB,UAAWtxB,IAGZW,SAAViC,EACCgc,GAAS,OAASA,IACuBje,UAA3C/B,EAAMggB,EAAMjB,IAAKze,EAAM0D,EAAO5C,IACzBpB,EAGCM,EAAMc,GAAS4C,EAGpBgc,GAAS,OAASA,IAA+C,QAApChgB,EAAMggB,EAAMpgB,IAAKU,EAAMc,IACjDpB,EAGDM,EAAMc,IAGdsxB,WACCngB,UACC3S,IAAK,SAAUU,GAOd,GAAIs4B,GAAWj6B,EAAO4O,KAAKsB,KAAMvO,EAAM,WAEvC,OAAKs4B,GACGC,SAAUD,EAAU,IAI3BJ,GAAWjuB,KAAMjK,EAAKkK,WACtBiuB,GAAWluB,KAAMjK,EAAKkK,WACtBlK,EAAKgS,KAEE,QAQXqmB,SACCG,MAAO,UACPC,QAAS,eAYLh7B,EAAQg6B,cACbp5B,EAAO+zB,UAAUhgB,UAChB9S,IAAK,SAAUU,GAId,GAAI2Q,GAAS3Q,EAAK9B,UAIlB,OAHKyS,IAAUA,EAAOzS,YACrByS,EAAOzS,WAAWmU,cAEZ,MAERoM,IAAK,SAAUze,GAId,GAAI2Q,GAAS3Q,EAAK9B,UACbyS,KACJA,EAAO0B,cAEF1B,EAAOzS,YACXyS,EAAOzS,WAAWmU,kBAOvBhU,EAAOwB,MACN,WACA,WACA,YACA,cACA,cACA,UACA,UACA,SACA,cACA,mBACE,WACFxB,EAAOg6B,QAAS77B,KAAK4H,eAAkB5H,MAQvC,SAASk8B,IAAkBh1B,GAC1B,GAAI4P,GAAS5P,EAAM4F,MAAOsP,MAC1B,OAAOtF,GAAOhJ,KAAM,KAItB,QAASquB,IAAU34B,GAClB,MAAOA,GAAKmK,cAAgBnK,EAAKmK,aAAc,UAAa,GAG7D9L,EAAOG,GAAGoC,QACTg4B,SAAU,SAAUl1B,GACnB,GAAIm1B,GAAS74B,EAAMwL,EAAKstB,EAAUC,EAAOv4B,EAAGw4B,EAC3C/4B,EAAI,CAEL,IAAK5B,EAAOgD,WAAYqC,GACvB,MAAOlH,MAAKqD,KAAM,SAAUW,GAC3BnC,EAAQ7B,MAAOo8B,SAAUl1B,EAAMlG,KAAMhB,KAAMgE,EAAGm4B,GAAUn8B,SAI1D,IAAsB,gBAAVkH,IAAsBA,EAAQ,CACzCm1B,EAAUn1B,EAAM4F,MAAOsP,MAEvB,OAAU5Y,EAAOxD,KAAMyD,KAItB,GAHA64B,EAAWH,GAAU34B,GACrBwL,EAAwB,IAAlBxL,EAAKgJ,UAAoB,IAAM0vB,GAAkBI,GAAa,IAEzD,CACVt4B,EAAI,CACJ,OAAUu4B,EAAQF,EAASr4B,KACrBgL,EAAIvO,QAAS,IAAM87B,EAAQ,KAAQ,IACvCvtB,GAAOutB,EAAQ,IAKjBC,GAAaN,GAAkBltB,GAC1BstB,IAAaE,GACjBh5B,EAAKoK,aAAc,QAAS4uB,IAMhC,MAAOx8B,OAGRy8B,YAAa,SAAUv1B,GACtB,GAAIm1B,GAAS74B,EAAMwL,EAAKstB,EAAUC,EAAOv4B,EAAGw4B,EAC3C/4B,EAAI,CAEL,IAAK5B,EAAOgD,WAAYqC,GACvB,MAAOlH,MAAKqD,KAAM,SAAUW,GAC3BnC,EAAQ7B,MAAOy8B,YAAav1B,EAAMlG,KAAMhB,KAAMgE,EAAGm4B,GAAUn8B,SAI7D,KAAM2D,UAAUf,OACf,MAAO5C,MAAK+R,KAAM,QAAS,GAG5B,IAAsB,gBAAV7K,IAAsBA,EAAQ,CACzCm1B,EAAUn1B,EAAM4F,MAAOsP,MAEvB,OAAU5Y,EAAOxD,KAAMyD,KAMtB,GALA64B,EAAWH,GAAU34B,GAGrBwL,EAAwB,IAAlBxL,EAAKgJ,UAAoB,IAAM0vB,GAAkBI,GAAa,IAEzD,CACVt4B,EAAI,CACJ,OAAUu4B,EAAQF,EAASr4B,KAG1B,MAAQgL,EAAIvO,QAAS,IAAM87B,EAAQ,QAClCvtB,EAAMA,EAAI3J,QAAS,IAAMk3B,EAAQ,IAAK,IAKxCC,GAAaN,GAAkBltB,GAC1BstB,IAAaE,GACjBh5B,EAAKoK,aAAc,QAAS4uB,IAMhC,MAAOx8B,OAGR08B,YAAa,SAAUx1B,EAAOy1B,GAC7B,GAAIh3B,SAAcuB,EAElB,OAAyB,iBAAby1B,IAAmC,WAATh3B,EAC9Bg3B,EAAW38B,KAAKo8B,SAAUl1B,GAAUlH,KAAKy8B,YAAav1B,GAGzDrF,EAAOgD,WAAYqC,GAChBlH,KAAKqD,KAAM,SAAUI,GAC3B5B,EAAQ7B,MAAO08B,YACdx1B,EAAMlG,KAAMhB,KAAMyD,EAAG04B,GAAUn8B,MAAQ28B,GACvCA,KAKI38B,KAAKqD,KAAM,WACjB,GAAI8M,GAAW1M,EAAGkX,EAAMiiB,CAExB,IAAc,WAATj3B,EAAoB,CAGxBlC,EAAI,EACJkX,EAAO9Y,EAAQ7B,MACf48B,EAAa11B,EAAM4F,MAAOsP,MAE1B,OAAUjM,EAAYysB,EAAYn5B,KAG5BkX,EAAKkiB,SAAU1sB,GACnBwK,EAAK8hB,YAAatsB,GAElBwK,EAAKyhB,SAAUjsB,OAKIlL,UAAViC,GAAgC,YAATvB,IAClCwK,EAAYgsB,GAAUn8B,MACjBmQ,GAGJkS,EAASJ,IAAKjiB,KAAM,gBAAiBmQ,GAOjCnQ,KAAK4N,cACT5N,KAAK4N,aAAc,QAClBuC,GAAajJ,KAAU,EACvB,GACAmb,EAASvf,IAAK9C,KAAM,kBAAqB,QAO9C68B,SAAU,SAAU/6B,GACnB,GAAIqO,GAAW3M,EACdC,EAAI,CAEL0M,GAAY,IAAMrO,EAAW,GAC7B,OAAU0B,EAAOxD,KAAMyD,KACtB,GAAuB,IAAlBD,EAAKgJ,WACP,IAAM0vB,GAAkBC,GAAU34B,IAAW,KAAM/C,QAAS0P,MAC7D,OAAO,CAIV,QAAO,IAOT,IAAI2sB,IAAU,KAEdj7B,GAAOG,GAAGoC,QACT4N,IAAK,SAAU9K,GACd,GAAIgc,GAAOhgB,EAAK2B,EACfrB,EAAOxD,KAAM,EAEd,EAAA,GAAM2D,UAAUf,OA4BhB,MAFAiC,GAAahD,EAAOgD,WAAYqC,GAEzBlH,KAAKqD,KAAM,SAAUI,GAC3B,GAAIuO,EAEmB,KAAlBhS,KAAKwM,WAKTwF,EADInN,EACEqC,EAAMlG,KAAMhB,KAAMyD,EAAG5B,EAAQ7B,MAAOgS,OAEpC9K,EAIK,MAAP8K,EACJA,EAAM,GAEoB,gBAARA,GAClBA,GAAO,GAEIjN,MAAMC,QAASgN,KAC1BA,EAAMnQ,EAAO0B,IAAKyO,EAAK,SAAU9K,GAChC,MAAgB,OAATA,EAAgB,GAAKA,EAAQ,MAItCgc,EAAQrhB,EAAOk7B,SAAU/8B,KAAK2F,OAAU9D,EAAOk7B,SAAU/8B,KAAK0N,SAAS9F,eAGjEsb,GAAY,OAASA,IAA+Cje,SAApCie,EAAMjB,IAAKjiB,KAAMgS,EAAK,WAC3DhS,KAAKkH,MAAQ8K,KAzDd,IAAKxO,EAIJ,MAHA0f,GAAQrhB,EAAOk7B,SAAUv5B,EAAKmC,OAC7B9D,EAAOk7B,SAAUv5B,EAAKkK,SAAS9F,eAE3Bsb,GACJ,OAASA,IACgCje,UAAvC/B,EAAMggB,EAAMpgB,IAAKU,EAAM,UAElBN,GAGRA,EAAMM,EAAK0D,MAGS,gBAARhE,GACJA,EAAImC,QAASy3B,GAAS,IAIhB,MAAP55B,EAAc,GAAKA,OA4C9BrB,EAAOuC,QACN24B,UACCrX,QACC5iB,IAAK,SAAUU,GAEd,GAAIwO,GAAMnQ,EAAO4O,KAAKsB,KAAMvO,EAAM,QAClC,OAAc,OAAPwO,EACNA,EAMAkqB,GAAkBr6B,EAAON,KAAMiC,MAGlC2E,QACCrF,IAAK,SAAUU,GACd,GAAI0D,GAAOwe,EAAQjiB,EAClBY,EAAUb,EAAKa,QACfkX,EAAQ/X,EAAKqS,cACboS,EAAoB,eAAdzkB,EAAKmC,KACXwf,EAAS8C,EAAM,QACfqL,EAAMrL,EAAM1M,EAAQ,EAAIlX,EAAQzB,MAUjC,KAPCa,EADI8X,EAAQ,EACR+X,EAGArL,EAAM1M,EAAQ,EAIX9X,EAAI6vB,EAAK7vB,IAKhB,GAJAiiB,EAASrhB,EAASZ,IAIXiiB,EAAO9P,UAAYnS,IAAM8X,KAG7BmK,EAAOtZ,YACLsZ,EAAOhkB,WAAW0K,WACnBsB,EAAUgY,EAAOhkB,WAAY,aAAiB,CAMjD,GAHAwF,EAAQrF,EAAQ6jB,GAAS1T,MAGpBiW,EACJ,MAAO/gB,EAIRie,GAAO3kB,KAAM0G,GAIf,MAAOie,IAGRlD,IAAK,SAAUze,EAAM0D,GACpB,GAAI81B,GAAWtX,EACdrhB,EAAUb,EAAKa,QACf8gB,EAAStjB,EAAO2E,UAAWU,GAC3BzD,EAAIY,EAAQzB,MAEb,OAAQa,IACPiiB,EAASrhB,EAASZ,IAIbiiB,EAAO9P,SACX/T,EAAO6E,QAAS7E,EAAOk7B,SAASrX,OAAO5iB,IAAK4iB,GAAUP,SAEtD6X,GAAY,EAUd,OAHMA,KACLx5B,EAAKqS,kBAECsP,OAOXtjB,EAAOwB,MAAQ,QAAS,YAAc,WACrCxB,EAAOk7B,SAAU/8B,OAChBiiB,IAAK,SAAUze,EAAM0D,GACpB,GAAKnC,MAAMC,QAASkC,GACnB,MAAS1D,GAAKmS,QAAU9T,EAAO6E,QAAS7E,EAAQ2B,GAAOwO,MAAO9K,QAI3DjG,EAAQ+5B,UACbn5B,EAAOk7B,SAAU/8B,MAAO8C,IAAM,SAAUU,GACvC,MAAwC,QAAjCA,EAAKmK,aAAc,SAAqB,KAAOnK,EAAK0D,SAW9D,IAAI+1B,IAAc,iCAElBp7B,GAAOuC,OAAQvC,EAAOsmB,OAErB6C,QAAS,SAAU7C,EAAOjG,EAAM1e,EAAM05B,GAErC,GAAIz5B,GAAGuL,EAAK3H,EAAK81B,EAAYC,EAAQtU,EAAQzJ,EAC5Cge,GAAc75B,GAAQ5D,GACtB+F,EAAO/E,EAAOI,KAAMmnB,EAAO,QAAWA,EAAMxiB,KAAOwiB,EACnDQ,EAAa/nB,EAAOI,KAAMmnB,EAAO,aAAgBA,EAAMgB,UAAUxhB,MAAO,OAKzE,IAHAqH,EAAM3H,EAAM7D,EAAOA,GAAQ5D,EAGJ,IAAlB4D,EAAKgJ,UAAoC,IAAlBhJ,EAAKgJ,WAK5BywB,GAAYxvB,KAAM9H,EAAO9D,EAAOsmB,MAAMY,aAItCpjB,EAAKlF,QAAS,UAGlBkoB,EAAahjB,EAAKgC,MAAO,KACzBhC,EAAOgjB,EAAWpa,QAClBoa,EAAWzkB,QAEZk5B,EAASz3B,EAAKlF,QAAS,KAAQ,GAAK,KAAOkF,EAG3CwiB,EAAQA,EAAOtmB,EAAOqD,SACrBijB,EACA,GAAItmB,GAAO6oB,MAAO/kB,EAAuB,gBAAVwiB,IAAsBA,GAGtDA,EAAMmV,UAAYJ,EAAe,EAAI,EACrC/U,EAAMgB,UAAYR,EAAW7a,KAAM,KACnCqa,EAAM+B,WAAa/B,EAAMgB,UACxB,GAAInf,QAAQ,UAAY2e,EAAW7a,KAAM,iBAAoB,WAC7D,KAGDqa,EAAM1U,OAASxO,OACTkjB,EAAMxjB,SACXwjB,EAAMxjB,OAASnB,GAIhB0e,EAAe,MAARA,GACJiG,GACFtmB,EAAO2E,UAAW0b,GAAQiG,IAG3B9I,EAAUxd,EAAOsmB,MAAM9I,QAAS1Z,OAC1Bu3B,IAAgB7d,EAAQ2L,SAAW3L,EAAQ2L,QAAQtnB,MAAOF,EAAM0e,MAAW,GAAjF,CAMA,IAAMgb,IAAiB7d,EAAQ0L,WAAalpB,EAAO+D,SAAUpC,GAAS,CAMrE,IAJA25B,EAAa9d,EAAQ4J,cAAgBtjB,EAC/Bs3B,GAAYxvB,KAAM0vB,EAAax3B,KACpCqJ,EAAMA,EAAItN,YAEHsN,EAAKA,EAAMA,EAAItN,WACtB27B,EAAU78B,KAAMwO,GAChB3H,EAAM2H,CAIF3H,MAAU7D,EAAK0J,eAAiBtN,IACpCy9B,EAAU78B,KAAM6G,EAAI0I,aAAe1I,EAAIk2B,cAAgBx9B,GAKzD0D,EAAI,CACJ,QAAUuL,EAAMquB,EAAW55B,QAAY0kB,EAAM4B,uBAE5C5B,EAAMxiB,KAAOlC,EAAI,EAChB05B,EACA9d,EAAQ6J,UAAYvjB,EAGrBmjB,GAAWzG,EAASvf,IAAKkM,EAAK,eAAoBmZ,EAAMxiB,OACvD0c,EAASvf,IAAKkM,EAAK,UACf8Z,GACJA,EAAOplB,MAAOsL,EAAKkT,GAIpB4G,EAASsU,GAAUpuB,EAAKouB,GACnBtU,GAAUA,EAAOplB,OAASie,EAAY3S,KAC1CmZ,EAAM1U,OAASqV,EAAOplB,MAAOsL,EAAKkT,GAC7BiG,EAAM1U,UAAW,GACrB0U,EAAMgC,iBAoCT,OAhCAhC,GAAMxiB,KAAOA,EAGPu3B,GAAiB/U,EAAMmD,sBAEpBjM,EAAQ0G,UACf1G,EAAQ0G,SAASriB,MAAO25B,EAAU9zB,MAAO2Y,MAAW,IACpDP,EAAYne,IAIP45B,GAAUv7B,EAAOgD,WAAYrB,EAAMmC,MAAa9D,EAAO+D,SAAUpC,KAGrE6D,EAAM7D,EAAM45B,GAEP/1B,IACJ7D,EAAM45B,GAAW,MAIlBv7B,EAAOsmB,MAAMY,UAAYpjB,EACzBnC,EAAMmC,KACN9D,EAAOsmB,MAAMY,UAAY9jB,OAEpBoC,IACJ7D,EAAM45B,GAAW/1B,IAMd8gB,EAAM1U,SAKd+pB,SAAU,SAAU73B,EAAMnC,EAAM2kB,GAC/B,GAAI1b,GAAI5K,EAAOuC,OACd,GAAIvC,GAAO6oB,MACXvC,GAECxiB,KAAMA,EACN+lB,aAAa,GAIf7pB,GAAOsmB,MAAM6C,QAASve,EAAG,KAAMjJ,MAKjC3B,EAAOG,GAAGoC,QAET4mB,QAAS,SAAUrlB,EAAMuc,GACxB,MAAOliB,MAAKqD,KAAM,WACjBxB,EAAOsmB,MAAM6C,QAASrlB,EAAMuc,EAAMliB,SAGpCy9B,eAAgB,SAAU93B,EAAMuc,GAC/B,GAAI1e,GAAOxD,KAAM,EACjB,IAAKwD,EACJ,MAAO3B,GAAOsmB,MAAM6C,QAASrlB,EAAMuc,EAAM1e,GAAM,MAMlD3B,EAAOwB,KAAM,wLAEgDsE,MAAO,KACnE,SAAUlE,EAAGa,GAGbzC,EAAOG,GAAIsC,GAAS,SAAU4d,EAAMlgB,GACnC,MAAO2B,WAAUf,OAAS,EACzB5C,KAAK+nB,GAAIzjB,EAAM,KAAM4d,EAAMlgB,GAC3BhC,KAAKgrB,QAAS1mB,MAIjBzC,EAAOG,GAAGoC,QACTs5B,MAAO,SAAUC,EAAQC,GACxB,MAAO59B,MAAKwtB,WAAYmQ,GAASlQ,WAAYmQ,GAASD,MAOxD18B,EAAQ48B,QAAU,aAAe99B,GAW3BkB,EAAQ48B,SACbh8B,EAAOwB,MAAQgS,MAAO,UAAW4V,KAAM,YAAc,SAAU2C,EAAMjE,GAGpE,GAAI9a,GAAU,SAAUsZ,GACvBtmB,EAAOsmB,MAAMqV,SAAU7T,EAAKxB,EAAMxjB,OAAQ9C,EAAOsmB,MAAMwB,IAAKxB,IAG7DtmB,GAAOsmB,MAAM9I,QAASsK,IACrBN,MAAO,WACN,GAAIjoB,GAAMpB,KAAKkN,eAAiBlN,KAC/B89B,EAAWzb,EAASf,OAAQlgB,EAAKuoB,EAE5BmU,IACL18B,EAAI6O,iBAAkB2d,EAAM/e,GAAS,GAEtCwT,EAASf,OAAQlgB,EAAKuoB,GAAOmU,GAAY,GAAM,IAEhDtU,SAAU,WACT,GAAIpoB,GAAMpB,KAAKkN,eAAiBlN,KAC/B89B,EAAWzb,EAASf,OAAQlgB,EAAKuoB,GAAQ,CAEpCmU,GAKLzb,EAASf,OAAQlgB,EAAKuoB,EAAKmU,IAJ3B18B,EAAI+f,oBAAqByM,EAAM/e,GAAS,GACxCwT,EAASnF,OAAQ9b,EAAKuoB,OAS3B,IAAIxU,IAAWpV,EAAOoV,SAElB4oB,GAAQl8B,EAAO0F,MAEfy2B,GAAS,IAKbn8B,GAAOo8B,SAAW,SAAU/b,GAC3B,GAAIpO,EACJ,KAAMoO,GAAwB,gBAATA,GACpB,MAAO,KAKR,KACCpO,GAAM,GAAM/T,GAAOm+B,WAAcC,gBAAiBjc,EAAM,YACvD,MAAQzV,GACTqH,EAAM7O,OAMP,MAHM6O,KAAOA,EAAIxG,qBAAsB,eAAgB1K,QACtDf,EAAO0D,MAAO,gBAAkB2c,GAE1BpO,EAIR,IACCsqB,IAAW,QACXC,GAAQ,SACRC,GAAkB,wCAClBC,GAAe,oCAEhB,SAASC,IAAanJ,EAAQ3vB,EAAK+4B,EAAahjB,GAC/C,GAAInX,EAEJ,IAAKS,MAAMC,QAASU,GAGnB7D,EAAOwB,KAAMqC,EAAK,SAAUjC,EAAG8Z,GACzBkhB,GAAeL,GAAS3wB,KAAM4nB,GAGlC5Z,EAAK4Z,EAAQ9X,GAKbihB,GACCnJ,EAAS,KAAqB,gBAAN9X,IAAuB,MAALA,EAAY9Z,EAAI,IAAO,IACjE8Z,EACAkhB,EACAhjB,SAKG,IAAMgjB,GAAsC,WAAvB58B,EAAO8D,KAAMD,GAUxC+V,EAAK4Z,EAAQ3vB,OAPb,KAAMpB,IAAQoB,GACb84B,GAAanJ,EAAS,IAAM/wB,EAAO,IAAKoB,EAAKpB,GAAQm6B,EAAahjB,GAYrE5Z,EAAO68B,MAAQ,SAAUr1B,EAAGo1B,GAC3B,GAAIpJ,GACHsJ,KACAljB,EAAM,SAAUpN,EAAKuwB,GAGpB,GAAI13B,GAAQrF,EAAOgD,WAAY+5B,GAC9BA,IACAA,CAEDD,GAAGA,EAAE/7B,QAAWi8B,mBAAoBxwB,GAAQ,IAC3CwwB,mBAA6B,MAAT33B,EAAgB,GAAKA,GAI5C,IAAKnC,MAAMC,QAASqE,IAASA,EAAE3G,SAAWb,EAAOiD,cAAeuE,GAG/DxH,EAAOwB,KAAMgG,EAAG,WACfoS,EAAKzb,KAAKsE,KAAMtE,KAAKkH,aAOtB,KAAMmuB,IAAUhsB,GACfm1B,GAAanJ,EAAQhsB,EAAGgsB,GAAUoJ,EAAahjB,EAKjD,OAAOkjB,GAAE7wB,KAAM,MAGhBjM,EAAOG,GAAGoC,QACT06B,UAAW,WACV,MAAOj9B,GAAO68B,MAAO1+B,KAAK++B,mBAE3BA,eAAgB,WACf,MAAO/+B,MAAKuD,IAAK,WAGhB,GAAIuO,GAAWjQ,EAAOsgB,KAAMniB,KAAM,WAClC,OAAO8R,GAAWjQ,EAAO2E,UAAWsL,GAAa9R,OAEjDuQ,OAAQ,WACR,GAAI5K,GAAO3F,KAAK2F,IAGhB,OAAO3F,MAAKsE,OAASzC,EAAQ7B,MAAOma,GAAI,cACvCokB,GAAa9wB,KAAMzN,KAAK0N,YAAe4wB,GAAgB7wB,KAAM9H,KAC3D3F,KAAK2V,UAAY2P,GAAe7X,KAAM9H,MAEzCpC,IAAK,SAAUE,EAAGD,GAClB,GAAIwO,GAAMnQ,EAAQ7B,MAAOgS,KAEzB,OAAY,OAAPA,EACG,KAGHjN,MAAMC,QAASgN,GACZnQ,EAAO0B,IAAKyO,EAAK,SAAUA,GACjC,OAAS1N,KAAMd,EAAKc,KAAM4C,MAAO8K,EAAI3M,QAASg5B,GAAO,YAI9C/5B,KAAMd,EAAKc,KAAM4C,MAAO8K,EAAI3M,QAASg5B,GAAO,WAClDv7B,QAKN,IACCk8B,IAAM,OACNC,GAAQ,OACRC,GAAa,gBACbC,GAAW,6BAGXC,GAAiB,4DACjBC,GAAa,iBACbC,GAAY,QAWZ1G,MAOA2G,MAGAC,GAAW,KAAKj/B,OAAQ,KAGxBk/B,GAAe7/B,EAAS0B,cAAe,IACvCm+B,IAAajqB,KAAOL,GAASK,IAG9B,SAASkqB,IAA6BC,GAGrC,MAAO,UAAUC,EAAoBzhB,GAED,gBAAvByhB,KACXzhB,EAAOyhB,EACPA,EAAqB,IAGtB,IAAIC,GACHp8B,EAAI,EACJq8B,EAAYF,EAAmBh4B,cAAckF,MAAOsP,MAErD,IAAKva,EAAOgD,WAAYsZ,GAGvB,MAAU0hB,EAAWC,EAAWr8B,KAGR,MAAlBo8B,EAAU,IACdA,EAAWA,EAASv/B,MAAO,IAAO,KAChCq/B,EAAWE,GAAaF,EAAWE,QAAmBjuB,QAASuM,KAI/DwhB,EAAWE,GAAaF,EAAWE,QAAmBr/B,KAAM2d,IAQnE,QAAS4hB,IAA+BJ,EAAWt7B,EAAS40B,EAAiB+G,GAE5E,GAAIC,MACHC,EAAqBP,IAAcJ,EAEpC,SAASY,GAASN,GACjB,GAAIjqB,EAcJ,OAbAqqB,GAAWJ,IAAa,EACxBh+B,EAAOwB,KAAMs8B,EAAWE,OAAkB,SAAUv0B,EAAG80B,GACtD,GAAIC,GAAsBD,EAAoB/7B,EAAS40B,EAAiB+G,EACxE,OAAoC,gBAAxBK,IACVH,GAAqBD,EAAWI,GAKtBH,IACDtqB,EAAWyqB,GADf,QAHNh8B,EAAQy7B,UAAUluB,QAASyuB,GAC3BF,EAASE,IACF,KAKFzqB,EAGR,MAAOuqB,GAAS97B,EAAQy7B,UAAW,MAAUG,EAAW,MAASE,EAAS,KAM3E,QAASG,IAAY37B,EAAQJ,GAC5B,GAAI8J,GAAKzJ,EACR27B,EAAc1+B,EAAO2+B,aAAaD,eAEnC,KAAMlyB,IAAO9J,GACQU,SAAfV,EAAK8J,MACPkyB,EAAalyB,GAAQ1J,EAAWC,IAAUA,OAAiByJ,GAAQ9J,EAAK8J,GAO5E,OAJKzJ,IACJ/C,EAAOuC,QAAQ,EAAMO,EAAQC,GAGvBD,EAOR,QAAS87B,IAAqB9B,EAAGqB,EAAOU,GAEvC,GAAIC,GAAIh7B,EAAMi7B,EAAeC,EAC5B3lB,EAAWyjB,EAAEzjB,SACb4kB,EAAYnB,EAAEmB,SAGf,OAA2B,MAAnBA,EAAW,GAClBA,EAAUvxB,QACEtJ,SAAP07B,IACJA,EAAKhC,EAAEmC,UAAYd,EAAMe,kBAAmB,gBAK9C,IAAKJ,EACJ,IAAMh7B,IAAQuV,GACb,GAAKA,EAAUvV,IAAUuV,EAAUvV,GAAO8H,KAAMkzB,GAAO,CACtDb,EAAUluB,QAASjM,EACnB,OAMH,GAAKm6B,EAAW,IAAOY,GACtBE,EAAgBd,EAAW,OACrB,CAGN,IAAMn6B,IAAQ+6B,GAAY,CACzB,IAAMZ,EAAW,IAAOnB,EAAEqC,WAAYr7B,EAAO,IAAMm6B,EAAW,IAAQ,CACrEc,EAAgBj7B,CAChB,OAEKk7B,IACLA,EAAgBl7B,GAKlBi7B,EAAgBA,GAAiBC,EAMlC,GAAKD,EAIJ,MAHKA,KAAkBd,EAAW,IACjCA,EAAUluB,QAASgvB,GAEbF,EAAWE,GAOpB,QAASK,IAAatC,EAAGuC,EAAUlB,EAAOmB,GACzC,GAAIC,GAAOC,EAASC,EAAMj6B,EAAK8T,EAC9B6lB,KAGAlB,EAAYnB,EAAEmB,UAAUx/B,OAGzB,IAAKw/B,EAAW,GACf,IAAMwB,IAAQ3C,GAAEqC,WACfA,EAAYM,EAAK15B,eAAkB+2B,EAAEqC,WAAYM,EAInDD,GAAUvB,EAAUvxB,OAGpB,OAAQ8yB,EAcP,GAZK1C,EAAE4C,eAAgBF,KACtBrB,EAAOrB,EAAE4C,eAAgBF,IAAcH,IAIlC/lB,GAAQgmB,GAAaxC,EAAE6C,aAC5BN,EAAWvC,EAAE6C,WAAYN,EAAUvC,EAAEkB,WAGtC1kB,EAAOkmB,EACPA,EAAUvB,EAAUvxB,QAKnB,GAAiB,MAAZ8yB,EAEJA,EAAUlmB,MAGJ,IAAc,MAATA,GAAgBA,IAASkmB,EAAU,CAM9C,GAHAC,EAAON,EAAY7lB,EAAO,IAAMkmB,IAAaL,EAAY,KAAOK,IAG1DC,EACL,IAAMF,IAASJ,GAId,GADA35B,EAAM+5B,EAAMz5B,MAAO,KACdN,EAAK,KAAQg6B,IAGjBC,EAAON,EAAY7lB,EAAO,IAAM9T,EAAK,KACpC25B,EAAY,KAAO35B,EAAK,KACb,CAGNi6B,KAAS,EACbA,EAAON,EAAYI,GAGRJ,EAAYI,MAAY,IACnCC,EAAUh6B,EAAK,GACfy4B,EAAUluB,QAASvK,EAAK,IAEzB,OAOJ,GAAKi6B,KAAS,EAGb,GAAKA,GAAQ3C,EAAAA,UACZuC,EAAWI,EAAMJ,OAEjB,KACCA,EAAWI,EAAMJ,GAChB,MAAQz0B,GACT,OACC4R,MAAO,cACP9Y,MAAO+7B,EAAO70B,EAAI,sBAAwB0O,EAAO,OAASkmB,IASjE,OAAShjB,MAAO,UAAW6D,KAAMgf,GAGlCr/B,EAAOuC,QAGNq9B,OAAQ,EAGRC,gBACAC,QAEAnB,cACCoB,IAAKzsB,GAASK,KACd7P,KAAM,MACNk8B,QAASzC,GAAe3xB,KAAM0H,GAAS2sB,UACvCtiC,QAAQ,EACRuiC,aAAa,EACbC,OAAO,EACPC,YAAa,mDAcbC,SACC7I,IAAKmG,GACLj+B,KAAM,aACN0tB,KAAM,YACNnb,IAAK,4BACLquB,KAAM,qCAGPjnB,UACCpH,IAAK,UACLmb,KAAM,SACNkT,KAAM,YAGPZ,gBACCztB,IAAK,cACLvS,KAAM,eACN4gC,KAAM,gBAKPnB,YAGCoB,SAAU12B,OAGV22B,aAAa,EAGbC,YAAa5f,KAAKC,MAGlB4f,WAAY1gC,EAAOo8B,UAOpBsC,aACCqB,KAAK,EACL7/B,SAAS,IAOXygC,UAAW,SAAU79B,EAAQ89B,GAC5B,MAAOA,GAGNnC,GAAYA,GAAY37B,EAAQ9C,EAAO2+B,cAAgBiC,GAGvDnC,GAAYz+B,EAAO2+B,aAAc77B,IAGnC+9B,cAAehD,GAA6B9G,IAC5C+J,cAAejD,GAA6BH,IAG5CqD,KAAM,SAAUhB,EAAKv9B,GAGA,gBAARu9B,KACXv9B,EAAUu9B,EACVA,EAAM38B,QAIPZ,EAAUA,KAEV,IAAIw+B,GAGHC,EAGAC,EACAC,EAGAC,EAGAC,EAGAhiB,EAGAiiB,EAGA1/B,EAGA2/B,EAGAzE,EAAI98B,EAAO2gC,aAAen+B,GAG1Bg/B,EAAkB1E,EAAE58B,SAAW48B,EAG/B2E,EAAqB3E,EAAE58B,UACpBshC,EAAgB72B,UAAY62B,EAAgB3gC,QAC7Cb,EAAQwhC,GACRxhC,EAAOsmB,MAGT5J,EAAW1c,EAAOqc,WAClBqlB,EAAmB1hC,EAAO2a,UAAW,eAGrCgnB,EAAa7E,EAAE6E,eAGfC,KACAC,KAGAC,EAAW,WAGX3D,GACC5e,WAAY,EAGZ2f,kBAAmB,SAAU1yB,GAC5B,GAAIvB,EACJ,IAAKoU,EAAY,CAChB,IAAM8hB,EAAkB,CACvBA,IACA,OAAUl2B,EAAQqyB,GAAShyB,KAAM41B,GAChCC,EAAiBl2B,EAAO,GAAIlF,eAAkBkF,EAAO,GAGvDA,EAAQk2B,EAAiB30B,EAAIzG,eAE9B,MAAgB,OAATkF,EAAgB,KAAOA,GAI/B82B,sBAAuB,WACtB,MAAO1iB,GAAY6hB,EAAwB,MAI5Cc,iBAAkB,SAAUv/B,EAAM4C,GAMjC,MALkB,OAAbga,IACJ5c,EAAOo/B,EAAqBp/B,EAAKsD,eAChC87B,EAAqBp/B,EAAKsD,gBAAmBtD,EAC9Cm/B,EAAgBn/B,GAAS4C,GAEnBlH,MAIR8jC,iBAAkB,SAAUn+B,GAI3B,MAHkB,OAAbub,IACJyd,EAAEmC,SAAWn7B,GAEP3F,MAIRwjC,WAAY,SAAUjgC,GACrB,GAAIpC,EACJ,IAAKoC,EACJ,GAAK2d,EAGJ8e,EAAM1hB,OAAQ/a,EAAKy8B,EAAM+D,aAIzB,KAAM5iC,IAAQoC,GACbigC,EAAYriC,IAAWqiC,EAAYriC,GAAQoC,EAAKpC,GAInD,OAAOnB,OAIRgkC,MAAO,SAAUC,GAChB,GAAIC,GAAYD,GAAcN,CAK9B,OAJKd,IACJA,EAAUmB,MAAOE,GAElBn7B,EAAM,EAAGm7B,GACFlkC,MAoBV,IAfAue,EAASR,QAASiiB,GAKlBrB,EAAEiD,MAAUA,GAAOjD,EAAEiD,KAAOzsB,GAASK,MAAS,IAC5CnQ,QAASi6B,GAAWnqB,GAAS2sB,SAAW,MAG1CnD,EAAEh5B,KAAOtB,EAAQyZ,QAAUzZ,EAAQsB,MAAQg5B,EAAE7gB,QAAU6gB,EAAEh5B,KAGzDg5B,EAAEmB,WAAcnB,EAAEkB,UAAY,KAAMj4B,cAAckF,MAAOsP,KAAqB,IAGxD,MAAjBuiB,EAAEwF,YAAsB,CAC5BjB,EAAYtjC,EAAS0B,cAAe,IAKpC,KACC4hC,EAAU1tB,KAAOmpB,EAAEiD,IAInBsB,EAAU1tB,KAAO0tB,EAAU1tB,KAC3BmpB,EAAEwF,YAAc1E,GAAaqC,SAAW,KAAOrC,GAAa2E,MAC3DlB,EAAUpB,SAAW,KAAOoB,EAAUkB,KACtC,MAAQ33B,GAITkyB,EAAEwF,aAAc,GAalB,GARKxF,EAAEzc,MAAQyc,EAAEoD,aAAiC,gBAAXpD,GAAEzc,OACxCyc,EAAEzc,KAAOrgB,EAAO68B,MAAOC,EAAEzc,KAAMyc,EAAEF,cAIlCsB,GAA+BnH,GAAY+F,EAAGt6B,EAAS27B,GAGlD9e,EACJ,MAAO8e,EAKRmD,GAActhC,EAAOsmB,OAASwW,EAAEn/B,OAG3B2jC,GAAmC,IAApBthC,EAAO4/B,UAC1B5/B,EAAOsmB,MAAM6C,QAAS,aAIvB2T,EAAEh5B,KAAOg5B,EAAEh5B,KAAKnD,cAGhBm8B,EAAE0F,YAAchF,GAAW5xB,KAAMkxB,EAAEh5B,MAKnCm9B,EAAWnE,EAAEiD,IAAIv8B,QAAS45B,GAAO,IAG3BN,EAAE0F,WAuBI1F,EAAEzc,MAAQyc,EAAEoD,aACoD,KAAzEpD,EAAEsD,aAAe,IAAKxhC,QAAS,uCACjCk+B,EAAEzc,KAAOyc,EAAEzc,KAAK7c,QAAS25B,GAAK,OAtB9BoE,EAAWzE,EAAEiD,IAAIthC,MAAOwiC,EAASlgC,QAG5B+7B,EAAEzc,OACN4gB,IAAc9E,GAAOvwB,KAAMq1B,GAAa,IAAM,KAAQnE,EAAEzc,WAGjDyc,GAAEzc,MAILyc,EAAEvwB,SAAU,IAChB00B,EAAWA,EAASz9B,QAAS65B,GAAY,MACzCkE,GAAapF,GAAOvwB,KAAMq1B,GAAa,IAAM,KAAQ,KAAS/E,MAAYqF,GAI3EzE,EAAEiD,IAAMkB,EAAWM,GASfzE,EAAE2F,aACDziC,EAAO6/B,aAAcoB,IACzB9C,EAAM6D,iBAAkB,oBAAqBhiC,EAAO6/B,aAAcoB,IAE9DjhC,EAAO8/B,KAAMmB,IACjB9C,EAAM6D,iBAAkB,gBAAiBhiC,EAAO8/B,KAAMmB,MAKnDnE,EAAEzc,MAAQyc,EAAE0F,YAAc1F,EAAEsD,eAAgB,GAAS59B,EAAQ49B,cACjEjC,EAAM6D,iBAAkB,eAAgBlF,EAAEsD,aAI3CjC,EAAM6D,iBACL,SACAlF,EAAEmB,UAAW,IAAOnB,EAAEuD,QAASvD,EAAEmB,UAAW,IAC3CnB,EAAEuD,QAASvD,EAAEmB,UAAW,KACA,MAArBnB,EAAEmB,UAAW,GAAc,KAAON,GAAW,WAAa,IAC7Db,EAAEuD,QAAS,KAIb,KAAMz+B,IAAKk7B,GAAE4F,QACZvE,EAAM6D,iBAAkBpgC,EAAGk7B,EAAE4F,QAAS9gC,GAIvC,IAAKk7B,EAAE6F,aACJ7F,EAAE6F,WAAWxjC,KAAMqiC,EAAiBrD,EAAOrB,MAAQ,GAASzd,GAG9D,MAAO8e,GAAMgE,OAed,IAXAL,EAAW,QAGXJ,EAAiB9nB,IAAKkjB,EAAExF,UACxB6G,EAAMj3B,KAAM41B,EAAE8F,SACdzE,EAAMhiB,KAAM2gB,EAAEp5B,OAGds9B,EAAY9C,GAA+BR,GAAYZ,EAAGt6B,EAAS27B,GAK5D,CASN,GARAA,EAAM5e,WAAa,EAGd+hB,GACJG,EAAmBtY,QAAS,YAAcgV,EAAOrB,IAI7Czd,EACJ,MAAO8e,EAIHrB,GAAEqD,OAASrD,EAAE7D,QAAU,IAC3BmI,EAAeljC,EAAOigB,WAAY,WACjCggB,EAAMgE,MAAO,YACXrF,EAAE7D,SAGN,KACC5Z,GAAY,EACZ2hB,EAAU6B,KAAMjB,EAAgB16B,GAC/B,MAAQ0D,GAGT,GAAKyU,EACJ,KAAMzU,EAIP1D,MAAU0D,QAhCX1D,MAAU,eAqCX,SAASA,GAAMg7B,EAAQY,EAAkBjE,EAAW6D,GACnD,GAAIpD,GAAWsD,EAASl/B,EAAO27B,EAAU0D,EACxCX,EAAaU,CAGTzjB,KAILA,GAAY,EAGP+hB,GACJljC,EAAOg7B,aAAckI,GAKtBJ,EAAY59B,OAGZ89B,EAAwBwB,GAAW,GAGnCvE,EAAM5e,WAAa2iB,EAAS,EAAI,EAAI,EAGpC5C,EAAY4C,GAAU,KAAOA,EAAS,KAAkB,MAAXA,EAGxCrD,IACJQ,EAAWT,GAAqB9B,EAAGqB,EAAOU,IAI3CQ,EAAWD,GAAatC,EAAGuC,EAAUlB,EAAOmB,GAGvCA,GAGCxC,EAAE2F,aACNM,EAAW5E,EAAMe,kBAAmB,iBAC/B6D,IACJ/iC,EAAO6/B,aAAcoB,GAAa8B,GAEnCA,EAAW5E,EAAMe,kBAAmB,QAC/B6D,IACJ/iC,EAAO8/B,KAAMmB,GAAa8B,IAKZ,MAAXb,GAA6B,SAAXpF,EAAEh5B,KACxBs+B,EAAa,YAGS,MAAXF,EACXE,EAAa,eAIbA,EAAa/C,EAAS7iB,MACtBomB,EAAUvD,EAAShf,KACnB3c,EAAQ27B,EAAS37B,MACjB47B,GAAa57B,KAKdA,EAAQ0+B,GACHF,GAAWE,IACfA,EAAa,QACRF,EAAS,IACbA,EAAS,KAMZ/D,EAAM+D,OAASA,EACf/D,EAAMiE,YAAeU,GAAoBV,GAAe,GAGnD9C,EACJ5iB,EAASmB,YAAa2jB,GAAmBoB,EAASR,EAAYjE,IAE9DzhB,EAASuB,WAAYujB,GAAmBrD,EAAOiE,EAAY1+B,IAI5Dy6B,EAAMwD,WAAYA,GAClBA,EAAav+B,OAERk+B,GACJG,EAAmBtY,QAASmW,EAAY,cAAgB,aACrDnB,EAAOrB,EAAGwC,EAAYsD,EAAUl/B,IAIpCg+B,EAAiBlmB,SAAUgmB,GAAmBrD,EAAOiE,IAEhDd,IACJG,EAAmBtY,QAAS,gBAAkBgV,EAAOrB,MAG3C98B,EAAO4/B,QAChB5/B,EAAOsmB,MAAM6C,QAAS,cAKzB,MAAOgV,IAGR6E,QAAS,SAAUjD,EAAK1f,EAAM5e,GAC7B,MAAOzB,GAAOiB,IAAK8+B,EAAK1f,EAAM5e,EAAU,SAGzCwhC,UAAW,SAAUlD,EAAKt+B,GACzB,MAAOzB,GAAOiB,IAAK8+B,EAAK38B,OAAW3B,EAAU,aAI/CzB,EAAOwB,MAAQ,MAAO,QAAU,SAAUI,EAAGqa,GAC5Cjc,EAAQic,GAAW,SAAU8jB,EAAK1f,EAAM5e,EAAUqC,GAUjD,MAPK9D,GAAOgD,WAAYqd,KACvBvc,EAAOA,GAAQrC,EACfA,EAAW4e,EACXA,EAAOjd,QAIDpD,EAAO+gC,KAAM/gC,EAAOuC,QAC1Bw9B,IAAKA,EACLj8B,KAAMmY,EACN+hB,SAAUl6B,EACVuc,KAAMA,EACNuiB,QAASnhC,GACPzB,EAAOiD,cAAe88B,IAASA,OAKpC//B,EAAOqtB,SAAW,SAAU0S,GAC3B,MAAO//B,GAAO+gC,MACbhB,IAAKA,EAGLj8B,KAAM,MACNk6B,SAAU,SACVzxB,OAAO,EACP4zB,OAAO,EACPxiC,QAAQ,EACRulC,UAAU,KAKZljC,EAAOG,GAAGoC,QACT4gC,QAAS,SAAU/V,GAClB,GAAInI,EAyBJ,OAvBK9mB,MAAM,KACL6B,EAAOgD,WAAYoqB,KACvBA,EAAOA,EAAKjuB,KAAMhB,KAAM,KAIzB8mB,EAAOjlB,EAAQotB,EAAMjvB,KAAM,GAAIkN,eAAgBrJ,GAAI,GAAIa,OAAO,GAEzD1E,KAAM,GAAI0B,YACdolB,EAAK+I,aAAc7vB,KAAM,IAG1B8mB,EAAKvjB,IAAK,WACT,GAAIC,GAAOxD,IAEX,OAAQwD,EAAKyhC,kBACZzhC,EAAOA,EAAKyhC,iBAGb,OAAOzhC,KACJmsB,OAAQ3vB,OAGNA,MAGRklC,UAAW,SAAUjW,GACpB,MAAKptB,GAAOgD,WAAYoqB,GAChBjvB,KAAKqD,KAAM,SAAUI,GAC3B5B,EAAQ7B,MAAOklC,UAAWjW,EAAKjuB,KAAMhB,KAAMyD,MAItCzD,KAAKqD,KAAM,WACjB,GAAIsX,GAAO9Y,EAAQ7B,MAClBkb,EAAWP,EAAKO,UAEZA,GAAStY,OACbsY,EAAS8pB,QAAS/V,GAGlBtU,EAAKgV,OAAQV,MAKhBnI,KAAM,SAAUmI,GACf,GAAIpqB,GAAahD,EAAOgD,WAAYoqB,EAEpC,OAAOjvB,MAAKqD,KAAM,SAAUI,GAC3B5B,EAAQ7B,MAAOglC,QAASngC,EAAaoqB,EAAKjuB,KAAMhB,KAAMyD,GAAMwrB,MAI9DkW,OAAQ,SAAUrjC,GAIjB,MAHA9B,MAAKmU,OAAQrS,GAAW6S,IAAK,QAAStR,KAAM,WAC3CxB,EAAQ7B,MAAOgwB,YAAahwB,KAAKuM,cAE3BvM,QAKT6B,EAAOgQ,KAAK/H,QAAQktB,OAAS,SAAUxzB,GACtC,OAAQ3B,EAAOgQ,KAAK/H,QAAQs7B,QAAS5hC,IAEtC3B,EAAOgQ,KAAK/H,QAAQs7B,QAAU,SAAU5hC,GACvC,SAAWA,EAAK6hC,aAAe7hC,EAAK8hC,cAAgB9hC,EAAKuxB,iBAAiBnyB,SAM3Ef,EAAO2+B,aAAa+E,IAAM,WACzB,IACC,MAAO,IAAIxlC,GAAOylC,eACjB,MAAQ/4B,KAGX,IAAIg5B,KAGFC,EAAG,IAIHC,KAAM,KAEPC,GAAe/jC,EAAO2+B,aAAa+E,KAEpCtkC,GAAQ4kC,OAASD,IAAkB,mBAAqBA,IACxD3kC,EAAQ2hC,KAAOgD,KAAiBA,GAEhC/jC,EAAO8gC,cAAe,SAAUt+B,GAC/B,GAAIf,GAAUwiC,CAGd,IAAK7kC,EAAQ4kC,MAAQD,KAAiBvhC,EAAQ8/B,YAC7C,OACCO,KAAM,SAAUH,EAASpL,GACxB,GAAI11B,GACH8hC,EAAMlhC,EAAQkhC,KAWf,IATAA,EAAIQ,KACH1hC,EAAQsB,KACRtB,EAAQu9B,IACRv9B,EAAQ29B,MACR39B,EAAQ2hC,SACR3hC,EAAQmS,UAIJnS,EAAQ4hC,UACZ,IAAMxiC,IAAKY,GAAQ4hC,UAClBV,EAAK9hC,GAAMY,EAAQ4hC,UAAWxiC,EAK3BY,GAAQy8B,UAAYyE,EAAIzB,kBAC5ByB,EAAIzB,iBAAkBz/B,EAAQy8B,UAQzBz8B,EAAQ8/B,aAAgBI,EAAS,sBACtCA,EAAS,oBAAuB,iBAIjC,KAAM9gC,IAAK8gC,GACVgB,EAAI1B,iBAAkBpgC,EAAG8gC,EAAS9gC,GAInCH,GAAW,SAAUqC,GACpB,MAAO,YACDrC,IACJA,EAAWwiC,EAAgBP,EAAIW,OAC9BX,EAAIY,QAAUZ,EAAIa,QAAUb,EAAIc,mBAAqB,KAExC,UAAT1gC,EACJ4/B,EAAIvB,QACgB,UAATr+B,EAKgB,gBAAf4/B,GAAIxB,OACf5K,EAAU,EAAG,SAEbA,EAGCoM,EAAIxB,OACJwB,EAAItB,YAIN9K,EACCsM,GAAkBF,EAAIxB,SAAYwB,EAAIxB,OACtCwB,EAAItB,WAK+B,UAAjCsB,EAAIe,cAAgB,SACM,gBAArBf,GAAIgB,cACRC,OAAQjB,EAAIrE,WACZ3/B,KAAMgkC,EAAIgB,cACbhB,EAAI3B,4BAQT2B,EAAIW,OAAS5iC,IACbwiC,EAAgBP,EAAIY,QAAU7iC,EAAU,SAKnB2B,SAAhBsgC,EAAIa,QACRb,EAAIa,QAAUN,EAEdP,EAAIc,mBAAqB,WAGA,IAAnBd,EAAInkB,YAMRrhB,EAAOigB,WAAY,WACb1c,GACJwiC,OAQLxiC,EAAWA,EAAU,QAErB,KAGCiiC,EAAIb,KAAMrgC,EAAQggC,YAAchgC,EAAQ6d,MAAQ,MAC/C,MAAQzV,GAGT,GAAKnJ,EACJ,KAAMmJ,KAKTu3B,MAAO,WACD1gC,GACJA,QAWLzB,EAAO6gC,cAAe,SAAU/D,GAC1BA,EAAEwF,cACNxF,EAAEzjB,SAAS7Z,QAAS,KAKtBQ,EAAO2gC,WACNN,SACC7gC,OAAQ,6FAGT6Z,UACC7Z,OAAQ,2BAET2/B,YACCyF,cAAe,SAAUllC,GAExB,MADAM,GAAOsE,WAAY5E,GACZA,MAMVM,EAAO6gC,cAAe,SAAU,SAAU/D,GACxB15B,SAAZ05B,EAAEvwB,QACNuwB,EAAEvwB,OAAQ,GAENuwB,EAAEwF,cACNxF,EAAEh5B,KAAO,SAKX9D,EAAO8gC,cAAe,SAAU,SAAUhE,GAGzC,GAAKA,EAAEwF,YAAc,CACpB,GAAI9iC,GAAQiC,CACZ,QACCohC,KAAM,SAAUp5B,EAAG6tB,GAClB93B,EAASQ,EAAQ,YAAasgB,MAC7BukB,QAAS/H,EAAEgI,cACXpiC,IAAKo6B,EAAEiD,MACJ7Z,GACH,aACAzkB,EAAW,SAAUsjC,GACpBvlC,EAAO6b,SACP5Z,EAAW,KACNsjC,GACJzN,EAAuB,UAAbyN,EAAIjhC,KAAmB,IAAM,IAAKihC,EAAIjhC,QAMnD/F,EAAS4B,KAAKC,YAAaJ,EAAQ,KAEpC2iC,MAAO,WACD1gC,GACJA,QAUL,IAAIujC,OACHC,GAAS,mBAGVjlC,GAAO2gC,WACNuE,MAAO,WACPC,cAAe,WACd,GAAI1jC,GAAWujC,GAAat9B,OAAW1H,EAAOqD,QAAU,IAAQ64B,IAEhE,OADA/9B,MAAMsD,IAAa,EACZA,KAKTzB,EAAO6gC,cAAe,aAAc,SAAU/D,EAAGsI,EAAkBjH,GAElE,GAAIkH,GAAcC,EAAaC,EAC9BC,EAAW1I,EAAEoI,SAAU,IAAWD,GAAOr5B,KAAMkxB,EAAEiD,KAChD,MACkB,gBAAXjD,GAAEzc,MAE6C,KADnDyc,EAAEsD,aAAe,IACjBxhC,QAAS,sCACXqmC,GAAOr5B,KAAMkxB,EAAEzc,OAAU,OAI5B,IAAKmlB,GAAiC,UAArB1I,EAAEmB,UAAW,GA8D7B,MA3DAoH,GAAevI,EAAEqI,cAAgBnlC,EAAOgD,WAAY85B,EAAEqI,eACrDrI,EAAEqI,gBACFrI,EAAEqI,cAGEK,EACJ1I,EAAG0I,GAAa1I,EAAG0I,GAAWhiC,QAASyhC,GAAQ,KAAOI,GAC3CvI,EAAEoI,SAAU,IACvBpI,EAAEiD,MAAS5D,GAAOvwB,KAAMkxB,EAAEiD,KAAQ,IAAM,KAAQjD,EAAEoI,MAAQ,IAAMG,GAIjEvI,EAAEqC,WAAY,eAAkB,WAI/B,MAHMoG,IACLvlC,EAAO0D,MAAO2hC,EAAe,mBAEvBE,EAAmB,IAI3BzI,EAAEmB,UAAW,GAAM,OAGnBqH,EAAcpnC,EAAQmnC,GACtBnnC,EAAQmnC,GAAiB,WACxBE,EAAoBzjC,WAIrBq8B,EAAM1hB,OAAQ,WAGQrZ,SAAhBkiC,EACJtlC,EAAQ9B,GAAS67B,WAAYsL,GAI7BnnC,EAAQmnC,GAAiBC,EAIrBxI,EAAGuI,KAGPvI,EAAEqI,cAAgBC,EAAiBD,cAGnCH,GAAarmC,KAAM0mC,IAIfE,GAAqBvlC,EAAOgD,WAAYsiC,IAC5CA,EAAaC,EAAmB,IAGjCA,EAAoBD,EAAcliC,SAI5B,WAYThE,EAAQqmC,mBAAqB,WAC5B,GAAItiB,GAAOplB,EAAS2nC,eAAeD,mBAAoB,IAAKtiB,IAE5D,OADAA,GAAKpU,UAAY,6BACiB,IAA3BoU,EAAKzY,WAAW3J,UAQxBf,EAAOgZ,UAAY,SAAUqH,EAAMngB,EAASylC,GAC3C,GAAqB,gBAATtlB,GACX,QAEuB,kBAAZngB,KACXylC,EAAczlC,EACdA,GAAU,EAGX,IAAIoV,GAAMswB,EAAQ9gB,CAwBlB,OAtBM5kB,KAIAd,EAAQqmC,oBACZvlC,EAAUnC,EAAS2nC,eAAeD,mBAAoB,IAKtDnwB,EAAOpV,EAAQT,cAAe,QAC9B6V,EAAK3B,KAAO5V,EAASuV,SAASK,KAC9BzT,EAAQP,KAAKC,YAAa0V,IAE1BpV,EAAUnC,GAIZ6nC,EAASltB,EAAWpN,KAAM+U,GAC1ByE,GAAW6gB,MAGNC,GACK1lC,EAAQT,cAAemmC,EAAQ,MAGzCA,EAAS/gB,IAAiBxE,GAAQngB,EAAS4kB,GAEtCA,GAAWA,EAAQ/jB,QACvBf,EAAQ8kB,GAAUzJ,SAGZrb,EAAOsB,SAAWskC,EAAOl7B,cAOjC1K,EAAOG,GAAG8oB,KAAO,SAAU8W,EAAK8F,EAAQpkC,GACvC,GAAIxB,GAAU6D,EAAMu7B,EACnBvmB,EAAO3a,KACPooB,EAAMwZ,EAAInhC,QAAS,IAsDpB,OApDK2nB,QACJtmB,EAAWo6B,GAAkB0F,EAAIthC,MAAO8nB,IACxCwZ,EAAMA,EAAIthC,MAAO,EAAG8nB,IAIhBvmB,EAAOgD,WAAY6iC,IAGvBpkC,EAAWokC,EACXA,EAASziC,QAGEyiC,GAA4B,gBAAXA,KAC5B/hC,EAAO,QAIHgV,EAAK/X,OAAS,GAClBf,EAAO+gC,MACNhB,IAAKA,EAKLj8B,KAAMA,GAAQ,MACdk6B,SAAU,OACV3d,KAAMwlB,IACH3+B,KAAM,SAAUw9B,GAGnBrF,EAAWv9B,UAEXgX,EAAKsU,KAAMntB,EAIVD,EAAQ,SAAU8tB,OAAQ9tB,EAAOgZ,UAAW0rB,IAAiB91B,KAAM3O,GAGnEykC,KAKEjoB,OAAQhb,GAAY,SAAU08B,EAAO+D,GACxCppB,EAAKtX,KAAM,WACVC,EAASI,MAAO1D,KAAMkhC,IAAclB,EAAMuG,aAAcxC,EAAQ/D,QAK5DhgC,MAOR6B,EAAOwB,MACN,YACA,WACA,eACA,YACA,cACA,YACE,SAAUI,EAAGkC,GACf9D,EAAOG,GAAI2D,GAAS,SAAU3D,GAC7B,MAAOhC,MAAK+nB,GAAIpiB,EAAM3D,MAOxBH,EAAOgQ,KAAK/H,QAAQ69B,SAAW,SAAUnkC,GACxC,MAAO3B,GAAO+E,KAAM/E,EAAOq4B,OAAQ,SAAUl4B,GAC5C,MAAOwB,KAASxB,EAAGwB,OAChBZ,QAMLf,EAAO+lC,QACNC,UAAW,SAAUrkC,EAAMa,EAASZ,GACnC,GAAIqkC,GAAaC,EAASC,EAAWC,EAAQC,EAAWC,EAAYC,EACnE3V,EAAW5wB,EAAOmiB,IAAKxgB,EAAM,YAC7B6kC,EAAUxmC,EAAQ2B,GAClB6nB,IAGiB,YAAboH,IACJjvB,EAAKsgB,MAAM2O,SAAW,YAGvByV,EAAYG,EAAQT,SACpBI,EAAYnmC,EAAOmiB,IAAKxgB,EAAM,OAC9B2kC,EAAatmC,EAAOmiB,IAAKxgB,EAAM,QAC/B4kC,GAAmC,aAAb3V,GAAwC,UAAbA,KAC9CuV,EAAYG,GAAa1nC,QAAS,WAIhC2nC,GACJN,EAAcO,EAAQ5V,WACtBwV,EAASH,EAAY93B,IACrB+3B,EAAUD,EAAY7S,OAGtBgT,EAASliC,WAAYiiC,IAAe,EACpCD,EAAUhiC,WAAYoiC,IAAgB,GAGlCtmC,EAAOgD,WAAYR,KAGvBA,EAAUA,EAAQrD,KAAMwC,EAAMC,EAAG5B,EAAOuC,UAAY8jC,KAGjC,MAAf7jC,EAAQ2L,MACZqb,EAAMrb,IAAQ3L,EAAQ2L,IAAMk4B,EAAUl4B,IAAQi4B,GAE1B,MAAhB5jC,EAAQ4wB,OACZ5J,EAAM4J,KAAS5wB,EAAQ4wB,KAAOiT,EAAUjT,KAAS8S,GAG7C,SAAW1jC,GACfA,EAAQikC,MAAMtnC,KAAMwC,EAAM6nB,GAG1Bgd,EAAQrkB,IAAKqH,KAKhBxpB,EAAOG,GAAGoC,QACTwjC,OAAQ,SAAUvjC,GAGjB,GAAKV,UAAUf,OACd,MAAmBqC,UAAZZ,EACNrE,KACAA,KAAKqD,KAAM,SAAUI,GACpB5B,EAAO+lC,OAAOC,UAAW7nC,KAAMqE,EAASZ,IAI3C,IAAIrC,GAAKoH,EAAS+/B,EAAMC,EACvBhlC,EAAOxD,KAAM,EAEd,IAAMwD,EAQN,MAAMA,GAAKuxB,iBAAiBnyB,QAI5B2lC,EAAO/kC,EAAKwxB,wBAEZ5zB,EAAMoC,EAAK0J,cACX1E,EAAUpH,EAAIuO,gBACd64B,EAAMpnC,EAAI2O,aAGTC,IAAKu4B,EAAKv4B,IAAMw4B,EAAIC,YAAcjgC,EAAQkgC,UAC1CzT,KAAMsT,EAAKtT,KAAOuT,EAAIG,YAAcngC,EAAQogC,cAXnC54B,IAAK,EAAGilB,KAAM,IAezBxC,SAAU,WACT,GAAMzyB,KAAM,GAAZ,CAIA,GAAI6oC,GAAcjB,EACjBpkC,EAAOxD,KAAM,GACb8oC,GAAiB94B,IAAK,EAAGilB,KAAM,EA4BhC,OAxBwC,UAAnCpzB,EAAOmiB,IAAKxgB,EAAM,YAGtBokC,EAASpkC,EAAKwxB,yBAKd6T,EAAe7oC,KAAK6oC,eAGpBjB,EAAS5nC,KAAK4nC,SACRl6B,EAAUm7B,EAAc,GAAK,UAClCC,EAAeD,EAAajB,UAI7BkB,GACC94B,IAAK84B,EAAa94B,IAAMnO,EAAOmiB,IAAK6kB,EAAc,GAAK,kBAAkB,GACzE5T,KAAM6T,EAAa7T,KAAOpzB,EAAOmiB,IAAK6kB,EAAc,GAAK,mBAAmB,MAM7E74B,IAAK43B,EAAO53B,IAAM84B,EAAa94B,IAAMnO,EAAOmiB,IAAKxgB,EAAM,aAAa,GACpEyxB,KAAM2S,EAAO3S,KAAO6T,EAAa7T,KAAOpzB,EAAOmiB,IAAKxgB,EAAM,cAAc,MAc1EqlC,aAAc,WACb,MAAO7oC,MAAKuD,IAAK,WAChB,GAAIslC,GAAe7oC,KAAK6oC,YAExB,OAAQA,GAA2D,WAA3ChnC,EAAOmiB,IAAK6kB,EAAc,YACjDA,EAAeA,EAAaA,YAG7B,OAAOA,IAAgBl5B,QAM1B9N,EAAOwB,MAAQgzB,WAAY,cAAeD,UAAW,eAAiB,SAAUtY,EAAQqE,GACvF,GAAInS,GAAM,gBAAkBmS,CAE5BtgB,GAAOG,GAAI8b,GAAW,SAAU9L,GAC/B,MAAOsP,GAAQthB,KAAM,SAAUwD,EAAMsa,EAAQ9L,GAG5C,GAAIw2B,EAOJ,OANK3mC,GAAO+D,SAAUpC,GACrBglC,EAAMhlC,EACuB,IAAlBA,EAAKgJ,WAChBg8B,EAAMhlC,EAAKuM,aAGC9K,SAAR+M,EACGw2B,EAAMA,EAAKrmB,GAAS3e,EAAMsa,QAG7B0qB,EACJA,EAAIO,SACF/4B,EAAYw4B,EAAIG,YAAV32B,EACPhC,EAAMgC,EAAMw2B,EAAIC,aAIjBjlC,EAAMsa,GAAW9L,IAEhB8L,EAAQ9L,EAAKrO,UAAUf,WAU5Bf,EAAOwB,MAAQ,MAAO,QAAU,SAAUI,EAAG0e,GAC5CtgB,EAAOgyB,SAAU1R,GAASgQ,GAAclxB,EAAQywB,cAC/C,SAAUluB,EAAMuuB,GACf,GAAKA,EAIJ,MAHAA,GAAWD,GAAQtuB,EAAM2e,GAGlBsO,GAAUhjB,KAAMskB,GACtBlwB,EAAQ2B,GAAOivB,WAAYtQ,GAAS,KACpC4P,MAQLlwB,EAAOwB,MAAQ2lC,OAAQ,SAAUC,MAAO,SAAW,SAAU3kC,EAAMqB,GAClE9D,EAAOwB,MAAQ8xB,QAAS,QAAU7wB,EAAM4X,QAASvW,EAAMujC,GAAI,QAAU5kC,GACpE,SAAU6kC,EAAcC,GAGxBvnC,EAAOG,GAAIonC,GAAa,SAAUlU,EAAQhuB,GACzC,GAAIqa,GAAY5d,UAAUf,SAAYumC,GAAkC,iBAAXjU,IAC5D1B,EAAQ2V,IAAkBjU,KAAW,GAAQhuB,KAAU,EAAO,SAAW,SAE1E,OAAOoa,GAAQthB,KAAM,SAAUwD,EAAMmC,EAAMuB,GAC1C,GAAI9F,EAEJ,OAAKS,GAAO+D,SAAUpC,GAGkB,IAAhC4lC,EAAS3oC,QAAS,SACxB+C,EAAM,QAAUc,GAChBd,EAAK5D,SAAS+P,gBAAiB,SAAWrL,GAIrB,IAAlBd,EAAKgJ,UACTpL,EAAMoC,EAAKmM,gBAIJxK,KAAKmuB,IACX9vB,EAAKwhB,KAAM,SAAW1gB,GAAQlD,EAAK,SAAWkD,GAC9Cd,EAAKwhB,KAAM,SAAW1gB,GAAQlD,EAAK,SAAWkD,GAC9ClD,EAAK,SAAWkD,KAIDW,SAAViC,EAGNrF,EAAOmiB,IAAKxgB,EAAMmC,EAAM6tB,GAGxB3xB,EAAOiiB,MAAOtgB,EAAMmC,EAAMuB,EAAOssB,IAChC7tB,EAAM4b,EAAY2T,EAASjwB,OAAWsc,QAM5C1f,EAAOG,GAAGoC,QAETilC,KAAM,SAAUrhB,EAAO9F,EAAMlgB,GAC5B,MAAOhC,MAAK+nB,GAAIC,EAAO,KAAM9F,EAAMlgB,IAEpCsnC,OAAQ,SAAUthB,EAAOhmB,GACxB,MAAOhC,MAAKooB,IAAKJ,EAAO,KAAMhmB,IAG/BunC,SAAU,SAAUznC,EAAUkmB,EAAO9F,EAAMlgB,GAC1C,MAAOhC,MAAK+nB,GAAIC,EAAOlmB,EAAUogB,EAAMlgB,IAExCwnC,WAAY,SAAU1nC,EAAUkmB,EAAOhmB,GAGtC,MAA4B,KAArB2B,UAAUf,OAChB5C,KAAKooB,IAAKtmB,EAAU,MACpB9B,KAAKooB,IAAKJ,EAAOlmB,GAAY,KAAME,MAItCH,EAAO4nC,UAAY,SAAUC,GACvBA,EACJ7nC,EAAOmf,YAEPnf,EAAOiZ,OAAO,IAGhBjZ,EAAOmD,QAAUD,MAAMC,QACvBnD,EAAO8nC,UAAYjnB,KAAKC,MACxB9gB,EAAO6L,SAAWA,EAkBK,kBAAXk8B,SAAyBA,OAAOC,KAC3CD,OAAQ,YAAc,WACrB,MAAO/nC,IAOT,IAGCioC,IAAU/pC,EAAO8B,OAGjBkoC,GAAKhqC,EAAOiqC,CAwBb,OAtBAnoC,GAAOooC,WAAa,SAAUrlC,GAS7B,MARK7E,GAAOiqC,IAAMnoC,IACjB9B,EAAOiqC,EAAID,IAGPnlC,GAAQ7E,EAAO8B,SAAWA,IAC9B9B,EAAO8B,OAASioC,IAGVjoC,GAMF5B,IACLF,EAAO8B,OAAS9B,EAAOiqC,EAAInoC,GAMrBA","file":"jquery.min.js"}
\ No newline at end of file
diff --git a/js/jquery/dist/jquery.slim.js b/js/jquery/dist/jquery.slim.js
new file mode 100644 (file)
index 0000000..6cdf1ee
--- /dev/null
@@ -0,0 +1,8160 @@
+/*!
+ * jQuery JavaScript Library v3.2.1 -ajax,-ajax/jsonp,-ajax/load,-ajax/parseXML,-ajax/script,-ajax/var/location,-ajax/var/nonce,-ajax/var/rquery,-ajax/xhr,-manipulation/_evalUrl,-event/ajax,-effects,-effects/Tween,-effects/animatedSelector
+ * https://jquery.com/
+ *
+ * Includes Sizzle.js
+ * https://sizzlejs.com/
+ *
+ * Copyright JS Foundation and other contributors
+ * Released under the MIT license
+ * https://jquery.org/license
+ *
+ * Date: 2017-03-20T19:00Z
+ */
+( function( global, factory ) {
+
+       "use strict";
+
+       if ( typeof module === "object" && typeof module.exports === "object" ) {
+
+               // For CommonJS and CommonJS-like environments where a proper `window`
+               // is present, execute the factory and get jQuery.
+               // For environments that do not have a `window` with a `document`
+               // (such as Node.js), expose a factory as module.exports.
+               // This accentuates the need for the creation of a real `window`.
+               // e.g. var jQuery = require("jquery")(window);
+               // See ticket #14549 for more info.
+               module.exports = global.document ?
+                       factory( global, true ) :
+                       function( w ) {
+                               if ( !w.document ) {
+                                       throw new Error( "jQuery requires a window with a document" );
+                               }
+                               return factory( w );
+                       };
+       } else {
+               factory( global );
+       }
+
+// Pass this if window is not defined yet
+} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
+
+// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1
+// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode
+// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common
+// enough that all such attempts are guarded in a try block.
+"use strict";
+
+var arr = [];
+
+var document = window.document;
+
+var getProto = Object.getPrototypeOf;
+
+var slice = arr.slice;
+
+var concat = arr.concat;
+
+var push = arr.push;
+
+var indexOf = arr.indexOf;
+
+var class2type = {};
+
+var toString = class2type.toString;
+
+var hasOwn = class2type.hasOwnProperty;
+
+var fnToString = hasOwn.toString;
+
+var ObjectFunctionString = fnToString.call( Object );
+
+var support = {};
+
+
+
+       function DOMEval( code, doc ) {
+               doc = doc || document;
+
+               var script = doc.createElement( "script" );
+
+               script.text = code;
+               doc.head.appendChild( script ).parentNode.removeChild( script );
+       }
+/* global Symbol */
+// Defining this global in .eslintrc.json would create a danger of using the global
+// unguarded in another place, it seems safer to define global only for this module
+
+
+
+var
+       version = "3.2.1 -ajax,-ajax/jsonp,-ajax/load,-ajax/parseXML,-ajax/script,-ajax/var/location,-ajax/var/nonce,-ajax/var/rquery,-ajax/xhr,-manipulation/_evalUrl,-event/ajax,-effects,-effects/Tween,-effects/animatedSelector",
+
+       // Define a local copy of jQuery
+       jQuery = function( selector, context ) {
+
+               // The jQuery object is actually just the init constructor 'enhanced'
+               // Need init if jQuery is called (just allow error to be thrown if not included)
+               return new jQuery.fn.init( selector, context );
+       },
+
+       // Support: Android <=4.0 only
+       // Make sure we trim BOM and NBSP
+       rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
+
+       // Matches dashed string for camelizing
+       rmsPrefix = /^-ms-/,
+       rdashAlpha = /-([a-z])/g,
+
+       // Used by jQuery.camelCase as callback to replace()
+       fcamelCase = function( all, letter ) {
+               return letter.toUpperCase();
+       };
+
+jQuery.fn = jQuery.prototype = {
+
+       // The current version of jQuery being used
+       jquery: version,
+
+       constructor: jQuery,
+
+       // The default length of a jQuery object is 0
+       length: 0,
+
+       toArray: function() {
+               return slice.call( this );
+       },
+
+       // Get the Nth element in the matched element set OR
+       // Get the whole matched element set as a clean array
+       get: function( num ) {
+
+               // Return all the elements in a clean array
+               if ( num == null ) {
+                       return slice.call( this );
+               }
+
+               // Return just the one element from the set
+               return num < 0 ? this[ num + this.length ] : this[ num ];
+       },
+
+       // Take an array of elements and push it onto the stack
+       // (returning the new matched element set)
+       pushStack: function( elems ) {
+
+               // Build a new jQuery matched element set
+               var ret = jQuery.merge( this.constructor(), elems );
+
+               // Add the old object onto the stack (as a reference)
+               ret.prevObject = this;
+
+               // Return the newly-formed element set
+               return ret;
+       },
+
+       // Execute a callback for every element in the matched set.
+       each: function( callback ) {
+               return jQuery.each( this, callback );
+       },
+
+       map: function( callback ) {
+               return this.pushStack( jQuery.map( this, function( elem, i ) {
+                       return callback.call( elem, i, elem );
+               } ) );
+       },
+
+       slice: function() {
+               return this.pushStack( slice.apply( this, arguments ) );
+       },
+
+       first: function() {
+               return this.eq( 0 );
+       },
+
+       last: function() {
+               return this.eq( -1 );
+       },
+
+       eq: function( i ) {
+               var len = this.length,
+                       j = +i + ( i < 0 ? len : 0 );
+               return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );
+       },
+
+       end: function() {
+               return this.prevObject || this.constructor();
+       },
+
+       // For internal use only.
+       // Behaves like an Array's method, not like a jQuery method.
+       push: push,
+       sort: arr.sort,
+       splice: arr.splice
+};
+
+jQuery.extend = jQuery.fn.extend = function() {
+       var options, name, src, copy, copyIsArray, clone,
+               target = arguments[ 0 ] || {},
+               i = 1,
+               length = arguments.length,
+               deep = false;
+
+       // Handle a deep copy situation
+       if ( typeof target === "boolean" ) {
+               deep = target;
+
+               // Skip the boolean and the target
+               target = arguments[ i ] || {};
+               i++;
+       }
+
+       // Handle case when target is a string or something (possible in deep copy)
+       if ( typeof target !== "object" && !jQuery.isFunction( target ) ) {
+               target = {};
+       }
+
+       // Extend jQuery itself if only one argument is passed
+       if ( i === length ) {
+               target = this;
+               i--;
+       }
+
+       for ( ; i < length; i++ ) {
+
+               // Only deal with non-null/undefined values
+               if ( ( options = arguments[ i ] ) != null ) {
+
+                       // Extend the base object
+                       for ( name in options ) {
+                               src = target[ name ];
+                               copy = options[ name ];
+
+                               // Prevent never-ending loop
+                               if ( target === copy ) {
+                                       continue;
+                               }
+
+                               // Recurse if we're merging plain objects or arrays
+                               if ( deep && copy && ( jQuery.isPlainObject( copy ) ||
+                                       ( copyIsArray = Array.isArray( copy ) ) ) ) {
+
+                                       if ( copyIsArray ) {
+                                               copyIsArray = false;
+                                               clone = src && Array.isArray( src ) ? src : [];
+
+                                       } else {
+                                               clone = src && jQuery.isPlainObject( src ) ? src : {};
+                                       }
+
+                                       // Never move original objects, clone them
+                                       target[ name ] = jQuery.extend( deep, clone, copy );
+
+                               // Don't bring in undefined values
+                               } else if ( copy !== undefined ) {
+                                       target[ name ] = copy;
+                               }
+                       }
+               }
+       }
+
+       // Return the modified object
+       return target;
+};
+
+jQuery.extend( {
+
+       // Unique for each copy of jQuery on the page
+       expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
+
+       // Assume jQuery is ready without the ready module
+       isReady: true,
+
+       error: function( msg ) {
+               throw new Error( msg );
+       },
+
+       noop: function() {},
+
+       isFunction: function( obj ) {
+               return jQuery.type( obj ) === "function";
+       },
+
+       isWindow: function( obj ) {
+               return obj != null && obj === obj.window;
+       },
+
+       isNumeric: function( obj ) {
+
+               // As of jQuery 3.0, isNumeric is limited to
+               // strings and numbers (primitives or objects)
+               // that can be coerced to finite numbers (gh-2662)
+               var type = jQuery.type( obj );
+               return ( type === "number" || type === "string" ) &&
+
+                       // parseFloat NaNs numeric-cast false positives ("")
+                       // ...but misinterprets leading-number strings, particularly hex literals ("0x...")
+                       // subtraction forces infinities to NaN
+                       !isNaN( obj - parseFloat( obj ) );
+       },
+
+       isPlainObject: function( obj ) {
+               var proto, Ctor;
+
+               // Detect obvious negatives
+               // Use toString instead of jQuery.type to catch host objects
+               if ( !obj || toString.call( obj ) !== "[object Object]" ) {
+                       return false;
+               }
+
+               proto = getProto( obj );
+
+               // Objects with no prototype (e.g., `Object.create( null )`) are plain
+               if ( !proto ) {
+                       return true;
+               }
+
+               // Objects with prototype are plain iff they were constructed by a global Object function
+               Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor;
+               return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString;
+       },
+
+       isEmptyObject: function( obj ) {
+
+               /* eslint-disable no-unused-vars */
+               // See https://github.com/eslint/eslint/issues/6125
+               var name;
+
+               for ( name in obj ) {
+                       return false;
+               }
+               return true;
+       },
+
+       type: function( obj ) {
+               if ( obj == null ) {
+                       return obj + "";
+               }
+
+               // Support: Android <=2.3 only (functionish RegExp)
+               return typeof obj === "object" || typeof obj === "function" ?
+                       class2type[ toString.call( obj ) ] || "object" :
+                       typeof obj;
+       },
+
+       // Evaluates a script in a global context
+       globalEval: function( code ) {
+               DOMEval( code );
+       },
+
+       // Convert dashed to camelCase; used by the css and data modules
+       // Support: IE <=9 - 11, Edge 12 - 13
+       // Microsoft forgot to hump their vendor prefix (#9572)
+       camelCase: function( string ) {
+               return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
+       },
+
+       each: function( obj, callback ) {
+               var length, i = 0;
+
+               if ( isArrayLike( obj ) ) {
+                       length = obj.length;
+                       for ( ; i < length; i++ ) {
+                               if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
+                                       break;
+                               }
+                       }
+               } else {
+                       for ( i in obj ) {
+                               if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
+                                       break;
+                               }
+                       }
+               }
+
+               return obj;
+       },
+
+       // Support: Android <=4.0 only
+       trim: function( text ) {
+               return text == null ?
+                       "" :
+                       ( text + "" ).replace( rtrim, "" );
+       },
+
+       // results is for internal usage only
+       makeArray: function( arr, results ) {
+               var ret = results || [];
+
+               if ( arr != null ) {
+                       if ( isArrayLike( Object( arr ) ) ) {
+                               jQuery.merge( ret,
+                                       typeof arr === "string" ?
+                                       [ arr ] : arr
+                               );
+                       } else {
+                               push.call( ret, arr );
+                       }
+               }
+
+               return ret;
+       },
+
+       inArray: function( elem, arr, i ) {
+               return arr == null ? -1 : indexOf.call( arr, elem, i );
+       },
+
+       // Support: Android <=4.0 only, PhantomJS 1 only
+       // push.apply(_, arraylike) throws on ancient WebKit
+       merge: function( first, second ) {
+               var len = +second.length,
+                       j = 0,
+                       i = first.length;
+
+               for ( ; j < len; j++ ) {
+                       first[ i++ ] = second[ j ];
+               }
+
+               first.length = i;
+
+               return first;
+       },
+
+       grep: function( elems, callback, invert ) {
+               var callbackInverse,
+                       matches = [],
+                       i = 0,
+                       length = elems.length,
+                       callbackExpect = !invert;
+
+               // Go through the array, only saving the items
+               // that pass the validator function
+               for ( ; i < length; i++ ) {
+                       callbackInverse = !callback( elems[ i ], i );
+                       if ( callbackInverse !== callbackExpect ) {
+                               matches.push( elems[ i ] );
+                       }
+               }
+
+               return matches;
+       },
+
+       // arg is for internal usage only
+       map: function( elems, callback, arg ) {
+               var length, value,
+                       i = 0,
+                       ret = [];
+
+               // Go through the array, translating each of the items to their new values
+               if ( isArrayLike( elems ) ) {
+                       length = elems.length;
+                       for ( ; i < length; i++ ) {
+                               value = callback( elems[ i ], i, arg );
+
+                               if ( value != null ) {
+                                       ret.push( value );
+                               }
+                       }
+
+               // Go through every key on the object,
+               } else {
+                       for ( i in elems ) {
+                               value = callback( elems[ i ], i, arg );
+
+                               if ( value != null ) {
+                                       ret.push( value );
+                               }
+                       }
+               }
+
+               // Flatten any nested arrays
+               return concat.apply( [], ret );
+       },
+
+       // A global GUID counter for objects
+       guid: 1,
+
+       // Bind a function to a context, optionally partially applying any
+       // arguments.
+       proxy: function( fn, context ) {
+               var tmp, args, proxy;
+
+               if ( typeof context === "string" ) {
+                       tmp = fn[ context ];
+                       context = fn;
+                       fn = tmp;
+               }
+
+               // Quick check to determine if target is callable, in the spec
+               // this throws a TypeError, but we will just return undefined.
+               if ( !jQuery.isFunction( fn ) ) {
+                       return undefined;
+               }
+
+               // Simulated bind
+               args = slice.call( arguments, 2 );
+               proxy = function() {
+                       return fn.apply( context || this, args.concat( slice.call( arguments ) ) );
+               };
+
+               // Set the guid of unique handler to the same of original handler, so it can be removed
+               proxy.guid = fn.guid = fn.guid || jQuery.guid++;
+
+               return proxy;
+       },
+
+       now: Date.now,
+
+       // jQuery.support is not used in Core but other projects attach their
+       // properties to it so it needs to exist.
+       support: support
+} );
+
+if ( typeof Symbol === "function" ) {
+       jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];
+}
+
+// Populate the class2type map
+jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ),
+function( i, name ) {
+       class2type[ "[object " + name + "]" ] = name.toLowerCase();
+} );
+
+function isArrayLike( obj ) {
+
+       // Support: real iOS 8.2 only (not reproducible in simulator)
+       // `in` check used to prevent JIT error (gh-2145)
+       // hasOwn isn't used here due to false negatives
+       // regarding Nodelist length in IE
+       var length = !!obj && "length" in obj && obj.length,
+               type = jQuery.type( obj );
+
+       if ( type === "function" || jQuery.isWindow( obj ) ) {
+               return false;
+       }
+
+       return type === "array" || length === 0 ||
+               typeof length === "number" && length > 0 && ( length - 1 ) in obj;
+}
+var Sizzle =
+/*!
+ * Sizzle CSS Selector Engine v2.3.3
+ * https://sizzlejs.com/
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license
+ * http://jquery.org/license
+ *
+ * Date: 2016-08-08
+ */
+(function( window ) {
+
+var i,
+       support,
+       Expr,
+       getText,
+       isXML,
+       tokenize,
+       compile,
+       select,
+       outermostContext,
+       sortInput,
+       hasDuplicate,
+
+       // Local document vars
+       setDocument,
+       document,
+       docElem,
+       documentIsHTML,
+       rbuggyQSA,
+       rbuggyMatches,
+       matches,
+       contains,
+
+       // Instance-specific data
+       expando = "sizzle" + 1 * new Date(),
+       preferredDoc = window.document,
+       dirruns = 0,
+       done = 0,
+       classCache = createCache(),
+       tokenCache = createCache(),
+       compilerCache = createCache(),
+       sortOrder = function( a, b ) {
+               if ( a === b ) {
+                       hasDuplicate = true;
+               }
+               return 0;
+       },
+
+       // Instance methods
+       hasOwn = ({}).hasOwnProperty,
+       arr = [],
+       pop = arr.pop,
+       push_native = arr.push,
+       push = arr.push,
+       slice = arr.slice,
+       // Use a stripped-down indexOf as it's faster than native
+       // https://jsperf.com/thor-indexof-vs-for/5
+       indexOf = function( list, elem ) {
+               var i = 0,
+                       len = list.length;
+               for ( ; i < len; i++ ) {
+                       if ( list[i] === elem ) {
+                               return i;
+                       }
+               }
+               return -1;
+       },
+
+       booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
+
+       // Regular expressions
+
+       // http://www.w3.org/TR/css3-selectors/#whitespace
+       whitespace = "[\\x20\\t\\r\\n\\f]",
+
+       // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
+       identifier = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+",
+
+       // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
+       attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace +
+               // Operator (capture 2)
+               "*([*^$|!~]?=)" + whitespace +
+               // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
+               "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace +
+               "*\\]",
+
+       pseudos = ":(" + identifier + ")(?:\\((" +
+               // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
+               // 1. quoted (capture 3; capture 4 or capture 5)
+               "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
+               // 2. simple (capture 6)
+               "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
+               // 3. anything else (capture 2)
+               ".*" +
+               ")\\)|)",
+
+       // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
+       rwhitespace = new RegExp( whitespace + "+", "g" ),
+       rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
+
+       rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
+       rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ),
+
+       rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ),
+
+       rpseudo = new RegExp( pseudos ),
+       ridentifier = new RegExp( "^" + identifier + "$" ),
+
+       matchExpr = {
+               "ID": new RegExp( "^#(" + identifier + ")" ),
+               "CLASS": new RegExp( "^\\.(" + identifier + ")" ),
+               "TAG": new RegExp( "^(" + identifier + "|[*])" ),
+               "ATTR": new RegExp( "^" + attributes ),
+               "PSEUDO": new RegExp( "^" + pseudos ),
+               "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
+                       "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
+                       "*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
+               "bool": new RegExp( "^(?:" + booleans + ")$", "i" ),
+               // For use in libraries implementing .is()
+               // We use this for POS matching in `select`
+               "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
+                       whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
+       },
+
+       rinputs = /^(?:input|select|textarea|button)$/i,
+       rheader = /^h\d$/i,
+
+       rnative = /^[^{]+\{\s*\[native \w/,
+
+       // Easily-parseable/retrievable ID or TAG or CLASS selectors
+       rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
+
+       rsibling = /[+~]/,
+
+       // CSS escapes
+       // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
+       runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ),
+       funescape = function( _, escaped, escapedWhitespace ) {
+               var high = "0x" + escaped - 0x10000;
+               // NaN means non-codepoint
+               // Support: Firefox<24
+               // Workaround erroneous numeric interpretation of +"0x"
+               return high !== high || escapedWhitespace ?
+                       escaped :
+                       high < 0 ?
+                               // BMP codepoint
+                               String.fromCharCode( high + 0x10000 ) :
+                               // Supplemental Plane codepoint (surrogate pair)
+                               String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
+       },
+
+       // CSS string/identifier serialization
+       // https://drafts.csswg.org/cssom/#common-serializing-idioms
+       rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,
+       fcssescape = function( ch, asCodePoint ) {
+               if ( asCodePoint ) {
+
+                       // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER
+                       if ( ch === "\0" ) {
+                               return "\uFFFD";
+                       }
+
+                       // Control characters and (dependent upon position) numbers get escaped as code points
+                       return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " ";
+               }
+
+               // Other potentially-special ASCII characters get backslash-escaped
+               return "\\" + ch;
+       },
+
+       // Used for iframes
+       // See setDocument()
+       // Removing the function wrapper causes a "Permission Denied"
+       // error in IE
+       unloadHandler = function() {
+               setDocument();
+       },
+
+       disabledAncestor = addCombinator(
+               function( elem ) {
+                       return elem.disabled === true && ("form" in elem || "label" in elem);
+               },
+               { dir: "parentNode", next: "legend" }
+       );
+
+// Optimize for push.apply( _, NodeList )
+try {
+       push.apply(
+               (arr = slice.call( preferredDoc.childNodes )),
+               preferredDoc.childNodes
+       );
+       // Support: Android<4.0
+       // Detect silently failing push.apply
+       arr[ preferredDoc.childNodes.length ].nodeType;
+} catch ( e ) {
+       push = { apply: arr.length ?
+
+               // Leverage slice if possible
+               function( target, els ) {
+                       push_native.apply( target, slice.call(els) );
+               } :
+
+               // Support: IE<9
+               // Otherwise append directly
+               function( target, els ) {
+                       var j = target.length,
+                               i = 0;
+                       // Can't trust NodeList.length
+                       while ( (target[j++] = els[i++]) ) {}
+                       target.length = j - 1;
+               }
+       };
+}
+
+function Sizzle( selector, context, results, seed ) {
+       var m, i, elem, nid, match, groups, newSelector,
+               newContext = context && context.ownerDocument,
+
+               // nodeType defaults to 9, since context defaults to document
+               nodeType = context ? context.nodeType : 9;
+
+       results = results || [];
+
+       // Return early from calls with invalid selector or context
+       if ( typeof selector !== "string" || !selector ||
+               nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {
+
+               return results;
+       }
+
+       // Try to shortcut find operations (as opposed to filters) in HTML documents
+       if ( !seed ) {
+
+               if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
+                       setDocument( context );
+               }
+               context = context || document;
+
+               if ( documentIsHTML ) {
+
+                       // If the selector is sufficiently simple, try using a "get*By*" DOM method
+                       // (excepting DocumentFragment context, where the methods don't exist)
+                       if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {
+
+                               // ID selector
+                               if ( (m = match[1]) ) {
+
+                                       // Document context
+                                       if ( nodeType === 9 ) {
+                                               if ( (elem = context.getElementById( m )) ) {
+
+                                                       // Support: IE, Opera, Webkit
+                                                       // TODO: identify versions
+                                                       // getElementById can match elements by name instead of ID
+                                                       if ( elem.id === m ) {
+                                                               results.push( elem );
+                                                               return results;
+                                                       }
+                                               } else {
+                                                       return results;
+                                               }
+
+                                       // Element context
+                                       } else {
+
+                                               // Support: IE, Opera, Webkit
+                                               // TODO: identify versions
+                                               // getElementById can match elements by name instead of ID
+                                               if ( newContext && (elem = newContext.getElementById( m )) &&
+                                                       contains( context, elem ) &&
+                                                       elem.id === m ) {
+
+                                                       results.push( elem );
+                                                       return results;
+                                               }
+                                       }
+
+                               // Type selector
+                               } else if ( match[2] ) {
+                                       push.apply( results, context.getElementsByTagName( selector ) );
+                                       return results;
+
+                               // Class selector
+                               } else if ( (m = match[3]) && support.getElementsByClassName &&
+                                       context.getElementsByClassName ) {
+
+                                       push.apply( results, context.getElementsByClassName( m ) );
+                                       return results;
+                               }
+                       }
+
+                       // Take advantage of querySelectorAll
+                       if ( support.qsa &&
+                               !compilerCache[ selector + " " ] &&
+                               (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {
+
+                               if ( nodeType !== 1 ) {
+                                       newContext = context;
+                                       newSelector = selector;
+
+                               // qSA looks outside Element context, which is not what we want
+                               // Thanks to Andrew Dupont for this workaround technique
+                               // Support: IE <=8
+                               // Exclude object elements
+                               } else if ( context.nodeName.toLowerCase() !== "object" ) {
+
+                                       // Capture the context ID, setting it first if necessary
+                                       if ( (nid = context.getAttribute( "id" )) ) {
+                                               nid = nid.replace( rcssescape, fcssescape );
+                                       } else {
+                                               context.setAttribute( "id", (nid = expando) );
+                                       }
+
+                                       // Prefix every selector in the list
+                                       groups = tokenize( selector );
+                                       i = groups.length;
+                                       while ( i-- ) {
+                                               groups[i] = "#" + nid + " " + toSelector( groups[i] );
+                                       }
+                                       newSelector = groups.join( "," );
+
+                                       // Expand context for sibling selectors
+                                       newContext = rsibling.test( selector ) && testContext( context.parentNode ) ||
+                                               context;
+                               }
+
+                               if ( newSelector ) {
+                                       try {
+                                               push.apply( results,
+                                                       newContext.querySelectorAll( newSelector )
+                                               );
+                                               return results;
+                                       } catch ( qsaError ) {
+                                       } finally {
+                                               if ( nid === expando ) {
+                                                       context.removeAttribute( "id" );
+                                               }
+                                       }
+                               }
+                       }
+               }
+       }
+
+       // All others
+       return select( selector.replace( rtrim, "$1" ), context, results, seed );
+}
+
+/**
+ * Create key-value caches of limited size
+ * @returns {function(string, object)} Returns the Object data after storing it on itself with
+ *     property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
+ *     deleting the oldest entry
+ */
+function createCache() {
+       var keys = [];
+
+       function cache( key, value ) {
+               // Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
+               if ( keys.push( key + " " ) > Expr.cacheLength ) {
+                       // Only keep the most recent entries
+                       delete cache[ keys.shift() ];
+               }
+               return (cache[ key + " " ] = value);
+       }
+       return cache;
+}
+
+/**
+ * Mark a function for special use by Sizzle
+ * @param {Function} fn The function to mark
+ */
+function markFunction( fn ) {
+       fn[ expando ] = true;
+       return fn;
+}
+
+/**
+ * Support testing using an element
+ * @param {Function} fn Passed the created element and returns a boolean result
+ */
+function assert( fn ) {
+       var el = document.createElement("fieldset");
+
+       try {
+               return !!fn( el );
+       } catch (e) {
+               return false;
+       } finally {
+               // Remove from its parent by default
+               if ( el.parentNode ) {
+                       el.parentNode.removeChild( el );
+               }
+               // release memory in IE
+               el = null;
+       }
+}
+
+/**
+ * Adds the same handler for all of the specified attrs
+ * @param {String} attrs Pipe-separated list of attributes
+ * @param {Function} handler The method that will be applied
+ */
+function addHandle( attrs, handler ) {
+       var arr = attrs.split("|"),
+               i = arr.length;
+
+       while ( i-- ) {
+               Expr.attrHandle[ arr[i] ] = handler;
+       }
+}
+
+/**
+ * Checks document order of two siblings
+ * @param {Element} a
+ * @param {Element} b
+ * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
+ */
+function siblingCheck( a, b ) {
+       var cur = b && a,
+               diff = cur && a.nodeType === 1 && b.nodeType === 1 &&
+                       a.sourceIndex - b.sourceIndex;
+
+       // Use IE sourceIndex if available on both nodes
+       if ( diff ) {
+               return diff;
+       }
+
+       // Check if b follows a
+       if ( cur ) {
+               while ( (cur = cur.nextSibling) ) {
+                       if ( cur === b ) {
+                               return -1;
+                       }
+               }
+       }
+
+       return a ? 1 : -1;
+}
+
+/**
+ * Returns a function to use in pseudos for input types
+ * @param {String} type
+ */
+function createInputPseudo( type ) {
+       return function( elem ) {
+               var name = elem.nodeName.toLowerCase();
+               return name === "input" && elem.type === type;
+       };
+}
+
+/**
+ * Returns a function to use in pseudos for buttons
+ * @param {String} type
+ */
+function createButtonPseudo( type ) {
+       return function( elem ) {
+               var name = elem.nodeName.toLowerCase();
+               return (name === "input" || name === "button") && elem.type === type;
+       };
+}
+
+/**
+ * Returns a function to use in pseudos for :enabled/:disabled
+ * @param {Boolean} disabled true for :disabled; false for :enabled
+ */
+function createDisabledPseudo( disabled ) {
+
+       // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable
+       return function( elem ) {
+
+               // Only certain elements can match :enabled or :disabled
+               // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled
+               // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled
+               if ( "form" in elem ) {
+
+                       // Check for inherited disabledness on relevant non-disabled elements:
+                       // * listed form-associated elements in a disabled fieldset
+                       //   https://html.spec.whatwg.org/multipage/forms.html#category-listed
+                       //   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled
+                       // * option elements in a disabled optgroup
+                       //   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled
+                       // All such elements have a "form" property.
+                       if ( elem.parentNode && elem.disabled === false ) {
+
+                               // Option elements defer to a parent optgroup if present
+                               if ( "label" in elem ) {
+                                       if ( "label" in elem.parentNode ) {
+                                               return elem.parentNode.disabled === disabled;
+                                       } else {
+                                               return elem.disabled === disabled;
+                                       }
+                               }
+
+                               // Support: IE 6 - 11
+                               // Use the isDisabled shortcut property to check for disabled fieldset ancestors
+                               return elem.isDisabled === disabled ||
+
+                                       // Where there is no isDisabled, check manually
+                                       /* jshint -W018 */
+                                       elem.isDisabled !== !disabled &&
+                                               disabledAncestor( elem ) === disabled;
+                       }
+
+                       return elem.disabled === disabled;
+
+               // Try to winnow out elements that can't be disabled before trusting the disabled property.
+               // Some victims get caught in our net (label, legend, menu, track), but it shouldn't
+               // even exist on them, let alone have a boolean value.
+               } else if ( "label" in elem ) {
+                       return elem.disabled === disabled;
+               }
+
+               // Remaining elements are neither :enabled nor :disabled
+               return false;
+       };
+}
+
+/**
+ * Returns a function to use in pseudos for positionals
+ * @param {Function} fn
+ */
+function createPositionalPseudo( fn ) {
+       return markFunction(function( argument ) {
+               argument = +argument;
+               return markFunction(function( seed, matches ) {
+                       var j,
+                               matchIndexes = fn( [], seed.length, argument ),
+                               i = matchIndexes.length;
+
+                       // Match elements found at the specified indexes
+                       while ( i-- ) {
+                               if ( seed[ (j = matchIndexes[i]) ] ) {
+                                       seed[j] = !(matches[j] = seed[j]);
+                               }
+                       }
+               });
+       });
+}
+
+/**
+ * Checks a node for validity as a Sizzle context
+ * @param {Element|Object=} context
+ * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
+ */
+function testContext( context ) {
+       return context && typeof context.getElementsByTagName !== "undefined" && context;
+}
+
+// Expose support vars for convenience
+support = Sizzle.support = {};
+
+/**
+ * Detects XML nodes
+ * @param {Element|Object} elem An element or a document
+ * @returns {Boolean} True iff elem is a non-HTML XML node
+ */
+isXML = Sizzle.isXML = function( elem ) {
+       // documentElement is verified for cases where it doesn't yet exist
+       // (such as loading iframes in IE - #4833)
+       var documentElement = elem && (elem.ownerDocument || elem).documentElement;
+       return documentElement ? documentElement.nodeName !== "HTML" : false;
+};
+
+/**
+ * Sets document-related variables once based on the current document
+ * @param {Element|Object} [doc] An element or document object to use to set the document
+ * @returns {Object} Returns the current document
+ */
+setDocument = Sizzle.setDocument = function( node ) {
+       var hasCompare, subWindow,
+               doc = node ? node.ownerDocument || node : preferredDoc;
+
+       // Return early if doc is invalid or already selected
+       if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
+               return document;
+       }
+
+       // Update global variables
+       document = doc;
+       docElem = document.documentElement;
+       documentIsHTML = !isXML( document );
+
+       // Support: IE 9-11, Edge
+       // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936)
+       if ( preferredDoc !== document &&
+               (subWindow = document.defaultView) && subWindow.top !== subWindow ) {
+
+               // Support: IE 11, Edge
+               if ( subWindow.addEventListener ) {
+                       subWindow.addEventListener( "unload", unloadHandler, false );
+
+               // Support: IE 9 - 10 only
+               } else if ( subWindow.attachEvent ) {
+                       subWindow.attachEvent( "onunload", unloadHandler );
+               }
+       }
+
+       /* Attributes
+       ---------------------------------------------------------------------- */
+
+       // Support: IE<8
+       // Verify that getAttribute really returns attributes and not properties
+       // (excepting IE8 booleans)
+       support.attributes = assert(function( el ) {
+               el.className = "i";
+               return !el.getAttribute("className");
+       });
+
+       /* getElement(s)By*
+       ---------------------------------------------------------------------- */
+
+       // Check if getElementsByTagName("*") returns only elements
+       support.getElementsByTagName = assert(function( el ) {
+               el.appendChild( document.createComment("") );
+               return !el.getElementsByTagName("*").length;
+       });
+
+       // Support: IE<9
+       support.getElementsByClassName = rnative.test( document.getElementsByClassName );
+
+       // Support: IE<10
+       // Check if getElementById returns elements by name
+       // The broken getElementById methods don't pick up programmatically-set names,
+       // so use a roundabout getElementsByName test
+       support.getById = assert(function( el ) {
+               docElem.appendChild( el ).id = expando;
+               return !document.getElementsByName || !document.getElementsByName( expando ).length;
+       });
+
+       // ID filter and find
+       if ( support.getById ) {
+               Expr.filter["ID"] = function( id ) {
+                       var attrId = id.replace( runescape, funescape );
+                       return function( elem ) {
+                               return elem.getAttribute("id") === attrId;
+                       };
+               };
+               Expr.find["ID"] = function( id, context ) {
+                       if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
+                               var elem = context.getElementById( id );
+                               return elem ? [ elem ] : [];
+                       }
+               };
+       } else {
+               Expr.filter["ID"] =  function( id ) {
+                       var attrId = id.replace( runescape, funescape );
+                       return function( elem ) {
+                               var node = typeof elem.getAttributeNode !== "undefined" &&
+                                       elem.getAttributeNode("id");
+                               return node && node.value === attrId;
+                       };
+               };
+
+               // Support: IE 6 - 7 only
+               // getElementById is not reliable as a find shortcut
+               Expr.find["ID"] = function( id, context ) {
+                       if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
+                               var node, i, elems,
+                                       elem = context.getElementById( id );
+
+                               if ( elem ) {
+
+                                       // Verify the id attribute
+                                       node = elem.getAttributeNode("id");
+                                       if ( node && node.value === id ) {
+                                               return [ elem ];
+                                       }
+
+                                       // Fall back on getElementsByName
+                                       elems = context.getElementsByName( id );
+                                       i = 0;
+                                       while ( (elem = elems[i++]) ) {
+                                               node = elem.getAttributeNode("id");
+                                               if ( node && node.value === id ) {
+                                                       return [ elem ];
+                                               }
+                                       }
+                               }
+
+                               return [];
+                       }
+               };
+       }
+
+       // Tag
+       Expr.find["TAG"] = support.getElementsByTagName ?
+               function( tag, context ) {
+                       if ( typeof context.getElementsByTagName !== "undefined" ) {
+                               return context.getElementsByTagName( tag );
+
+                       // DocumentFragment nodes don't have gEBTN
+                       } else if ( support.qsa ) {
+                               return context.querySelectorAll( tag );
+                       }
+               } :
+
+               function( tag, context ) {
+                       var elem,
+                               tmp = [],
+                               i = 0,
+                               // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too
+                               results = context.getElementsByTagName( tag );
+
+                       // Filter out possible comments
+                       if ( tag === "*" ) {
+                               while ( (elem = results[i++]) ) {
+                                       if ( elem.nodeType === 1 ) {
+                                               tmp.push( elem );
+                                       }
+                               }
+
+                               return tmp;
+                       }
+                       return results;
+               };
+
+       // Class
+       Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) {
+               if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) {
+                       return context.getElementsByClassName( className );
+               }
+       };
+
+       /* QSA/matchesSelector
+       ---------------------------------------------------------------------- */
+
+       // QSA and matchesSelector support
+
+       // matchesSelector(:active) reports false when true (IE9/Opera 11.5)
+       rbuggyMatches = [];
+
+       // qSa(:focus) reports false when true (Chrome 21)
+       // We allow this because of a bug in IE8/9 that throws an error
+       // whenever `document.activeElement` is accessed on an iframe
+       // So, we allow :focus to pass through QSA all the time to avoid the IE error
+       // See https://bugs.jquery.com/ticket/13378
+       rbuggyQSA = [];
+
+       if ( (support.qsa = rnative.test( document.querySelectorAll )) ) {
+               // Build QSA regex
+               // Regex strategy adopted from Diego Perini
+               assert(function( el ) {
+                       // Select is set to empty string on purpose
+                       // This is to test IE's treatment of not explicitly
+                       // setting a boolean content attribute,
+                       // since its presence should be enough
+                       // https://bugs.jquery.com/ticket/12359
+                       docElem.appendChild( el ).innerHTML = "<a id='" + expando + "'></a>" +
+                               "<select id='" + expando + "-\r\\' msallowcapture=''>" +
+                               "<option selected=''></option></select>";
+
+                       // Support: IE8, Opera 11-12.16
+                       // Nothing should be selected when empty strings follow ^= or $= or *=
+                       // The test attribute must be unknown in Opera but "safe" for WinRT
+                       // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
+                       if ( el.querySelectorAll("[msallowcapture^='']").length ) {
+                               rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
+                       }
+
+                       // Support: IE8
+                       // Boolean attributes and "value" are not treated correctly
+                       if ( !el.querySelectorAll("[selected]").length ) {
+                               rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
+                       }
+
+                       // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+
+                       if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) {
+                               rbuggyQSA.push("~=");
+                       }
+
+                       // Webkit/Opera - :checked should return selected option elements
+                       // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
+                       // IE8 throws error here and will not see later tests
+                       if ( !el.querySelectorAll(":checked").length ) {
+                               rbuggyQSA.push(":checked");
+                       }
+
+                       // Support: Safari 8+, iOS 8+
+                       // https://bugs.webkit.org/show_bug.cgi?id=136851
+                       // In-page `selector#id sibling-combinator selector` fails
+                       if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) {
+                               rbuggyQSA.push(".#.+[+~]");
+                       }
+               });
+
+               assert(function( el ) {
+                       el.innerHTML = "<a href='' disabled='disabled'></a>" +
+                               "<select disabled='disabled'><option/></select>";
+
+                       // Support: Windows 8 Native Apps
+                       // The type and name attributes are restricted during .innerHTML assignment
+                       var input = document.createElement("input");
+                       input.setAttribute( "type", "hidden" );
+                       el.appendChild( input ).setAttribute( "name", "D" );
+
+                       // Support: IE8
+                       // Enforce case-sensitivity of name attribute
+                       if ( el.querySelectorAll("[name=d]").length ) {
+                               rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" );
+                       }
+
+                       // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
+                       // IE8 throws error here and will not see later tests
+                       if ( el.querySelectorAll(":enabled").length !== 2 ) {
+                               rbuggyQSA.push( ":enabled", ":disabled" );
+                       }
+
+                       // Support: IE9-11+
+                       // IE's :disabled selector does not pick up the children of disabled fieldsets
+                       docElem.appendChild( el ).disabled = true;
+                       if ( el.querySelectorAll(":disabled").length !== 2 ) {
+                               rbuggyQSA.push( ":enabled", ":disabled" );
+                       }
+
+                       // Opera 10-11 does not throw on post-comma invalid pseudos
+                       el.querySelectorAll("*,:x");
+                       rbuggyQSA.push(",.*:");
+               });
+       }
+
+       if ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||
+               docElem.webkitMatchesSelector ||
+               docElem.mozMatchesSelector ||
+               docElem.oMatchesSelector ||
+               docElem.msMatchesSelector) )) ) {
+
+               assert(function( el ) {
+                       // Check to see if it's possible to do matchesSelector
+                       // on a disconnected node (IE 9)
+                       support.disconnectedMatch = matches.call( el, "*" );
+
+                       // This should fail with an exception
+                       // Gecko does not error, returns false instead
+                       matches.call( el, "[s!='']:x" );
+                       rbuggyMatches.push( "!=", pseudos );
+               });
+       }
+
+       rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") );
+       rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") );
+
+       /* Contains
+       ---------------------------------------------------------------------- */
+       hasCompare = rnative.test( docElem.compareDocumentPosition );
+
+       // Element contains another
+       // Purposefully self-exclusive
+       // As in, an element does not contain itself
+       contains = hasCompare || rnative.test( docElem.contains ) ?
+               function( a, b ) {
+                       var adown = a.nodeType === 9 ? a.documentElement : a,
+                               bup = b && b.parentNode;
+                       return a === bup || !!( bup && bup.nodeType === 1 && (
+                               adown.contains ?
+                                       adown.contains( bup ) :
+                                       a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
+                       ));
+               } :
+               function( a, b ) {
+                       if ( b ) {
+                               while ( (b = b.parentNode) ) {
+                                       if ( b === a ) {
+                                               return true;
+                                       }
+                               }
+                       }
+                       return false;
+               };
+
+       /* Sorting
+       ---------------------------------------------------------------------- */
+
+       // Document order sorting
+       sortOrder = hasCompare ?
+       function( a, b ) {
+
+               // Flag for duplicate removal
+               if ( a === b ) {
+                       hasDuplicate = true;
+                       return 0;
+               }
+
+               // Sort on method existence if only one input has compareDocumentPosition
+               var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
+               if ( compare ) {
+                       return compare;
+               }
+
+               // Calculate position if both inputs belong to the same document
+               compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?
+                       a.compareDocumentPosition( b ) :
+
+                       // Otherwise we know they are disconnected
+                       1;
+
+               // Disconnected nodes
+               if ( compare & 1 ||
+                       (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {
+
+                       // Choose the first element that is related to our preferred document
+                       if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {
+                               return -1;
+                       }
+                       if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {
+                               return 1;
+                       }
+
+                       // Maintain original order
+                       return sortInput ?
+                               ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
+                               0;
+               }
+
+               return compare & 4 ? -1 : 1;
+       } :
+       function( a, b ) {
+               // Exit early if the nodes are identical
+               if ( a === b ) {
+                       hasDuplicate = true;
+                       return 0;
+               }
+
+               var cur,
+                       i = 0,
+                       aup = a.parentNode,
+                       bup = b.parentNode,
+                       ap = [ a ],
+                       bp = [ b ];
+
+               // Parentless nodes are either documents or disconnected
+               if ( !aup || !bup ) {
+                       return a === document ? -1 :
+                               b === document ? 1 :
+                               aup ? -1 :
+                               bup ? 1 :
+                               sortInput ?
+                               ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
+                               0;
+
+               // If the nodes are siblings, we can do a quick check
+               } else if ( aup === bup ) {
+                       return siblingCheck( a, b );
+               }
+
+               // Otherwise we need full lists of their ancestors for comparison
+               cur = a;
+               while ( (cur = cur.parentNode) ) {
+                       ap.unshift( cur );
+               }
+               cur = b;
+               while ( (cur = cur.parentNode) ) {
+                       bp.unshift( cur );
+               }
+
+               // Walk down the tree looking for a discrepancy
+               while ( ap[i] === bp[i] ) {
+                       i++;
+               }
+
+               return i ?
+                       // Do a sibling check if the nodes have a common ancestor
+                       siblingCheck( ap[i], bp[i] ) :
+
+                       // Otherwise nodes in our document sort first
+                       ap[i] === preferredDoc ? -1 :
+                       bp[i] === preferredDoc ? 1 :
+                       0;
+       };
+
+       return document;
+};
+
+Sizzle.matches = function( expr, elements ) {
+       return Sizzle( expr, null, null, elements );
+};
+
+Sizzle.matchesSelector = function( elem, expr ) {
+       // Set document vars if needed
+       if ( ( elem.ownerDocument || elem ) !== document ) {
+               setDocument( elem );
+       }
+
+       // Make sure that attribute selectors are quoted
+       expr = expr.replace( rattributeQuotes, "='$1']" );
+
+       if ( support.matchesSelector && documentIsHTML &&
+               !compilerCache[ expr + " " ] &&
+               ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&
+               ( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {
+
+               try {
+                       var ret = matches.call( elem, expr );
+
+                       // IE 9's matchesSelector returns false on disconnected nodes
+                       if ( ret || support.disconnectedMatch ||
+                                       // As well, disconnected nodes are said to be in a document
+                                       // fragment in IE 9
+                                       elem.document && elem.document.nodeType !== 11 ) {
+                               return ret;
+                       }
+               } catch (e) {}
+       }
+
+       return Sizzle( expr, document, null, [ elem ] ).length > 0;
+};
+
+Sizzle.contains = function( context, elem ) {
+       // Set document vars if needed
+       if ( ( context.ownerDocument || context ) !== document ) {
+               setDocument( context );
+       }
+       return contains( context, elem );
+};
+
+Sizzle.attr = function( elem, name ) {
+       // Set document vars if needed
+       if ( ( elem.ownerDocument || elem ) !== document ) {
+               setDocument( elem );
+       }
+
+       var fn = Expr.attrHandle[ name.toLowerCase() ],
+               // Don't get fooled by Object.prototype properties (jQuery #13807)
+               val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
+                       fn( elem, name, !documentIsHTML ) :
+                       undefined;
+
+       return val !== undefined ?
+               val :
+               support.attributes || !documentIsHTML ?
+                       elem.getAttribute( name ) :
+                       (val = elem.getAttributeNode(name)) && val.specified ?
+                               val.value :
+                               null;
+};
+
+Sizzle.escape = function( sel ) {
+       return (sel + "").replace( rcssescape, fcssescape );
+};
+
+Sizzle.error = function( msg ) {
+       throw new Error( "Syntax error, unrecognized expression: " + msg );
+};
+
+/**
+ * Document sorting and removing duplicates
+ * @param {ArrayLike} results
+ */
+Sizzle.uniqueSort = function( results ) {
+       var elem,
+               duplicates = [],
+               j = 0,
+               i = 0;
+
+       // Unless we *know* we can detect duplicates, assume their presence
+       hasDuplicate = !support.detectDuplicates;
+       sortInput = !support.sortStable && results.slice( 0 );
+       results.sort( sortOrder );
+
+       if ( hasDuplicate ) {
+               while ( (elem = results[i++]) ) {
+                       if ( elem === results[ i ] ) {
+                               j = duplicates.push( i );
+                       }
+               }
+               while ( j-- ) {
+                       results.splice( duplicates[ j ], 1 );
+               }
+       }
+
+       // Clear input after sorting to release objects
+       // See https://github.com/jquery/sizzle/pull/225
+       sortInput = null;
+
+       return results;
+};
+
+/**
+ * Utility function for retrieving the text value of an array of DOM nodes
+ * @param {Array|Element} elem
+ */
+getText = Sizzle.getText = function( elem ) {
+       var node,
+               ret = "",
+               i = 0,
+               nodeType = elem.nodeType;
+
+       if ( !nodeType ) {
+               // If no nodeType, this is expected to be an array
+               while ( (node = elem[i++]) ) {
+                       // Do not traverse comment nodes
+                       ret += getText( node );
+               }
+       } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
+               // Use textContent for elements
+               // innerText usage removed for consistency of new lines (jQuery #11153)
+               if ( typeof elem.textContent === "string" ) {
+                       return elem.textContent;
+               } else {
+                       // Traverse its children
+                       for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
+                               ret += getText( elem );
+                       }
+               }
+       } else if ( nodeType === 3 || nodeType === 4 ) {
+               return elem.nodeValue;
+       }
+       // Do not include comment or processing instruction nodes
+
+       return ret;
+};
+
+Expr = Sizzle.selectors = {
+
+       // Can be adjusted by the user
+       cacheLength: 50,
+
+       createPseudo: markFunction,
+
+       match: matchExpr,
+
+       attrHandle: {},
+
+       find: {},
+
+       relative: {
+               ">": { dir: "parentNode", first: true },
+               " ": { dir: "parentNode" },
+               "+": { dir: "previousSibling", first: true },
+               "~": { dir: "previousSibling" }
+       },
+
+       preFilter: {
+               "ATTR": function( match ) {
+                       match[1] = match[1].replace( runescape, funescape );
+
+                       // Move the given value to match[3] whether quoted or unquoted
+                       match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape );
+
+                       if ( match[2] === "~=" ) {
+                               match[3] = " " + match[3] + " ";
+                       }
+
+                       return match.slice( 0, 4 );
+               },
+
+               "CHILD": function( match ) {
+                       /* matches from matchExpr["CHILD"]
+                               1 type (only|nth|...)
+                               2 what (child|of-type)
+                               3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
+                               4 xn-component of xn+y argument ([+-]?\d*n|)
+                               5 sign of xn-component
+                               6 x of xn-component
+                               7 sign of y-component
+                               8 y of y-component
+                       */
+                       match[1] = match[1].toLowerCase();
+
+                       if ( match[1].slice( 0, 3 ) === "nth" ) {
+                               // nth-* requires argument
+                               if ( !match[3] ) {
+                                       Sizzle.error( match[0] );
+                               }
+
+                               // numeric x and y parameters for Expr.filter.CHILD
+                               // remember that false/true cast respectively to 0/1
+                               match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
+                               match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );
+
+                       // other types prohibit arguments
+                       } else if ( match[3] ) {
+                               Sizzle.error( match[0] );
+                       }
+
+                       return match;
+               },
+
+               "PSEUDO": function( match ) {
+                       var excess,
+                               unquoted = !match[6] && match[2];
+
+                       if ( matchExpr["CHILD"].test( match[0] ) ) {
+                               return null;
+                       }
+
+                       // Accept quoted arguments as-is
+                       if ( match[3] ) {
+                               match[2] = match[4] || match[5] || "";
+
+                       // Strip excess characters from unquoted arguments
+                       } else if ( unquoted && rpseudo.test( unquoted ) &&
+                               // Get excess from tokenize (recursively)
+                               (excess = tokenize( unquoted, true )) &&
+                               // advance to the next closing parenthesis
+                               (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {
+
+                               // excess is a negative index
+                               match[0] = match[0].slice( 0, excess );
+                               match[2] = unquoted.slice( 0, excess );
+                       }
+
+                       // Return only captures needed by the pseudo filter method (type and argument)
+                       return match.slice( 0, 3 );
+               }
+       },
+
+       filter: {
+
+               "TAG": function( nodeNameSelector ) {
+                       var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
+                       return nodeNameSelector === "*" ?
+                               function() { return true; } :
+                               function( elem ) {
+                                       return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
+                               };
+               },
+
+               "CLASS": function( className ) {
+                       var pattern = classCache[ className + " " ];
+
+                       return pattern ||
+                               (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
+                               classCache( className, function( elem ) {
+                                       return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" );
+                               });
+               },
+
+               "ATTR": function( name, operator, check ) {
+                       return function( elem ) {
+                               var result = Sizzle.attr( elem, name );
+
+                               if ( result == null ) {
+                                       return operator === "!=";
+                               }
+                               if ( !operator ) {
+                                       return true;
+                               }
+
+                               result += "";
+
+                               return operator === "=" ? result === check :
+                                       operator === "!=" ? result !== check :
+                                       operator === "^=" ? check && result.indexOf( check ) === 0 :
+                                       operator === "*=" ? check && result.indexOf( check ) > -1 :
+                                       operator === "$=" ? check && result.slice( -check.length ) === check :
+                                       operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 :
+                                       operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
+                                       false;
+                       };
+               },
+
+               "CHILD": function( type, what, argument, first, last ) {
+                       var simple = type.slice( 0, 3 ) !== "nth",
+                               forward = type.slice( -4 ) !== "last",
+                               ofType = what === "of-type";
+
+                       return first === 1 && last === 0 ?
+
+                               // Shortcut for :nth-*(n)
+                               function( elem ) {
+                                       return !!elem.parentNode;
+                               } :
+
+                               function( elem, context, xml ) {
+                                       var cache, uniqueCache, outerCache, node, nodeIndex, start,
+                                               dir = simple !== forward ? "nextSibling" : "previousSibling",
+                                               parent = elem.parentNode,
+                                               name = ofType && elem.nodeName.toLowerCase(),
+                                               useCache = !xml && !ofType,
+                                               diff = false;
+
+                                       if ( parent ) {
+
+                                               // :(first|last|only)-(child|of-type)
+                                               if ( simple ) {
+                                                       while ( dir ) {
+                                                               node = elem;
+                                                               while ( (node = node[ dir ]) ) {
+                                                                       if ( ofType ?
+                                                                               node.nodeName.toLowerCase() === name :
+                                                                               node.nodeType === 1 ) {
+
+                                                                               return false;
+                                                                       }
+                                                               }
+                                                               // Reverse direction for :only-* (if we haven't yet done so)
+                                                               start = dir = type === "only" && !start && "nextSibling";
+                                                       }
+                                                       return true;
+                                               }
+
+                                               start = [ forward ? parent.firstChild : parent.lastChild ];
+
+                                               // non-xml :nth-child(...) stores cache data on `parent`
+                                               if ( forward && useCache ) {
+
+                                                       // Seek `elem` from a previously-cached index
+
+                                                       // ...in a gzip-friendly way
+                                                       node = parent;
+                                                       outerCache = node[ expando ] || (node[ expando ] = {});
+
+                                                       // Support: IE <9 only
+                                                       // Defend against cloned attroperties (jQuery gh-1709)
+                                                       uniqueCache = outerCache[ node.uniqueID ] ||
+                                                               (outerCache[ node.uniqueID ] = {});
+
+                                                       cache = uniqueCache[ type ] || [];
+                                                       nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
+                                                       diff = nodeIndex && cache[ 2 ];
+                                                       node = nodeIndex && parent.childNodes[ nodeIndex ];
+
+                                                       while ( (node = ++nodeIndex && node && node[ dir ] ||
+
+                                                               // Fallback to seeking `elem` from the start
+                                                               (diff = nodeIndex = 0) || start.pop()) ) {
+
+                                                               // When found, cache indexes on `parent` and break
+                                                               if ( node.nodeType === 1 && ++diff && node === elem ) {
+                                                                       uniqueCache[ type ] = [ dirruns, nodeIndex, diff ];
+                                                                       break;
+                                                               }
+                                                       }
+
+                                               } else {
+                                                       // Use previously-cached element index if available
+                                                       if ( useCache ) {
+                                                               // ...in a gzip-friendly way
+                                                               node = elem;
+                                                               outerCache = node[ expando ] || (node[ expando ] = {});
+
+                                                               // Support: IE <9 only
+                                                               // Defend against cloned attroperties (jQuery gh-1709)
+                                                               uniqueCache = outerCache[ node.uniqueID ] ||
+                                                                       (outerCache[ node.uniqueID ] = {});
+
+                                                               cache = uniqueCache[ type ] || [];
+                                                               nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
+                                                               diff = nodeIndex;
+                                                       }
+
+                                                       // xml :nth-child(...)
+                                                       // or :nth-last-child(...) or :nth(-last)?-of-type(...)
+                                                       if ( diff === false ) {
+                                                               // Use the same loop as above to seek `elem` from the start
+                                                               while ( (node = ++nodeIndex && node && node[ dir ] ||
+                                                                       (diff = nodeIndex = 0) || start.pop()) ) {
+
+                                                                       if ( ( ofType ?
+                                                                               node.nodeName.toLowerCase() === name :
+                                                                               node.nodeType === 1 ) &&
+                                                                               ++diff ) {
+
+                                                                               // Cache the index of each encountered element
+                                                                               if ( useCache ) {
+                                                                                       outerCache = node[ expando ] || (node[ expando ] = {});
+
+                                                                                       // Support: IE <9 only
+                                                                                       // Defend against cloned attroperties (jQuery gh-1709)
+                                                                                       uniqueCache = outerCache[ node.uniqueID ] ||
+                                                                                               (outerCache[ node.uniqueID ] = {});
+
+                                                                                       uniqueCache[ type ] = [ dirruns, diff ];
+                                                                               }
+
+                                                                               if ( node === elem ) {
+                                                                                       break;
+                                                                               }
+                                                                       }
+                                                               }
+                                                       }
+                                               }
+
+                                               // Incorporate the offset, then check against cycle size
+                                               diff -= last;
+                                               return diff === first || ( diff % first === 0 && diff / first >= 0 );
+                                       }
+                               };
+               },
+
+               "PSEUDO": function( pseudo, argument ) {
+                       // pseudo-class names are case-insensitive
+                       // http://www.w3.org/TR/selectors/#pseudo-classes
+                       // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
+                       // Remember that setFilters inherits from pseudos
+                       var args,
+                               fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
+                                       Sizzle.error( "unsupported pseudo: " + pseudo );
+
+                       // The user may use createPseudo to indicate that
+                       // arguments are needed to create the filter function
+                       // just as Sizzle does
+                       if ( fn[ expando ] ) {
+                               return fn( argument );
+                       }
+
+                       // But maintain support for old signatures
+                       if ( fn.length > 1 ) {
+                               args = [ pseudo, pseudo, "", argument ];
+                               return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
+                                       markFunction(function( seed, matches ) {
+                                               var idx,
+                                                       matched = fn( seed, argument ),
+                                                       i = matched.length;
+                                               while ( i-- ) {
+                                                       idx = indexOf( seed, matched[i] );
+                                                       seed[ idx ] = !( matches[ idx ] = matched[i] );
+                                               }
+                                       }) :
+                                       function( elem ) {
+                                               return fn( elem, 0, args );
+                                       };
+                       }
+
+                       return fn;
+               }
+       },
+
+       pseudos: {
+               // Potentially complex pseudos
+               "not": markFunction(function( selector ) {
+                       // Trim the selector passed to compile
+                       // to avoid treating leading and trailing
+                       // spaces as combinators
+                       var input = [],
+                               results = [],
+                               matcher = compile( selector.replace( rtrim, "$1" ) );
+
+                       return matcher[ expando ] ?
+                               markFunction(function( seed, matches, context, xml ) {
+                                       var elem,
+                                               unmatched = matcher( seed, null, xml, [] ),
+                                               i = seed.length;
+
+                                       // Match elements unmatched by `matcher`
+                                       while ( i-- ) {
+                                               if ( (elem = unmatched[i]) ) {
+                                                       seed[i] = !(matches[i] = elem);
+                                               }
+                                       }
+                               }) :
+                               function( elem, context, xml ) {
+                                       input[0] = elem;
+                                       matcher( input, null, xml, results );
+                                       // Don't keep the element (issue #299)
+                                       input[0] = null;
+                                       return !results.pop();
+                               };
+               }),
+
+               "has": markFunction(function( selector ) {
+                       return function( elem ) {
+                               return Sizzle( selector, elem ).length > 0;
+                       };
+               }),
+
+               "contains": markFunction(function( text ) {
+                       text = text.replace( runescape, funescape );
+                       return function( elem ) {
+                               return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;
+                       };
+               }),
+
+               // "Whether an element is represented by a :lang() selector
+               // is based solely on the element's language value
+               // being equal to the identifier C,
+               // or beginning with the identifier C immediately followed by "-".
+               // The matching of C against the element's language value is performed case-insensitively.
+               // The identifier C does not have to be a valid language name."
+               // http://www.w3.org/TR/selectors/#lang-pseudo
+               "lang": markFunction( function( lang ) {
+                       // lang value must be a valid identifier
+                       if ( !ridentifier.test(lang || "") ) {
+                               Sizzle.error( "unsupported lang: " + lang );
+                       }
+                       lang = lang.replace( runescape, funescape ).toLowerCase();
+                       return function( elem ) {
+                               var elemLang;
+                               do {
+                                       if ( (elemLang = documentIsHTML ?
+                                               elem.lang :
+                                               elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) {
+
+                                               elemLang = elemLang.toLowerCase();
+                                               return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
+                                       }
+                               } while ( (elem = elem.parentNode) && elem.nodeType === 1 );
+                               return false;
+                       };
+               }),
+
+               // Miscellaneous
+               "target": function( elem ) {
+                       var hash = window.location && window.location.hash;
+                       return hash && hash.slice( 1 ) === elem.id;
+               },
+
+               "root": function( elem ) {
+                       return elem === docElem;
+               },
+
+               "focus": function( elem ) {
+                       return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
+               },
+
+               // Boolean properties
+               "enabled": createDisabledPseudo( false ),
+               "disabled": createDisabledPseudo( true ),
+
+               "checked": function( elem ) {
+                       // In CSS3, :checked should return both checked and selected elements
+                       // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
+                       var nodeName = elem.nodeName.toLowerCase();
+                       return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
+               },
+
+               "selected": function( elem ) {
+                       // Accessing this property makes selected-by-default
+                       // options in Safari work properly
+                       if ( elem.parentNode ) {
+                               elem.parentNode.selectedIndex;
+                       }
+
+                       return elem.selected === true;
+               },
+
+               // Contents
+               "empty": function( elem ) {
+                       // http://www.w3.org/TR/selectors/#empty-pseudo
+                       // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
+                       //   but not by others (comment: 8; processing instruction: 7; etc.)
+                       // nodeType < 6 works because attributes (2) do not appear as children
+                       for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
+                               if ( elem.nodeType < 6 ) {
+                                       return false;
+                               }
+                       }
+                       return true;
+               },
+
+               "parent": function( elem ) {
+                       return !Expr.pseudos["empty"]( elem );
+               },
+
+               // Element/input types
+               "header": function( elem ) {
+                       return rheader.test( elem.nodeName );
+               },
+
+               "input": function( elem ) {
+                       return rinputs.test( elem.nodeName );
+               },
+
+               "button": function( elem ) {
+                       var name = elem.nodeName.toLowerCase();
+                       return name === "input" && elem.type === "button" || name === "button";
+               },
+
+               "text": function( elem ) {
+                       var attr;
+                       return elem.nodeName.toLowerCase() === "input" &&
+                               elem.type === "text" &&
+
+                               // Support: IE<8
+                               // New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
+                               ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" );
+               },
+
+               // Position-in-collection
+               "first": createPositionalPseudo(function() {
+                       return [ 0 ];
+               }),
+
+               "last": createPositionalPseudo(function( matchIndexes, length ) {
+                       return [ length - 1 ];
+               }),
+
+               "eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
+                       return [ argument < 0 ? argument + length : argument ];
+               }),
+
+               "even": createPositionalPseudo(function( matchIndexes, length ) {
+                       var i = 0;
+                       for ( ; i < length; i += 2 ) {
+                               matchIndexes.push( i );
+                       }
+                       return matchIndexes;
+               }),
+
+               "odd": createPositionalPseudo(function( matchIndexes, length ) {
+                       var i = 1;
+                       for ( ; i < length; i += 2 ) {
+                               matchIndexes.push( i );
+                       }
+                       return matchIndexes;
+               }),
+
+               "lt": createPositionalPseudo(function( matchIndexes, length, argument ) {
+                       var i = argument < 0 ? argument + length : argument;
+                       for ( ; --i >= 0; ) {
+                               matchIndexes.push( i );
+                       }
+                       return matchIndexes;
+               }),
+
+               "gt": createPositionalPseudo(function( matchIndexes, length, argument ) {
+                       var i = argument < 0 ? argument + length : argument;
+                       for ( ; ++i < length; ) {
+                               matchIndexes.push( i );
+                       }
+                       return matchIndexes;
+               })
+       }
+};
+
+Expr.pseudos["nth"] = Expr.pseudos["eq"];
+
+// Add button/input type pseudos
+for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
+       Expr.pseudos[ i ] = createInputPseudo( i );
+}
+for ( i in { submit: true, reset: true } ) {
+       Expr.pseudos[ i ] = createButtonPseudo( i );
+}
+
+// Easy API for creating new setFilters
+function setFilters() {}
+setFilters.prototype = Expr.filters = Expr.pseudos;
+Expr.setFilters = new setFilters();
+
+tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
+       var matched, match, tokens, type,
+               soFar, groups, preFilters,
+               cached = tokenCache[ selector + " " ];
+
+       if ( cached ) {
+               return parseOnly ? 0 : cached.slice( 0 );
+       }
+
+       soFar = selector;
+       groups = [];
+       preFilters = Expr.preFilter;
+
+       while ( soFar ) {
+
+               // Comma and first run
+               if ( !matched || (match = rcomma.exec( soFar )) ) {
+                       if ( match ) {
+                               // Don't consume trailing commas as valid
+                               soFar = soFar.slice( match[0].length ) || soFar;
+                       }
+                       groups.push( (tokens = []) );
+               }
+
+               matched = false;
+
+               // Combinators
+               if ( (match = rcombinators.exec( soFar )) ) {
+                       matched = match.shift();
+                       tokens.push({
+                               value: matched,
+                               // Cast descendant combinators to space
+                               type: match[0].replace( rtrim, " " )
+                       });
+                       soFar = soFar.slice( matched.length );
+               }
+
+               // Filters
+               for ( type in Expr.filter ) {
+                       if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
+                               (match = preFilters[ type ]( match ))) ) {
+                               matched = match.shift();
+                               tokens.push({
+                                       value: matched,
+                                       type: type,
+                                       matches: match
+                               });
+                               soFar = soFar.slice( matched.length );
+                       }
+               }
+
+               if ( !matched ) {
+                       break;
+               }
+       }
+
+       // Return the length of the invalid excess
+       // if we're just parsing
+       // Otherwise, throw an error or return tokens
+       return parseOnly ?
+               soFar.length :
+               soFar ?
+                       Sizzle.error( selector ) :
+                       // Cache the tokens
+                       tokenCache( selector, groups ).slice( 0 );
+};
+
+function toSelector( tokens ) {
+       var i = 0,
+               len = tokens.length,
+               selector = "";
+       for ( ; i < len; i++ ) {
+               selector += tokens[i].value;
+       }
+       return selector;
+}
+
+function addCombinator( matcher, combinator, base ) {
+       var dir = combinator.dir,
+               skip = combinator.next,
+               key = skip || dir,
+               checkNonElements = base && key === "parentNode",
+               doneName = done++;
+
+       return combinator.first ?
+               // Check against closest ancestor/preceding element
+               function( elem, context, xml ) {
+                       while ( (elem = elem[ dir ]) ) {
+                               if ( elem.nodeType === 1 || checkNonElements ) {
+                                       return matcher( elem, context, xml );
+                               }
+                       }
+                       return false;
+               } :
+
+               // Check against all ancestor/preceding elements
+               function( elem, context, xml ) {
+                       var oldCache, uniqueCache, outerCache,
+                               newCache = [ dirruns, doneName ];
+
+                       // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching
+                       if ( xml ) {
+                               while ( (elem = elem[ dir ]) ) {
+                                       if ( elem.nodeType === 1 || checkNonElements ) {
+                                               if ( matcher( elem, context, xml ) ) {
+                                                       return true;
+                                               }
+                                       }
+                               }
+                       } else {
+                               while ( (elem = elem[ dir ]) ) {
+                                       if ( elem.nodeType === 1 || checkNonElements ) {
+                                               outerCache = elem[ expando ] || (elem[ expando ] = {});
+
+                                               // Support: IE <9 only
+                                               // Defend against cloned attroperties (jQuery gh-1709)
+                                               uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});
+
+                                               if ( skip && skip === elem.nodeName.toLowerCase() ) {
+                                                       elem = elem[ dir ] || elem;
+                                               } else if ( (oldCache = uniqueCache[ key ]) &&
+                                                       oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {
+
+                                                       // Assign to newCache so results back-propagate to previous elements
+                                                       return (newCache[ 2 ] = oldCache[ 2 ]);
+                                               } else {
+                                                       // Reuse newcache so results back-propagate to previous elements
+                                                       uniqueCache[ key ] = newCache;
+
+                                                       // A match means we're done; a fail means we have to keep checking
+                                                       if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {
+                                                               return true;
+                                                       }
+                                               }
+                                       }
+                               }
+                       }
+                       return false;
+               };
+}
+
+function elementMatcher( matchers ) {
+       return matchers.length > 1 ?
+               function( elem, context, xml ) {
+                       var i = matchers.length;
+                       while ( i-- ) {
+                               if ( !matchers[i]( elem, context, xml ) ) {
+                                       return false;
+                               }
+                       }
+                       return true;
+               } :
+               matchers[0];
+}
+
+function multipleContexts( selector, contexts, results ) {
+       var i = 0,
+               len = contexts.length;
+       for ( ; i < len; i++ ) {
+               Sizzle( selector, contexts[i], results );
+       }
+       return results;
+}
+
+function condense( unmatched, map, filter, context, xml ) {
+       var elem,
+               newUnmatched = [],
+               i = 0,
+               len = unmatched.length,
+               mapped = map != null;
+
+       for ( ; i < len; i++ ) {
+               if ( (elem = unmatched[i]) ) {
+                       if ( !filter || filter( elem, context, xml ) ) {
+                               newUnmatched.push( elem );
+                               if ( mapped ) {
+                                       map.push( i );
+                               }
+                       }
+               }
+       }
+
+       return newUnmatched;
+}
+
+function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
+       if ( postFilter && !postFilter[ expando ] ) {
+               postFilter = setMatcher( postFilter );
+       }
+       if ( postFinder && !postFinder[ expando ] ) {
+               postFinder = setMatcher( postFinder, postSelector );
+       }
+       return markFunction(function( seed, results, context, xml ) {
+               var temp, i, elem,
+                       preMap = [],
+                       postMap = [],
+                       preexisting = results.length,
+
+                       // Get initial elements from seed or context
+                       elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),
+
+                       // Prefilter to get matcher input, preserving a map for seed-results synchronization
+                       matcherIn = preFilter && ( seed || !selector ) ?
+                               condense( elems, preMap, preFilter, context, xml ) :
+                               elems,
+
+                       matcherOut = matcher ?
+                               // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
+                               postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
+
+                                       // ...intermediate processing is necessary
+                                       [] :
+
+                                       // ...otherwise use results directly
+                                       results :
+                               matcherIn;
+
+               // Find primary matches
+               if ( matcher ) {
+                       matcher( matcherIn, matcherOut, context, xml );
+               }
+
+               // Apply postFilter
+               if ( postFilter ) {
+                       temp = condense( matcherOut, postMap );
+                       postFilter( temp, [], context, xml );
+
+                       // Un-match failing elements by moving them back to matcherIn
+                       i = temp.length;
+                       while ( i-- ) {
+                               if ( (elem = temp[i]) ) {
+                                       matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
+                               }
+                       }
+               }
+
+               if ( seed ) {
+                       if ( postFinder || preFilter ) {
+                               if ( postFinder ) {
+                                       // Get the final matcherOut by condensing this intermediate into postFinder contexts
+                                       temp = [];
+                                       i = matcherOut.length;
+                                       while ( i-- ) {
+                                               if ( (elem = matcherOut[i]) ) {
+                                                       // Restore matcherIn since elem is not yet a final match
+                                                       temp.push( (matcherIn[i] = elem) );
+                                               }
+                                       }
+                                       postFinder( null, (matcherOut = []), temp, xml );
+                               }
+
+                               // Move matched elements from seed to results to keep them synchronized
+                               i = matcherOut.length;
+                               while ( i-- ) {
+                                       if ( (elem = matcherOut[i]) &&
+                                               (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {
+
+                                               seed[temp] = !(results[temp] = elem);
+                                       }
+                               }
+                       }
+
+               // Add elements to results, through postFinder if defined
+               } else {
+                       matcherOut = condense(
+                               matcherOut === results ?
+                                       matcherOut.splice( preexisting, matcherOut.length ) :
+                                       matcherOut
+                       );
+                       if ( postFinder ) {
+                               postFinder( null, results, matcherOut, xml );
+                       } else {
+                               push.apply( results, matcherOut );
+                       }
+               }
+       });
+}
+
+function matcherFromTokens( tokens ) {
+       var checkContext, matcher, j,
+               len = tokens.length,
+               leadingRelative = Expr.relative[ tokens[0].type ],
+               implicitRelative = leadingRelative || Expr.relative[" "],
+               i = leadingRelative ? 1 : 0,
+
+               // The foundational matcher ensures that elements are reachable from top-level context(s)
+               matchContext = addCombinator( function( elem ) {
+                       return elem === checkContext;
+               }, implicitRelative, true ),
+               matchAnyContext = addCombinator( function( elem ) {
+                       return indexOf( checkContext, elem ) > -1;
+               }, implicitRelative, true ),
+               matchers = [ function( elem, context, xml ) {
+                       var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
+                               (checkContext = context).nodeType ?
+                                       matchContext( elem, context, xml ) :
+                                       matchAnyContext( elem, context, xml ) );
+                       // Avoid hanging onto element (issue #299)
+                       checkContext = null;
+                       return ret;
+               } ];
+
+       for ( ; i < len; i++ ) {
+               if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
+                       matchers = [ addCombinator(elementMatcher( matchers ), matcher) ];
+               } else {
+                       matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );
+
+                       // Return special upon seeing a positional matcher
+                       if ( matcher[ expando ] ) {
+                               // Find the next relative operator (if any) for proper handling
+                               j = ++i;
+                               for ( ; j < len; j++ ) {
+                                       if ( Expr.relative[ tokens[j].type ] ) {
+                                               break;
+                                       }
+                               }
+                               return setMatcher(
+                                       i > 1 && elementMatcher( matchers ),
+                                       i > 1 && toSelector(
+                                               // If the preceding token was a descendant combinator, insert an implicit any-element `*`
+                                               tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" })
+                                       ).replace( rtrim, "$1" ),
+                                       matcher,
+                                       i < j && matcherFromTokens( tokens.slice( i, j ) ),
+                                       j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
+                                       j < len && toSelector( tokens )
+                               );
+                       }
+                       matchers.push( matcher );
+               }
+       }
+
+       return elementMatcher( matchers );
+}
+
+function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
+       var bySet = setMatchers.length > 0,
+               byElement = elementMatchers.length > 0,
+               superMatcher = function( seed, context, xml, results, outermost ) {
+                       var elem, j, matcher,
+                               matchedCount = 0,
+                               i = "0",
+                               unmatched = seed && [],
+                               setMatched = [],
+                               contextBackup = outermostContext,
+                               // We must always have either seed elements or outermost context
+                               elems = seed || byElement && Expr.find["TAG"]( "*", outermost ),
+                               // Use integer dirruns iff this is the outermost matcher
+                               dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),
+                               len = elems.length;
+
+                       if ( outermost ) {
+                               outermostContext = context === document || context || outermost;
+                       }
+
+                       // Add elements passing elementMatchers directly to results
+                       // Support: IE<9, Safari
+                       // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id
+                       for ( ; i !== len && (elem = elems[i]) != null; i++ ) {
+                               if ( byElement && elem ) {
+                                       j = 0;
+                                       if ( !context && elem.ownerDocument !== document ) {
+                                               setDocument( elem );
+                                               xml = !documentIsHTML;
+                                       }
+                                       while ( (matcher = elementMatchers[j++]) ) {
+                                               if ( matcher( elem, context || document, xml) ) {
+                                                       results.push( elem );
+                                                       break;
+                                               }
+                                       }
+                                       if ( outermost ) {
+                                               dirruns = dirrunsUnique;
+                                       }
+                               }
+
+                               // Track unmatched elements for set filters
+                               if ( bySet ) {
+                                       // They will have gone through all possible matchers
+                                       if ( (elem = !matcher && elem) ) {
+                                               matchedCount--;
+                                       }
+
+                                       // Lengthen the array for every element, matched or not
+                                       if ( seed ) {
+                                               unmatched.push( elem );
+                                       }
+                               }
+                       }
+
+                       // `i` is now the count of elements visited above, and adding it to `matchedCount`
+                       // makes the latter nonnegative.
+                       matchedCount += i;
+
+                       // Apply set filters to unmatched elements
+                       // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`
+                       // equals `i`), unless we didn't visit _any_ elements in the above loop because we have
+                       // no element matchers and no seed.
+                       // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that
+                       // case, which will result in a "00" `matchedCount` that differs from `i` but is also
+                       // numerically zero.
+                       if ( bySet && i !== matchedCount ) {
+                               j = 0;
+                               while ( (matcher = setMatchers[j++]) ) {
+                                       matcher( unmatched, setMatched, context, xml );
+                               }
+
+                               if ( seed ) {
+                                       // Reintegrate element matches to eliminate the need for sorting
+                                       if ( matchedCount > 0 ) {
+                                               while ( i-- ) {
+                                                       if ( !(unmatched[i] || setMatched[i]) ) {
+                                                               setMatched[i] = pop.call( results );
+                                                       }
+                                               }
+                                       }
+
+                                       // Discard index placeholder values to get only actual matches
+                                       setMatched = condense( setMatched );
+                               }
+
+                               // Add matches to results
+                               push.apply( results, setMatched );
+
+                               // Seedless set matches succeeding multiple successful matchers stipulate sorting
+                               if ( outermost && !seed && setMatched.length > 0 &&
+                                       ( matchedCount + setMatchers.length ) > 1 ) {
+
+                                       Sizzle.uniqueSort( results );
+                               }
+                       }
+
+                       // Override manipulation of globals by nested matchers
+                       if ( outermost ) {
+                               dirruns = dirrunsUnique;
+                               outermostContext = contextBackup;
+                       }
+
+                       return unmatched;
+               };
+
+       return bySet ?
+               markFunction( superMatcher ) :
+               superMatcher;
+}
+
+compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {
+       var i,
+               setMatchers = [],
+               elementMatchers = [],
+               cached = compilerCache[ selector + " " ];
+
+       if ( !cached ) {
+               // Generate a function of recursive functions that can be used to check each element
+               if ( !match ) {
+                       match = tokenize( selector );
+               }
+               i = match.length;
+               while ( i-- ) {
+                       cached = matcherFromTokens( match[i] );
+                       if ( cached[ expando ] ) {
+                               setMatchers.push( cached );
+                       } else {
+                               elementMatchers.push( cached );
+                       }
+               }
+
+               // Cache the compiled function
+               cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
+
+               // Save selector and tokenization
+               cached.selector = selector;
+       }
+       return cached;
+};
+
+/**
+ * A low-level selection function that works with Sizzle's compiled
+ *  selector functions
+ * @param {String|Function} selector A selector or a pre-compiled
+ *  selector function built with Sizzle.compile
+ * @param {Element} context
+ * @param {Array} [results]
+ * @param {Array} [seed] A set of elements to match against
+ */
+select = Sizzle.select = function( selector, context, results, seed ) {
+       var i, tokens, token, type, find,
+               compiled = typeof selector === "function" && selector,
+               match = !seed && tokenize( (selector = compiled.selector || selector) );
+
+       results = results || [];
+
+       // Try to minimize operations if there is only one selector in the list and no seed
+       // (the latter of which guarantees us context)
+       if ( match.length === 1 ) {
+
+               // Reduce context if the leading compound selector is an ID
+               tokens = match[0] = match[0].slice( 0 );
+               if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
+                               context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) {
+
+                       context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];
+                       if ( !context ) {
+                               return results;
+
+                       // Precompiled matchers will still verify ancestry, so step up a level
+                       } else if ( compiled ) {
+                               context = context.parentNode;
+                       }
+
+                       selector = selector.slice( tokens.shift().value.length );
+               }
+
+               // Fetch a seed set for right-to-left matching
+               i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length;
+               while ( i-- ) {
+                       token = tokens[i];
+
+                       // Abort if we hit a combinator
+                       if ( Expr.relative[ (type = token.type) ] ) {
+                               break;
+                       }
+                       if ( (find = Expr.find[ type ]) ) {
+                               // Search, expanding context for leading sibling combinators
+                               if ( (seed = find(
+                                       token.matches[0].replace( runescape, funescape ),
+                                       rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context
+                               )) ) {
+
+                                       // If seed is empty or no tokens remain, we can return early
+                                       tokens.splice( i, 1 );
+                                       selector = seed.length && toSelector( tokens );
+                                       if ( !selector ) {
+                                               push.apply( results, seed );
+                                               return results;
+                                       }
+
+                                       break;
+                               }
+                       }
+               }
+       }
+
+       // Compile and execute a filtering function if one is not provided
+       // Provide `match` to avoid retokenization if we modified the selector above
+       ( compiled || compile( selector, match ) )(
+               seed,
+               context,
+               !documentIsHTML,
+               results,
+               !context || rsibling.test( selector ) && testContext( context.parentNode ) || context
+       );
+       return results;
+};
+
+// One-time assignments
+
+// Sort stability
+support.sortStable = expando.split("").sort( sortOrder ).join("") === expando;
+
+// Support: Chrome 14-35+
+// Always assume duplicates if they aren't passed to the comparison function
+support.detectDuplicates = !!hasDuplicate;
+
+// Initialize against the default document
+setDocument();
+
+// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
+// Detached nodes confoundingly follow *each other*
+support.sortDetached = assert(function( el ) {
+       // Should return 1, but returns 4 (following)
+       return el.compareDocumentPosition( document.createElement("fieldset") ) & 1;
+});
+
+// Support: IE<8
+// Prevent attribute/property "interpolation"
+// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
+if ( !assert(function( el ) {
+       el.innerHTML = "<a href='#'></a>";
+       return el.firstChild.getAttribute("href") === "#" ;
+}) ) {
+       addHandle( "type|href|height|width", function( elem, name, isXML ) {
+               if ( !isXML ) {
+                       return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 );
+               }
+       });
+}
+
+// Support: IE<9
+// Use defaultValue in place of getAttribute("value")
+if ( !support.attributes || !assert(function( el ) {
+       el.innerHTML = "<input/>";
+       el.firstChild.setAttribute( "value", "" );
+       return el.firstChild.getAttribute( "value" ) === "";
+}) ) {
+       addHandle( "value", function( elem, name, isXML ) {
+               if ( !isXML && elem.nodeName.toLowerCase() === "input" ) {
+                       return elem.defaultValue;
+               }
+       });
+}
+
+// Support: IE<9
+// Use getAttributeNode to fetch booleans when getAttribute lies
+if ( !assert(function( el ) {
+       return el.getAttribute("disabled") == null;
+}) ) {
+       addHandle( booleans, function( elem, name, isXML ) {
+               var val;
+               if ( !isXML ) {
+                       return elem[ name ] === true ? name.toLowerCase() :
+                                       (val = elem.getAttributeNode( name )) && val.specified ?
+                                       val.value :
+                               null;
+               }
+       });
+}
+
+return Sizzle;
+
+})( window );
+
+
+
+jQuery.find = Sizzle;
+jQuery.expr = Sizzle.selectors;
+
+// Deprecated
+jQuery.expr[ ":" ] = jQuery.expr.pseudos;
+jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;
+jQuery.text = Sizzle.getText;
+jQuery.isXMLDoc = Sizzle.isXML;
+jQuery.contains = Sizzle.contains;
+jQuery.escapeSelector = Sizzle.escape;
+
+
+
+
+var dir = function( elem, dir, until ) {
+       var matched = [],
+               truncate = until !== undefined;
+
+       while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {
+               if ( elem.nodeType === 1 ) {
+                       if ( truncate && jQuery( elem ).is( until ) ) {
+                               break;
+                       }
+                       matched.push( elem );
+               }
+       }
+       return matched;
+};
+
+
+var siblings = function( n, elem ) {
+       var matched = [];
+
+       for ( ; n; n = n.nextSibling ) {
+               if ( n.nodeType === 1 && n !== elem ) {
+                       matched.push( n );
+               }
+       }
+
+       return matched;
+};
+
+
+var rneedsContext = jQuery.expr.match.needsContext;
+
+
+
+function nodeName( elem, name ) {
+
+  return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
+
+};
+var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i );
+
+
+
+var risSimple = /^.[^:#\[\.,]*$/;
+
+// Implement the identical functionality for filter and not
+function winnow( elements, qualifier, not ) {
+       if ( jQuery.isFunction( qualifier ) ) {
+               return jQuery.grep( elements, function( elem, i ) {
+                       return !!qualifier.call( elem, i, elem ) !== not;
+               } );
+       }
+
+       // Single element
+       if ( qualifier.nodeType ) {
+               return jQuery.grep( elements, function( elem ) {
+                       return ( elem === qualifier ) !== not;
+               } );
+       }
+
+       // Arraylike of elements (jQuery, arguments, Array)
+       if ( typeof qualifier !== "string" ) {
+               return jQuery.grep( elements, function( elem ) {
+                       return ( indexOf.call( qualifier, elem ) > -1 ) !== not;
+               } );
+       }
+
+       // Simple selector that can be filtered directly, removing non-Elements
+       if ( risSimple.test( qualifier ) ) {
+               return jQuery.filter( qualifier, elements, not );
+       }
+
+       // Complex selector, compare the two sets, removing non-Elements
+       qualifier = jQuery.filter( qualifier, elements );
+       return jQuery.grep( elements, function( elem ) {
+               return ( indexOf.call( qualifier, elem ) > -1 ) !== not && elem.nodeType === 1;
+       } );
+}
+
+jQuery.filter = function( expr, elems, not ) {
+       var elem = elems[ 0 ];
+
+       if ( not ) {
+               expr = ":not(" + expr + ")";
+       }
+
+       if ( elems.length === 1 && elem.nodeType === 1 ) {
+               return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];
+       }
+
+       return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
+               return elem.nodeType === 1;
+       } ) );
+};
+
+jQuery.fn.extend( {
+       find: function( selector ) {
+               var i, ret,
+                       len = this.length,
+                       self = this;
+
+               if ( typeof selector !== "string" ) {
+                       return this.pushStack( jQuery( selector ).filter( function() {
+                               for ( i = 0; i < len; i++ ) {
+                                       if ( jQuery.contains( self[ i ], this ) ) {
+                                               return true;
+                                       }
+                               }
+                       } ) );
+               }
+
+               ret = this.pushStack( [] );
+
+               for ( i = 0; i < len; i++ ) {
+                       jQuery.find( selector, self[ i ], ret );
+               }
+
+               return len > 1 ? jQuery.uniqueSort( ret ) : ret;
+       },
+       filter: function( selector ) {
+               return this.pushStack( winnow( this, selector || [], false ) );
+       },
+       not: function( selector ) {
+               return this.pushStack( winnow( this, selector || [], true ) );
+       },
+       is: function( selector ) {
+               return !!winnow(
+                       this,
+
+                       // If this is a positional/relative selector, check membership in the returned set
+                       // so $("p:first").is("p:last") won't return true for a doc with two "p".
+                       typeof selector === "string" && rneedsContext.test( selector ) ?
+                               jQuery( selector ) :
+                               selector || [],
+                       false
+               ).length;
+       }
+} );
+
+
+// Initialize a jQuery object
+
+
+// A central reference to the root jQuery(document)
+var rootjQuery,
+
+       // A simple way to check for HTML strings
+       // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
+       // Strict HTML recognition (#11290: must start with <)
+       // Shortcut simple #id case for speed
+       rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,
+
+       init = jQuery.fn.init = function( selector, context, root ) {
+               var match, elem;
+
+               // HANDLE: $(""), $(null), $(undefined), $(false)
+               if ( !selector ) {
+                       return this;
+               }
+
+               // Method init() accepts an alternate rootjQuery
+               // so migrate can support jQuery.sub (gh-2101)
+               root = root || rootjQuery;
+
+               // Handle HTML strings
+               if ( typeof selector === "string" ) {
+                       if ( selector[ 0 ] === "<" &&
+                               selector[ selector.length - 1 ] === ">" &&
+                               selector.length >= 3 ) {
+
+                               // Assume that strings that start and end with <> are HTML and skip the regex check
+                               match = [ null, selector, null ];
+
+                       } else {
+                               match = rquickExpr.exec( selector );
+                       }
+
+                       // Match html or make sure no context is specified for #id
+                       if ( match && ( match[ 1 ] || !context ) ) {
+
+                               // HANDLE: $(html) -> $(array)
+                               if ( match[ 1 ] ) {
+                                       context = context instanceof jQuery ? context[ 0 ] : context;
+
+                                       // Option to run scripts is true for back-compat
+                                       // Intentionally let the error be thrown if parseHTML is not present
+                                       jQuery.merge( this, jQuery.parseHTML(
+                                               match[ 1 ],
+                                               context && context.nodeType ? context.ownerDocument || context : document,
+                                               true
+                                       ) );
+
+                                       // HANDLE: $(html, props)
+                                       if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {
+                                               for ( match in context ) {
+
+                                                       // Properties of context are called as methods if possible
+                                                       if ( jQuery.isFunction( this[ match ] ) ) {
+                                                               this[ match ]( context[ match ] );
+
+                                                       // ...and otherwise set as attributes
+                                                       } else {
+                                                               this.attr( match, context[ match ] );
+                                                       }
+                                               }
+                                       }
+
+                                       return this;
+
+                               // HANDLE: $(#id)
+                               } else {
+                                       elem = document.getElementById( match[ 2 ] );
+
+                                       if ( elem ) {
+
+                                               // Inject the element directly into the jQuery object
+                                               this[ 0 ] = elem;
+                                               this.length = 1;
+                                       }
+                                       return this;
+                               }
+
+                       // HANDLE: $(expr, $(...))
+                       } else if ( !context || context.jquery ) {
+                               return ( context || root ).find( selector );
+
+                       // HANDLE: $(expr, context)
+                       // (which is just equivalent to: $(context).find(expr)
+                       } else {
+                               return this.constructor( context ).find( selector );
+                       }
+
+               // HANDLE: $(DOMElement)
+               } else if ( selector.nodeType ) {
+                       this[ 0 ] = selector;
+                       this.length = 1;
+                       return this;
+
+               // HANDLE: $(function)
+               // Shortcut for document ready
+               } else if ( jQuery.isFunction( selector ) ) {
+                       return root.ready !== undefined ?
+                               root.ready( selector ) :
+
+                               // Execute immediately if ready is not present
+                               selector( jQuery );
+               }
+
+               return jQuery.makeArray( selector, this );
+       };
+
+// Give the init function the jQuery prototype for later instantiation
+init.prototype = jQuery.fn;
+
+// Initialize central reference
+rootjQuery = jQuery( document );
+
+
+var rparentsprev = /^(?:parents|prev(?:Until|All))/,
+
+       // Methods guaranteed to produce a unique set when starting from a unique set
+       guaranteedUnique = {
+               children: true,
+               contents: true,
+               next: true,
+               prev: true
+       };
+
+jQuery.fn.extend( {
+       has: function( target ) {
+               var targets = jQuery( target, this ),
+                       l = targets.length;
+
+               return this.filter( function() {
+                       var i = 0;
+                       for ( ; i < l; i++ ) {
+                               if ( jQuery.contains( this, targets[ i ] ) ) {
+                                       return true;
+                               }
+                       }
+               } );
+       },
+
+       closest: function( selectors, context ) {
+               var cur,
+                       i = 0,
+                       l = this.length,
+                       matched = [],
+                       targets = typeof selectors !== "string" && jQuery( selectors );
+
+               // Positional selectors never match, since there's no _selection_ context
+               if ( !rneedsContext.test( selectors ) ) {
+                       for ( ; i < l; i++ ) {
+                               for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {
+
+                                       // Always skip document fragments
+                                       if ( cur.nodeType < 11 && ( targets ?
+                                               targets.index( cur ) > -1 :
+
+                                               // Don't pass non-elements to Sizzle
+                                               cur.nodeType === 1 &&
+                                                       jQuery.find.matchesSelector( cur, selectors ) ) ) {
+
+                                               matched.push( cur );
+                                               break;
+                                       }
+                               }
+                       }
+               }
+
+               return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );
+       },
+
+       // Determine the position of an element within the set
+       index: function( elem ) {
+
+               // No argument, return index in parent
+               if ( !elem ) {
+                       return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;
+               }
+
+               // Index in selector
+               if ( typeof elem === "string" ) {
+                       return indexOf.call( jQuery( elem ), this[ 0 ] );
+               }
+
+               // Locate the position of the desired element
+               return indexOf.call( this,
+
+                       // If it receives a jQuery object, the first element is used
+                       elem.jquery ? elem[ 0 ] : elem
+               );
+       },
+
+       add: function( selector, context ) {
+               return this.pushStack(
+                       jQuery.uniqueSort(
+                               jQuery.merge( this.get(), jQuery( selector, context ) )
+                       )
+               );
+       },
+
+       addBack: function( selector ) {
+               return this.add( selector == null ?
+                       this.prevObject : this.prevObject.filter( selector )
+               );
+       }
+} );
+
+function sibling( cur, dir ) {
+       while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}
+       return cur;
+}
+
+jQuery.each( {
+       parent: function( elem ) {
+               var parent = elem.parentNode;
+               return parent && parent.nodeType !== 11 ? parent : null;
+       },
+       parents: function( elem ) {
+               return dir( elem, "parentNode" );
+       },
+       parentsUntil: function( elem, i, until ) {
+               return dir( elem, "parentNode", until );
+       },
+       next: function( elem ) {
+               return sibling( elem, "nextSibling" );
+       },
+       prev: function( elem ) {
+               return sibling( elem, "previousSibling" );
+       },
+       nextAll: function( elem ) {
+               return dir( elem, "nextSibling" );
+       },
+       prevAll: function( elem ) {
+               return dir( elem, "previousSibling" );
+       },
+       nextUntil: function( elem, i, until ) {
+               return dir( elem, "nextSibling", until );
+       },
+       prevUntil: function( elem, i, until ) {
+               return dir( elem, "previousSibling", until );
+       },
+       siblings: function( elem ) {
+               return siblings( ( elem.parentNode || {} ).firstChild, elem );
+       },
+       children: function( elem ) {
+               return siblings( elem.firstChild );
+       },
+       contents: function( elem ) {
+        if ( nodeName( elem, "iframe" ) ) {
+            return elem.contentDocument;
+        }
+
+        // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only
+        // Treat the template element as a regular one in browsers that
+        // don't support it.
+        if ( nodeName( elem, "template" ) ) {
+            elem = elem.content || elem;
+        }
+
+        return jQuery.merge( [], elem.childNodes );
+       }
+}, function( name, fn ) {
+       jQuery.fn[ name ] = function( until, selector ) {
+               var matched = jQuery.map( this, fn, until );
+
+               if ( name.slice( -5 ) !== "Until" ) {
+                       selector = until;
+               }
+
+               if ( selector && typeof selector === "string" ) {
+                       matched = jQuery.filter( selector, matched );
+               }
+
+               if ( this.length > 1 ) {
+
+                       // Remove duplicates
+                       if ( !guaranteedUnique[ name ] ) {
+                               jQuery.uniqueSort( matched );
+                       }
+
+                       // Reverse order for parents* and prev-derivatives
+                       if ( rparentsprev.test( name ) ) {
+                               matched.reverse();
+                       }
+               }
+
+               return this.pushStack( matched );
+       };
+} );
+var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g );
+
+
+
+// Convert String-formatted options into Object-formatted ones
+function createOptions( options ) {
+       var object = {};
+       jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {
+               object[ flag ] = true;
+       } );
+       return object;
+}
+
+/*
+ * Create a callback list using the following parameters:
+ *
+ *     options: an optional list of space-separated options that will change how
+ *                     the callback list behaves or a more traditional option object
+ *
+ * By default a callback list will act like an event callback list and can be
+ * "fired" multiple times.
+ *
+ * Possible options:
+ *
+ *     once:                   will ensure the callback list can only be fired once (like a Deferred)
+ *
+ *     memory:                 will keep track of previous values and will call any callback added
+ *                                     after the list has been fired right away with the latest "memorized"
+ *                                     values (like a Deferred)
+ *
+ *     unique:                 will ensure a callback can only be added once (no duplicate in the list)
+ *
+ *     stopOnFalse:    interrupt callings when a callback returns false
+ *
+ */
+jQuery.Callbacks = function( options ) {
+
+       // Convert options from String-formatted to Object-formatted if needed
+       // (we check in cache first)
+       options = typeof options === "string" ?
+               createOptions( options ) :
+               jQuery.extend( {}, options );
+
+       var // Flag to know if list is currently firing
+               firing,
+
+               // Last fire value for non-forgettable lists
+               memory,
+
+               // Flag to know if list was already fired
+               fired,
+
+               // Flag to prevent firing
+               locked,
+
+               // Actual callback list
+               list = [],
+
+               // Queue of execution data for repeatable lists
+               queue = [],
+
+               // Index of currently firing callback (modified by add/remove as needed)
+               firingIndex = -1,
+
+               // Fire callbacks
+               fire = function() {
+
+                       // Enforce single-firing
+                       locked = locked || options.once;
+
+                       // Execute callbacks for all pending executions,
+                       // respecting firingIndex overrides and runtime changes
+                       fired = firing = true;
+                       for ( ; queue.length; firingIndex = -1 ) {
+                               memory = queue.shift();
+                               while ( ++firingIndex < list.length ) {
+
+                                       // Run callback and check for early termination
+                                       if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&
+                                               options.stopOnFalse ) {
+
+                                               // Jump to end and forget the data so .add doesn't re-fire
+                                               firingIndex = list.length;
+                                               memory = false;
+                                       }
+                               }
+                       }
+
+                       // Forget the data if we're done with it
+                       if ( !options.memory ) {
+                               memory = false;
+                       }
+
+                       firing = false;
+
+                       // Clean up if we're done firing for good
+                       if ( locked ) {
+
+                               // Keep an empty list if we have data for future add calls
+                               if ( memory ) {
+                                       list = [];
+
+                               // Otherwise, this object is spent
+                               } else {
+                                       list = "";
+                               }
+                       }
+               },
+
+               // Actual Callbacks object
+               self = {
+
+                       // Add a callback or a collection of callbacks to the list
+                       add: function() {
+                               if ( list ) {
+
+                                       // If we have memory from a past run, we should fire after adding
+                                       if ( memory && !firing ) {
+                                               firingIndex = list.length - 1;
+                                               queue.push( memory );
+                                       }
+
+                                       ( function add( args ) {
+                                               jQuery.each( args, function( _, arg ) {
+                                                       if ( jQuery.isFunction( arg ) ) {
+                                                               if ( !options.unique || !self.has( arg ) ) {
+                                                                       list.push( arg );
+                                                               }
+                                                       } else if ( arg && arg.length && jQuery.type( arg ) !== "string" ) {
+
+                                                               // Inspect recursively
+                                                               add( arg );
+                                                       }
+                                               } );
+                                       } )( arguments );
+
+                                       if ( memory && !firing ) {
+                                               fire();
+                                       }
+                               }
+                               return this;
+                       },
+
+                       // Remove a callback from the list
+                       remove: function() {
+                               jQuery.each( arguments, function( _, arg ) {
+                                       var index;
+                                       while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
+                                               list.splice( index, 1 );
+
+                                               // Handle firing indexes
+                                               if ( index <= firingIndex ) {
+                                                       firingIndex--;
+                                               }
+                                       }
+                               } );
+                               return this;
+                       },
+
+                       // Check if a given callback is in the list.
+                       // If no argument is given, return whether or not list has callbacks attached.
+                       has: function( fn ) {
+                               return fn ?
+                                       jQuery.inArray( fn, list ) > -1 :
+                                       list.length > 0;
+                       },
+
+                       // Remove all callbacks from the list
+                       empty: function() {
+                               if ( list ) {
+                                       list = [];
+                               }
+                               return this;
+                       },
+
+                       // Disable .fire and .add
+                       // Abort any current/pending executions
+                       // Clear all callbacks and values
+                       disable: function() {
+                               locked = queue = [];
+                               list = memory = "";
+                               return this;
+                       },
+                       disabled: function() {
+                               return !list;
+                       },
+
+                       // Disable .fire
+                       // Also disable .add unless we have memory (since it would have no effect)
+                       // Abort any pending executions
+                       lock: function() {
+                               locked = queue = [];
+                               if ( !memory && !firing ) {
+                                       list = memory = "";
+                               }
+                               return this;
+                       },
+                       locked: function() {
+                               return !!locked;
+                       },
+
+                       // Call all callbacks with the given context and arguments
+                       fireWith: function( context, args ) {
+                               if ( !locked ) {
+                                       args = args || [];
+                                       args = [ context, args.slice ? args.slice() : args ];
+                                       queue.push( args );
+                                       if ( !firing ) {
+                                               fire();
+                                       }
+                               }
+                               return this;
+                       },
+
+                       // Call all the callbacks with the given arguments
+                       fire: function() {
+                               self.fireWith( this, arguments );
+                               return this;
+                       },
+
+                       // To know if the callbacks have already been called at least once
+                       fired: function() {
+                               return !!fired;
+                       }
+               };
+
+       return self;
+};
+
+
+function Identity( v ) {
+       return v;
+}
+function Thrower( ex ) {
+       throw ex;
+}
+
+function adoptValue( value, resolve, reject, noValue ) {
+       var method;
+
+       try {
+
+               // Check for promise aspect first to privilege synchronous behavior
+               if ( value && jQuery.isFunction( ( method = value.promise ) ) ) {
+                       method.call( value ).done( resolve ).fail( reject );
+
+               // Other thenables
+               } else if ( value && jQuery.isFunction( ( method = value.then ) ) ) {
+                       method.call( value, resolve, reject );
+
+               // Other non-thenables
+               } else {
+
+                       // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:
+                       // * false: [ value ].slice( 0 ) => resolve( value )
+                       // * true: [ value ].slice( 1 ) => resolve()
+                       resolve.apply( undefined, [ value ].slice( noValue ) );
+               }
+
+       // For Promises/A+, convert exceptions into rejections
+       // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in
+       // Deferred#then to conditionally suppress rejection.
+       } catch ( value ) {
+
+               // Support: Android 4.0 only
+               // Strict mode functions invoked without .call/.apply get global-object context
+               reject.apply( undefined, [ value ] );
+       }
+}
+
+jQuery.extend( {
+
+       Deferred: function( func ) {
+               var tuples = [
+
+                               // action, add listener, callbacks,
+                               // ... .then handlers, argument index, [final state]
+                               [ "notify", "progress", jQuery.Callbacks( "memory" ),
+                                       jQuery.Callbacks( "memory" ), 2 ],
+                               [ "resolve", "done", jQuery.Callbacks( "once memory" ),
+                                       jQuery.Callbacks( "once memory" ), 0, "resolved" ],
+                               [ "reject", "fail", jQuery.Callbacks( "once memory" ),
+                                       jQuery.Callbacks( "once memory" ), 1, "rejected" ]
+                       ],
+                       state = "pending",
+                       promise = {
+                               state: function() {
+                                       return state;
+                               },
+                               always: function() {
+                                       deferred.done( arguments ).fail( arguments );
+                                       return this;
+                               },
+                               "catch": function( fn ) {
+                                       return promise.then( null, fn );
+                               },
+
+                               // Keep pipe for back-compat
+                               pipe: function( /* fnDone, fnFail, fnProgress */ ) {
+                                       var fns = arguments;
+
+                                       return jQuery.Deferred( function( newDefer ) {
+                                               jQuery.each( tuples, function( i, tuple ) {
+
+                                                       // Map tuples (progress, done, fail) to arguments (done, fail, progress)
+                                                       var fn = jQuery.isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];
+
+                                                       // deferred.progress(function() { bind to newDefer or newDefer.notify })
+                                                       // deferred.done(function() { bind to newDefer or newDefer.resolve })
+                                                       // deferred.fail(function() { bind to newDefer or newDefer.reject })
+                                                       deferred[ tuple[ 1 ] ]( function() {
+                                                               var returned = fn && fn.apply( this, arguments );
+                                                               if ( returned && jQuery.isFunction( returned.promise ) ) {
+                                                                       returned.promise()
+                                                                               .progress( newDefer.notify )
+                                                                               .done( newDefer.resolve )
+                                                                               .fail( newDefer.reject );
+                                                               } else {
+                                                                       newDefer[ tuple[ 0 ] + "With" ](
+                                                                               this,
+                                                                               fn ? [ returned ] : arguments
+                                                                       );
+                                                               }
+                                                       } );
+                                               } );
+                                               fns = null;
+                                       } ).promise();
+                               },
+                               then: function( onFulfilled, onRejected, onProgress ) {
+                                       var maxDepth = 0;
+                                       function resolve( depth, deferred, handler, special ) {
+                                               return function() {
+                                                       var that = this,
+                                                               args = arguments,
+                                                               mightThrow = function() {
+                                                                       var returned, then;
+
+                                                                       // Support: Promises/A+ section 2.3.3.3.3
+                                                                       // https://promisesaplus.com/#point-59
+                                                                       // Ignore double-resolution attempts
+                                                                       if ( depth < maxDepth ) {
+                                                                               return;
+                                                                       }
+
+                                                                       returned = handler.apply( that, args );
+
+                                                                       // Support: Promises/A+ section 2.3.1
+                                                                       // https://promisesaplus.com/#point-48
+                                                                       if ( returned === deferred.promise() ) {
+                                                                               throw new TypeError( "Thenable self-resolution" );
+                                                                       }
+
+                                                                       // Support: Promises/A+ sections 2.3.3.1, 3.5
+                                                                       // https://promisesaplus.com/#point-54
+                                                                       // https://promisesaplus.com/#point-75
+                                                                       // Retrieve `then` only once
+                                                                       then = returned &&
+
+                                                                               // Support: Promises/A+ section 2.3.4
+                                                                               // https://promisesaplus.com/#point-64
+                                                                               // Only check objects and functions for thenability
+                                                                               ( typeof returned === "object" ||
+                                                                                       typeof returned === "function" ) &&
+                                                                               returned.then;
+
+                                                                       // Handle a returned thenable
+                                                                       if ( jQuery.isFunction( then ) ) {
+
+                                                                               // Special processors (notify) just wait for resolution
+                                                                               if ( special ) {
+                                                                                       then.call(
+                                                                                               returned,
+                                                                                               resolve( maxDepth, deferred, Identity, special ),
+                                                                                               resolve( maxDepth, deferred, Thrower, special )
+                                                                                       );
+
+                                                                               // Normal processors (resolve) also hook into progress
+                                                                               } else {
+
+                                                                                       // ...and disregard older resolution values
+                                                                                       maxDepth++;
+
+                                                                                       then.call(
+                                                                                               returned,
+                                                                                               resolve( maxDepth, deferred, Identity, special ),
+                                                                                               resolve( maxDepth, deferred, Thrower, special ),
+                                                                                               resolve( maxDepth, deferred, Identity,
+                                                                                                       deferred.notifyWith )
+                                                                                       );
+                                                                               }
+
+                                                                       // Handle all other returned values
+                                                                       } else {
+
+                                                                               // Only substitute handlers pass on context
+                                                                               // and multiple values (non-spec behavior)
+                                                                               if ( handler !== Identity ) {
+                                                                                       that = undefined;
+                                                                                       args = [ returned ];
+                                                                               }
+
+                                                                               // Process the value(s)
+                                                                               // Default process is resolve
+                                                                               ( special || deferred.resolveWith )( that, args );
+                                                                       }
+                                                               },
+
+                                                               // Only normal processors (resolve) catch and reject exceptions
+                                                               process = special ?
+                                                                       mightThrow :
+                                                                       function() {
+                                                                               try {
+                                                                                       mightThrow();
+                                                                               } catch ( e ) {
+
+                                                                                       if ( jQuery.Deferred.exceptionHook ) {
+                                                                                               jQuery.Deferred.exceptionHook( e,
+                                                                                                       process.stackTrace );
+                                                                                       }
+
+                                                                                       // Support: Promises/A+ section 2.3.3.3.4.1
+                                                                                       // https://promisesaplus.com/#point-61
+                                                                                       // Ignore post-resolution exceptions
+                                                                                       if ( depth + 1 >= maxDepth ) {
+
+                                                                                               // Only substitute handlers pass on context
+                                                                                               // and multiple values (non-spec behavior)
+                                                                                               if ( handler !== Thrower ) {
+                                                                                                       that = undefined;
+                                                                                                       args = [ e ];
+                                                                                               }
+
+                                                                                               deferred.rejectWith( that, args );
+                                                                                       }
+                                                                               }
+                                                                       };
+
+                                                       // Support: Promises/A+ section 2.3.3.3.1
+                                                       // https://promisesaplus.com/#point-57
+                                                       // Re-resolve promises immediately to dodge false rejection from
+                                                       // subsequent errors
+                                                       if ( depth ) {
+                                                               process();
+                                                       } else {
+
+                                                               // Call an optional hook to record the stack, in case of exception
+                                                               // since it's otherwise lost when execution goes async
+                                                               if ( jQuery.Deferred.getStackHook ) {
+                                                                       process.stackTrace = jQuery.Deferred.getStackHook();
+                                                               }
+                                                               window.setTimeout( process );
+                                                       }
+                                               };
+                                       }
+
+                                       return jQuery.Deferred( function( newDefer ) {
+
+                                               // progress_handlers.add( ... )
+                                               tuples[ 0 ][ 3 ].add(
+                                                       resolve(
+                                                               0,
+                                                               newDefer,
+                                                               jQuery.isFunction( onProgress ) ?
+                                                                       onProgress :
+                                                                       Identity,
+                                                               newDefer.notifyWith
+                                                       )
+                                               );
+
+                                               // fulfilled_handlers.add( ... )
+                                               tuples[ 1 ][ 3 ].add(
+                                                       resolve(
+                                                               0,
+                                                               newDefer,
+                                                               jQuery.isFunction( onFulfilled ) ?
+                                                                       onFulfilled :
+                                                                       Identity
+                                                       )
+                                               );
+
+                                               // rejected_handlers.add( ... )
+                                               tuples[ 2 ][ 3 ].add(
+                                                       resolve(
+                                                               0,
+                                                               newDefer,
+                                                               jQuery.isFunction( onRejected ) ?
+                                                                       onRejected :
+                                                                       Thrower
+                                                       )
+                                               );
+                                       } ).promise();
+                               },
+
+                               // Get a promise for this deferred
+                               // If obj is provided, the promise aspect is added to the object
+                               promise: function( obj ) {
+                                       return obj != null ? jQuery.extend( obj, promise ) : promise;
+                               }
+                       },
+                       deferred = {};
+
+               // Add list-specific methods
+               jQuery.each( tuples, function( i, tuple ) {
+                       var list = tuple[ 2 ],
+                               stateString = tuple[ 5 ];
+
+                       // promise.progress = list.add
+                       // promise.done = list.add
+                       // promise.fail = list.add
+                       promise[ tuple[ 1 ] ] = list.add;
+
+                       // Handle state
+                       if ( stateString ) {
+                               list.add(
+                                       function() {
+
+                                               // state = "resolved" (i.e., fulfilled)
+                                               // state = "rejected"
+                                               state = stateString;
+                                       },
+
+                                       // rejected_callbacks.disable
+                                       // fulfilled_callbacks.disable
+                                       tuples[ 3 - i ][ 2 ].disable,
+
+                                       // progress_callbacks.lock
+                                       tuples[ 0 ][ 2 ].lock
+                               );
+                       }
+
+                       // progress_handlers.fire
+                       // fulfilled_handlers.fire
+                       // rejected_handlers.fire
+                       list.add( tuple[ 3 ].fire );
+
+                       // deferred.notify = function() { deferred.notifyWith(...) }
+                       // deferred.resolve = function() { deferred.resolveWith(...) }
+                       // deferred.reject = function() { deferred.rejectWith(...) }
+                       deferred[ tuple[ 0 ] ] = function() {
+                               deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments );
+                               return this;
+                       };
+
+                       // deferred.notifyWith = list.fireWith
+                       // deferred.resolveWith = list.fireWith
+                       // deferred.rejectWith = list.fireWith
+                       deferred[ tuple[ 0 ] + "With" ] = list.fireWith;
+               } );
+
+               // Make the deferred a promise
+               promise.promise( deferred );
+
+               // Call given func if any
+               if ( func ) {
+                       func.call( deferred, deferred );
+               }
+
+               // All done!
+               return deferred;
+       },
+
+       // Deferred helper
+       when: function( singleValue ) {
+               var
+
+                       // count of uncompleted subordinates
+                       remaining = arguments.length,
+
+                       // count of unprocessed arguments
+                       i = remaining,
+
+                       // subordinate fulfillment data
+                       resolveContexts = Array( i ),
+                       resolveValues = slice.call( arguments ),
+
+                       // the master Deferred
+                       master = jQuery.Deferred(),
+
+                       // subordinate callback factory
+                       updateFunc = function( i ) {
+                               return function( value ) {
+                                       resolveContexts[ i ] = this;
+                                       resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
+                                       if ( !( --remaining ) ) {
+                                               master.resolveWith( resolveContexts, resolveValues );
+                                       }
+                               };
+                       };
+
+               // Single- and empty arguments are adopted like Promise.resolve
+               if ( remaining <= 1 ) {
+                       adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject,
+                               !remaining );
+
+                       // Use .then() to unwrap secondary thenables (cf. gh-3000)
+                       if ( master.state() === "pending" ||
+                               jQuery.isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {
+
+                               return master.then();
+                       }
+               }
+
+               // Multiple arguments are aggregated like Promise.all array elements
+               while ( i-- ) {
+                       adoptValue( resolveValues[ i ], updateFunc( i ), master.reject );
+               }
+
+               return master.promise();
+       }
+} );
+
+
+// These usually indicate a programmer mistake during development,
+// warn about them ASAP rather than swallowing them by default.
+var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;
+
+jQuery.Deferred.exceptionHook = function( error, stack ) {
+
+       // Support: IE 8 - 9 only
+       // Console exists when dev tools are open, which can happen at any time
+       if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {
+               window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack );
+       }
+};
+
+
+
+
+jQuery.readyException = function( error ) {
+       window.setTimeout( function() {
+               throw error;
+       } );
+};
+
+
+
+
+// The deferred used on DOM ready
+var readyList = jQuery.Deferred();
+
+jQuery.fn.ready = function( fn ) {
+
+       readyList
+               .then( fn )
+
+               // Wrap jQuery.readyException in a function so that the lookup
+               // happens at the time of error handling instead of callback
+               // registration.
+               .catch( function( error ) {
+                       jQuery.readyException( error );
+               } );
+
+       return this;
+};
+
+jQuery.extend( {
+
+       // Is the DOM ready to be used? Set to true once it occurs.
+       isReady: false,
+
+       // A counter to track how many items to wait for before
+       // the ready event fires. See #6781
+       readyWait: 1,
+
+       // Handle when the DOM is ready
+       ready: function( wait ) {
+
+               // Abort if there are pending holds or we're already ready
+               if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
+                       return;
+               }
+
+               // Remember that the DOM is ready
+               jQuery.isReady = true;
+
+               // If a normal DOM Ready event fired, decrement, and wait if need be
+               if ( wait !== true && --jQuery.readyWait > 0 ) {
+                       return;
+               }
+
+               // If there are functions bound, to execute
+               readyList.resolveWith( document, [ jQuery ] );
+       }
+} );
+
+jQuery.ready.then = readyList.then;
+
+// The ready event handler and self cleanup method
+function completed() {
+       document.removeEventListener( "DOMContentLoaded", completed );
+       window.removeEventListener( "load", completed );
+       jQuery.ready();
+}
+
+// Catch cases where $(document).ready() is called
+// after the browser event has already occurred.
+// Support: IE <=9 - 10 only
+// Older IE sometimes signals "interactive" too soon
+if ( document.readyState === "complete" ||
+       ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) {
+
+       // Handle it asynchronously to allow scripts the opportunity to delay ready
+       window.setTimeout( jQuery.ready );
+
+} else {
+
+       // Use the handy event callback
+       document.addEventListener( "DOMContentLoaded", completed );
+
+       // A fallback to window.onload, that will always work
+       window.addEventListener( "load", completed );
+}
+
+
+
+
+// Multifunctional method to get and set values of a collection
+// The value/s can optionally be executed if it's a function
+var access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
+       var i = 0,
+               len = elems.length,
+               bulk = key == null;
+
+       // Sets many values
+       if ( jQuery.type( key ) === "object" ) {
+               chainable = true;
+               for ( i in key ) {
+                       access( elems, fn, i, key[ i ], true, emptyGet, raw );
+               }
+
+       // Sets one value
+       } else if ( value !== undefined ) {
+               chainable = true;
+
+               if ( !jQuery.isFunction( value ) ) {
+                       raw = true;
+               }
+
+               if ( bulk ) {
+
+                       // Bulk operations run against the entire set
+                       if ( raw ) {
+                               fn.call( elems, value );
+                               fn = null;
+
+                       // ...except when executing function values
+                       } else {
+                               bulk = fn;
+                               fn = function( elem, key, value ) {
+                                       return bulk.call( jQuery( elem ), value );
+                               };
+                       }
+               }
+
+               if ( fn ) {
+                       for ( ; i < len; i++ ) {
+                               fn(
+                                       elems[ i ], key, raw ?
+                                       value :
+                                       value.call( elems[ i ], i, fn( elems[ i ], key ) )
+                               );
+                       }
+               }
+       }
+
+       if ( chainable ) {
+               return elems;
+       }
+
+       // Gets
+       if ( bulk ) {
+               return fn.call( elems );
+       }
+
+       return len ? fn( elems[ 0 ], key ) : emptyGet;
+};
+var acceptData = function( owner ) {
+
+       // Accepts only:
+       //  - Node
+       //    - Node.ELEMENT_NODE
+       //    - Node.DOCUMENT_NODE
+       //  - Object
+       //    - Any
+       return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );
+};
+
+
+
+
+function Data() {
+       this.expando = jQuery.expando + Data.uid++;
+}
+
+Data.uid = 1;
+
+Data.prototype = {
+
+       cache: function( owner ) {
+
+               // Check if the owner object already has a cache
+               var value = owner[ this.expando ];
+
+               // If not, create one
+               if ( !value ) {
+                       value = {};
+
+                       // We can accept data for non-element nodes in modern browsers,
+                       // but we should not, see #8335.
+                       // Always return an empty object.
+                       if ( acceptData( owner ) ) {
+
+                               // If it is a node unlikely to be stringify-ed or looped over
+                               // use plain assignment
+                               if ( owner.nodeType ) {
+                                       owner[ this.expando ] = value;
+
+                               // Otherwise secure it in a non-enumerable property
+                               // configurable must be true to allow the property to be
+                               // deleted when data is removed
+                               } else {
+                                       Object.defineProperty( owner, this.expando, {
+                                               value: value,
+                                               configurable: true
+                                       } );
+                               }
+                       }
+               }
+
+               return value;
+       },
+       set: function( owner, data, value ) {
+               var prop,
+                       cache = this.cache( owner );
+
+               // Handle: [ owner, key, value ] args
+               // Always use camelCase key (gh-2257)
+               if ( typeof data === "string" ) {
+                       cache[ jQuery.camelCase( data ) ] = value;
+
+               // Handle: [ owner, { properties } ] args
+               } else {
+
+                       // Copy the properties one-by-one to the cache object
+                       for ( prop in data ) {
+                               cache[ jQuery.camelCase( prop ) ] = data[ prop ];
+                       }
+               }
+               return cache;
+       },
+       get: function( owner, key ) {
+               return key === undefined ?
+                       this.cache( owner ) :
+
+                       // Always use camelCase key (gh-2257)
+                       owner[ this.expando ] && owner[ this.expando ][ jQuery.camelCase( key ) ];
+       },
+       access: function( owner, key, value ) {
+
+               // In cases where either:
+               //
+               //   1. No key was specified
+               //   2. A string key was specified, but no value provided
+               //
+               // Take the "read" path and allow the get method to determine
+               // which value to return, respectively either:
+               //
+               //   1. The entire cache object
+               //   2. The data stored at the key
+               //
+               if ( key === undefined ||
+                               ( ( key && typeof key === "string" ) && value === undefined ) ) {
+
+                       return this.get( owner, key );
+               }
+
+               // When the key is not a string, or both a key and value
+               // are specified, set or extend (existing objects) with either:
+               //
+               //   1. An object of properties
+               //   2. A key and value
+               //
+               this.set( owner, key, value );
+
+               // Since the "set" path can have two possible entry points
+               // return the expected data based on which path was taken[*]
+               return value !== undefined ? value : key;
+       },
+       remove: function( owner, key ) {
+               var i,
+                       cache = owner[ this.expando ];
+
+               if ( cache === undefined ) {
+                       return;
+               }
+
+               if ( key !== undefined ) {
+
+                       // Support array or space separated string of keys
+                       if ( Array.isArray( key ) ) {
+
+                               // If key is an array of keys...
+                               // We always set camelCase keys, so remove that.
+                               key = key.map( jQuery.camelCase );
+                       } else {
+                               key = jQuery.camelCase( key );
+
+                               // If a key with the spaces exists, use it.
+                               // Otherwise, create an array by matching non-whitespace
+                               key = key in cache ?
+                                       [ key ] :
+                                       ( key.match( rnothtmlwhite ) || [] );
+                       }
+
+                       i = key.length;
+
+                       while ( i-- ) {
+                               delete cache[ key[ i ] ];
+                       }
+               }
+
+               // Remove the expando if there's no more data
+               if ( key === undefined || jQuery.isEmptyObject( cache ) ) {
+
+                       // Support: Chrome <=35 - 45
+                       // Webkit & Blink performance suffers when deleting properties
+                       // from DOM nodes, so set to undefined instead
+                       // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)
+                       if ( owner.nodeType ) {
+                               owner[ this.expando ] = undefined;
+                       } else {
+                               delete owner[ this.expando ];
+                       }
+               }
+       },
+       hasData: function( owner ) {
+               var cache = owner[ this.expando ];
+               return cache !== undefined && !jQuery.isEmptyObject( cache );
+       }
+};
+var dataPriv = new Data();
+
+var dataUser = new Data();
+
+
+
+//     Implementation Summary
+//
+//     1. Enforce API surface and semantic compatibility with 1.9.x branch
+//     2. Improve the module's maintainability by reducing the storage
+//             paths to a single mechanism.
+//     3. Use the same single mechanism to support "private" and "user" data.
+//     4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData)
+//     5. Avoid exposing implementation details on user objects (eg. expando properties)
+//     6. Provide a clear path for implementation upgrade to WeakMap in 2014
+
+var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
+       rmultiDash = /[A-Z]/g;
+
+function getData( data ) {
+       if ( data === "true" ) {
+               return true;
+       }
+
+       if ( data === "false" ) {
+               return false;
+       }
+
+       if ( data === "null" ) {
+               return null;
+       }
+
+       // Only convert to a number if it doesn't change the string
+       if ( data === +data + "" ) {
+               return +data;
+       }
+
+       if ( rbrace.test( data ) ) {
+               return JSON.parse( data );
+       }
+
+       return data;
+}
+
+function dataAttr( elem, key, data ) {
+       var name;
+
+       // If nothing was found internally, try to fetch any
+       // data from the HTML5 data-* attribute
+       if ( data === undefined && elem.nodeType === 1 ) {
+               name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase();
+               data = elem.getAttribute( name );
+
+               if ( typeof data === "string" ) {
+                       try {
+                               data = getData( data );
+                       } catch ( e ) {}
+
+                       // Make sure we set the data so it isn't changed later
+                       dataUser.set( elem, key, data );
+               } else {
+                       data = undefined;
+               }
+       }
+       return data;
+}
+
+jQuery.extend( {
+       hasData: function( elem ) {
+               return dataUser.hasData( elem ) || dataPriv.hasData( elem );
+       },
+
+       data: function( elem, name, data ) {
+               return dataUser.access( elem, name, data );
+       },
+
+       removeData: function( elem, name ) {
+               dataUser.remove( elem, name );
+       },
+
+       // TODO: Now that all calls to _data and _removeData have been replaced
+       // with direct calls to dataPriv methods, these can be deprecated.
+       _data: function( elem, name, data ) {
+               return dataPriv.access( elem, name, data );
+       },
+
+       _removeData: function( elem, name ) {
+               dataPriv.remove( elem, name );
+       }
+} );
+
+jQuery.fn.extend( {
+       data: function( key, value ) {
+               var i, name, data,
+                       elem = this[ 0 ],
+                       attrs = elem && elem.attributes;
+
+               // Gets all values
+               if ( key === undefined ) {
+                       if ( this.length ) {
+                               data = dataUser.get( elem );
+
+                               if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) {
+                                       i = attrs.length;
+                                       while ( i-- ) {
+
+                                               // Support: IE 11 only
+                                               // The attrs elements can be null (#14894)
+                                               if ( attrs[ i ] ) {
+                                                       name = attrs[ i ].name;
+                                                       if ( name.indexOf( "data-" ) === 0 ) {
+                                                               name = jQuery.camelCase( name.slice( 5 ) );
+                                                               dataAttr( elem, name, data[ name ] );
+                                                       }
+                                               }
+                                       }
+                                       dataPriv.set( elem, "hasDataAttrs", true );
+                               }
+                       }
+
+                       return data;
+               }
+
+               // Sets multiple values
+               if ( typeof key === "object" ) {
+                       return this.each( function() {
+                               dataUser.set( this, key );
+                       } );
+               }
+
+               return access( this, function( value ) {
+                       var data;
+
+                       // The calling jQuery object (element matches) is not empty
+                       // (and therefore has an element appears at this[ 0 ]) and the
+                       // `value` parameter was not undefined. An empty jQuery object
+                       // will result in `undefined` for elem = this[ 0 ] which will
+                       // throw an exception if an attempt to read a data cache is made.
+                       if ( elem && value === undefined ) {
+
+                               // Attempt to get data from the cache
+                               // The key will always be camelCased in Data
+                               data = dataUser.get( elem, key );
+                               if ( data !== undefined ) {
+                                       return data;
+                               }
+
+                               // Attempt to "discover" the data in
+                               // HTML5 custom data-* attrs
+                               data = dataAttr( elem, key );
+                               if ( data !== undefined ) {
+                                       return data;
+                               }
+
+                               // We tried really hard, but the data doesn't exist.
+                               return;
+                       }
+
+                       // Set the data...
+                       this.each( function() {
+
+                               // We always store the camelCased key
+                               dataUser.set( this, key, value );
+                       } );
+               }, null, value, arguments.length > 1, null, true );
+       },
+
+       removeData: function( key ) {
+               return this.each( function() {
+                       dataUser.remove( this, key );
+               } );
+       }
+} );
+
+
+jQuery.extend( {
+       queue: function( elem, type, data ) {
+               var queue;
+
+               if ( elem ) {
+                       type = ( type || "fx" ) + "queue";
+                       queue = dataPriv.get( elem, type );
+
+                       // Speed up dequeue by getting out quickly if this is just a lookup
+                       if ( data ) {
+                               if ( !queue || Array.isArray( data ) ) {
+                                       queue = dataPriv.access( elem, type, jQuery.makeArray( data ) );
+                               } else {
+                                       queue.push( data );
+                               }
+                       }
+                       return queue || [];
+               }
+       },
+
+       dequeue: function( elem, type ) {
+               type = type || "fx";
+
+               var queue = jQuery.queue( elem, type ),
+                       startLength = queue.length,
+                       fn = queue.shift(),
+                       hooks = jQuery._queueHooks( elem, type ),
+                       next = function() {
+                               jQuery.dequeue( elem, type );
+                       };
+
+               // If the fx queue is dequeued, always remove the progress sentinel
+               if ( fn === "inprogress" ) {
+                       fn = queue.shift();
+                       startLength--;
+               }
+
+               if ( fn ) {
+
+                       // Add a progress sentinel to prevent the fx queue from being
+                       // automatically dequeued
+                       if ( type === "fx" ) {
+                               queue.unshift( "inprogress" );
+                       }
+
+                       // Clear up the last queue stop function
+                       delete hooks.stop;
+                       fn.call( elem, next, hooks );
+               }
+
+               if ( !startLength && hooks ) {
+                       hooks.empty.fire();
+               }
+       },
+
+       // Not public - generate a queueHooks object, or return the current one
+       _queueHooks: function( elem, type ) {
+               var key = type + "queueHooks";
+               return dataPriv.get( elem, key ) || dataPriv.access( elem, key, {
+                       empty: jQuery.Callbacks( "once memory" ).add( function() {
+                               dataPriv.remove( elem, [ type + "queue", key ] );
+                       } )
+               } );
+       }
+} );
+
+jQuery.fn.extend( {
+       queue: function( type, data ) {
+               var setter = 2;
+
+               if ( typeof type !== "string" ) {
+                       data = type;
+                       type = "fx";
+                       setter--;
+               }
+
+               if ( arguments.length < setter ) {
+                       return jQuery.queue( this[ 0 ], type );
+               }
+
+               return data === undefined ?
+                       this :
+                       this.each( function() {
+                               var queue = jQuery.queue( this, type, data );
+
+                               // Ensure a hooks for this queue
+                               jQuery._queueHooks( this, type );
+
+                               if ( type === "fx" && queue[ 0 ] !== "inprogress" ) {
+                                       jQuery.dequeue( this, type );
+                               }
+                       } );
+       },
+       dequeue: function( type ) {
+               return this.each( function() {
+                       jQuery.dequeue( this, type );
+               } );
+       },
+       clearQueue: function( type ) {
+               return this.queue( type || "fx", [] );
+       },
+
+       // Get a promise resolved when queues of a certain type
+       // are emptied (fx is the type by default)
+       promise: function( type, obj ) {
+               var tmp,
+                       count = 1,
+                       defer = jQuery.Deferred(),
+                       elements = this,
+                       i = this.length,
+                       resolve = function() {
+                               if ( !( --count ) ) {
+                                       defer.resolveWith( elements, [ elements ] );
+                               }
+                       };
+
+               if ( typeof type !== "string" ) {
+                       obj = type;
+                       type = undefined;
+               }
+               type = type || "fx";
+
+               while ( i-- ) {
+                       tmp = dataPriv.get( elements[ i ], type + "queueHooks" );
+                       if ( tmp && tmp.empty ) {
+                               count++;
+                               tmp.empty.add( resolve );
+                       }
+               }
+               resolve();
+               return defer.promise( obj );
+       }
+} );
+var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source;
+
+var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" );
+
+
+var cssExpand = [ "Top", "Right", "Bottom", "Left" ];
+
+var isHiddenWithinTree = function( elem, el ) {
+
+               // isHiddenWithinTree might be called from jQuery#filter function;
+               // in that case, element will be second argument
+               elem = el || elem;
+
+               // Inline style trumps all
+               return elem.style.display === "none" ||
+                       elem.style.display === "" &&
+
+                       // Otherwise, check computed style
+                       // Support: Firefox <=43 - 45
+                       // Disconnected elements can have computed display: none, so first confirm that elem is
+                       // in the document.
+                       jQuery.contains( elem.ownerDocument, elem ) &&
+
+                       jQuery.css( elem, "display" ) === "none";
+       };
+
+var swap = function( elem, options, callback, args ) {
+       var ret, name,
+               old = {};
+
+       // Remember the old values, and insert the new ones
+       for ( name in options ) {
+               old[ name ] = elem.style[ name ];
+               elem.style[ name ] = options[ name ];
+       }
+
+       ret = callback.apply( elem, args || [] );
+
+       // Revert the old values
+       for ( name in options ) {
+               elem.style[ name ] = old[ name ];
+       }
+
+       return ret;
+};
+
+
+
+
+function adjustCSS( elem, prop, valueParts, tween ) {
+       var adjusted,
+               scale = 1,
+               maxIterations = 20,
+               currentValue = tween ?
+                       function() {
+                               return tween.cur();
+                       } :
+                       function() {
+                               return jQuery.css( elem, prop, "" );
+                       },
+               initial = currentValue(),
+               unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),
+
+               // Starting value computation is required for potential unit mismatches
+               initialInUnit = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) &&
+                       rcssNum.exec( jQuery.css( elem, prop ) );
+
+       if ( initialInUnit && initialInUnit[ 3 ] !== unit ) {
+
+               // Trust units reported by jQuery.css
+               unit = unit || initialInUnit[ 3 ];
+
+               // Make sure we update the tween properties later on
+               valueParts = valueParts || [];
+
+               // Iteratively approximate from a nonzero starting point
+               initialInUnit = +initial || 1;
+
+               do {
+
+                       // If previous iteration zeroed out, double until we get *something*.
+                       // Use string for doubling so we don't accidentally see scale as unchanged below
+                       scale = scale || ".5";
+
+                       // Adjust and apply
+                       initialInUnit = initialInUnit / scale;
+                       jQuery.style( elem, prop, initialInUnit + unit );
+
+               // Update scale, tolerating zero or NaN from tween.cur()
+               // Break the loop if scale is unchanged or perfect, or if we've just had enough.
+               } while (
+                       scale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations
+               );
+       }
+
+       if ( valueParts ) {
+               initialInUnit = +initialInUnit || +initial || 0;
+
+               // Apply relative offset (+=/-=) if specified
+               adjusted = valueParts[ 1 ] ?
+                       initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :
+                       +valueParts[ 2 ];
+               if ( tween ) {
+                       tween.unit = unit;
+                       tween.start = initialInUnit;
+                       tween.end = adjusted;
+               }
+       }
+       return adjusted;
+}
+
+
+var defaultDisplayMap = {};
+
+function getDefaultDisplay( elem ) {
+       var temp,
+               doc = elem.ownerDocument,
+               nodeName = elem.nodeName,
+               display = defaultDisplayMap[ nodeName ];
+
+       if ( display ) {
+               return display;
+       }
+
+       temp = doc.body.appendChild( doc.createElement( nodeName ) );
+       display = jQuery.css( temp, "display" );
+
+       temp.parentNode.removeChild( temp );
+
+       if ( display === "none" ) {
+               display = "block";
+       }
+       defaultDisplayMap[ nodeName ] = display;
+
+       return display;
+}
+
+function showHide( elements, show ) {
+       var display, elem,
+               values = [],
+               index = 0,
+               length = elements.length;
+
+       // Determine new display value for elements that need to change
+       for ( ; index < length; index++ ) {
+               elem = elements[ index ];
+               if ( !elem.style ) {
+                       continue;
+               }
+
+               display = elem.style.display;
+               if ( show ) {
+
+                       // Since we force visibility upon cascade-hidden elements, an immediate (and slow)
+                       // check is required in this first loop unless we have a nonempty display value (either
+                       // inline or about-to-be-restored)
+                       if ( display === "none" ) {
+                               values[ index ] = dataPriv.get( elem, "display" ) || null;
+                               if ( !values[ index ] ) {
+                                       elem.style.display = "";
+                               }
+                       }
+                       if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) {
+                               values[ index ] = getDefaultDisplay( elem );
+                       }
+               } else {
+                       if ( display !== "none" ) {
+                               values[ index ] = "none";
+
+                               // Remember what we're overwriting
+                               dataPriv.set( elem, "display", display );
+                       }
+               }
+       }
+
+       // Set the display of the elements in a second loop to avoid constant reflow
+       for ( index = 0; index < length; index++ ) {
+               if ( values[ index ] != null ) {
+                       elements[ index ].style.display = values[ index ];
+               }
+       }
+
+       return elements;
+}
+
+jQuery.fn.extend( {
+       show: function() {
+               return showHide( this, true );
+       },
+       hide: function() {
+               return showHide( this );
+       },
+       toggle: function( state ) {
+               if ( typeof state === "boolean" ) {
+                       return state ? this.show() : this.hide();
+               }
+
+               return this.each( function() {
+                       if ( isHiddenWithinTree( this ) ) {
+                               jQuery( this ).show();
+                       } else {
+                               jQuery( this ).hide();
+                       }
+               } );
+       }
+} );
+var rcheckableType = ( /^(?:checkbox|radio)$/i );
+
+var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]+)/i );
+
+var rscriptType = ( /^$|\/(?:java|ecma)script/i );
+
+
+
+// We have to close these tags to support XHTML (#13200)
+var wrapMap = {
+
+       // Support: IE <=9 only
+       option: [ 1, "<select multiple='multiple'>", "</select>" ],
+
+       // XHTML parsers do not magically insert elements in the
+       // same way that tag soup parsers do. So we cannot shorten
+       // this by omitting <tbody> or other required elements.
+       thead: [ 1, "<table>", "</table>" ],
+       col: [ 2, "<table><colgroup>", "</colgroup></table>" ],
+       tr: [ 2, "<table><tbody>", "</tbody></table>" ],
+       td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
+
+       _default: [ 0, "", "" ]
+};
+
+// Support: IE <=9 only
+wrapMap.optgroup = wrapMap.option;
+
+wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
+wrapMap.th = wrapMap.td;
+
+
+function getAll( context, tag ) {
+
+       // Support: IE <=9 - 11 only
+       // Use typeof to avoid zero-argument method invocation on host objects (#15151)
+       var ret;
+
+       if ( typeof context.getElementsByTagName !== "undefined" ) {
+               ret = context.getElementsByTagName( tag || "*" );
+
+       } else if ( typeof context.querySelectorAll !== "undefined" ) {
+               ret = context.querySelectorAll( tag || "*" );
+
+       } else {
+               ret = [];
+       }
+
+       if ( tag === undefined || tag && nodeName( context, tag ) ) {
+               return jQuery.merge( [ context ], ret );
+       }
+
+       return ret;
+}
+
+
+// Mark scripts as having already been evaluated
+function setGlobalEval( elems, refElements ) {
+       var i = 0,
+               l = elems.length;
+
+       for ( ; i < l; i++ ) {
+               dataPriv.set(
+                       elems[ i ],
+                       "globalEval",
+                       !refElements || dataPriv.get( refElements[ i ], "globalEval" )
+               );
+       }
+}
+
+
+var rhtml = /<|&#?\w+;/;
+
+function buildFragment( elems, context, scripts, selection, ignored ) {
+       var elem, tmp, tag, wrap, contains, j,
+               fragment = context.createDocumentFragment(),
+               nodes = [],
+               i = 0,
+               l = elems.length;
+
+       for ( ; i < l; i++ ) {
+               elem = elems[ i ];
+
+               if ( elem || elem === 0 ) {
+
+                       // Add nodes directly
+                       if ( jQuery.type( elem ) === "object" ) {
+
+                               // Support: Android <=4.0 only, PhantomJS 1 only
+                               // push.apply(_, arraylike) throws on ancient WebKit
+                               jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
+
+                       // Convert non-html into a text node
+                       } else if ( !rhtml.test( elem ) ) {
+                               nodes.push( context.createTextNode( elem ) );
+
+                       // Convert html into DOM nodes
+                       } else {
+                               tmp = tmp || fragment.appendChild( context.createElement( "div" ) );
+
+                               // Deserialize a standard representation
+                               tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase();
+                               wrap = wrapMap[ tag ] || wrapMap._default;
+                               tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];
+
+                               // Descend through wrappers to the right content
+                               j = wrap[ 0 ];
+                               while ( j-- ) {
+                                       tmp = tmp.lastChild;
+                               }
+
+                               // Support: Android <=4.0 only, PhantomJS 1 only
+                               // push.apply(_, arraylike) throws on ancient WebKit
+                               jQuery.merge( nodes, tmp.childNodes );
+
+                               // Remember the top-level container
+                               tmp = fragment.firstChild;
+
+                               // Ensure the created nodes are orphaned (#12392)
+                               tmp.textContent = "";
+                       }
+               }
+       }
+
+       // Remove wrapper from fragment
+       fragment.textContent = "";
+
+       i = 0;
+       while ( ( elem = nodes[ i++ ] ) ) {
+
+               // Skip elements already in the context collection (trac-4087)
+               if ( selection && jQuery.inArray( elem, selection ) > -1 ) {
+                       if ( ignored ) {
+                               ignored.push( elem );
+                       }
+                       continue;
+               }
+
+               contains = jQuery.contains( elem.ownerDocument, elem );
+
+               // Append to fragment
+               tmp = getAll( fragment.appendChild( elem ), "script" );
+
+               // Preserve script evaluation history
+               if ( contains ) {
+                       setGlobalEval( tmp );
+               }
+
+               // Capture executables
+               if ( scripts ) {
+                       j = 0;
+                       while ( ( elem = tmp[ j++ ] ) ) {
+                               if ( rscriptType.test( elem.type || "" ) ) {
+                                       scripts.push( elem );
+                               }
+                       }
+               }
+       }
+
+       return fragment;
+}
+
+
+( function() {
+       var fragment = document.createDocumentFragment(),
+               div = fragment.appendChild( document.createElement( "div" ) ),
+               input = document.createElement( "input" );
+
+       // Support: Android 4.0 - 4.3 only
+       // Check state lost if the name is set (#11217)
+       // Support: Windows Web Apps (WWA)
+       // `name` and `type` must use .setAttribute for WWA (#14901)
+       input.setAttribute( "type", "radio" );
+       input.setAttribute( "checked", "checked" );
+       input.setAttribute( "name", "t" );
+
+       div.appendChild( input );
+
+       // Support: Android <=4.1 only
+       // Older WebKit doesn't clone checked state correctly in fragments
+       support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
+
+       // Support: IE <=11 only
+       // Make sure textarea (and checkbox) defaultValue is properly cloned
+       div.innerHTML = "<textarea>x</textarea>";
+       support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
+} )();
+var documentElement = document.documentElement;
+
+
+
+var
+       rkeyEvent = /^key/,
+       rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,
+       rtypenamespace = /^([^.]*)(?:\.(.+)|)/;
+
+function returnTrue() {
+       return true;
+}
+
+function returnFalse() {
+       return false;
+}
+
+// Support: IE <=9 only
+// See #13393 for more info
+function safeActiveElement() {
+       try {
+               return document.activeElement;
+       } catch ( err ) { }
+}
+
+function on( elem, types, selector, data, fn, one ) {
+       var origFn, type;
+
+       // Types can be a map of types/handlers
+       if ( typeof types === "object" ) {
+
+               // ( types-Object, selector, data )
+               if ( typeof selector !== "string" ) {
+
+                       // ( types-Object, data )
+                       data = data || selector;
+                       selector = undefined;
+               }
+               for ( type in types ) {
+                       on( elem, type, selector, data, types[ type ], one );
+               }
+               return elem;
+       }
+
+       if ( data == null && fn == null ) {
+
+               // ( types, fn )
+               fn = selector;
+               data = selector = undefined;
+       } else if ( fn == null ) {
+               if ( typeof selector === "string" ) {
+
+                       // ( types, selector, fn )
+                       fn = data;
+                       data = undefined;
+               } else {
+
+                       // ( types, data, fn )
+                       fn = data;
+                       data = selector;
+                       selector = undefined;
+               }
+       }
+       if ( fn === false ) {
+               fn = returnFalse;
+       } else if ( !fn ) {
+               return elem;
+       }
+
+       if ( one === 1 ) {
+               origFn = fn;
+               fn = function( event ) {
+
+                       // Can use an empty set, since event contains the info
+                       jQuery().off( event );
+                       return origFn.apply( this, arguments );
+               };
+
+               // Use same guid so caller can remove using origFn
+               fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
+       }
+       return elem.each( function() {
+               jQuery.event.add( this, types, fn, data, selector );
+       } );
+}
+
+/*
+ * Helper functions for managing events -- not part of the public interface.
+ * Props to Dean Edwards' addEvent library for many of the ideas.
+ */
+jQuery.event = {
+
+       global: {},
+
+       add: function( elem, types, handler, data, selector ) {
+
+               var handleObjIn, eventHandle, tmp,
+                       events, t, handleObj,
+                       special, handlers, type, namespaces, origType,
+                       elemData = dataPriv.get( elem );
+
+               // Don't attach events to noData or text/comment nodes (but allow plain objects)
+               if ( !elemData ) {
+                       return;
+               }
+
+               // Caller can pass in an object of custom data in lieu of the handler
+               if ( handler.handler ) {
+                       handleObjIn = handler;
+                       handler = handleObjIn.handler;
+                       selector = handleObjIn.selector;
+               }
+
+               // Ensure that invalid selectors throw exceptions at attach time
+               // Evaluate against documentElement in case elem is a non-element node (e.g., document)
+               if ( selector ) {
+                       jQuery.find.matchesSelector( documentElement, selector );
+               }
+
+               // Make sure that the handler has a unique ID, used to find/remove it later
+               if ( !handler.guid ) {
+                       handler.guid = jQuery.guid++;
+               }
+
+               // Init the element's event structure and main handler, if this is the first
+               if ( !( events = elemData.events ) ) {
+                       events = elemData.events = {};
+               }
+               if ( !( eventHandle = elemData.handle ) ) {
+                       eventHandle = elemData.handle = function( e ) {
+
+                               // Discard the second event of a jQuery.event.trigger() and
+                               // when an event is called after a page has unloaded
+                               return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ?
+                                       jQuery.event.dispatch.apply( elem, arguments ) : undefined;
+                       };
+               }
+
+               // Handle multiple events separated by a space
+               types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
+               t = types.length;
+               while ( t-- ) {
+                       tmp = rtypenamespace.exec( types[ t ] ) || [];
+                       type = origType = tmp[ 1 ];
+                       namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
+
+                       // There *must* be a type, no attaching namespace-only handlers
+                       if ( !type ) {
+                               continue;
+                       }
+
+                       // If event changes its type, use the special event handlers for the changed type
+                       special = jQuery.event.special[ type ] || {};
+
+                       // If selector defined, determine special event api type, otherwise given type
+                       type = ( selector ? special.delegateType : special.bindType ) || type;
+
+                       // Update special based on newly reset type
+                       special = jQuery.event.special[ type ] || {};
+
+                       // handleObj is passed to all event handlers
+                       handleObj = jQuery.extend( {
+                               type: type,
+                               origType: origType,
+                               data: data,
+                               handler: handler,
+                               guid: handler.guid,
+                               selector: selector,
+                               needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
+                               namespace: namespaces.join( "." )
+                       }, handleObjIn );
+
+                       // Init the event handler queue if we're the first
+                       if ( !( handlers = events[ type ] ) ) {
+                               handlers = events[ type ] = [];
+                               handlers.delegateCount = 0;
+
+                               // Only use addEventListener if the special events handler returns false
+                               if ( !special.setup ||
+                                       special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
+
+                                       if ( elem.addEventListener ) {
+                                               elem.addEventListener( type, eventHandle );
+                                       }
+                               }
+                       }
+
+                       if ( special.add ) {
+                               special.add.call( elem, handleObj );
+
+                               if ( !handleObj.handler.guid ) {
+                                       handleObj.handler.guid = handler.guid;
+                               }
+                       }
+
+                       // Add to the element's handler list, delegates in front
+                       if ( selector ) {
+                               handlers.splice( handlers.delegateCount++, 0, handleObj );
+                       } else {
+                               handlers.push( handleObj );
+                       }
+
+                       // Keep track of which events have ever been used, for event optimization
+                       jQuery.event.global[ type ] = true;
+               }
+
+       },
+
+       // Detach an event or set of events from an element
+       remove: function( elem, types, handler, selector, mappedTypes ) {
+
+               var j, origCount, tmp,
+                       events, t, handleObj,
+                       special, handlers, type, namespaces, origType,
+                       elemData = dataPriv.hasData( elem ) && dataPriv.get( elem );
+
+               if ( !elemData || !( events = elemData.events ) ) {
+                       return;
+               }
+
+               // Once for each type.namespace in types; type may be omitted
+               types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
+               t = types.length;
+               while ( t-- ) {
+                       tmp = rtypenamespace.exec( types[ t ] ) || [];
+                       type = origType = tmp[ 1 ];
+                       namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
+
+                       // Unbind all events (on this namespace, if provided) for the element
+                       if ( !type ) {
+                               for ( type in events ) {
+                                       jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
+                               }
+                               continue;
+                       }
+
+                       special = jQuery.event.special[ type ] || {};
+                       type = ( selector ? special.delegateType : special.bindType ) || type;
+                       handlers = events[ type ] || [];
+                       tmp = tmp[ 2 ] &&
+                               new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" );
+
+                       // Remove matching events
+                       origCount = j = handlers.length;
+                       while ( j-- ) {
+                               handleObj = handlers[ j ];
+
+                               if ( ( mappedTypes || origType === handleObj.origType ) &&
+                                       ( !handler || handler.guid === handleObj.guid ) &&
+                                       ( !tmp || tmp.test( handleObj.namespace ) ) &&
+                                       ( !selector || selector === handleObj.selector ||
+                                               selector === "**" && handleObj.selector ) ) {
+                                       handlers.splice( j, 1 );
+
+                                       if ( handleObj.selector ) {
+                                               handlers.delegateCount--;
+                                       }
+                                       if ( special.remove ) {
+                                               special.remove.call( elem, handleObj );
+                                       }
+                               }
+                       }
+
+                       // Remove generic event handler if we removed something and no more handlers exist
+                       // (avoids potential for endless recursion during removal of special event handlers)
+                       if ( origCount && !handlers.length ) {
+                               if ( !special.teardown ||
+                                       special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
+
+                                       jQuery.removeEvent( elem, type, elemData.handle );
+                               }
+
+                               delete events[ type ];
+                       }
+               }
+
+               // Remove data and the expando if it's no longer used
+               if ( jQuery.isEmptyObject( events ) ) {
+                       dataPriv.remove( elem, "handle events" );
+               }
+       },
+
+       dispatch: function( nativeEvent ) {
+
+               // Make a writable jQuery.Event from the native event object
+               var event = jQuery.event.fix( nativeEvent );
+
+               var i, j, ret, matched, handleObj, handlerQueue,
+                       args = new Array( arguments.length ),
+                       handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [],
+                       special = jQuery.event.special[ event.type ] || {};
+
+               // Use the fix-ed jQuery.Event rather than the (read-only) native event
+               args[ 0 ] = event;
+
+               for ( i = 1; i < arguments.length; i++ ) {
+                       args[ i ] = arguments[ i ];
+               }
+
+               event.delegateTarget = this;
+
+               // Call the preDispatch hook for the mapped type, and let it bail if desired
+               if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
+                       return;
+               }
+
+               // Determine handlers
+               handlerQueue = jQuery.event.handlers.call( this, event, handlers );
+
+               // Run delegates first; they may want to stop propagation beneath us
+               i = 0;
+               while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {
+                       event.currentTarget = matched.elem;
+
+                       j = 0;
+                       while ( ( handleObj = matched.handlers[ j++ ] ) &&
+                               !event.isImmediatePropagationStopped() ) {
+
+                               // Triggered event must either 1) have no namespace, or 2) have namespace(s)
+                               // a subset or equal to those in the bound event (both can have no namespace).
+                               if ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) {
+
+                                       event.handleObj = handleObj;
+                                       event.data = handleObj.data;
+
+                                       ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||
+                                               handleObj.handler ).apply( matched.elem, args );
+
+                                       if ( ret !== undefined ) {
+                                               if ( ( event.result = ret ) === false ) {
+                                                       event.preventDefault();
+                                                       event.stopPropagation();
+                                               }
+                                       }
+                               }
+                       }
+               }
+
+               // Call the postDispatch hook for the mapped type
+               if ( special.postDispatch ) {
+                       special.postDispatch.call( this, event );
+               }
+
+               return event.result;
+       },
+
+       handlers: function( event, handlers ) {
+               var i, handleObj, sel, matchedHandlers, matchedSelectors,
+                       handlerQueue = [],
+                       delegateCount = handlers.delegateCount,
+                       cur = event.target;
+
+               // Find delegate handlers
+               if ( delegateCount &&
+
+                       // Support: IE <=9
+                       // Black-hole SVG <use> instance trees (trac-13180)
+                       cur.nodeType &&
+
+                       // Support: Firefox <=42
+                       // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)
+                       // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click
+                       // Support: IE 11 only
+                       // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343)
+                       !( event.type === "click" && event.button >= 1 ) ) {
+
+                       for ( ; cur !== this; cur = cur.parentNode || this ) {
+
+                               // Don't check non-elements (#13208)
+                               // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
+                               if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) {
+                                       matchedHandlers = [];
+                                       matchedSelectors = {};
+                                       for ( i = 0; i < delegateCount; i++ ) {
+                                               handleObj = handlers[ i ];
+
+                                               // Don't conflict with Object.prototype properties (#13203)
+                                               sel = handleObj.selector + " ";
+
+                                               if ( matchedSelectors[ sel ] === undefined ) {
+                                                       matchedSelectors[ sel ] = handleObj.needsContext ?
+                                                               jQuery( sel, this ).index( cur ) > -1 :
+                                                               jQuery.find( sel, this, null, [ cur ] ).length;
+                                               }
+                                               if ( matchedSelectors[ sel ] ) {
+                                                       matchedHandlers.push( handleObj );
+                                               }
+                                       }
+                                       if ( matchedHandlers.length ) {
+                                               handlerQueue.push( { elem: cur, handlers: matchedHandlers } );
+                                       }
+                               }
+                       }
+               }
+
+               // Add the remaining (directly-bound) handlers
+               cur = this;
+               if ( delegateCount < handlers.length ) {
+                       handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );
+               }
+
+               return handlerQueue;
+       },
+
+       addProp: function( name, hook ) {
+               Object.defineProperty( jQuery.Event.prototype, name, {
+                       enumerable: true,
+                       configurable: true,
+
+                       get: jQuery.isFunction( hook ) ?
+                               function() {
+                                       if ( this.originalEvent ) {
+                                                       return hook( this.originalEvent );
+                                       }
+                               } :
+                               function() {
+                                       if ( this.originalEvent ) {
+                                                       return this.originalEvent[ name ];
+                                       }
+                               },
+
+                       set: function( value ) {
+                               Object.defineProperty( this, name, {
+                                       enumerable: true,
+                                       configurable: true,
+                                       writable: true,
+                                       value: value
+                               } );
+                       }
+               } );
+       },
+
+       fix: function( originalEvent ) {
+               return originalEvent[ jQuery.expando ] ?
+                       originalEvent :
+                       new jQuery.Event( originalEvent );
+       },
+
+       special: {
+               load: {
+
+                       // Prevent triggered image.load events from bubbling to window.load
+                       noBubble: true
+               },
+               focus: {
+
+                       // Fire native event if possible so blur/focus sequence is correct
+                       trigger: function() {
+                               if ( this !== safeActiveElement() && this.focus ) {
+                                       this.focus();
+                                       return false;
+                               }
+                       },
+                       delegateType: "focusin"
+               },
+               blur: {
+                       trigger: function() {
+                               if ( this === safeActiveElement() && this.blur ) {
+                                       this.blur();
+                                       return false;
+                               }
+                       },
+                       delegateType: "focusout"
+               },
+               click: {
+
+                       // For checkbox, fire native event so checked state will be right
+                       trigger: function() {
+                               if ( this.type === "checkbox" && this.click && nodeName( this, "input" ) ) {
+                                       this.click();
+                                       return false;
+                               }
+                       },
+
+                       // For cross-browser consistency, don't fire native .click() on links
+                       _default: function( event ) {
+                               return nodeName( event.target, "a" );
+                       }
+               },
+
+               beforeunload: {
+                       postDispatch: function( event ) {
+
+                               // Support: Firefox 20+
+                               // Firefox doesn't alert if the returnValue field is not set.
+                               if ( event.result !== undefined && event.originalEvent ) {
+                                       event.originalEvent.returnValue = event.result;
+                               }
+                       }
+               }
+       }
+};
+
+jQuery.removeEvent = function( elem, type, handle ) {
+
+       // This "if" is needed for plain objects
+       if ( elem.removeEventListener ) {
+               elem.removeEventListener( type, handle );
+       }
+};
+
+jQuery.Event = function( src, props ) {
+
+       // Allow instantiation without the 'new' keyword
+       if ( !( this instanceof jQuery.Event ) ) {
+               return new jQuery.Event( src, props );
+       }
+
+       // Event object
+       if ( src && src.type ) {
+               this.originalEvent = src;
+               this.type = src.type;
+
+               // Events bubbling up the document may have been marked as prevented
+               // by a handler lower down the tree; reflect the correct value.
+               this.isDefaultPrevented = src.defaultPrevented ||
+                               src.defaultPrevented === undefined &&
+
+                               // Support: Android <=2.3 only
+                               src.returnValue === false ?
+                       returnTrue :
+                       returnFalse;
+
+               // Create target properties
+               // Support: Safari <=6 - 7 only
+               // Target should not be a text node (#504, #13143)
+               this.target = ( src.target && src.target.nodeType === 3 ) ?
+                       src.target.parentNode :
+                       src.target;
+
+               this.currentTarget = src.currentTarget;
+               this.relatedTarget = src.relatedTarget;
+
+       // Event type
+       } else {
+               this.type = src;
+       }
+
+       // Put explicitly provided properties onto the event object
+       if ( props ) {
+               jQuery.extend( this, props );
+       }
+
+       // Create a timestamp if incoming event doesn't have one
+       this.timeStamp = src && src.timeStamp || jQuery.now();
+
+       // Mark it as fixed
+       this[ jQuery.expando ] = true;
+};
+
+// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
+// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
+jQuery.Event.prototype = {
+       constructor: jQuery.Event,
+       isDefaultPrevented: returnFalse,
+       isPropagationStopped: returnFalse,
+       isImmediatePropagationStopped: returnFalse,
+       isSimulated: false,
+
+       preventDefault: function() {
+               var e = this.originalEvent;
+
+               this.isDefaultPrevented = returnTrue;
+
+               if ( e && !this.isSimulated ) {
+                       e.preventDefault();
+               }
+       },
+       stopPropagation: function() {
+               var e = this.originalEvent;
+
+               this.isPropagationStopped = returnTrue;
+
+               if ( e && !this.isSimulated ) {
+                       e.stopPropagation();
+               }
+       },
+       stopImmediatePropagation: function() {
+               var e = this.originalEvent;
+
+               this.isImmediatePropagationStopped = returnTrue;
+
+               if ( e && !this.isSimulated ) {
+                       e.stopImmediatePropagation();
+               }
+
+               this.stopPropagation();
+       }
+};
+
+// Includes all common event props including KeyEvent and MouseEvent specific props
+jQuery.each( {
+       altKey: true,
+       bubbles: true,
+       cancelable: true,
+       changedTouches: true,
+       ctrlKey: true,
+       detail: true,
+       eventPhase: true,
+       metaKey: true,
+       pageX: true,
+       pageY: true,
+       shiftKey: true,
+       view: true,
+       "char": true,
+       charCode: true,
+       key: true,
+       keyCode: true,
+       button: true,
+       buttons: true,
+       clientX: true,
+       clientY: true,
+       offsetX: true,
+       offsetY: true,
+       pointerId: true,
+       pointerType: true,
+       screenX: true,
+       screenY: true,
+       targetTouches: true,
+       toElement: true,
+       touches: true,
+
+       which: function( event ) {
+               var button = event.button;
+
+               // Add which for key events
+               if ( event.which == null && rkeyEvent.test( event.type ) ) {
+                       return event.charCode != null ? event.charCode : event.keyCode;
+               }
+
+               // Add which for click: 1 === left; 2 === middle; 3 === right
+               if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {
+                       if ( button & 1 ) {
+                               return 1;
+                       }
+
+                       if ( button & 2 ) {
+                               return 3;
+                       }
+
+                       if ( button & 4 ) {
+                               return 2;
+                       }
+
+                       return 0;
+               }
+
+               return event.which;
+       }
+}, jQuery.event.addProp );
+
+// Create mouseenter/leave events using mouseover/out and event-time checks
+// so that event delegation works in jQuery.
+// Do the same for pointerenter/pointerleave and pointerover/pointerout
+//
+// Support: Safari 7 only
+// Safari sends mouseenter too often; see:
+// https://bugs.chromium.org/p/chromium/issues/detail?id=470258
+// for the description of the bug (it existed in older Chrome versions as well).
+jQuery.each( {
+       mouseenter: "mouseover",
+       mouseleave: "mouseout",
+       pointerenter: "pointerover",
+       pointerleave: "pointerout"
+}, function( orig, fix ) {
+       jQuery.event.special[ orig ] = {
+               delegateType: fix,
+               bindType: fix,
+
+               handle: function( event ) {
+                       var ret,
+                               target = this,
+                               related = event.relatedTarget,
+                               handleObj = event.handleObj;
+
+                       // For mouseenter/leave call the handler if related is outside the target.
+                       // NB: No relatedTarget if the mouse left/entered the browser window
+                       if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {
+                               event.type = handleObj.origType;
+                               ret = handleObj.handler.apply( this, arguments );
+                               event.type = fix;
+                       }
+                       return ret;
+               }
+       };
+} );
+
+jQuery.fn.extend( {
+
+       on: function( types, selector, data, fn ) {
+               return on( this, types, selector, data, fn );
+       },
+       one: function( types, selector, data, fn ) {
+               return on( this, types, selector, data, fn, 1 );
+       },
+       off: function( types, selector, fn ) {
+               var handleObj, type;
+               if ( types && types.preventDefault && types.handleObj ) {
+
+                       // ( event )  dispatched jQuery.Event
+                       handleObj = types.handleObj;
+                       jQuery( types.delegateTarget ).off(
+                               handleObj.namespace ?
+                                       handleObj.origType + "." + handleObj.namespace :
+                                       handleObj.origType,
+                               handleObj.selector,
+                               handleObj.handler
+                       );
+                       return this;
+               }
+               if ( typeof types === "object" ) {
+
+                       // ( types-object [, selector] )
+                       for ( type in types ) {
+                               this.off( type, selector, types[ type ] );
+                       }
+                       return this;
+               }
+               if ( selector === false || typeof selector === "function" ) {
+
+                       // ( types [, fn] )
+                       fn = selector;
+                       selector = undefined;
+               }
+               if ( fn === false ) {
+                       fn = returnFalse;
+               }
+               return this.each( function() {
+                       jQuery.event.remove( this, types, fn, selector );
+               } );
+       }
+} );
+
+
+var
+
+       /* eslint-disable max-len */
+
+       // See https://github.com/eslint/eslint/issues/3229
+       rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,
+
+       /* eslint-enable */
+
+       // Support: IE <=10 - 11, Edge 12 - 13
+       // In IE/Edge using regex groups here causes severe slowdowns.
+       // See https://connect.microsoft.com/IE/feedback/details/1736512/
+       rnoInnerhtml = /<script|<style|<link/i,
+
+       // checked="checked" or checked
+       rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
+       rscriptTypeMasked = /^true\/(.*)/,
+       rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;
+
+// Prefer a tbody over its parent table for containing new rows
+function manipulationTarget( elem, content ) {
+       if ( nodeName( elem, "table" ) &&
+               nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) {
+
+               return jQuery( ">tbody", elem )[ 0 ] || elem;
+       }
+
+       return elem;
+}
+
+// Replace/restore the type attribute of script elements for safe DOM manipulation
+function disableScript( elem ) {
+       elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type;
+       return elem;
+}
+function restoreScript( elem ) {
+       var match = rscriptTypeMasked.exec( elem.type );
+
+       if ( match ) {
+               elem.type = match[ 1 ];
+       } else {
+               elem.removeAttribute( "type" );
+       }
+
+       return elem;
+}
+
+function cloneCopyEvent( src, dest ) {
+       var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;
+
+       if ( dest.nodeType !== 1 ) {
+               return;
+       }
+
+       // 1. Copy private data: events, handlers, etc.
+       if ( dataPriv.hasData( src ) ) {
+               pdataOld = dataPriv.access( src );
+               pdataCur = dataPriv.set( dest, pdataOld );
+               events = pdataOld.events;
+
+               if ( events ) {
+                       delete pdataCur.handle;
+                       pdataCur.events = {};
+
+                       for ( type in events ) {
+                               for ( i = 0, l = events[ type ].length; i < l; i++ ) {
+                                       jQuery.event.add( dest, type, events[ type ][ i ] );
+                               }
+                       }
+               }
+       }
+
+       // 2. Copy user data
+       if ( dataUser.hasData( src ) ) {
+               udataOld = dataUser.access( src );
+               udataCur = jQuery.extend( {}, udataOld );
+
+               dataUser.set( dest, udataCur );
+       }
+}
+
+// Fix IE bugs, see support tests
+function fixInput( src, dest ) {
+       var nodeName = dest.nodeName.toLowerCase();
+
+       // Fails to persist the checked state of a cloned checkbox or radio button.
+       if ( nodeName === "input" && rcheckableType.test( src.type ) ) {
+               dest.checked = src.checked;
+
+       // Fails to return the selected option to the default selected state when cloning options
+       } else if ( nodeName === "input" || nodeName === "textarea" ) {
+               dest.defaultValue = src.defaultValue;
+       }
+}
+
+function domManip( collection, args, callback, ignored ) {
+
+       // Flatten any nested arrays
+       args = concat.apply( [], args );
+
+       var fragment, first, scripts, hasScripts, node, doc,
+               i = 0,
+               l = collection.length,
+               iNoClone = l - 1,
+               value = args[ 0 ],
+               isFunction = jQuery.isFunction( value );
+
+       // We can't cloneNode fragments that contain checked, in WebKit
+       if ( isFunction ||
+                       ( l > 1 && typeof value === "string" &&
+                               !support.checkClone && rchecked.test( value ) ) ) {
+               return collection.each( function( index ) {
+                       var self = collection.eq( index );
+                       if ( isFunction ) {
+                               args[ 0 ] = value.call( this, index, self.html() );
+                       }
+                       domManip( self, args, callback, ignored );
+               } );
+       }
+
+       if ( l ) {
+               fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );
+               first = fragment.firstChild;
+
+               if ( fragment.childNodes.length === 1 ) {
+                       fragment = first;
+               }
+
+               // Require either new content or an interest in ignored elements to invoke the callback
+               if ( first || ignored ) {
+                       scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
+                       hasScripts = scripts.length;
+
+                       // Use the original fragment for the last item
+                       // instead of the first because it can end up
+                       // being emptied incorrectly in certain situations (#8070).
+                       for ( ; i < l; i++ ) {
+                               node = fragment;
+
+                               if ( i !== iNoClone ) {
+                                       node = jQuery.clone( node, true, true );
+
+                                       // Keep references to cloned scripts for later restoration
+                                       if ( hasScripts ) {
+
+                                               // Support: Android <=4.0 only, PhantomJS 1 only
+                                               // push.apply(_, arraylike) throws on ancient WebKit
+                                               jQuery.merge( scripts, getAll( node, "script" ) );
+                                       }
+                               }
+
+                               callback.call( collection[ i ], node, i );
+                       }
+
+                       if ( hasScripts ) {
+                               doc = scripts[ scripts.length - 1 ].ownerDocument;
+
+                               // Reenable scripts
+                               jQuery.map( scripts, restoreScript );
+
+                               // Evaluate executable scripts on first document insertion
+                               for ( i = 0; i < hasScripts; i++ ) {
+                                       node = scripts[ i ];
+                                       if ( rscriptType.test( node.type || "" ) &&
+                                               !dataPriv.access( node, "globalEval" ) &&
+                                               jQuery.contains( doc, node ) ) {
+
+                                               if ( node.src ) {
+
+                                                       // Optional AJAX dependency, but won't run scripts if not present
+                                                       if ( jQuery._evalUrl ) {
+                                                               jQuery._evalUrl( node.src );
+                                                       }
+                                               } else {
+                                                       DOMEval( node.textContent.replace( rcleanScript, "" ), doc );
+                                               }
+                                       }
+                               }
+                       }
+               }
+       }
+
+       return collection;
+}
+
+function remove( elem, selector, keepData ) {
+       var node,
+               nodes = selector ? jQuery.filter( selector, elem ) : elem,
+               i = 0;
+
+       for ( ; ( node = nodes[ i ] ) != null; i++ ) {
+               if ( !keepData && node.nodeType === 1 ) {
+                       jQuery.cleanData( getAll( node ) );
+               }
+
+               if ( node.parentNode ) {
+                       if ( keepData && jQuery.contains( node.ownerDocument, node ) ) {
+                               setGlobalEval( getAll( node, "script" ) );
+                       }
+                       node.parentNode.removeChild( node );
+               }
+       }
+
+       return elem;
+}
+
+jQuery.extend( {
+       htmlPrefilter: function( html ) {
+               return html.replace( rxhtmlTag, "<$1></$2>" );
+       },
+
+       clone: function( elem, dataAndEvents, deepDataAndEvents ) {
+               var i, l, srcElements, destElements,
+                       clone = elem.cloneNode( true ),
+                       inPage = jQuery.contains( elem.ownerDocument, elem );
+
+               // Fix IE cloning issues
+               if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&
+                               !jQuery.isXMLDoc( elem ) ) {
+
+                       // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2
+                       destElements = getAll( clone );
+                       srcElements = getAll( elem );
+
+                       for ( i = 0, l = srcElements.length; i < l; i++ ) {
+                               fixInput( srcElements[ i ], destElements[ i ] );
+                       }
+               }
+
+               // Copy the events from the original to the clone
+               if ( dataAndEvents ) {
+                       if ( deepDataAndEvents ) {
+                               srcElements = srcElements || getAll( elem );
+                               destElements = destElements || getAll( clone );
+
+                               for ( i = 0, l = srcElements.length; i < l; i++ ) {
+                                       cloneCopyEvent( srcElements[ i ], destElements[ i ] );
+                               }
+                       } else {
+                               cloneCopyEvent( elem, clone );
+                       }
+               }
+
+               // Preserve script evaluation history
+               destElements = getAll( clone, "script" );
+               if ( destElements.length > 0 ) {
+                       setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
+               }
+
+               // Return the cloned set
+               return clone;
+       },
+
+       cleanData: function( elems ) {
+               var data, elem, type,
+                       special = jQuery.event.special,
+                       i = 0;
+
+               for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {
+                       if ( acceptData( elem ) ) {
+                               if ( ( data = elem[ dataPriv.expando ] ) ) {
+                                       if ( data.events ) {
+                                               for ( type in data.events ) {
+                                                       if ( special[ type ] ) {
+                                                               jQuery.event.remove( elem, type );
+
+                                                       // This is a shortcut to avoid jQuery.event.remove's overhead
+                                                       } else {
+                                                               jQuery.removeEvent( elem, type, data.handle );
+                                                       }
+                                               }
+                                       }
+
+                                       // Support: Chrome <=35 - 45+
+                                       // Assign undefined instead of using delete, see Data#remove
+                                       elem[ dataPriv.expando ] = undefined;
+                               }
+                               if ( elem[ dataUser.expando ] ) {
+
+                                       // Support: Chrome <=35 - 45+
+                                       // Assign undefined instead of using delete, see Data#remove
+                                       elem[ dataUser.expando ] = undefined;
+                               }
+                       }
+               }
+       }
+} );
+
+jQuery.fn.extend( {
+       detach: function( selector ) {
+               return remove( this, selector, true );
+       },
+
+       remove: function( selector ) {
+               return remove( this, selector );
+       },
+
+       text: function( value ) {
+               return access( this, function( value ) {
+                       return value === undefined ?
+                               jQuery.text( this ) :
+                               this.empty().each( function() {
+                                       if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+                                               this.textContent = value;
+                                       }
+                               } );
+               }, null, value, arguments.length );
+       },
+
+       append: function() {
+               return domManip( this, arguments, function( elem ) {
+                       if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+                               var target = manipulationTarget( this, elem );
+                               target.appendChild( elem );
+                       }
+               } );
+       },
+
+       prepend: function() {
+               return domManip( this, arguments, function( elem ) {
+                       if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+                               var target = manipulationTarget( this, elem );
+                               target.insertBefore( elem, target.firstChild );
+                       }
+               } );
+       },
+
+       before: function() {
+               return domManip( this, arguments, function( elem ) {
+                       if ( this.parentNode ) {
+                               this.parentNode.insertBefore( elem, this );
+                       }
+               } );
+       },
+
+       after: function() {
+               return domManip( this, arguments, function( elem ) {
+                       if ( this.parentNode ) {
+                               this.parentNode.insertBefore( elem, this.nextSibling );
+                       }
+               } );
+       },
+
+       empty: function() {
+               var elem,
+                       i = 0;
+
+               for ( ; ( elem = this[ i ] ) != null; i++ ) {
+                       if ( elem.nodeType === 1 ) {
+
+                               // Prevent memory leaks
+                               jQuery.cleanData( getAll( elem, false ) );
+
+                               // Remove any remaining nodes
+                               elem.textContent = "";
+                       }
+               }
+
+               return this;
+       },
+
+       clone: function( dataAndEvents, deepDataAndEvents ) {
+               dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
+               deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
+
+               return this.map( function() {
+                       return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
+               } );
+       },
+
+       html: function( value ) {
+               return access( this, function( value ) {
+                       var elem = this[ 0 ] || {},
+                               i = 0,
+                               l = this.length;
+
+                       if ( value === undefined && elem.nodeType === 1 ) {
+                               return elem.innerHTML;
+                       }
+
+                       // See if we can take a shortcut and just use innerHTML
+                       if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
+                               !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) {
+
+                               value = jQuery.htmlPrefilter( value );
+
+                               try {
+                                       for ( ; i < l; i++ ) {
+                                               elem = this[ i ] || {};
+
+                                               // Remove element nodes and prevent memory leaks
+                                               if ( elem.nodeType === 1 ) {
+                                                       jQuery.cleanData( getAll( elem, false ) );
+                                                       elem.innerHTML = value;
+                                               }
+                                       }
+
+                                       elem = 0;
+
+                               // If using innerHTML throws an exception, use the fallback method
+                               } catch ( e ) {}
+                       }
+
+                       if ( elem ) {
+                               this.empty().append( value );
+                       }
+               }, null, value, arguments.length );
+       },
+
+       replaceWith: function() {
+               var ignored = [];
+
+               // Make the changes, replacing each non-ignored context element with the new content
+               return domManip( this, arguments, function( elem ) {
+                       var parent = this.parentNode;
+
+                       if ( jQuery.inArray( this, ignored ) < 0 ) {
+                               jQuery.cleanData( getAll( this ) );
+                               if ( parent ) {
+                                       parent.replaceChild( elem, this );
+                               }
+                       }
+
+               // Force callback invocation
+               }, ignored );
+       }
+} );
+
+jQuery.each( {
+       appendTo: "append",
+       prependTo: "prepend",
+       insertBefore: "before",
+       insertAfter: "after",
+       replaceAll: "replaceWith"
+}, function( name, original ) {
+       jQuery.fn[ name ] = function( selector ) {
+               var elems,
+                       ret = [],
+                       insert = jQuery( selector ),
+                       last = insert.length - 1,
+                       i = 0;
+
+               for ( ; i <= last; i++ ) {
+                       elems = i === last ? this : this.clone( true );
+                       jQuery( insert[ i ] )[ original ]( elems );
+
+                       // Support: Android <=4.0 only, PhantomJS 1 only
+                       // .get() because push.apply(_, arraylike) throws on ancient WebKit
+                       push.apply( ret, elems.get() );
+               }
+
+               return this.pushStack( ret );
+       };
+} );
+var rmargin = ( /^margin/ );
+
+var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );
+
+var getStyles = function( elem ) {
+
+               // Support: IE <=11 only, Firefox <=30 (#15098, #14150)
+               // IE throws on elements created in popups
+               // FF meanwhile throws on frame elements through "defaultView.getComputedStyle"
+               var view = elem.ownerDocument.defaultView;
+
+               if ( !view || !view.opener ) {
+                       view = window;
+               }
+
+               return view.getComputedStyle( elem );
+       };
+
+
+
+( function() {
+
+       // Executing both pixelPosition & boxSizingReliable tests require only one layout
+       // so they're executed at the same time to save the second computation.
+       function computeStyleTests() {
+
+               // This is a singleton, we need to execute it only once
+               if ( !div ) {
+                       return;
+               }
+
+               div.style.cssText =
+                       "box-sizing:border-box;" +
+                       "position:relative;display:block;" +
+                       "margin:auto;border:1px;padding:1px;" +
+                       "top:1%;width:50%";
+               div.innerHTML = "";
+               documentElement.appendChild( container );
+
+               var divStyle = window.getComputedStyle( div );
+               pixelPositionVal = divStyle.top !== "1%";
+
+               // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44
+               reliableMarginLeftVal = divStyle.marginLeft === "2px";
+               boxSizingReliableVal = divStyle.width === "4px";
+
+               // Support: Android 4.0 - 4.3 only
+               // Some styles come back with percentage values, even though they shouldn't
+               div.style.marginRight = "50%";
+               pixelMarginRightVal = divStyle.marginRight === "4px";
+
+               documentElement.removeChild( container );
+
+               // Nullify the div so it wouldn't be stored in the memory and
+               // it will also be a sign that checks already performed
+               div = null;
+       }
+
+       var pixelPositionVal, boxSizingReliableVal, pixelMarginRightVal, reliableMarginLeftVal,
+               container = document.createElement( "div" ),
+               div = document.createElement( "div" );
+
+       // Finish early in limited (non-browser) environments
+       if ( !div.style ) {
+               return;
+       }
+
+       // Support: IE <=9 - 11 only
+       // Style of cloned element affects source element cloned (#8908)
+       div.style.backgroundClip = "content-box";
+       div.cloneNode( true ).style.backgroundClip = "";
+       support.clearCloneStyle = div.style.backgroundClip === "content-box";
+
+       container.style.cssText = "border:0;width:8px;height:0;top:0;left:-9999px;" +
+               "padding:0;margin-top:1px;position:absolute";
+       container.appendChild( div );
+
+       jQuery.extend( support, {
+               pixelPosition: function() {
+                       computeStyleTests();
+                       return pixelPositionVal;
+               },
+               boxSizingReliable: function() {
+                       computeStyleTests();
+                       return boxSizingReliableVal;
+               },
+               pixelMarginRight: function() {
+                       computeStyleTests();
+                       return pixelMarginRightVal;
+               },
+               reliableMarginLeft: function() {
+                       computeStyleTests();
+                       return reliableMarginLeftVal;
+               }
+       } );
+} )();
+
+
+function curCSS( elem, name, computed ) {
+       var width, minWidth, maxWidth, ret,
+
+               // Support: Firefox 51+
+               // Retrieving style before computed somehow
+               // fixes an issue with getting wrong values
+               // on detached elements
+               style = elem.style;
+
+       computed = computed || getStyles( elem );
+
+       // getPropertyValue is needed for:
+       //   .css('filter') (IE 9 only, #12537)
+       //   .css('--customProperty) (#3144)
+       if ( computed ) {
+               ret = computed.getPropertyValue( name ) || computed[ name ];
+
+               if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
+                       ret = jQuery.style( elem, name );
+               }
+
+               // A tribute to the "awesome hack by Dean Edwards"
+               // Android Browser returns percentage for some values,
+               // but width seems to be reliably pixels.
+               // This is against the CSSOM draft spec:
+               // https://drafts.csswg.org/cssom/#resolved-values
+               if ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) {
+
+                       // Remember the original values
+                       width = style.width;
+                       minWidth = style.minWidth;
+                       maxWidth = style.maxWidth;
+
+                       // Put in the new values to get a computed value out
+                       style.minWidth = style.maxWidth = style.width = ret;
+                       ret = computed.width;
+
+                       // Revert the changed values
+                       style.width = width;
+                       style.minWidth = minWidth;
+                       style.maxWidth = maxWidth;
+               }
+       }
+
+       return ret !== undefined ?
+
+               // Support: IE <=9 - 11 only
+               // IE returns zIndex value as an integer.
+               ret + "" :
+               ret;
+}
+
+
+function addGetHookIf( conditionFn, hookFn ) {
+
+       // Define the hook, we'll check on the first run if it's really needed.
+       return {
+               get: function() {
+                       if ( conditionFn() ) {
+
+                               // Hook not needed (or it's not possible to use it due
+                               // to missing dependency), remove it.
+                               delete this.get;
+                               return;
+                       }
+
+                       // Hook needed; redefine it so that the support test is not executed again.
+                       return ( this.get = hookFn ).apply( this, arguments );
+               }
+       };
+}
+
+
+var
+
+       // Swappable if display is none or starts with table
+       // except "table", "table-cell", or "table-caption"
+       // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
+       rdisplayswap = /^(none|table(?!-c[ea]).+)/,
+       rcustomProp = /^--/,
+       cssShow = { position: "absolute", visibility: "hidden", display: "block" },
+       cssNormalTransform = {
+               letterSpacing: "0",
+               fontWeight: "400"
+       },
+
+       cssPrefixes = [ "Webkit", "Moz", "ms" ],
+       emptyStyle = document.createElement( "div" ).style;
+
+// Return a css property mapped to a potentially vendor prefixed property
+function vendorPropName( name ) {
+
+       // Shortcut for names that are not vendor prefixed
+       if ( name in emptyStyle ) {
+               return name;
+       }
+
+       // Check for vendor prefixed names
+       var capName = name[ 0 ].toUpperCase() + name.slice( 1 ),
+               i = cssPrefixes.length;
+
+       while ( i-- ) {
+               name = cssPrefixes[ i ] + capName;
+               if ( name in emptyStyle ) {
+                       return name;
+               }
+       }
+}
+
+// Return a property mapped along what jQuery.cssProps suggests or to
+// a vendor prefixed property.
+function finalPropName( name ) {
+       var ret = jQuery.cssProps[ name ];
+       if ( !ret ) {
+               ret = jQuery.cssProps[ name ] = vendorPropName( name ) || name;
+       }
+       return ret;
+}
+
+function setPositiveNumber( elem, value, subtract ) {
+
+       // Any relative (+/-) values have already been
+       // normalized at this point
+       var matches = rcssNum.exec( value );
+       return matches ?
+
+               // Guard against undefined "subtract", e.g., when used as in cssHooks
+               Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) :
+               value;
+}
+
+function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
+       var i,
+               val = 0;
+
+       // If we already have the right measurement, avoid augmentation
+       if ( extra === ( isBorderBox ? "border" : "content" ) ) {
+               i = 4;
+
+       // Otherwise initialize for horizontal or vertical properties
+       } else {
+               i = name === "width" ? 1 : 0;
+       }
+
+       for ( ; i < 4; i += 2 ) {
+
+               // Both box models exclude margin, so add it if we want it
+               if ( extra === "margin" ) {
+                       val += jQuery.css( elem, extra + cssExpand[ i ], true, styles );
+               }
+
+               if ( isBorderBox ) {
+
+                       // border-box includes padding, so remove it if we want content
+                       if ( extra === "content" ) {
+                               val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
+                       }
+
+                       // At this point, extra isn't border nor margin, so remove border
+                       if ( extra !== "margin" ) {
+                               val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
+                       }
+               } else {
+
+                       // At this point, extra isn't content, so add padding
+                       val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
+
+                       // At this point, extra isn't content nor padding, so add border
+                       if ( extra !== "padding" ) {
+                               val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
+                       }
+               }
+       }
+
+       return val;
+}
+
+function getWidthOrHeight( elem, name, extra ) {
+
+       // Start with computed style
+       var valueIsBorderBox,
+               styles = getStyles( elem ),
+               val = curCSS( elem, name, styles ),
+               isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
+
+       // Computed unit is not pixels. Stop here and return.
+       if ( rnumnonpx.test( val ) ) {
+               return val;
+       }
+
+       // Check for style in case a browser which returns unreliable values
+       // for getComputedStyle silently falls back to the reliable elem.style
+       valueIsBorderBox = isBorderBox &&
+               ( support.boxSizingReliable() || val === elem.style[ name ] );
+
+       // Fall back to offsetWidth/Height when value is "auto"
+       // This happens for inline elements with no explicit setting (gh-3571)
+       if ( val === "auto" ) {
+               val = elem[ "offset" + name[ 0 ].toUpperCase() + name.slice( 1 ) ];
+       }
+
+       // Normalize "", auto, and prepare for extra
+       val = parseFloat( val ) || 0;
+
+       // Use the active box-sizing model to add/subtract irrelevant styles
+       return ( val +
+               augmentWidthOrHeight(
+                       elem,
+                       name,
+                       extra || ( isBorderBox ? "border" : "content" ),
+                       valueIsBorderBox,
+                       styles
+               )
+       ) + "px";
+}
+
+jQuery.extend( {
+
+       // Add in style property hooks for overriding the default
+       // behavior of getting and setting a style property
+       cssHooks: {
+               opacity: {
+                       get: function( elem, computed ) {
+                               if ( computed ) {
+
+                                       // We should always get a number back from opacity
+                                       var ret = curCSS( elem, "opacity" );
+                                       return ret === "" ? "1" : ret;
+                               }
+                       }
+               }
+       },
+
+       // Don't automatically add "px" to these possibly-unitless properties
+       cssNumber: {
+               "animationIterationCount": true,
+               "columnCount": true,
+               "fillOpacity": true,
+               "flexGrow": true,
+               "flexShrink": true,
+               "fontWeight": true,
+               "lineHeight": true,
+               "opacity": true,
+               "order": true,
+               "orphans": true,
+               "widows": true,
+               "zIndex": true,
+               "zoom": true
+       },
+
+       // Add in properties whose names you wish to fix before
+       // setting or getting the value
+       cssProps: {
+               "float": "cssFloat"
+       },
+
+       // Get and set the style property on a DOM Node
+       style: function( elem, name, value, extra ) {
+
+               // Don't set styles on text and comment nodes
+               if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
+                       return;
+               }
+
+               // Make sure that we're working with the right name
+               var ret, type, hooks,
+                       origName = jQuery.camelCase( name ),
+                       isCustomProp = rcustomProp.test( name ),
+                       style = elem.style;
+
+               // Make sure that we're working with the right name. We don't
+               // want to query the value if it is a CSS custom property
+               // since they are user-defined.
+               if ( !isCustomProp ) {
+                       name = finalPropName( origName );
+               }
+
+               // Gets hook for the prefixed version, then unprefixed version
+               hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
+
+               // Check if we're setting a value
+               if ( value !== undefined ) {
+                       type = typeof value;
+
+                       // Convert "+=" or "-=" to relative numbers (#7345)
+                       if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {
+                               value = adjustCSS( elem, name, ret );
+
+                               // Fixes bug #9237
+                               type = "number";
+                       }
+
+                       // Make sure that null and NaN values aren't set (#7116)
+                       if ( value == null || value !== value ) {
+                               return;
+                       }
+
+                       // If a number was passed in, add the unit (except for certain CSS properties)
+                       if ( type === "number" ) {
+                               value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" );
+                       }
+
+                       // background-* props affect original clone's values
+                       if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) {
+                               style[ name ] = "inherit";
+                       }
+
+                       // If a hook was provided, use that value, otherwise just set the specified value
+                       if ( !hooks || !( "set" in hooks ) ||
+                               ( value = hooks.set( elem, value, extra ) ) !== undefined ) {
+
+                               if ( isCustomProp ) {
+                                       style.setProperty( name, value );
+                               } else {
+                                       style[ name ] = value;
+                               }
+                       }
+
+               } else {
+
+                       // If a hook was provided get the non-computed value from there
+                       if ( hooks && "get" in hooks &&
+                               ( ret = hooks.get( elem, false, extra ) ) !== undefined ) {
+
+                               return ret;
+                       }
+
+                       // Otherwise just get the value from the style object
+                       return style[ name ];
+               }
+       },
+
+       css: function( elem, name, extra, styles ) {
+               var val, num, hooks,
+                       origName = jQuery.camelCase( name ),
+                       isCustomProp = rcustomProp.test( name );
+
+               // Make sure that we're working with the right name. We don't
+               // want to modify the value if it is a CSS custom property
+               // since they are user-defined.
+               if ( !isCustomProp ) {
+                       name = finalPropName( origName );
+               }
+
+               // Try prefixed name followed by the unprefixed name
+               hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
+
+               // If a hook was provided get the computed value from there
+               if ( hooks && "get" in hooks ) {
+                       val = hooks.get( elem, true, extra );
+               }
+
+               // Otherwise, if a way to get the computed value exists, use that
+               if ( val === undefined ) {
+                       val = curCSS( elem, name, styles );
+               }
+
+               // Convert "normal" to computed value
+               if ( val === "normal" && name in cssNormalTransform ) {
+                       val = cssNormalTransform[ name ];
+               }
+
+               // Make numeric if forced or a qualifier was provided and val looks numeric
+               if ( extra === "" || extra ) {
+                       num = parseFloat( val );
+                       return extra === true || isFinite( num ) ? num || 0 : val;
+               }
+
+               return val;
+       }
+} );
+
+jQuery.each( [ "height", "width" ], function( i, name ) {
+       jQuery.cssHooks[ name ] = {
+               get: function( elem, computed, extra ) {
+                       if ( computed ) {
+
+                               // Certain elements can have dimension info if we invisibly show them
+                               // but it must have a current display style that would benefit
+                               return rdisplayswap.test( jQuery.css( elem, "display" ) ) &&
+
+                                       // Support: Safari 8+
+                                       // Table columns in Safari have non-zero offsetWidth & zero
+                                       // getBoundingClientRect().width unless display is changed.
+                                       // Support: IE <=11 only
+                                       // Running getBoundingClientRect on a disconnected node
+                                       // in IE throws an error.
+                                       ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?
+                                               swap( elem, cssShow, function() {
+                                                       return getWidthOrHeight( elem, name, extra );
+                                               } ) :
+                                               getWidthOrHeight( elem, name, extra );
+                       }
+               },
+
+               set: function( elem, value, extra ) {
+                       var matches,
+                               styles = extra && getStyles( elem ),
+                               subtract = extra && augmentWidthOrHeight(
+                                       elem,
+                                       name,
+                                       extra,
+                                       jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
+                                       styles
+                               );
+
+                       // Convert to pixels if value adjustment is needed
+                       if ( subtract && ( matches = rcssNum.exec( value ) ) &&
+                               ( matches[ 3 ] || "px" ) !== "px" ) {
+
+                               elem.style[ name ] = value;
+                               value = jQuery.css( elem, name );
+                       }
+
+                       return setPositiveNumber( elem, value, subtract );
+               }
+       };
+} );
+
+jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,
+       function( elem, computed ) {
+               if ( computed ) {
+                       return ( parseFloat( curCSS( elem, "marginLeft" ) ) ||
+                               elem.getBoundingClientRect().left -
+                                       swap( elem, { marginLeft: 0 }, function() {
+                                               return elem.getBoundingClientRect().left;
+                                       } )
+                               ) + "px";
+               }
+       }
+);
+
+// These hooks are used by animate to expand properties
+jQuery.each( {
+       margin: "",
+       padding: "",
+       border: "Width"
+}, function( prefix, suffix ) {
+       jQuery.cssHooks[ prefix + suffix ] = {
+               expand: function( value ) {
+                       var i = 0,
+                               expanded = {},
+
+                               // Assumes a single number if not a string
+                               parts = typeof value === "string" ? value.split( " " ) : [ value ];
+
+                       for ( ; i < 4; i++ ) {
+                               expanded[ prefix + cssExpand[ i ] + suffix ] =
+                                       parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
+                       }
+
+                       return expanded;
+               }
+       };
+
+       if ( !rmargin.test( prefix ) ) {
+               jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
+       }
+} );
+
+jQuery.fn.extend( {
+       css: function( name, value ) {
+               return access( this, function( elem, name, value ) {
+                       var styles, len,
+                               map = {},
+                               i = 0;
+
+                       if ( Array.isArray( name ) ) {
+                               styles = getStyles( elem );
+                               len = name.length;
+
+                               for ( ; i < len; i++ ) {
+                                       map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
+                               }
+
+                               return map;
+                       }
+
+                       return value !== undefined ?
+                               jQuery.style( elem, name, value ) :
+                               jQuery.css( elem, name );
+               }, name, value, arguments.length > 1 );
+       }
+} );
+
+
+// Based off of the plugin by Clint Helfers, with permission.
+// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/
+jQuery.fn.delay = function( time, type ) {
+       time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
+       type = type || "fx";
+
+       return this.queue( type, function( next, hooks ) {
+               var timeout = window.setTimeout( next, time );
+               hooks.stop = function() {
+                       window.clearTimeout( timeout );
+               };
+       } );
+};
+
+
+( function() {
+       var input = document.createElement( "input" ),
+               select = document.createElement( "select" ),
+               opt = select.appendChild( document.createElement( "option" ) );
+
+       input.type = "checkbox";
+
+       // Support: Android <=4.3 only
+       // Default value for a checkbox should be "on"
+       support.checkOn = input.value !== "";
+
+       // Support: IE <=11 only
+       // Must access selectedIndex to make default options select
+       support.optSelected = opt.selected;
+
+       // Support: IE <=11 only
+       // An input loses its value after becoming a radio
+       input = document.createElement( "input" );
+       input.value = "t";
+       input.type = "radio";
+       support.radioValue = input.value === "t";
+} )();
+
+
+var boolHook,
+       attrHandle = jQuery.expr.attrHandle;
+
+jQuery.fn.extend( {
+       attr: function( name, value ) {
+               return access( this, jQuery.attr, name, value, arguments.length > 1 );
+       },
+
+       removeAttr: function( name ) {
+               return this.each( function() {
+                       jQuery.removeAttr( this, name );
+               } );
+       }
+} );
+
+jQuery.extend( {
+       attr: function( elem, name, value ) {
+               var ret, hooks,
+                       nType = elem.nodeType;
+
+               // Don't get/set attributes on text, comment and attribute nodes
+               if ( nType === 3 || nType === 8 || nType === 2 ) {
+                       return;
+               }
+
+               // Fallback to prop when attributes are not supported
+               if ( typeof elem.getAttribute === "undefined" ) {
+                       return jQuery.prop( elem, name, value );
+               }
+
+               // Attribute hooks are determined by the lowercase version
+               // Grab necessary hook if one is defined
+               if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
+                       hooks = jQuery.attrHooks[ name.toLowerCase() ] ||
+                               ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );
+               }
+
+               if ( value !== undefined ) {
+                       if ( value === null ) {
+                               jQuery.removeAttr( elem, name );
+                               return;
+                       }
+
+                       if ( hooks && "set" in hooks &&
+                               ( ret = hooks.set( elem, value, name ) ) !== undefined ) {
+                               return ret;
+                       }
+
+                       elem.setAttribute( name, value + "" );
+                       return value;
+               }
+
+               if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
+                       return ret;
+               }
+
+               ret = jQuery.find.attr( elem, name );
+
+               // Non-existent attributes return null, we normalize to undefined
+               return ret == null ? undefined : ret;
+       },
+
+       attrHooks: {
+               type: {
+                       set: function( elem, value ) {
+                               if ( !support.radioValue && value === "radio" &&
+                                       nodeName( elem, "input" ) ) {
+                                       var val = elem.value;
+                                       elem.setAttribute( "type", value );
+                                       if ( val ) {
+                                               elem.value = val;
+                                       }
+                                       return value;
+                               }
+                       }
+               }
+       },
+
+       removeAttr: function( elem, value ) {
+               var name,
+                       i = 0,
+
+                       // Attribute names can contain non-HTML whitespace characters
+                       // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2
+                       attrNames = value && value.match( rnothtmlwhite );
+
+               if ( attrNames && elem.nodeType === 1 ) {
+                       while ( ( name = attrNames[ i++ ] ) ) {
+                               elem.removeAttribute( name );
+                       }
+               }
+       }
+} );
+
+// Hooks for boolean attributes
+boolHook = {
+       set: function( elem, value, name ) {
+               if ( value === false ) {
+
+                       // Remove boolean attributes when set to false
+                       jQuery.removeAttr( elem, name );
+               } else {
+                       elem.setAttribute( name, name );
+               }
+               return name;
+       }
+};
+
+jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) {
+       var getter = attrHandle[ name ] || jQuery.find.attr;
+
+       attrHandle[ name ] = function( elem, name, isXML ) {
+               var ret, handle,
+                       lowercaseName = name.toLowerCase();
+
+               if ( !isXML ) {
+
+                       // Avoid an infinite loop by temporarily removing this function from the getter
+                       handle = attrHandle[ lowercaseName ];
+                       attrHandle[ lowercaseName ] = ret;
+                       ret = getter( elem, name, isXML ) != null ?
+                               lowercaseName :
+                               null;
+                       attrHandle[ lowercaseName ] = handle;
+               }
+               return ret;
+       };
+} );
+
+
+
+
+var rfocusable = /^(?:input|select|textarea|button)$/i,
+       rclickable = /^(?:a|area)$/i;
+
+jQuery.fn.extend( {
+       prop: function( name, value ) {
+               return access( this, jQuery.prop, name, value, arguments.length > 1 );
+       },
+
+       removeProp: function( name ) {
+               return this.each( function() {
+                       delete this[ jQuery.propFix[ name ] || name ];
+               } );
+       }
+} );
+
+jQuery.extend( {
+       prop: function( elem, name, value ) {
+               var ret, hooks,
+                       nType = elem.nodeType;
+
+               // Don't get/set properties on text, comment and attribute nodes
+               if ( nType === 3 || nType === 8 || nType === 2 ) {
+                       return;
+               }
+
+               if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
+
+                       // Fix name and attach hooks
+                       name = jQuery.propFix[ name ] || name;
+                       hooks = jQuery.propHooks[ name ];
+               }
+
+               if ( value !== undefined ) {
+                       if ( hooks && "set" in hooks &&
+                               ( ret = hooks.set( elem, value, name ) ) !== undefined ) {
+                               return ret;
+                       }
+
+                       return ( elem[ name ] = value );
+               }
+
+               if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
+                       return ret;
+               }
+
+               return elem[ name ];
+       },
+
+       propHooks: {
+               tabIndex: {
+                       get: function( elem ) {
+
+                               // Support: IE <=9 - 11 only
+                               // elem.tabIndex doesn't always return the
+                               // correct value when it hasn't been explicitly set
+                               // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
+                               // Use proper attribute retrieval(#12072)
+                               var tabindex = jQuery.find.attr( elem, "tabindex" );
+
+                               if ( tabindex ) {
+                                       return parseInt( tabindex, 10 );
+                               }
+
+                               if (
+                                       rfocusable.test( elem.nodeName ) ||
+                                       rclickable.test( elem.nodeName ) &&
+                                       elem.href
+                               ) {
+                                       return 0;
+                               }
+
+                               return -1;
+                       }
+               }
+       },
+
+       propFix: {
+               "for": "htmlFor",
+               "class": "className"
+       }
+} );
+
+// Support: IE <=11 only
+// Accessing the selectedIndex property
+// forces the browser to respect setting selected
+// on the option
+// The getter ensures a default option is selected
+// when in an optgroup
+// eslint rule "no-unused-expressions" is disabled for this code
+// since it considers such accessions noop
+if ( !support.optSelected ) {
+       jQuery.propHooks.selected = {
+               get: function( elem ) {
+
+                       /* eslint no-unused-expressions: "off" */
+
+                       var parent = elem.parentNode;
+                       if ( parent && parent.parentNode ) {
+                               parent.parentNode.selectedIndex;
+                       }
+                       return null;
+               },
+               set: function( elem ) {
+
+                       /* eslint no-unused-expressions: "off" */
+
+                       var parent = elem.parentNode;
+                       if ( parent ) {
+                               parent.selectedIndex;
+
+                               if ( parent.parentNode ) {
+                                       parent.parentNode.selectedIndex;
+                               }
+                       }
+               }
+       };
+}
+
+jQuery.each( [
+       "tabIndex",
+       "readOnly",
+       "maxLength",
+       "cellSpacing",
+       "cellPadding",
+       "rowSpan",
+       "colSpan",
+       "useMap",
+       "frameBorder",
+       "contentEditable"
+], function() {
+       jQuery.propFix[ this.toLowerCase() ] = this;
+} );
+
+
+
+
+       // Strip and collapse whitespace according to HTML spec
+       // https://html.spec.whatwg.org/multipage/infrastructure.html#strip-and-collapse-whitespace
+       function stripAndCollapse( value ) {
+               var tokens = value.match( rnothtmlwhite ) || [];
+               return tokens.join( " " );
+       }
+
+
+function getClass( elem ) {
+       return elem.getAttribute && elem.getAttribute( "class" ) || "";
+}
+
+jQuery.fn.extend( {
+       addClass: function( value ) {
+               var classes, elem, cur, curValue, clazz, j, finalValue,
+                       i = 0;
+
+               if ( jQuery.isFunction( value ) ) {
+                       return this.each( function( j ) {
+                               jQuery( this ).addClass( value.call( this, j, getClass( this ) ) );
+                       } );
+               }
+
+               if ( typeof value === "string" && value ) {
+                       classes = value.match( rnothtmlwhite ) || [];
+
+                       while ( ( elem = this[ i++ ] ) ) {
+                               curValue = getClass( elem );
+                               cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
+
+                               if ( cur ) {
+                                       j = 0;
+                                       while ( ( clazz = classes[ j++ ] ) ) {
+                                               if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
+                                                       cur += clazz + " ";
+                                               }
+                                       }
+
+                                       // Only assign if different to avoid unneeded rendering.
+                                       finalValue = stripAndCollapse( cur );
+                                       if ( curValue !== finalValue ) {
+                                               elem.setAttribute( "class", finalValue );
+                                       }
+                               }
+                       }
+               }
+
+               return this;
+       },
+
+       removeClass: function( value ) {
+               var classes, elem, cur, curValue, clazz, j, finalValue,
+                       i = 0;
+
+               if ( jQuery.isFunction( value ) ) {
+                       return this.each( function( j ) {
+                               jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );
+                       } );
+               }
+
+               if ( !arguments.length ) {
+                       return this.attr( "class", "" );
+               }
+
+               if ( typeof value === "string" && value ) {
+                       classes = value.match( rnothtmlwhite ) || [];
+
+                       while ( ( elem = this[ i++ ] ) ) {
+                               curValue = getClass( elem );
+
+                               // This expression is here for better compressibility (see addClass)
+                               cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
+
+                               if ( cur ) {
+                                       j = 0;
+                                       while ( ( clazz = classes[ j++ ] ) ) {
+
+                                               // Remove *all* instances
+                                               while ( cur.indexOf( " " + clazz + " " ) > -1 ) {
+                                                       cur = cur.replace( " " + clazz + " ", " " );
+                                               }
+                                       }
+
+                                       // Only assign if different to avoid unneeded rendering.
+                                       finalValue = stripAndCollapse( cur );
+                                       if ( curValue !== finalValue ) {
+                                               elem.setAttribute( "class", finalValue );
+                                       }
+                               }
+                       }
+               }
+
+               return this;
+       },
+
+       toggleClass: function( value, stateVal ) {
+               var type = typeof value;
+
+               if ( typeof stateVal === "boolean" && type === "string" ) {
+                       return stateVal ? this.addClass( value ) : this.removeClass( value );
+               }
+
+               if ( jQuery.isFunction( value ) ) {
+                       return this.each( function( i ) {
+                               jQuery( this ).toggleClass(
+                                       value.call( this, i, getClass( this ), stateVal ),
+                                       stateVal
+                               );
+                       } );
+               }
+
+               return this.each( function() {
+                       var className, i, self, classNames;
+
+                       if ( type === "string" ) {
+
+                               // Toggle individual class names
+                               i = 0;
+                               self = jQuery( this );
+                               classNames = value.match( rnothtmlwhite ) || [];
+
+                               while ( ( className = classNames[ i++ ] ) ) {
+
+                                       // Check each className given, space separated list
+                                       if ( self.hasClass( className ) ) {
+                                               self.removeClass( className );
+                                       } else {
+                                               self.addClass( className );
+                                       }
+                               }
+
+                       // Toggle whole class name
+                       } else if ( value === undefined || type === "boolean" ) {
+                               className = getClass( this );
+                               if ( className ) {
+
+                                       // Store className if set
+                                       dataPriv.set( this, "__className__", className );
+                               }
+
+                               // If the element has a class name or if we're passed `false`,
+                               // then remove the whole classname (if there was one, the above saved it).
+                               // Otherwise bring back whatever was previously saved (if anything),
+                               // falling back to the empty string if nothing was stored.
+                               if ( this.setAttribute ) {
+                                       this.setAttribute( "class",
+                                               className || value === false ?
+                                               "" :
+                                               dataPriv.get( this, "__className__" ) || ""
+                                       );
+                               }
+                       }
+               } );
+       },
+
+       hasClass: function( selector ) {
+               var className, elem,
+                       i = 0;
+
+               className = " " + selector + " ";
+               while ( ( elem = this[ i++ ] ) ) {
+                       if ( elem.nodeType === 1 &&
+                               ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) {
+                                       return true;
+                       }
+               }
+
+               return false;
+       }
+} );
+
+
+
+
+var rreturn = /\r/g;
+
+jQuery.fn.extend( {
+       val: function( value ) {
+               var hooks, ret, isFunction,
+                       elem = this[ 0 ];
+
+               if ( !arguments.length ) {
+                       if ( elem ) {
+                               hooks = jQuery.valHooks[ elem.type ] ||
+                                       jQuery.valHooks[ elem.nodeName.toLowerCase() ];
+
+                               if ( hooks &&
+                                       "get" in hooks &&
+                                       ( ret = hooks.get( elem, "value" ) ) !== undefined
+                               ) {
+                                       return ret;
+                               }
+
+                               ret = elem.value;
+
+                               // Handle most common string cases
+                               if ( typeof ret === "string" ) {
+                                       return ret.replace( rreturn, "" );
+                               }
+
+                               // Handle cases where value is null/undef or number
+                               return ret == null ? "" : ret;
+                       }
+
+                       return;
+               }
+
+               isFunction = jQuery.isFunction( value );
+
+               return this.each( function( i ) {
+                       var val;
+
+                       if ( this.nodeType !== 1 ) {
+                               return;
+                       }
+
+                       if ( isFunction ) {
+                               val = value.call( this, i, jQuery( this ).val() );
+                       } else {
+                               val = value;
+                       }
+
+                       // Treat null/undefined as ""; convert numbers to string
+                       if ( val == null ) {
+                               val = "";
+
+                       } else if ( typeof val === "number" ) {
+                               val += "";
+
+                       } else if ( Array.isArray( val ) ) {
+                               val = jQuery.map( val, function( value ) {
+                                       return value == null ? "" : value + "";
+                               } );
+                       }
+
+                       hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
+
+                       // If set returns undefined, fall back to normal setting
+                       if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) {
+                               this.value = val;
+                       }
+               } );
+       }
+} );
+
+jQuery.extend( {
+       valHooks: {
+               option: {
+                       get: function( elem ) {
+
+                               var val = jQuery.find.attr( elem, "value" );
+                               return val != null ?
+                                       val :
+
+                                       // Support: IE <=10 - 11 only
+                                       // option.text throws exceptions (#14686, #14858)
+                                       // Strip and collapse whitespace
+                                       // https://html.spec.whatwg.org/#strip-and-collapse-whitespace
+                                       stripAndCollapse( jQuery.text( elem ) );
+                       }
+               },
+               select: {
+                       get: function( elem ) {
+                               var value, option, i,
+                                       options = elem.options,
+                                       index = elem.selectedIndex,
+                                       one = elem.type === "select-one",
+                                       values = one ? null : [],
+                                       max = one ? index + 1 : options.length;
+
+                               if ( index < 0 ) {
+                                       i = max;
+
+                               } else {
+                                       i = one ? index : 0;
+                               }
+
+                               // Loop through all the selected options
+                               for ( ; i < max; i++ ) {
+                                       option = options[ i ];
+
+                                       // Support: IE <=9 only
+                                       // IE8-9 doesn't update selected after form reset (#2551)
+                                       if ( ( option.selected || i === index ) &&
+
+                                                       // Don't return options that are disabled or in a disabled optgroup
+                                                       !option.disabled &&
+                                                       ( !option.parentNode.disabled ||
+                                                               !nodeName( option.parentNode, "optgroup" ) ) ) {
+
+                                               // Get the specific value for the option
+                                               value = jQuery( option ).val();
+
+                                               // We don't need an array for one selects
+                                               if ( one ) {
+                                                       return value;
+                                               }
+
+                                               // Multi-Selects return an array
+                                               values.push( value );
+                                       }
+                               }
+
+                               return values;
+                       },
+
+                       set: function( elem, value ) {
+                               var optionSet, option,
+                                       options = elem.options,
+                                       values = jQuery.makeArray( value ),
+                                       i = options.length;
+
+                               while ( i-- ) {
+                                       option = options[ i ];
+
+                                       /* eslint-disable no-cond-assign */
+
+                                       if ( option.selected =
+                                               jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1
+                                       ) {
+                                               optionSet = true;
+                                       }
+
+                                       /* eslint-enable no-cond-assign */
+                               }
+
+                               // Force browsers to behave consistently when non-matching value is set
+                               if ( !optionSet ) {
+                                       elem.selectedIndex = -1;
+                               }
+                               return values;
+                       }
+               }
+       }
+} );
+
+// Radios and checkboxes getter/setter
+jQuery.each( [ "radio", "checkbox" ], function() {
+       jQuery.valHooks[ this ] = {
+               set: function( elem, value ) {
+                       if ( Array.isArray( value ) ) {
+                               return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );
+                       }
+               }
+       };
+       if ( !support.checkOn ) {
+               jQuery.valHooks[ this ].get = function( elem ) {
+                       return elem.getAttribute( "value" ) === null ? "on" : elem.value;
+               };
+       }
+} );
+
+
+
+
+// Return jQuery for attributes-only inclusion
+
+
+var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/;
+
+jQuery.extend( jQuery.event, {
+
+       trigger: function( event, data, elem, onlyHandlers ) {
+
+               var i, cur, tmp, bubbleType, ontype, handle, special,
+                       eventPath = [ elem || document ],
+                       type = hasOwn.call( event, "type" ) ? event.type : event,
+                       namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : [];
+
+               cur = tmp = elem = elem || document;
+
+               // Don't do events on text and comment nodes
+               if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
+                       return;
+               }
+
+               // focus/blur morphs to focusin/out; ensure we're not firing them right now
+               if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
+                       return;
+               }
+
+               if ( type.indexOf( "." ) > -1 ) {
+
+                       // Namespaced trigger; create a regexp to match event type in handle()
+                       namespaces = type.split( "." );
+                       type = namespaces.shift();
+                       namespaces.sort();
+               }
+               ontype = type.indexOf( ":" ) < 0 && "on" + type;
+
+               // Caller can pass in a jQuery.Event object, Object, or just an event type string
+               event = event[ jQuery.expando ] ?
+                       event :
+                       new jQuery.Event( type, typeof event === "object" && event );
+
+               // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
+               event.isTrigger = onlyHandlers ? 2 : 3;
+               event.namespace = namespaces.join( "." );
+               event.rnamespace = event.namespace ?
+                       new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) :
+                       null;
+
+               // Clean up the event in case it is being reused
+               event.result = undefined;
+               if ( !event.target ) {
+                       event.target = elem;
+               }
+
+               // Clone any incoming data and prepend the event, creating the handler arg list
+               data = data == null ?
+                       [ event ] :
+                       jQuery.makeArray( data, [ event ] );
+
+               // Allow special events to draw outside the lines
+               special = jQuery.event.special[ type ] || {};
+               if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
+                       return;
+               }
+
+               // Determine event propagation path in advance, per W3C events spec (#9951)
+               // Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
+               if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
+
+                       bubbleType = special.delegateType || type;
+                       if ( !rfocusMorph.test( bubbleType + type ) ) {
+                               cur = cur.parentNode;
+                       }
+                       for ( ; cur; cur = cur.parentNode ) {
+                               eventPath.push( cur );
+                               tmp = cur;
+                       }
+
+                       // Only add window if we got to document (e.g., not plain obj or detached DOM)
+                       if ( tmp === ( elem.ownerDocument || document ) ) {
+                               eventPath.push( tmp.defaultView || tmp.parentWindow || window );
+                       }
+               }
+
+               // Fire handlers on the event path
+               i = 0;
+               while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {
+
+                       event.type = i > 1 ?
+                               bubbleType :
+                               special.bindType || type;
+
+                       // jQuery handler
+                       handle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] &&
+                               dataPriv.get( cur, "handle" );
+                       if ( handle ) {
+                               handle.apply( cur, data );
+                       }
+
+                       // Native handler
+                       handle = ontype && cur[ ontype ];
+                       if ( handle && handle.apply && acceptData( cur ) ) {
+                               event.result = handle.apply( cur, data );
+                               if ( event.result === false ) {
+                                       event.preventDefault();
+                               }
+                       }
+               }
+               event.type = type;
+
+               // If nobody prevented the default action, do it now
+               if ( !onlyHandlers && !event.isDefaultPrevented() ) {
+
+                       if ( ( !special._default ||
+                               special._default.apply( eventPath.pop(), data ) === false ) &&
+                               acceptData( elem ) ) {
+
+                               // Call a native DOM method on the target with the same name as the event.
+                               // Don't do default actions on window, that's where global variables be (#6170)
+                               if ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) {
+
+                                       // Don't re-trigger an onFOO event when we call its FOO() method
+                                       tmp = elem[ ontype ];
+
+                                       if ( tmp ) {
+                                               elem[ ontype ] = null;
+                                       }
+
+                                       // Prevent re-triggering of the same event, since we already bubbled it above
+                                       jQuery.event.triggered = type;
+                                       elem[ type ]();
+                                       jQuery.event.triggered = undefined;
+
+                                       if ( tmp ) {
+                                               elem[ ontype ] = tmp;
+                                       }
+                               }
+                       }
+               }
+
+               return event.result;
+       },
+
+       // Piggyback on a donor event to simulate a different one
+       // Used only for `focus(in | out)` events
+       simulate: function( type, elem, event ) {
+               var e = jQuery.extend(
+                       new jQuery.Event(),
+                       event,
+                       {
+                               type: type,
+                               isSimulated: true
+                       }
+               );
+
+               jQuery.event.trigger( e, null, elem );
+       }
+
+} );
+
+jQuery.fn.extend( {
+
+       trigger: function( type, data ) {
+               return this.each( function() {
+                       jQuery.event.trigger( type, data, this );
+               } );
+       },
+       triggerHandler: function( type, data ) {
+               var elem = this[ 0 ];
+               if ( elem ) {
+                       return jQuery.event.trigger( type, data, elem, true );
+               }
+       }
+} );
+
+
+jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " +
+       "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
+       "change select submit keydown keypress keyup contextmenu" ).split( " " ),
+       function( i, name ) {
+
+       // Handle event binding
+       jQuery.fn[ name ] = function( data, fn ) {
+               return arguments.length > 0 ?
+                       this.on( name, null, data, fn ) :
+                       this.trigger( name );
+       };
+} );
+
+jQuery.fn.extend( {
+       hover: function( fnOver, fnOut ) {
+               return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
+       }
+} );
+
+
+
+
+support.focusin = "onfocusin" in window;
+
+
+// Support: Firefox <=44
+// Firefox doesn't have focus(in | out) events
+// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787
+//
+// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1
+// focus(in | out) events fire after focus & blur events,
+// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order
+// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857
+if ( !support.focusin ) {
+       jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) {
+
+               // Attach a single capturing handler on the document while someone wants focusin/focusout
+               var handler = function( event ) {
+                       jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );
+               };
+
+               jQuery.event.special[ fix ] = {
+                       setup: function() {
+                               var doc = this.ownerDocument || this,
+                                       attaches = dataPriv.access( doc, fix );
+
+                               if ( !attaches ) {
+                                       doc.addEventListener( orig, handler, true );
+                               }
+                               dataPriv.access( doc, fix, ( attaches || 0 ) + 1 );
+                       },
+                       teardown: function() {
+                               var doc = this.ownerDocument || this,
+                                       attaches = dataPriv.access( doc, fix ) - 1;
+
+                               if ( !attaches ) {
+                                       doc.removeEventListener( orig, handler, true );
+                                       dataPriv.remove( doc, fix );
+
+                               } else {
+                                       dataPriv.access( doc, fix, attaches );
+                               }
+                       }
+               };
+       } );
+}
+
+
+var
+       rbracket = /\[\]$/,
+       rCRLF = /\r?\n/g,
+       rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
+       rsubmittable = /^(?:input|select|textarea|keygen)/i;
+
+function buildParams( prefix, obj, traditional, add ) {
+       var name;
+
+       if ( Array.isArray( obj ) ) {
+
+               // Serialize array item.
+               jQuery.each( obj, function( i, v ) {
+                       if ( traditional || rbracket.test( prefix ) ) {
+
+                               // Treat each array item as a scalar.
+                               add( prefix, v );
+
+                       } else {
+
+                               // Item is non-scalar (array or object), encode its numeric index.
+                               buildParams(
+                                       prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]",
+                                       v,
+                                       traditional,
+                                       add
+                               );
+                       }
+               } );
+
+       } else if ( !traditional && jQuery.type( obj ) === "object" ) {
+
+               // Serialize object item.
+               for ( name in obj ) {
+                       buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
+               }
+
+       } else {
+
+               // Serialize scalar item.
+               add( prefix, obj );
+       }
+}
+
+// Serialize an array of form elements or a set of
+// key/values into a query string
+jQuery.param = function( a, traditional ) {
+       var prefix,
+               s = [],
+               add = function( key, valueOrFunction ) {
+
+                       // If value is a function, invoke it and use its return value
+                       var value = jQuery.isFunction( valueOrFunction ) ?
+                               valueOrFunction() :
+                               valueOrFunction;
+
+                       s[ s.length ] = encodeURIComponent( key ) + "=" +
+                               encodeURIComponent( value == null ? "" : value );
+               };
+
+       // If an array was passed in, assume that it is an array of form elements.
+       if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
+
+               // Serialize the form elements
+               jQuery.each( a, function() {
+                       add( this.name, this.value );
+               } );
+
+       } else {
+
+               // If traditional, encode the "old" way (the way 1.3.2 or older
+               // did it), otherwise encode params recursively.
+               for ( prefix in a ) {
+                       buildParams( prefix, a[ prefix ], traditional, add );
+               }
+       }
+
+       // Return the resulting serialization
+       return s.join( "&" );
+};
+
+jQuery.fn.extend( {
+       serialize: function() {
+               return jQuery.param( this.serializeArray() );
+       },
+       serializeArray: function() {
+               return this.map( function() {
+
+                       // Can add propHook for "elements" to filter or add form elements
+                       var elements = jQuery.prop( this, "elements" );
+                       return elements ? jQuery.makeArray( elements ) : this;
+               } )
+               .filter( function() {
+                       var type = this.type;
+
+                       // Use .is( ":disabled" ) so that fieldset[disabled] works
+                       return this.name && !jQuery( this ).is( ":disabled" ) &&
+                               rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
+                               ( this.checked || !rcheckableType.test( type ) );
+               } )
+               .map( function( i, elem ) {
+                       var val = jQuery( this ).val();
+
+                       if ( val == null ) {
+                               return null;
+                       }
+
+                       if ( Array.isArray( val ) ) {
+                               return jQuery.map( val, function( val ) {
+                                       return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+                               } );
+                       }
+
+                       return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+               } ).get();
+       }
+} );
+
+
+jQuery.fn.extend( {
+       wrapAll: function( html ) {
+               var wrap;
+
+               if ( this[ 0 ] ) {
+                       if ( jQuery.isFunction( html ) ) {
+                               html = html.call( this[ 0 ] );
+                       }
+
+                       // The elements to wrap the target around
+                       wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );
+
+                       if ( this[ 0 ].parentNode ) {
+                               wrap.insertBefore( this[ 0 ] );
+                       }
+
+                       wrap.map( function() {
+                               var elem = this;
+
+                               while ( elem.firstElementChild ) {
+                                       elem = elem.firstElementChild;
+                               }
+
+                               return elem;
+                       } ).append( this );
+               }
+
+               return this;
+       },
+
+       wrapInner: function( html ) {
+               if ( jQuery.isFunction( html ) ) {
+                       return this.each( function( i ) {
+                               jQuery( this ).wrapInner( html.call( this, i ) );
+                       } );
+               }
+
+               return this.each( function() {
+                       var self = jQuery( this ),
+                               contents = self.contents();
+
+                       if ( contents.length ) {
+                               contents.wrapAll( html );
+
+                       } else {
+                               self.append( html );
+                       }
+               } );
+       },
+
+       wrap: function( html ) {
+               var isFunction = jQuery.isFunction( html );
+
+               return this.each( function( i ) {
+                       jQuery( this ).wrapAll( isFunction ? html.call( this, i ) : html );
+               } );
+       },
+
+       unwrap: function( selector ) {
+               this.parent( selector ).not( "body" ).each( function() {
+                       jQuery( this ).replaceWith( this.childNodes );
+               } );
+               return this;
+       }
+} );
+
+
+jQuery.expr.pseudos.hidden = function( elem ) {
+       return !jQuery.expr.pseudos.visible( elem );
+};
+jQuery.expr.pseudos.visible = function( elem ) {
+       return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );
+};
+
+
+
+
+// Support: Safari 8 only
+// In Safari 8 documents created via document.implementation.createHTMLDocument
+// collapse sibling forms: the second one becomes a child of the first one.
+// Because of that, this security measure has to be disabled in Safari 8.
+// https://bugs.webkit.org/show_bug.cgi?id=137337
+support.createHTMLDocument = ( function() {
+       var body = document.implementation.createHTMLDocument( "" ).body;
+       body.innerHTML = "<form></form><form></form>";
+       return body.childNodes.length === 2;
+} )();
+
+
+// Argument "data" should be string of html
+// context (optional): If specified, the fragment will be created in this context,
+// defaults to document
+// keepScripts (optional): If true, will include scripts passed in the html string
+jQuery.parseHTML = function( data, context, keepScripts ) {
+       if ( typeof data !== "string" ) {
+               return [];
+       }
+       if ( typeof context === "boolean" ) {
+               keepScripts = context;
+               context = false;
+       }
+
+       var base, parsed, scripts;
+
+       if ( !context ) {
+
+               // Stop scripts or inline event handlers from being executed immediately
+               // by using document.implementation
+               if ( support.createHTMLDocument ) {
+                       context = document.implementation.createHTMLDocument( "" );
+
+                       // Set the base href for the created document
+                       // so any parsed elements with URLs
+                       // are based on the document's URL (gh-2965)
+                       base = context.createElement( "base" );
+                       base.href = document.location.href;
+                       context.head.appendChild( base );
+               } else {
+                       context = document;
+               }
+       }
+
+       parsed = rsingleTag.exec( data );
+       scripts = !keepScripts && [];
+
+       // Single tag
+       if ( parsed ) {
+               return [ context.createElement( parsed[ 1 ] ) ];
+       }
+
+       parsed = buildFragment( [ data ], context, scripts );
+
+       if ( scripts && scripts.length ) {
+               jQuery( scripts ).remove();
+       }
+
+       return jQuery.merge( [], parsed.childNodes );
+};
+
+
+jQuery.offset = {
+       setOffset: function( elem, options, i ) {
+               var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,
+                       position = jQuery.css( elem, "position" ),
+                       curElem = jQuery( elem ),
+                       props = {};
+
+               // Set position first, in-case top/left are set even on static elem
+               if ( position === "static" ) {
+                       elem.style.position = "relative";
+               }
+
+               curOffset = curElem.offset();
+               curCSSTop = jQuery.css( elem, "top" );
+               curCSSLeft = jQuery.css( elem, "left" );
+               calculatePosition = ( position === "absolute" || position === "fixed" ) &&
+                       ( curCSSTop + curCSSLeft ).indexOf( "auto" ) > -1;
+
+               // Need to be able to calculate position if either
+               // top or left is auto and position is either absolute or fixed
+               if ( calculatePosition ) {
+                       curPosition = curElem.position();
+                       curTop = curPosition.top;
+                       curLeft = curPosition.left;
+
+               } else {
+                       curTop = parseFloat( curCSSTop ) || 0;
+                       curLeft = parseFloat( curCSSLeft ) || 0;
+               }
+
+               if ( jQuery.isFunction( options ) ) {
+
+                       // Use jQuery.extend here to allow modification of coordinates argument (gh-1848)
+                       options = options.call( elem, i, jQuery.extend( {}, curOffset ) );
+               }
+
+               if ( options.top != null ) {
+                       props.top = ( options.top - curOffset.top ) + curTop;
+               }
+               if ( options.left != null ) {
+                       props.left = ( options.left - curOffset.left ) + curLeft;
+               }
+
+               if ( "using" in options ) {
+                       options.using.call( elem, props );
+
+               } else {
+                       curElem.css( props );
+               }
+       }
+};
+
+jQuery.fn.extend( {
+       offset: function( options ) {
+
+               // Preserve chaining for setter
+               if ( arguments.length ) {
+                       return options === undefined ?
+                               this :
+                               this.each( function( i ) {
+                                       jQuery.offset.setOffset( this, options, i );
+                               } );
+               }
+
+               var doc, docElem, rect, win,
+                       elem = this[ 0 ];
+
+               if ( !elem ) {
+                       return;
+               }
+
+               // Return zeros for disconnected and hidden (display: none) elements (gh-2310)
+               // Support: IE <=11 only
+               // Running getBoundingClientRect on a
+               // disconnected node in IE throws an error
+               if ( !elem.getClientRects().length ) {
+                       return { top: 0, left: 0 };
+               }
+
+               rect = elem.getBoundingClientRect();
+
+               doc = elem.ownerDocument;
+               docElem = doc.documentElement;
+               win = doc.defaultView;
+
+               return {
+                       top: rect.top + win.pageYOffset - docElem.clientTop,
+                       left: rect.left + win.pageXOffset - docElem.clientLeft
+               };
+       },
+
+       position: function() {
+               if ( !this[ 0 ] ) {
+                       return;
+               }
+
+               var offsetParent, offset,
+                       elem = this[ 0 ],
+                       parentOffset = { top: 0, left: 0 };
+
+               // Fixed elements are offset from window (parentOffset = {top:0, left: 0},
+               // because it is its only offset parent
+               if ( jQuery.css( elem, "position" ) === "fixed" ) {
+
+                       // Assume getBoundingClientRect is there when computed position is fixed
+                       offset = elem.getBoundingClientRect();
+
+               } else {
+
+                       // Get *real* offsetParent
+                       offsetParent = this.offsetParent();
+
+                       // Get correct offsets
+                       offset = this.offset();
+                       if ( !nodeName( offsetParent[ 0 ], "html" ) ) {
+                               parentOffset = offsetParent.offset();
+                       }
+
+                       // Add offsetParent borders
+                       parentOffset = {
+                               top: parentOffset.top + jQuery.css( offsetParent[ 0 ], "borderTopWidth", true ),
+                               left: parentOffset.left + jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true )
+                       };
+               }
+
+               // Subtract parent offsets and element margins
+               return {
+                       top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ),
+                       left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true )
+               };
+       },
+
+       // This method will return documentElement in the following cases:
+       // 1) For the element inside the iframe without offsetParent, this method will return
+       //    documentElement of the parent window
+       // 2) For the hidden or detached element
+       // 3) For body or html element, i.e. in case of the html node - it will return itself
+       //
+       // but those exceptions were never presented as a real life use-cases
+       // and might be considered as more preferable results.
+       //
+       // This logic, however, is not guaranteed and can change at any point in the future
+       offsetParent: function() {
+               return this.map( function() {
+                       var offsetParent = this.offsetParent;
+
+                       while ( offsetParent && jQuery.css( offsetParent, "position" ) === "static" ) {
+                               offsetParent = offsetParent.offsetParent;
+                       }
+
+                       return offsetParent || documentElement;
+               } );
+       }
+} );
+
+// Create scrollLeft and scrollTop methods
+jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) {
+       var top = "pageYOffset" === prop;
+
+       jQuery.fn[ method ] = function( val ) {
+               return access( this, function( elem, method, val ) {
+
+                       // Coalesce documents and windows
+                       var win;
+                       if ( jQuery.isWindow( elem ) ) {
+                               win = elem;
+                       } else if ( elem.nodeType === 9 ) {
+                               win = elem.defaultView;
+                       }
+
+                       if ( val === undefined ) {
+                               return win ? win[ prop ] : elem[ method ];
+                       }
+
+                       if ( win ) {
+                               win.scrollTo(
+                                       !top ? val : win.pageXOffset,
+                                       top ? val : win.pageYOffset
+                               );
+
+                       } else {
+                               elem[ method ] = val;
+                       }
+               }, method, val, arguments.length );
+       };
+} );
+
+// Support: Safari <=7 - 9.1, Chrome <=37 - 49
+// Add the top/left cssHooks using jQuery.fn.position
+// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
+// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347
+// getComputedStyle returns percent when specified for top/left/bottom/right;
+// rather than make the css module depend on the offset module, just check for it here
+jQuery.each( [ "top", "left" ], function( i, prop ) {
+       jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,
+               function( elem, computed ) {
+                       if ( computed ) {
+                               computed = curCSS( elem, prop );
+
+                               // If curCSS returns percentage, fallback to offset
+                               return rnumnonpx.test( computed ) ?
+                                       jQuery( elem ).position()[ prop ] + "px" :
+                                       computed;
+                       }
+               }
+       );
+} );
+
+
+// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
+jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
+       jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name },
+               function( defaultExtra, funcName ) {
+
+               // Margin is only for outerHeight, outerWidth
+               jQuery.fn[ funcName ] = function( margin, value ) {
+                       var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
+                               extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
+
+                       return access( this, function( elem, type, value ) {
+                               var doc;
+
+                               if ( jQuery.isWindow( elem ) ) {
+
+                                       // $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)
+                                       return funcName.indexOf( "outer" ) === 0 ?
+                                               elem[ "inner" + name ] :
+                                               elem.document.documentElement[ "client" + name ];
+                               }
+
+                               // Get document width or height
+                               if ( elem.nodeType === 9 ) {
+                                       doc = elem.documentElement;
+
+                                       // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],
+                                       // whichever is greatest
+                                       return Math.max(
+                                               elem.body[ "scroll" + name ], doc[ "scroll" + name ],
+                                               elem.body[ "offset" + name ], doc[ "offset" + name ],
+                                               doc[ "client" + name ]
+                                       );
+                               }
+
+                               return value === undefined ?
+
+                                       // Get width or height on the element, requesting but not forcing parseFloat
+                                       jQuery.css( elem, type, extra ) :
+
+                                       // Set width or height on the element
+                                       jQuery.style( elem, type, value, extra );
+                       }, type, chainable ? margin : undefined, chainable );
+               };
+       } );
+} );
+
+
+jQuery.fn.extend( {
+
+       bind: function( types, data, fn ) {
+               return this.on( types, null, data, fn );
+       },
+       unbind: function( types, fn ) {
+               return this.off( types, null, fn );
+       },
+
+       delegate: function( selector, types, data, fn ) {
+               return this.on( types, selector, data, fn );
+       },
+       undelegate: function( selector, types, fn ) {
+
+               // ( namespace ) or ( selector, types [, fn] )
+               return arguments.length === 1 ?
+                       this.off( selector, "**" ) :
+                       this.off( types, selector || "**", fn );
+       }
+} );
+
+jQuery.holdReady = function( hold ) {
+       if ( hold ) {
+               jQuery.readyWait++;
+       } else {
+               jQuery.ready( true );
+       }
+};
+jQuery.isArray = Array.isArray;
+jQuery.parseJSON = JSON.parse;
+jQuery.nodeName = nodeName;
+
+
+
+
+// Register as a named AMD module, since jQuery can be concatenated with other
+// files that may use define, but not via a proper concatenation script that
+// understands anonymous AMD modules. A named AMD is safest and most robust
+// way to register. Lowercase jquery is used because AMD module names are
+// derived from file names, and jQuery is normally delivered in a lowercase
+// file name. Do this after creating the global so that if an AMD module wants
+// to call noConflict to hide this version of jQuery, it will work.
+
+// Note that for maximum portability, libraries that are not jQuery should
+// declare themselves as anonymous modules, and avoid setting a global if an
+// AMD loader is present. jQuery is a special case. For more information, see
+// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon
+
+if ( typeof define === "function" && define.amd ) {
+       define( "jquery", [], function() {
+               return jQuery;
+       } );
+}
+
+
+
+
+var
+
+       // Map over jQuery in case of overwrite
+       _jQuery = window.jQuery,
+
+       // Map over the $ in case of overwrite
+       _$ = window.$;
+
+jQuery.noConflict = function( deep ) {
+       if ( window.$ === jQuery ) {
+               window.$ = _$;
+       }
+
+       if ( deep && window.jQuery === jQuery ) {
+               window.jQuery = _jQuery;
+       }
+
+       return jQuery;
+};
+
+// Expose jQuery and $ identifiers, even in AMD
+// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
+// and CommonJS for browser emulators (#13566)
+if ( !noGlobal ) {
+       window.jQuery = window.$ = jQuery;
+}
+
+
+
+
+return jQuery;
+} );
diff --git a/js/jquery/dist/jquery.slim.min.js b/js/jquery/dist/jquery.slim.min.js
new file mode 100644 (file)
index 0000000..105d00e
--- /dev/null
@@ -0,0 +1,4 @@
+/*! jQuery v3.2.1 -ajax,-ajax/jsonp,-ajax/load,-ajax/parseXML,-ajax/script,-ajax/var/location,-ajax/var/nonce,-ajax/var/rquery,-ajax/xhr,-manipulation/_evalUrl,-event/ajax,-effects,-effects/Tween,-effects/animatedSelector | (c) JS Foundation and other contributors | jquery.org/license */
+!function(a,b){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){"use strict";var c=[],d=a.document,e=Object.getPrototypeOf,f=c.slice,g=c.concat,h=c.push,i=c.indexOf,j={},k=j.toString,l=j.hasOwnProperty,m=l.toString,n=m.call(Object),o={};function p(a,b){b=b||d;var c=b.createElement("script");c.text=a,b.head.appendChild(c).parentNode.removeChild(c)}var q="3.2.1 -ajax,-ajax/jsonp,-ajax/load,-ajax/parseXML,-ajax/script,-ajax/var/location,-ajax/var/nonce,-ajax/var/rquery,-ajax/xhr,-manipulation/_evalUrl,-event/ajax,-effects,-effects/Tween,-effects/animatedSelector",r=function(a,b){return new r.fn.init(a,b)},s=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,t=/^-ms-/,u=/-([a-z])/g,v=function(a,b){return b.toUpperCase()};r.fn=r.prototype={jquery:q,constructor:r,length:0,toArray:function(){return f.call(this)},get:function(a){return null==a?f.call(this):a<0?this[a+this.length]:this[a]},pushStack:function(a){var b=r.merge(this.constructor(),a);return b.prevObject=this,b},each:function(a){return r.each(this,a)},map:function(a){return this.pushStack(r.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(f.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(a<0?b:0);return this.pushStack(c>=0&&c<b?[this[c]]:[])},end:function(){return this.prevObject||this.constructor()},push:h,sort:c.sort,splice:c.splice},r.extend=r.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||r.isFunction(g)||(g={}),h===i&&(g=this,h--);h<i;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(r.isPlainObject(d)||(e=Array.isArray(d)))?(e?(e=!1,f=c&&Array.isArray(c)?c:[]):f=c&&r.isPlainObject(c)?c:{},g[b]=r.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},r.extend({expando:"jQuery"+(q+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===r.type(a)},isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){var b=r.type(a);return("number"===b||"string"===b)&&!isNaN(a-parseFloat(a))},isPlainObject:function(a){var b,c;return!(!a||"[object Object]"!==k.call(a))&&(!(b=e(a))||(c=l.call(b,"constructor")&&b.constructor,"function"==typeof c&&m.call(c)===n))},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?j[k.call(a)]||"object":typeof a},globalEval:function(a){p(a)},camelCase:function(a){return a.replace(t,"ms-").replace(u,v)},each:function(a,b){var c,d=0;if(w(a)){for(c=a.length;d<c;d++)if(b.call(a[d],d,a[d])===!1)break}else for(d in a)if(b.call(a[d],d,a[d])===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(s,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(w(Object(a))?r.merge(c,"string"==typeof a?[a]:a):h.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:i.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;d<c;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;f<g;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,e,f=0,h=[];if(w(a))for(d=a.length;f<d;f++)e=b(a[f],f,c),null!=e&&h.push(e);else for(f in a)e=b(a[f],f,c),null!=e&&h.push(e);return g.apply([],h)},guid:1,proxy:function(a,b){var c,d,e;if("string"==typeof b&&(c=a[b],b=a,a=c),r.isFunction(a))return d=f.call(arguments,2),e=function(){return a.apply(b||this,d.concat(f.call(arguments)))},e.guid=a.guid=a.guid||r.guid++,e},now:Date.now,support:o}),"function"==typeof Symbol&&(r.fn[Symbol.iterator]=c[Symbol.iterator]),r.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(a,b){j["[object "+b+"]"]=b.toLowerCase()});function w(a){var b=!!a&&"length"in a&&a.length,c=r.type(a);return"function"!==c&&!r.isWindow(a)&&("array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a)}var x=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=function(a,b){for(var c=0,d=a.length;c<d;c++)if(a[c]===b)return c;return-1},J="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",K="[\\x20\\t\\r\\n\\f]",L="(?:\\\\.|[\\w-]|[^\0-\\xa0])+",M="\\["+K+"*("+L+")(?:"+K+"*([*^$|!~]?=)"+K+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+L+"))|)"+K+"*\\]",N=":("+L+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+M+")*)|.*)\\)|)",O=new RegExp(K+"+","g"),P=new RegExp("^"+K+"+|((?:^|[^\\\\])(?:\\\\.)*)"+K+"+$","g"),Q=new RegExp("^"+K+"*,"+K+"*"),R=new RegExp("^"+K+"*([>+~]|"+K+")"+K+"*"),S=new RegExp("="+K+"*([^\\]'\"]*?)"+K+"*\\]","g"),T=new RegExp(N),U=new RegExp("^"+L+"$"),V={ID:new RegExp("^#("+L+")"),CLASS:new RegExp("^\\.("+L+")"),TAG:new RegExp("^("+L+"|[*])"),ATTR:new RegExp("^"+M),PSEUDO:new RegExp("^"+N),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+K+"*(even|odd|(([+-]|)(\\d*)n|)"+K+"*(?:([+-]|)"+K+"*(\\d+)|))"+K+"*\\)|)","i"),bool:new RegExp("^(?:"+J+")$","i"),needsContext:new RegExp("^"+K+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+K+"*((?:-\\d)?\\d*)"+K+"*\\)|)(?=[^-]|$)","i")},W=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Y=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,$=/[+~]/,_=new RegExp("\\\\([\\da-f]{1,6}"+K+"?|("+K+")|.)","ig"),aa=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:d<0?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ba=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ca=function(a,b){return b?"\0"===a?"\ufffd":a.slice(0,-1)+"\\"+a.charCodeAt(a.length-1).toString(16)+" ":"\\"+a},da=function(){m()},ea=ta(function(a){return a.disabled===!0&&("form"in a||"label"in a)},{dir:"parentNode",next:"legend"});try{G.apply(D=H.call(v.childNodes),v.childNodes),D[v.childNodes.length].nodeType}catch(fa){G={apply:D.length?function(a,b){F.apply(a,H.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s=b&&b.ownerDocument,w=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==w&&9!==w&&11!==w)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==w&&(l=Z.exec(a)))if(f=l[1]){if(9===w){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(s&&(j=s.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(l[2])return G.apply(d,b.getElementsByTagName(a)),d;if((f=l[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==w)s=b,r=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(ba,ca):b.setAttribute("id",k=u),o=g(a),h=o.length;while(h--)o[h]="#"+k+" "+sa(o[h]);r=o.join(","),s=$.test(a)&&qa(b.parentNode)||b}if(r)try{return G.apply(d,s.querySelectorAll(r)),d}catch(x){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(P,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("fieldset");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&a.sourceIndex-b.sourceIndex;if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return function(b){return"form"in b?b.parentNode&&b.disabled===!1?"label"in b?"label"in b.parentNode?b.parentNode.disabled===a:b.disabled===a:b.isDisabled===a||b.isDisabled!==!a&&ea(b)===a:b.disabled===a:"label"in b&&b.disabled===a}}function pa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function qa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return!!b&&"HTML"!==b.nodeName},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),v!==n&&(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Y.test(n.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){return a.getAttribute("id")===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}}):(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c,d,e,f=b.getElementById(a);if(f){if(c=f.getAttributeNode("id"),c&&c.value===a)return[f];e=b.getElementsByName(a),d=0;while(f=e[d++])if(c=f.getAttributeNode("id"),c&&c.value===a)return[f]}return[]}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){if("undefined"!=typeof b.getElementsByClassName&&p)return b.getElementsByClassName(a)},r=[],q=[],(c.qsa=Y.test(n.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="<a id='"+u+"'></a><select id='"+u+"-\r\\' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+K+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+K+"*(?:value|"+J+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){a.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+K+"*[*^$|!~]?="),2!==a.querySelectorAll(":enabled").length&&q.push(":enabled",":disabled"),o.appendChild(a).disabled=!0,2!==a.querySelectorAll(":disabled").length&&q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Y.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"*"),s.call(a,"[s!='']:x"),r.push("!=",N)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Y.test(o.compareDocumentPosition),t=b||Y.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?I(k,a)-I(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?I(k,a)-I(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?la(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(S,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.escape=function(a){return(a+"").replace(ba,ca)},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(_,aa),a[3]=(a[3]||a[4]||a[5]||"").replace(_,aa),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return V.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&T.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(_,aa).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+K+")"+a+"("+K+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:!b||(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(O," ")+" ").indexOf(c)>-1:"|="===b&&(e===c||e.slice(0,c.length+1)===c+"-"))}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(P,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(_,aa),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return U.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(_,aa).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:oa(!1),disabled:oa(!0),checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return X.test(a.nodeName)},input:function(a){return W.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:pa(function(){return[0]}),last:pa(function(a,b){return[b-1]}),eq:pa(function(a,b,c){return[c<0?c+b:c]}),even:pa(function(a,b){for(var c=0;c<b;c+=2)a.push(c);return a}),odd:pa(function(a,b){for(var c=1;c<b;c+=2)a.push(c);return a}),lt:pa(function(a,b,c){for(var d=c<0?c+b:c;--d>=0;)a.push(d);return a}),gt:pa(function(a,b,c){for(var d=c<0?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=ma(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=na(b);function ra(){}ra.prototype=d.filters=d.pseudos,d.setFilters=new ra,g=ga.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){c&&!(e=Q.exec(h))||(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=R.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(P," ")}),h=h.slice(c.length));for(g in d.filter)!(e=V[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?ga.error(a):z(a,i).slice(0)};function sa(a){for(var b=0,c=a.length,d="";b<c;b++)d+=a[b].value;return d}function ta(a,b,c){var d=b.dir,e=b.next,f=e||d,g=c&&"parentNode"===f,h=x++;return b.first?function(b,c,e){while(b=b[d])if(1===b.nodeType||g)return a(b,c,e);return!1}:function(b,c,i){var j,k,l,m=[w,h];if(i){while(b=b[d])if((1===b.nodeType||g)&&a(b,c,i))return!0}else while(b=b[d])if(1===b.nodeType||g)if(l=b[u]||(b[u]={}),k=l[b.uniqueID]||(l[b.uniqueID]={}),e&&e===b.nodeName.toLowerCase())b=b[d]||b;else{if((j=k[f])&&j[0]===w&&j[1]===h)return m[2]=j[2];if(k[f]=m,m[2]=a(b,c,i))return!0}return!1}}function ua(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function va(a,b,c){for(var d=0,e=b.length;d<e;d++)ga(a,b[d],c);return c}function wa(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;h<i;h++)(f=a[h])&&(c&&!c(f,d,e)||(g.push(f),j&&b.push(h)));return g}function xa(a,b,c,d,e,f){return d&&!d[u]&&(d=xa(d)),e&&!e[u]&&(e=xa(e,f)),ia(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||va(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:wa(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=wa(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?I(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=wa(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ya(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ta(function(a){return a===b},h,!0),l=ta(function(a){return I(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];i<f;i++)if(c=d.relative[a[i].type])m=[ta(ua(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;e<f;e++)if(d.relative[a[e].type])break;return xa(i>1&&ua(m),i>1&&sa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(P,"$1"),c,i<e&&ya(a.slice(i,e)),e<f&&ya(a=a.slice(e)),e<f&&sa(a))}m.push(c)}return ua(m)}function za(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=E.call(i));u=wa(u)}G.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&ga.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=ya(b[c]),f[u]?d.push(f):e.push(f);f=A(a,za(e,d)),f.selector=a}return f},i=ga.select=function(a,b,c,e){var f,i,j,k,l,m="function"==typeof a&&a,n=!e&&g(a=m.selector||a);if(c=c||[],1===n.length){if(i=n[0]=n[0].slice(0),i.length>2&&"ID"===(j=i[0]).type&&9===b.nodeType&&p&&d.relative[i[1].type]){if(b=(d.find.ID(j.matches[0].replace(_,aa),b)||[])[0],!b)return c;m&&(b=b.parentNode),a=a.slice(i.shift().value.length)}f=V.needsContext.test(a)?0:i.length;while(f--){if(j=i[f],d.relative[k=j.type])break;if((l=d.find[k])&&(e=l(j.matches[0].replace(_,aa),$.test(i[0].type)&&qa(b.parentNode)||b))){if(i.splice(f,1),a=e.length&&sa(i),!a)return G.apply(c,e),c;break}}}return(m||h(a,n))(e,b,!p,c,!b||$.test(a)&&qa(b.parentNode)||b),c},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("fieldset"))}),ja(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){if(!c)return a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){if(!c&&"input"===a.nodeName.toLowerCase())return a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(J,function(a,b,c){var d;if(!c)return a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);r.find=x,r.expr=x.selectors,r.expr[":"]=r.expr.pseudos,r.uniqueSort=r.unique=x.uniqueSort,r.text=x.getText,r.isXMLDoc=x.isXML,r.contains=x.contains,r.escapeSelector=x.escape;var y=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&r(a).is(c))break;d.push(a)}return d},z=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},A=r.expr.match.needsContext;function B(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()}var C=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i,D=/^.[^:#\[\.,]*$/;function E(a,b,c){return r.isFunction(b)?r.grep(a,function(a,d){return!!b.call(a,d,a)!==c}):b.nodeType?r.grep(a,function(a){return a===b!==c}):"string"!=typeof b?r.grep(a,function(a){return i.call(b,a)>-1!==c}):D.test(b)?r.filter(b,a,c):(b=r.filter(b,a),r.grep(a,function(a){return i.call(b,a)>-1!==c&&1===a.nodeType}))}r.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?r.find.matchesSelector(d,a)?[d]:[]:r.find.matches(a,r.grep(b,function(a){return 1===a.nodeType}))},r.fn.extend({find:function(a){var b,c,d=this.length,e=this;if("string"!=typeof a)return this.pushStack(r(a).filter(function(){for(b=0;b<d;b++)if(r.contains(e[b],this))return!0}));for(c=this.pushStack([]),b=0;b<d;b++)r.find(a,e[b],c);return d>1?r.uniqueSort(c):c},filter:function(a){return this.pushStack(E(this,a||[],!1))},not:function(a){return this.pushStack(E(this,a||[],!0))},is:function(a){return!!E(this,"string"==typeof a&&A.test(a)?r(a):a||[],!1).length}});var F,G=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,H=r.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||F,"string"==typeof a){if(e="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:G.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof r?b[0]:b,r.merge(this,r.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),C.test(e[1])&&r.isPlainObject(b))for(e in b)r.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}return f=d.getElementById(e[2]),f&&(this[0]=f,this.length=1),this}return a.nodeType?(this[0]=a,this.length=1,this):r.isFunction(a)?void 0!==c.ready?c.ready(a):a(r):r.makeArray(a,this)};H.prototype=r.fn,F=r(d);var I=/^(?:parents|prev(?:Until|All))/,J={children:!0,contents:!0,next:!0,prev:!0};r.fn.extend({has:function(a){var b=r(a,this),c=b.length;return this.filter(function(){for(var a=0;a<c;a++)if(r.contains(this,b[a]))return!0})},closest:function(a,b){var c,d=0,e=this.length,f=[],g="string"!=typeof a&&r(a);if(!A.test(a))for(;d<e;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&r.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?r.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?i.call(r(a),this[0]):i.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(r.uniqueSort(r.merge(this.get(),r(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function K(a,b){while((a=a[b])&&1!==a.nodeType);return a}r.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return y(a,"parentNode")},parentsUntil:function(a,b,c){return y(a,"parentNode",c)},next:function(a){return K(a,"nextSibling")},prev:function(a){return K(a,"previousSibling")},nextAll:function(a){return y(a,"nextSibling")},prevAll:function(a){return y(a,"previousSibling")},nextUntil:function(a,b,c){return y(a,"nextSibling",c)},prevUntil:function(a,b,c){return y(a,"previousSibling",c)},siblings:function(a){return z((a.parentNode||{}).firstChild,a)},children:function(a){return z(a.firstChild)},contents:function(a){return B(a,"iframe")?a.contentDocument:(B(a,"template")&&(a=a.content||a),r.merge([],a.childNodes))}},function(a,b){r.fn[a]=function(c,d){var e=r.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=r.filter(d,e)),this.length>1&&(J[a]||r.uniqueSort(e),I.test(a)&&e.reverse()),this.pushStack(e)}});var L=/[^\x20\t\r\n\f]+/g;function M(a){var b={};return r.each(a.match(L)||[],function(a,c){b[c]=!0}),b}r.Callbacks=function(a){a="string"==typeof a?M(a):r.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=e||a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h<f.length)f[h].apply(c[0],c[1])===!1&&a.stopOnFalse&&(h=f.length,c=!1)}a.memory||(c=!1),b=!1,e&&(f=c?[]:"")},j={add:function(){return f&&(c&&!b&&(h=f.length-1,g.push(c)),function d(b){r.each(b,function(b,c){r.isFunction(c)?a.unique&&j.has(c)||f.push(c):c&&c.length&&"string"!==r.type(c)&&d(c)})}(arguments),c&&!b&&i()),this},remove:function(){return r.each(arguments,function(a,b){var c;while((c=r.inArray(b,f,c))>-1)f.splice(c,1),c<=h&&h--}),this},has:function(a){return a?r.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=g=[],c||b||(f=c=""),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j};function N(a){return a}function O(a){throw a}function P(a,b,c,d){var e;try{a&&r.isFunction(e=a.promise)?e.call(a).done(b).fail(c):a&&r.isFunction(e=a.then)?e.call(a,b,c):b.apply(void 0,[a].slice(d))}catch(a){c.apply(void 0,[a])}}r.extend({Deferred:function(b){var c=[["notify","progress",r.Callbacks("memory"),r.Callbacks("memory"),2],["resolve","done",r.Callbacks("once memory"),r.Callbacks("once memory"),0,"resolved"],["reject","fail",r.Callbacks("once memory"),r.Callbacks("once memory"),1,"rejected"]],d="pending",e={state:function(){return d},always:function(){return f.done(arguments).fail(arguments),this},"catch":function(a){return e.then(null,a)},pipe:function(){var a=arguments;return r.Deferred(function(b){r.each(c,function(c,d){var e=r.isFunction(a[d[4]])&&a[d[4]];f[d[1]](function(){var a=e&&e.apply(this,arguments);a&&r.isFunction(a.promise)?a.promise().progress(b.notify).done(b.resolve).fail(b.reject):b[d[0]+"With"](this,e?[a]:arguments)})}),a=null}).promise()},then:function(b,d,e){var f=0;function g(b,c,d,e){return function(){var h=this,i=arguments,j=function(){var a,j;if(!(b<f)){if(a=d.apply(h,i),a===c.promise())throw new TypeError("Thenable self-resolution");j=a&&("object"==typeof a||"function"==typeof a)&&a.then,r.isFunction(j)?e?j.call(a,g(f,c,N,e),g(f,c,O,e)):(f++,j.call(a,g(f,c,N,e),g(f,c,O,e),g(f,c,N,c.notifyWith))):(d!==N&&(h=void 0,i=[a]),(e||c.resolveWith)(h,i))}},k=e?j:function(){try{j()}catch(a){r.Deferred.exceptionHook&&r.Deferred.exceptionHook(a,k.stackTrace),b+1>=f&&(d!==O&&(h=void 0,i=[a]),c.rejectWith(h,i))}};b?k():(r.Deferred.getStackHook&&(k.stackTrace=r.Deferred.getStackHook()),a.setTimeout(k))}}return r.Deferred(function(a){c[0][3].add(g(0,a,r.isFunction(e)?e:N,a.notifyWith)),c[1][3].add(g(0,a,r.isFunction(b)?b:N)),c[2][3].add(g(0,a,r.isFunction(d)?d:O))}).promise()},promise:function(a){return null!=a?r.extend(a,e):e}},f={};return r.each(c,function(a,b){var g=b[2],h=b[5];e[b[1]]=g.add,h&&g.add(function(){d=h},c[3-a][2].disable,c[0][2].lock),g.add(b[3].fire),f[b[0]]=function(){return f[b[0]+"With"](this===f?void 0:this,arguments),this},f[b[0]+"With"]=g.fireWith}),e.promise(f),b&&b.call(f,f),f},when:function(a){var b=arguments.length,c=b,d=Array(c),e=f.call(arguments),g=r.Deferred(),h=function(a){return function(c){d[a]=this,e[a]=arguments.length>1?f.call(arguments):c,--b||g.resolveWith(d,e)}};if(b<=1&&(P(a,g.done(h(c)).resolve,g.reject,!b),"pending"===g.state()||r.isFunction(e[c]&&e[c].then)))return g.then();while(c--)P(e[c],h(c),g.reject);return g.promise()}});var Q=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;r.Deferred.exceptionHook=function(b,c){a.console&&a.console.warn&&b&&Q.test(b.name)&&a.console.warn("jQuery.Deferred exception: "+b.message,b.stack,c)},r.readyException=function(b){a.setTimeout(function(){throw b})};var R=r.Deferred();r.fn.ready=function(a){return R.then(a)["catch"](function(a){r.readyException(a);
+}),this},r.extend({isReady:!1,readyWait:1,ready:function(a){(a===!0?--r.readyWait:r.isReady)||(r.isReady=!0,a!==!0&&--r.readyWait>0||R.resolveWith(d,[r]))}}),r.ready.then=R.then;function S(){d.removeEventListener("DOMContentLoaded",S),a.removeEventListener("load",S),r.ready()}"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll?a.setTimeout(r.ready):(d.addEventListener("DOMContentLoaded",S),a.addEventListener("load",S));var T=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===r.type(c)){e=!0;for(h in c)T(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,r.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(r(a),c)})),b))for(;h<i;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},U=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function V(){this.expando=r.expando+V.uid++}V.uid=1,V.prototype={cache:function(a){var b=a[this.expando];return b||(b={},U(a)&&(a.nodeType?a[this.expando]=b:Object.defineProperty(a,this.expando,{value:b,configurable:!0}))),b},set:function(a,b,c){var d,e=this.cache(a);if("string"==typeof b)e[r.camelCase(b)]=c;else for(d in b)e[r.camelCase(d)]=b[d];return e},get:function(a,b){return void 0===b?this.cache(a):a[this.expando]&&a[this.expando][r.camelCase(b)]},access:function(a,b,c){return void 0===b||b&&"string"==typeof b&&void 0===c?this.get(a,b):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d=a[this.expando];if(void 0!==d){if(void 0!==b){Array.isArray(b)?b=b.map(r.camelCase):(b=r.camelCase(b),b=b in d?[b]:b.match(L)||[]),c=b.length;while(c--)delete d[b[c]]}(void 0===b||r.isEmptyObject(d))&&(a.nodeType?a[this.expando]=void 0:delete a[this.expando])}},hasData:function(a){var b=a[this.expando];return void 0!==b&&!r.isEmptyObject(b)}};var W=new V,X=new V,Y=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,Z=/[A-Z]/g;function $(a){return"true"===a||"false"!==a&&("null"===a?null:a===+a+""?+a:Y.test(a)?JSON.parse(a):a)}function _(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(Z,"-$&").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c=$(c)}catch(e){}X.set(a,b,c)}else c=void 0;return c}r.extend({hasData:function(a){return X.hasData(a)||W.hasData(a)},data:function(a,b,c){return X.access(a,b,c)},removeData:function(a,b){X.remove(a,b)},_data:function(a,b,c){return W.access(a,b,c)},_removeData:function(a,b){W.remove(a,b)}}),r.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=X.get(f),1===f.nodeType&&!W.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=r.camelCase(d.slice(5)),_(f,d,e[d])));W.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){X.set(this,a)}):T(this,function(b){var c;if(f&&void 0===b){if(c=X.get(f,a),void 0!==c)return c;if(c=_(f,a),void 0!==c)return c}else this.each(function(){X.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){X.remove(this,a)})}}),r.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=W.get(a,b),c&&(!d||Array.isArray(c)?d=W.access(a,b,r.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=r.queue(a,b),d=c.length,e=c.shift(),f=r._queueHooks(a,b),g=function(){r.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return W.get(a,c)||W.access(a,c,{empty:r.Callbacks("once memory").add(function(){W.remove(a,[b+"queue",c])})})}}),r.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?r.queue(this[0],a):void 0===b?this:this.each(function(){var c=r.queue(this,a,b);r._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&r.dequeue(this,a)})},dequeue:function(a){return this.each(function(){r.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=r.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=W.get(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var aa=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,ba=new RegExp("^(?:([+-])=|)("+aa+")([a-z%]*)$","i"),ca=["Top","Right","Bottom","Left"],da=function(a,b){return a=b||a,"none"===a.style.display||""===a.style.display&&r.contains(a.ownerDocument,a)&&"none"===r.css(a,"display")},ea=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};function fa(a,b,c,d){var e,f=1,g=20,h=d?function(){return d.cur()}:function(){return r.css(a,b,"")},i=h(),j=c&&c[3]||(r.cssNumber[b]?"":"px"),k=(r.cssNumber[b]||"px"!==j&&+i)&&ba.exec(r.css(a,b));if(k&&k[3]!==j){j=j||k[3],c=c||[],k=+i||1;do f=f||".5",k/=f,r.style(a,b,k+j);while(f!==(f=h()/i)&&1!==f&&--g)}return c&&(k=+k||+i||0,e=c[1]?k+(c[1]+1)*c[2]:+c[2],d&&(d.unit=j,d.start=k,d.end=e)),e}var ga={};function ha(a){var b,c=a.ownerDocument,d=a.nodeName,e=ga[d];return e?e:(b=c.body.appendChild(c.createElement(d)),e=r.css(b,"display"),b.parentNode.removeChild(b),"none"===e&&(e="block"),ga[d]=e,e)}function ia(a,b){for(var c,d,e=[],f=0,g=a.length;f<g;f++)d=a[f],d.style&&(c=d.style.display,b?("none"===c&&(e[f]=W.get(d,"display")||null,e[f]||(d.style.display="")),""===d.style.display&&da(d)&&(e[f]=ha(d))):"none"!==c&&(e[f]="none",W.set(d,"display",c)));for(f=0;f<g;f++)null!=e[f]&&(a[f].style.display=e[f]);return a}r.fn.extend({show:function(){return ia(this,!0)},hide:function(){return ia(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){da(this)?r(this).show():r(this).hide()})}});var ja=/^(?:checkbox|radio)$/i,ka=/<([a-z][^\/\0>\x20\t\r\n\f]+)/i,la=/^$|\/(?:java|ecma)script/i,ma={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ma.optgroup=ma.option,ma.tbody=ma.tfoot=ma.colgroup=ma.caption=ma.thead,ma.th=ma.td;function na(a,b){var c;return c="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):[],void 0===b||b&&B(a,b)?r.merge([a],c):c}function oa(a,b){for(var c=0,d=a.length;c<d;c++)W.set(a[c],"globalEval",!b||W.get(b[c],"globalEval"))}var pa=/<|&#?\w+;/;function qa(a,b,c,d,e){for(var f,g,h,i,j,k,l=b.createDocumentFragment(),m=[],n=0,o=a.length;n<o;n++)if(f=a[n],f||0===f)if("object"===r.type(f))r.merge(m,f.nodeType?[f]:f);else if(pa.test(f)){g=g||l.appendChild(b.createElement("div")),h=(ka.exec(f)||["",""])[1].toLowerCase(),i=ma[h]||ma._default,g.innerHTML=i[1]+r.htmlPrefilter(f)+i[2],k=i[0];while(k--)g=g.lastChild;r.merge(m,g.childNodes),g=l.firstChild,g.textContent=""}else m.push(b.createTextNode(f));l.textContent="",n=0;while(f=m[n++])if(d&&r.inArray(f,d)>-1)e&&e.push(f);else if(j=r.contains(f.ownerDocument,f),g=na(l.appendChild(f),"script"),j&&oa(g),c){k=0;while(f=g[k++])la.test(f.type||"")&&c.push(f)}return l}!function(){var a=d.createDocumentFragment(),b=a.appendChild(d.createElement("div")),c=d.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),o.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="<textarea>x</textarea>",o.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var ra=d.documentElement,sa=/^key/,ta=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,ua=/^([^.]*)(?:\.(.+)|)/;function va(){return!0}function wa(){return!1}function xa(){try{return d.activeElement}catch(a){}}function ya(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)ya(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=wa;else if(!e)return a;return 1===f&&(g=e,e=function(a){return r().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=r.guid++)),a.each(function(){r.event.add(this,b,e,d,c)})}r.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=W.get(a);if(q){c.handler&&(f=c,c=f.handler,e=f.selector),e&&r.find.matchesSelector(ra,e),c.guid||(c.guid=r.guid++),(i=q.events)||(i=q.events={}),(g=q.handle)||(g=q.handle=function(b){return"undefined"!=typeof r&&r.event.triggered!==b.type?r.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(L)||[""],j=b.length;while(j--)h=ua.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n&&(l=r.event.special[n]||{},n=(e?l.delegateType:l.bindType)||n,l=r.event.special[n]||{},k=r.extend({type:n,origType:p,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&r.expr.match.needsContext.test(e),namespace:o.join(".")},f),(m=i[n])||(m=i[n]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,o,g)!==!1||a.addEventListener&&a.addEventListener(n,g)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),r.event.global[n]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=W.hasData(a)&&W.get(a);if(q&&(i=q.events)){b=(b||"").match(L)||[""],j=b.length;while(j--)if(h=ua.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n){l=r.event.special[n]||{},n=(d?l.delegateType:l.bindType)||n,m=i[n]||[],h=h[2]&&new RegExp("(^|\\.)"+o.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&p!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,o,q.handle)!==!1||r.removeEvent(a,n,q.handle),delete i[n])}else for(n in i)r.event.remove(a,n+b[j],c,d,!0);r.isEmptyObject(i)&&W.remove(a,"handle events")}},dispatch:function(a){var b=r.event.fix(a),c,d,e,f,g,h,i=new Array(arguments.length),j=(W.get(this,"events")||{})[b.type]||[],k=r.event.special[b.type]||{};for(i[0]=b,c=1;c<arguments.length;c++)i[c]=arguments[c];if(b.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,b)!==!1){h=r.event.handlers.call(this,b,j),c=0;while((f=h[c++])&&!b.isPropagationStopped()){b.currentTarget=f.elem,d=0;while((g=f.handlers[d++])&&!b.isImmediatePropagationStopped())b.rnamespace&&!b.rnamespace.test(g.namespace)||(b.handleObj=g,b.data=g.data,e=((r.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(b.result=e)===!1&&(b.preventDefault(),b.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,b),b.result}},handlers:function(a,b){var c,d,e,f,g,h=[],i=b.delegateCount,j=a.target;if(i&&j.nodeType&&!("click"===a.type&&a.button>=1))for(;j!==this;j=j.parentNode||this)if(1===j.nodeType&&("click"!==a.type||j.disabled!==!0)){for(f=[],g={},c=0;c<i;c++)d=b[c],e=d.selector+" ",void 0===g[e]&&(g[e]=d.needsContext?r(e,this).index(j)>-1:r.find(e,this,null,[j]).length),g[e]&&f.push(d);f.length&&h.push({elem:j,handlers:f})}return j=this,i<b.length&&h.push({elem:j,handlers:b.slice(i)}),h},addProp:function(a,b){Object.defineProperty(r.Event.prototype,a,{enumerable:!0,configurable:!0,get:r.isFunction(b)?function(){if(this.originalEvent)return b(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[a]},set:function(b){Object.defineProperty(this,a,{enumerable:!0,configurable:!0,writable:!0,value:b})}})},fix:function(a){return a[r.expando]?a:new r.Event(a)},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==xa()&&this.focus)return this.focus(),!1},delegateType:"focusin"},blur:{trigger:function(){if(this===xa()&&this.blur)return this.blur(),!1},delegateType:"focusout"},click:{trigger:function(){if("checkbox"===this.type&&this.click&&B(this,"input"))return this.click(),!1},_default:function(a){return B(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}}},r.removeEvent=function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c)},r.Event=function(a,b){return this instanceof r.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?va:wa,this.target=a.target&&3===a.target.nodeType?a.target.parentNode:a.target,this.currentTarget=a.currentTarget,this.relatedTarget=a.relatedTarget):this.type=a,b&&r.extend(this,b),this.timeStamp=a&&a.timeStamp||r.now(),void(this[r.expando]=!0)):new r.Event(a,b)},r.Event.prototype={constructor:r.Event,isDefaultPrevented:wa,isPropagationStopped:wa,isImmediatePropagationStopped:wa,isSimulated:!1,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=va,a&&!this.isSimulated&&a.preventDefault()},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=va,a&&!this.isSimulated&&a.stopPropagation()},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=va,a&&!this.isSimulated&&a.stopImmediatePropagation(),this.stopPropagation()}},r.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(a){var b=a.button;return null==a.which&&sa.test(a.type)?null!=a.charCode?a.charCode:a.keyCode:!a.which&&void 0!==b&&ta.test(a.type)?1&b?1:2&b?3:4&b?2:0:a.which}},r.event.addProp),r.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){r.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return e&&(e===d||r.contains(d,e))||(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),r.fn.extend({on:function(a,b,c,d){return ya(this,a,b,c,d)},one:function(a,b,c,d){return ya(this,a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,r(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return b!==!1&&"function"!=typeof b||(c=b,b=void 0),c===!1&&(c=wa),this.each(function(){r.event.remove(this,a,c,b)})}});var za=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,Aa=/<script|<style|<link/i,Ba=/checked\s*(?:[^=]|=\s*.checked.)/i,Ca=/^true\/(.*)/,Da=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function Ea(a,b){return B(a,"table")&&B(11!==b.nodeType?b:b.firstChild,"tr")?r(">tbody",a)[0]||a:a}function Fa(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function Ga(a){var b=Ca.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Ha(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(W.hasData(a)&&(f=W.access(a),g=W.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;c<d;c++)r.event.add(b,e,j[e][c])}X.hasData(a)&&(h=X.access(a),i=r.extend({},h),X.set(b,i))}}function Ia(a,b){var c=b.nodeName.toLowerCase();"input"===c&&ja.test(a.type)?b.checked=a.checked:"input"!==c&&"textarea"!==c||(b.defaultValue=a.defaultValue)}function Ja(a,b,c,d){b=g.apply([],b);var e,f,h,i,j,k,l=0,m=a.length,n=m-1,q=b[0],s=r.isFunction(q);if(s||m>1&&"string"==typeof q&&!o.checkClone&&Ba.test(q))return a.each(function(e){var f=a.eq(e);s&&(b[0]=q.call(this,e,f.html())),Ja(f,b,c,d)});if(m&&(e=qa(b,a[0].ownerDocument,!1,a,d),f=e.firstChild,1===e.childNodes.length&&(e=f),f||d)){for(h=r.map(na(e,"script"),Fa),i=h.length;l<m;l++)j=e,l!==n&&(j=r.clone(j,!0,!0),i&&r.merge(h,na(j,"script"))),c.call(a[l],j,l);if(i)for(k=h[h.length-1].ownerDocument,r.map(h,Ga),l=0;l<i;l++)j=h[l],la.test(j.type||"")&&!W.access(j,"globalEval")&&r.contains(k,j)&&(j.src?r._evalUrl&&r._evalUrl(j.src):p(j.textContent.replace(Da,""),k))}return a}function Ka(a,b,c){for(var d,e=b?r.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||r.cleanData(na(d)),d.parentNode&&(c&&r.contains(d.ownerDocument,d)&&oa(na(d,"script")),d.parentNode.removeChild(d));return a}r.extend({htmlPrefilter:function(a){return a.replace(za,"<$1></$2>")},clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=r.contains(a.ownerDocument,a);if(!(o.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||r.isXMLDoc(a)))for(g=na(h),f=na(a),d=0,e=f.length;d<e;d++)Ia(f[d],g[d]);if(b)if(c)for(f=f||na(a),g=g||na(h),d=0,e=f.length;d<e;d++)Ha(f[d],g[d]);else Ha(a,h);return g=na(h,"script"),g.length>0&&oa(g,!i&&na(a,"script")),h},cleanData:function(a){for(var b,c,d,e=r.event.special,f=0;void 0!==(c=a[f]);f++)if(U(c)){if(b=c[W.expando]){if(b.events)for(d in b.events)e[d]?r.event.remove(c,d):r.removeEvent(c,d,b.handle);c[W.expando]=void 0}c[X.expando]&&(c[X.expando]=void 0)}}}),r.fn.extend({detach:function(a){return Ka(this,a,!0)},remove:function(a){return Ka(this,a)},text:function(a){return T(this,function(a){return void 0===a?r.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=a)})},null,a,arguments.length)},append:function(){return Ja(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ea(this,a);b.appendChild(a)}})},prepend:function(){return Ja(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ea(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ja(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ja(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(r.cleanData(na(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null!=a&&a,b=null==b?a:b,this.map(function(){return r.clone(this,a,b)})},html:function(a){return T(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!Aa.test(a)&&!ma[(ka.exec(a)||["",""])[1].toLowerCase()]){a=r.htmlPrefilter(a);try{for(;c<d;c++)b=this[c]||{},1===b.nodeType&&(r.cleanData(na(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return Ja(this,arguments,function(b){var c=this.parentNode;r.inArray(this,a)<0&&(r.cleanData(na(this)),c&&c.replaceChild(b,this))},a)}}),r.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){r.fn[a]=function(a){for(var c,d=[],e=r(a),f=e.length-1,g=0;g<=f;g++)c=g===f?this:this.clone(!0),r(e[g])[b](c),h.apply(d,c.get());return this.pushStack(d)}});var La=/^margin/,Ma=new RegExp("^("+aa+")(?!px)[a-z%]+$","i"),Na=function(b){var c=b.ownerDocument.defaultView;return c&&c.opener||(c=a),c.getComputedStyle(b)};!function(){function b(){if(i){i.style.cssText="box-sizing:border-box;position:relative;display:block;margin:auto;border:1px;padding:1px;top:1%;width:50%",i.innerHTML="",ra.appendChild(h);var b=a.getComputedStyle(i);c="1%"!==b.top,g="2px"===b.marginLeft,e="4px"===b.width,i.style.marginRight="50%",f="4px"===b.marginRight,ra.removeChild(h),i=null}}var c,e,f,g,h=d.createElement("div"),i=d.createElement("div");i.style&&(i.style.backgroundClip="content-box",i.cloneNode(!0).style.backgroundClip="",o.clearCloneStyle="content-box"===i.style.backgroundClip,h.style.cssText="border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute",h.appendChild(i),r.extend(o,{pixelPosition:function(){return b(),c},boxSizingReliable:function(){return b(),e},pixelMarginRight:function(){return b(),f},reliableMarginLeft:function(){return b(),g}}))}();function Oa(a,b,c){var d,e,f,g,h=a.style;return c=c||Na(a),c&&(g=c.getPropertyValue(b)||c[b],""!==g||r.contains(a.ownerDocument,a)||(g=r.style(a,b)),!o.pixelMarginRight()&&Ma.test(g)&&La.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0!==g?g+"":g}function Pa(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}var Qa=/^(none|table(?!-c[ea]).+)/,Ra=/^--/,Sa={position:"absolute",visibility:"hidden",display:"block"},Ta={letterSpacing:"0",fontWeight:"400"},Ua=["Webkit","Moz","ms"],Va=d.createElement("div").style;function Wa(a){if(a in Va)return a;var b=a[0].toUpperCase()+a.slice(1),c=Ua.length;while(c--)if(a=Ua[c]+b,a in Va)return a}function Xa(a){var b=r.cssProps[a];return b||(b=r.cssProps[a]=Wa(a)||a),b}function Ya(a,b,c){var d=ba.exec(b);return d?Math.max(0,d[2]-(c||0))+(d[3]||"px"):b}function Za(a,b,c,d,e){var f,g=0;for(f=c===(d?"border":"content")?4:"width"===b?1:0;f<4;f+=2)"margin"===c&&(g+=r.css(a,c+ca[f],!0,e)),d?("content"===c&&(g-=r.css(a,"padding"+ca[f],!0,e)),"margin"!==c&&(g-=r.css(a,"border"+ca[f]+"Width",!0,e))):(g+=r.css(a,"padding"+ca[f],!0,e),"padding"!==c&&(g+=r.css(a,"border"+ca[f]+"Width",!0,e)));return g}function $a(a,b,c){var d,e=Na(a),f=Oa(a,b,e),g="border-box"===r.css(a,"boxSizing",!1,e);return Ma.test(f)?f:(d=g&&(o.boxSizingReliable()||f===a.style[b]),"auto"===f&&(f=a["offset"+b[0].toUpperCase()+b.slice(1)]),f=parseFloat(f)||0,f+Za(a,b,c||(g?"border":"content"),d,e)+"px")}r.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Oa(a,"opacity");return""===c?"1":c}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=r.camelCase(b),i=Ra.test(b),j=a.style;return i||(b=Xa(h)),g=r.cssHooks[b]||r.cssHooks[h],void 0===c?g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:j[b]:(f=typeof c,"string"===f&&(e=ba.exec(c))&&e[1]&&(c=fa(a,b,e),f="number"),null!=c&&c===c&&("number"===f&&(c+=e&&e[3]||(r.cssNumber[h]?"":"px")),o.clearCloneStyle||""!==c||0!==b.indexOf("background")||(j[b]="inherit"),g&&"set"in g&&void 0===(c=g.set(a,c,d))||(i?j.setProperty(b,c):j[b]=c)),void 0)}},css:function(a,b,c,d){var e,f,g,h=r.camelCase(b),i=Ra.test(b);return i||(b=Xa(h)),g=r.cssHooks[b]||r.cssHooks[h],g&&"get"in g&&(e=g.get(a,!0,c)),void 0===e&&(e=Oa(a,b,d)),"normal"===e&&b in Ta&&(e=Ta[b]),""===c||c?(f=parseFloat(e),c===!0||isFinite(f)?f||0:e):e}}),r.each(["height","width"],function(a,b){r.cssHooks[b]={get:function(a,c,d){if(c)return!Qa.test(r.css(a,"display"))||a.getClientRects().length&&a.getBoundingClientRect().width?$a(a,b,d):ea(a,Sa,function(){return $a(a,b,d)})},set:function(a,c,d){var e,f=d&&Na(a),g=d&&Za(a,b,d,"border-box"===r.css(a,"boxSizing",!1,f),f);return g&&(e=ba.exec(c))&&"px"!==(e[3]||"px")&&(a.style[b]=c,c=r.css(a,b)),Ya(a,c,g)}}}),r.cssHooks.marginLeft=Pa(o.reliableMarginLeft,function(a,b){if(b)return(parseFloat(Oa(a,"marginLeft"))||a.getBoundingClientRect().left-ea(a,{marginLeft:0},function(){return a.getBoundingClientRect().left}))+"px"}),r.each({margin:"",padding:"",border:"Width"},function(a,b){r.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];d<4;d++)e[a+ca[d]+b]=f[d]||f[d-2]||f[0];return e}},La.test(a)||(r.cssHooks[a+b].set=Ya)}),r.fn.extend({css:function(a,b){return T(this,function(a,b,c){var d,e,f={},g=0;if(Array.isArray(b)){for(d=Na(a),e=b.length;g<e;g++)f[b[g]]=r.css(a,b[g],!1,d);return f}return void 0!==c?r.style(a,b,c):r.css(a,b)},a,b,arguments.length>1)}}),r.fn.delay=function(b,c){return b=r.fx?r.fx.speeds[b]||b:b,c=c||"fx",this.queue(c,function(c,d){var e=a.setTimeout(c,b);d.stop=function(){a.clearTimeout(e)}})},function(){var a=d.createElement("input"),b=d.createElement("select"),c=b.appendChild(d.createElement("option"));a.type="checkbox",o.checkOn=""!==a.value,o.optSelected=c.selected,a=d.createElement("input"),a.value="t",a.type="radio",o.radioValue="t"===a.value}();var _a,ab=r.expr.attrHandle;r.fn.extend({attr:function(a,b){return T(this,r.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){r.removeAttr(this,a)})}}),r.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return"undefined"==typeof a.getAttribute?r.prop(a,b,c):(1===f&&r.isXMLDoc(a)||(e=r.attrHooks[b.toLowerCase()]||(r.expr.match.bool.test(b)?_a:void 0)),void 0!==c?null===c?void r.removeAttr(a,b):e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:(a.setAttribute(b,c+""),c):e&&"get"in e&&null!==(d=e.get(a,b))?d:(d=r.find.attr(a,b),null==d?void 0:d))},attrHooks:{type:{set:function(a,b){if(!o.radioValue&&"radio"===b&&B(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,d=0,e=b&&b.match(L);if(e&&1===a.nodeType)while(c=e[d++])a.removeAttribute(c)}}),_a={set:function(a,b,c){return b===!1?r.removeAttr(a,c):a.setAttribute(c,c),c}},r.each(r.expr.match.bool.source.match(/\w+/g),function(a,b){var c=ab[b]||r.find.attr;ab[b]=function(a,b,d){var e,f,g=b.toLowerCase();return d||(f=ab[g],ab[g]=e,e=null!=c(a,b,d)?g:null,ab[g]=f),e}});var bb=/^(?:input|select|textarea|button)$/i,cb=/^(?:a|area)$/i;r.fn.extend({prop:function(a,b){return T(this,r.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[r.propFix[a]||a]})}}),r.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&r.isXMLDoc(a)||(b=r.propFix[b]||b,e=r.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=r.find.attr(a,"tabindex");return b?parseInt(b,10):bb.test(a.nodeName)||cb.test(a.nodeName)&&a.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),o.optSelected||(r.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null},set:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}}),r.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){r.propFix[this.toLowerCase()]=this});function db(a){var b=a.match(L)||[];return b.join(" ")}function eb(a){return a.getAttribute&&a.getAttribute("class")||""}r.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).addClass(a.call(this,b,eb(this)))});if("string"==typeof a&&a){b=a.match(L)||[];while(c=this[i++])if(e=eb(c),d=1===c.nodeType&&" "+db(e)+" "){g=0;while(f=b[g++])d.indexOf(" "+f+" ")<0&&(d+=f+" ");h=db(d),e!==h&&c.setAttribute("class",h)}}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).removeClass(a.call(this,b,eb(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof a&&a){b=a.match(L)||[];while(c=this[i++])if(e=eb(c),d=1===c.nodeType&&" "+db(e)+" "){g=0;while(f=b[g++])while(d.indexOf(" "+f+" ")>-1)d=d.replace(" "+f+" "," ");h=db(d),e!==h&&c.setAttribute("class",h)}}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):r.isFunction(a)?this.each(function(c){r(this).toggleClass(a.call(this,c,eb(this),b),b)}):this.each(function(){var b,d,e,f;if("string"===c){d=0,e=r(this),f=a.match(L)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else void 0!==a&&"boolean"!==c||(b=eb(this),b&&W.set(this,"__className__",b),this.setAttribute&&this.setAttribute("class",b||a===!1?"":W.get(this,"__className__")||""))})},hasClass:function(a){var b,c,d=0;b=" "+a+" ";while(c=this[d++])if(1===c.nodeType&&(" "+db(eb(c))+" ").indexOf(b)>-1)return!0;return!1}});var fb=/\r/g;r.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=r.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,r(this).val()):a,null==e?e="":"number"==typeof e?e+="":Array.isArray(e)&&(e=r.map(e,function(a){return null==a?"":a+""})),b=r.valHooks[this.type]||r.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=r.valHooks[e.type]||r.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(fb,""):null==c?"":c)}}}),r.extend({valHooks:{option:{get:function(a){var b=r.find.attr(a,"value");return null!=b?b:db(r.text(a))}},select:{get:function(a){var b,c,d,e=a.options,f=a.selectedIndex,g="select-one"===a.type,h=g?null:[],i=g?f+1:e.length;for(d=f<0?i:g?f:0;d<i;d++)if(c=e[d],(c.selected||d===f)&&!c.disabled&&(!c.parentNode.disabled||!B(c.parentNode,"optgroup"))){if(b=r(c).val(),g)return b;h.push(b)}return h},set:function(a,b){var c,d,e=a.options,f=r.makeArray(b),g=e.length;while(g--)d=e[g],(d.selected=r.inArray(r.valHooks.option.get(d),f)>-1)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),r.each(["radio","checkbox"],function(){r.valHooks[this]={set:function(a,b){if(Array.isArray(b))return a.checked=r.inArray(r(a).val(),b)>-1}},o.checkOn||(r.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var gb=/^(?:focusinfocus|focusoutblur)$/;r.extend(r.event,{trigger:function(b,c,e,f){var g,h,i,j,k,m,n,o=[e||d],p=l.call(b,"type")?b.type:b,q=l.call(b,"namespace")?b.namespace.split("."):[];if(h=i=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!gb.test(p+r.event.triggered)&&(p.indexOf(".")>-1&&(q=p.split("."),p=q.shift(),q.sort()),k=p.indexOf(":")<0&&"on"+p,b=b[r.expando]?b:new r.Event(p,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=q.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:r.makeArray(c,[b]),n=r.event.special[p]||{},f||!n.trigger||n.trigger.apply(e,c)!==!1)){if(!f&&!n.noBubble&&!r.isWindow(e)){for(j=n.delegateType||p,gb.test(j+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),i=h;i===(e.ownerDocument||d)&&o.push(i.defaultView||i.parentWindow||a)}g=0;while((h=o[g++])&&!b.isPropagationStopped())b.type=g>1?j:n.bindType||p,m=(W.get(h,"events")||{})[b.type]&&W.get(h,"handle"),m&&m.apply(h,c),m=k&&h[k],m&&m.apply&&U(h)&&(b.result=m.apply(h,c),b.result===!1&&b.preventDefault());return b.type=p,f||b.isDefaultPrevented()||n._default&&n._default.apply(o.pop(),c)!==!1||!U(e)||k&&r.isFunction(e[p])&&!r.isWindow(e)&&(i=e[k],i&&(e[k]=null),r.event.triggered=p,e[p](),r.event.triggered=void 0,i&&(e[k]=i)),b.result}},simulate:function(a,b,c){var d=r.extend(new r.Event,c,{type:a,isSimulated:!0});r.event.trigger(d,null,b)}}),r.fn.extend({trigger:function(a,b){return this.each(function(){r.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];if(c)return r.event.trigger(a,b,c,!0)}}),r.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(a,b){r.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),r.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),o.focusin="onfocusin"in a,o.focusin||r.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){r.event.simulate(b,a.target,r.event.fix(a))};r.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=W.access(d,b);e||d.addEventListener(a,c,!0),W.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=W.access(d,b)-1;e?W.access(d,b,e):(d.removeEventListener(a,c,!0),W.remove(d,b))}}});var hb=/\[\]$/,ib=/\r?\n/g,jb=/^(?:submit|button|image|reset|file)$/i,kb=/^(?:input|select|textarea|keygen)/i;function lb(a,b,c,d){var e;if(Array.isArray(b))r.each(b,function(b,e){c||hb.test(a)?d(a,e):lb(a+"["+("object"==typeof e&&null!=e?b:"")+"]",e,c,d);
+});else if(c||"object"!==r.type(b))d(a,b);else for(e in b)lb(a+"["+e+"]",b[e],c,d)}r.param=function(a,b){var c,d=[],e=function(a,b){var c=r.isFunction(b)?b():b;d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(null==c?"":c)};if(Array.isArray(a)||a.jquery&&!r.isPlainObject(a))r.each(a,function(){e(this.name,this.value)});else for(c in a)lb(c,a[c],b,e);return d.join("&")},r.fn.extend({serialize:function(){return r.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=r.prop(this,"elements");return a?r.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!r(this).is(":disabled")&&kb.test(this.nodeName)&&!jb.test(a)&&(this.checked||!ja.test(a))}).map(function(a,b){var c=r(this).val();return null==c?null:Array.isArray(c)?r.map(c,function(a){return{name:b.name,value:a.replace(ib,"\r\n")}}):{name:b.name,value:c.replace(ib,"\r\n")}}).get()}}),r.fn.extend({wrapAll:function(a){var b;return this[0]&&(r.isFunction(a)&&(a=a.call(this[0])),b=r(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this},wrapInner:function(a){return r.isFunction(a)?this.each(function(b){r(this).wrapInner(a.call(this,b))}):this.each(function(){var b=r(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=r.isFunction(a);return this.each(function(c){r(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(a){return this.parent(a).not("body").each(function(){r(this).replaceWith(this.childNodes)}),this}}),r.expr.pseudos.hidden=function(a){return!r.expr.pseudos.visible(a)},r.expr.pseudos.visible=function(a){return!!(a.offsetWidth||a.offsetHeight||a.getClientRects().length)},o.createHTMLDocument=function(){var a=d.implementation.createHTMLDocument("").body;return a.innerHTML="<form></form><form></form>",2===a.childNodes.length}(),r.parseHTML=function(a,b,c){if("string"!=typeof a)return[];"boolean"==typeof b&&(c=b,b=!1);var e,f,g;return b||(o.createHTMLDocument?(b=d.implementation.createHTMLDocument(""),e=b.createElement("base"),e.href=d.location.href,b.head.appendChild(e)):b=d),f=C.exec(a),g=!c&&[],f?[b.createElement(f[1])]:(f=qa([a],b,g),g&&g.length&&r(g).remove(),r.merge([],f.childNodes))},r.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=r.css(a,"position"),l=r(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=r.css(a,"top"),i=r.css(a,"left"),j=("absolute"===k||"fixed"===k)&&(f+i).indexOf("auto")>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),r.isFunction(b)&&(b=b.call(a,c,r.extend({},h))),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},r.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){r.offset.setOffset(this,a,b)});var b,c,d,e,f=this[0];if(f)return f.getClientRects().length?(d=f.getBoundingClientRect(),b=f.ownerDocument,c=b.documentElement,e=b.defaultView,{top:d.top+e.pageYOffset-c.clientTop,left:d.left+e.pageXOffset-c.clientLeft}):{top:0,left:0}},position:function(){if(this[0]){var a,b,c=this[0],d={top:0,left:0};return"fixed"===r.css(c,"position")?b=c.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),B(a[0],"html")||(d=a.offset()),d={top:d.top+r.css(a[0],"borderTopWidth",!0),left:d.left+r.css(a[0],"borderLeftWidth",!0)}),{top:b.top-d.top-r.css(c,"marginTop",!0),left:b.left-d.left-r.css(c,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent;while(a&&"static"===r.css(a,"position"))a=a.offsetParent;return a||ra})}}),r.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c="pageYOffset"===b;r.fn[a]=function(d){return T(this,function(a,d,e){var f;return r.isWindow(a)?f=a:9===a.nodeType&&(f=a.defaultView),void 0===e?f?f[b]:a[d]:void(f?f.scrollTo(c?f.pageXOffset:e,c?e:f.pageYOffset):a[d]=e)},a,d,arguments.length)}}),r.each(["top","left"],function(a,b){r.cssHooks[b]=Pa(o.pixelPosition,function(a,c){if(c)return c=Oa(a,b),Ma.test(c)?r(a).position()[b]+"px":c})}),r.each({Height:"height",Width:"width"},function(a,b){r.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){r.fn[d]=function(e,f){var g=arguments.length&&(c||"boolean"!=typeof e),h=c||(e===!0||f===!0?"margin":"border");return T(this,function(b,c,e){var f;return r.isWindow(b)?0===d.indexOf("outer")?b["inner"+a]:b.document.documentElement["client"+a]:9===b.nodeType?(f=b.documentElement,Math.max(b.body["scroll"+a],f["scroll"+a],b.body["offset"+a],f["offset"+a],f["client"+a])):void 0===e?r.css(b,c,h):r.style(b,c,e,h)},b,g?e:void 0,g)}})}),r.fn.extend({bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}}),r.holdReady=function(a){a?r.readyWait++:r.ready(!0)},r.isArray=Array.isArray,r.parseJSON=JSON.parse,r.nodeName=B,"function"==typeof define&&define.amd&&define("jquery",[],function(){return r});var mb=a.jQuery,nb=a.$;return r.noConflict=function(b){return a.$===r&&(a.$=nb),b&&a.jQuery===r&&(a.jQuery=mb),r},b||(a.jQuery=a.$=r),r});
diff --git a/js/jquery/dist/jquery.slim.min.map b/js/jquery/dist/jquery.slim.min.map
new file mode 100644 (file)
index 0000000..a44b7b4
--- /dev/null
@@ -0,0 +1 @@
+{"version":3,"sources":["jquery.slim.js"],"names":["global","factory","module","exports","document","w","Error","window","this","noGlobal","arr","getProto","Object","getPrototypeOf","slice","concat","push","indexOf","class2type","toString","hasOwn","hasOwnProperty","fnToString","ObjectFunctionString","call","support","DOMEval","code","doc","script","createElement","text","head","appendChild","parentNode","removeChild","version","jQuery","selector","context","fn","init","rtrim","rmsPrefix","rdashAlpha","fcamelCase","all","letter","toUpperCase","prototype","jquery","constructor","length","toArray","get","num","pushStack","elems","ret","merge","prevObject","each","callback","map","elem","i","apply","arguments","first","eq","last","len","j","end","sort","splice","extend","options","name","src","copy","copyIsArray","clone","target","deep","isFunction","isPlainObject","Array","isArray","undefined","expando","Math","random","replace","isReady","error","msg","noop","obj","type","isWindow","isNumeric","isNaN","parseFloat","proto","Ctor","isEmptyObject","globalEval","camelCase","string","isArrayLike","trim","makeArray","results","inArray","second","grep","invert","callbackInverse","matches","callbackExpect","arg","value","guid","proxy","tmp","args","now","Date","Symbol","iterator","split","toLowerCase","Sizzle","Expr","getText","isXML","tokenize","compile","select","outermostContext","sortInput","hasDuplicate","setDocument","docElem","documentIsHTML","rbuggyQSA","rbuggyMatches","contains","preferredDoc","dirruns","done","classCache","createCache","tokenCache","compilerCache","sortOrder","a","b","pop","push_native","list","booleans","whitespace","identifier","attributes","pseudos","rwhitespace","RegExp","rcomma","rcombinators","rattributeQuotes","rpseudo","ridentifier","matchExpr","ID","CLASS","TAG","ATTR","PSEUDO","CHILD","bool","needsContext","rinputs","rheader","rnative","rquickExpr","rsibling","runescape","funescape","_","escaped","escapedWhitespace","high","String","fromCharCode","rcssescape","fcssescape","ch","asCodePoint","charCodeAt","unloadHandler","disabledAncestor","addCombinator","disabled","dir","next","childNodes","nodeType","e","els","seed","m","nid","match","groups","newSelector","newContext","ownerDocument","exec","getElementById","id","getElementsByTagName","getElementsByClassName","qsa","test","nodeName","getAttribute","setAttribute","toSelector","join","testContext","querySelectorAll","qsaError","removeAttribute","keys","cache","key","cacheLength","shift","markFunction","assert","el","addHandle","attrs","handler","attrHandle","siblingCheck","cur","diff","sourceIndex","nextSibling","createInputPseudo","createButtonPseudo","createDisabledPseudo","isDisabled","createPositionalPseudo","argument","matchIndexes","documentElement","node","hasCompare","subWindow","defaultView","top","addEventListener","attachEvent","className","createComment","getById","getElementsByName","filter","attrId","find","getAttributeNode","tag","innerHTML","input","matchesSelector","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","msMatchesSelector","disconnectedMatch","compareDocumentPosition","adown","bup","compare","sortDetached","aup","ap","bp","unshift","expr","elements","attr","val","specified","escape","sel","uniqueSort","duplicates","detectDuplicates","sortStable","textContent","firstChild","nodeValue","selectors","createPseudo","relative",">"," ","+","~","preFilter","excess","unquoted","nodeNameSelector","pattern","operator","check","result","what","simple","forward","ofType","xml","uniqueCache","outerCache","nodeIndex","start","parent","useCache","lastChild","uniqueID","pseudo","setFilters","idx","matched","not","matcher","unmatched","has","innerText","lang","elemLang","hash","location","root","focus","activeElement","hasFocus","href","tabIndex","enabled","checked","selected","selectedIndex","empty","header","button","even","odd","lt","gt","radio","checkbox","file","password","image","submit","reset","filters","parseOnly","tokens","soFar","preFilters","cached","combinator","base","skip","checkNonElements","doneName","oldCache","newCache","elementMatcher","matchers","multipleContexts","contexts","condense","newUnmatched","mapped","setMatcher","postFilter","postFinder","postSelector","temp","preMap","postMap","preexisting","matcherIn","matcherOut","matcherFromTokens","checkContext","leadingRelative","implicitRelative","matchContext","matchAnyContext","matcherFromGroupMatchers","elementMatchers","setMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","token","compiled","defaultValue","unique","isXMLDoc","escapeSelector","until","truncate","is","siblings","n","rneedsContext","rsingleTag","risSimple","winnow","qualifier","self","rootjQuery","parseHTML","ready","rparentsprev","guaranteedUnique","children","contents","prev","targets","l","closest","index","prevAll","add","addBack","sibling","parents","parentsUntil","nextAll","nextUntil","prevUntil","contentDocument","content","reverse","rnothtmlwhite","createOptions","object","flag","Callbacks","firing","memory","fired","locked","queue","firingIndex","fire","once","stopOnFalse","remove","disable","lock","fireWith","Identity","v","Thrower","ex","adoptValue","resolve","reject","noValue","method","promise","fail","then","Deferred","func","tuples","state","always","deferred","catch","pipe","fns","newDefer","tuple","returned","progress","notify","onFulfilled","onRejected","onProgress","maxDepth","depth","special","that","mightThrow","TypeError","notifyWith","resolveWith","process","exceptionHook","stackTrace","rejectWith","getStackHook","setTimeout","stateString","when","singleValue","remaining","resolveContexts","resolveValues","master","updateFunc","rerrorNames","stack","console","warn","message","readyException","readyList","readyWait","wait","completed","removeEventListener","readyState","doScroll","access","chainable","emptyGet","raw","bulk","acceptData","owner","Data","uid","defineProperty","configurable","set","data","prop","hasData","dataPriv","dataUser","rbrace","rmultiDash","getData","JSON","parse","dataAttr","removeData","_data","_removeData","dequeue","startLength","hooks","_queueHooks","stop","setter","clearQueue","count","defer","pnum","source","rcssNum","cssExpand","isHiddenWithinTree","style","display","css","swap","old","adjustCSS","valueParts","tween","adjusted","scale","maxIterations","currentValue","initial","unit","cssNumber","initialInUnit","defaultDisplayMap","getDefaultDisplay","body","showHide","show","values","hide","toggle","rcheckableType","rtagName","rscriptType","wrapMap","option","thead","col","tr","td","_default","optgroup","tbody","tfoot","colgroup","caption","th","getAll","setGlobalEval","refElements","rhtml","buildFragment","scripts","selection","ignored","wrap","fragment","createDocumentFragment","nodes","htmlPrefilter","createTextNode","div","checkClone","cloneNode","noCloneChecked","rkeyEvent","rmouseEvent","rtypenamespace","returnTrue","returnFalse","safeActiveElement","err","on","types","one","origFn","event","off","handleObjIn","eventHandle","events","t","handleObj","handlers","namespaces","origType","elemData","handle","triggered","dispatch","delegateType","bindType","namespace","delegateCount","setup","mappedTypes","origCount","teardown","removeEvent","nativeEvent","fix","handlerQueue","delegateTarget","preDispatch","isPropagationStopped","currentTarget","isImmediatePropagationStopped","rnamespace","preventDefault","stopPropagation","postDispatch","matchedHandlers","matchedSelectors","addProp","hook","Event","enumerable","originalEvent","writable","load","noBubble","trigger","blur","click","beforeunload","returnValue","props","isDefaultPrevented","defaultPrevented","relatedTarget","timeStamp","isSimulated","stopImmediatePropagation","altKey","bubbles","cancelable","changedTouches","ctrlKey","detail","eventPhase","metaKey","pageX","pageY","shiftKey","view","char","charCode","keyCode","buttons","clientX","clientY","offsetX","offsetY","pointerId","pointerType","screenX","screenY","targetTouches","toElement","touches","which","mouseenter","mouseleave","pointerenter","pointerleave","orig","related","rxhtmlTag","rnoInnerhtml","rchecked","rscriptTypeMasked","rcleanScript","manipulationTarget","disableScript","restoreScript","cloneCopyEvent","dest","pdataOld","pdataCur","udataOld","udataCur","fixInput","domManip","collection","hasScripts","iNoClone","html","_evalUrl","keepData","cleanData","dataAndEvents","deepDataAndEvents","srcElements","destElements","inPage","detach","append","prepend","insertBefore","before","after","replaceWith","replaceChild","appendTo","prependTo","insertAfter","replaceAll","original","insert","rmargin","rnumnonpx","getStyles","opener","getComputedStyle","computeStyleTests","cssText","container","divStyle","pixelPositionVal","reliableMarginLeftVal","marginLeft","boxSizingReliableVal","width","marginRight","pixelMarginRightVal","backgroundClip","clearCloneStyle","pixelPosition","boxSizingReliable","pixelMarginRight","reliableMarginLeft","curCSS","computed","minWidth","maxWidth","getPropertyValue","addGetHookIf","conditionFn","hookFn","rdisplayswap","rcustomProp","cssShow","position","visibility","cssNormalTransform","letterSpacing","fontWeight","cssPrefixes","emptyStyle","vendorPropName","capName","finalPropName","cssProps","setPositiveNumber","subtract","max","augmentWidthOrHeight","extra","isBorderBox","styles","getWidthOrHeight","valueIsBorderBox","cssHooks","opacity","animationIterationCount","columnCount","fillOpacity","flexGrow","flexShrink","lineHeight","order","orphans","widows","zIndex","zoom","float","origName","isCustomProp","setProperty","isFinite","getClientRects","getBoundingClientRect","left","margin","padding","border","prefix","suffix","expand","expanded","parts","delay","time","fx","speeds","timeout","clearTimeout","opt","checkOn","optSelected","radioValue","boolHook","removeAttr","nType","attrHooks","attrNames","getter","lowercaseName","rfocusable","rclickable","removeProp","propFix","propHooks","tabindex","parseInt","for","class","stripAndCollapse","getClass","addClass","classes","curValue","clazz","finalValue","removeClass","toggleClass","stateVal","classNames","hasClass","rreturn","valHooks","optionSet","rfocusMorph","onlyHandlers","bubbleType","ontype","eventPath","isTrigger","parentWindow","simulate","triggerHandler","hover","fnOver","fnOut","focusin","attaches","rbracket","rCRLF","rsubmitterTypes","rsubmittable","buildParams","traditional","param","s","valueOrFunction","encodeURIComponent","serialize","serializeArray","wrapAll","firstElementChild","wrapInner","unwrap","hidden","visible","offsetWidth","offsetHeight","createHTMLDocument","implementation","keepScripts","parsed","offset","setOffset","curPosition","curLeft","curCSSTop","curTop","curOffset","curCSSLeft","calculatePosition","curElem","using","rect","win","pageYOffset","clientTop","pageXOffset","clientLeft","offsetParent","parentOffset","scrollLeft","scrollTop","scrollTo","Height","Width","","defaultExtra","funcName","bind","unbind","delegate","undelegate","holdReady","hold","parseJSON","define","amd","_jQuery","_$","$","noConflict"],"mappings":"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","file":"jquery.slim.min.js"}
\ No newline at end of file
diff --git a/js/jquery/external/sizzle/dist/sizzle.js b/js/jquery/external/sizzle/dist/sizzle.js
new file mode 100644 (file)
index 0000000..bfa0793
--- /dev/null
@@ -0,0 +1,2272 @@
+/*!
+ * Sizzle CSS Selector Engine v2.3.3
+ * https://sizzlejs.com/
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license
+ * http://jquery.org/license
+ *
+ * Date: 2016-08-08
+ */
+(function( window ) {
+
+var i,
+       support,
+       Expr,
+       getText,
+       isXML,
+       tokenize,
+       compile,
+       select,
+       outermostContext,
+       sortInput,
+       hasDuplicate,
+
+       // Local document vars
+       setDocument,
+       document,
+       docElem,
+       documentIsHTML,
+       rbuggyQSA,
+       rbuggyMatches,
+       matches,
+       contains,
+
+       // Instance-specific data
+       expando = "sizzle" + 1 * new Date(),
+       preferredDoc = window.document,
+       dirruns = 0,
+       done = 0,
+       classCache = createCache(),
+       tokenCache = createCache(),
+       compilerCache = createCache(),
+       sortOrder = function( a, b ) {
+               if ( a === b ) {
+                       hasDuplicate = true;
+               }
+               return 0;
+       },
+
+       // Instance methods
+       hasOwn = ({}).hasOwnProperty,
+       arr = [],
+       pop = arr.pop,
+       push_native = arr.push,
+       push = arr.push,
+       slice = arr.slice,
+       // Use a stripped-down indexOf as it's faster than native
+       // https://jsperf.com/thor-indexof-vs-for/5
+       indexOf = function( list, elem ) {
+               var i = 0,
+                       len = list.length;
+               for ( ; i < len; i++ ) {
+                       if ( list[i] === elem ) {
+                               return i;
+                       }
+               }
+               return -1;
+       },
+
+       booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
+
+       // Regular expressions
+
+       // http://www.w3.org/TR/css3-selectors/#whitespace
+       whitespace = "[\\x20\\t\\r\\n\\f]",
+
+       // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
+       identifier = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+",
+
+       // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
+       attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace +
+               // Operator (capture 2)
+               "*([*^$|!~]?=)" + whitespace +
+               // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
+               "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace +
+               "*\\]",
+
+       pseudos = ":(" + identifier + ")(?:\\((" +
+               // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
+               // 1. quoted (capture 3; capture 4 or capture 5)
+               "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
+               // 2. simple (capture 6)
+               "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
+               // 3. anything else (capture 2)
+               ".*" +
+               ")\\)|)",
+
+       // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
+       rwhitespace = new RegExp( whitespace + "+", "g" ),
+       rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
+
+       rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
+       rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ),
+
+       rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ),
+
+       rpseudo = new RegExp( pseudos ),
+       ridentifier = new RegExp( "^" + identifier + "$" ),
+
+       matchExpr = {
+               "ID": new RegExp( "^#(" + identifier + ")" ),
+               "CLASS": new RegExp( "^\\.(" + identifier + ")" ),
+               "TAG": new RegExp( "^(" + identifier + "|[*])" ),
+               "ATTR": new RegExp( "^" + attributes ),
+               "PSEUDO": new RegExp( "^" + pseudos ),
+               "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
+                       "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
+                       "*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
+               "bool": new RegExp( "^(?:" + booleans + ")$", "i" ),
+               // For use in libraries implementing .is()
+               // We use this for POS matching in `select`
+               "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
+                       whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
+       },
+
+       rinputs = /^(?:input|select|textarea|button)$/i,
+       rheader = /^h\d$/i,
+
+       rnative = /^[^{]+\{\s*\[native \w/,
+
+       // Easily-parseable/retrievable ID or TAG or CLASS selectors
+       rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
+
+       rsibling = /[+~]/,
+
+       // CSS escapes
+       // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
+       runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ),
+       funescape = function( _, escaped, escapedWhitespace ) {
+               var high = "0x" + escaped - 0x10000;
+               // NaN means non-codepoint
+               // Support: Firefox<24
+               // Workaround erroneous numeric interpretation of +"0x"
+               return high !== high || escapedWhitespace ?
+                       escaped :
+                       high < 0 ?
+                               // BMP codepoint
+                               String.fromCharCode( high + 0x10000 ) :
+                               // Supplemental Plane codepoint (surrogate pair)
+                               String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
+       },
+
+       // CSS string/identifier serialization
+       // https://drafts.csswg.org/cssom/#common-serializing-idioms
+       rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,
+       fcssescape = function( ch, asCodePoint ) {
+               if ( asCodePoint ) {
+
+                       // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER
+                       if ( ch === "\0" ) {
+                               return "\uFFFD";
+                       }
+
+                       // Control characters and (dependent upon position) numbers get escaped as code points
+                       return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " ";
+               }
+
+               // Other potentially-special ASCII characters get backslash-escaped
+               return "\\" + ch;
+       },
+
+       // Used for iframes
+       // See setDocument()
+       // Removing the function wrapper causes a "Permission Denied"
+       // error in IE
+       unloadHandler = function() {
+               setDocument();
+       },
+
+       disabledAncestor = addCombinator(
+               function( elem ) {
+                       return elem.disabled === true && ("form" in elem || "label" in elem);
+               },
+               { dir: "parentNode", next: "legend" }
+       );
+
+// Optimize for push.apply( _, NodeList )
+try {
+       push.apply(
+               (arr = slice.call( preferredDoc.childNodes )),
+               preferredDoc.childNodes
+       );
+       // Support: Android<4.0
+       // Detect silently failing push.apply
+       arr[ preferredDoc.childNodes.length ].nodeType;
+} catch ( e ) {
+       push = { apply: arr.length ?
+
+               // Leverage slice if possible
+               function( target, els ) {
+                       push_native.apply( target, slice.call(els) );
+               } :
+
+               // Support: IE<9
+               // Otherwise append directly
+               function( target, els ) {
+                       var j = target.length,
+                               i = 0;
+                       // Can't trust NodeList.length
+                       while ( (target[j++] = els[i++]) ) {}
+                       target.length = j - 1;
+               }
+       };
+}
+
+function Sizzle( selector, context, results, seed ) {
+       var m, i, elem, nid, match, groups, newSelector,
+               newContext = context && context.ownerDocument,
+
+               // nodeType defaults to 9, since context defaults to document
+               nodeType = context ? context.nodeType : 9;
+
+       results = results || [];
+
+       // Return early from calls with invalid selector or context
+       if ( typeof selector !== "string" || !selector ||
+               nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {
+
+               return results;
+       }
+
+       // Try to shortcut find operations (as opposed to filters) in HTML documents
+       if ( !seed ) {
+
+               if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
+                       setDocument( context );
+               }
+               context = context || document;
+
+               if ( documentIsHTML ) {
+
+                       // If the selector is sufficiently simple, try using a "get*By*" DOM method
+                       // (excepting DocumentFragment context, where the methods don't exist)
+                       if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {
+
+                               // ID selector
+                               if ( (m = match[1]) ) {
+
+                                       // Document context
+                                       if ( nodeType === 9 ) {
+                                               if ( (elem = context.getElementById( m )) ) {
+
+                                                       // Support: IE, Opera, Webkit
+                                                       // TODO: identify versions
+                                                       // getElementById can match elements by name instead of ID
+                                                       if ( elem.id === m ) {
+                                                               results.push( elem );
+                                                               return results;
+                                                       }
+                                               } else {
+                                                       return results;
+                                               }
+
+                                       // Element context
+                                       } else {
+
+                                               // Support: IE, Opera, Webkit
+                                               // TODO: identify versions
+                                               // getElementById can match elements by name instead of ID
+                                               if ( newContext && (elem = newContext.getElementById( m )) &&
+                                                       contains( context, elem ) &&
+                                                       elem.id === m ) {
+
+                                                       results.push( elem );
+                                                       return results;
+                                               }
+                                       }
+
+                               // Type selector
+                               } else if ( match[2] ) {
+                                       push.apply( results, context.getElementsByTagName( selector ) );
+                                       return results;
+
+                               // Class selector
+                               } else if ( (m = match[3]) && support.getElementsByClassName &&
+                                       context.getElementsByClassName ) {
+
+                                       push.apply( results, context.getElementsByClassName( m ) );
+                                       return results;
+                               }
+                       }
+
+                       // Take advantage of querySelectorAll
+                       if ( support.qsa &&
+                               !compilerCache[ selector + " " ] &&
+                               (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {
+
+                               if ( nodeType !== 1 ) {
+                                       newContext = context;
+                                       newSelector = selector;
+
+                               // qSA looks outside Element context, which is not what we want
+                               // Thanks to Andrew Dupont for this workaround technique
+                               // Support: IE <=8
+                               // Exclude object elements
+                               } else if ( context.nodeName.toLowerCase() !== "object" ) {
+
+                                       // Capture the context ID, setting it first if necessary
+                                       if ( (nid = context.getAttribute( "id" )) ) {
+                                               nid = nid.replace( rcssescape, fcssescape );
+                                       } else {
+                                               context.setAttribute( "id", (nid = expando) );
+                                       }
+
+                                       // Prefix every selector in the list
+                                       groups = tokenize( selector );
+                                       i = groups.length;
+                                       while ( i-- ) {
+                                               groups[i] = "#" + nid + " " + toSelector( groups[i] );
+                                       }
+                                       newSelector = groups.join( "," );
+
+                                       // Expand context for sibling selectors
+                                       newContext = rsibling.test( selector ) && testContext( context.parentNode ) ||
+                                               context;
+                               }
+
+                               if ( newSelector ) {
+                                       try {
+                                               push.apply( results,
+                                                       newContext.querySelectorAll( newSelector )
+                                               );
+                                               return results;
+                                       } catch ( qsaError ) {
+                                       } finally {
+                                               if ( nid === expando ) {
+                                                       context.removeAttribute( "id" );
+                                               }
+                                       }
+                               }
+                       }
+               }
+       }
+
+       // All others
+       return select( selector.replace( rtrim, "$1" ), context, results, seed );
+}
+
+/**
+ * Create key-value caches of limited size
+ * @returns {function(string, object)} Returns the Object data after storing it on itself with
+ *     property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
+ *     deleting the oldest entry
+ */
+function createCache() {
+       var keys = [];
+
+       function cache( key, value ) {
+               // Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
+               if ( keys.push( key + " " ) > Expr.cacheLength ) {
+                       // Only keep the most recent entries
+                       delete cache[ keys.shift() ];
+               }
+               return (cache[ key + " " ] = value);
+       }
+       return cache;
+}
+
+/**
+ * Mark a function for special use by Sizzle
+ * @param {Function} fn The function to mark
+ */
+function markFunction( fn ) {
+       fn[ expando ] = true;
+       return fn;
+}
+
+/**
+ * Support testing using an element
+ * @param {Function} fn Passed the created element and returns a boolean result
+ */
+function assert( fn ) {
+       var el = document.createElement("fieldset");
+
+       try {
+               return !!fn( el );
+       } catch (e) {
+               return false;
+       } finally {
+               // Remove from its parent by default
+               if ( el.parentNode ) {
+                       el.parentNode.removeChild( el );
+               }
+               // release memory in IE
+               el = null;
+       }
+}
+
+/**
+ * Adds the same handler for all of the specified attrs
+ * @param {String} attrs Pipe-separated list of attributes
+ * @param {Function} handler The method that will be applied
+ */
+function addHandle( attrs, handler ) {
+       var arr = attrs.split("|"),
+               i = arr.length;
+
+       while ( i-- ) {
+               Expr.attrHandle[ arr[i] ] = handler;
+       }
+}
+
+/**
+ * Checks document order of two siblings
+ * @param {Element} a
+ * @param {Element} b
+ * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
+ */
+function siblingCheck( a, b ) {
+       var cur = b && a,
+               diff = cur && a.nodeType === 1 && b.nodeType === 1 &&
+                       a.sourceIndex - b.sourceIndex;
+
+       // Use IE sourceIndex if available on both nodes
+       if ( diff ) {
+               return diff;
+       }
+
+       // Check if b follows a
+       if ( cur ) {
+               while ( (cur = cur.nextSibling) ) {
+                       if ( cur === b ) {
+                               return -1;
+                       }
+               }
+       }
+
+       return a ? 1 : -1;
+}
+
+/**
+ * Returns a function to use in pseudos for input types
+ * @param {String} type
+ */
+function createInputPseudo( type ) {
+       return function( elem ) {
+               var name = elem.nodeName.toLowerCase();
+               return name === "input" && elem.type === type;
+       };
+}
+
+/**
+ * Returns a function to use in pseudos for buttons
+ * @param {String} type
+ */
+function createButtonPseudo( type ) {
+       return function( elem ) {
+               var name = elem.nodeName.toLowerCase();
+               return (name === "input" || name === "button") && elem.type === type;
+       };
+}
+
+/**
+ * Returns a function to use in pseudos for :enabled/:disabled
+ * @param {Boolean} disabled true for :disabled; false for :enabled
+ */
+function createDisabledPseudo( disabled ) {
+
+       // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable
+       return function( elem ) {
+
+               // Only certain elements can match :enabled or :disabled
+               // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled
+               // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled
+               if ( "form" in elem ) {
+
+                       // Check for inherited disabledness on relevant non-disabled elements:
+                       // * listed form-associated elements in a disabled fieldset
+                       //   https://html.spec.whatwg.org/multipage/forms.html#category-listed
+                       //   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled
+                       // * option elements in a disabled optgroup
+                       //   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled
+                       // All such elements have a "form" property.
+                       if ( elem.parentNode && elem.disabled === false ) {
+
+                               // Option elements defer to a parent optgroup if present
+                               if ( "label" in elem ) {
+                                       if ( "label" in elem.parentNode ) {
+                                               return elem.parentNode.disabled === disabled;
+                                       } else {
+                                               return elem.disabled === disabled;
+                                       }
+                               }
+
+                               // Support: IE 6 - 11
+                               // Use the isDisabled shortcut property to check for disabled fieldset ancestors
+                               return elem.isDisabled === disabled ||
+
+                                       // Where there is no isDisabled, check manually
+                                       /* jshint -W018 */
+                                       elem.isDisabled !== !disabled &&
+                                               disabledAncestor( elem ) === disabled;
+                       }
+
+                       return elem.disabled === disabled;
+
+               // Try to winnow out elements that can't be disabled before trusting the disabled property.
+               // Some victims get caught in our net (label, legend, menu, track), but it shouldn't
+               // even exist on them, let alone have a boolean value.
+               } else if ( "label" in elem ) {
+                       return elem.disabled === disabled;
+               }
+
+               // Remaining elements are neither :enabled nor :disabled
+               return false;
+       };
+}
+
+/**
+ * Returns a function to use in pseudos for positionals
+ * @param {Function} fn
+ */
+function createPositionalPseudo( fn ) {
+       return markFunction(function( argument ) {
+               argument = +argument;
+               return markFunction(function( seed, matches ) {
+                       var j,
+                               matchIndexes = fn( [], seed.length, argument ),
+                               i = matchIndexes.length;
+
+                       // Match elements found at the specified indexes
+                       while ( i-- ) {
+                               if ( seed[ (j = matchIndexes[i]) ] ) {
+                                       seed[j] = !(matches[j] = seed[j]);
+                               }
+                       }
+               });
+       });
+}
+
+/**
+ * Checks a node for validity as a Sizzle context
+ * @param {Element|Object=} context
+ * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
+ */
+function testContext( context ) {
+       return context && typeof context.getElementsByTagName !== "undefined" && context;
+}
+
+// Expose support vars for convenience
+support = Sizzle.support = {};
+
+/**
+ * Detects XML nodes
+ * @param {Element|Object} elem An element or a document
+ * @returns {Boolean} True iff elem is a non-HTML XML node
+ */
+isXML = Sizzle.isXML = function( elem ) {
+       // documentElement is verified for cases where it doesn't yet exist
+       // (such as loading iframes in IE - #4833)
+       var documentElement = elem && (elem.ownerDocument || elem).documentElement;
+       return documentElement ? documentElement.nodeName !== "HTML" : false;
+};
+
+/**
+ * Sets document-related variables once based on the current document
+ * @param {Element|Object} [doc] An element or document object to use to set the document
+ * @returns {Object} Returns the current document
+ */
+setDocument = Sizzle.setDocument = function( node ) {
+       var hasCompare, subWindow,
+               doc = node ? node.ownerDocument || node : preferredDoc;
+
+       // Return early if doc is invalid or already selected
+       if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
+               return document;
+       }
+
+       // Update global variables
+       document = doc;
+       docElem = document.documentElement;
+       documentIsHTML = !isXML( document );
+
+       // Support: IE 9-11, Edge
+       // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936)
+       if ( preferredDoc !== document &&
+               (subWindow = document.defaultView) && subWindow.top !== subWindow ) {
+
+               // Support: IE 11, Edge
+               if ( subWindow.addEventListener ) {
+                       subWindow.addEventListener( "unload", unloadHandler, false );
+
+               // Support: IE 9 - 10 only
+               } else if ( subWindow.attachEvent ) {
+                       subWindow.attachEvent( "onunload", unloadHandler );
+               }
+       }
+
+       /* Attributes
+       ---------------------------------------------------------------------- */
+
+       // Support: IE<8
+       // Verify that getAttribute really returns attributes and not properties
+       // (excepting IE8 booleans)
+       support.attributes = assert(function( el ) {
+               el.className = "i";
+               return !el.getAttribute("className");
+       });
+
+       /* getElement(s)By*
+       ---------------------------------------------------------------------- */
+
+       // Check if getElementsByTagName("*") returns only elements
+       support.getElementsByTagName = assert(function( el ) {
+               el.appendChild( document.createComment("") );
+               return !el.getElementsByTagName("*").length;
+       });
+
+       // Support: IE<9
+       support.getElementsByClassName = rnative.test( document.getElementsByClassName );
+
+       // Support: IE<10
+       // Check if getElementById returns elements by name
+       // The broken getElementById methods don't pick up programmatically-set names,
+       // so use a roundabout getElementsByName test
+       support.getById = assert(function( el ) {
+               docElem.appendChild( el ).id = expando;
+               return !document.getElementsByName || !document.getElementsByName( expando ).length;
+       });
+
+       // ID filter and find
+       if ( support.getById ) {
+               Expr.filter["ID"] = function( id ) {
+                       var attrId = id.replace( runescape, funescape );
+                       return function( elem ) {
+                               return elem.getAttribute("id") === attrId;
+                       };
+               };
+               Expr.find["ID"] = function( id, context ) {
+                       if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
+                               var elem = context.getElementById( id );
+                               return elem ? [ elem ] : [];
+                       }
+               };
+       } else {
+               Expr.filter["ID"] =  function( id ) {
+                       var attrId = id.replace( runescape, funescape );
+                       return function( elem ) {
+                               var node = typeof elem.getAttributeNode !== "undefined" &&
+                                       elem.getAttributeNode("id");
+                               return node && node.value === attrId;
+                       };
+               };
+
+               // Support: IE 6 - 7 only
+               // getElementById is not reliable as a find shortcut
+               Expr.find["ID"] = function( id, context ) {
+                       if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
+                               var node, i, elems,
+                                       elem = context.getElementById( id );
+
+                               if ( elem ) {
+
+                                       // Verify the id attribute
+                                       node = elem.getAttributeNode("id");
+                                       if ( node && node.value === id ) {
+                                               return [ elem ];
+                                       }
+
+                                       // Fall back on getElementsByName
+                                       elems = context.getElementsByName( id );
+                                       i = 0;
+                                       while ( (elem = elems[i++]) ) {
+                                               node = elem.getAttributeNode("id");
+                                               if ( node && node.value === id ) {
+                                                       return [ elem ];
+                                               }
+                                       }
+                               }
+
+                               return [];
+                       }
+               };
+       }
+
+       // Tag
+       Expr.find["TAG"] = support.getElementsByTagName ?
+               function( tag, context ) {
+                       if ( typeof context.getElementsByTagName !== "undefined" ) {
+                               return context.getElementsByTagName( tag );
+
+                       // DocumentFragment nodes don't have gEBTN
+                       } else if ( support.qsa ) {
+                               return context.querySelectorAll( tag );
+                       }
+               } :
+
+               function( tag, context ) {
+                       var elem,
+                               tmp = [],
+                               i = 0,
+                               // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too
+                               results = context.getElementsByTagName( tag );
+
+                       // Filter out possible comments
+                       if ( tag === "*" ) {
+                               while ( (elem = results[i++]) ) {
+                                       if ( elem.nodeType === 1 ) {
+                                               tmp.push( elem );
+                                       }
+                               }
+
+                               return tmp;
+                       }
+                       return results;
+               };
+
+       // Class
+       Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) {
+               if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) {
+                       return context.getElementsByClassName( className );
+               }
+       };
+
+       /* QSA/matchesSelector
+       ---------------------------------------------------------------------- */
+
+       // QSA and matchesSelector support
+
+       // matchesSelector(:active) reports false when true (IE9/Opera 11.5)
+       rbuggyMatches = [];
+
+       // qSa(:focus) reports false when true (Chrome 21)
+       // We allow this because of a bug in IE8/9 that throws an error
+       // whenever `document.activeElement` is accessed on an iframe
+       // So, we allow :focus to pass through QSA all the time to avoid the IE error
+       // See https://bugs.jquery.com/ticket/13378
+       rbuggyQSA = [];
+
+       if ( (support.qsa = rnative.test( document.querySelectorAll )) ) {
+               // Build QSA regex
+               // Regex strategy adopted from Diego Perini
+               assert(function( el ) {
+                       // Select is set to empty string on purpose
+                       // This is to test IE's treatment of not explicitly
+                       // setting a boolean content attribute,
+                       // since its presence should be enough
+                       // https://bugs.jquery.com/ticket/12359
+                       docElem.appendChild( el ).innerHTML = "<a id='" + expando + "'></a>" +
+                               "<select id='" + expando + "-\r\\' msallowcapture=''>" +
+                               "<option selected=''></option></select>";
+
+                       // Support: IE8, Opera 11-12.16
+                       // Nothing should be selected when empty strings follow ^= or $= or *=
+                       // The test attribute must be unknown in Opera but "safe" for WinRT
+                       // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
+                       if ( el.querySelectorAll("[msallowcapture^='']").length ) {
+                               rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
+                       }
+
+                       // Support: IE8
+                       // Boolean attributes and "value" are not treated correctly
+                       if ( !el.querySelectorAll("[selected]").length ) {
+                               rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
+                       }
+
+                       // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+
+                       if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) {
+                               rbuggyQSA.push("~=");
+                       }
+
+                       // Webkit/Opera - :checked should return selected option elements
+                       // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
+                       // IE8 throws error here and will not see later tests
+                       if ( !el.querySelectorAll(":checked").length ) {
+                               rbuggyQSA.push(":checked");
+                       }
+
+                       // Support: Safari 8+, iOS 8+
+                       // https://bugs.webkit.org/show_bug.cgi?id=136851
+                       // In-page `selector#id sibling-combinator selector` fails
+                       if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) {
+                               rbuggyQSA.push(".#.+[+~]");
+                       }
+               });
+
+               assert(function( el ) {
+                       el.innerHTML = "<a href='' disabled='disabled'></a>" +
+                               "<select disabled='disabled'><option/></select>";
+
+                       // Support: Windows 8 Native Apps
+                       // The type and name attributes are restricted during .innerHTML assignment
+                       var input = document.createElement("input");
+                       input.setAttribute( "type", "hidden" );
+                       el.appendChild( input ).setAttribute( "name", "D" );
+
+                       // Support: IE8
+                       // Enforce case-sensitivity of name attribute
+                       if ( el.querySelectorAll("[name=d]").length ) {
+                               rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" );
+                       }
+
+                       // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
+                       // IE8 throws error here and will not see later tests
+                       if ( el.querySelectorAll(":enabled").length !== 2 ) {
+                               rbuggyQSA.push( ":enabled", ":disabled" );
+                       }
+
+                       // Support: IE9-11+
+                       // IE's :disabled selector does not pick up the children of disabled fieldsets
+                       docElem.appendChild( el ).disabled = true;
+                       if ( el.querySelectorAll(":disabled").length !== 2 ) {
+                               rbuggyQSA.push( ":enabled", ":disabled" );
+                       }
+
+                       // Opera 10-11 does not throw on post-comma invalid pseudos
+                       el.querySelectorAll("*,:x");
+                       rbuggyQSA.push(",.*:");
+               });
+       }
+
+       if ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||
+               docElem.webkitMatchesSelector ||
+               docElem.mozMatchesSelector ||
+               docElem.oMatchesSelector ||
+               docElem.msMatchesSelector) )) ) {
+
+               assert(function( el ) {
+                       // Check to see if it's possible to do matchesSelector
+                       // on a disconnected node (IE 9)
+                       support.disconnectedMatch = matches.call( el, "*" );
+
+                       // This should fail with an exception
+                       // Gecko does not error, returns false instead
+                       matches.call( el, "[s!='']:x" );
+                       rbuggyMatches.push( "!=", pseudos );
+               });
+       }
+
+       rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") );
+       rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") );
+
+       /* Contains
+       ---------------------------------------------------------------------- */
+       hasCompare = rnative.test( docElem.compareDocumentPosition );
+
+       // Element contains another
+       // Purposefully self-exclusive
+       // As in, an element does not contain itself
+       contains = hasCompare || rnative.test( docElem.contains ) ?
+               function( a, b ) {
+                       var adown = a.nodeType === 9 ? a.documentElement : a,
+                               bup = b && b.parentNode;
+                       return a === bup || !!( bup && bup.nodeType === 1 && (
+                               adown.contains ?
+                                       adown.contains( bup ) :
+                                       a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
+                       ));
+               } :
+               function( a, b ) {
+                       if ( b ) {
+                               while ( (b = b.parentNode) ) {
+                                       if ( b === a ) {
+                                               return true;
+                                       }
+                               }
+                       }
+                       return false;
+               };
+
+       /* Sorting
+       ---------------------------------------------------------------------- */
+
+       // Document order sorting
+       sortOrder = hasCompare ?
+       function( a, b ) {
+
+               // Flag for duplicate removal
+               if ( a === b ) {
+                       hasDuplicate = true;
+                       return 0;
+               }
+
+               // Sort on method existence if only one input has compareDocumentPosition
+               var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
+               if ( compare ) {
+                       return compare;
+               }
+
+               // Calculate position if both inputs belong to the same document
+               compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?
+                       a.compareDocumentPosition( b ) :
+
+                       // Otherwise we know they are disconnected
+                       1;
+
+               // Disconnected nodes
+               if ( compare & 1 ||
+                       (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {
+
+                       // Choose the first element that is related to our preferred document
+                       if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {
+                               return -1;
+                       }
+                       if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {
+                               return 1;
+                       }
+
+                       // Maintain original order
+                       return sortInput ?
+                               ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
+                               0;
+               }
+
+               return compare & 4 ? -1 : 1;
+       } :
+       function( a, b ) {
+               // Exit early if the nodes are identical
+               if ( a === b ) {
+                       hasDuplicate = true;
+                       return 0;
+               }
+
+               var cur,
+                       i = 0,
+                       aup = a.parentNode,
+                       bup = b.parentNode,
+                       ap = [ a ],
+                       bp = [ b ];
+
+               // Parentless nodes are either documents or disconnected
+               if ( !aup || !bup ) {
+                       return a === document ? -1 :
+                               b === document ? 1 :
+                               aup ? -1 :
+                               bup ? 1 :
+                               sortInput ?
+                               ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
+                               0;
+
+               // If the nodes are siblings, we can do a quick check
+               } else if ( aup === bup ) {
+                       return siblingCheck( a, b );
+               }
+
+               // Otherwise we need full lists of their ancestors for comparison
+               cur = a;
+               while ( (cur = cur.parentNode) ) {
+                       ap.unshift( cur );
+               }
+               cur = b;
+               while ( (cur = cur.parentNode) ) {
+                       bp.unshift( cur );
+               }
+
+               // Walk down the tree looking for a discrepancy
+               while ( ap[i] === bp[i] ) {
+                       i++;
+               }
+
+               return i ?
+                       // Do a sibling check if the nodes have a common ancestor
+                       siblingCheck( ap[i], bp[i] ) :
+
+                       // Otherwise nodes in our document sort first
+                       ap[i] === preferredDoc ? -1 :
+                       bp[i] === preferredDoc ? 1 :
+                       0;
+       };
+
+       return document;
+};
+
+Sizzle.matches = function( expr, elements ) {
+       return Sizzle( expr, null, null, elements );
+};
+
+Sizzle.matchesSelector = function( elem, expr ) {
+       // Set document vars if needed
+       if ( ( elem.ownerDocument || elem ) !== document ) {
+               setDocument( elem );
+       }
+
+       // Make sure that attribute selectors are quoted
+       expr = expr.replace( rattributeQuotes, "='$1']" );
+
+       if ( support.matchesSelector && documentIsHTML &&
+               !compilerCache[ expr + " " ] &&
+               ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&
+               ( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {
+
+               try {
+                       var ret = matches.call( elem, expr );
+
+                       // IE 9's matchesSelector returns false on disconnected nodes
+                       if ( ret || support.disconnectedMatch ||
+                                       // As well, disconnected nodes are said to be in a document
+                                       // fragment in IE 9
+                                       elem.document && elem.document.nodeType !== 11 ) {
+                               return ret;
+                       }
+               } catch (e) {}
+       }
+
+       return Sizzle( expr, document, null, [ elem ] ).length > 0;
+};
+
+Sizzle.contains = function( context, elem ) {
+       // Set document vars if needed
+       if ( ( context.ownerDocument || context ) !== document ) {
+               setDocument( context );
+       }
+       return contains( context, elem );
+};
+
+Sizzle.attr = function( elem, name ) {
+       // Set document vars if needed
+       if ( ( elem.ownerDocument || elem ) !== document ) {
+               setDocument( elem );
+       }
+
+       var fn = Expr.attrHandle[ name.toLowerCase() ],
+               // Don't get fooled by Object.prototype properties (jQuery #13807)
+               val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
+                       fn( elem, name, !documentIsHTML ) :
+                       undefined;
+
+       return val !== undefined ?
+               val :
+               support.attributes || !documentIsHTML ?
+                       elem.getAttribute( name ) :
+                       (val = elem.getAttributeNode(name)) && val.specified ?
+                               val.value :
+                               null;
+};
+
+Sizzle.escape = function( sel ) {
+       return (sel + "").replace( rcssescape, fcssescape );
+};
+
+Sizzle.error = function( msg ) {
+       throw new Error( "Syntax error, unrecognized expression: " + msg );
+};
+
+/**
+ * Document sorting and removing duplicates
+ * @param {ArrayLike} results
+ */
+Sizzle.uniqueSort = function( results ) {
+       var elem,
+               duplicates = [],
+               j = 0,
+               i = 0;
+
+       // Unless we *know* we can detect duplicates, assume their presence
+       hasDuplicate = !support.detectDuplicates;
+       sortInput = !support.sortStable && results.slice( 0 );
+       results.sort( sortOrder );
+
+       if ( hasDuplicate ) {
+               while ( (elem = results[i++]) ) {
+                       if ( elem === results[ i ] ) {
+                               j = duplicates.push( i );
+                       }
+               }
+               while ( j-- ) {
+                       results.splice( duplicates[ j ], 1 );
+               }
+       }
+
+       // Clear input after sorting to release objects
+       // See https://github.com/jquery/sizzle/pull/225
+       sortInput = null;
+
+       return results;
+};
+
+/**
+ * Utility function for retrieving the text value of an array of DOM nodes
+ * @param {Array|Element} elem
+ */
+getText = Sizzle.getText = function( elem ) {
+       var node,
+               ret = "",
+               i = 0,
+               nodeType = elem.nodeType;
+
+       if ( !nodeType ) {
+               // If no nodeType, this is expected to be an array
+               while ( (node = elem[i++]) ) {
+                       // Do not traverse comment nodes
+                       ret += getText( node );
+               }
+       } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
+               // Use textContent for elements
+               // innerText usage removed for consistency of new lines (jQuery #11153)
+               if ( typeof elem.textContent === "string" ) {
+                       return elem.textContent;
+               } else {
+                       // Traverse its children
+                       for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
+                               ret += getText( elem );
+                       }
+               }
+       } else if ( nodeType === 3 || nodeType === 4 ) {
+               return elem.nodeValue;
+       }
+       // Do not include comment or processing instruction nodes
+
+       return ret;
+};
+
+Expr = Sizzle.selectors = {
+
+       // Can be adjusted by the user
+       cacheLength: 50,
+
+       createPseudo: markFunction,
+
+       match: matchExpr,
+
+       attrHandle: {},
+
+       find: {},
+
+       relative: {
+               ">": { dir: "parentNode", first: true },
+               " ": { dir: "parentNode" },
+               "+": { dir: "previousSibling", first: true },
+               "~": { dir: "previousSibling" }
+       },
+
+       preFilter: {
+               "ATTR": function( match ) {
+                       match[1] = match[1].replace( runescape, funescape );
+
+                       // Move the given value to match[3] whether quoted or unquoted
+                       match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape );
+
+                       if ( match[2] === "~=" ) {
+                               match[3] = " " + match[3] + " ";
+                       }
+
+                       return match.slice( 0, 4 );
+               },
+
+               "CHILD": function( match ) {
+                       /* matches from matchExpr["CHILD"]
+                               1 type (only|nth|...)
+                               2 what (child|of-type)
+                               3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
+                               4 xn-component of xn+y argument ([+-]?\d*n|)
+                               5 sign of xn-component
+                               6 x of xn-component
+                               7 sign of y-component
+                               8 y of y-component
+                       */
+                       match[1] = match[1].toLowerCase();
+
+                       if ( match[1].slice( 0, 3 ) === "nth" ) {
+                               // nth-* requires argument
+                               if ( !match[3] ) {
+                                       Sizzle.error( match[0] );
+                               }
+
+                               // numeric x and y parameters for Expr.filter.CHILD
+                               // remember that false/true cast respectively to 0/1
+                               match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
+                               match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );
+
+                       // other types prohibit arguments
+                       } else if ( match[3] ) {
+                               Sizzle.error( match[0] );
+                       }
+
+                       return match;
+               },
+
+               "PSEUDO": function( match ) {
+                       var excess,
+                               unquoted = !match[6] && match[2];
+
+                       if ( matchExpr["CHILD"].test( match[0] ) ) {
+                               return null;
+                       }
+
+                       // Accept quoted arguments as-is
+                       if ( match[3] ) {
+                               match[2] = match[4] || match[5] || "";
+
+                       // Strip excess characters from unquoted arguments
+                       } else if ( unquoted && rpseudo.test( unquoted ) &&
+                               // Get excess from tokenize (recursively)
+                               (excess = tokenize( unquoted, true )) &&
+                               // advance to the next closing parenthesis
+                               (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {
+
+                               // excess is a negative index
+                               match[0] = match[0].slice( 0, excess );
+                               match[2] = unquoted.slice( 0, excess );
+                       }
+
+                       // Return only captures needed by the pseudo filter method (type and argument)
+                       return match.slice( 0, 3 );
+               }
+       },
+
+       filter: {
+
+               "TAG": function( nodeNameSelector ) {
+                       var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
+                       return nodeNameSelector === "*" ?
+                               function() { return true; } :
+                               function( elem ) {
+                                       return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
+                               };
+               },
+
+               "CLASS": function( className ) {
+                       var pattern = classCache[ className + " " ];
+
+                       return pattern ||
+                               (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
+                               classCache( className, function( elem ) {
+                                       return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" );
+                               });
+               },
+
+               "ATTR": function( name, operator, check ) {
+                       return function( elem ) {
+                               var result = Sizzle.attr( elem, name );
+
+                               if ( result == null ) {
+                                       return operator === "!=";
+                               }
+                               if ( !operator ) {
+                                       return true;
+                               }
+
+                               result += "";
+
+                               return operator === "=" ? result === check :
+                                       operator === "!=" ? result !== check :
+                                       operator === "^=" ? check && result.indexOf( check ) === 0 :
+                                       operator === "*=" ? check && result.indexOf( check ) > -1 :
+                                       operator === "$=" ? check && result.slice( -check.length ) === check :
+                                       operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 :
+                                       operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
+                                       false;
+                       };
+               },
+
+               "CHILD": function( type, what, argument, first, last ) {
+                       var simple = type.slice( 0, 3 ) !== "nth",
+                               forward = type.slice( -4 ) !== "last",
+                               ofType = what === "of-type";
+
+                       return first === 1 && last === 0 ?
+
+                               // Shortcut for :nth-*(n)
+                               function( elem ) {
+                                       return !!elem.parentNode;
+                               } :
+
+                               function( elem, context, xml ) {
+                                       var cache, uniqueCache, outerCache, node, nodeIndex, start,
+                                               dir = simple !== forward ? "nextSibling" : "previousSibling",
+                                               parent = elem.parentNode,
+                                               name = ofType && elem.nodeName.toLowerCase(),
+                                               useCache = !xml && !ofType,
+                                               diff = false;
+
+                                       if ( parent ) {
+
+                                               // :(first|last|only)-(child|of-type)
+                                               if ( simple ) {
+                                                       while ( dir ) {
+                                                               node = elem;
+                                                               while ( (node = node[ dir ]) ) {
+                                                                       if ( ofType ?
+                                                                               node.nodeName.toLowerCase() === name :
+                                                                               node.nodeType === 1 ) {
+
+                                                                               return false;
+                                                                       }
+                                                               }
+                                                               // Reverse direction for :only-* (if we haven't yet done so)
+                                                               start = dir = type === "only" && !start && "nextSibling";
+                                                       }
+                                                       return true;
+                                               }
+
+                                               start = [ forward ? parent.firstChild : parent.lastChild ];
+
+                                               // non-xml :nth-child(...) stores cache data on `parent`
+                                               if ( forward && useCache ) {
+
+                                                       // Seek `elem` from a previously-cached index
+
+                                                       // ...in a gzip-friendly way
+                                                       node = parent;
+                                                       outerCache = node[ expando ] || (node[ expando ] = {});
+
+                                                       // Support: IE <9 only
+                                                       // Defend against cloned attroperties (jQuery gh-1709)
+                                                       uniqueCache = outerCache[ node.uniqueID ] ||
+                                                               (outerCache[ node.uniqueID ] = {});
+
+                                                       cache = uniqueCache[ type ] || [];
+                                                       nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
+                                                       diff = nodeIndex && cache[ 2 ];
+                                                       node = nodeIndex && parent.childNodes[ nodeIndex ];
+
+                                                       while ( (node = ++nodeIndex && node && node[ dir ] ||
+
+                                                               // Fallback to seeking `elem` from the start
+                                                               (diff = nodeIndex = 0) || start.pop()) ) {
+
+                                                               // When found, cache indexes on `parent` and break
+                                                               if ( node.nodeType === 1 && ++diff && node === elem ) {
+                                                                       uniqueCache[ type ] = [ dirruns, nodeIndex, diff ];
+                                                                       break;
+                                                               }
+                                                       }
+
+                                               } else {
+                                                       // Use previously-cached element index if available
+                                                       if ( useCache ) {
+                                                               // ...in a gzip-friendly way
+                                                               node = elem;
+                                                               outerCache = node[ expando ] || (node[ expando ] = {});
+
+                                                               // Support: IE <9 only
+                                                               // Defend against cloned attroperties (jQuery gh-1709)
+                                                               uniqueCache = outerCache[ node.uniqueID ] ||
+                                                                       (outerCache[ node.uniqueID ] = {});
+
+                                                               cache = uniqueCache[ type ] || [];
+                                                               nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
+                                                               diff = nodeIndex;
+                                                       }
+
+                                                       // xml :nth-child(...)
+                                                       // or :nth-last-child(...) or :nth(-last)?-of-type(...)
+                                                       if ( diff === false ) {
+                                                               // Use the same loop as above to seek `elem` from the start
+                                                               while ( (node = ++nodeIndex && node && node[ dir ] ||
+                                                                       (diff = nodeIndex = 0) || start.pop()) ) {
+
+                                                                       if ( ( ofType ?
+                                                                               node.nodeName.toLowerCase() === name :
+                                                                               node.nodeType === 1 ) &&
+                                                                               ++diff ) {
+
+                                                                               // Cache the index of each encountered element
+                                                                               if ( useCache ) {
+                                                                                       outerCache = node[ expando ] || (node[ expando ] = {});
+
+                                                                                       // Support: IE <9 only
+                                                                                       // Defend against cloned attroperties (jQuery gh-1709)
+                                                                                       uniqueCache = outerCache[ node.uniqueID ] ||
+                                                                                               (outerCache[ node.uniqueID ] = {});
+
+                                                                                       uniqueCache[ type ] = [ dirruns, diff ];
+                                                                               }
+
+                                                                               if ( node === elem ) {
+                                                                                       break;
+                                                                               }
+                                                                       }
+                                                               }
+                                                       }
+                                               }
+
+                                               // Incorporate the offset, then check against cycle size
+                                               diff -= last;
+                                               return diff === first || ( diff % first === 0 && diff / first >= 0 );
+                                       }
+                               };
+               },
+
+               "PSEUDO": function( pseudo, argument ) {
+                       // pseudo-class names are case-insensitive
+                       // http://www.w3.org/TR/selectors/#pseudo-classes
+                       // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
+                       // Remember that setFilters inherits from pseudos
+                       var args,
+                               fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
+                                       Sizzle.error( "unsupported pseudo: " + pseudo );
+
+                       // The user may use createPseudo to indicate that
+                       // arguments are needed to create the filter function
+                       // just as Sizzle does
+                       if ( fn[ expando ] ) {
+                               return fn( argument );
+                       }
+
+                       // But maintain support for old signatures
+                       if ( fn.length > 1 ) {
+                               args = [ pseudo, pseudo, "", argument ];
+                               return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
+                                       markFunction(function( seed, matches ) {
+                                               var idx,
+                                                       matched = fn( seed, argument ),
+                                                       i = matched.length;
+                                               while ( i-- ) {
+                                                       idx = indexOf( seed, matched[i] );
+                                                       seed[ idx ] = !( matches[ idx ] = matched[i] );
+                                               }
+                                       }) :
+                                       function( elem ) {
+                                               return fn( elem, 0, args );
+                                       };
+                       }
+
+                       return fn;
+               }
+       },
+
+       pseudos: {
+               // Potentially complex pseudos
+               "not": markFunction(function( selector ) {
+                       // Trim the selector passed to compile
+                       // to avoid treating leading and trailing
+                       // spaces as combinators
+                       var input = [],
+                               results = [],
+                               matcher = compile( selector.replace( rtrim, "$1" ) );
+
+                       return matcher[ expando ] ?
+                               markFunction(function( seed, matches, context, xml ) {
+                                       var elem,
+                                               unmatched = matcher( seed, null, xml, [] ),
+                                               i = seed.length;
+
+                                       // Match elements unmatched by `matcher`
+                                       while ( i-- ) {
+                                               if ( (elem = unmatched[i]) ) {
+                                                       seed[i] = !(matches[i] = elem);
+                                               }
+                                       }
+                               }) :
+                               function( elem, context, xml ) {
+                                       input[0] = elem;
+                                       matcher( input, null, xml, results );
+                                       // Don't keep the element (issue #299)
+                                       input[0] = null;
+                                       return !results.pop();
+                               };
+               }),
+
+               "has": markFunction(function( selector ) {
+                       return function( elem ) {
+                               return Sizzle( selector, elem ).length > 0;
+                       };
+               }),
+
+               "contains": markFunction(function( text ) {
+                       text = text.replace( runescape, funescape );
+                       return function( elem ) {
+                               return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;
+                       };
+               }),
+
+               // "Whether an element is represented by a :lang() selector
+               // is based solely on the element's language value
+               // being equal to the identifier C,
+               // or beginning with the identifier C immediately followed by "-".
+               // The matching of C against the element's language value is performed case-insensitively.
+               // The identifier C does not have to be a valid language name."
+               // http://www.w3.org/TR/selectors/#lang-pseudo
+               "lang": markFunction( function( lang ) {
+                       // lang value must be a valid identifier
+                       if ( !ridentifier.test(lang || "") ) {
+                               Sizzle.error( "unsupported lang: " + lang );
+                       }
+                       lang = lang.replace( runescape, funescape ).toLowerCase();
+                       return function( elem ) {
+                               var elemLang;
+                               do {
+                                       if ( (elemLang = documentIsHTML ?
+                                               elem.lang :
+                                               elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) {
+
+                                               elemLang = elemLang.toLowerCase();
+                                               return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
+                                       }
+                               } while ( (elem = elem.parentNode) && elem.nodeType === 1 );
+                               return false;
+                       };
+               }),
+
+               // Miscellaneous
+               "target": function( elem ) {
+                       var hash = window.location && window.location.hash;
+                       return hash && hash.slice( 1 ) === elem.id;
+               },
+
+               "root": function( elem ) {
+                       return elem === docElem;
+               },
+
+               "focus": function( elem ) {
+                       return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
+               },
+
+               // Boolean properties
+               "enabled": createDisabledPseudo( false ),
+               "disabled": createDisabledPseudo( true ),
+
+               "checked": function( elem ) {
+                       // In CSS3, :checked should return both checked and selected elements
+                       // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
+                       var nodeName = elem.nodeName.toLowerCase();
+                       return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
+               },
+
+               "selected": function( elem ) {
+                       // Accessing this property makes selected-by-default
+                       // options in Safari work properly
+                       if ( elem.parentNode ) {
+                               elem.parentNode.selectedIndex;
+                       }
+
+                       return elem.selected === true;
+               },
+
+               // Contents
+               "empty": function( elem ) {
+                       // http://www.w3.org/TR/selectors/#empty-pseudo
+                       // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
+                       //   but not by others (comment: 8; processing instruction: 7; etc.)
+                       // nodeType < 6 works because attributes (2) do not appear as children
+                       for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
+                               if ( elem.nodeType < 6 ) {
+                                       return false;
+                               }
+                       }
+                       return true;
+               },
+
+               "parent": function( elem ) {
+                       return !Expr.pseudos["empty"]( elem );
+               },
+
+               // Element/input types
+               "header": function( elem ) {
+                       return rheader.test( elem.nodeName );
+               },
+
+               "input": function( elem ) {
+                       return rinputs.test( elem.nodeName );
+               },
+
+               "button": function( elem ) {
+                       var name = elem.nodeName.toLowerCase();
+                       return name === "input" && elem.type === "button" || name === "button";
+               },
+
+               "text": function( elem ) {
+                       var attr;
+                       return elem.nodeName.toLowerCase() === "input" &&
+                               elem.type === "text" &&
+
+                               // Support: IE<8
+                               // New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
+                               ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" );
+               },
+
+               // Position-in-collection
+               "first": createPositionalPseudo(function() {
+                       return [ 0 ];
+               }),
+
+               "last": createPositionalPseudo(function( matchIndexes, length ) {
+                       return [ length - 1 ];
+               }),
+
+               "eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
+                       return [ argument < 0 ? argument + length : argument ];
+               }),
+
+               "even": createPositionalPseudo(function( matchIndexes, length ) {
+                       var i = 0;
+                       for ( ; i < length; i += 2 ) {
+                               matchIndexes.push( i );
+                       }
+                       return matchIndexes;
+               }),
+
+               "odd": createPositionalPseudo(function( matchIndexes, length ) {
+                       var i = 1;
+                       for ( ; i < length; i += 2 ) {
+                               matchIndexes.push( i );
+                       }
+                       return matchIndexes;
+               }),
+
+               "lt": createPositionalPseudo(function( matchIndexes, length, argument ) {
+                       var i = argument < 0 ? argument + length : argument;
+                       for ( ; --i >= 0; ) {
+                               matchIndexes.push( i );
+                       }
+                       return matchIndexes;
+               }),
+
+               "gt": createPositionalPseudo(function( matchIndexes, length, argument ) {
+                       var i = argument < 0 ? argument + length : argument;
+                       for ( ; ++i < length; ) {
+                               matchIndexes.push( i );
+                       }
+                       return matchIndexes;
+               })
+       }
+};
+
+Expr.pseudos["nth"] = Expr.pseudos["eq"];
+
+// Add button/input type pseudos
+for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
+       Expr.pseudos[ i ] = createInputPseudo( i );
+}
+for ( i in { submit: true, reset: true } ) {
+       Expr.pseudos[ i ] = createButtonPseudo( i );
+}
+
+// Easy API for creating new setFilters
+function setFilters() {}
+setFilters.prototype = Expr.filters = Expr.pseudos;
+Expr.setFilters = new setFilters();
+
+tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
+       var matched, match, tokens, type,
+               soFar, groups, preFilters,
+               cached = tokenCache[ selector + " " ];
+
+       if ( cached ) {
+               return parseOnly ? 0 : cached.slice( 0 );
+       }
+
+       soFar = selector;
+       groups = [];
+       preFilters = Expr.preFilter;
+
+       while ( soFar ) {
+
+               // Comma and first run
+               if ( !matched || (match = rcomma.exec( soFar )) ) {
+                       if ( match ) {
+                               // Don't consume trailing commas as valid
+                               soFar = soFar.slice( match[0].length ) || soFar;
+                       }
+                       groups.push( (tokens = []) );
+               }
+
+               matched = false;
+
+               // Combinators
+               if ( (match = rcombinators.exec( soFar )) ) {
+                       matched = match.shift();
+                       tokens.push({
+                               value: matched,
+                               // Cast descendant combinators to space
+                               type: match[0].replace( rtrim, " " )
+                       });
+                       soFar = soFar.slice( matched.length );
+               }
+
+               // Filters
+               for ( type in Expr.filter ) {
+                       if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
+                               (match = preFilters[ type ]( match ))) ) {
+                               matched = match.shift();
+                               tokens.push({
+                                       value: matched,
+                                       type: type,
+                                       matches: match
+                               });
+                               soFar = soFar.slice( matched.length );
+                       }
+               }
+
+               if ( !matched ) {
+                       break;
+               }
+       }
+
+       // Return the length of the invalid excess
+       // if we're just parsing
+       // Otherwise, throw an error or return tokens
+       return parseOnly ?
+               soFar.length :
+               soFar ?
+                       Sizzle.error( selector ) :
+                       // Cache the tokens
+                       tokenCache( selector, groups ).slice( 0 );
+};
+
+function toSelector( tokens ) {
+       var i = 0,
+               len = tokens.length,
+               selector = "";
+       for ( ; i < len; i++ ) {
+               selector += tokens[i].value;
+       }
+       return selector;
+}
+
+function addCombinator( matcher, combinator, base ) {
+       var dir = combinator.dir,
+               skip = combinator.next,
+               key = skip || dir,
+               checkNonElements = base && key === "parentNode",
+               doneName = done++;
+
+       return combinator.first ?
+               // Check against closest ancestor/preceding element
+               function( elem, context, xml ) {
+                       while ( (elem = elem[ dir ]) ) {
+                               if ( elem.nodeType === 1 || checkNonElements ) {
+                                       return matcher( elem, context, xml );
+                               }
+                       }
+                       return false;
+               } :
+
+               // Check against all ancestor/preceding elements
+               function( elem, context, xml ) {
+                       var oldCache, uniqueCache, outerCache,
+                               newCache = [ dirruns, doneName ];
+
+                       // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching
+                       if ( xml ) {
+                               while ( (elem = elem[ dir ]) ) {
+                                       if ( elem.nodeType === 1 || checkNonElements ) {
+                                               if ( matcher( elem, context, xml ) ) {
+                                                       return true;
+                                               }
+                                       }
+                               }
+                       } else {
+                               while ( (elem = elem[ dir ]) ) {
+                                       if ( elem.nodeType === 1 || checkNonElements ) {
+                                               outerCache = elem[ expando ] || (elem[ expando ] = {});
+
+                                               // Support: IE <9 only
+                                               // Defend against cloned attroperties (jQuery gh-1709)
+                                               uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});
+
+                                               if ( skip && skip === elem.nodeName.toLowerCase() ) {
+                                                       elem = elem[ dir ] || elem;
+                                               } else if ( (oldCache = uniqueCache[ key ]) &&
+                                                       oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {
+
+                                                       // Assign to newCache so results back-propagate to previous elements
+                                                       return (newCache[ 2 ] = oldCache[ 2 ]);
+                                               } else {
+                                                       // Reuse newcache so results back-propagate to previous elements
+                                                       uniqueCache[ key ] = newCache;
+
+                                                       // A match means we're done; a fail means we have to keep checking
+                                                       if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {
+                                                               return true;
+                                                       }
+                                               }
+                                       }
+                               }
+                       }
+                       return false;
+               };
+}
+
+function elementMatcher( matchers ) {
+       return matchers.length > 1 ?
+               function( elem, context, xml ) {
+                       var i = matchers.length;
+                       while ( i-- ) {
+                               if ( !matchers[i]( elem, context, xml ) ) {
+                                       return false;
+                               }
+                       }
+                       return true;
+               } :
+               matchers[0];
+}
+
+function multipleContexts( selector, contexts, results ) {
+       var i = 0,
+               len = contexts.length;
+       for ( ; i < len; i++ ) {
+               Sizzle( selector, contexts[i], results );
+       }
+       return results;
+}
+
+function condense( unmatched, map, filter, context, xml ) {
+       var elem,
+               newUnmatched = [],
+               i = 0,
+               len = unmatched.length,
+               mapped = map != null;
+
+       for ( ; i < len; i++ ) {
+               if ( (elem = unmatched[i]) ) {
+                       if ( !filter || filter( elem, context, xml ) ) {
+                               newUnmatched.push( elem );
+                               if ( mapped ) {
+                                       map.push( i );
+                               }
+                       }
+               }
+       }
+
+       return newUnmatched;
+}
+
+function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
+       if ( postFilter && !postFilter[ expando ] ) {
+               postFilter = setMatcher( postFilter );
+       }
+       if ( postFinder && !postFinder[ expando ] ) {
+               postFinder = setMatcher( postFinder, postSelector );
+       }
+       return markFunction(function( seed, results, context, xml ) {
+               var temp, i, elem,
+                       preMap = [],
+                       postMap = [],
+                       preexisting = results.length,
+
+                       // Get initial elements from seed or context
+                       elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),
+
+                       // Prefilter to get matcher input, preserving a map for seed-results synchronization
+                       matcherIn = preFilter && ( seed || !selector ) ?
+                               condense( elems, preMap, preFilter, context, xml ) :
+                               elems,
+
+                       matcherOut = matcher ?
+                               // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
+                               postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
+
+                                       // ...intermediate processing is necessary
+                                       [] :
+
+                                       // ...otherwise use results directly
+                                       results :
+                               matcherIn;
+
+               // Find primary matches
+               if ( matcher ) {
+                       matcher( matcherIn, matcherOut, context, xml );
+               }
+
+               // Apply postFilter
+               if ( postFilter ) {
+                       temp = condense( matcherOut, postMap );
+                       postFilter( temp, [], context, xml );
+
+                       // Un-match failing elements by moving them back to matcherIn
+                       i = temp.length;
+                       while ( i-- ) {
+                               if ( (elem = temp[i]) ) {
+                                       matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
+                               }
+                       }
+               }
+
+               if ( seed ) {
+                       if ( postFinder || preFilter ) {
+                               if ( postFinder ) {
+                                       // Get the final matcherOut by condensing this intermediate into postFinder contexts
+                                       temp = [];
+                                       i = matcherOut.length;
+                                       while ( i-- ) {
+                                               if ( (elem = matcherOut[i]) ) {
+                                                       // Restore matcherIn since elem is not yet a final match
+                                                       temp.push( (matcherIn[i] = elem) );
+                                               }
+                                       }
+                                       postFinder( null, (matcherOut = []), temp, xml );
+                               }
+
+                               // Move matched elements from seed to results to keep them synchronized
+                               i = matcherOut.length;
+                               while ( i-- ) {
+                                       if ( (elem = matcherOut[i]) &&
+                                               (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {
+
+                                               seed[temp] = !(results[temp] = elem);
+                                       }
+                               }
+                       }
+
+               // Add elements to results, through postFinder if defined
+               } else {
+                       matcherOut = condense(
+                               matcherOut === results ?
+                                       matcherOut.splice( preexisting, matcherOut.length ) :
+                                       matcherOut
+                       );
+                       if ( postFinder ) {
+                               postFinder( null, results, matcherOut, xml );
+                       } else {
+                               push.apply( results, matcherOut );
+                       }
+               }
+       });
+}
+
+function matcherFromTokens( tokens ) {
+       var checkContext, matcher, j,
+               len = tokens.length,
+               leadingRelative = Expr.relative[ tokens[0].type ],
+               implicitRelative = leadingRelative || Expr.relative[" "],
+               i = leadingRelative ? 1 : 0,
+
+               // The foundational matcher ensures that elements are reachable from top-level context(s)
+               matchContext = addCombinator( function( elem ) {
+                       return elem === checkContext;
+               }, implicitRelative, true ),
+               matchAnyContext = addCombinator( function( elem ) {
+                       return indexOf( checkContext, elem ) > -1;
+               }, implicitRelative, true ),
+               matchers = [ function( elem, context, xml ) {
+                       var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
+                               (checkContext = context).nodeType ?
+                                       matchContext( elem, context, xml ) :
+                                       matchAnyContext( elem, context, xml ) );
+                       // Avoid hanging onto element (issue #299)
+                       checkContext = null;
+                       return ret;
+               } ];
+
+       for ( ; i < len; i++ ) {
+               if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
+                       matchers = [ addCombinator(elementMatcher( matchers ), matcher) ];
+               } else {
+                       matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );
+
+                       // Return special upon seeing a positional matcher
+                       if ( matcher[ expando ] ) {
+                               // Find the next relative operator (if any) for proper handling
+                               j = ++i;
+                               for ( ; j < len; j++ ) {
+                                       if ( Expr.relative[ tokens[j].type ] ) {
+                                               break;
+                                       }
+                               }
+                               return setMatcher(
+                                       i > 1 && elementMatcher( matchers ),
+                                       i > 1 && toSelector(
+                                               // If the preceding token was a descendant combinator, insert an implicit any-element `*`
+                                               tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" })
+                                       ).replace( rtrim, "$1" ),
+                                       matcher,
+                                       i < j && matcherFromTokens( tokens.slice( i, j ) ),
+                                       j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
+                                       j < len && toSelector( tokens )
+                               );
+                       }
+                       matchers.push( matcher );
+               }
+       }
+
+       return elementMatcher( matchers );
+}
+
+function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
+       var bySet = setMatchers.length > 0,
+               byElement = elementMatchers.length > 0,
+               superMatcher = function( seed, context, xml, results, outermost ) {
+                       var elem, j, matcher,
+                               matchedCount = 0,
+                               i = "0",
+                               unmatched = seed && [],
+                               setMatched = [],
+                               contextBackup = outermostContext,
+                               // We must always have either seed elements or outermost context
+                               elems = seed || byElement && Expr.find["TAG"]( "*", outermost ),
+                               // Use integer dirruns iff this is the outermost matcher
+                               dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),
+                               len = elems.length;
+
+                       if ( outermost ) {
+                               outermostContext = context === document || context || outermost;
+                       }
+
+                       // Add elements passing elementMatchers directly to results
+                       // Support: IE<9, Safari
+                       // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id
+                       for ( ; i !== len && (elem = elems[i]) != null; i++ ) {
+                               if ( byElement && elem ) {
+                                       j = 0;
+                                       if ( !context && elem.ownerDocument !== document ) {
+                                               setDocument( elem );
+                                               xml = !documentIsHTML;
+                                       }
+                                       while ( (matcher = elementMatchers[j++]) ) {
+                                               if ( matcher( elem, context || document, xml) ) {
+                                                       results.push( elem );
+                                                       break;
+                                               }
+                                       }
+                                       if ( outermost ) {
+                                               dirruns = dirrunsUnique;
+                                       }
+                               }
+
+                               // Track unmatched elements for set filters
+                               if ( bySet ) {
+                                       // They will have gone through all possible matchers
+                                       if ( (elem = !matcher && elem) ) {
+                                               matchedCount--;
+                                       }
+
+                                       // Lengthen the array for every element, matched or not
+                                       if ( seed ) {
+                                               unmatched.push( elem );
+                                       }
+                               }
+                       }
+
+                       // `i` is now the count of elements visited above, and adding it to `matchedCount`
+                       // makes the latter nonnegative.
+                       matchedCount += i;
+
+                       // Apply set filters to unmatched elements
+                       // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`
+                       // equals `i`), unless we didn't visit _any_ elements in the above loop because we have
+                       // no element matchers and no seed.
+                       // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that
+                       // case, which will result in a "00" `matchedCount` that differs from `i` but is also
+                       // numerically zero.
+                       if ( bySet && i !== matchedCount ) {
+                               j = 0;
+                               while ( (matcher = setMatchers[j++]) ) {
+                                       matcher( unmatched, setMatched, context, xml );
+                               }
+
+                               if ( seed ) {
+                                       // Reintegrate element matches to eliminate the need for sorting
+                                       if ( matchedCount > 0 ) {
+                                               while ( i-- ) {
+                                                       if ( !(unmatched[i] || setMatched[i]) ) {
+                                                               setMatched[i] = pop.call( results );
+                                                       }
+                                               }
+                                       }
+
+                                       // Discard index placeholder values to get only actual matches
+                                       setMatched = condense( setMatched );
+                               }
+
+                               // Add matches to results
+                               push.apply( results, setMatched );
+
+                               // Seedless set matches succeeding multiple successful matchers stipulate sorting
+                               if ( outermost && !seed && setMatched.length > 0 &&
+                                       ( matchedCount + setMatchers.length ) > 1 ) {
+
+                                       Sizzle.uniqueSort( results );
+                               }
+                       }
+
+                       // Override manipulation of globals by nested matchers
+                       if ( outermost ) {
+                               dirruns = dirrunsUnique;
+                               outermostContext = contextBackup;
+                       }
+
+                       return unmatched;
+               };
+
+       return bySet ?
+               markFunction( superMatcher ) :
+               superMatcher;
+}
+
+compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {
+       var i,
+               setMatchers = [],
+               elementMatchers = [],
+               cached = compilerCache[ selector + " " ];
+
+       if ( !cached ) {
+               // Generate a function of recursive functions that can be used to check each element
+               if ( !match ) {
+                       match = tokenize( selector );
+               }
+               i = match.length;
+               while ( i-- ) {
+                       cached = matcherFromTokens( match[i] );
+                       if ( cached[ expando ] ) {
+                               setMatchers.push( cached );
+                       } else {
+                               elementMatchers.push( cached );
+                       }
+               }
+
+               // Cache the compiled function
+               cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
+
+               // Save selector and tokenization
+               cached.selector = selector;
+       }
+       return cached;
+};
+
+/**
+ * A low-level selection function that works with Sizzle's compiled
+ *  selector functions
+ * @param {String|Function} selector A selector or a pre-compiled
+ *  selector function built with Sizzle.compile
+ * @param {Element} context
+ * @param {Array} [results]
+ * @param {Array} [seed] A set of elements to match against
+ */
+select = Sizzle.select = function( selector, context, results, seed ) {
+       var i, tokens, token, type, find,
+               compiled = typeof selector === "function" && selector,
+               match = !seed && tokenize( (selector = compiled.selector || selector) );
+
+       results = results || [];
+
+       // Try to minimize operations if there is only one selector in the list and no seed
+       // (the latter of which guarantees us context)
+       if ( match.length === 1 ) {
+
+               // Reduce context if the leading compound selector is an ID
+               tokens = match[0] = match[0].slice( 0 );
+               if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
+                               context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) {
+
+                       context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];
+                       if ( !context ) {
+                               return results;
+
+                       // Precompiled matchers will still verify ancestry, so step up a level
+                       } else if ( compiled ) {
+                               context = context.parentNode;
+                       }
+
+                       selector = selector.slice( tokens.shift().value.length );
+               }
+
+               // Fetch a seed set for right-to-left matching
+               i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length;
+               while ( i-- ) {
+                       token = tokens[i];
+
+                       // Abort if we hit a combinator
+                       if ( Expr.relative[ (type = token.type) ] ) {
+                               break;
+                       }
+                       if ( (find = Expr.find[ type ]) ) {
+                               // Search, expanding context for leading sibling combinators
+                               if ( (seed = find(
+                                       token.matches[0].replace( runescape, funescape ),
+                                       rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context
+                               )) ) {
+
+                                       // If seed is empty or no tokens remain, we can return early
+                                       tokens.splice( i, 1 );
+                                       selector = seed.length && toSelector( tokens );
+                                       if ( !selector ) {
+                                               push.apply( results, seed );
+                                               return results;
+                                       }
+
+                                       break;
+                               }
+                       }
+               }
+       }
+
+       // Compile and execute a filtering function if one is not provided
+       // Provide `match` to avoid retokenization if we modified the selector above
+       ( compiled || compile( selector, match ) )(
+               seed,
+               context,
+               !documentIsHTML,
+               results,
+               !context || rsibling.test( selector ) && testContext( context.parentNode ) || context
+       );
+       return results;
+};
+
+// One-time assignments
+
+// Sort stability
+support.sortStable = expando.split("").sort( sortOrder ).join("") === expando;
+
+// Support: Chrome 14-35+
+// Always assume duplicates if they aren't passed to the comparison function
+support.detectDuplicates = !!hasDuplicate;
+
+// Initialize against the default document
+setDocument();
+
+// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
+// Detached nodes confoundingly follow *each other*
+support.sortDetached = assert(function( el ) {
+       // Should return 1, but returns 4 (following)
+       return el.compareDocumentPosition( document.createElement("fieldset") ) & 1;
+});
+
+// Support: IE<8
+// Prevent attribute/property "interpolation"
+// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
+if ( !assert(function( el ) {
+       el.innerHTML = "<a href='#'></a>";
+       return el.firstChild.getAttribute("href") === "#" ;
+}) ) {
+       addHandle( "type|href|height|width", function( elem, name, isXML ) {
+               if ( !isXML ) {
+                       return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 );
+               }
+       });
+}
+
+// Support: IE<9
+// Use defaultValue in place of getAttribute("value")
+if ( !support.attributes || !assert(function( el ) {
+       el.innerHTML = "<input/>";
+       el.firstChild.setAttribute( "value", "" );
+       return el.firstChild.getAttribute( "value" ) === "";
+}) ) {
+       addHandle( "value", function( elem, name, isXML ) {
+               if ( !isXML && elem.nodeName.toLowerCase() === "input" ) {
+                       return elem.defaultValue;
+               }
+       });
+}
+
+// Support: IE<9
+// Use getAttributeNode to fetch booleans when getAttribute lies
+if ( !assert(function( el ) {
+       return el.getAttribute("disabled") == null;
+}) ) {
+       addHandle( booleans, function( elem, name, isXML ) {
+               var val;
+               if ( !isXML ) {
+                       return elem[ name ] === true ? name.toLowerCase() :
+                                       (val = elem.getAttributeNode( name )) && val.specified ?
+                                       val.value :
+                               null;
+               }
+       });
+}
+
+// EXPOSE
+var _sizzle = window.Sizzle;
+
+Sizzle.noConflict = function() {
+       if ( window.Sizzle === Sizzle ) {
+               window.Sizzle = _sizzle;
+       }
+
+       return Sizzle;
+};
+
+if ( typeof define === "function" && define.amd ) {
+       define(function() { return Sizzle; });
+// Sizzle requires that there be a global window in Common-JS like environments
+} else if ( typeof module !== "undefined" && module.exports ) {
+       module.exports = Sizzle;
+} else {
+       window.Sizzle = Sizzle;
+}
+// EXPOSE
+
+})( window );
diff --git a/js/jquery/external/sizzle/dist/sizzle.min.js b/js/jquery/external/sizzle/dist/sizzle.min.js
new file mode 100644 (file)
index 0000000..be03278
--- /dev/null
@@ -0,0 +1,3 @@
+/*! Sizzle v2.3.3 | (c) jQuery Foundation, Inc. | jquery.org/license */
+!function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=function(a,b){for(var c=0,d=a.length;c<d;c++)if(a[c]===b)return c;return-1},J="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",K="[\\x20\\t\\r\\n\\f]",L="(?:\\\\.|[\\w-]|[^\0-\\xa0])+",M="\\["+K+"*("+L+")(?:"+K+"*([*^$|!~]?=)"+K+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+L+"))|)"+K+"*\\]",N=":("+L+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+M+")*)|.*)\\)|)",O=new RegExp(K+"+","g"),P=new RegExp("^"+K+"+|((?:^|[^\\\\])(?:\\\\.)*)"+K+"+$","g"),Q=new RegExp("^"+K+"*,"+K+"*"),R=new RegExp("^"+K+"*([>+~]|"+K+")"+K+"*"),S=new RegExp("="+K+"*([^\\]'\"]*?)"+K+"*\\]","g"),T=new RegExp(N),U=new RegExp("^"+L+"$"),V={ID:new RegExp("^#("+L+")"),CLASS:new RegExp("^\\.("+L+")"),TAG:new RegExp("^("+L+"|[*])"),ATTR:new RegExp("^"+M),PSEUDO:new RegExp("^"+N),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+K+"*(even|odd|(([+-]|)(\\d*)n|)"+K+"*(?:([+-]|)"+K+"*(\\d+)|))"+K+"*\\)|)","i"),bool:new RegExp("^(?:"+J+")$","i"),needsContext:new RegExp("^"+K+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+K+"*((?:-\\d)?\\d*)"+K+"*\\)|)(?=[^-]|$)","i")},W=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Y=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,$=/[+~]/,_=new RegExp("\\\\([\\da-f]{1,6}"+K+"?|("+K+")|.)","ig"),aa=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:d<0?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ba=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ca=function(a,b){return b?"\0"===a?"\ufffd":a.slice(0,-1)+"\\"+a.charCodeAt(a.length-1).toString(16)+" ":"\\"+a},da=function(){m()},ea=ta(function(a){return a.disabled===!0&&("form"in a||"label"in a)},{dir:"parentNode",next:"legend"});try{G.apply(D=H.call(v.childNodes),v.childNodes),D[v.childNodes.length].nodeType}catch(fa){G={apply:D.length?function(a,b){F.apply(a,H.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s=b&&b.ownerDocument,w=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==w&&9!==w&&11!==w)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==w&&(l=Z.exec(a)))if(f=l[1]){if(9===w){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(s&&(j=s.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(l[2])return G.apply(d,b.getElementsByTagName(a)),d;if((f=l[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==w)s=b,r=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(ba,ca):b.setAttribute("id",k=u),o=g(a),h=o.length;while(h--)o[h]="#"+k+" "+sa(o[h]);r=o.join(","),s=$.test(a)&&qa(b.parentNode)||b}if(r)try{return G.apply(d,s.querySelectorAll(r)),d}catch(x){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(P,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("fieldset");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&a.sourceIndex-b.sourceIndex;if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return function(b){return"form"in b?b.parentNode&&b.disabled===!1?"label"in b?"label"in b.parentNode?b.parentNode.disabled===a:b.disabled===a:b.isDisabled===a||b.isDisabled!==!a&&ea(b)===a:b.disabled===a:"label"in b&&b.disabled===a}}function pa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function qa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return!!b&&"HTML"!==b.nodeName},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),v!==n&&(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Y.test(n.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){return a.getAttribute("id")===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}}):(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c,d,e,f=b.getElementById(a);if(f){if(c=f.getAttributeNode("id"),c&&c.value===a)return[f];e=b.getElementsByName(a),d=0;while(f=e[d++])if(c=f.getAttributeNode("id"),c&&c.value===a)return[f]}return[]}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){if("undefined"!=typeof b.getElementsByClassName&&p)return b.getElementsByClassName(a)},r=[],q=[],(c.qsa=Y.test(n.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="<a id='"+u+"'></a><select id='"+u+"-\r\\' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+K+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+K+"*(?:value|"+J+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){a.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+K+"*[*^$|!~]?="),2!==a.querySelectorAll(":enabled").length&&q.push(":enabled",":disabled"),o.appendChild(a).disabled=!0,2!==a.querySelectorAll(":disabled").length&&q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Y.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"*"),s.call(a,"[s!='']:x"),r.push("!=",N)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Y.test(o.compareDocumentPosition),t=b||Y.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?I(k,a)-I(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?I(k,a)-I(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?la(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(S,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.escape=function(a){return(a+"").replace(ba,ca)},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(_,aa),a[3]=(a[3]||a[4]||a[5]||"").replace(_,aa),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return V.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&T.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(_,aa).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+K+")"+a+"("+K+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:!b||(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(O," ")+" ").indexOf(c)>-1:"|="===b&&(e===c||e.slice(0,c.length+1)===c+"-"))}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(P,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(_,aa),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return U.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(_,aa).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:oa(!1),disabled:oa(!0),checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return X.test(a.nodeName)},input:function(a){return W.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:pa(function(){return[0]}),last:pa(function(a,b){return[b-1]}),eq:pa(function(a,b,c){return[c<0?c+b:c]}),even:pa(function(a,b){for(var c=0;c<b;c+=2)a.push(c);return a}),odd:pa(function(a,b){for(var c=1;c<b;c+=2)a.push(c);return a}),lt:pa(function(a,b,c){for(var d=c<0?c+b:c;--d>=0;)a.push(d);return a}),gt:pa(function(a,b,c){for(var d=c<0?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=ma(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=na(b);function ra(){}ra.prototype=d.filters=d.pseudos,d.setFilters=new ra,g=ga.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){c&&!(e=Q.exec(h))||(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=R.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(P," ")}),h=h.slice(c.length));for(g in d.filter)!(e=V[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?ga.error(a):z(a,i).slice(0)};function sa(a){for(var b=0,c=a.length,d="";b<c;b++)d+=a[b].value;return d}function ta(a,b,c){var d=b.dir,e=b.next,f=e||d,g=c&&"parentNode"===f,h=x++;return b.first?function(b,c,e){while(b=b[d])if(1===b.nodeType||g)return a(b,c,e);return!1}:function(b,c,i){var j,k,l,m=[w,h];if(i){while(b=b[d])if((1===b.nodeType||g)&&a(b,c,i))return!0}else while(b=b[d])if(1===b.nodeType||g)if(l=b[u]||(b[u]={}),k=l[b.uniqueID]||(l[b.uniqueID]={}),e&&e===b.nodeName.toLowerCase())b=b[d]||b;else{if((j=k[f])&&j[0]===w&&j[1]===h)return m[2]=j[2];if(k[f]=m,m[2]=a(b,c,i))return!0}return!1}}function ua(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function va(a,b,c){for(var d=0,e=b.length;d<e;d++)ga(a,b[d],c);return c}function wa(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;h<i;h++)(f=a[h])&&(c&&!c(f,d,e)||(g.push(f),j&&b.push(h)));return g}function xa(a,b,c,d,e,f){return d&&!d[u]&&(d=xa(d)),e&&!e[u]&&(e=xa(e,f)),ia(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||va(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:wa(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=wa(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?I(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=wa(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ya(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ta(function(a){return a===b},h,!0),l=ta(function(a){return I(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];i<f;i++)if(c=d.relative[a[i].type])m=[ta(ua(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;e<f;e++)if(d.relative[a[e].type])break;return xa(i>1&&ua(m),i>1&&sa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(P,"$1"),c,i<e&&ya(a.slice(i,e)),e<f&&ya(a=a.slice(e)),e<f&&sa(a))}m.push(c)}return ua(m)}function za(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=E.call(i));u=wa(u)}G.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&ga.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ia(f):f}h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=ya(b[c]),f[u]?d.push(f):e.push(f);f=A(a,za(e,d)),f.selector=a}return f},i=ga.select=function(a,b,c,e){var f,i,j,k,l,m="function"==typeof a&&a,n=!e&&g(a=m.selector||a);if(c=c||[],1===n.length){if(i=n[0]=n[0].slice(0),i.length>2&&"ID"===(j=i[0]).type&&9===b.nodeType&&p&&d.relative[i[1].type]){if(b=(d.find.ID(j.matches[0].replace(_,aa),b)||[])[0],!b)return c;m&&(b=b.parentNode),a=a.slice(i.shift().value.length)}f=V.needsContext.test(a)?0:i.length;while(f--){if(j=i[f],d.relative[k=j.type])break;if((l=d.find[k])&&(e=l(j.matches[0].replace(_,aa),$.test(i[0].type)&&qa(b.parentNode)||b))){if(i.splice(f,1),a=e.length&&sa(i),!a)return G.apply(c,e),c;break}}}return(m||h(a,n))(e,b,!p,c,!b||$.test(a)&&qa(b.parentNode)||b),c},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("fieldset"))}),ja(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){if(!c)return a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){if(!c&&"input"===a.nodeName.toLowerCase())return a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(J,function(a,b,c){var d;if(!c)return a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null});var Aa=a.Sizzle;ga.noConflict=function(){return a.Sizzle===ga&&(a.Sizzle=Aa),ga},"function"==typeof define&&define.amd?define(function(){return ga}):"undefined"!=typeof module&&module.exports?module.exports=ga:a.Sizzle=ga}(window);
+//# sourceMappingURL=sizzle.min.map
\ No newline at end of file
diff --git a/js/jquery/external/sizzle/dist/sizzle.min.map b/js/jquery/external/sizzle/dist/sizzle.min.map
new file mode 100644 (file)
index 0000000..031c1b7
--- /dev/null
@@ -0,0 +1 @@
+{"version":3,"sources":["sizzle.js"],"names":["window","i","support","Expr","getText","isXML","tokenize","compile","select","outermostContext","sortInput","hasDuplicate","setDocument","document","docElem","documentIsHTML","rbuggyQSA","rbuggyMatches","matches","contains","expando","Date","preferredDoc","dirruns","done","classCache","createCache","tokenCache","compilerCache","sortOrder","a","b","hasOwn","hasOwnProperty","arr","pop","push_native","push","slice","indexOf","list","elem","len","length","booleans","whitespace","identifier","attributes","pseudos","rwhitespace","RegExp","rtrim","rcomma","rcombinators","rattributeQuotes","rpseudo","ridentifier","matchExpr","ID","CLASS","TAG","ATTR","PSEUDO","CHILD","bool","needsContext","rinputs","rheader","rnative","rquickExpr","rsibling","runescape","funescape","_","escaped","escapedWhitespace","high","String","fromCharCode","rcssescape","fcssescape","ch","asCodePoint","charCodeAt","toString","unloadHandler","disabledAncestor","addCombinator","disabled","dir","next","apply","call","childNodes","nodeType","e","target","els","j","Sizzle","selector","context","results","seed","m","nid","match","groups","newSelector","newContext","ownerDocument","exec","getElementById","id","getElementsByTagName","getElementsByClassName","qsa","test","nodeName","toLowerCase","getAttribute","replace","setAttribute","toSelector","join","testContext","parentNode","querySelectorAll","qsaError","removeAttribute","keys","cache","key","value","cacheLength","shift","markFunction","fn","assert","el","createElement","removeChild","addHandle","attrs","handler","split","attrHandle","siblingCheck","cur","diff","sourceIndex","nextSibling","createInputPseudo","type","name","createButtonPseudo","createDisabledPseudo","isDisabled","createPositionalPseudo","argument","matchIndexes","documentElement","node","hasCompare","subWindow","doc","defaultView","top","addEventListener","attachEvent","className","appendChild","createComment","getById","getElementsByName","filter","attrId","find","getAttributeNode","elems","tag","tmp","innerHTML","input","matchesSelector","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","msMatchesSelector","disconnectedMatch","compareDocumentPosition","adown","bup","compare","sortDetached","aup","ap","bp","unshift","expr","elements","ret","attr","val","undefined","specified","escape","sel","error","msg","Error","uniqueSort","duplicates","detectDuplicates","sortStable","sort","splice","textContent","firstChild","nodeValue","selectors","createPseudo","relative",">","first"," ","+","~","preFilter","excess","unquoted","nodeNameSelector","pattern","operator","check","result","what","last","simple","forward","ofType","xml","uniqueCache","outerCache","nodeIndex","start","parent","useCache","lastChild","uniqueID","pseudo","args","setFilters","idx","matched","not","matcher","unmatched","has","text","innerText","lang","elemLang","hash","location","root","focus","activeElement","hasFocus","href","tabIndex","enabled","checked","selected","selectedIndex","empty","header","button","eq","even","odd","lt","gt","radio","checkbox","file","password","image","submit","reset","prototype","filters","parseOnly","tokens","soFar","preFilters","cached","combinator","base","skip","checkNonElements","doneName","oldCache","newCache","elementMatcher","matchers","multipleContexts","contexts","condense","map","newUnmatched","mapped","setMatcher","postFilter","postFinder","postSelector","temp","preMap","postMap","preexisting","matcherIn","matcherOut","matcherFromTokens","checkContext","leadingRelative","implicitRelative","matchContext","matchAnyContext","concat","matcherFromGroupMatchers","elementMatchers","setMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","Math","random","token","compiled","defaultValue","_sizzle","noConflict","define","amd","module","exports"],"mappings":"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","file":"sizzle.min.js"}
\ No newline at end of file
diff --git a/js/jquery/src/ajax.js b/js/jquery/src/ajax.js
new file mode 100644 (file)
index 0000000..36f707d
--- /dev/null
@@ -0,0 +1,855 @@
+define( [
+       "./core",
+       "./var/document",
+       "./var/rnothtmlwhite",
+       "./ajax/var/location",
+       "./ajax/var/nonce",
+       "./ajax/var/rquery",
+
+       "./core/init",
+       "./ajax/parseXML",
+       "./event/trigger",
+       "./deferred",
+       "./serialize" // jQuery.param
+], function( jQuery, document, rnothtmlwhite, location, nonce, rquery ) {
+
+"use strict";
+
+var
+       r20 = /%20/g,
+       rhash = /#.*$/,
+       rantiCache = /([?&])_=[^&]*/,
+       rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg,
+
+       // #7653, #8125, #8152: local protocol detection
+       rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
+       rnoContent = /^(?:GET|HEAD)$/,
+       rprotocol = /^\/\//,
+
+       /* Prefilters
+        * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
+        * 2) These are called:
+        *    - BEFORE asking for a transport
+        *    - AFTER param serialization (s.data is a string if s.processData is true)
+        * 3) key is the dataType
+        * 4) the catchall symbol "*" can be used
+        * 5) execution will start with transport dataType and THEN continue down to "*" if needed
+        */
+       prefilters = {},
+
+       /* Transports bindings
+        * 1) key is the dataType
+        * 2) the catchall symbol "*" can be used
+        * 3) selection will start with transport dataType and THEN go to "*" if needed
+        */
+       transports = {},
+
+       // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
+       allTypes = "*/".concat( "*" ),
+
+       // Anchor tag for parsing the document origin
+       originAnchor = document.createElement( "a" );
+       originAnchor.href = location.href;
+
+// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
+function addToPrefiltersOrTransports( structure ) {
+
+       // dataTypeExpression is optional and defaults to "*"
+       return function( dataTypeExpression, func ) {
+
+               if ( typeof dataTypeExpression !== "string" ) {
+                       func = dataTypeExpression;
+                       dataTypeExpression = "*";
+               }
+
+               var dataType,
+                       i = 0,
+                       dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];
+
+               if ( jQuery.isFunction( func ) ) {
+
+                       // For each dataType in the dataTypeExpression
+                       while ( ( dataType = dataTypes[ i++ ] ) ) {
+
+                               // Prepend if requested
+                               if ( dataType[ 0 ] === "+" ) {
+                                       dataType = dataType.slice( 1 ) || "*";
+                                       ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );
+
+                               // Otherwise append
+                               } else {
+                                       ( structure[ dataType ] = structure[ dataType ] || [] ).push( func );
+                               }
+                       }
+               }
+       };
+}
+
+// Base inspection function for prefilters and transports
+function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
+
+       var inspected = {},
+               seekingTransport = ( structure === transports );
+
+       function inspect( dataType ) {
+               var selected;
+               inspected[ dataType ] = true;
+               jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
+                       var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
+                       if ( typeof dataTypeOrTransport === "string" &&
+                               !seekingTransport && !inspected[ dataTypeOrTransport ] ) {
+
+                               options.dataTypes.unshift( dataTypeOrTransport );
+                               inspect( dataTypeOrTransport );
+                               return false;
+                       } else if ( seekingTransport ) {
+                               return !( selected = dataTypeOrTransport );
+                       }
+               } );
+               return selected;
+       }
+
+       return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
+}
+
+// A special extend for ajax options
+// that takes "flat" options (not to be deep extended)
+// Fixes #9887
+function ajaxExtend( target, src ) {
+       var key, deep,
+               flatOptions = jQuery.ajaxSettings.flatOptions || {};
+
+       for ( key in src ) {
+               if ( src[ key ] !== undefined ) {
+                       ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];
+               }
+       }
+       if ( deep ) {
+               jQuery.extend( true, target, deep );
+       }
+
+       return target;
+}
+
+/* Handles responses to an ajax request:
+ * - finds the right dataType (mediates between content-type and expected dataType)
+ * - returns the corresponding response
+ */
+function ajaxHandleResponses( s, jqXHR, responses ) {
+
+       var ct, type, finalDataType, firstDataType,
+               contents = s.contents,
+               dataTypes = s.dataTypes;
+
+       // Remove auto dataType and get content-type in the process
+       while ( dataTypes[ 0 ] === "*" ) {
+               dataTypes.shift();
+               if ( ct === undefined ) {
+                       ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" );
+               }
+       }
+
+       // Check if we're dealing with a known content-type
+       if ( ct ) {
+               for ( type in contents ) {
+                       if ( contents[ type ] && contents[ type ].test( ct ) ) {
+                               dataTypes.unshift( type );
+                               break;
+                       }
+               }
+       }
+
+       // Check to see if we have a response for the expected dataType
+       if ( dataTypes[ 0 ] in responses ) {
+               finalDataType = dataTypes[ 0 ];
+       } else {
+
+               // Try convertible dataTypes
+               for ( type in responses ) {
+                       if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) {
+                               finalDataType = type;
+                               break;
+                       }
+                       if ( !firstDataType ) {
+                               firstDataType = type;
+                       }
+               }
+
+               // Or just use first one
+               finalDataType = finalDataType || firstDataType;
+       }
+
+       // If we found a dataType
+       // We add the dataType to the list if needed
+       // and return the corresponding response
+       if ( finalDataType ) {
+               if ( finalDataType !== dataTypes[ 0 ] ) {
+                       dataTypes.unshift( finalDataType );
+               }
+               return responses[ finalDataType ];
+       }
+}
+
+/* Chain conversions given the request and the original response
+ * Also sets the responseXXX fields on the jqXHR instance
+ */
+function ajaxConvert( s, response, jqXHR, isSuccess ) {
+       var conv2, current, conv, tmp, prev,
+               converters = {},
+
+               // Work with a copy of dataTypes in case we need to modify it for conversion
+               dataTypes = s.dataTypes.slice();
+
+       // Create converters map with lowercased keys
+       if ( dataTypes[ 1 ] ) {
+               for ( conv in s.converters ) {
+                       converters[ conv.toLowerCase() ] = s.converters[ conv ];
+               }
+       }
+
+       current = dataTypes.shift();
+
+       // Convert to each sequential dataType
+       while ( current ) {
+
+               if ( s.responseFields[ current ] ) {
+                       jqXHR[ s.responseFields[ current ] ] = response;
+               }
+
+               // Apply the dataFilter if provided
+               if ( !prev && isSuccess && s.dataFilter ) {
+                       response = s.dataFilter( response, s.dataType );
+               }
+
+               prev = current;
+               current = dataTypes.shift();
+
+               if ( current ) {
+
+                       // There's only work to do if current dataType is non-auto
+                       if ( current === "*" ) {
+
+                               current = prev;
+
+                       // Convert response if prev dataType is non-auto and differs from current
+                       } else if ( prev !== "*" && prev !== current ) {
+
+                               // Seek a direct converter
+                               conv = converters[ prev + " " + current ] || converters[ "* " + current ];
+
+                               // If none found, seek a pair
+                               if ( !conv ) {
+                                       for ( conv2 in converters ) {
+
+                                               // If conv2 outputs current
+                                               tmp = conv2.split( " " );
+                                               if ( tmp[ 1 ] === current ) {
+
+                                                       // If prev can be converted to accepted input
+                                                       conv = converters[ prev + " " + tmp[ 0 ] ] ||
+                                                               converters[ "* " + tmp[ 0 ] ];
+                                                       if ( conv ) {
+
+                                                               // Condense equivalence converters
+                                                               if ( conv === true ) {
+                                                                       conv = converters[ conv2 ];
+
+                                                               // Otherwise, insert the intermediate dataType
+                                                               } else if ( converters[ conv2 ] !== true ) {
+                                                                       current = tmp[ 0 ];
+                                                                       dataTypes.unshift( tmp[ 1 ] );
+                                                               }
+                                                               break;
+                                                       }
+                                               }
+                                       }
+                               }
+
+                               // Apply converter (if not an equivalence)
+                               if ( conv !== true ) {
+
+                                       // Unless errors are allowed to bubble, catch and return them
+                                       if ( conv && s.throws ) {
+                                               response = conv( response );
+                                       } else {
+                                               try {
+                                                       response = conv( response );
+                                               } catch ( e ) {
+                                                       return {
+                                                               state: "parsererror",
+                                                               error: conv ? e : "No conversion from " + prev + " to " + current
+                                                       };
+                                               }
+                                       }
+                               }
+                       }
+               }
+       }
+
+       return { state: "success", data: response };
+}
+
+jQuery.extend( {
+
+       // Counter for holding the number of active queries
+       active: 0,
+
+       // Last-Modified header cache for next request
+       lastModified: {},
+       etag: {},
+
+       ajaxSettings: {
+               url: location.href,
+               type: "GET",
+               isLocal: rlocalProtocol.test( location.protocol ),
+               global: true,
+               processData: true,
+               async: true,
+               contentType: "application/x-www-form-urlencoded; charset=UTF-8",
+
+               /*
+               timeout: 0,
+               data: null,
+               dataType: null,
+               username: null,
+               password: null,
+               cache: null,
+               throws: false,
+               traditional: false,
+               headers: {},
+               */
+
+               accepts: {
+                       "*": allTypes,
+                       text: "text/plain",
+                       html: "text/html",
+                       xml: "application/xml, text/xml",
+                       json: "application/json, text/javascript"
+               },
+
+               contents: {
+                       xml: /\bxml\b/,
+                       html: /\bhtml/,
+                       json: /\bjson\b/
+               },
+
+               responseFields: {
+                       xml: "responseXML",
+                       text: "responseText",
+                       json: "responseJSON"
+               },
+
+               // Data converters
+               // Keys separate source (or catchall "*") and destination types with a single space
+               converters: {
+
+                       // Convert anything to text
+                       "* text": String,
+
+                       // Text to html (true = no transformation)
+                       "text html": true,
+
+                       // Evaluate text as a json expression
+                       "text json": JSON.parse,
+
+                       // Parse text as xml
+                       "text xml": jQuery.parseXML
+               },
+
+               // For options that shouldn't be deep extended:
+               // you can add your own custom options here if
+               // and when you create one that shouldn't be
+               // deep extended (see ajaxExtend)
+               flatOptions: {
+                       url: true,
+                       context: true
+               }
+       },
+
+       // Creates a full fledged settings object into target
+       // with both ajaxSettings and settings fields.
+       // If target is omitted, writes into ajaxSettings.
+       ajaxSetup: function( target, settings ) {
+               return settings ?
+
+                       // Building a settings object
+                       ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
+
+                       // Extending ajaxSettings
+                       ajaxExtend( jQuery.ajaxSettings, target );
+       },
+
+       ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
+       ajaxTransport: addToPrefiltersOrTransports( transports ),
+
+       // Main method
+       ajax: function( url, options ) {
+
+               // If url is an object, simulate pre-1.5 signature
+               if ( typeof url === "object" ) {
+                       options = url;
+                       url = undefined;
+               }
+
+               // Force options to be an object
+               options = options || {};
+
+               var transport,
+
+                       // URL without anti-cache param
+                       cacheURL,
+
+                       // Response headers
+                       responseHeadersString,
+                       responseHeaders,
+
+                       // timeout handle
+                       timeoutTimer,
+
+                       // Url cleanup var
+                       urlAnchor,
+
+                       // Request state (becomes false upon send and true upon completion)
+                       completed,
+
+                       // To know if global events are to be dispatched
+                       fireGlobals,
+
+                       // Loop variable
+                       i,
+
+                       // uncached part of the url
+                       uncached,
+
+                       // Create the final options object
+                       s = jQuery.ajaxSetup( {}, options ),
+
+                       // Callbacks context
+                       callbackContext = s.context || s,
+
+                       // Context for global events is callbackContext if it is a DOM node or jQuery collection
+                       globalEventContext = s.context &&
+                               ( callbackContext.nodeType || callbackContext.jquery ) ?
+                                       jQuery( callbackContext ) :
+                                       jQuery.event,
+
+                       // Deferreds
+                       deferred = jQuery.Deferred(),
+                       completeDeferred = jQuery.Callbacks( "once memory" ),
+
+                       // Status-dependent callbacks
+                       statusCode = s.statusCode || {},
+
+                       // Headers (they are sent all at once)
+                       requestHeaders = {},
+                       requestHeadersNames = {},
+
+                       // Default abort message
+                       strAbort = "canceled",
+
+                       // Fake xhr
+                       jqXHR = {
+                               readyState: 0,
+
+                               // Builds headers hashtable if needed
+                               getResponseHeader: function( key ) {
+                                       var match;
+                                       if ( completed ) {
+                                               if ( !responseHeaders ) {
+                                                       responseHeaders = {};
+                                                       while ( ( match = rheaders.exec( responseHeadersString ) ) ) {
+                                                               responseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ];
+                                                       }
+                                               }
+                                               match = responseHeaders[ key.toLowerCase() ];
+                                       }
+                                       return match == null ? null : match;
+                               },
+
+                               // Raw string
+                               getAllResponseHeaders: function() {
+                                       return completed ? responseHeadersString : null;
+                               },
+
+                               // Caches the header
+                               setRequestHeader: function( name, value ) {
+                                       if ( completed == null ) {
+                                               name = requestHeadersNames[ name.toLowerCase() ] =
+                                                       requestHeadersNames[ name.toLowerCase() ] || name;
+                                               requestHeaders[ name ] = value;
+                                       }
+                                       return this;
+                               },
+
+                               // Overrides response content-type header
+                               overrideMimeType: function( type ) {
+                                       if ( completed == null ) {
+                                               s.mimeType = type;
+                                       }
+                                       return this;
+                               },
+
+                               // Status-dependent callbacks
+                               statusCode: function( map ) {
+                                       var code;
+                                       if ( map ) {
+                                               if ( completed ) {
+
+                                                       // Execute the appropriate callbacks
+                                                       jqXHR.always( map[ jqXHR.status ] );
+                                               } else {
+
+                                                       // Lazy-add the new callbacks in a way that preserves old ones
+                                                       for ( code in map ) {
+                                                               statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
+                                                       }
+                                               }
+                                       }
+                                       return this;
+                               },
+
+                               // Cancel the request
+                               abort: function( statusText ) {
+                                       var finalText = statusText || strAbort;
+                                       if ( transport ) {
+                                               transport.abort( finalText );
+                                       }
+                                       done( 0, finalText );
+                                       return this;
+                               }
+                       };
+
+               // Attach deferreds
+               deferred.promise( jqXHR );
+
+               // Add protocol if not provided (prefilters might expect it)
+               // Handle falsy url in the settings object (#10093: consistency with old signature)
+               // We also use the url parameter if available
+               s.url = ( ( url || s.url || location.href ) + "" )
+                       .replace( rprotocol, location.protocol + "//" );
+
+               // Alias method option to type as per ticket #12004
+               s.type = options.method || options.type || s.method || s.type;
+
+               // Extract dataTypes list
+               s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ];
+
+               // A cross-domain request is in order when the origin doesn't match the current origin.
+               if ( s.crossDomain == null ) {
+                       urlAnchor = document.createElement( "a" );
+
+                       // Support: IE <=8 - 11, Edge 12 - 13
+                       // IE throws exception on accessing the href property if url is malformed,
+                       // e.g. http://example.com:80x/
+                       try {
+                               urlAnchor.href = s.url;
+
+                               // Support: IE <=8 - 11 only
+                               // Anchor's host property isn't correctly set when s.url is relative
+                               urlAnchor.href = urlAnchor.href;
+                               s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !==
+                                       urlAnchor.protocol + "//" + urlAnchor.host;
+                       } catch ( e ) {
+
+                               // If there is an error parsing the URL, assume it is crossDomain,
+                               // it can be rejected by the transport if it is invalid
+                               s.crossDomain = true;
+                       }
+               }
+
+               // Convert data if not already a string
+               if ( s.data && s.processData && typeof s.data !== "string" ) {
+                       s.data = jQuery.param( s.data, s.traditional );
+               }
+
+               // Apply prefilters
+               inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
+
+               // If request was aborted inside a prefilter, stop there
+               if ( completed ) {
+                       return jqXHR;
+               }
+
+               // We can fire global events as of now if asked to
+               // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)
+               fireGlobals = jQuery.event && s.global;
+
+               // Watch for a new set of requests
+               if ( fireGlobals && jQuery.active++ === 0 ) {
+                       jQuery.event.trigger( "ajaxStart" );
+               }
+
+               // Uppercase the type
+               s.type = s.type.toUpperCase();
+
+               // Determine if request has content
+               s.hasContent = !rnoContent.test( s.type );
+
+               // Save the URL in case we're toying with the If-Modified-Since
+               // and/or If-None-Match header later on
+               // Remove hash to simplify url manipulation
+               cacheURL = s.url.replace( rhash, "" );
+
+               // More options handling for requests with no content
+               if ( !s.hasContent ) {
+
+                       // Remember the hash so we can put it back
+                       uncached = s.url.slice( cacheURL.length );
+
+                       // If data is available, append data to url
+                       if ( s.data ) {
+                               cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data;
+
+                               // #9682: remove data so that it's not used in an eventual retry
+                               delete s.data;
+                       }
+
+                       // Add or update anti-cache param if needed
+                       if ( s.cache === false ) {
+                               cacheURL = cacheURL.replace( rantiCache, "$1" );
+                               uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce++ ) + uncached;
+                       }
+
+                       // Put hash and anti-cache on the URL that will be requested (gh-1732)
+                       s.url = cacheURL + uncached;
+
+               // Change '%20' to '+' if this is encoded form body content (gh-2658)
+               } else if ( s.data && s.processData &&
+                       ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) {
+                       s.data = s.data.replace( r20, "+" );
+               }
+
+               // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+               if ( s.ifModified ) {
+                       if ( jQuery.lastModified[ cacheURL ] ) {
+                               jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
+                       }
+                       if ( jQuery.etag[ cacheURL ] ) {
+                               jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
+                       }
+               }
+
+               // Set the correct header, if data is being sent
+               if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
+                       jqXHR.setRequestHeader( "Content-Type", s.contentType );
+               }
+
+               // Set the Accepts header for the server, depending on the dataType
+               jqXHR.setRequestHeader(
+                       "Accept",
+                       s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?
+                               s.accepts[ s.dataTypes[ 0 ] ] +
+                                       ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
+                               s.accepts[ "*" ]
+               );
+
+               // Check for headers option
+               for ( i in s.headers ) {
+                       jqXHR.setRequestHeader( i, s.headers[ i ] );
+               }
+
+               // Allow custom headers/mimetypes and early abort
+               if ( s.beforeSend &&
+                       ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {
+
+                       // Abort if not done already and return
+                       return jqXHR.abort();
+               }
+
+               // Aborting is no longer a cancellation
+               strAbort = "abort";
+
+               // Install callbacks on deferreds
+               completeDeferred.add( s.complete );
+               jqXHR.done( s.success );
+               jqXHR.fail( s.error );
+
+               // Get transport
+               transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
+
+               // If no transport, we auto-abort
+               if ( !transport ) {
+                       done( -1, "No Transport" );
+               } else {
+                       jqXHR.readyState = 1;
+
+                       // Send global event
+                       if ( fireGlobals ) {
+                               globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
+                       }
+
+                       // If request was aborted inside ajaxSend, stop there
+                       if ( completed ) {
+                               return jqXHR;
+                       }
+
+                       // Timeout
+                       if ( s.async && s.timeout > 0 ) {
+                               timeoutTimer = window.setTimeout( function() {
+                                       jqXHR.abort( "timeout" );
+                               }, s.timeout );
+                       }
+
+                       try {
+                               completed = false;
+                               transport.send( requestHeaders, done );
+                       } catch ( e ) {
+
+                               // Rethrow post-completion exceptions
+                               if ( completed ) {
+                                       throw e;
+                               }
+
+                               // Propagate others as results
+                               done( -1, e );
+                       }
+               }
+
+               // Callback for when everything is done
+               function done( status, nativeStatusText, responses, headers ) {
+                       var isSuccess, success, error, response, modified,
+                               statusText = nativeStatusText;
+
+                       // Ignore repeat invocations
+                       if ( completed ) {
+                               return;
+                       }
+
+                       completed = true;
+
+                       // Clear timeout if it exists
+                       if ( timeoutTimer ) {
+                               window.clearTimeout( timeoutTimer );
+                       }
+
+                       // Dereference transport for early garbage collection
+                       // (no matter how long the jqXHR object will be used)
+                       transport = undefined;
+
+                       // Cache response headers
+                       responseHeadersString = headers || "";
+
+                       // Set readyState
+                       jqXHR.readyState = status > 0 ? 4 : 0;
+
+                       // Determine if successful
+                       isSuccess = status >= 200 && status < 300 || status === 304;
+
+                       // Get response data
+                       if ( responses ) {
+                               response = ajaxHandleResponses( s, jqXHR, responses );
+                       }
+
+                       // Convert no matter what (that way responseXXX fields are always set)
+                       response = ajaxConvert( s, response, jqXHR, isSuccess );
+
+                       // If successful, handle type chaining
+                       if ( isSuccess ) {
+
+                               // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+                               if ( s.ifModified ) {
+                                       modified = jqXHR.getResponseHeader( "Last-Modified" );
+                                       if ( modified ) {
+                                               jQuery.lastModified[ cacheURL ] = modified;
+                                       }
+                                       modified = jqXHR.getResponseHeader( "etag" );
+                                       if ( modified ) {
+                                               jQuery.etag[ cacheURL ] = modified;
+                                       }
+                               }
+
+                               // if no content
+                               if ( status === 204 || s.type === "HEAD" ) {
+                                       statusText = "nocontent";
+
+                               // if not modified
+                               } else if ( status === 304 ) {
+                                       statusText = "notmodified";
+
+                               // If we have data, let's convert it
+                               } else {
+                                       statusText = response.state;
+                                       success = response.data;
+                                       error = response.error;
+                                       isSuccess = !error;
+                               }
+                       } else {
+
+                               // Extract error from statusText and normalize for non-aborts
+                               error = statusText;
+                               if ( status || !statusText ) {
+                                       statusText = "error";
+                                       if ( status < 0 ) {
+                                               status = 0;
+                                       }
+                               }
+                       }
+
+                       // Set data for the fake xhr object
+                       jqXHR.status = status;
+                       jqXHR.statusText = ( nativeStatusText || statusText ) + "";
+
+                       // Success/Error
+                       if ( isSuccess ) {
+                               deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
+                       } else {
+                               deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
+                       }
+
+                       // Status-dependent callbacks
+                       jqXHR.statusCode( statusCode );
+                       statusCode = undefined;
+
+                       if ( fireGlobals ) {
+                               globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
+                                       [ jqXHR, s, isSuccess ? success : error ] );
+                       }
+
+                       // Complete
+                       completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
+
+                       if ( fireGlobals ) {
+                               globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
+
+                               // Handle the global AJAX counter
+                               if ( !( --jQuery.active ) ) {
+                                       jQuery.event.trigger( "ajaxStop" );
+                               }
+                       }
+               }
+
+               return jqXHR;
+       },
+
+       getJSON: function( url, data, callback ) {
+               return jQuery.get( url, data, callback, "json" );
+       },
+
+       getScript: function( url, callback ) {
+               return jQuery.get( url, undefined, callback, "script" );
+       }
+} );
+
+jQuery.each( [ "get", "post" ], function( i, method ) {
+       jQuery[ method ] = function( url, data, callback, type ) {
+
+               // Shift arguments if data argument was omitted
+               if ( jQuery.isFunction( data ) ) {
+                       type = type || callback;
+                       callback = data;
+                       data = undefined;
+               }
+
+               // The url can be an options object (which then must have .url)
+               return jQuery.ajax( jQuery.extend( {
+                       url: url,
+                       type: method,
+                       dataType: type,
+                       data: data,
+                       success: callback
+               }, jQuery.isPlainObject( url ) && url ) );
+       };
+} );
+
+return jQuery;
+} );
diff --git a/js/jquery/src/ajax/jsonp.js b/js/jquery/src/ajax/jsonp.js
new file mode 100644 (file)
index 0000000..8c406e7
--- /dev/null
@@ -0,0 +1,102 @@
+define( [
+       "../core",
+       "./var/nonce",
+       "./var/rquery",
+       "../ajax"
+], function( jQuery, nonce, rquery ) {
+
+"use strict";
+
+var oldCallbacks = [],
+       rjsonp = /(=)\?(?=&|$)|\?\?/;
+
+// Default jsonp settings
+jQuery.ajaxSetup( {
+       jsonp: "callback",
+       jsonpCallback: function() {
+               var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) );
+               this[ callback ] = true;
+               return callback;
+       }
+} );
+
+// Detect, normalize options and install callbacks for jsonp requests
+jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
+
+       var callbackName, overwritten, responseContainer,
+               jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
+                       "url" :
+                       typeof s.data === "string" &&
+                               ( s.contentType || "" )
+                                       .indexOf( "application/x-www-form-urlencoded" ) === 0 &&
+                               rjsonp.test( s.data ) && "data"
+               );
+
+       // Handle iff the expected data type is "jsonp" or we have a parameter to set
+       if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
+
+               // Get callback name, remembering preexisting value associated with it
+               callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?
+                       s.jsonpCallback() :
+                       s.jsonpCallback;
+
+               // Insert callback into url or form data
+               if ( jsonProp ) {
+                       s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
+               } else if ( s.jsonp !== false ) {
+                       s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
+               }
+
+               // Use data converter to retrieve json after script execution
+               s.converters[ "script json" ] = function() {
+                       if ( !responseContainer ) {
+                               jQuery.error( callbackName + " was not called" );
+                       }
+                       return responseContainer[ 0 ];
+               };
+
+               // Force json dataType
+               s.dataTypes[ 0 ] = "json";
+
+               // Install callback
+               overwritten = window[ callbackName ];
+               window[ callbackName ] = function() {
+                       responseContainer = arguments;
+               };
+
+               // Clean-up function (fires after converters)
+               jqXHR.always( function() {
+
+                       // If previous value didn't exist - remove it
+                       if ( overwritten === undefined ) {
+                               jQuery( window ).removeProp( callbackName );
+
+                       // Otherwise restore preexisting value
+                       } else {
+                               window[ callbackName ] = overwritten;
+                       }
+
+                       // Save back as free
+                       if ( s[ callbackName ] ) {
+
+                               // Make sure that re-using the options doesn't screw things around
+                               s.jsonpCallback = originalSettings.jsonpCallback;
+
+                               // Save the callback name for future use
+                               oldCallbacks.push( callbackName );
+                       }
+
+                       // Call if it was a function and we have a response
+                       if ( responseContainer && jQuery.isFunction( overwritten ) ) {
+                               overwritten( responseContainer[ 0 ] );
+                       }
+
+                       responseContainer = overwritten = undefined;
+               } );
+
+               // Delegate to script
+               return "script";
+       }
+} );
+
+} );
diff --git a/js/jquery/src/ajax/load.js b/js/jquery/src/ajax/load.js
new file mode 100644 (file)
index 0000000..3ce3a5a
--- /dev/null
@@ -0,0 +1,76 @@
+define( [
+       "../core",
+       "../core/stripAndCollapse",
+       "../core/parseHTML",
+       "../ajax",
+       "../traversing",
+       "../manipulation",
+       "../selector"
+], function( jQuery, stripAndCollapse ) {
+
+"use strict";
+
+/**
+ * Load a url into a page
+ */
+jQuery.fn.load = function( url, params, callback ) {
+       var selector, type, response,
+               self = this,
+               off = url.indexOf( " " );
+
+       if ( off > -1 ) {
+               selector = stripAndCollapse( url.slice( off ) );
+               url = url.slice( 0, off );
+       }
+
+       // If it's a function
+       if ( jQuery.isFunction( params ) ) {
+
+               // We assume that it's the callback
+               callback = params;
+               params = undefined;
+
+       // Otherwise, build a param string
+       } else if ( params && typeof params === "object" ) {
+               type = "POST";
+       }
+
+       // If we have elements to modify, make the request
+       if ( self.length > 0 ) {
+               jQuery.ajax( {
+                       url: url,
+
+                       // If "type" variable is undefined, then "GET" method will be used.
+                       // Make value of this field explicit since
+                       // user can override it through ajaxSetup method
+                       type: type || "GET",
+                       dataType: "html",
+                       data: params
+               } ).done( function( responseText ) {
+
+                       // Save response for use in complete callback
+                       response = arguments;
+
+                       self.html( selector ?
+
+                               // If a selector was specified, locate the right elements in a dummy div
+                               // Exclude scripts to avoid IE 'Permission Denied' errors
+                               jQuery( "<div>" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :
+
+                               // Otherwise use the full result
+                               responseText );
+
+               // If the request succeeds, this function gets "data", "status", "jqXHR"
+               // but they are ignored because response was set above.
+               // If it fails, this function gets "jqXHR", "status", "error"
+               } ).always( callback && function( jqXHR, status ) {
+                       self.each( function() {
+                               callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );
+                       } );
+               } );
+       }
+
+       return this;
+};
+
+} );
diff --git a/js/jquery/src/ajax/parseXML.js b/js/jquery/src/ajax/parseXML.js
new file mode 100644 (file)
index 0000000..acf7ab2
--- /dev/null
@@ -0,0 +1,30 @@
+define( [
+       "../core"
+], function( jQuery ) {
+
+"use strict";
+
+// Cross-browser xml parsing
+jQuery.parseXML = function( data ) {
+       var xml;
+       if ( !data || typeof data !== "string" ) {
+               return null;
+       }
+
+       // Support: IE 9 - 11 only
+       // IE throws on parseFromString with invalid input.
+       try {
+               xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" );
+       } catch ( e ) {
+               xml = undefined;
+       }
+
+       if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) {
+               jQuery.error( "Invalid XML: " + data );
+       }
+       return xml;
+};
+
+return jQuery.parseXML;
+
+} );
diff --git a/js/jquery/src/ajax/script.js b/js/jquery/src/ajax/script.js
new file mode 100644 (file)
index 0000000..6e0d21e
--- /dev/null
@@ -0,0 +1,77 @@
+define( [
+       "../core",
+       "../var/document",
+       "../ajax"
+], function( jQuery, document ) {
+
+"use strict";
+
+// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)
+jQuery.ajaxPrefilter( function( s ) {
+       if ( s.crossDomain ) {
+               s.contents.script = false;
+       }
+} );
+
+// Install script dataType
+jQuery.ajaxSetup( {
+       accepts: {
+               script: "text/javascript, application/javascript, " +
+                       "application/ecmascript, application/x-ecmascript"
+       },
+       contents: {
+               script: /\b(?:java|ecma)script\b/
+       },
+       converters: {
+               "text script": function( text ) {
+                       jQuery.globalEval( text );
+                       return text;
+               }
+       }
+} );
+
+// Handle cache's special case and crossDomain
+jQuery.ajaxPrefilter( "script", function( s ) {
+       if ( s.cache === undefined ) {
+               s.cache = false;
+       }
+       if ( s.crossDomain ) {
+               s.type = "GET";
+       }
+} );
+
+// Bind script tag hack transport
+jQuery.ajaxTransport( "script", function( s ) {
+
+       // This transport only deals with cross domain requests
+       if ( s.crossDomain ) {
+               var script, callback;
+               return {
+                       send: function( _, complete ) {
+                               script = jQuery( "<script>" ).prop( {
+                                       charset: s.scriptCharset,
+                                       src: s.url
+                               } ).on(
+                                       "load error",
+                                       callback = function( evt ) {
+                                               script.remove();
+                                               callback = null;
+                                               if ( evt ) {
+                                                       complete( evt.type === "error" ? 404 : 200, evt.type );
+                                               }
+                                       }
+                               );
+
+                               // Use native DOM manipulation to avoid our domManip AJAX trickery
+                               document.head.appendChild( script[ 0 ] );
+                       },
+                       abort: function() {
+                               if ( callback ) {
+                                       callback();
+                               }
+                       }
+               };
+       }
+} );
+
+} );
diff --git a/js/jquery/src/ajax/var/location.js b/js/jquery/src/ajax/var/location.js
new file mode 100644 (file)
index 0000000..4171d18
--- /dev/null
@@ -0,0 +1,5 @@
+define( function() {
+       "use strict";
+
+       return window.location;
+} );
diff --git a/js/jquery/src/ajax/var/nonce.js b/js/jquery/src/ajax/var/nonce.js
new file mode 100644 (file)
index 0000000..6e23708
--- /dev/null
@@ -0,0 +1,7 @@
+define( [
+       "../../core"
+], function( jQuery ) {
+       "use strict";
+
+       return jQuery.now();
+} );
diff --git a/js/jquery/src/ajax/var/rquery.js b/js/jquery/src/ajax/var/rquery.js
new file mode 100644 (file)
index 0000000..06fc374
--- /dev/null
@@ -0,0 +1,5 @@
+define( function() {
+       "use strict";
+
+       return ( /\?/ );
+} );
diff --git a/js/jquery/src/ajax/xhr.js b/js/jquery/src/ajax/xhr.js
new file mode 100644 (file)
index 0000000..33dafb0
--- /dev/null
@@ -0,0 +1,169 @@
+define( [
+       "../core",
+       "../var/support",
+       "../ajax"
+], function( jQuery, support ) {
+
+"use strict";
+
+jQuery.ajaxSettings.xhr = function() {
+       try {
+               return new window.XMLHttpRequest();
+       } catch ( e ) {}
+};
+
+var xhrSuccessStatus = {
+
+               // File protocol always yields status code 0, assume 200
+               0: 200,
+
+               // Support: IE <=9 only
+               // #1450: sometimes IE returns 1223 when it should be 204
+               1223: 204
+       },
+       xhrSupported = jQuery.ajaxSettings.xhr();
+
+support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
+support.ajax = xhrSupported = !!xhrSupported;
+
+jQuery.ajaxTransport( function( options ) {
+       var callback, errorCallback;
+
+       // Cross domain only allowed if supported through XMLHttpRequest
+       if ( support.cors || xhrSupported && !options.crossDomain ) {
+               return {
+                       send: function( headers, complete ) {
+                               var i,
+                                       xhr = options.xhr();
+
+                               xhr.open(
+                                       options.type,
+                                       options.url,
+                                       options.async,
+                                       options.username,
+                                       options.password
+                               );
+
+                               // Apply custom fields if provided
+                               if ( options.xhrFields ) {
+                                       for ( i in options.xhrFields ) {
+                                               xhr[ i ] = options.xhrFields[ i ];
+                                       }
+                               }
+
+                               // Override mime type if needed
+                               if ( options.mimeType && xhr.overrideMimeType ) {
+                                       xhr.overrideMimeType( options.mimeType );
+                               }
+
+                               // X-Requested-With header
+                               // For cross-domain requests, seeing as conditions for a preflight are
+                               // akin to a jigsaw puzzle, we simply never set it to be sure.
+                               // (it can always be set on a per-request basis or even using ajaxSetup)
+                               // For same-domain requests, won't change header if already provided.
+                               if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) {
+                                       headers[ "X-Requested-With" ] = "XMLHttpRequest";
+                               }
+
+                               // Set headers
+                               for ( i in headers ) {
+                                       xhr.setRequestHeader( i, headers[ i ] );
+                               }
+
+                               // Callback
+                               callback = function( type ) {
+                                       return function() {
+                                               if ( callback ) {
+                                                       callback = errorCallback = xhr.onload =
+                                                               xhr.onerror = xhr.onabort = xhr.onreadystatechange = null;
+
+                                                       if ( type === "abort" ) {
+                                                               xhr.abort();
+                                                       } else if ( type === "error" ) {
+
+                                                               // Support: IE <=9 only
+                                                               // On a manual native abort, IE9 throws
+                                                               // errors on any property access that is not readyState
+                                                               if ( typeof xhr.status !== "number" ) {
+                                                                       complete( 0, "error" );
+                                                               } else {
+                                                                       complete(
+
+                                                                               // File: protocol always yields status 0; see #8605, #14207
+                                                                               xhr.status,
+                                                                               xhr.statusText
+                                                                       );
+                                                               }
+                                                       } else {
+                                                               complete(
+                                                                       xhrSuccessStatus[ xhr.status ] || xhr.status,
+                                                                       xhr.statusText,
+
+                                                                       // Support: IE <=9 only
+                                                                       // IE9 has no XHR2 but throws on binary (trac-11426)
+                                                                       // For XHR2 non-text, let the caller handle it (gh-2498)
+                                                                       ( xhr.responseType || "text" ) !== "text"  ||
+                                                                       typeof xhr.responseText !== "string" ?
+                                                                               { binary: xhr.response } :
+                                                                               { text: xhr.responseText },
+                                                                       xhr.getAllResponseHeaders()
+                                                               );
+                                                       }
+                                               }
+                                       };
+                               };
+
+                               // Listen to events
+                               xhr.onload = callback();
+                               errorCallback = xhr.onerror = callback( "error" );
+
+                               // Support: IE 9 only
+                               // Use onreadystatechange to replace onabort
+                               // to handle uncaught aborts
+                               if ( xhr.onabort !== undefined ) {
+                                       xhr.onabort = errorCallback;
+                               } else {
+                                       xhr.onreadystatechange = function() {
+
+                                               // Check readyState before timeout as it changes
+                                               if ( xhr.readyState === 4 ) {
+
+                                                       // Allow onerror to be called first,
+                                                       // but that will not handle a native abort
+                                                       // Also, save errorCallback to a variable
+                                                       // as xhr.onerror cannot be accessed
+                                                       window.setTimeout( function() {
+                                                               if ( callback ) {
+                                                                       errorCallback();
+                                                               }
+                                                       } );
+                                               }
+                                       };
+                               }
+
+                               // Create the abort callback
+                               callback = callback( "abort" );
+
+                               try {
+
+                                       // Do send the request (this may raise an exception)
+                                       xhr.send( options.hasContent && options.data || null );
+                               } catch ( e ) {
+
+                                       // #14683: Only rethrow if this hasn't been notified as an error yet
+                                       if ( callback ) {
+                                               throw e;
+                                       }
+                               }
+                       },
+
+                       abort: function() {
+                               if ( callback ) {
+                                       callback();
+                               }
+                       }
+               };
+       }
+} );
+
+} );
diff --git a/js/jquery/src/attributes.js b/js/jquery/src/attributes.js
new file mode 100644 (file)
index 0000000..2d801e5
--- /dev/null
@@ -0,0 +1,13 @@
+define( [
+       "./core",
+       "./attributes/attr",
+       "./attributes/prop",
+       "./attributes/classes",
+       "./attributes/val"
+], function( jQuery ) {
+
+"use strict";
+
+// Return jQuery for attributes-only inclusion
+return jQuery;
+} );
diff --git a/js/jquery/src/attributes/attr.js b/js/jquery/src/attributes/attr.js
new file mode 100644 (file)
index 0000000..6b5cbd2
--- /dev/null
@@ -0,0 +1,141 @@
+define( [
+       "../core",
+       "../core/access",
+       "../core/nodeName",
+       "./support",
+       "../var/rnothtmlwhite",
+       "../selector"
+], function( jQuery, access, nodeName, support, rnothtmlwhite ) {
+
+"use strict";
+
+var boolHook,
+       attrHandle = jQuery.expr.attrHandle;
+
+jQuery.fn.extend( {
+       attr: function( name, value ) {
+               return access( this, jQuery.attr, name, value, arguments.length > 1 );
+       },
+
+       removeAttr: function( name ) {
+               return this.each( function() {
+                       jQuery.removeAttr( this, name );
+               } );
+       }
+} );
+
+jQuery.extend( {
+       attr: function( elem, name, value ) {
+               var ret, hooks,
+                       nType = elem.nodeType;
+
+               // Don't get/set attributes on text, comment and attribute nodes
+               if ( nType === 3 || nType === 8 || nType === 2 ) {
+                       return;
+               }
+
+               // Fallback to prop when attributes are not supported
+               if ( typeof elem.getAttribute === "undefined" ) {
+                       return jQuery.prop( elem, name, value );
+               }
+
+               // Attribute hooks are determined by the lowercase version
+               // Grab necessary hook if one is defined
+               if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
+                       hooks = jQuery.attrHooks[ name.toLowerCase() ] ||
+                               ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );
+               }
+
+               if ( value !== undefined ) {
+                       if ( value === null ) {
+                               jQuery.removeAttr( elem, name );
+                               return;
+                       }
+
+                       if ( hooks && "set" in hooks &&
+                               ( ret = hooks.set( elem, value, name ) ) !== undefined ) {
+                               return ret;
+                       }
+
+                       elem.setAttribute( name, value + "" );
+                       return value;
+               }
+
+               if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
+                       return ret;
+               }
+
+               ret = jQuery.find.attr( elem, name );
+
+               // Non-existent attributes return null, we normalize to undefined
+               return ret == null ? undefined : ret;
+       },
+
+       attrHooks: {
+               type: {
+                       set: function( elem, value ) {
+                               if ( !support.radioValue && value === "radio" &&
+                                       nodeName( elem, "input" ) ) {
+                                       var val = elem.value;
+                                       elem.setAttribute( "type", value );
+                                       if ( val ) {
+                                               elem.value = val;
+                                       }
+                                       return value;
+                               }
+                       }
+               }
+       },
+
+       removeAttr: function( elem, value ) {
+               var name,
+                       i = 0,
+
+                       // Attribute names can contain non-HTML whitespace characters
+                       // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2
+                       attrNames = value && value.match( rnothtmlwhite );
+
+               if ( attrNames && elem.nodeType === 1 ) {
+                       while ( ( name = attrNames[ i++ ] ) ) {
+                               elem.removeAttribute( name );
+                       }
+               }
+       }
+} );
+
+// Hooks for boolean attributes
+boolHook = {
+       set: function( elem, value, name ) {
+               if ( value === false ) {
+
+                       // Remove boolean attributes when set to false
+                       jQuery.removeAttr( elem, name );
+               } else {
+                       elem.setAttribute( name, name );
+               }
+               return name;
+       }
+};
+
+jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) {
+       var getter = attrHandle[ name ] || jQuery.find.attr;
+
+       attrHandle[ name ] = function( elem, name, isXML ) {
+               var ret, handle,
+                       lowercaseName = name.toLowerCase();
+
+               if ( !isXML ) {
+
+                       // Avoid an infinite loop by temporarily removing this function from the getter
+                       handle = attrHandle[ lowercaseName ];
+                       attrHandle[ lowercaseName ] = ret;
+                       ret = getter( elem, name, isXML ) != null ?
+                               lowercaseName :
+                               null;
+                       attrHandle[ lowercaseName ] = handle;
+               }
+               return ret;
+       };
+} );
+
+} );
diff --git a/js/jquery/src/attributes/classes.js b/js/jquery/src/attributes/classes.js
new file mode 100644 (file)
index 0000000..23b4cd6
--- /dev/null
@@ -0,0 +1,174 @@
+define( [
+       "../core",
+       "../core/stripAndCollapse",
+       "../var/rnothtmlwhite",
+       "../data/var/dataPriv",
+       "../core/init"
+], function( jQuery, stripAndCollapse, rnothtmlwhite, dataPriv ) {
+
+"use strict";
+
+function getClass( elem ) {
+       return elem.getAttribute && elem.getAttribute( "class" ) || "";
+}
+
+jQuery.fn.extend( {
+       addClass: function( value ) {
+               var classes, elem, cur, curValue, clazz, j, finalValue,
+                       i = 0;
+
+               if ( jQuery.isFunction( value ) ) {
+                       return this.each( function( j ) {
+                               jQuery( this ).addClass( value.call( this, j, getClass( this ) ) );
+                       } );
+               }
+
+               if ( typeof value === "string" && value ) {
+                       classes = value.match( rnothtmlwhite ) || [];
+
+                       while ( ( elem = this[ i++ ] ) ) {
+                               curValue = getClass( elem );
+                               cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
+
+                               if ( cur ) {
+                                       j = 0;
+                                       while ( ( clazz = classes[ j++ ] ) ) {
+                                               if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
+                                                       cur += clazz + " ";
+                                               }
+                                       }
+
+                                       // Only assign if different to avoid unneeded rendering.
+                                       finalValue = stripAndCollapse( cur );
+                                       if ( curValue !== finalValue ) {
+                                               elem.setAttribute( "class", finalValue );
+                                       }
+                               }
+                       }
+               }
+
+               return this;
+       },
+
+       removeClass: function( value ) {
+               var classes, elem, cur, curValue, clazz, j, finalValue,
+                       i = 0;
+
+               if ( jQuery.isFunction( value ) ) {
+                       return this.each( function( j ) {
+                               jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );
+                       } );
+               }
+
+               if ( !arguments.length ) {
+                       return this.attr( "class", "" );
+               }
+
+               if ( typeof value === "string" && value ) {
+                       classes = value.match( rnothtmlwhite ) || [];
+
+                       while ( ( elem = this[ i++ ] ) ) {
+                               curValue = getClass( elem );
+
+                               // This expression is here for better compressibility (see addClass)
+                               cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
+
+                               if ( cur ) {
+                                       j = 0;
+                                       while ( ( clazz = classes[ j++ ] ) ) {
+
+                                               // Remove *all* instances
+                                               while ( cur.indexOf( " " + clazz + " " ) > -1 ) {
+                                                       cur = cur.replace( " " + clazz + " ", " " );
+                                               }
+                                       }
+
+                                       // Only assign if different to avoid unneeded rendering.
+                                       finalValue = stripAndCollapse( cur );
+                                       if ( curValue !== finalValue ) {
+                                               elem.setAttribute( "class", finalValue );
+                                       }
+                               }
+                       }
+               }
+
+               return this;
+       },
+
+       toggleClass: function( value, stateVal ) {
+               var type = typeof value;
+
+               if ( typeof stateVal === "boolean" && type === "string" ) {
+                       return stateVal ? this.addClass( value ) : this.removeClass( value );
+               }
+
+               if ( jQuery.isFunction( value ) ) {
+                       return this.each( function( i ) {
+                               jQuery( this ).toggleClass(
+                                       value.call( this, i, getClass( this ), stateVal ),
+                                       stateVal
+                               );
+                       } );
+               }
+
+               return this.each( function() {
+                       var className, i, self, classNames;
+
+                       if ( type === "string" ) {
+
+                               // Toggle individual class names
+                               i = 0;
+                               self = jQuery( this );
+                               classNames = value.match( rnothtmlwhite ) || [];
+
+                               while ( ( className = classNames[ i++ ] ) ) {
+
+                                       // Check each className given, space separated list
+                                       if ( self.hasClass( className ) ) {
+                                               self.removeClass( className );
+                                       } else {
+                                               self.addClass( className );
+                                       }
+                               }
+
+                       // Toggle whole class name
+                       } else if ( value === undefined || type === "boolean" ) {
+                               className = getClass( this );
+                               if ( className ) {
+
+                                       // Store className if set
+                                       dataPriv.set( this, "__className__", className );
+                               }
+
+                               // If the element has a class name or if we're passed `false`,
+                               // then remove the whole classname (if there was one, the above saved it).
+                               // Otherwise bring back whatever was previously saved (if anything),
+                               // falling back to the empty string if nothing was stored.
+                               if ( this.setAttribute ) {
+                                       this.setAttribute( "class",
+                                               className || value === false ?
+                                               "" :
+                                               dataPriv.get( this, "__className__" ) || ""
+                                       );
+                               }
+                       }
+               } );
+       },
+
+       hasClass: function( selector ) {
+               var className, elem,
+                       i = 0;
+
+               className = " " + selector + " ";
+               while ( ( elem = this[ i++ ] ) ) {
+                       if ( elem.nodeType === 1 &&
+                               ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) {
+                                       return true;
+                       }
+               }
+
+               return false;
+       }
+} );
+
+} );
diff --git a/js/jquery/src/attributes/prop.js b/js/jquery/src/attributes/prop.js
new file mode 100644 (file)
index 0000000..49ac244
--- /dev/null
@@ -0,0 +1,143 @@
+define( [
+       "../core",
+       "../core/access",
+       "./support",
+       "../selector"
+], function( jQuery, access, support ) {
+
+"use strict";
+
+var rfocusable = /^(?:input|select|textarea|button)$/i,
+       rclickable = /^(?:a|area)$/i;
+
+jQuery.fn.extend( {
+       prop: function( name, value ) {
+               return access( this, jQuery.prop, name, value, arguments.length > 1 );
+       },
+
+       removeProp: function( name ) {
+               return this.each( function() {
+                       delete this[ jQuery.propFix[ name ] || name ];
+               } );
+       }
+} );
+
+jQuery.extend( {
+       prop: function( elem, name, value ) {
+               var ret, hooks,
+                       nType = elem.nodeType;
+
+               // Don't get/set properties on text, comment and attribute nodes
+               if ( nType === 3 || nType === 8 || nType === 2 ) {
+                       return;
+               }
+
+               if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
+
+                       // Fix name and attach hooks
+                       name = jQuery.propFix[ name ] || name;
+                       hooks = jQuery.propHooks[ name ];
+               }
+
+               if ( value !== undefined ) {
+                       if ( hooks && "set" in hooks &&
+                               ( ret = hooks.set( elem, value, name ) ) !== undefined ) {
+                               return ret;
+                       }
+
+                       return ( elem[ name ] = value );
+               }
+
+               if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
+                       return ret;
+               }
+
+               return elem[ name ];
+       },
+
+       propHooks: {
+               tabIndex: {
+                       get: function( elem ) {
+
+                               // Support: IE <=9 - 11 only
+                               // elem.tabIndex doesn't always return the
+                               // correct value when it hasn't been explicitly set
+                               // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
+                               // Use proper attribute retrieval(#12072)
+                               var tabindex = jQuery.find.attr( elem, "tabindex" );
+
+                               if ( tabindex ) {
+                                       return parseInt( tabindex, 10 );
+                               }
+
+                               if (
+                                       rfocusable.test( elem.nodeName ) ||
+                                       rclickable.test( elem.nodeName ) &&
+                                       elem.href
+                               ) {
+                                       return 0;
+                               }
+
+                               return -1;
+                       }
+               }
+       },
+
+       propFix: {
+               "for": "htmlFor",
+               "class": "className"
+       }
+} );
+
+// Support: IE <=11 only
+// Accessing the selectedIndex property
+// forces the browser to respect setting selected
+// on the option
+// The getter ensures a default option is selected
+// when in an optgroup
+// eslint rule "no-unused-expressions" is disabled for this code
+// since it considers such accessions noop
+if ( !support.optSelected ) {
+       jQuery.propHooks.selected = {
+               get: function( elem ) {
+
+                       /* eslint no-unused-expressions: "off" */
+
+                       var parent = elem.parentNode;
+                       if ( parent && parent.parentNode ) {
+                               parent.parentNode.selectedIndex;
+                       }
+                       return null;
+               },
+               set: function( elem ) {
+
+                       /* eslint no-unused-expressions: "off" */
+
+                       var parent = elem.parentNode;
+                       if ( parent ) {
+                               parent.selectedIndex;
+
+                               if ( parent.parentNode ) {
+                                       parent.parentNode.selectedIndex;
+                               }
+                       }
+               }
+       };
+}
+
+jQuery.each( [
+       "tabIndex",
+       "readOnly",
+       "maxLength",
+       "cellSpacing",
+       "cellPadding",
+       "rowSpan",
+       "colSpan",
+       "useMap",
+       "frameBorder",
+       "contentEditable"
+], function() {
+       jQuery.propFix[ this.toLowerCase() ] = this;
+} );
+
+} );
diff --git a/js/jquery/src/attributes/support.js b/js/jquery/src/attributes/support.js
new file mode 100644 (file)
index 0000000..af60e96
--- /dev/null
@@ -0,0 +1,33 @@
+define( [
+       "../var/document",
+       "../var/support"
+], function( document, support ) {
+
+"use strict";
+
+( function() {
+       var input = document.createElement( "input" ),
+               select = document.createElement( "select" ),
+               opt = select.appendChild( document.createElement( "option" ) );
+
+       input.type = "checkbox";
+
+       // Support: Android <=4.3 only
+       // Default value for a checkbox should be "on"
+       support.checkOn = input.value !== "";
+
+       // Support: IE <=11 only
+       // Must access selectedIndex to make default options select
+       support.optSelected = opt.selected;
+
+       // Support: IE <=11 only
+       // An input loses its value after becoming a radio
+       input = document.createElement( "input" );
+       input.value = "t";
+       input.type = "radio";
+       support.radioValue = input.value === "t";
+} )();
+
+return support;
+
+} );
diff --git a/js/jquery/src/attributes/val.js b/js/jquery/src/attributes/val.js
new file mode 100644 (file)
index 0000000..d764ec6
--- /dev/null
@@ -0,0 +1,190 @@
+define( [
+       "../core",
+       "../core/stripAndCollapse",
+       "./support",
+       "../core/nodeName",
+
+       "../core/init"
+], function( jQuery, stripAndCollapse, support, nodeName ) {
+
+"use strict";
+
+var rreturn = /\r/g;
+
+jQuery.fn.extend( {
+       val: function( value ) {
+               var hooks, ret, isFunction,
+                       elem = this[ 0 ];
+
+               if ( !arguments.length ) {
+                       if ( elem ) {
+                               hooks = jQuery.valHooks[ elem.type ] ||
+                                       jQuery.valHooks[ elem.nodeName.toLowerCase() ];
+
+                               if ( hooks &&
+                                       "get" in hooks &&
+                                       ( ret = hooks.get( elem, "value" ) ) !== undefined
+                               ) {
+                                       return ret;
+                               }
+
+                               ret = elem.value;
+
+                               // Handle most common string cases
+                               if ( typeof ret === "string" ) {
+                                       return ret.replace( rreturn, "" );
+                               }
+
+                               // Handle cases where value is null/undef or number
+                               return ret == null ? "" : ret;
+                       }
+
+                       return;
+               }
+
+               isFunction = jQuery.isFunction( value );
+
+               return this.each( function( i ) {
+                       var val;
+
+                       if ( this.nodeType !== 1 ) {
+                               return;
+                       }
+
+                       if ( isFunction ) {
+                               val = value.call( this, i, jQuery( this ).val() );
+                       } else {
+                               val = value;
+                       }
+
+                       // Treat null/undefined as ""; convert numbers to string
+                       if ( val == null ) {
+                               val = "";
+
+                       } else if ( typeof val === "number" ) {
+                               val += "";
+
+                       } else if ( Array.isArray( val ) ) {
+                               val = jQuery.map( val, function( value ) {
+                                       return value == null ? "" : value + "";
+                               } );
+                       }
+
+                       hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
+
+                       // If set returns undefined, fall back to normal setting
+                       if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) {
+                               this.value = val;
+                       }
+               } );
+       }
+} );
+
+jQuery.extend( {
+       valHooks: {
+               option: {
+                       get: function( elem ) {
+
+                               var val = jQuery.find.attr( elem, "value" );
+                               return val != null ?
+                                       val :
+
+                                       // Support: IE <=10 - 11 only
+                                       // option.text throws exceptions (#14686, #14858)
+                                       // Strip and collapse whitespace
+                                       // https://html.spec.whatwg.org/#strip-and-collapse-whitespace
+                                       stripAndCollapse( jQuery.text( elem ) );
+                       }
+               },
+               select: {
+                       get: function( elem ) {
+                               var value, option, i,
+                                       options = elem.options,
+                                       index = elem.selectedIndex,
+                                       one = elem.type === "select-one",
+                                       values = one ? null : [],
+                                       max = one ? index + 1 : options.length;
+
+                               if ( index < 0 ) {
+                                       i = max;
+
+                               } else {
+                                       i = one ? index : 0;
+                               }
+
+                               // Loop through all the selected options
+                               for ( ; i < max; i++ ) {
+                                       option = options[ i ];
+
+                                       // Support: IE <=9 only
+                                       // IE8-9 doesn't update selected after form reset (#2551)
+                                       if ( ( option.selected || i === index ) &&
+
+                                                       // Don't return options that are disabled or in a disabled optgroup
+                                                       !option.disabled &&
+                                                       ( !option.parentNode.disabled ||
+                                                               !nodeName( option.parentNode, "optgroup" ) ) ) {
+
+                                               // Get the specific value for the option
+                                               value = jQuery( option ).val();
+
+                                               // We don't need an array for one selects
+                                               if ( one ) {
+                                                       return value;
+                                               }
+
+                                               // Multi-Selects return an array
+                                               values.push( value );
+                                       }
+                               }
+
+                               return values;
+                       },
+
+                       set: function( elem, value ) {
+                               var optionSet, option,
+                                       options = elem.options,
+                                       values = jQuery.makeArray( value ),
+                                       i = options.length;
+
+                               while ( i-- ) {
+                                       option = options[ i ];
+
+                                       /* eslint-disable no-cond-assign */
+
+                                       if ( option.selected =
+                                               jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1
+                                       ) {
+                                               optionSet = true;
+                                       }
+
+                                       /* eslint-enable no-cond-assign */
+                               }
+
+                               // Force browsers to behave consistently when non-matching value is set
+                               if ( !optionSet ) {
+                                       elem.selectedIndex = -1;
+                               }
+                               return values;
+                       }
+               }
+       }
+} );
+
+// Radios and checkboxes getter/setter
+jQuery.each( [ "radio", "checkbox" ], function() {
+       jQuery.valHooks[ this ] = {
+               set: function( elem, value ) {
+                       if ( Array.isArray( value ) ) {
+                               return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );
+                       }
+               }
+       };
+       if ( !support.checkOn ) {
+               jQuery.valHooks[ this ].get = function( elem ) {
+                       return elem.getAttribute( "value" ) === null ? "on" : elem.value;
+               };
+       }
+} );
+
+} );
diff --git a/js/jquery/src/callbacks.js b/js/jquery/src/callbacks.js
new file mode 100644 (file)
index 0000000..8831e53
--- /dev/null
@@ -0,0 +1,234 @@
+define( [
+       "./core",
+       "./var/rnothtmlwhite"
+], function( jQuery, rnothtmlwhite ) {
+
+"use strict";
+
+// Convert String-formatted options into Object-formatted ones
+function createOptions( options ) {
+       var object = {};
+       jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {
+               object[ flag ] = true;
+       } );
+       return object;
+}
+
+/*
+ * Create a callback list using the following parameters:
+ *
+ *     options: an optional list of space-separated options that will change how
+ *                     the callback list behaves or a more traditional option object
+ *
+ * By default a callback list will act like an event callback list and can be
+ * "fired" multiple times.
+ *
+ * Possible options:
+ *
+ *     once:                   will ensure the callback list can only be fired once (like a Deferred)
+ *
+ *     memory:                 will keep track of previous values and will call any callback added
+ *                                     after the list has been fired right away with the latest "memorized"
+ *                                     values (like a Deferred)
+ *
+ *     unique:                 will ensure a callback can only be added once (no duplicate in the list)
+ *
+ *     stopOnFalse:    interrupt callings when a callback returns false
+ *
+ */
+jQuery.Callbacks = function( options ) {
+
+       // Convert options from String-formatted to Object-formatted if needed
+       // (we check in cache first)
+       options = typeof options === "string" ?
+               createOptions( options ) :
+               jQuery.extend( {}, options );
+
+       var // Flag to know if list is currently firing
+               firing,
+
+               // Last fire value for non-forgettable lists
+               memory,
+
+               // Flag to know if list was already fired
+               fired,
+
+               // Flag to prevent firing
+               locked,
+
+               // Actual callback list
+               list = [],
+
+               // Queue of execution data for repeatable lists
+               queue = [],
+
+               // Index of currently firing callback (modified by add/remove as needed)
+               firingIndex = -1,
+
+               // Fire callbacks
+               fire = function() {
+
+                       // Enforce single-firing
+                       locked = locked || options.once;
+
+                       // Execute callbacks for all pending executions,
+                       // respecting firingIndex overrides and runtime changes
+                       fired = firing = true;
+                       for ( ; queue.length; firingIndex = -1 ) {
+                               memory = queue.shift();
+                               while ( ++firingIndex < list.length ) {
+
+                                       // Run callback and check for early termination
+                                       if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&
+                                               options.stopOnFalse ) {
+
+                                               // Jump to end and forget the data so .add doesn't re-fire
+                                               firingIndex = list.length;
+                                               memory = false;
+                                       }
+                               }
+                       }
+
+                       // Forget the data if we're done with it
+                       if ( !options.memory ) {
+                               memory = false;
+                       }
+
+                       firing = false;
+
+                       // Clean up if we're done firing for good
+                       if ( locked ) {
+
+                               // Keep an empty list if we have data for future add calls
+                               if ( memory ) {
+                                       list = [];
+
+                               // Otherwise, this object is spent
+                               } else {
+                                       list = "";
+                               }
+                       }
+               },
+
+               // Actual Callbacks object
+               self = {
+
+                       // Add a callback or a collection of callbacks to the list
+                       add: function() {
+                               if ( list ) {
+
+                                       // If we have memory from a past run, we should fire after adding
+                                       if ( memory && !firing ) {
+                                               firingIndex = list.length - 1;
+                                               queue.push( memory );
+                                       }
+
+                                       ( function add( args ) {
+                                               jQuery.each( args, function( _, arg ) {
+                                                       if ( jQuery.isFunction( arg ) ) {
+                                                               if ( !options.unique || !self.has( arg ) ) {
+                                                                       list.push( arg );
+                                                               }
+                                                       } else if ( arg && arg.length && jQuery.type( arg ) !== "string" ) {
+
+                                                               // Inspect recursively
+                                                               add( arg );
+                                                       }
+                                               } );
+                                       } )( arguments );
+
+                                       if ( memory && !firing ) {
+                                               fire();
+                                       }
+                               }
+                               return this;
+                       },
+
+                       // Remove a callback from the list
+                       remove: function() {
+                               jQuery.each( arguments, function( _, arg ) {
+                                       var index;
+                                       while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
+                                               list.splice( index, 1 );
+
+                                               // Handle firing indexes
+                                               if ( index <= firingIndex ) {
+                                                       firingIndex--;
+                                               }
+                                       }
+                               } );
+                               return this;
+                       },
+
+                       // Check if a given callback is in the list.
+                       // If no argument is given, return whether or not list has callbacks attached.
+                       has: function( fn ) {
+                               return fn ?
+                                       jQuery.inArray( fn, list ) > -1 :
+                                       list.length > 0;
+                       },
+
+                       // Remove all callbacks from the list
+                       empty: function() {
+                               if ( list ) {
+                                       list = [];
+                               }
+                               return this;
+                       },
+
+                       // Disable .fire and .add
+                       // Abort any current/pending executions
+                       // Clear all callbacks and values
+                       disable: function() {
+                               locked = queue = [];
+                               list = memory = "";
+                               return this;
+                       },
+                       disabled: function() {
+                               return !list;
+                       },
+
+                       // Disable .fire
+                       // Also disable .add unless we have memory (since it would have no effect)
+                       // Abort any pending executions
+                       lock: function() {
+                               locked = queue = [];
+                               if ( !memory && !firing ) {
+                                       list = memory = "";
+                               }
+                               return this;
+                       },
+                       locked: function() {
+                               return !!locked;
+                       },
+
+                       // Call all callbacks with the given context and arguments
+                       fireWith: function( context, args ) {
+                               if ( !locked ) {
+                                       args = args || [];
+                                       args = [ context, args.slice ? args.slice() : args ];
+                                       queue.push( args );
+                                       if ( !firing ) {
+                                               fire();
+                                       }
+                               }
+                               return this;
+                       },
+
+                       // Call all the callbacks with the given arguments
+                       fire: function() {
+                               self.fireWith( this, arguments );
+                               return this;
+                       },
+
+                       // To know if the callbacks have already been called at least once
+                       fired: function() {
+                               return !!fired;
+                       }
+               };
+
+       return self;
+};
+
+return jQuery;
+} );
diff --git a/js/jquery/src/core.js b/js/jquery/src/core.js
new file mode 100644 (file)
index 0000000..0e95274
--- /dev/null
@@ -0,0 +1,476 @@
+/* global Symbol */
+// Defining this global in .eslintrc.json would create a danger of using the global
+// unguarded in another place, it seems safer to define global only for this module
+
+define( [
+       "./var/arr",
+       "./var/document",
+       "./var/getProto",
+       "./var/slice",
+       "./var/concat",
+       "./var/push",
+       "./var/indexOf",
+       "./var/class2type",
+       "./var/toString",
+       "./var/hasOwn",
+       "./var/fnToString",
+       "./var/ObjectFunctionString",
+       "./var/support",
+       "./core/DOMEval"
+], function( arr, document, getProto, slice, concat, push, indexOf,
+       class2type, toString, hasOwn, fnToString, ObjectFunctionString,
+       support, DOMEval ) {
+
+"use strict";
+
+var
+       version = "3.2.1",
+
+       // Define a local copy of jQuery
+       jQuery = function( selector, context ) {
+
+               // The jQuery object is actually just the init constructor 'enhanced'
+               // Need init if jQuery is called (just allow error to be thrown if not included)
+               return new jQuery.fn.init( selector, context );
+       },
+
+       // Support: Android <=4.0 only
+       // Make sure we trim BOM and NBSP
+       rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
+
+       // Matches dashed string for camelizing
+       rmsPrefix = /^-ms-/,
+       rdashAlpha = /-([a-z])/g,
+
+       // Used by jQuery.camelCase as callback to replace()
+       fcamelCase = function( all, letter ) {
+               return letter.toUpperCase();
+       };
+
+jQuery.fn = jQuery.prototype = {
+
+       // The current version of jQuery being used
+       jquery: version,
+
+       constructor: jQuery,
+
+       // The default length of a jQuery object is 0
+       length: 0,
+
+       toArray: function() {
+               return slice.call( this );
+       },
+
+       // Get the Nth element in the matched element set OR
+       // Get the whole matched element set as a clean array
+       get: function( num ) {
+
+               // Return all the elements in a clean array
+               if ( num == null ) {
+                       return slice.call( this );
+               }
+
+               // Return just the one element from the set
+               return num < 0 ? this[ num + this.length ] : this[ num ];
+       },
+
+       // Take an array of elements and push it onto the stack
+       // (returning the new matched element set)
+       pushStack: function( elems ) {
+
+               // Build a new jQuery matched element set
+               var ret = jQuery.merge( this.constructor(), elems );
+
+               // Add the old object onto the stack (as a reference)
+               ret.prevObject = this;
+
+               // Return the newly-formed element set
+               return ret;
+       },
+
+       // Execute a callback for every element in the matched set.
+       each: function( callback ) {
+               return jQuery.each( this, callback );
+       },
+
+       map: function( callback ) {
+               return this.pushStack( jQuery.map( this, function( elem, i ) {
+                       return callback.call( elem, i, elem );
+               } ) );
+       },
+
+       slice: function() {
+               return this.pushStack( slice.apply( this, arguments ) );
+       },
+
+       first: function() {
+               return this.eq( 0 );
+       },
+
+       last: function() {
+               return this.eq( -1 );
+       },
+
+       eq: function( i ) {
+               var len = this.length,
+                       j = +i + ( i < 0 ? len : 0 );
+               return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );
+       },
+
+       end: function() {
+               return this.prevObject || this.constructor();
+       },
+
+       // For internal use only.
+       // Behaves like an Array's method, not like a jQuery method.
+       push: push,
+       sort: arr.sort,
+       splice: arr.splice
+};
+
+jQuery.extend = jQuery.fn.extend = function() {
+       var options, name, src, copy, copyIsArray, clone,
+               target = arguments[ 0 ] || {},
+               i = 1,
+               length = arguments.length,
+               deep = false;
+
+       // Handle a deep copy situation
+       if ( typeof target === "boolean" ) {
+               deep = target;
+
+               // Skip the boolean and the target
+               target = arguments[ i ] || {};
+               i++;
+       }
+
+       // Handle case when target is a string or something (possible in deep copy)
+       if ( typeof target !== "object" && !jQuery.isFunction( target ) ) {
+               target = {};
+       }
+
+       // Extend jQuery itself if only one argument is passed
+       if ( i === length ) {
+               target = this;
+               i--;
+       }
+
+       for ( ; i < length; i++ ) {
+
+               // Only deal with non-null/undefined values
+               if ( ( options = arguments[ i ] ) != null ) {
+
+                       // Extend the base object
+                       for ( name in options ) {
+                               src = target[ name ];
+                               copy = options[ name ];
+
+                               // Prevent never-ending loop
+                               if ( target === copy ) {
+                                       continue;
+                               }
+
+                               // Recurse if we're merging plain objects or arrays
+                               if ( deep && copy && ( jQuery.isPlainObject( copy ) ||
+                                       ( copyIsArray = Array.isArray( copy ) ) ) ) {
+
+                                       if ( copyIsArray ) {
+                                               copyIsArray = false;
+                                               clone = src && Array.isArray( src ) ? src : [];
+
+                                       } else {
+                                               clone = src && jQuery.isPlainObject( src ) ? src : {};
+                                       }
+
+                                       // Never move original objects, clone them
+                                       target[ name ] = jQuery.extend( deep, clone, copy );
+
+                               // Don't bring in undefined values
+                               } else if ( copy !== undefined ) {
+                                       target[ name ] = copy;
+                               }
+                       }
+               }
+       }
+
+       // Return the modified object
+       return target;
+};
+
+jQuery.extend( {
+
+       // Unique for each copy of jQuery on the page
+       expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
+
+       // Assume jQuery is ready without the ready module
+       isReady: true,
+
+       error: function( msg ) {
+               throw new Error( msg );
+       },
+
+       noop: function() {},
+
+       isFunction: function( obj ) {
+               return jQuery.type( obj ) === "function";
+       },
+
+       isWindow: function( obj ) {
+               return obj != null && obj === obj.window;
+       },
+
+       isNumeric: function( obj ) {
+
+               // As of jQuery 3.0, isNumeric is limited to
+               // strings and numbers (primitives or objects)
+               // that can be coerced to finite numbers (gh-2662)
+               var type = jQuery.type( obj );
+               return ( type === "number" || type === "string" ) &&
+
+                       // parseFloat NaNs numeric-cast false positives ("")
+                       // ...but misinterprets leading-number strings, particularly hex literals ("0x...")
+                       // subtraction forces infinities to NaN
+                       !isNaN( obj - parseFloat( obj ) );
+       },
+
+       isPlainObject: function( obj ) {
+               var proto, Ctor;
+
+               // Detect obvious negatives
+               // Use toString instead of jQuery.type to catch host objects
+               if ( !obj || toString.call( obj ) !== "[object Object]" ) {
+                       return false;
+               }
+
+               proto = getProto( obj );
+
+               // Objects with no prototype (e.g., `Object.create( null )`) are plain
+               if ( !proto ) {
+                       return true;
+               }
+
+               // Objects with prototype are plain iff they were constructed by a global Object function
+               Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor;
+               return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString;
+       },
+
+       isEmptyObject: function( obj ) {
+
+               /* eslint-disable no-unused-vars */
+               // See https://github.com/eslint/eslint/issues/6125
+               var name;
+
+               for ( name in obj ) {
+                       return false;
+               }
+               return true;
+       },
+
+       type: function( obj ) {
+               if ( obj == null ) {
+                       return obj + "";
+               }
+
+               // Support: Android <=2.3 only (functionish RegExp)
+               return typeof obj === "object" || typeof obj === "function" ?
+                       class2type[ toString.call( obj ) ] || "object" :
+                       typeof obj;
+       },
+
+       // Evaluates a script in a global context
+       globalEval: function( code ) {
+               DOMEval( code );
+       },
+
+       // Convert dashed to camelCase; used by the css and data modules
+       // Support: IE <=9 - 11, Edge 12 - 13
+       // Microsoft forgot to hump their vendor prefix (#9572)
+       camelCase: function( string ) {
+               return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
+       },
+
+       each: function( obj, callback ) {
+               var length, i = 0;
+
+               if ( isArrayLike( obj ) ) {
+                       length = obj.length;
+                       for ( ; i < length; i++ ) {
+                               if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
+                                       break;
+                               }
+                       }
+               } else {
+                       for ( i in obj ) {
+                               if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
+                                       break;
+                               }
+                       }
+               }
+
+               return obj;
+       },
+
+       // Support: Android <=4.0 only
+       trim: function( text ) {
+               return text == null ?
+                       "" :
+                       ( text + "" ).replace( rtrim, "" );
+       },
+
+       // results is for internal usage only
+       makeArray: function( arr, results ) {
+               var ret = results || [];
+
+               if ( arr != null ) {
+                       if ( isArrayLike( Object( arr ) ) ) {
+                               jQuery.merge( ret,
+                                       typeof arr === "string" ?
+                                       [ arr ] : arr
+                               );
+                       } else {
+                               push.call( ret, arr );
+                       }
+               }
+
+               return ret;
+       },
+
+       inArray: function( elem, arr, i ) {
+               return arr == null ? -1 : indexOf.call( arr, elem, i );
+       },
+
+       // Support: Android <=4.0 only, PhantomJS 1 only
+       // push.apply(_, arraylike) throws on ancient WebKit
+       merge: function( first, second ) {
+               var len = +second.length,
+                       j = 0,
+                       i = first.length;
+
+               for ( ; j < len; j++ ) {
+                       first[ i++ ] = second[ j ];
+               }
+
+               first.length = i;
+
+               return first;
+       },
+
+       grep: function( elems, callback, invert ) {
+               var callbackInverse,
+                       matches = [],
+                       i = 0,
+                       length = elems.length,
+                       callbackExpect = !invert;
+
+               // Go through the array, only saving the items
+               // that pass the validator function
+               for ( ; i < length; i++ ) {
+                       callbackInverse = !callback( elems[ i ], i );
+                       if ( callbackInverse !== callbackExpect ) {
+                               matches.push( elems[ i ] );
+                       }
+               }
+
+               return matches;
+       },
+
+       // arg is for internal usage only
+       map: function( elems, callback, arg ) {
+               var length, value,
+                       i = 0,
+                       ret = [];
+
+               // Go through the array, translating each of the items to their new values
+               if ( isArrayLike( elems ) ) {
+                       length = elems.length;
+                       for ( ; i < length; i++ ) {
+                               value = callback( elems[ i ], i, arg );
+
+                               if ( value != null ) {
+                                       ret.push( value );
+                               }
+                       }
+
+               // Go through every key on the object,
+               } else {
+                       for ( i in elems ) {
+                               value = callback( elems[ i ], i, arg );
+
+                               if ( value != null ) {
+                                       ret.push( value );
+                               }
+                       }
+               }
+
+               // Flatten any nested arrays
+               return concat.apply( [], ret );
+       },
+
+       // A global GUID counter for objects
+       guid: 1,
+
+       // Bind a function to a context, optionally partially applying any
+       // arguments.
+       proxy: function( fn, context ) {
+               var tmp, args, proxy;
+
+               if ( typeof context === "string" ) {
+                       tmp = fn[ context ];
+                       context = fn;
+                       fn = tmp;
+               }
+
+               // Quick check to determine if target is callable, in the spec
+               // this throws a TypeError, but we will just return undefined.
+               if ( !jQuery.isFunction( fn ) ) {
+                       return undefined;
+               }
+
+               // Simulated bind
+               args = slice.call( arguments, 2 );
+               proxy = function() {
+                       return fn.apply( context || this, args.concat( slice.call( arguments ) ) );
+               };
+
+               // Set the guid of unique handler to the same of original handler, so it can be removed
+               proxy.guid = fn.guid = fn.guid || jQuery.guid++;
+
+               return proxy;
+       },
+
+       now: Date.now,
+
+       // jQuery.support is not used in Core but other projects attach their
+       // properties to it so it needs to exist.
+       support: support
+} );
+
+if ( typeof Symbol === "function" ) {
+       jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];
+}
+
+// Populate the class2type map
+jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ),
+function( i, name ) {
+       class2type[ "[object " + name + "]" ] = name.toLowerCase();
+} );
+
+function isArrayLike( obj ) {
+
+       // Support: real iOS 8.2 only (not reproducible in simulator)
+       // `in` check used to prevent JIT error (gh-2145)
+       // hasOwn isn't used here due to false negatives
+       // regarding Nodelist length in IE
+       var length = !!obj && "length" in obj && obj.length,
+               type = jQuery.type( obj );
+
+       if ( type === "function" || jQuery.isWindow( obj ) ) {
+               return false;
+       }
+
+       return type === "array" || length === 0 ||
+               typeof length === "number" && length > 0 && ( length - 1 ) in obj;
+}
+
+return jQuery;
+} );
diff --git a/js/jquery/src/core/DOMEval.js b/js/jquery/src/core/DOMEval.js
new file mode 100644 (file)
index 0000000..c49c12e
--- /dev/null
@@ -0,0 +1,16 @@
+define( [
+       "../var/document"
+], function( document ) {
+       "use strict";
+
+       function DOMEval( code, doc ) {
+               doc = doc || document;
+
+               var script = doc.createElement( "script" );
+
+               script.text = code;
+               doc.head.appendChild( script ).parentNode.removeChild( script );
+       }
+
+       return DOMEval;
+} );
diff --git a/js/jquery/src/core/access.js b/js/jquery/src/core/access.js
new file mode 100644 (file)
index 0000000..86cdbc7
--- /dev/null
@@ -0,0 +1,70 @@
+define( [
+       "../core"
+], function( jQuery ) {
+
+"use strict";
+
+// Multifunctional method to get and set values of a collection
+// The value/s can optionally be executed if it's a function
+var access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
+       var i = 0,
+               len = elems.length,
+               bulk = key == null;
+
+       // Sets many values
+       if ( jQuery.type( key ) === "object" ) {
+               chainable = true;
+               for ( i in key ) {
+                       access( elems, fn, i, key[ i ], true, emptyGet, raw );
+               }
+
+       // Sets one value
+       } else if ( value !== undefined ) {
+               chainable = true;
+
+               if ( !jQuery.isFunction( value ) ) {
+                       raw = true;
+               }
+
+               if ( bulk ) {
+
+                       // Bulk operations run against the entire set
+                       if ( raw ) {
+                               fn.call( elems, value );
+                               fn = null;
+
+                       // ...except when executing function values
+                       } else {
+                               bulk = fn;
+                               fn = function( elem, key, value ) {
+                                       return bulk.call( jQuery( elem ), value );
+                               };
+                       }
+               }
+
+               if ( fn ) {
+                       for ( ; i < len; i++ ) {
+                               fn(
+                                       elems[ i ], key, raw ?
+                                       value :
+                                       value.call( elems[ i ], i, fn( elems[ i ], key ) )
+                               );
+                       }
+               }
+       }
+
+       if ( chainable ) {
+               return elems;
+       }
+
+       // Gets
+       if ( bulk ) {
+               return fn.call( elems );
+       }
+
+       return len ? fn( elems[ 0 ], key ) : emptyGet;
+};
+
+return access;
+
+} );
diff --git a/js/jquery/src/core/init.js b/js/jquery/src/core/init.js
new file mode 100644 (file)
index 0000000..8841264
--- /dev/null
@@ -0,0 +1,128 @@
+// Initialize a jQuery object
+define( [
+       "../core",
+       "../var/document",
+       "./var/rsingleTag",
+
+       "../traversing/findFilter"
+], function( jQuery, document, rsingleTag ) {
+
+"use strict";
+
+// A central reference to the root jQuery(document)
+var rootjQuery,
+
+       // A simple way to check for HTML strings
+       // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
+       // Strict HTML recognition (#11290: must start with <)
+       // Shortcut simple #id case for speed
+       rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,
+
+       init = jQuery.fn.init = function( selector, context, root ) {
+               var match, elem;
+
+               // HANDLE: $(""), $(null), $(undefined), $(false)
+               if ( !selector ) {
+                       return this;
+               }
+
+               // Method init() accepts an alternate rootjQuery
+               // so migrate can support jQuery.sub (gh-2101)
+               root = root || rootjQuery;
+
+               // Handle HTML strings
+               if ( typeof selector === "string" ) {
+                       if ( selector[ 0 ] === "<" &&
+                               selector[ selector.length - 1 ] === ">" &&
+                               selector.length >= 3 ) {
+
+                               // Assume that strings that start and end with <> are HTML and skip the regex check
+                               match = [ null, selector, null ];
+
+                       } else {
+                               match = rquickExpr.exec( selector );
+                       }
+
+                       // Match html or make sure no context is specified for #id
+                       if ( match && ( match[ 1 ] || !context ) ) {
+
+                               // HANDLE: $(html) -> $(array)
+                               if ( match[ 1 ] ) {
+                                       context = context instanceof jQuery ? context[ 0 ] : context;
+
+                                       // Option to run scripts is true for back-compat
+                                       // Intentionally let the error be thrown if parseHTML is not present
+                                       jQuery.merge( this, jQuery.parseHTML(
+                                               match[ 1 ],
+                                               context && context.nodeType ? context.ownerDocument || context : document,
+                                               true
+                                       ) );
+
+                                       // HANDLE: $(html, props)
+                                       if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {
+                                               for ( match in context ) {
+
+                                                       // Properties of context are called as methods if possible
+                                                       if ( jQuery.isFunction( this[ match ] ) ) {
+                                                               this[ match ]( context[ match ] );
+
+                                                       // ...and otherwise set as attributes
+                                                       } else {
+                                                               this.attr( match, context[ match ] );
+                                                       }
+                                               }
+                                       }
+
+                                       return this;
+
+                               // HANDLE: $(#id)
+                               } else {
+                                       elem = document.getElementById( match[ 2 ] );
+
+                                       if ( elem ) {
+
+                                               // Inject the element directly into the jQuery object
+                                               this[ 0 ] = elem;
+                                               this.length = 1;
+                                       }
+                                       return this;
+                               }
+
+                       // HANDLE: $(expr, $(...))
+                       } else if ( !context || context.jquery ) {
+                               return ( context || root ).find( selector );
+
+                       // HANDLE: $(expr, context)
+                       // (which is just equivalent to: $(context).find(expr)
+                       } else {
+                               return this.constructor( context ).find( selector );
+                       }
+
+               // HANDLE: $(DOMElement)
+               } else if ( selector.nodeType ) {
+                       this[ 0 ] = selector;
+                       this.length = 1;
+                       return this;
+
+               // HANDLE: $(function)
+               // Shortcut for document ready
+               } else if ( jQuery.isFunction( selector ) ) {
+                       return root.ready !== undefined ?
+                               root.ready( selector ) :
+
+                               // Execute immediately if ready is not present
+                               selector( jQuery );
+               }
+
+               return jQuery.makeArray( selector, this );
+       };
+
+// Give the init function the jQuery prototype for later instantiation
+init.prototype = jQuery.fn;
+
+// Initialize central reference
+rootjQuery = jQuery( document );
+
+return init;
+
+} );
diff --git a/js/jquery/src/core/nodeName.js b/js/jquery/src/core/nodeName.js
new file mode 100644 (file)
index 0000000..8a5f5f0
--- /dev/null
@@ -0,0 +1,13 @@
+define( function() {
+
+"use strict";
+
+function nodeName( elem, name ) {
+
+  return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
+
+};
+
+return nodeName;
+
+} );
diff --git a/js/jquery/src/core/parseHTML.js b/js/jquery/src/core/parseHTML.js
new file mode 100644 (file)
index 0000000..21ff6bf
--- /dev/null
@@ -0,0 +1,65 @@
+define( [
+       "../core",
+       "../var/document",
+       "./var/rsingleTag",
+       "../manipulation/buildFragment",
+
+       // This is the only module that needs core/support
+       "./support"
+], function( jQuery, document, rsingleTag, buildFragment, support ) {
+
+"use strict";
+
+// Argument "data" should be string of html
+// context (optional): If specified, the fragment will be created in this context,
+// defaults to document
+// keepScripts (optional): If true, will include scripts passed in the html string
+jQuery.parseHTML = function( data, context, keepScripts ) {
+       if ( typeof data !== "string" ) {
+               return [];
+       }
+       if ( typeof context === "boolean" ) {
+               keepScripts = context;
+               context = false;
+       }
+
+       var base, parsed, scripts;
+
+       if ( !context ) {
+
+               // Stop scripts or inline event handlers from being executed immediately
+               // by using document.implementation
+               if ( support.createHTMLDocument ) {
+                       context = document.implementation.createHTMLDocument( "" );
+
+                       // Set the base href for the created document
+                       // so any parsed elements with URLs
+                       // are based on the document's URL (gh-2965)
+                       base = context.createElement( "base" );
+                       base.href = document.location.href;
+                       context.head.appendChild( base );
+               } else {
+                       context = document;
+               }
+       }
+
+       parsed = rsingleTag.exec( data );
+       scripts = !keepScripts && [];
+
+       // Single tag
+       if ( parsed ) {
+               return [ context.createElement( parsed[ 1 ] ) ];
+       }
+
+       parsed = buildFragment( [ data ], context, scripts );
+
+       if ( scripts && scripts.length ) {
+               jQuery( scripts ).remove();
+       }
+
+       return jQuery.merge( [], parsed.childNodes );
+};
+
+return jQuery.parseHTML;
+
+} );
diff --git a/js/jquery/src/core/ready-no-deferred.js b/js/jquery/src/core/ready-no-deferred.js
new file mode 100644 (file)
index 0000000..a7722ae
--- /dev/null
@@ -0,0 +1,96 @@
+define( [
+       "../core",
+       "../var/document"
+], function( jQuery, document ) {
+
+"use strict";
+
+var readyCallbacks = [],
+       whenReady = function( fn ) {
+               readyCallbacks.push( fn );
+       },
+       executeReady = function( fn ) {
+
+               // Prevent errors from freezing future callback execution (gh-1823)
+               // Not backwards-compatible as this does not execute sync
+               window.setTimeout( function() {
+                       fn.call( document, jQuery );
+               } );
+       };
+
+jQuery.fn.ready = function( fn ) {
+       whenReady( fn );
+       return this;
+};
+
+jQuery.extend( {
+
+       // Is the DOM ready to be used? Set to true once it occurs.
+       isReady: false,
+
+       // A counter to track how many items to wait for before
+       // the ready event fires. See #6781
+       readyWait: 1,
+
+       ready: function( wait ) {
+
+               // Abort if there are pending holds or we're already ready
+               if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
+                       return;
+               }
+
+               // Remember that the DOM is ready
+               jQuery.isReady = true;
+
+               // If a normal DOM Ready event fired, decrement, and wait if need be
+               if ( wait !== true && --jQuery.readyWait > 0 ) {
+                       return;
+               }
+
+               whenReady = function( fn ) {
+                       readyCallbacks.push( fn );
+
+                       while ( readyCallbacks.length ) {
+                               fn = readyCallbacks.shift();
+                               if ( jQuery.isFunction( fn ) ) {
+                                       executeReady( fn );
+                               }
+                       }
+               };
+
+               whenReady();
+       }
+} );
+
+// Make jQuery.ready Promise consumable (gh-1778)
+jQuery.ready.then = jQuery.fn.ready;
+
+/**
+ * The ready event handler and self cleanup method
+ */
+function completed() {
+       document.removeEventListener( "DOMContentLoaded", completed );
+       window.removeEventListener( "load", completed );
+       jQuery.ready();
+}
+
+// Catch cases where $(document).ready() is called
+// after the browser event has already occurred.
+// Support: IE9-10 only
+// Older IE sometimes signals "interactive" too soon
+if ( document.readyState === "complete" ||
+       ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) {
+
+       // Handle it asynchronously to allow scripts the opportunity to delay ready
+       window.setTimeout( jQuery.ready );
+
+} else {
+
+       // Use the handy event callback
+       document.addEventListener( "DOMContentLoaded", completed );
+
+       // A fallback to window.onload, that will always work
+       window.addEventListener( "load", completed );
+}
+
+} );
diff --git a/js/jquery/src/core/ready.js b/js/jquery/src/core/ready.js
new file mode 100644 (file)
index 0000000..794feee
--- /dev/null
@@ -0,0 +1,86 @@
+define( [
+       "../core",
+       "../var/document",
+       "../core/readyException",
+       "../deferred"
+], function( jQuery, document ) {
+
+"use strict";
+
+// The deferred used on DOM ready
+var readyList = jQuery.Deferred();
+
+jQuery.fn.ready = function( fn ) {
+
+       readyList
+               .then( fn )
+
+               // Wrap jQuery.readyException in a function so that the lookup
+               // happens at the time of error handling instead of callback
+               // registration.
+               .catch( function( error ) {
+                       jQuery.readyException( error );
+               } );
+
+       return this;
+};
+
+jQuery.extend( {
+
+       // Is the DOM ready to be used? Set to true once it occurs.
+       isReady: false,
+
+       // A counter to track how many items to wait for before
+       // the ready event fires. See #6781
+       readyWait: 1,
+
+       // Handle when the DOM is ready
+       ready: function( wait ) {
+
+               // Abort if there are pending holds or we're already ready
+               if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
+                       return;
+               }
+
+               // Remember that the DOM is ready
+               jQuery.isReady = true;
+
+               // If a normal DOM Ready event fired, decrement, and wait if need be
+               if ( wait !== true && --jQuery.readyWait > 0 ) {
+                       return;
+               }
+
+               // If there are functions bound, to execute
+               readyList.resolveWith( document, [ jQuery ] );
+       }
+} );
+
+jQuery.ready.then = readyList.then;
+
+// The ready event handler and self cleanup method
+function completed() {
+       document.removeEventListener( "DOMContentLoaded", completed );
+       window.removeEventListener( "load", completed );
+       jQuery.ready();
+}
+
+// Catch cases where $(document).ready() is called
+// after the browser event has already occurred.
+// Support: IE <=9 - 10 only
+// Older IE sometimes signals "interactive" too soon
+if ( document.readyState === "complete" ||
+       ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) {
+
+       // Handle it asynchronously to allow scripts the opportunity to delay ready
+       window.setTimeout( jQuery.ready );
+
+} else {
+
+       // Use the handy event callback
+       document.addEventListener( "DOMContentLoaded", completed );
+
+       // A fallback to window.onload, that will always work
+       window.addEventListener( "load", completed );
+}
+
+} );
diff --git a/js/jquery/src/core/readyException.js b/js/jquery/src/core/readyException.js
new file mode 100644 (file)
index 0000000..72bdd90
--- /dev/null
@@ -0,0 +1,13 @@
+define( [
+       "../core"
+], function( jQuery ) {
+
+"use strict";
+
+jQuery.readyException = function( error ) {
+       window.setTimeout( function() {
+               throw error;
+       } );
+};
+
+} );
diff --git a/js/jquery/src/core/stripAndCollapse.js b/js/jquery/src/core/stripAndCollapse.js
new file mode 100644 (file)
index 0000000..ccad660
--- /dev/null
@@ -0,0 +1,14 @@
+define( [
+       "../var/rnothtmlwhite"
+], function( rnothtmlwhite ) {
+       "use strict";
+
+       // Strip and collapse whitespace according to HTML spec
+       // https://html.spec.whatwg.org/multipage/infrastructure.html#strip-and-collapse-whitespace
+       function stripAndCollapse( value ) {
+               var tokens = value.match( rnothtmlwhite ) || [];
+               return tokens.join( " " );
+       }
+
+       return stripAndCollapse;
+} );
diff --git a/js/jquery/src/core/support.js b/js/jquery/src/core/support.js
new file mode 100644 (file)
index 0000000..13ae02f
--- /dev/null
@@ -0,0 +1,20 @@
+define( [
+       "../var/document",
+       "../var/support"
+], function( document, support ) {
+
+"use strict";
+
+// Support: Safari 8 only
+// In Safari 8 documents created via document.implementation.createHTMLDocument
+// collapse sibling forms: the second one becomes a child of the first one.
+// Because of that, this security measure has to be disabled in Safari 8.
+// https://bugs.webkit.org/show_bug.cgi?id=137337
+support.createHTMLDocument = ( function() {
+       var body = document.implementation.createHTMLDocument( "" ).body;
+       body.innerHTML = "<form></form><form></form>";
+       return body.childNodes.length === 2;
+} )();
+
+return support;
+} );
diff --git a/js/jquery/src/core/var/rsingleTag.js b/js/jquery/src/core/var/rsingleTag.js
new file mode 100644 (file)
index 0000000..4d6e8a0
--- /dev/null
@@ -0,0 +1,6 @@
+define( function() {
+       "use strict";
+
+       // Match a standalone tag
+       return ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i );
+} );
diff --git a/js/jquery/src/css.js b/js/jquery/src/css.js
new file mode 100644 (file)
index 0000000..48a8340
--- /dev/null
@@ -0,0 +1,438 @@
+define( [
+       "./core",
+       "./var/pnum",
+       "./core/access",
+       "./css/var/rmargin",
+       "./var/document",
+       "./var/rcssNum",
+       "./css/var/rnumnonpx",
+       "./css/var/cssExpand",
+       "./css/var/getStyles",
+       "./css/var/swap",
+       "./css/curCSS",
+       "./css/adjustCSS",
+       "./css/addGetHookIf",
+       "./css/support",
+
+       "./core/init",
+       "./core/ready",
+       "./selector" // contains
+], function( jQuery, pnum, access, rmargin, document, rcssNum, rnumnonpx, cssExpand,
+       getStyles, swap, curCSS, adjustCSS, addGetHookIf, support ) {
+
+"use strict";
+
+var
+
+       // Swappable if display is none or starts with table
+       // except "table", "table-cell", or "table-caption"
+       // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
+       rdisplayswap = /^(none|table(?!-c[ea]).+)/,
+       rcustomProp = /^--/,
+       cssShow = { position: "absolute", visibility: "hidden", display: "block" },
+       cssNormalTransform = {
+               letterSpacing: "0",
+               fontWeight: "400"
+       },
+
+       cssPrefixes = [ "Webkit", "Moz", "ms" ],
+       emptyStyle = document.createElement( "div" ).style;
+
+// Return a css property mapped to a potentially vendor prefixed property
+function vendorPropName( name ) {
+
+       // Shortcut for names that are not vendor prefixed
+       if ( name in emptyStyle ) {
+               return name;
+       }
+
+       // Check for vendor prefixed names
+       var capName = name[ 0 ].toUpperCase() + name.slice( 1 ),
+               i = cssPrefixes.length;
+
+       while ( i-- ) {
+               name = cssPrefixes[ i ] + capName;
+               if ( name in emptyStyle ) {
+                       return name;
+               }
+       }
+}
+
+// Return a property mapped along what jQuery.cssProps suggests or to
+// a vendor prefixed property.
+function finalPropName( name ) {
+       var ret = jQuery.cssProps[ name ];
+       if ( !ret ) {
+               ret = jQuery.cssProps[ name ] = vendorPropName( name ) || name;
+       }
+       return ret;
+}
+
+function setPositiveNumber( elem, value, subtract ) {
+
+       // Any relative (+/-) values have already been
+       // normalized at this point
+       var matches = rcssNum.exec( value );
+       return matches ?
+
+               // Guard against undefined "subtract", e.g., when used as in cssHooks
+               Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) :
+               value;
+}
+
+function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
+       var i,
+               val = 0;
+
+       // If we already have the right measurement, avoid augmentation
+       if ( extra === ( isBorderBox ? "border" : "content" ) ) {
+               i = 4;
+
+       // Otherwise initialize for horizontal or vertical properties
+       } else {
+               i = name === "width" ? 1 : 0;
+       }
+
+       for ( ; i < 4; i += 2 ) {
+
+               // Both box models exclude margin, so add it if we want it
+               if ( extra === "margin" ) {
+                       val += jQuery.css( elem, extra + cssExpand[ i ], true, styles );
+               }
+
+               if ( isBorderBox ) {
+
+                       // border-box includes padding, so remove it if we want content
+                       if ( extra === "content" ) {
+                               val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
+                       }
+
+                       // At this point, extra isn't border nor margin, so remove border
+                       if ( extra !== "margin" ) {
+                               val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
+                       }
+               } else {
+
+                       // At this point, extra isn't content, so add padding
+                       val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
+
+                       // At this point, extra isn't content nor padding, so add border
+                       if ( extra !== "padding" ) {
+                               val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
+                       }
+               }
+       }
+
+       return val;
+}
+
+function getWidthOrHeight( elem, name, extra ) {
+
+       // Start with computed style
+       var valueIsBorderBox,
+               styles = getStyles( elem ),
+               val = curCSS( elem, name, styles ),
+               isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
+
+       // Computed unit is not pixels. Stop here and return.
+       if ( rnumnonpx.test( val ) ) {
+               return val;
+       }
+
+       // Check for style in case a browser which returns unreliable values
+       // for getComputedStyle silently falls back to the reliable elem.style
+       valueIsBorderBox = isBorderBox &&
+               ( support.boxSizingReliable() || val === elem.style[ name ] );
+
+       // Fall back to offsetWidth/Height when value is "auto"
+       // This happens for inline elements with no explicit setting (gh-3571)
+       if ( val === "auto" ) {
+               val = elem[ "offset" + name[ 0 ].toUpperCase() + name.slice( 1 ) ];
+       }
+
+       // Normalize "", auto, and prepare for extra
+       val = parseFloat( val ) || 0;
+
+       // Use the active box-sizing model to add/subtract irrelevant styles
+       return ( val +
+               augmentWidthOrHeight(
+                       elem,
+                       name,
+                       extra || ( isBorderBox ? "border" : "content" ),
+                       valueIsBorderBox,
+                       styles
+               )
+       ) + "px";
+}
+
+jQuery.extend( {
+
+       // Add in style property hooks for overriding the default
+       // behavior of getting and setting a style property
+       cssHooks: {
+               opacity: {
+                       get: function( elem, computed ) {
+                               if ( computed ) {
+
+                                       // We should always get a number back from opacity
+                                       var ret = curCSS( elem, "opacity" );
+                                       return ret === "" ? "1" : ret;
+                               }
+                       }
+               }
+       },
+
+       // Don't automatically add "px" to these possibly-unitless properties
+       cssNumber: {
+               "animationIterationCount": true,
+               "columnCount": true,
+               "fillOpacity": true,
+               "flexGrow": true,
+               "flexShrink": true,
+               "fontWeight": true,
+               "lineHeight": true,
+               "opacity": true,
+               "order": true,
+               "orphans": true,
+               "widows": true,
+               "zIndex": true,
+               "zoom": true
+       },
+
+       // Add in properties whose names you wish to fix before
+       // setting or getting the value
+       cssProps: {
+               "float": "cssFloat"
+       },
+
+       // Get and set the style property on a DOM Node
+       style: function( elem, name, value, extra ) {
+
+               // Don't set styles on text and comment nodes
+               if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
+                       return;
+               }
+
+               // Make sure that we're working with the right name
+               var ret, type, hooks,
+                       origName = jQuery.camelCase( name ),
+                       isCustomProp = rcustomProp.test( name ),
+                       style = elem.style;
+
+               // Make sure that we're working with the right name. We don't
+               // want to query the value if it is a CSS custom property
+               // since they are user-defined.
+               if ( !isCustomProp ) {
+                       name = finalPropName( origName );
+               }
+
+               // Gets hook for the prefixed version, then unprefixed version
+               hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
+
+               // Check if we're setting a value
+               if ( value !== undefined ) {
+                       type = typeof value;
+
+                       // Convert "+=" or "-=" to relative numbers (#7345)
+                       if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {
+                               value = adjustCSS( elem, name, ret );
+
+                               // Fixes bug #9237
+                               type = "number";
+                       }
+
+                       // Make sure that null and NaN values aren't set (#7116)
+                       if ( value == null || value !== value ) {
+                               return;
+                       }
+
+                       // If a number was passed in, add the unit (except for certain CSS properties)
+                       if ( type === "number" ) {
+                               value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" );
+                       }
+
+                       // background-* props affect original clone's values
+                       if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) {
+                               style[ name ] = "inherit";
+                       }
+
+                       // If a hook was provided, use that value, otherwise just set the specified value
+                       if ( !hooks || !( "set" in hooks ) ||
+                               ( value = hooks.set( elem, value, extra ) ) !== undefined ) {
+
+                               if ( isCustomProp ) {
+                                       style.setProperty( name, value );
+                               } else {
+                                       style[ name ] = value;
+                               }
+                       }
+
+               } else {
+
+                       // If a hook was provided get the non-computed value from there
+                       if ( hooks && "get" in hooks &&
+                               ( ret = hooks.get( elem, false, extra ) ) !== undefined ) {
+
+                               return ret;
+                       }
+
+                       // Otherwise just get the value from the style object
+                       return style[ name ];
+               }
+       },
+
+       css: function( elem, name, extra, styles ) {
+               var val, num, hooks,
+                       origName = jQuery.camelCase( name ),
+                       isCustomProp = rcustomProp.test( name );
+
+               // Make sure that we're working with the right name. We don't
+               // want to modify the value if it is a CSS custom property
+               // since they are user-defined.
+               if ( !isCustomProp ) {
+                       name = finalPropName( origName );
+               }
+
+               // Try prefixed name followed by the unprefixed name
+               hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
+
+               // If a hook was provided get the computed value from there
+               if ( hooks && "get" in hooks ) {
+                       val = hooks.get( elem, true, extra );
+               }
+
+               // Otherwise, if a way to get the computed value exists, use that
+               if ( val === undefined ) {
+                       val = curCSS( elem, name, styles );
+               }
+
+               // Convert "normal" to computed value
+               if ( val === "normal" && name in cssNormalTransform ) {
+                       val = cssNormalTransform[ name ];
+               }
+
+               // Make numeric if forced or a qualifier was provided and val looks numeric
+               if ( extra === "" || extra ) {
+                       num = parseFloat( val );
+                       return extra === true || isFinite( num ) ? num || 0 : val;
+               }
+
+               return val;
+       }
+} );
+
+jQuery.each( [ "height", "width" ], function( i, name ) {
+       jQuery.cssHooks[ name ] = {
+               get: function( elem, computed, extra ) {
+                       if ( computed ) {
+
+                               // Certain elements can have dimension info if we invisibly show them
+                               // but it must have a current display style that would benefit
+                               return rdisplayswap.test( jQuery.css( elem, "display" ) ) &&
+
+                                       // Support: Safari 8+
+                                       // Table columns in Safari have non-zero offsetWidth & zero
+                                       // getBoundingClientRect().width unless display is changed.
+                                       // Support: IE <=11 only
+                                       // Running getBoundingClientRect on a disconnected node
+                                       // in IE throws an error.
+                                       ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?
+                                               swap( elem, cssShow, function() {
+                                                       return getWidthOrHeight( elem, name, extra );
+                                               } ) :
+                                               getWidthOrHeight( elem, name, extra );
+                       }
+               },
+
+               set: function( elem, value, extra ) {
+                       var matches,
+                               styles = extra && getStyles( elem ),
+                               subtract = extra && augmentWidthOrHeight(
+                                       elem,
+                                       name,
+                                       extra,
+                                       jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
+                                       styles
+                               );
+
+                       // Convert to pixels if value adjustment is needed
+                       if ( subtract && ( matches = rcssNum.exec( value ) ) &&
+                               ( matches[ 3 ] || "px" ) !== "px" ) {
+
+                               elem.style[ name ] = value;
+                               value = jQuery.css( elem, name );
+                       }
+
+                       return setPositiveNumber( elem, value, subtract );
+               }
+       };
+} );
+
+jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,
+       function( elem, computed ) {
+               if ( computed ) {
+                       return ( parseFloat( curCSS( elem, "marginLeft" ) ) ||
+                               elem.getBoundingClientRect().left -
+                                       swap( elem, { marginLeft: 0 }, function() {
+                                               return elem.getBoundingClientRect().left;
+                                       } )
+                               ) + "px";
+               }
+       }
+);
+
+// These hooks are used by animate to expand properties
+jQuery.each( {
+       margin: "",
+       padding: "",
+       border: "Width"
+}, function( prefix, suffix ) {
+       jQuery.cssHooks[ prefix + suffix ] = {
+               expand: function( value ) {
+                       var i = 0,
+                               expanded = {},
+
+                               // Assumes a single number if not a string
+                               parts = typeof value === "string" ? value.split( " " ) : [ value ];
+
+                       for ( ; i < 4; i++ ) {
+                               expanded[ prefix + cssExpand[ i ] + suffix ] =
+                                       parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
+                       }
+
+                       return expanded;
+               }
+       };
+
+       if ( !rmargin.test( prefix ) ) {
+               jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
+       }
+} );
+
+jQuery.fn.extend( {
+       css: function( name, value ) {
+               return access( this, function( elem, name, value ) {
+                       var styles, len,
+                               map = {},
+                               i = 0;
+
+                       if ( Array.isArray( name ) ) {
+                               styles = getStyles( elem );
+                               len = name.length;
+
+                               for ( ; i < len; i++ ) {
+                                       map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
+                               }
+
+                               return map;
+                       }
+
+                       return value !== undefined ?
+                               jQuery.style( elem, name, value ) :
+                               jQuery.css( elem, name );
+               }, name, value, arguments.length > 1 );
+       }
+} );
+
+return jQuery;
+} );
diff --git a/js/jquery/src/css/addGetHookIf.js b/js/jquery/src/css/addGetHookIf.js
new file mode 100644 (file)
index 0000000..e4bb49a
--- /dev/null
@@ -0,0 +1,26 @@
+define( function() {
+
+"use strict";
+
+function addGetHookIf( conditionFn, hookFn ) {
+
+       // Define the hook, we'll check on the first run if it's really needed.
+       return {
+               get: function() {
+                       if ( conditionFn() ) {
+
+                               // Hook not needed (or it's not possible to use it due
+                               // to missing dependency), remove it.
+                               delete this.get;
+                               return;
+                       }
+
+                       // Hook needed; redefine it so that the support test is not executed again.
+                       return ( this.get = hookFn ).apply( this, arguments );
+               }
+       };
+}
+
+return addGetHookIf;
+
+} );
diff --git a/js/jquery/src/css/adjustCSS.js b/js/jquery/src/css/adjustCSS.js
new file mode 100644 (file)
index 0000000..ded3a16
--- /dev/null
@@ -0,0 +1,71 @@
+define( [
+       "../core",
+       "../var/rcssNum"
+], function( jQuery, rcssNum ) {
+
+"use strict";
+
+function adjustCSS( elem, prop, valueParts, tween ) {
+       var adjusted,
+               scale = 1,
+               maxIterations = 20,
+               currentValue = tween ?
+                       function() {
+                               return tween.cur();
+                       } :
+                       function() {
+                               return jQuery.css( elem, prop, "" );
+                       },
+               initial = currentValue(),
+               unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),
+
+               // Starting value computation is required for potential unit mismatches
+               initialInUnit = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) &&
+                       rcssNum.exec( jQuery.css( elem, prop ) );
+
+       if ( initialInUnit && initialInUnit[ 3 ] !== unit ) {
+
+               // Trust units reported by jQuery.css
+               unit = unit || initialInUnit[ 3 ];
+
+               // Make sure we update the tween properties later on
+               valueParts = valueParts || [];
+
+               // Iteratively approximate from a nonzero starting point
+               initialInUnit = +initial || 1;
+
+               do {
+
+                       // If previous iteration zeroed out, double until we get *something*.
+                       // Use string for doubling so we don't accidentally see scale as unchanged below
+                       scale = scale || ".5";
+
+                       // Adjust and apply
+                       initialInUnit = initialInUnit / scale;
+                       jQuery.style( elem, prop, initialInUnit + unit );
+
+               // Update scale, tolerating zero or NaN from tween.cur()
+               // Break the loop if scale is unchanged or perfect, or if we've just had enough.
+               } while (
+                       scale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations
+               );
+       }
+
+       if ( valueParts ) {
+               initialInUnit = +initialInUnit || +initial || 0;
+
+               // Apply relative offset (+=/-=) if specified
+               adjusted = valueParts[ 1 ] ?
+                       initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :
+                       +valueParts[ 2 ];
+               if ( tween ) {
+                       tween.unit = unit;
+                       tween.start = initialInUnit;
+                       tween.end = adjusted;
+               }
+       }
+       return adjusted;
+}
+
+return adjustCSS;
+} );
diff --git a/js/jquery/src/css/curCSS.js b/js/jquery/src/css/curCSS.js
new file mode 100644 (file)
index 0000000..01ccad3
--- /dev/null
@@ -0,0 +1,65 @@
+define( [
+       "../core",
+       "./var/rnumnonpx",
+       "./var/rmargin",
+       "./var/getStyles",
+       "./support",
+       "../selector" // Get jQuery.contains
+], function( jQuery, rnumnonpx, rmargin, getStyles, support ) {
+
+"use strict";
+
+function curCSS( elem, name, computed ) {
+       var width, minWidth, maxWidth, ret,
+
+               // Support: Firefox 51+
+               // Retrieving style before computed somehow
+               // fixes an issue with getting wrong values
+               // on detached elements
+               style = elem.style;
+
+       computed = computed || getStyles( elem );
+
+       // getPropertyValue is needed for:
+       //   .css('filter') (IE 9 only, #12537)
+       //   .css('--customProperty) (#3144)
+       if ( computed ) {
+               ret = computed.getPropertyValue( name ) || computed[ name ];
+
+               if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
+                       ret = jQuery.style( elem, name );
+               }
+
+               // A tribute to the "awesome hack by Dean Edwards"
+               // Android Browser returns percentage for some values,
+               // but width seems to be reliably pixels.
+               // This is against the CSSOM draft spec:
+               // https://drafts.csswg.org/cssom/#resolved-values
+               if ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) {
+
+                       // Remember the original values
+                       width = style.width;
+                       minWidth = style.minWidth;
+                       maxWidth = style.maxWidth;
+
+                       // Put in the new values to get a computed value out
+                       style.minWidth = style.maxWidth = style.width = ret;
+                       ret = computed.width;
+
+                       // Revert the changed values
+                       style.width = width;
+                       style.minWidth = minWidth;
+                       style.maxWidth = maxWidth;
+               }
+       }
+
+       return ret !== undefined ?
+
+               // Support: IE <=9 - 11 only
+               // IE returns zIndex value as an integer.
+               ret + "" :
+               ret;
+}
+
+return curCSS;
+} );
diff --git a/js/jquery/src/css/hiddenVisibleSelectors.js b/js/jquery/src/css/hiddenVisibleSelectors.js
new file mode 100644 (file)
index 0000000..d7a9339
--- /dev/null
@@ -0,0 +1,15 @@
+define( [
+       "../core",
+       "../selector"
+], function( jQuery ) {
+
+"use strict";
+
+jQuery.expr.pseudos.hidden = function( elem ) {
+       return !jQuery.expr.pseudos.visible( elem );
+};
+jQuery.expr.pseudos.visible = function( elem ) {
+       return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );
+};
+
+} );
diff --git a/js/jquery/src/css/showHide.js b/js/jquery/src/css/showHide.js
new file mode 100644 (file)
index 0000000..3eeafef
--- /dev/null
@@ -0,0 +1,105 @@
+define( [
+       "../core",
+       "../data/var/dataPriv",
+       "../css/var/isHiddenWithinTree"
+], function( jQuery, dataPriv, isHiddenWithinTree ) {
+
+"use strict";
+
+var defaultDisplayMap = {};
+
+function getDefaultDisplay( elem ) {
+       var temp,
+               doc = elem.ownerDocument,
+               nodeName = elem.nodeName,
+               display = defaultDisplayMap[ nodeName ];
+
+       if ( display ) {
+               return display;
+       }
+
+       temp = doc.body.appendChild( doc.createElement( nodeName ) );
+       display = jQuery.css( temp, "display" );
+
+       temp.parentNode.removeChild( temp );
+
+       if ( display === "none" ) {
+               display = "block";
+       }
+       defaultDisplayMap[ nodeName ] = display;
+
+       return display;
+}
+
+function showHide( elements, show ) {
+       var display, elem,
+               values = [],
+               index = 0,
+               length = elements.length;
+
+       // Determine new display value for elements that need to change
+       for ( ; index < length; index++ ) {
+               elem = elements[ index ];
+               if ( !elem.style ) {
+                       continue;
+               }
+
+               display = elem.style.display;
+               if ( show ) {
+
+                       // Since we force visibility upon cascade-hidden elements, an immediate (and slow)
+                       // check is required in this first loop unless we have a nonempty display value (either
+                       // inline or about-to-be-restored)
+                       if ( display === "none" ) {
+                               values[ index ] = dataPriv.get( elem, "display" ) || null;
+                               if ( !values[ index ] ) {
+                                       elem.style.display = "";
+                               }
+                       }
+                       if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) {
+                               values[ index ] = getDefaultDisplay( elem );
+                       }
+               } else {
+                       if ( display !== "none" ) {
+                               values[ index ] = "none";
+
+                               // Remember what we're overwriting
+                               dataPriv.set( elem, "display", display );
+                       }
+               }
+       }
+
+       // Set the display of the elements in a second loop to avoid constant reflow
+       for ( index = 0; index < length; index++ ) {
+               if ( values[ index ] != null ) {
+                       elements[ index ].style.display = values[ index ];
+               }
+       }
+
+       return elements;
+}
+
+jQuery.fn.extend( {
+       show: function() {
+               return showHide( this, true );
+       },
+       hide: function() {
+               return showHide( this );
+       },
+       toggle: function( state ) {
+               if ( typeof state === "boolean" ) {
+                       return state ? this.show() : this.hide();
+               }
+
+               return this.each( function() {
+                       if ( isHiddenWithinTree( this ) ) {
+                               jQuery( this ).show();
+                       } else {
+                               jQuery( this ).hide();
+                       }
+               } );
+       }
+} );
+
+return showHide;
+} );
diff --git a/js/jquery/src/css/support.js b/js/jquery/src/css/support.js
new file mode 100644 (file)
index 0000000..883d0e5
--- /dev/null
@@ -0,0 +1,89 @@
+define( [
+       "../core",
+       "../var/document",
+       "../var/documentElement",
+       "../var/support"
+], function( jQuery, document, documentElement, support ) {
+
+"use strict";
+
+( function() {
+
+       // Executing both pixelPosition & boxSizingReliable tests require only one layout
+       // so they're executed at the same time to save the second computation.
+       function computeStyleTests() {
+
+               // This is a singleton, we need to execute it only once
+               if ( !div ) {
+                       return;
+               }
+
+               div.style.cssText =
+                       "box-sizing:border-box;" +
+                       "position:relative;display:block;" +
+                       "margin:auto;border:1px;padding:1px;" +
+                       "top:1%;width:50%";
+               div.innerHTML = "";
+               documentElement.appendChild( container );
+
+               var divStyle = window.getComputedStyle( div );
+               pixelPositionVal = divStyle.top !== "1%";
+
+               // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44
+               reliableMarginLeftVal = divStyle.marginLeft === "2px";
+               boxSizingReliableVal = divStyle.width === "4px";
+
+               // Support: Android 4.0 - 4.3 only
+               // Some styles come back with percentage values, even though they shouldn't
+               div.style.marginRight = "50%";
+               pixelMarginRightVal = divStyle.marginRight === "4px";
+
+               documentElement.removeChild( container );
+
+               // Nullify the div so it wouldn't be stored in the memory and
+               // it will also be a sign that checks already performed
+               div = null;
+       }
+
+       var pixelPositionVal, boxSizingReliableVal, pixelMarginRightVal, reliableMarginLeftVal,
+               container = document.createElement( "div" ),
+               div = document.createElement( "div" );
+
+       // Finish early in limited (non-browser) environments
+       if ( !div.style ) {
+               return;
+       }
+
+       // Support: IE <=9 - 11 only
+       // Style of cloned element affects source element cloned (#8908)
+       div.style.backgroundClip = "content-box";
+       div.cloneNode( true ).style.backgroundClip = "";
+       support.clearCloneStyle = div.style.backgroundClip === "content-box";
+
+       container.style.cssText = "border:0;width:8px;height:0;top:0;left:-9999px;" +
+               "padding:0;margin-top:1px;position:absolute";
+       container.appendChild( div );
+
+       jQuery.extend( support, {
+               pixelPosition: function() {
+                       computeStyleTests();
+                       return pixelPositionVal;
+               },
+               boxSizingReliable: function() {
+                       computeStyleTests();
+                       return boxSizingReliableVal;
+               },
+               pixelMarginRight: function() {
+                       computeStyleTests();
+                       return pixelMarginRightVal;
+               },
+               reliableMarginLeft: function() {
+                       computeStyleTests();
+                       return reliableMarginLeftVal;
+               }
+       } );
+} )();
+
+return support;
+
+} );
diff --git a/js/jquery/src/css/var/cssExpand.js b/js/jquery/src/css/var/cssExpand.js
new file mode 100644 (file)
index 0000000..dd2007c
--- /dev/null
@@ -0,0 +1,5 @@
+define( function() {
+       "use strict";
+
+       return [ "Top", "Right", "Bottom", "Left" ];
+} );
diff --git a/js/jquery/src/css/var/getStyles.js b/js/jquery/src/css/var/getStyles.js
new file mode 100644 (file)
index 0000000..0b893ac
--- /dev/null
@@ -0,0 +1,17 @@
+define( function() {
+       "use strict";
+
+       return function( elem ) {
+
+               // Support: IE <=11 only, Firefox <=30 (#15098, #14150)
+               // IE throws on elements created in popups
+               // FF meanwhile throws on frame elements through "defaultView.getComputedStyle"
+               var view = elem.ownerDocument.defaultView;
+
+               if ( !view || !view.opener ) {
+                       view = window;
+               }
+
+               return view.getComputedStyle( elem );
+       };
+} );
diff --git a/js/jquery/src/css/var/isHiddenWithinTree.js b/js/jquery/src/css/var/isHiddenWithinTree.js
new file mode 100644 (file)
index 0000000..3cfb93e
--- /dev/null
@@ -0,0 +1,34 @@
+define( [
+       "../../core",
+       "../../selector"
+
+       // css is assumed
+], function( jQuery ) {
+       "use strict";
+
+       // isHiddenWithinTree reports if an element has a non-"none" display style (inline and/or
+       // through the CSS cascade), which is useful in deciding whether or not to make it visible.
+       // It differs from the :hidden selector (jQuery.expr.pseudos.hidden) in two important ways:
+       // * A hidden ancestor does not force an element to be classified as hidden.
+       // * Being disconnected from the document does not force an element to be classified as hidden.
+       // These differences improve the behavior of .toggle() et al. when applied to elements that are
+       // detached or contained within hidden ancestors (gh-2404, gh-2863).
+       return function( elem, el ) {
+
+               // isHiddenWithinTree might be called from jQuery#filter function;
+               // in that case, element will be second argument
+               elem = el || elem;
+
+               // Inline style trumps all
+               return elem.style.display === "none" ||
+                       elem.style.display === "" &&
+
+                       // Otherwise, check computed style
+                       // Support: Firefox <=43 - 45
+                       // Disconnected elements can have computed display: none, so first confirm that elem is
+                       // in the document.
+                       jQuery.contains( elem.ownerDocument, elem ) &&
+
+                       jQuery.css( elem, "display" ) === "none";
+       };
+} );
diff --git a/js/jquery/src/css/var/rmargin.js b/js/jquery/src/css/var/rmargin.js
new file mode 100644 (file)
index 0000000..0fbfbd8
--- /dev/null
@@ -0,0 +1,5 @@
+define( function() {
+       "use strict";
+
+       return ( /^margin/ );
+} );
diff --git a/js/jquery/src/css/var/rnumnonpx.js b/js/jquery/src/css/var/rnumnonpx.js
new file mode 100644 (file)
index 0000000..056cda7
--- /dev/null
@@ -0,0 +1,7 @@
+define( [
+       "../../var/pnum"
+], function( pnum ) {
+       "use strict";
+
+       return new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );
+} );
diff --git a/js/jquery/src/css/var/swap.js b/js/jquery/src/css/var/swap.js
new file mode 100644 (file)
index 0000000..1a9556b
--- /dev/null
@@ -0,0 +1,26 @@
+define( function() {
+
+"use strict";
+
+// A method for quickly swapping in/out CSS properties to get correct calculations.
+return function( elem, options, callback, args ) {
+       var ret, name,
+               old = {};
+
+       // Remember the old values, and insert the new ones
+       for ( name in options ) {
+               old[ name ] = elem.style[ name ];
+               elem.style[ name ] = options[ name ];
+       }
+
+       ret = callback.apply( elem, args || [] );
+
+       // Revert the old values
+       for ( name in options ) {
+               elem.style[ name ] = old[ name ];
+       }
+
+       return ret;
+};
+
+} );
diff --git a/js/jquery/src/data.js b/js/jquery/src/data.js
new file mode 100644 (file)
index 0000000..087ce4e
--- /dev/null
@@ -0,0 +1,179 @@
+define( [
+       "./core",
+       "./core/access",
+       "./data/var/dataPriv",
+       "./data/var/dataUser"
+], function( jQuery, access, dataPriv, dataUser ) {
+
+"use strict";
+
+//     Implementation Summary
+//
+//     1. Enforce API surface and semantic compatibility with 1.9.x branch
+//     2. Improve the module's maintainability by reducing the storage
+//             paths to a single mechanism.
+//     3. Use the same single mechanism to support "private" and "user" data.
+//     4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData)
+//     5. Avoid exposing implementation details on user objects (eg. expando properties)
+//     6. Provide a clear path for implementation upgrade to WeakMap in 2014
+
+var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
+       rmultiDash = /[A-Z]/g;
+
+function getData( data ) {
+       if ( data === "true" ) {
+               return true;
+       }
+
+       if ( data === "false" ) {
+               return false;
+       }
+
+       if ( data === "null" ) {
+               return null;
+       }
+
+       // Only convert to a number if it doesn't change the string
+       if ( data === +data + "" ) {
+               return +data;
+       }
+
+       if ( rbrace.test( data ) ) {
+               return JSON.parse( data );
+       }
+
+       return data;
+}
+
+function dataAttr( elem, key, data ) {
+       var name;
+
+       // If nothing was found internally, try to fetch any
+       // data from the HTML5 data-* attribute
+       if ( data === undefined && elem.nodeType === 1 ) {
+               name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase();
+               data = elem.getAttribute( name );
+
+               if ( typeof data === "string" ) {
+                       try {
+                               data = getData( data );
+                       } catch ( e ) {}
+
+                       // Make sure we set the data so it isn't changed later
+                       dataUser.set( elem, key, data );
+               } else {
+                       data = undefined;
+               }
+       }
+       return data;
+}
+
+jQuery.extend( {
+       hasData: function( elem ) {
+               return dataUser.hasData( elem ) || dataPriv.hasData( elem );
+       },
+
+       data: function( elem, name, data ) {
+               return dataUser.access( elem, name, data );
+       },
+
+       removeData: function( elem, name ) {
+               dataUser.remove( elem, name );
+       },
+
+       // TODO: Now that all calls to _data and _removeData have been replaced
+       // with direct calls to dataPriv methods, these can be deprecated.
+       _data: function( elem, name, data ) {
+               return dataPriv.access( elem, name, data );
+       },
+
+       _removeData: function( elem, name ) {
+               dataPriv.remove( elem, name );
+       }
+} );
+
+jQuery.fn.extend( {
+       data: function( key, value ) {
+               var i, name, data,
+                       elem = this[ 0 ],
+                       attrs = elem && elem.attributes;
+
+               // Gets all values
+               if ( key === undefined ) {
+                       if ( this.length ) {
+                               data = dataUser.get( elem );
+
+                               if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) {
+                                       i = attrs.length;
+                                       while ( i-- ) {
+
+                                               // Support: IE 11 only
+                                               // The attrs elements can be null (#14894)
+                                               if ( attrs[ i ] ) {
+                                                       name = attrs[ i ].name;
+                                                       if ( name.indexOf( "data-" ) === 0 ) {
+                                                               name = jQuery.camelCase( name.slice( 5 ) );
+                                                               dataAttr( elem, name, data[ name ] );
+                                                       }
+                                               }
+                                       }
+                                       dataPriv.set( elem, "hasDataAttrs", true );
+                               }
+                       }
+
+                       return data;
+               }
+
+               // Sets multiple values
+               if ( typeof key === "object" ) {
+                       return this.each( function() {
+                               dataUser.set( this, key );
+                       } );
+               }
+
+               return access( this, function( value ) {
+                       var data;
+
+                       // The calling jQuery object (element matches) is not empty
+                       // (and therefore has an element appears at this[ 0 ]) and the
+                       // `value` parameter was not undefined. An empty jQuery object
+                       // will result in `undefined` for elem = this[ 0 ] which will
+                       // throw an exception if an attempt to read a data cache is made.
+                       if ( elem && value === undefined ) {
+
+                               // Attempt to get data from the cache
+                               // The key will always be camelCased in Data
+                               data = dataUser.get( elem, key );
+                               if ( data !== undefined ) {
+                                       return data;
+                               }
+
+                               // Attempt to "discover" the data in
+                               // HTML5 custom data-* attrs
+                               data = dataAttr( elem, key );
+                               if ( data !== undefined ) {
+                                       return data;
+                               }
+
+                               // We tried really hard, but the data doesn't exist.
+                               return;
+                       }
+
+                       // Set the data...
+                       this.each( function() {
+
+                               // We always store the camelCased key
+                               dataUser.set( this, key, value );
+                       } );
+               }, null, value, arguments.length > 1, null, true );
+       },
+
+       removeData: function( key ) {
+               return this.each( function() {
+                       dataUser.remove( this, key );
+               } );
+       }
+} );
+
+return jQuery;
+} );
diff --git a/js/jquery/src/data/Data.js b/js/jquery/src/data/Data.js
new file mode 100644 (file)
index 0000000..8c856c0
--- /dev/null
@@ -0,0 +1,161 @@
+define( [
+       "../core",
+       "../var/rnothtmlwhite",
+       "./var/acceptData"
+], function( jQuery, rnothtmlwhite, acceptData ) {
+
+"use strict";
+
+function Data() {
+       this.expando = jQuery.expando + Data.uid++;
+}
+
+Data.uid = 1;
+
+Data.prototype = {
+
+       cache: function( owner ) {
+
+               // Check if the owner object already has a cache
+               var value = owner[ this.expando ];
+
+               // If not, create one
+               if ( !value ) {
+                       value = {};
+
+                       // We can accept data for non-element nodes in modern browsers,
+                       // but we should not, see #8335.
+                       // Always return an empty object.
+                       if ( acceptData( owner ) ) {
+
+                               // If it is a node unlikely to be stringify-ed or looped over
+                               // use plain assignment
+                               if ( owner.nodeType ) {
+                                       owner[ this.expando ] = value;
+
+                               // Otherwise secure it in a non-enumerable property
+                               // configurable must be true to allow the property to be
+                               // deleted when data is removed
+                               } else {
+                                       Object.defineProperty( owner, this.expando, {
+                                               value: value,
+                                               configurable: true
+                                       } );
+                               }
+                       }
+               }
+
+               return value;
+       },
+       set: function( owner, data, value ) {
+               var prop,
+                       cache = this.cache( owner );
+
+               // Handle: [ owner, key, value ] args
+               // Always use camelCase key (gh-2257)
+               if ( typeof data === "string" ) {
+                       cache[ jQuery.camelCase( data ) ] = value;
+
+               // Handle: [ owner, { properties } ] args
+               } else {
+
+                       // Copy the properties one-by-one to the cache object
+                       for ( prop in data ) {
+                               cache[ jQuery.camelCase( prop ) ] = data[ prop ];
+                       }
+               }
+               return cache;
+       },
+       get: function( owner, key ) {
+               return key === undefined ?
+                       this.cache( owner ) :
+
+                       // Always use camelCase key (gh-2257)
+                       owner[ this.expando ] && owner[ this.expando ][ jQuery.camelCase( key ) ];
+       },
+       access: function( owner, key, value ) {
+
+               // In cases where either:
+               //
+               //   1. No key was specified
+               //   2. A string key was specified, but no value provided
+               //
+               // Take the "read" path and allow the get method to determine
+               // which value to return, respectively either:
+               //
+               //   1. The entire cache object
+               //   2. The data stored at the key
+               //
+               if ( key === undefined ||
+                               ( ( key && typeof key === "string" ) && value === undefined ) ) {
+
+                       return this.get( owner, key );
+               }
+
+               // When the key is not a string, or both a key and value
+               // are specified, set or extend (existing objects) with either:
+               //
+               //   1. An object of properties
+               //   2. A key and value
+               //
+               this.set( owner, key, value );
+
+               // Since the "set" path can have two possible entry points
+               // return the expected data based on which path was taken[*]
+               return value !== undefined ? value : key;
+       },
+       remove: function( owner, key ) {
+               var i,
+                       cache = owner[ this.expando ];
+
+               if ( cache === undefined ) {
+                       return;
+               }
+
+               if ( key !== undefined ) {
+
+                       // Support array or space separated string of keys
+                       if ( Array.isArray( key ) ) {
+
+                               // If key is an array of keys...
+                               // We always set camelCase keys, so remove that.
+                               key = key.map( jQuery.camelCase );
+                       } else {
+                               key = jQuery.camelCase( key );
+
+                               // If a key with the spaces exists, use it.
+                               // Otherwise, create an array by matching non-whitespace
+                               key = key in cache ?
+                                       [ key ] :
+                                       ( key.match( rnothtmlwhite ) || [] );
+                       }
+
+                       i = key.length;
+
+                       while ( i-- ) {
+                               delete cache[ key[ i ] ];
+                       }
+               }
+
+               // Remove the expando if there's no more data
+               if ( key === undefined || jQuery.isEmptyObject( cache ) ) {
+
+                       // Support: Chrome <=35 - 45
+                       // Webkit & Blink performance suffers when deleting properties
+                       // from DOM nodes, so set to undefined instead
+                       // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)
+                       if ( owner.nodeType ) {
+                               owner[ this.expando ] = undefined;
+                       } else {
+                               delete owner[ this.expando ];
+                       }
+               }
+       },
+       hasData: function( owner ) {
+               var cache = owner[ this.expando ];
+               return cache !== undefined && !jQuery.isEmptyObject( cache );
+       }
+};
+
+return Data;
+} );
diff --git a/js/jquery/src/data/var/acceptData.js b/js/jquery/src/data/var/acceptData.js
new file mode 100644 (file)
index 0000000..e00f753
--- /dev/null
@@ -0,0 +1,19 @@
+define( function() {
+
+"use strict";
+
+/**
+ * Determines whether an object can have data
+ */
+return function( owner ) {
+
+       // Accepts only:
+       //  - Node
+       //    - Node.ELEMENT_NODE
+       //    - Node.DOCUMENT_NODE
+       //  - Object
+       //    - Any
+       return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );
+};
+
+} );
diff --git a/js/jquery/src/data/var/dataPriv.js b/js/jquery/src/data/var/dataPriv.js
new file mode 100644 (file)
index 0000000..72713c8
--- /dev/null
@@ -0,0 +1,7 @@
+define( [
+       "../Data"
+], function( Data ) {
+       "use strict";
+
+       return new Data();
+} );
diff --git a/js/jquery/src/data/var/dataUser.js b/js/jquery/src/data/var/dataUser.js
new file mode 100644 (file)
index 0000000..72713c8
--- /dev/null
@@ -0,0 +1,7 @@
+define( [
+       "../Data"
+], function( Data ) {
+       "use strict";
+
+       return new Data();
+} );
diff --git a/js/jquery/src/deferred.js b/js/jquery/src/deferred.js
new file mode 100644 (file)
index 0000000..7e2ced2
--- /dev/null
@@ -0,0 +1,391 @@
+define( [
+       "./core",
+       "./var/slice",
+       "./callbacks"
+], function( jQuery, slice ) {
+
+"use strict";
+
+function Identity( v ) {
+       return v;
+}
+function Thrower( ex ) {
+       throw ex;
+}
+
+function adoptValue( value, resolve, reject, noValue ) {
+       var method;
+
+       try {
+
+               // Check for promise aspect first to privilege synchronous behavior
+               if ( value && jQuery.isFunction( ( method = value.promise ) ) ) {
+                       method.call( value ).done( resolve ).fail( reject );
+
+               // Other thenables
+               } else if ( value && jQuery.isFunction( ( method = value.then ) ) ) {
+                       method.call( value, resolve, reject );
+
+               // Other non-thenables
+               } else {
+
+                       // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:
+                       // * false: [ value ].slice( 0 ) => resolve( value )
+                       // * true: [ value ].slice( 1 ) => resolve()
+                       resolve.apply( undefined, [ value ].slice( noValue ) );
+               }
+
+       // For Promises/A+, convert exceptions into rejections
+       // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in
+       // Deferred#then to conditionally suppress rejection.
+       } catch ( value ) {
+
+               // Support: Android 4.0 only
+               // Strict mode functions invoked without .call/.apply get global-object context
+               reject.apply( undefined, [ value ] );
+       }
+}
+
+jQuery.extend( {
+
+       Deferred: function( func ) {
+               var tuples = [
+
+                               // action, add listener, callbacks,
+                               // ... .then handlers, argument index, [final state]
+                               [ "notify", "progress", jQuery.Callbacks( "memory" ),
+                                       jQuery.Callbacks( "memory" ), 2 ],
+                               [ "resolve", "done", jQuery.Callbacks( "once memory" ),
+                                       jQuery.Callbacks( "once memory" ), 0, "resolved" ],
+                               [ "reject", "fail", jQuery.Callbacks( "once memory" ),
+                                       jQuery.Callbacks( "once memory" ), 1, "rejected" ]
+                       ],
+                       state = "pending",
+                       promise = {
+                               state: function() {
+                                       return state;
+                               },
+                               always: function() {
+                                       deferred.done( arguments ).fail( arguments );
+                                       return this;
+                               },
+                               "catch": function( fn ) {
+                                       return promise.then( null, fn );
+                               },
+
+                               // Keep pipe for back-compat
+                               pipe: function( /* fnDone, fnFail, fnProgress */ ) {
+                                       var fns = arguments;
+
+                                       return jQuery.Deferred( function( newDefer ) {
+                                               jQuery.each( tuples, function( i, tuple ) {
+
+                                                       // Map tuples (progress, done, fail) to arguments (done, fail, progress)
+                                                       var fn = jQuery.isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];
+
+                                                       // deferred.progress(function() { bind to newDefer or newDefer.notify })
+                                                       // deferred.done(function() { bind to newDefer or newDefer.resolve })
+                                                       // deferred.fail(function() { bind to newDefer or newDefer.reject })
+                                                       deferred[ tuple[ 1 ] ]( function() {
+                                                               var returned = fn && fn.apply( this, arguments );
+                                                               if ( returned && jQuery.isFunction( returned.promise ) ) {
+                                                                       returned.promise()
+                                                                               .progress( newDefer.notify )
+                                                                               .done( newDefer.resolve )
+                                                                               .fail( newDefer.reject );
+                                                               } else {
+                                                                       newDefer[ tuple[ 0 ] + "With" ](
+                                                                               this,
+                                                                               fn ? [ returned ] : arguments
+                                                                       );
+                                                               }
+                                                       } );
+                                               } );
+                                               fns = null;
+                                       } ).promise();
+                               },
+                               then: function( onFulfilled, onRejected, onProgress ) {
+                                       var maxDepth = 0;
+                                       function resolve( depth, deferred, handler, special ) {
+                                               return function() {
+                                                       var that = this,
+                                                               args = arguments,
+                                                               mightThrow = function() {
+                                                                       var returned, then;
+
+                                                                       // Support: Promises/A+ section 2.3.3.3.3
+                                                                       // https://promisesaplus.com/#point-59
+                                                                       // Ignore double-resolution attempts
+                                                                       if ( depth < maxDepth ) {
+                                                                               return;
+                                                                       }
+
+                                                                       returned = handler.apply( that, args );
+
+                                                                       // Support: Promises/A+ section 2.3.1
+                                                                       // https://promisesaplus.com/#point-48
+                                                                       if ( returned === deferred.promise() ) {
+                                                                               throw new TypeError( "Thenable self-resolution" );
+                                                                       }
+
+                                                                       // Support: Promises/A+ sections 2.3.3.1, 3.5
+                                                                       // https://promisesaplus.com/#point-54
+                                                                       // https://promisesaplus.com/#point-75
+                                                                       // Retrieve `then` only once
+                                                                       then = returned &&
+
+                                                                               // Support: Promises/A+ section 2.3.4
+                                                                               // https://promisesaplus.com/#point-64
+                                                                               // Only check objects and functions for thenability
+                                                                               ( typeof returned === "object" ||
+                                                                                       typeof returned === "function" ) &&
+                                                                               returned.then;
+
+                                                                       // Handle a returned thenable
+                                                                       if ( jQuery.isFunction( then ) ) {
+
+                                                                               // Special processors (notify) just wait for resolution
+                                                                               if ( special ) {
+                                                                                       then.call(
+                                                                                               returned,
+                                                                                               resolve( maxDepth, deferred, Identity, special ),
+                                                                                               resolve( maxDepth, deferred, Thrower, special )
+                                                                                       );
+
+                                                                               // Normal processors (resolve) also hook into progress
+                                                                               } else {
+
+                                                                                       // ...and disregard older resolution values
+                                                                                       maxDepth++;
+
+                                                                                       then.call(
+                                                                                               returned,
+                                                                                               resolve( maxDepth, deferred, Identity, special ),
+                                                                                               resolve( maxDepth, deferred, Thrower, special ),
+                                                                                               resolve( maxDepth, deferred, Identity,
+                                                                                                       deferred.notifyWith )
+                                                                                       );
+                                                                               }
+
+                                                                       // Handle all other returned values
+                                                                       } else {
+
+                                                                               // Only substitute handlers pass on context
+                                                                               // and multiple values (non-spec behavior)
+                                                                               if ( handler !== Identity ) {
+                                                                                       that = undefined;
+                                                                                       args = [ returned ];
+                                                                               }
+
+                                                                               // Process the value(s)
+                                                                               // Default process is resolve
+                                                                               ( special || deferred.resolveWith )( that, args );
+                                                                       }
+                                                               },
+
+                                                               // Only normal processors (resolve) catch and reject exceptions
+                                                               process = special ?
+                                                                       mightThrow :
+                                                                       function() {
+                                                                               try {
+                                                                                       mightThrow();
+                                                                               } catch ( e ) {
+
+                                                                                       if ( jQuery.Deferred.exceptionHook ) {
+                                                                                               jQuery.Deferred.exceptionHook( e,
+                                                                                                       process.stackTrace );
+                                                                                       }
+
+                                                                                       // Support: Promises/A+ section 2.3.3.3.4.1
+                                                                                       // https://promisesaplus.com/#point-61
+                                                                                       // Ignore post-resolution exceptions
+                                                                                       if ( depth + 1 >= maxDepth ) {
+
+                                                                                               // Only substitute handlers pass on context
+                                                                                               // and multiple values (non-spec behavior)
+                                                                                               if ( handler !== Thrower ) {
+                                                                                                       that = undefined;
+                                                                                                       args = [ e ];
+                                                                                               }
+
+                                                                                               deferred.rejectWith( that, args );
+                                                                                       }
+                                                                               }
+                                                                       };
+
+                                                       // Support: Promises/A+ section 2.3.3.3.1
+                                                       // https://promisesaplus.com/#point-57
+                                                       // Re-resolve promises immediately to dodge false rejection from
+                                                       // subsequent errors
+                                                       if ( depth ) {
+                                                               process();
+                                                       } else {
+
+                                                               // Call an optional hook to record the stack, in case of exception
+                                                               // since it's otherwise lost when execution goes async
+                                                               if ( jQuery.Deferred.getStackHook ) {
+                                                                       process.stackTrace = jQuery.Deferred.getStackHook();
+                                                               }
+                                                               window.setTimeout( process );
+                                                       }
+                                               };
+                                       }
+
+                                       return jQuery.Deferred( function( newDefer ) {
+
+                                               // progress_handlers.add( ... )
+                                               tuples[ 0 ][ 3 ].add(
+                                                       resolve(
+                                                               0,
+                                                               newDefer,
+                                                               jQuery.isFunction( onProgress ) ?
+                                                                       onProgress :
+                                                                       Identity,
+                                                               newDefer.notifyWith
+                                                       )
+                                               );
+
+                                               // fulfilled_handlers.add( ... )
+                                               tuples[ 1 ][ 3 ].add(
+                                                       resolve(
+                                                               0,
+                                                               newDefer,
+                                                               jQuery.isFunction( onFulfilled ) ?
+                                                                       onFulfilled :
+                                                                       Identity
+                                                       )
+                                               );
+
+                                               // rejected_handlers.add( ... )
+                                               tuples[ 2 ][ 3 ].add(
+                                                       resolve(
+                                                               0,
+                                                               newDefer,
+                                                               jQuery.isFunction( onRejected ) ?
+                                                                       onRejected :
+                                                                       Thrower
+                                                       )
+                                               );
+                                       } ).promise();
+                               },
+
+                               // Get a promise for this deferred
+                               // If obj is provided, the promise aspect is added to the object
+                               promise: function( obj ) {
+                                       return obj != null ? jQuery.extend( obj, promise ) : promise;
+                               }
+                       },
+                       deferred = {};
+
+               // Add list-specific methods
+               jQuery.each( tuples, function( i, tuple ) {
+                       var list = tuple[ 2 ],
+                               stateString = tuple[ 5 ];
+
+                       // promise.progress = list.add
+                       // promise.done = list.add
+                       // promise.fail = list.add
+                       promise[ tuple[ 1 ] ] = list.add;
+
+                       // Handle state
+                       if ( stateString ) {
+                               list.add(
+                                       function() {
+
+                                               // state = "resolved" (i.e., fulfilled)
+                                               // state = "rejected"
+                                               state = stateString;
+                                       },
+
+                                       // rejected_callbacks.disable
+                                       // fulfilled_callbacks.disable
+                                       tuples[ 3 - i ][ 2 ].disable,
+
+                                       // progress_callbacks.lock
+                                       tuples[ 0 ][ 2 ].lock
+                               );
+                       }
+
+                       // progress_handlers.fire
+                       // fulfilled_handlers.fire
+                       // rejected_handlers.fire
+                       list.add( tuple[ 3 ].fire );
+
+                       // deferred.notify = function() { deferred.notifyWith(...) }
+                       // deferred.resolve = function() { deferred.resolveWith(...) }
+                       // deferred.reject = function() { deferred.rejectWith(...) }
+                       deferred[ tuple[ 0 ] ] = function() {
+                               deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments );
+                               return this;
+                       };
+
+                       // deferred.notifyWith = list.fireWith
+                       // deferred.resolveWith = list.fireWith
+                       // deferred.rejectWith = list.fireWith
+                       deferred[ tuple[ 0 ] + "With" ] = list.fireWith;
+               } );
+
+               // Make the deferred a promise
+               promise.promise( deferred );
+
+               // Call given func if any
+               if ( func ) {
+                       func.call( deferred, deferred );
+               }
+
+               // All done!
+               return deferred;
+       },
+
+       // Deferred helper
+       when: function( singleValue ) {
+               var
+
+                       // count of uncompleted subordinates
+                       remaining = arguments.length,
+
+                       // count of unprocessed arguments
+                       i = remaining,
+
+                       // subordinate fulfillment data
+                       resolveContexts = Array( i ),
+                       resolveValues = slice.call( arguments ),
+
+                       // the master Deferred
+                       master = jQuery.Deferred(),
+
+                       // subordinate callback factory
+                       updateFunc = function( i ) {
+                               return function( value ) {
+                                       resolveContexts[ i ] = this;
+                                       resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
+                                       if ( !( --remaining ) ) {
+                                               master.resolveWith( resolveContexts, resolveValues );
+                                       }
+                               };
+                       };
+
+               // Single- and empty arguments are adopted like Promise.resolve
+               if ( remaining <= 1 ) {
+                       adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject,
+                               !remaining );
+
+                       // Use .then() to unwrap secondary thenables (cf. gh-3000)
+                       if ( master.state() === "pending" ||
+                               jQuery.isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {
+
+                               return master.then();
+                       }
+               }
+
+               // Multiple arguments are aggregated like Promise.all array elements
+               while ( i-- ) {
+                       adoptValue( resolveValues[ i ], updateFunc( i ), master.reject );
+               }
+
+               return master.promise();
+       }
+} );
+
+return jQuery;
+} );
diff --git a/js/jquery/src/deferred/exceptionHook.js b/js/jquery/src/deferred/exceptionHook.js
new file mode 100644 (file)
index 0000000..6dbdc85
--- /dev/null
@@ -0,0 +1,21 @@
+define( [
+       "../core",
+       "../deferred"
+], function( jQuery ) {
+
+"use strict";
+
+// These usually indicate a programmer mistake during development,
+// warn about them ASAP rather than swallowing them by default.
+var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;
+
+jQuery.Deferred.exceptionHook = function( error, stack ) {
+
+       // Support: IE 8 - 9 only
+       // Console exists when dev tools are open, which can happen at any time
+       if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {
+               window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack );
+       }
+};
+
+} );
diff --git a/js/jquery/src/deprecated.js b/js/jquery/src/deprecated.js
new file mode 100644 (file)
index 0000000..9589ec8
--- /dev/null
@@ -0,0 +1,40 @@
+define( [
+       "./core",
+       "./core/nodeName"
+], function( jQuery, nodeName ) {
+
+"use strict";
+
+jQuery.fn.extend( {
+
+       bind: function( types, data, fn ) {
+               return this.on( types, null, data, fn );
+       },
+       unbind: function( types, fn ) {
+               return this.off( types, null, fn );
+       },
+
+       delegate: function( selector, types, data, fn ) {
+               return this.on( types, selector, data, fn );
+       },
+       undelegate: function( selector, types, fn ) {
+
+               // ( namespace ) or ( selector, types [, fn] )
+               return arguments.length === 1 ?
+                       this.off( selector, "**" ) :
+                       this.off( types, selector || "**", fn );
+       }
+} );
+
+jQuery.holdReady = function( hold ) {
+       if ( hold ) {
+               jQuery.readyWait++;
+       } else {
+               jQuery.ready( true );
+       }
+};
+jQuery.isArray = Array.isArray;
+jQuery.parseJSON = JSON.parse;
+jQuery.nodeName = nodeName;
+
+} );
diff --git a/js/jquery/src/dimensions.js b/js/jquery/src/dimensions.js
new file mode 100644 (file)
index 0000000..46e7b1c
--- /dev/null
@@ -0,0 +1,56 @@
+define( [
+       "./core",
+       "./core/access",
+       "./css"
+], function( jQuery, access ) {
+
+"use strict";
+
+// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
+jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
+       jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name },
+               function( defaultExtra, funcName ) {
+
+               // Margin is only for outerHeight, outerWidth
+               jQuery.fn[ funcName ] = function( margin, value ) {
+                       var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
+                               extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
+
+                       return access( this, function( elem, type, value ) {
+                               var doc;
+
+                               if ( jQuery.isWindow( elem ) ) {
+
+                                       // $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)
+                                       return funcName.indexOf( "outer" ) === 0 ?
+                                               elem[ "inner" + name ] :
+                                               elem.document.documentElement[ "client" + name ];
+                               }
+
+                               // Get document width or height
+                               if ( elem.nodeType === 9 ) {
+                                       doc = elem.documentElement;
+
+                                       // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],
+                                       // whichever is greatest
+                                       return Math.max(
+                                               elem.body[ "scroll" + name ], doc[ "scroll" + name ],
+                                               elem.body[ "offset" + name ], doc[ "offset" + name ],
+                                               doc[ "client" + name ]
+                                       );
+                               }
+
+                               return value === undefined ?
+
+                                       // Get width or height on the element, requesting but not forcing parseFloat
+                                       jQuery.css( elem, type, extra ) :
+
+                                       // Set width or height on the element
+                                       jQuery.style( elem, type, value, extra );
+                       }, type, chainable ? margin : undefined, chainable );
+               };
+       } );
+} );
+
+return jQuery;
+} );
diff --git a/js/jquery/src/effects.js b/js/jquery/src/effects.js
new file mode 100644 (file)
index 0000000..879b361
--- /dev/null
@@ -0,0 +1,699 @@
+define( [
+       "./core",
+       "./var/document",
+       "./var/rcssNum",
+       "./var/rnothtmlwhite",
+       "./css/var/cssExpand",
+       "./css/var/isHiddenWithinTree",
+       "./css/var/swap",
+       "./css/adjustCSS",
+       "./data/var/dataPriv",
+       "./css/showHide",
+
+       "./core/init",
+       "./queue",
+       "./deferred",
+       "./traversing",
+       "./manipulation",
+       "./css",
+       "./effects/Tween"
+], function( jQuery, document, rcssNum, rnothtmlwhite, cssExpand, isHiddenWithinTree, swap,
+       adjustCSS, dataPriv, showHide ) {
+
+"use strict";
+
+var
+       fxNow, inProgress,
+       rfxtypes = /^(?:toggle|show|hide)$/,
+       rrun = /queueHooks$/;
+
+function schedule() {
+       if ( inProgress ) {
+               if ( document.hidden === false && window.requestAnimationFrame ) {
+                       window.requestAnimationFrame( schedule );
+               } else {
+                       window.setTimeout( schedule, jQuery.fx.interval );
+               }
+
+               jQuery.fx.tick();
+       }
+}
+
+// Animations created synchronously will run synchronously
+function createFxNow() {
+       window.setTimeout( function() {
+               fxNow = undefined;
+       } );
+       return ( fxNow = jQuery.now() );
+}
+
+// Generate parameters to create a standard animation
+function genFx( type, includeWidth ) {
+       var which,
+               i = 0,
+               attrs = { height: type };
+
+       // If we include width, step value is 1 to do all cssExpand values,
+       // otherwise step value is 2 to skip over Left and Right
+       includeWidth = includeWidth ? 1 : 0;
+       for ( ; i < 4; i += 2 - includeWidth ) {
+               which = cssExpand[ i ];
+               attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
+       }
+
+       if ( includeWidth ) {
+               attrs.opacity = attrs.width = type;
+       }
+
+       return attrs;
+}
+
+function createTween( value, prop, animation ) {
+       var tween,
+               collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ),
+               index = 0,
+               length = collection.length;
+       for ( ; index < length; index++ ) {
+               if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {
+
+                       // We're done with this property
+                       return tween;
+               }
+       }
+}
+
+function defaultPrefilter( elem, props, opts ) {
+       var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,
+               isBox = "width" in props || "height" in props,
+               anim = this,
+               orig = {},
+               style = elem.style,
+               hidden = elem.nodeType && isHiddenWithinTree( elem ),
+               dataShow = dataPriv.get( elem, "fxshow" );
+
+       // Queue-skipping animations hijack the fx hooks
+       if ( !opts.queue ) {
+               hooks = jQuery._queueHooks( elem, "fx" );
+               if ( hooks.unqueued == null ) {
+                       hooks.unqueued = 0;
+                       oldfire = hooks.empty.fire;
+                       hooks.empty.fire = function() {
+                               if ( !hooks.unqueued ) {
+                                       oldfire();
+                               }
+                       };
+               }
+               hooks.unqueued++;
+
+               anim.always( function() {
+
+                       // Ensure the complete handler is called before this completes
+                       anim.always( function() {
+                               hooks.unqueued--;
+                               if ( !jQuery.queue( elem, "fx" ).length ) {
+                                       hooks.empty.fire();
+                               }
+                       } );
+               } );
+       }
+
+       // Detect show/hide animations
+       for ( prop in props ) {
+               value = props[ prop ];
+               if ( rfxtypes.test( value ) ) {
+                       delete props[ prop ];
+                       toggle = toggle || value === "toggle";
+                       if ( value === ( hidden ? "hide" : "show" ) ) {
+
+                               // Pretend to be hidden if this is a "show" and
+                               // there is still data from a stopped show/hide
+                               if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) {
+                                       hidden = true;
+
+                               // Ignore all other no-op show/hide data
+                               } else {
+                                       continue;
+                               }
+                       }
+                       orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );
+               }
+       }
+
+       // Bail out if this is a no-op like .hide().hide()
+       propTween = !jQuery.isEmptyObject( props );
+       if ( !propTween && jQuery.isEmptyObject( orig ) ) {
+               return;
+       }
+
+       // Restrict "overflow" and "display" styles during box animations
+       if ( isBox && elem.nodeType === 1 ) {
+
+               // Support: IE <=9 - 11, Edge 12 - 13
+               // Record all 3 overflow attributes because IE does not infer the shorthand
+               // from identically-valued overflowX and overflowY
+               opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
+
+               // Identify a display type, preferring old show/hide data over the CSS cascade
+               restoreDisplay = dataShow && dataShow.display;
+               if ( restoreDisplay == null ) {
+                       restoreDisplay = dataPriv.get( elem, "display" );
+               }
+               display = jQuery.css( elem, "display" );
+               if ( display === "none" ) {
+                       if ( restoreDisplay ) {
+                               display = restoreDisplay;
+                       } else {
+
+                               // Get nonempty value(s) by temporarily forcing visibility
+                               showHide( [ elem ], true );
+                               restoreDisplay = elem.style.display || restoreDisplay;
+                               display = jQuery.css( elem, "display" );
+                               showHide( [ elem ] );
+                       }
+               }
+
+               // Animate inline elements as inline-block
+               if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) {
+                       if ( jQuery.css( elem, "float" ) === "none" ) {
+
+                               // Restore the original display value at the end of pure show/hide animations
+                               if ( !propTween ) {
+                                       anim.done( function() {
+                                               style.display = restoreDisplay;
+                                       } );
+                                       if ( restoreDisplay == null ) {
+                                               display = style.display;
+                                               restoreDisplay = display === "none" ? "" : display;
+                                       }
+                               }
+                               style.display = "inline-block";
+                       }
+               }
+       }
+
+       if ( opts.overflow ) {
+               style.overflow = "hidden";
+               anim.always( function() {
+                       style.overflow = opts.overflow[ 0 ];
+                       style.overflowX = opts.overflow[ 1 ];
+                       style.overflowY = opts.overflow[ 2 ];
+               } );
+       }
+
+       // Implement show/hide animations
+       propTween = false;
+       for ( prop in orig ) {
+
+               // General show/hide setup for this element animation
+               if ( !propTween ) {
+                       if ( dataShow ) {
+                               if ( "hidden" in dataShow ) {
+                                       hidden = dataShow.hidden;
+                               }
+                       } else {
+                               dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } );
+                       }
+
+                       // Store hidden/visible for toggle so `.stop().toggle()` "reverses"
+                       if ( toggle ) {
+                               dataShow.hidden = !hidden;
+                       }
+
+                       // Show elements before animating them
+                       if ( hidden ) {
+                               showHide( [ elem ], true );
+                       }
+
+                       /* eslint-disable no-loop-func */
+
+                       anim.done( function() {
+
+                       /* eslint-enable no-loop-func */
+
+                               // The final step of a "hide" animation is actually hiding the element
+                               if ( !hidden ) {
+                                       showHide( [ elem ] );
+                               }
+                               dataPriv.remove( elem, "fxshow" );
+                               for ( prop in orig ) {
+                                       jQuery.style( elem, prop, orig[ prop ] );
+                               }
+                       } );
+               }
+
+               // Per-property setup
+               propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );
+               if ( !( prop in dataShow ) ) {
+                       dataShow[ prop ] = propTween.start;
+                       if ( hidden ) {
+                               propTween.end = propTween.start;
+                               propTween.start = 0;
+                       }
+               }
+       }
+}
+
+function propFilter( props, specialEasing ) {
+       var index, name, easing, value, hooks;
+
+       // camelCase, specialEasing and expand cssHook pass
+       for ( index in props ) {
+               name = jQuery.camelCase( index );
+               easing = specialEasing[ name ];
+               value = props[ index ];
+               if ( Array.isArray( value ) ) {
+                       easing = value[ 1 ];
+                       value = props[ index ] = value[ 0 ];
+               }
+
+               if ( index !== name ) {
+                       props[ name ] = value;
+                       delete props[ index ];
+               }
+
+               hooks = jQuery.cssHooks[ name ];
+               if ( hooks && "expand" in hooks ) {
+                       value = hooks.expand( value );
+                       delete props[ name ];
+
+                       // Not quite $.extend, this won't overwrite existing keys.
+                       // Reusing 'index' because we have the correct "name"
+                       for ( index in value ) {
+                               if ( !( index in props ) ) {
+                                       props[ index ] = value[ index ];
+                                       specialEasing[ index ] = easing;
+                               }
+                       }
+               } else {
+                       specialEasing[ name ] = easing;
+               }
+       }
+}
+
+function Animation( elem, properties, options ) {
+       var result,
+               stopped,
+               index = 0,
+               length = Animation.prefilters.length,
+               deferred = jQuery.Deferred().always( function() {
+
+                       // Don't match elem in the :animated selector
+                       delete tick.elem;
+               } ),
+               tick = function() {
+                       if ( stopped ) {
+                               return false;
+                       }
+                       var currentTime = fxNow || createFxNow(),
+                               remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
+
+                               // Support: Android 2.3 only
+                               // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)
+                               temp = remaining / animation.duration || 0,
+                               percent = 1 - temp,
+                               index = 0,
+                               length = animation.tweens.length;
+
+                       for ( ; index < length; index++ ) {
+                               animation.tweens[ index ].run( percent );
+                       }
+
+                       deferred.notifyWith( elem, [ animation, percent, remaining ] );
+
+                       // If there's more to do, yield
+                       if ( percent < 1 && length ) {
+                               return remaining;
+                       }
+
+                       // If this was an empty animation, synthesize a final progress notification
+                       if ( !length ) {
+                               deferred.notifyWith( elem, [ animation, 1, 0 ] );
+                       }
+
+                       // Resolve the animation and report its conclusion
+                       deferred.resolveWith( elem, [ animation ] );
+                       return false;
+               },
+               animation = deferred.promise( {
+                       elem: elem,
+                       props: jQuery.extend( {}, properties ),
+                       opts: jQuery.extend( true, {
+                               specialEasing: {},
+                               easing: jQuery.easing._default
+                       }, options ),
+                       originalProperties: properties,
+                       originalOptions: options,
+                       startTime: fxNow || createFxNow(),
+                       duration: options.duration,
+                       tweens: [],
+                       createTween: function( prop, end ) {
+                               var tween = jQuery.Tween( elem, animation.opts, prop, end,
+                                               animation.opts.specialEasing[ prop ] || animation.opts.easing );
+                               animation.tweens.push( tween );
+                               return tween;
+                       },
+                       stop: function( gotoEnd ) {
+                               var index = 0,
+
+                                       // If we are going to the end, we want to run all the tweens
+                                       // otherwise we skip this part
+                                       length = gotoEnd ? animation.tweens.length : 0;
+                               if ( stopped ) {
+                                       return this;
+                               }
+                               stopped = true;
+                               for ( ; index < length; index++ ) {
+                                       animation.tweens[ index ].run( 1 );
+                               }
+
+                               // Resolve when we played the last frame; otherwise, reject
+                               if ( gotoEnd ) {
+                                       deferred.notifyWith( elem, [ animation, 1, 0 ] );
+                                       deferred.resolveWith( elem, [ animation, gotoEnd ] );
+                               } else {
+                                       deferred.rejectWith( elem, [ animation, gotoEnd ] );
+                               }
+                               return this;
+                       }
+               } ),
+               props = animation.props;
+
+       propFilter( props, animation.opts.specialEasing );
+
+       for ( ; index < length; index++ ) {
+               result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );
+               if ( result ) {
+                       if ( jQuery.isFunction( result.stop ) ) {
+                               jQuery._queueHooks( animation.elem, animation.opts.queue ).stop =
+                                       jQuery.proxy( result.stop, result );
+                       }
+                       return result;
+               }
+       }
+
+       jQuery.map( props, createTween, animation );
+
+       if ( jQuery.isFunction( animation.opts.start ) ) {
+               animation.opts.start.call( elem, animation );
+       }
+
+       // Attach callbacks from options
+       animation
+               .progress( animation.opts.progress )
+               .done( animation.opts.done, animation.opts.complete )
+               .fail( animation.opts.fail )
+               .always( animation.opts.always );
+
+       jQuery.fx.timer(
+               jQuery.extend( tick, {
+                       elem: elem,
+                       anim: animation,
+                       queue: animation.opts.queue
+               } )
+       );
+
+       return animation;
+}
+
+jQuery.Animation = jQuery.extend( Animation, {
+
+       tweeners: {
+               "*": [ function( prop, value ) {
+                       var tween = this.createTween( prop, value );
+                       adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );
+                       return tween;
+               } ]
+       },
+
+       tweener: function( props, callback ) {
+               if ( jQuery.isFunction( props ) ) {
+                       callback = props;
+                       props = [ "*" ];
+               } else {
+                       props = props.match( rnothtmlwhite );
+               }
+
+               var prop,
+                       index = 0,
+                       length = props.length;
+
+               for ( ; index < length; index++ ) {
+                       prop = props[ index ];
+                       Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];
+                       Animation.tweeners[ prop ].unshift( callback );
+               }
+       },
+
+       prefilters: [ defaultPrefilter ],
+
+       prefilter: function( callback, prepend ) {
+               if ( prepend ) {
+                       Animation.prefilters.unshift( callback );
+               } else {
+                       Animation.prefilters.push( callback );
+               }
+       }
+} );
+
+jQuery.speed = function( speed, easing, fn ) {
+       var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
+               complete: fn || !fn && easing ||
+                       jQuery.isFunction( speed ) && speed,
+               duration: speed,
+               easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
+       };
+
+       // Go to the end state if fx are off
+       if ( jQuery.fx.off ) {
+               opt.duration = 0;
+
+       } else {
+               if ( typeof opt.duration !== "number" ) {
+                       if ( opt.duration in jQuery.fx.speeds ) {
+                               opt.duration = jQuery.fx.speeds[ opt.duration ];
+
+                       } else {
+                               opt.duration = jQuery.fx.speeds._default;
+                       }
+               }
+       }
+
+       // Normalize opt.queue - true/undefined/null -> "fx"
+       if ( opt.queue == null || opt.queue === true ) {
+               opt.queue = "fx";
+       }
+
+       // Queueing
+       opt.old = opt.complete;
+
+       opt.complete = function() {
+               if ( jQuery.isFunction( opt.old ) ) {
+                       opt.old.call( this );
+               }
+
+               if ( opt.queue ) {
+                       jQuery.dequeue( this, opt.queue );
+               }
+       };
+
+       return opt;
+};
+
+jQuery.fn.extend( {
+       fadeTo: function( speed, to, easing, callback ) {
+
+               // Show any hidden elements after setting opacity to 0
+               return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show()
+
+                       // Animate to the value specified
+                       .end().animate( { opacity: to }, speed, easing, callback );
+       },
+       animate: function( prop, speed, easing, callback ) {
+               var empty = jQuery.isEmptyObject( prop ),
+                       optall = jQuery.speed( speed, easing, callback ),
+                       doAnimation = function() {
+
+                               // Operate on a copy of prop so per-property easing won't be lost
+                               var anim = Animation( this, jQuery.extend( {}, prop ), optall );
+
+                               // Empty animations, or finishing resolves immediately
+                               if ( empty || dataPriv.get( this, "finish" ) ) {
+                                       anim.stop( true );
+                               }
+                       };
+                       doAnimation.finish = doAnimation;
+
+               return empty || optall.queue === false ?
+                       this.each( doAnimation ) :
+                       this.queue( optall.queue, doAnimation );
+       },
+       stop: function( type, clearQueue, gotoEnd ) {
+               var stopQueue = function( hooks ) {
+                       var stop = hooks.stop;
+                       delete hooks.stop;
+                       stop( gotoEnd );
+               };
+
+               if ( typeof type !== "string" ) {
+                       gotoEnd = clearQueue;
+                       clearQueue = type;
+                       type = undefined;
+               }
+               if ( clearQueue && type !== false ) {
+                       this.queue( type || "fx", [] );
+               }
+
+               return this.each( function() {
+                       var dequeue = true,
+                               index = type != null && type + "queueHooks",
+                               timers = jQuery.timers,
+                               data = dataPriv.get( this );
+
+                       if ( index ) {
+                               if ( data[ index ] && data[ index ].stop ) {
+                                       stopQueue( data[ index ] );
+                               }
+                       } else {
+                               for ( index in data ) {
+                                       if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
+                                               stopQueue( data[ index ] );
+                                       }
+                               }
+                       }
+
+                       for ( index = timers.length; index--; ) {
+                               if ( timers[ index ].elem === this &&
+                                       ( type == null || timers[ index ].queue === type ) ) {
+
+                                       timers[ index ].anim.stop( gotoEnd );
+                                       dequeue = false;
+                                       timers.splice( index, 1 );
+                               }
+                       }
+
+                       // Start the next in the queue if the last step wasn't forced.
+                       // Timers currently will call their complete callbacks, which
+                       // will dequeue but only if they were gotoEnd.
+                       if ( dequeue || !gotoEnd ) {
+                               jQuery.dequeue( this, type );
+                       }
+               } );
+       },
+       finish: function( type ) {
+               if ( type !== false ) {
+                       type = type || "fx";
+               }
+               return this.each( function() {
+                       var index,
+                               data = dataPriv.get( this ),
+                               queue = data[ type + "queue" ],
+                               hooks = data[ type + "queueHooks" ],
+                               timers = jQuery.timers,
+                               length = queue ? queue.length : 0;
+
+                       // Enable finishing flag on private data
+                       data.finish = true;
+
+                       // Empty the queue first
+                       jQuery.queue( this, type, [] );
+
+                       if ( hooks && hooks.stop ) {
+                               hooks.stop.call( this, true );
+                       }
+
+                       // Look for any active animations, and finish them
+                       for ( index = timers.length; index--; ) {
+                               if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
+                                       timers[ index ].anim.stop( true );
+                                       timers.splice( index, 1 );
+                               }
+                       }
+
+                       // Look for any animations in the old queue and finish them
+                       for ( index = 0; index < length; index++ ) {
+                               if ( queue[ index ] && queue[ index ].finish ) {
+                                       queue[ index ].finish.call( this );
+                               }
+                       }
+
+                       // Turn off finishing flag
+                       delete data.finish;
+               } );
+       }
+} );
+
+jQuery.each( [ "toggle", "show", "hide" ], function( i, name ) {
+       var cssFn = jQuery.fn[ name ];
+       jQuery.fn[ name ] = function( speed, easing, callback ) {
+               return speed == null || typeof speed === "boolean" ?
+                       cssFn.apply( this, arguments ) :
+                       this.animate( genFx( name, true ), speed, easing, callback );
+       };
+} );
+
+// Generate shortcuts for custom animations
+jQuery.each( {
+       slideDown: genFx( "show" ),
+       slideUp: genFx( "hide" ),
+       slideToggle: genFx( "toggle" ),
+       fadeIn: { opacity: "show" },
+       fadeOut: { opacity: "hide" },
+       fadeToggle: { opacity: "toggle" }
+}, function( name, props ) {
+       jQuery.fn[ name ] = function( speed, easing, callback ) {
+               return this.animate( props, speed, easing, callback );
+       };
+} );
+
+jQuery.timers = [];
+jQuery.fx.tick = function() {
+       var timer,
+               i = 0,
+               timers = jQuery.timers;
+
+       fxNow = jQuery.now();
+
+       for ( ; i < timers.length; i++ ) {
+               timer = timers[ i ];
+
+               // Run the timer and safely remove it when done (allowing for external removal)
+               if ( !timer() && timers[ i ] === timer ) {
+                       timers.splice( i--, 1 );
+               }
+       }
+
+       if ( !timers.length ) {
+               jQuery.fx.stop();
+       }
+       fxNow = undefined;
+};
+
+jQuery.fx.timer = function( timer ) {
+       jQuery.timers.push( timer );
+       jQuery.fx.start();
+};
+
+jQuery.fx.interval = 13;
+jQuery.fx.start = function() {
+       if ( inProgress ) {
+               return;
+       }
+
+       inProgress = true;
+       schedule();
+};
+
+jQuery.fx.stop = function() {
+       inProgress = null;
+};
+
+jQuery.fx.speeds = {
+       slow: 600,
+       fast: 200,
+
+       // Default speed
+       _default: 400
+};
+
+return jQuery;
+} );
diff --git a/js/jquery/src/effects/Tween.js b/js/jquery/src/effects/Tween.js
new file mode 100644 (file)
index 0000000..43eb8fa
--- /dev/null
@@ -0,0 +1,123 @@
+define( [
+       "../core",
+       "../css"
+], function( jQuery ) {
+
+"use strict";
+
+function Tween( elem, options, prop, end, easing ) {
+       return new Tween.prototype.init( elem, options, prop, end, easing );
+}
+jQuery.Tween = Tween;
+
+Tween.prototype = {
+       constructor: Tween,
+       init: function( elem, options, prop, end, easing, unit ) {
+               this.elem = elem;
+               this.prop = prop;
+               this.easing = easing || jQuery.easing._default;
+               this.options = options;
+               this.start = this.now = this.cur();
+               this.end = end;
+               this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
+       },
+       cur: function() {
+               var hooks = Tween.propHooks[ this.prop ];
+
+               return hooks && hooks.get ?
+                       hooks.get( this ) :
+                       Tween.propHooks._default.get( this );
+       },
+       run: function( percent ) {
+               var eased,
+                       hooks = Tween.propHooks[ this.prop ];
+
+               if ( this.options.duration ) {
+                       this.pos = eased = jQuery.easing[ this.easing ](
+                               percent, this.options.duration * percent, 0, 1, this.options.duration
+                       );
+               } else {
+                       this.pos = eased = percent;
+               }
+               this.now = ( this.end - this.start ) * eased + this.start;
+
+               if ( this.options.step ) {
+                       this.options.step.call( this.elem, this.now, this );
+               }
+
+               if ( hooks && hooks.set ) {
+                       hooks.set( this );
+               } else {
+                       Tween.propHooks._default.set( this );
+               }
+               return this;
+       }
+};
+
+Tween.prototype.init.prototype = Tween.prototype;
+
+Tween.propHooks = {
+       _default: {
+               get: function( tween ) {
+                       var result;
+
+                       // Use a property on the element directly when it is not a DOM element,
+                       // or when there is no matching style property that exists.
+                       if ( tween.elem.nodeType !== 1 ||
+                               tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {
+                               return tween.elem[ tween.prop ];
+                       }
+
+                       // Passing an empty string as a 3rd parameter to .css will automatically
+                       // attempt a parseFloat and fallback to a string if the parse fails.
+                       // Simple values such as "10px" are parsed to Float;
+                       // complex values such as "rotate(1rad)" are returned as-is.
+                       result = jQuery.css( tween.elem, tween.prop, "" );
+
+                       // Empty strings, null, undefined and "auto" are converted to 0.
+                       return !result || result === "auto" ? 0 : result;
+               },
+               set: function( tween ) {
+
+                       // Use step hook for back compat.
+                       // Use cssHook if its there.
+                       // Use .style if available and use plain properties where available.
+                       if ( jQuery.fx.step[ tween.prop ] ) {
+                               jQuery.fx.step[ tween.prop ]( tween );
+                       } else if ( tween.elem.nodeType === 1 &&
+                               ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null ||
+                                       jQuery.cssHooks[ tween.prop ] ) ) {
+                               jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
+                       } else {
+                               tween.elem[ tween.prop ] = tween.now;
+                       }
+               }
+       }
+};
+
+// Support: IE <=9 only
+// Panic based approach to setting things on disconnected nodes
+Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
+       set: function( tween ) {
+               if ( tween.elem.nodeType && tween.elem.parentNode ) {
+                       tween.elem[ tween.prop ] = tween.now;
+               }
+       }
+};
+
+jQuery.easing = {
+       linear: function( p ) {
+               return p;
+       },
+       swing: function( p ) {
+               return 0.5 - Math.cos( p * Math.PI ) / 2;
+       },
+       _default: "swing"
+};
+
+jQuery.fx = Tween.prototype.init;
+
+// Back compat <1.8 extension point
+jQuery.fx.step = {};
+
+} );
diff --git a/js/jquery/src/effects/animatedSelector.js b/js/jquery/src/effects/animatedSelector.js
new file mode 100644 (file)
index 0000000..24c1bfb
--- /dev/null
@@ -0,0 +1,15 @@
+define( [
+       "../core",
+       "../selector",
+       "../effects"
+], function( jQuery ) {
+
+"use strict";
+
+jQuery.expr.pseudos.animated = function( elem ) {
+       return jQuery.grep( jQuery.timers, function( fn ) {
+               return elem === fn.elem;
+       } ).length;
+};
+
+} );
diff --git a/js/jquery/src/event.js b/js/jquery/src/event.js
new file mode 100644 (file)
index 0000000..071deb6
--- /dev/null
@@ -0,0 +1,746 @@
+define( [
+       "./core",
+       "./var/document",
+       "./var/documentElement",
+       "./var/rnothtmlwhite",
+       "./var/slice",
+       "./data/var/dataPriv",
+       "./core/nodeName",
+
+       "./core/init",
+       "./selector"
+], function( jQuery, document, documentElement, rnothtmlwhite, slice, dataPriv, nodeName ) {
+
+"use strict";
+
+var
+       rkeyEvent = /^key/,
+       rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,
+       rtypenamespace = /^([^.]*)(?:\.(.+)|)/;
+
+function returnTrue() {
+       return true;
+}
+
+function returnFalse() {
+       return false;
+}
+
+// Support: IE <=9 only
+// See #13393 for more info
+function safeActiveElement() {
+       try {
+               return document.activeElement;
+       } catch ( err ) { }
+}
+
+function on( elem, types, selector, data, fn, one ) {
+       var origFn, type;
+
+       // Types can be a map of types/handlers
+       if ( typeof types === "object" ) {
+
+               // ( types-Object, selector, data )
+               if ( typeof selector !== "string" ) {
+
+                       // ( types-Object, data )
+                       data = data || selector;
+                       selector = undefined;
+               }
+               for ( type in types ) {
+                       on( elem, type, selector, data, types[ type ], one );
+               }
+               return elem;
+       }
+
+       if ( data == null && fn == null ) {
+
+               // ( types, fn )
+               fn = selector;
+               data = selector = undefined;
+       } else if ( fn == null ) {
+               if ( typeof selector === "string" ) {
+
+                       // ( types, selector, fn )
+                       fn = data;
+                       data = undefined;
+               } else {
+
+                       // ( types, data, fn )
+                       fn = data;
+                       data = selector;
+                       selector = undefined;
+               }
+       }
+       if ( fn === false ) {
+               fn = returnFalse;
+       } else if ( !fn ) {
+               return elem;
+       }
+
+       if ( one === 1 ) {
+               origFn = fn;
+               fn = function( event ) {
+
+                       // Can use an empty set, since event contains the info
+                       jQuery().off( event );
+                       return origFn.apply( this, arguments );
+               };
+
+               // Use same guid so caller can remove using origFn
+               fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
+       }
+       return elem.each( function() {
+               jQuery.event.add( this, types, fn, data, selector );
+       } );
+}
+
+/*
+ * Helper functions for managing events -- not part of the public interface.
+ * Props to Dean Edwards' addEvent library for many of the ideas.
+ */
+jQuery.event = {
+
+       global: {},
+
+       add: function( elem, types, handler, data, selector ) {
+
+               var handleObjIn, eventHandle, tmp,
+                       events, t, handleObj,
+                       special, handlers, type, namespaces, origType,
+                       elemData = dataPriv.get( elem );
+
+               // Don't attach events to noData or text/comment nodes (but allow plain objects)
+               if ( !elemData ) {
+                       return;
+               }
+
+               // Caller can pass in an object of custom data in lieu of the handler
+               if ( handler.handler ) {
+                       handleObjIn = handler;
+                       handler = handleObjIn.handler;
+                       selector = handleObjIn.selector;
+               }
+
+               // Ensure that invalid selectors throw exceptions at attach time
+               // Evaluate against documentElement in case elem is a non-element node (e.g., document)
+               if ( selector ) {
+                       jQuery.find.matchesSelector( documentElement, selector );
+               }
+
+               // Make sure that the handler has a unique ID, used to find/remove it later
+               if ( !handler.guid ) {
+                       handler.guid = jQuery.guid++;
+               }
+
+               // Init the element's event structure and main handler, if this is the first
+               if ( !( events = elemData.events ) ) {
+                       events = elemData.events = {};
+               }
+               if ( !( eventHandle = elemData.handle ) ) {
+                       eventHandle = elemData.handle = function( e ) {
+
+                               // Discard the second event of a jQuery.event.trigger() and
+                               // when an event is called after a page has unloaded
+                               return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ?
+                                       jQuery.event.dispatch.apply( elem, arguments ) : undefined;
+                       };
+               }
+
+               // Handle multiple events separated by a space
+               types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
+               t = types.length;
+               while ( t-- ) {
+                       tmp = rtypenamespace.exec( types[ t ] ) || [];
+                       type = origType = tmp[ 1 ];
+                       namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
+
+                       // There *must* be a type, no attaching namespace-only handlers
+                       if ( !type ) {
+                               continue;
+                       }
+
+                       // If event changes its type, use the special event handlers for the changed type
+                       special = jQuery.event.special[ type ] || {};
+
+                       // If selector defined, determine special event api type, otherwise given type
+                       type = ( selector ? special.delegateType : special.bindType ) || type;
+
+                       // Update special based on newly reset type
+                       special = jQuery.event.special[ type ] || {};
+
+                       // handleObj is passed to all event handlers
+                       handleObj = jQuery.extend( {
+                               type: type,
+                               origType: origType,
+                               data: data,
+                               handler: handler,
+                               guid: handler.guid,
+                               selector: selector,
+                               needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
+                               namespace: namespaces.join( "." )
+                       }, handleObjIn );
+
+                       // Init the event handler queue if we're the first
+                       if ( !( handlers = events[ type ] ) ) {
+                               handlers = events[ type ] = [];
+                               handlers.delegateCount = 0;
+
+                               // Only use addEventListener if the special events handler returns false
+                               if ( !special.setup ||
+                                       special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
+
+                                       if ( elem.addEventListener ) {
+                                               elem.addEventListener( type, eventHandle );
+                                       }
+                               }
+                       }
+
+                       if ( special.add ) {
+                               special.add.call( elem, handleObj );
+
+                               if ( !handleObj.handler.guid ) {
+                                       handleObj.handler.guid = handler.guid;
+                               }
+                       }
+
+                       // Add to the element's handler list, delegates in front
+                       if ( selector ) {
+                               handlers.splice( handlers.delegateCount++, 0, handleObj );
+                       } else {
+                               handlers.push( handleObj );
+                       }
+
+                       // Keep track of which events have ever been used, for event optimization
+                       jQuery.event.global[ type ] = true;
+               }
+
+       },
+
+       // Detach an event or set of events from an element
+       remove: function( elem, types, handler, selector, mappedTypes ) {
+
+               var j, origCount, tmp,
+                       events, t, handleObj,
+                       special, handlers, type, namespaces, origType,
+                       elemData = dataPriv.hasData( elem ) && dataPriv.get( elem );
+
+               if ( !elemData || !( events = elemData.events ) ) {
+                       return;
+               }
+
+               // Once for each type.namespace in types; type may be omitted
+               types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
+               t = types.length;
+               while ( t-- ) {
+                       tmp = rtypenamespace.exec( types[ t ] ) || [];
+                       type = origType = tmp[ 1 ];
+                       namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
+
+                       // Unbind all events (on this namespace, if provided) for the element
+                       if ( !type ) {
+                               for ( type in events ) {
+                                       jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
+                               }
+                               continue;
+                       }
+
+                       special = jQuery.event.special[ type ] || {};
+                       type = ( selector ? special.delegateType : special.bindType ) || type;
+                       handlers = events[ type ] || [];
+                       tmp = tmp[ 2 ] &&
+                               new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" );
+
+                       // Remove matching events
+                       origCount = j = handlers.length;
+                       while ( j-- ) {
+                               handleObj = handlers[ j ];
+
+                               if ( ( mappedTypes || origType === handleObj.origType ) &&
+                                       ( !handler || handler.guid === handleObj.guid ) &&
+                                       ( !tmp || tmp.test( handleObj.namespace ) ) &&
+                                       ( !selector || selector === handleObj.selector ||
+                                               selector === "**" && handleObj.selector ) ) {
+                                       handlers.splice( j, 1 );
+
+                                       if ( handleObj.selector ) {
+                                               handlers.delegateCount--;
+                                       }
+                                       if ( special.remove ) {
+                                               special.remove.call( elem, handleObj );
+                                       }
+                               }
+                       }
+
+                       // Remove generic event handler if we removed something and no more handlers exist
+                       // (avoids potential for endless recursion during removal of special event handlers)
+                       if ( origCount && !handlers.length ) {
+                               if ( !special.teardown ||
+                                       special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
+
+                                       jQuery.removeEvent( elem, type, elemData.handle );
+                               }
+
+                               delete events[ type ];
+                       }
+               }
+
+               // Remove data and the expando if it's no longer used
+               if ( jQuery.isEmptyObject( events ) ) {
+                       dataPriv.remove( elem, "handle events" );
+               }
+       },
+
+       dispatch: function( nativeEvent ) {
+
+               // Make a writable jQuery.Event from the native event object
+               var event = jQuery.event.fix( nativeEvent );
+
+               var i, j, ret, matched, handleObj, handlerQueue,
+                       args = new Array( arguments.length ),
+                       handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [],
+                       special = jQuery.event.special[ event.type ] || {};
+
+               // Use the fix-ed jQuery.Event rather than the (read-only) native event
+               args[ 0 ] = event;
+
+               for ( i = 1; i < arguments.length; i++ ) {
+                       args[ i ] = arguments[ i ];
+               }
+
+               event.delegateTarget = this;
+
+               // Call the preDispatch hook for the mapped type, and let it bail if desired
+               if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
+                       return;
+               }
+
+               // Determine handlers
+               handlerQueue = jQuery.event.handlers.call( this, event, handlers );
+
+               // Run delegates first; they may want to stop propagation beneath us
+               i = 0;
+               while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {
+                       event.currentTarget = matched.elem;
+
+                       j = 0;
+                       while ( ( handleObj = matched.handlers[ j++ ] ) &&
+                               !event.isImmediatePropagationStopped() ) {
+
+                               // Triggered event must either 1) have no namespace, or 2) have namespace(s)
+                               // a subset or equal to those in the bound event (both can have no namespace).
+                               if ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) {
+
+                                       event.handleObj = handleObj;
+                                       event.data = handleObj.data;
+
+                                       ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||
+                                               handleObj.handler ).apply( matched.elem, args );
+
+                                       if ( ret !== undefined ) {
+                                               if ( ( event.result = ret ) === false ) {
+                                                       event.preventDefault();
+                                                       event.stopPropagation();
+                                               }
+                                       }
+                               }
+                       }
+               }
+
+               // Call the postDispatch hook for the mapped type
+               if ( special.postDispatch ) {
+                       special.postDispatch.call( this, event );
+               }
+
+               return event.result;
+       },
+
+       handlers: function( event, handlers ) {
+               var i, handleObj, sel, matchedHandlers, matchedSelectors,
+                       handlerQueue = [],
+                       delegateCount = handlers.delegateCount,
+                       cur = event.target;
+
+               // Find delegate handlers
+               if ( delegateCount &&
+
+                       // Support: IE <=9
+                       // Black-hole SVG <use> instance trees (trac-13180)
+                       cur.nodeType &&
+
+                       // Support: Firefox <=42
+                       // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)
+                       // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click
+                       // Support: IE 11 only
+                       // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343)
+                       !( event.type === "click" && event.button >= 1 ) ) {
+
+                       for ( ; cur !== this; cur = cur.parentNode || this ) {
+
+                               // Don't check non-elements (#13208)
+                               // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
+                               if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) {
+                                       matchedHandlers = [];
+                                       matchedSelectors = {};
+                                       for ( i = 0; i < delegateCount; i++ ) {
+                                               handleObj = handlers[ i ];
+
+                                               // Don't conflict with Object.prototype properties (#13203)
+                                               sel = handleObj.selector + " ";
+
+                                               if ( matchedSelectors[ sel ] === undefined ) {
+                                                       matchedSelectors[ sel ] = handleObj.needsContext ?
+                                                               jQuery( sel, this ).index( cur ) > -1 :
+                                                               jQuery.find( sel, this, null, [ cur ] ).length;
+                                               }
+                                               if ( matchedSelectors[ sel ] ) {
+                                                       matchedHandlers.push( handleObj );
+                                               }
+                                       }
+                                       if ( matchedHandlers.length ) {
+                                               handlerQueue.push( { elem: cur, handlers: matchedHandlers } );
+                                       }
+                               }
+                       }
+               }
+
+               // Add the remaining (directly-bound) handlers
+               cur = this;
+               if ( delegateCount < handlers.length ) {
+                       handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );
+               }
+
+               return handlerQueue;
+       },
+
+       addProp: function( name, hook ) {
+               Object.defineProperty( jQuery.Event.prototype, name, {
+                       enumerable: true,
+                       configurable: true,
+
+                       get: jQuery.isFunction( hook ) ?
+                               function() {
+                                       if ( this.originalEvent ) {
+                                                       return hook( this.originalEvent );
+                                       }
+                               } :
+                               function() {
+                                       if ( this.originalEvent ) {
+                                                       return this.originalEvent[ name ];
+                                       }
+                               },
+
+                       set: function( value ) {
+                               Object.defineProperty( this, name, {
+                                       enumerable: true,
+                                       configurable: true,
+                                       writable: true,
+                                       value: value
+                               } );
+                       }
+               } );
+       },
+
+       fix: function( originalEvent ) {
+               return originalEvent[ jQuery.expando ] ?
+                       originalEvent :
+                       new jQuery.Event( originalEvent );
+       },
+
+       special: {
+               load: {
+
+                       // Prevent triggered image.load events from bubbling to window.load
+                       noBubble: true
+               },
+               focus: {
+
+                       // Fire native event if possible so blur/focus sequence is correct
+                       trigger: function() {
+                               if ( this !== safeActiveElement() && this.focus ) {
+                                       this.focus();
+                                       return false;
+                               }
+                       },
+                       delegateType: "focusin"
+               },
+               blur: {
+                       trigger: function() {
+                               if ( this === safeActiveElement() && this.blur ) {
+                                       this.blur();
+                                       return false;
+                               }
+                       },
+                       delegateType: "focusout"
+               },
+               click: {
+
+                       // For checkbox, fire native event so checked state will be right
+                       trigger: function() {
+                               if ( this.type === "checkbox" && this.click && nodeName( this, "input" ) ) {
+                                       this.click();
+                                       return false;
+                               }
+                       },
+
+                       // For cross-browser consistency, don't fire native .click() on links
+                       _default: function( event ) {
+                               return nodeName( event.target, "a" );
+                       }
+               },
+
+               beforeunload: {
+                       postDispatch: function( event ) {
+
+                               // Support: Firefox 20+
+                               // Firefox doesn't alert if the returnValue field is not set.
+                               if ( event.result !== undefined && event.originalEvent ) {
+                                       event.originalEvent.returnValue = event.result;
+                               }
+                       }
+               }
+       }
+};
+
+jQuery.removeEvent = function( elem, type, handle ) {
+
+       // This "if" is needed for plain objects
+       if ( elem.removeEventListener ) {
+               elem.removeEventListener( type, handle );
+       }
+};
+
+jQuery.Event = function( src, props ) {
+
+       // Allow instantiation without the 'new' keyword
+       if ( !( this instanceof jQuery.Event ) ) {
+               return new jQuery.Event( src, props );
+       }
+
+       // Event object
+       if ( src && src.type ) {
+               this.originalEvent = src;
+               this.type = src.type;
+
+               // Events bubbling up the document may have been marked as prevented
+               // by a handler lower down the tree; reflect the correct value.
+               this.isDefaultPrevented = src.defaultPrevented ||
+                               src.defaultPrevented === undefined &&
+
+                               // Support: Android <=2.3 only
+                               src.returnValue === false ?
+                       returnTrue :
+                       returnFalse;
+
+               // Create target properties
+               // Support: Safari <=6 - 7 only
+               // Target should not be a text node (#504, #13143)
+               this.target = ( src.target && src.target.nodeType === 3 ) ?
+                       src.target.parentNode :
+                       src.target;
+
+               this.currentTarget = src.currentTarget;
+               this.relatedTarget = src.relatedTarget;
+
+       // Event type
+       } else {
+               this.type = src;
+       }
+
+       // Put explicitly provided properties onto the event object
+       if ( props ) {
+               jQuery.extend( this, props );
+       }
+
+       // Create a timestamp if incoming event doesn't have one
+       this.timeStamp = src && src.timeStamp || jQuery.now();
+
+       // Mark it as fixed
+       this[ jQuery.expando ] = true;
+};
+
+// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
+// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
+jQuery.Event.prototype = {
+       constructor: jQuery.Event,
+       isDefaultPrevented: returnFalse,
+       isPropagationStopped: returnFalse,
+       isImmediatePropagationStopped: returnFalse,
+       isSimulated: false,
+
+       preventDefault: function() {
+               var e = this.originalEvent;
+
+               this.isDefaultPrevented = returnTrue;
+
+               if ( e && !this.isSimulated ) {
+                       e.preventDefault();
+               }
+       },
+       stopPropagation: function() {
+               var e = this.originalEvent;
+
+               this.isPropagationStopped = returnTrue;
+
+               if ( e && !this.isSimulated ) {
+                       e.stopPropagation();
+               }
+       },
+       stopImmediatePropagation: function() {
+               var e = this.originalEvent;
+
+               this.isImmediatePropagationStopped = returnTrue;
+
+               if ( e && !this.isSimulated ) {
+                       e.stopImmediatePropagation();
+               }
+
+               this.stopPropagation();
+       }
+};
+
+// Includes all common event props including KeyEvent and MouseEvent specific props
+jQuery.each( {
+       altKey: true,
+       bubbles: true,
+       cancelable: true,
+       changedTouches: true,
+       ctrlKey: true,
+       detail: true,
+       eventPhase: true,
+       metaKey: true,
+       pageX: true,
+       pageY: true,
+       shiftKey: true,
+       view: true,
+       "char": true,
+       charCode: true,
+       key: true,
+       keyCode: true,
+       button: true,
+       buttons: true,
+       clientX: true,
+       clientY: true,
+       offsetX: true,
+       offsetY: true,
+       pointerId: true,
+       pointerType: true,
+       screenX: true,
+       screenY: true,
+       targetTouches: true,
+       toElement: true,
+       touches: true,
+
+       which: function( event ) {
+               var button = event.button;
+
+               // Add which for key events
+               if ( event.which == null && rkeyEvent.test( event.type ) ) {
+                       return event.charCode != null ? event.charCode : event.keyCode;
+               }
+
+               // Add which for click: 1 === left; 2 === middle; 3 === right
+               if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {
+                       if ( button & 1 ) {
+                               return 1;
+                       }
+
+                       if ( button & 2 ) {
+                               return 3;
+                       }
+
+                       if ( button & 4 ) {
+                               return 2;
+                       }
+
+                       return 0;
+               }
+
+               return event.which;
+       }
+}, jQuery.event.addProp );
+
+// Create mouseenter/leave events using mouseover/out and event-time checks
+// so that event delegation works in jQuery.
+// Do the same for pointerenter/pointerleave and pointerover/pointerout
+//
+// Support: Safari 7 only
+// Safari sends mouseenter too often; see:
+// https://bugs.chromium.org/p/chromium/issues/detail?id=470258
+// for the description of the bug (it existed in older Chrome versions as well).
+jQuery.each( {
+       mouseenter: "mouseover",
+       mouseleave: "mouseout",
+       pointerenter: "pointerover",
+       pointerleave: "pointerout"
+}, function( orig, fix ) {
+       jQuery.event.special[ orig ] = {
+               delegateType: fix,
+               bindType: fix,
+
+               handle: function( event ) {
+                       var ret,
+                               target = this,
+                               related = event.relatedTarget,
+                               handleObj = event.handleObj;
+
+                       // For mouseenter/leave call the handler if related is outside the target.
+                       // NB: No relatedTarget if the mouse left/entered the browser window
+                       if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {
+                               event.type = handleObj.origType;
+                               ret = handleObj.handler.apply( this, arguments );
+                               event.type = fix;
+                       }
+                       return ret;
+               }
+       };
+} );
+
+jQuery.fn.extend( {
+
+       on: function( types, selector, data, fn ) {
+               return on( this, types, selector, data, fn );
+       },
+       one: function( types, selector, data, fn ) {
+               return on( this, types, selector, data, fn, 1 );
+       },
+       off: function( types, selector, fn ) {
+               var handleObj, type;
+               if ( types && types.preventDefault && types.handleObj ) {
+
+                       // ( event )  dispatched jQuery.Event
+                       handleObj = types.handleObj;
+                       jQuery( types.delegateTarget ).off(
+                               handleObj.namespace ?
+                                       handleObj.origType + "." + handleObj.namespace :
+                                       handleObj.origType,
+                               handleObj.selector,
+                               handleObj.handler
+                       );
+                       return this;
+               }
+               if ( typeof types === "object" ) {
+
+                       // ( types-object [, selector] )
+                       for ( type in types ) {
+                               this.off( type, selector, types[ type ] );
+                       }
+                       return this;
+               }
+               if ( selector === false || typeof selector === "function" ) {
+
+                       // ( types [, fn] )
+                       fn = selector;
+                       selector = undefined;
+               }
+               if ( fn === false ) {
+                       fn = returnFalse;
+               }
+               return this.each( function() {
+                       jQuery.event.remove( this, types, fn, selector );
+               } );
+       }
+} );
+
+return jQuery;
+} );
diff --git a/js/jquery/src/event/ajax.js b/js/jquery/src/event/ajax.js
new file mode 100644 (file)
index 0000000..500b36c
--- /dev/null
@@ -0,0 +1,22 @@
+define( [
+       "../core",
+       "../event"
+], function( jQuery ) {
+
+"use strict";
+
+// Attach a bunch of functions for handling common AJAX events
+jQuery.each( [
+       "ajaxStart",
+       "ajaxStop",
+       "ajaxComplete",
+       "ajaxError",
+       "ajaxSuccess",
+       "ajaxSend"
+], function( i, type ) {
+       jQuery.fn[ type ] = function( fn ) {
+               return this.on( type, fn );
+       };
+} );
+
+} );
diff --git a/js/jquery/src/event/alias.js b/js/jquery/src/event/alias.js
new file mode 100644 (file)
index 0000000..863c94a
--- /dev/null
@@ -0,0 +1,29 @@
+define( [
+       "../core",
+
+       "../event",
+       "./trigger"
+], function( jQuery ) {
+
+"use strict";
+
+jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " +
+       "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
+       "change select submit keydown keypress keyup contextmenu" ).split( " " ),
+       function( i, name ) {
+
+       // Handle event binding
+       jQuery.fn[ name ] = function( data, fn ) {
+               return arguments.length > 0 ?
+                       this.on( name, null, data, fn ) :
+                       this.trigger( name );
+       };
+} );
+
+jQuery.fn.extend( {
+       hover: function( fnOver, fnOut ) {
+               return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
+       }
+} );
+
+} );
diff --git a/js/jquery/src/event/focusin.js b/js/jquery/src/event/focusin.js
new file mode 100644 (file)
index 0000000..7faef29
--- /dev/null
@@ -0,0 +1,55 @@
+define( [
+       "../core",
+       "../data/var/dataPriv",
+       "./support",
+
+       "../event",
+       "./trigger"
+], function( jQuery, dataPriv, support ) {
+
+"use strict";
+
+// Support: Firefox <=44
+// Firefox doesn't have focus(in | out) events
+// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787
+//
+// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1
+// focus(in | out) events fire after focus & blur events,
+// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order
+// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857
+if ( !support.focusin ) {
+       jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) {
+
+               // Attach a single capturing handler on the document while someone wants focusin/focusout
+               var handler = function( event ) {
+                       jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );
+               };
+
+               jQuery.event.special[ fix ] = {
+                       setup: function() {
+                               var doc = this.ownerDocument || this,
+                                       attaches = dataPriv.access( doc, fix );
+
+                               if ( !attaches ) {
+                                       doc.addEventListener( orig, handler, true );
+                               }
+                               dataPriv.access( doc, fix, ( attaches || 0 ) + 1 );
+                       },
+                       teardown: function() {
+                               var doc = this.ownerDocument || this,
+                                       attaches = dataPriv.access( doc, fix ) - 1;
+
+                               if ( !attaches ) {
+                                       doc.removeEventListener( orig, handler, true );
+                                       dataPriv.remove( doc, fix );
+
+                               } else {
+                                       dataPriv.access( doc, fix, attaches );
+                               }
+                       }
+               };
+       } );
+}
+
+return jQuery;
+} );
diff --git a/js/jquery/src/event/support.js b/js/jquery/src/event/support.js
new file mode 100644 (file)
index 0000000..e3db9ad
--- /dev/null
@@ -0,0 +1,11 @@
+define( [
+       "../var/support"
+], function( support ) {
+
+"use strict";
+
+support.focusin = "onfocusin" in window;
+
+return support;
+
+} );
diff --git a/js/jquery/src/event/trigger.js b/js/jquery/src/event/trigger.js
new file mode 100644 (file)
index 0000000..ef39137
--- /dev/null
@@ -0,0 +1,185 @@
+define( [
+       "../core",
+       "../var/document",
+       "../data/var/dataPriv",
+       "../data/var/acceptData",
+       "../var/hasOwn",
+
+       "../event"
+], function( jQuery, document, dataPriv, acceptData, hasOwn ) {
+
+"use strict";
+
+var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/;
+
+jQuery.extend( jQuery.event, {
+
+       trigger: function( event, data, elem, onlyHandlers ) {
+
+               var i, cur, tmp, bubbleType, ontype, handle, special,
+                       eventPath = [ elem || document ],
+                       type = hasOwn.call( event, "type" ) ? event.type : event,
+                       namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : [];
+
+               cur = tmp = elem = elem || document;
+
+               // Don't do events on text and comment nodes
+               if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
+                       return;
+               }
+
+               // focus/blur morphs to focusin/out; ensure we're not firing them right now
+               if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
+                       return;
+               }
+
+               if ( type.indexOf( "." ) > -1 ) {
+
+                       // Namespaced trigger; create a regexp to match event type in handle()
+                       namespaces = type.split( "." );
+                       type = namespaces.shift();
+                       namespaces.sort();
+               }
+               ontype = type.indexOf( ":" ) < 0 && "on" + type;
+
+               // Caller can pass in a jQuery.Event object, Object, or just an event type string
+               event = event[ jQuery.expando ] ?
+                       event :
+                       new jQuery.Event( type, typeof event === "object" && event );
+
+               // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
+               event.isTrigger = onlyHandlers ? 2 : 3;
+               event.namespace = namespaces.join( "." );
+               event.rnamespace = event.namespace ?
+                       new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) :
+                       null;
+
+               // Clean up the event in case it is being reused
+               event.result = undefined;
+               if ( !event.target ) {
+                       event.target = elem;
+               }
+
+               // Clone any incoming data and prepend the event, creating the handler arg list
+               data = data == null ?
+                       [ event ] :
+                       jQuery.makeArray( data, [ event ] );
+
+               // Allow special events to draw outside the lines
+               special = jQuery.event.special[ type ] || {};
+               if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
+                       return;
+               }
+
+               // Determine event propagation path in advance, per W3C events spec (#9951)
+               // Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
+               if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
+
+                       bubbleType = special.delegateType || type;
+                       if ( !rfocusMorph.test( bubbleType + type ) ) {
+                               cur = cur.parentNode;
+                       }
+                       for ( ; cur; cur = cur.parentNode ) {
+                               eventPath.push( cur );
+                               tmp = cur;
+                       }
+
+                       // Only add window if we got to document (e.g., not plain obj or detached DOM)
+                       if ( tmp === ( elem.ownerDocument || document ) ) {
+                               eventPath.push( tmp.defaultView || tmp.parentWindow || window );
+                       }
+               }
+
+               // Fire handlers on the event path
+               i = 0;
+               while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {
+
+                       event.type = i > 1 ?
+                               bubbleType :
+                               special.bindType || type;
+
+                       // jQuery handler
+                       handle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] &&
+                               dataPriv.get( cur, "handle" );
+                       if ( handle ) {
+                               handle.apply( cur, data );
+                       }
+
+                       // Native handler
+                       handle = ontype && cur[ ontype ];
+                       if ( handle && handle.apply && acceptData( cur ) ) {
+                               event.result = handle.apply( cur, data );
+                               if ( event.result === false ) {
+                                       event.preventDefault();
+                               }
+                       }
+               }
+               event.type = type;
+
+               // If nobody prevented the default action, do it now
+               if ( !onlyHandlers && !event.isDefaultPrevented() ) {
+
+                       if ( ( !special._default ||
+                               special._default.apply( eventPath.pop(), data ) === false ) &&
+                               acceptData( elem ) ) {
+
+                               // Call a native DOM method on the target with the same name as the event.
+                               // Don't do default actions on window, that's where global variables be (#6170)
+                               if ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) {
+
+                                       // Don't re-trigger an onFOO event when we call its FOO() method
+                                       tmp = elem[ ontype ];
+
+                                       if ( tmp ) {
+                                               elem[ ontype ] = null;
+                                       }
+
+                                       // Prevent re-triggering of the same event, since we already bubbled it above
+                                       jQuery.event.triggered = type;
+                                       elem[ type ]();
+                                       jQuery.event.triggered = undefined;
+
+                                       if ( tmp ) {
+                                               elem[ ontype ] = tmp;
+                                       }
+                               }
+                       }
+               }
+
+               return event.result;
+       },
+
+       // Piggyback on a donor event to simulate a different one
+       // Used only for `focus(in | out)` events
+       simulate: function( type, elem, event ) {
+               var e = jQuery.extend(
+                       new jQuery.Event(),
+                       event,
+                       {
+                               type: type,
+                               isSimulated: true
+                       }
+               );
+
+               jQuery.event.trigger( e, null, elem );
+       }
+
+} );
+
+jQuery.fn.extend( {
+
+       trigger: function( type, data ) {
+               return this.each( function() {
+                       jQuery.event.trigger( type, data, this );
+               } );
+       },
+       triggerHandler: function( type, data ) {
+               var elem = this[ 0 ];
+               if ( elem ) {
+                       return jQuery.event.trigger( type, data, elem, true );
+               }
+       }
+} );
+
+return jQuery;
+} );
diff --git a/js/jquery/src/exports/amd.js b/js/jquery/src/exports/amd.js
new file mode 100644 (file)
index 0000000..cbb1ef5
--- /dev/null
@@ -0,0 +1,26 @@
+define( [
+       "../core"
+], function( jQuery ) {
+
+"use strict";
+
+// Register as a named AMD module, since jQuery can be concatenated with other
+// files that may use define, but not via a proper concatenation script that
+// understands anonymous AMD modules. A named AMD is safest and most robust
+// way to register. Lowercase jquery is used because AMD module names are
+// derived from file names, and jQuery is normally delivered in a lowercase
+// file name. Do this after creating the global so that if an AMD module wants
+// to call noConflict to hide this version of jQuery, it will work.
+
+// Note that for maximum portability, libraries that are not jQuery should
+// declare themselves as anonymous modules, and avoid setting a global if an
+// AMD loader is present. jQuery is a special case. For more information, see
+// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon
+
+if ( typeof define === "function" && define.amd ) {
+       define( "jquery", [], function() {
+               return jQuery;
+       } );
+}
+
+} );
diff --git a/js/jquery/src/exports/global.js b/js/jquery/src/exports/global.js
new file mode 100644 (file)
index 0000000..460b56e
--- /dev/null
@@ -0,0 +1,34 @@
+define( [
+       "../core"
+], function( jQuery, noGlobal ) {
+
+"use strict";
+
+var
+
+       // Map over jQuery in case of overwrite
+       _jQuery = window.jQuery,
+
+       // Map over the $ in case of overwrite
+       _$ = window.$;
+
+jQuery.noConflict = function( deep ) {
+       if ( window.$ === jQuery ) {
+               window.$ = _$;
+       }
+
+       if ( deep && window.jQuery === jQuery ) {
+               window.jQuery = _jQuery;
+       }
+
+       return jQuery;
+};
+
+// Expose jQuery and $ identifiers, even in AMD
+// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
+// and CommonJS for browser emulators (#13566)
+if ( !noGlobal ) {
+       window.jQuery = window.$ = jQuery;
+}
+
+} );
diff --git a/js/jquery/src/jquery.js b/js/jquery/src/jquery.js
new file mode 100644 (file)
index 0000000..52fc87d
--- /dev/null
@@ -0,0 +1,41 @@
+define( [
+       "./core",
+       "./selector",
+       "./traversing",
+       "./callbacks",
+       "./deferred",
+       "./deferred/exceptionHook",
+       "./core/ready",
+       "./data",
+       "./queue",
+       "./queue/delay",
+       "./attributes",
+       "./event",
+       "./event/alias",
+       "./event/focusin",
+       "./manipulation",
+       "./manipulation/_evalUrl",
+       "./wrap",
+       "./css",
+       "./css/hiddenVisibleSelectors",
+       "./serialize",
+       "./ajax",
+       "./ajax/xhr",
+       "./ajax/script",
+       "./ajax/jsonp",
+       "./ajax/load",
+       "./event/ajax",
+       "./effects",
+       "./effects/animatedSelector",
+       "./offset",
+       "./dimensions",
+       "./deprecated",
+       "./exports/amd",
+       "./exports/global"
+], function( jQuery ) {
+
+"use strict";
+
+return jQuery;
+
+} );
diff --git a/js/jquery/src/manipulation.js b/js/jquery/src/manipulation.js
new file mode 100644 (file)
index 0000000..cd225a6
--- /dev/null
@@ -0,0 +1,488 @@
+define( [
+       "./core",
+       "./var/concat",
+       "./var/push",
+       "./core/access",
+       "./manipulation/var/rcheckableType",
+       "./manipulation/var/rtagName",
+       "./manipulation/var/rscriptType",
+       "./manipulation/wrapMap",
+       "./manipulation/getAll",
+       "./manipulation/setGlobalEval",
+       "./manipulation/buildFragment",
+       "./manipulation/support",
+
+       "./data/var/dataPriv",
+       "./data/var/dataUser",
+       "./data/var/acceptData",
+       "./core/DOMEval",
+       "./core/nodeName",
+
+       "./core/init",
+       "./traversing",
+       "./selector",
+       "./event"
+], function( jQuery, concat, push, access,
+       rcheckableType, rtagName, rscriptType,
+       wrapMap, getAll, setGlobalEval, buildFragment, support,
+       dataPriv, dataUser, acceptData, DOMEval, nodeName ) {
+
+"use strict";
+
+var
+
+       /* eslint-disable max-len */
+
+       // See https://github.com/eslint/eslint/issues/3229
+       rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,
+
+       /* eslint-enable */
+
+       // Support: IE <=10 - 11, Edge 12 - 13
+       // In IE/Edge using regex groups here causes severe slowdowns.
+       // See https://connect.microsoft.com/IE/feedback/details/1736512/
+       rnoInnerhtml = /<script|<style|<link/i,
+
+       // checked="checked" or checked
+       rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
+       rscriptTypeMasked = /^true\/(.*)/,
+       rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;
+
+// Prefer a tbody over its parent table for containing new rows
+function manipulationTarget( elem, content ) {
+       if ( nodeName( elem, "table" ) &&
+               nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) {
+
+               return jQuery( ">tbody", elem )[ 0 ] || elem;
+       }
+
+       return elem;
+}
+
+// Replace/restore the type attribute of script elements for safe DOM manipulation
+function disableScript( elem ) {
+       elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type;
+       return elem;
+}
+function restoreScript( elem ) {
+       var match = rscriptTypeMasked.exec( elem.type );
+
+       if ( match ) {
+               elem.type = match[ 1 ];
+       } else {
+               elem.removeAttribute( "type" );
+       }
+
+       return elem;
+}
+
+function cloneCopyEvent( src, dest ) {
+       var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;
+
+       if ( dest.nodeType !== 1 ) {
+               return;
+       }
+
+       // 1. Copy private data: events, handlers, etc.
+       if ( dataPriv.hasData( src ) ) {
+               pdataOld = dataPriv.access( src );
+               pdataCur = dataPriv.set( dest, pdataOld );
+               events = pdataOld.events;
+
+               if ( events ) {
+                       delete pdataCur.handle;
+                       pdataCur.events = {};
+
+                       for ( type in events ) {
+                               for ( i = 0, l = events[ type ].length; i < l; i++ ) {
+                                       jQuery.event.add( dest, type, events[ type ][ i ] );
+                               }
+                       }
+               }
+       }
+
+       // 2. Copy user data
+       if ( dataUser.hasData( src ) ) {
+               udataOld = dataUser.access( src );
+               udataCur = jQuery.extend( {}, udataOld );
+
+               dataUser.set( dest, udataCur );
+       }
+}
+
+// Fix IE bugs, see support tests
+function fixInput( src, dest ) {
+       var nodeName = dest.nodeName.toLowerCase();
+
+       // Fails to persist the checked state of a cloned checkbox or radio button.
+       if ( nodeName === "input" && rcheckableType.test( src.type ) ) {
+               dest.checked = src.checked;
+
+       // Fails to return the selected option to the default selected state when cloning options
+       } else if ( nodeName === "input" || nodeName === "textarea" ) {
+               dest.defaultValue = src.defaultValue;
+       }
+}
+
+function domManip( collection, args, callback, ignored ) {
+
+       // Flatten any nested arrays
+       args = concat.apply( [], args );
+
+       var fragment, first, scripts, hasScripts, node, doc,
+               i = 0,
+               l = collection.length,
+               iNoClone = l - 1,
+               value = args[ 0 ],
+               isFunction = jQuery.isFunction( value );
+
+       // We can't cloneNode fragments that contain checked, in WebKit
+       if ( isFunction ||
+                       ( l > 1 && typeof value === "string" &&
+                               !support.checkClone && rchecked.test( value ) ) ) {
+               return collection.each( function( index ) {
+                       var self = collection.eq( index );
+                       if ( isFunction ) {
+                               args[ 0 ] = value.call( this, index, self.html() );
+                       }
+                       domManip( self, args, callback, ignored );
+               } );
+       }
+
+       if ( l ) {
+               fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );
+               first = fragment.firstChild;
+
+               if ( fragment.childNodes.length === 1 ) {
+                       fragment = first;
+               }
+
+               // Require either new content or an interest in ignored elements to invoke the callback
+               if ( first || ignored ) {
+                       scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
+                       hasScripts = scripts.length;
+
+                       // Use the original fragment for the last item
+                       // instead of the first because it can end up
+                       // being emptied incorrectly in certain situations (#8070).
+                       for ( ; i < l; i++ ) {
+                               node = fragment;
+
+                               if ( i !== iNoClone ) {
+                                       node = jQuery.clone( node, true, true );
+
+                                       // Keep references to cloned scripts for later restoration
+                                       if ( hasScripts ) {
+
+                                               // Support: Android <=4.0 only, PhantomJS 1 only
+                                               // push.apply(_, arraylike) throws on ancient WebKit
+                                               jQuery.merge( scripts, getAll( node, "script" ) );
+                                       }
+                               }
+
+                               callback.call( collection[ i ], node, i );
+                       }
+
+                       if ( hasScripts ) {
+                               doc = scripts[ scripts.length - 1 ].ownerDocument;
+
+                               // Reenable scripts
+                               jQuery.map( scripts, restoreScript );
+
+                               // Evaluate executable scripts on first document insertion
+                               for ( i = 0; i < hasScripts; i++ ) {
+                                       node = scripts[ i ];
+                                       if ( rscriptType.test( node.type || "" ) &&
+                                               !dataPriv.access( node, "globalEval" ) &&
+                                               jQuery.contains( doc, node ) ) {
+
+                                               if ( node.src ) {
+
+                                                       // Optional AJAX dependency, but won't run scripts if not present
+                                                       if ( jQuery._evalUrl ) {
+                                                               jQuery._evalUrl( node.src );
+                                                       }
+                                               } else {
+                                                       DOMEval( node.textContent.replace( rcleanScript, "" ), doc );
+                                               }
+                                       }
+                               }
+                       }
+               }
+       }
+
+       return collection;
+}
+
+function remove( elem, selector, keepData ) {
+       var node,
+               nodes = selector ? jQuery.filter( selector, elem ) : elem,
+               i = 0;
+
+       for ( ; ( node = nodes[ i ] ) != null; i++ ) {
+               if ( !keepData && node.nodeType === 1 ) {
+                       jQuery.cleanData( getAll( node ) );
+               }
+
+               if ( node.parentNode ) {
+                       if ( keepData && jQuery.contains( node.ownerDocument, node ) ) {
+                               setGlobalEval( getAll( node, "script" ) );
+                       }
+                       node.parentNode.removeChild( node );
+               }
+       }
+
+       return elem;
+}
+
+jQuery.extend( {
+       htmlPrefilter: function( html ) {
+               return html.replace( rxhtmlTag, "<$1></$2>" );
+       },
+
+       clone: function( elem, dataAndEvents, deepDataAndEvents ) {
+               var i, l, srcElements, destElements,
+                       clone = elem.cloneNode( true ),
+                       inPage = jQuery.contains( elem.ownerDocument, elem );
+
+               // Fix IE cloning issues
+               if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&
+                               !jQuery.isXMLDoc( elem ) ) {
+
+                       // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2
+                       destElements = getAll( clone );
+                       srcElements = getAll( elem );
+
+                       for ( i = 0, l = srcElements.length; i < l; i++ ) {
+                               fixInput( srcElements[ i ], destElements[ i ] );
+                       }
+               }
+
+               // Copy the events from the original to the clone
+               if ( dataAndEvents ) {
+                       if ( deepDataAndEvents ) {
+                               srcElements = srcElements || getAll( elem );
+                               destElements = destElements || getAll( clone );
+
+                               for ( i = 0, l = srcElements.length; i < l; i++ ) {
+                                       cloneCopyEvent( srcElements[ i ], destElements[ i ] );
+                               }
+                       } else {
+                               cloneCopyEvent( elem, clone );
+                       }
+               }
+
+               // Preserve script evaluation history
+               destElements = getAll( clone, "script" );
+               if ( destElements.length > 0 ) {
+                       setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
+               }
+
+               // Return the cloned set
+               return clone;
+       },
+
+       cleanData: function( elems ) {
+               var data, elem, type,
+                       special = jQuery.event.special,
+                       i = 0;
+
+               for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {
+                       if ( acceptData( elem ) ) {
+                               if ( ( data = elem[ dataPriv.expando ] ) ) {
+                                       if ( data.events ) {
+                                               for ( type in data.events ) {
+                                                       if ( special[ type ] ) {
+                                                               jQuery.event.remove( elem, type );
+
+                                                       // This is a shortcut to avoid jQuery.event.remove's overhead
+                                                       } else {
+                                                               jQuery.removeEvent( elem, type, data.handle );
+                                                       }
+                                               }
+                                       }
+
+                                       // Support: Chrome <=35 - 45+
+                                       // Assign undefined instead of using delete, see Data#remove
+                                       elem[ dataPriv.expando ] = undefined;
+                               }
+                               if ( elem[ dataUser.expando ] ) {
+
+                                       // Support: Chrome <=35 - 45+
+                                       // Assign undefined instead of using delete, see Data#remove
+                                       elem[ dataUser.expando ] = undefined;
+                               }
+                       }
+               }
+       }
+} );
+
+jQuery.fn.extend( {
+       detach: function( selector ) {
+               return remove( this, selector, true );
+       },
+
+       remove: function( selector ) {
+               return remove( this, selector );
+       },
+
+       text: function( value ) {
+               return access( this, function( value ) {
+                       return value === undefined ?
+                               jQuery.text( this ) :
+                               this.empty().each( function() {
+                                       if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+                                               this.textContent = value;
+                                       }
+                               } );
+               }, null, value, arguments.length );
+       },
+
+       append: function() {
+               return domManip( this, arguments, function( elem ) {
+                       if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+                               var target = manipulationTarget( this, elem );
+                               target.appendChild( elem );
+                       }
+               } );
+       },
+
+       prepend: function() {
+               return domManip( this, arguments, function( elem ) {
+                       if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+                               var target = manipulationTarget( this, elem );
+                               target.insertBefore( elem, target.firstChild );
+                       }
+               } );
+       },
+
+       before: function() {
+               return domManip( this, arguments, function( elem ) {
+                       if ( this.parentNode ) {
+                               this.parentNode.insertBefore( elem, this );
+                       }
+               } );
+       },
+
+       after: function() {
+               return domManip( this, arguments, function( elem ) {
+                       if ( this.parentNode ) {
+                               this.parentNode.insertBefore( elem, this.nextSibling );
+                       }
+               } );
+       },
+
+       empty: function() {
+               var elem,
+                       i = 0;
+
+               for ( ; ( elem = this[ i ] ) != null; i++ ) {
+                       if ( elem.nodeType === 1 ) {
+
+                               // Prevent memory leaks
+                               jQuery.cleanData( getAll( elem, false ) );
+
+                               // Remove any remaining nodes
+                               elem.textContent = "";
+                       }
+               }
+
+               return this;
+       },
+
+       clone: function( dataAndEvents, deepDataAndEvents ) {
+               dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
+               deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
+
+               return this.map( function() {
+                       return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
+               } );
+       },
+
+       html: function( value ) {
+               return access( this, function( value ) {
+                       var elem = this[ 0 ] || {},
+                               i = 0,
+                               l = this.length;
+
+                       if ( value === undefined && elem.nodeType === 1 ) {
+                               return elem.innerHTML;
+                       }
+
+                       // See if we can take a shortcut and just use innerHTML
+                       if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
+                               !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) {
+
+                               value = jQuery.htmlPrefilter( value );
+
+                               try {
+                                       for ( ; i < l; i++ ) {
+                                               elem = this[ i ] || {};
+
+                                               // Remove element nodes and prevent memory leaks
+                                               if ( elem.nodeType === 1 ) {
+                                                       jQuery.cleanData( getAll( elem, false ) );
+                                                       elem.innerHTML = value;
+                                               }
+                                       }
+
+                                       elem = 0;
+
+                               // If using innerHTML throws an exception, use the fallback method
+                               } catch ( e ) {}
+                       }
+
+                       if ( elem ) {
+                               this.empty().append( value );
+                       }
+               }, null, value, arguments.length );
+       },
+
+       replaceWith: function() {
+               var ignored = [];
+
+               // Make the changes, replacing each non-ignored context element with the new content
+               return domManip( this, arguments, function( elem ) {
+                       var parent = this.parentNode;
+
+                       if ( jQuery.inArray( this, ignored ) < 0 ) {
+                               jQuery.cleanData( getAll( this ) );
+                               if ( parent ) {
+                                       parent.replaceChild( elem, this );
+                               }
+                       }
+
+               // Force callback invocation
+               }, ignored );
+       }
+} );
+
+jQuery.each( {
+       appendTo: "append",
+       prependTo: "prepend",
+       insertBefore: "before",
+       insertAfter: "after",
+       replaceAll: "replaceWith"
+}, function( name, original ) {
+       jQuery.fn[ name ] = function( selector ) {
+               var elems,
+                       ret = [],
+                       insert = jQuery( selector ),
+                       last = insert.length - 1,
+                       i = 0;
+
+               for ( ; i <= last; i++ ) {
+                       elems = i === last ? this : this.clone( true );
+                       jQuery( insert[ i ] )[ original ]( elems );
+
+                       // Support: Android <=4.0 only, PhantomJS 1 only
+                       // .get() because push.apply(_, arraylike) throws on ancient WebKit
+                       push.apply( ret, elems.get() );
+               }
+
+               return this.pushStack( ret );
+       };
+} );
+
+return jQuery;
+} );
diff --git a/js/jquery/src/manipulation/_evalUrl.js b/js/jquery/src/manipulation/_evalUrl.js
new file mode 100644 (file)
index 0000000..f9ec702
--- /dev/null
@@ -0,0 +1,23 @@
+define( [
+       "../ajax"
+], function( jQuery ) {
+
+"use strict";
+
+jQuery._evalUrl = function( url ) {
+       return jQuery.ajax( {
+               url: url,
+
+               // Make this explicit, since user can override this through ajaxSetup (#11264)
+               type: "GET",
+               dataType: "script",
+               cache: true,
+               async: false,
+               global: false,
+               "throws": true
+       } );
+};
+
+return jQuery._evalUrl;
+
+} );
diff --git a/js/jquery/src/manipulation/buildFragment.js b/js/jquery/src/manipulation/buildFragment.js
new file mode 100644 (file)
index 0000000..bcb5085
--- /dev/null
@@ -0,0 +1,104 @@
+define( [
+       "../core",
+       "./var/rtagName",
+       "./var/rscriptType",
+       "./wrapMap",
+       "./getAll",
+       "./setGlobalEval"
+], function( jQuery, rtagName, rscriptType, wrapMap, getAll, setGlobalEval ) {
+
+"use strict";
+
+var rhtml = /<|&#?\w+;/;
+
+function buildFragment( elems, context, scripts, selection, ignored ) {
+       var elem, tmp, tag, wrap, contains, j,
+               fragment = context.createDocumentFragment(),
+               nodes = [],
+               i = 0,
+               l = elems.length;
+
+       for ( ; i < l; i++ ) {
+               elem = elems[ i ];
+
+               if ( elem || elem === 0 ) {
+
+                       // Add nodes directly
+                       if ( jQuery.type( elem ) === "object" ) {
+
+                               // Support: Android <=4.0 only, PhantomJS 1 only
+                               // push.apply(_, arraylike) throws on ancient WebKit
+                               jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
+
+                       // Convert non-html into a text node
+                       } else if ( !rhtml.test( elem ) ) {
+                               nodes.push( context.createTextNode( elem ) );
+
+                       // Convert html into DOM nodes
+                       } else {
+                               tmp = tmp || fragment.appendChild( context.createElement( "div" ) );
+
+                               // Deserialize a standard representation
+                               tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase();
+                               wrap = wrapMap[ tag ] || wrapMap._default;
+                               tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];
+
+                               // Descend through wrappers to the right content
+                               j = wrap[ 0 ];
+                               while ( j-- ) {
+                                       tmp = tmp.lastChild;
+                               }
+
+                               // Support: Android <=4.0 only, PhantomJS 1 only
+                               // push.apply(_, arraylike) throws on ancient WebKit
+                               jQuery.merge( nodes, tmp.childNodes );
+
+                               // Remember the top-level container
+                               tmp = fragment.firstChild;
+
+                               // Ensure the created nodes are orphaned (#12392)
+                               tmp.textContent = "";
+                       }
+               }
+       }
+
+       // Remove wrapper from fragment
+       fragment.textContent = "";
+
+       i = 0;
+       while ( ( elem = nodes[ i++ ] ) ) {
+
+               // Skip elements already in the context collection (trac-4087)
+               if ( selection && jQuery.inArray( elem, selection ) > -1 ) {
+                       if ( ignored ) {
+                               ignored.push( elem );
+                       }
+                       continue;
+               }
+
+               contains = jQuery.contains( elem.ownerDocument, elem );
+
+               // Append to fragment
+               tmp = getAll( fragment.appendChild( elem ), "script" );
+
+               // Preserve script evaluation history
+               if ( contains ) {
+                       setGlobalEval( tmp );
+               }
+
+               // Capture executables
+               if ( scripts ) {
+                       j = 0;
+                       while ( ( elem = tmp[ j++ ] ) ) {
+                               if ( rscriptType.test( elem.type || "" ) ) {
+                                       scripts.push( elem );
+                               }
+                       }
+               }
+       }
+
+       return fragment;
+}
+
+return buildFragment;
+} );
diff --git a/js/jquery/src/manipulation/getAll.js b/js/jquery/src/manipulation/getAll.js
new file mode 100644 (file)
index 0000000..fede6c7
--- /dev/null
@@ -0,0 +1,32 @@
+define( [
+       "../core",
+       "../core/nodeName"
+], function( jQuery, nodeName ) {
+
+"use strict";
+
+function getAll( context, tag ) {
+
+       // Support: IE <=9 - 11 only
+       // Use typeof to avoid zero-argument method invocation on host objects (#15151)
+       var ret;
+
+       if ( typeof context.getElementsByTagName !== "undefined" ) {
+               ret = context.getElementsByTagName( tag || "*" );
+
+       } else if ( typeof context.querySelectorAll !== "undefined" ) {
+               ret = context.querySelectorAll( tag || "*" );
+
+       } else {
+               ret = [];
+       }
+
+       if ( tag === undefined || tag && nodeName( context, tag ) ) {
+               return jQuery.merge( [ context ], ret );
+       }
+
+       return ret;
+}
+
+return getAll;
+} );
diff --git a/js/jquery/src/manipulation/setGlobalEval.js b/js/jquery/src/manipulation/setGlobalEval.js
new file mode 100644 (file)
index 0000000..cf95240
--- /dev/null
@@ -0,0 +1,22 @@
+define( [
+       "../data/var/dataPriv"
+], function( dataPriv ) {
+
+"use strict";
+
+// Mark scripts as having already been evaluated
+function setGlobalEval( elems, refElements ) {
+       var i = 0,
+               l = elems.length;
+
+       for ( ; i < l; i++ ) {
+               dataPriv.set(
+                       elems[ i ],
+                       "globalEval",
+                       !refElements || dataPriv.get( refElements[ i ], "globalEval" )
+               );
+       }
+}
+
+return setGlobalEval;
+} );
diff --git a/js/jquery/src/manipulation/support.js b/js/jquery/src/manipulation/support.js
new file mode 100644 (file)
index 0000000..4a5d9af
--- /dev/null
@@ -0,0 +1,35 @@
+define( [
+       "../var/document",
+       "../var/support"
+], function( document, support ) {
+
+"use strict";
+
+( function() {
+       var fragment = document.createDocumentFragment(),
+               div = fragment.appendChild( document.createElement( "div" ) ),
+               input = document.createElement( "input" );
+
+       // Support: Android 4.0 - 4.3 only
+       // Check state lost if the name is set (#11217)
+       // Support: Windows Web Apps (WWA)
+       // `name` and `type` must use .setAttribute for WWA (#14901)
+       input.setAttribute( "type", "radio" );
+       input.setAttribute( "checked", "checked" );
+       input.setAttribute( "name", "t" );
+
+       div.appendChild( input );
+
+       // Support: Android <=4.1 only
+       // Older WebKit doesn't clone checked state correctly in fragments
+       support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
+
+       // Support: IE <=11 only
+       // Make sure textarea (and checkbox) defaultValue is properly cloned
+       div.innerHTML = "<textarea>x</textarea>";
+       support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
+} )();
+
+return support;
+
+} );
diff --git a/js/jquery/src/manipulation/var/rcheckableType.js b/js/jquery/src/manipulation/var/rcheckableType.js
new file mode 100644 (file)
index 0000000..25bbcb4
--- /dev/null
@@ -0,0 +1,5 @@
+define( function() {
+       "use strict";
+
+       return ( /^(?:checkbox|radio)$/i );
+} );
diff --git a/js/jquery/src/manipulation/var/rscriptType.js b/js/jquery/src/manipulation/var/rscriptType.js
new file mode 100644 (file)
index 0000000..7237c8a
--- /dev/null
@@ -0,0 +1,5 @@
+define( function() {
+       "use strict";
+
+       return ( /^$|\/(?:java|ecma)script/i );
+} );
diff --git a/js/jquery/src/manipulation/var/rtagName.js b/js/jquery/src/manipulation/var/rtagName.js
new file mode 100644 (file)
index 0000000..d565dd3
--- /dev/null
@@ -0,0 +1,5 @@
+define( function() {
+       "use strict";
+
+       return ( /<([a-z][^\/\0>\x20\t\r\n\f]+)/i );
+} );
diff --git a/js/jquery/src/manipulation/wrapMap.js b/js/jquery/src/manipulation/wrapMap.js
new file mode 100644 (file)
index 0000000..1f446f7
--- /dev/null
@@ -0,0 +1,29 @@
+define( function() {
+
+"use strict";
+
+// We have to close these tags to support XHTML (#13200)
+var wrapMap = {
+
+       // Support: IE <=9 only
+       option: [ 1, "<select multiple='multiple'>", "</select>" ],
+
+       // XHTML parsers do not magically insert elements in the
+       // same way that tag soup parsers do. So we cannot shorten
+       // this by omitting <tbody> or other required elements.
+       thead: [ 1, "<table>", "</table>" ],
+       col: [ 2, "<table><colgroup>", "</colgroup></table>" ],
+       tr: [ 2, "<table><tbody>", "</tbody></table>" ],
+       td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
+
+       _default: [ 0, "", "" ]
+};
+
+// Support: IE <=9 only
+wrapMap.optgroup = wrapMap.option;
+
+wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
+wrapMap.th = wrapMap.td;
+
+return wrapMap;
+} );
diff --git a/js/jquery/src/offset.js b/js/jquery/src/offset.js
new file mode 100644 (file)
index 0000000..c1ab857
--- /dev/null
@@ -0,0 +1,229 @@
+define( [
+       "./core",
+       "./core/access",
+       "./var/document",
+       "./var/documentElement",
+       "./css/var/rnumnonpx",
+       "./css/curCSS",
+       "./css/addGetHookIf",
+       "./css/support",
+       "./core/nodeName",
+
+       "./core/init",
+       "./css",
+       "./selector" // contains
+], function( jQuery, access, document, documentElement, rnumnonpx,
+             curCSS, addGetHookIf, support, nodeName ) {
+
+"use strict";
+
+jQuery.offset = {
+       setOffset: function( elem, options, i ) {
+               var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,
+                       position = jQuery.css( elem, "position" ),
+                       curElem = jQuery( elem ),
+                       props = {};
+
+               // Set position first, in-case top/left are set even on static elem
+               if ( position === "static" ) {
+                       elem.style.position = "relative";
+               }
+
+               curOffset = curElem.offset();
+               curCSSTop = jQuery.css( elem, "top" );
+               curCSSLeft = jQuery.css( elem, "left" );
+               calculatePosition = ( position === "absolute" || position === "fixed" ) &&
+                       ( curCSSTop + curCSSLeft ).indexOf( "auto" ) > -1;
+
+               // Need to be able to calculate position if either
+               // top or left is auto and position is either absolute or fixed
+               if ( calculatePosition ) {
+                       curPosition = curElem.position();
+                       curTop = curPosition.top;
+                       curLeft = curPosition.left;
+
+               } else {
+                       curTop = parseFloat( curCSSTop ) || 0;
+                       curLeft = parseFloat( curCSSLeft ) || 0;
+               }
+
+               if ( jQuery.isFunction( options ) ) {
+
+                       // Use jQuery.extend here to allow modification of coordinates argument (gh-1848)
+                       options = options.call( elem, i, jQuery.extend( {}, curOffset ) );
+               }
+
+               if ( options.top != null ) {
+                       props.top = ( options.top - curOffset.top ) + curTop;
+               }
+               if ( options.left != null ) {
+                       props.left = ( options.left - curOffset.left ) + curLeft;
+               }
+
+               if ( "using" in options ) {
+                       options.using.call( elem, props );
+
+               } else {
+                       curElem.css( props );
+               }
+       }
+};
+
+jQuery.fn.extend( {
+       offset: function( options ) {
+
+               // Preserve chaining for setter
+               if ( arguments.length ) {
+                       return options === undefined ?
+                               this :
+                               this.each( function( i ) {
+                                       jQuery.offset.setOffset( this, options, i );
+                               } );
+               }
+
+               var doc, docElem, rect, win,
+                       elem = this[ 0 ];
+
+               if ( !elem ) {
+                       return;
+               }
+
+               // Return zeros for disconnected and hidden (display: none) elements (gh-2310)
+               // Support: IE <=11 only
+               // Running getBoundingClientRect on a
+               // disconnected node in IE throws an error
+               if ( !elem.getClientRects().length ) {
+                       return { top: 0, left: 0 };
+               }
+
+               rect = elem.getBoundingClientRect();
+
+               doc = elem.ownerDocument;
+               docElem = doc.documentElement;
+               win = doc.defaultView;
+
+               return {
+                       top: rect.top + win.pageYOffset - docElem.clientTop,
+                       left: rect.left + win.pageXOffset - docElem.clientLeft
+               };
+       },
+
+       position: function() {
+               if ( !this[ 0 ] ) {
+                       return;
+               }
+
+               var offsetParent, offset,
+                       elem = this[ 0 ],
+                       parentOffset = { top: 0, left: 0 };
+
+               // Fixed elements are offset from window (parentOffset = {top:0, left: 0},
+               // because it is its only offset parent
+               if ( jQuery.css( elem, "position" ) === "fixed" ) {
+
+                       // Assume getBoundingClientRect is there when computed position is fixed
+                       offset = elem.getBoundingClientRect();
+
+               } else {
+
+                       // Get *real* offsetParent
+                       offsetParent = this.offsetParent();
+
+                       // Get correct offsets
+                       offset = this.offset();
+                       if ( !nodeName( offsetParent[ 0 ], "html" ) ) {
+                               parentOffset = offsetParent.offset();
+                       }
+
+                       // Add offsetParent borders
+                       parentOffset = {
+                               top: parentOffset.top + jQuery.css( offsetParent[ 0 ], "borderTopWidth", true ),
+                               left: parentOffset.left + jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true )
+                       };
+               }
+
+               // Subtract parent offsets and element margins
+               return {
+                       top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ),
+                       left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true )
+               };
+       },
+
+       // This method will return documentElement in the following cases:
+       // 1) For the element inside the iframe without offsetParent, this method will return
+       //    documentElement of the parent window
+       // 2) For the hidden or detached element
+       // 3) For body or html element, i.e. in case of the html node - it will return itself
+       //
+       // but those exceptions were never presented as a real life use-cases
+       // and might be considered as more preferable results.
+       //
+       // This logic, however, is not guaranteed and can change at any point in the future
+       offsetParent: function() {
+               return this.map( function() {
+                       var offsetParent = this.offsetParent;
+
+                       while ( offsetParent && jQuery.css( offsetParent, "position" ) === "static" ) {
+                               offsetParent = offsetParent.offsetParent;
+                       }
+
+                       return offsetParent || documentElement;
+               } );
+       }
+} );
+
+// Create scrollLeft and scrollTop methods
+jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) {
+       var top = "pageYOffset" === prop;
+
+       jQuery.fn[ method ] = function( val ) {
+               return access( this, function( elem, method, val ) {
+
+                       // Coalesce documents and windows
+                       var win;
+                       if ( jQuery.isWindow( elem ) ) {
+                               win = elem;
+                       } else if ( elem.nodeType === 9 ) {
+                               win = elem.defaultView;
+                       }
+
+                       if ( val === undefined ) {
+                               return win ? win[ prop ] : elem[ method ];
+                       }
+
+                       if ( win ) {
+                               win.scrollTo(
+                                       !top ? val : win.pageXOffset,
+                                       top ? val : win.pageYOffset
+                               );
+
+                       } else {
+                               elem[ method ] = val;
+                       }
+               }, method, val, arguments.length );
+       };
+} );
+
+// Support: Safari <=7 - 9.1, Chrome <=37 - 49
+// Add the top/left cssHooks using jQuery.fn.position
+// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
+// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347
+// getComputedStyle returns percent when specified for top/left/bottom/right;
+// rather than make the css module depend on the offset module, just check for it here
+jQuery.each( [ "top", "left" ], function( i, prop ) {
+       jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,
+               function( elem, computed ) {
+                       if ( computed ) {
+                               computed = curCSS( elem, prop );
+
+                               // If curCSS returns percentage, fallback to offset
+                               return rnumnonpx.test( computed ) ?
+                                       jQuery( elem ).position()[ prop ] + "px" :
+                                       computed;
+                       }
+               }
+       );
+} );
+
+return jQuery;
+} );
diff --git a/js/jquery/src/queue.js b/js/jquery/src/queue.js
new file mode 100644 (file)
index 0000000..fbbbeab
--- /dev/null
@@ -0,0 +1,145 @@
+define( [
+       "./core",
+       "./data/var/dataPriv",
+       "./deferred",
+       "./callbacks"
+], function( jQuery, dataPriv ) {
+
+"use strict";
+
+jQuery.extend( {
+       queue: function( elem, type, data ) {
+               var queue;
+
+               if ( elem ) {
+                       type = ( type || "fx" ) + "queue";
+                       queue = dataPriv.get( elem, type );
+
+                       // Speed up dequeue by getting out quickly if this is just a lookup
+                       if ( data ) {
+                               if ( !queue || Array.isArray( data ) ) {
+                                       queue = dataPriv.access( elem, type, jQuery.makeArray( data ) );
+                               } else {
+                                       queue.push( data );
+                               }
+                       }
+                       return queue || [];
+               }
+       },
+
+       dequeue: function( elem, type ) {
+               type = type || "fx";
+
+               var queue = jQuery.queue( elem, type ),
+                       startLength = queue.length,
+                       fn = queue.shift(),
+                       hooks = jQuery._queueHooks( elem, type ),
+                       next = function() {
+                               jQuery.dequeue( elem, type );
+                       };
+
+               // If the fx queue is dequeued, always remove the progress sentinel
+               if ( fn === "inprogress" ) {
+                       fn = queue.shift();
+                       startLength--;
+               }
+
+               if ( fn ) {
+
+                       // Add a progress sentinel to prevent the fx queue from being
+                       // automatically dequeued
+                       if ( type === "fx" ) {
+                               queue.unshift( "inprogress" );
+                       }
+
+                       // Clear up the last queue stop function
+                       delete hooks.stop;
+                       fn.call( elem, next, hooks );
+               }
+
+               if ( !startLength && hooks ) {
+                       hooks.empty.fire();
+               }
+       },
+
+       // Not public - generate a queueHooks object, or return the current one
+       _queueHooks: function( elem, type ) {
+               var key = type + "queueHooks";
+               return dataPriv.get( elem, key ) || dataPriv.access( elem, key, {
+                       empty: jQuery.Callbacks( "once memory" ).add( function() {
+                               dataPriv.remove( elem, [ type + "queue", key ] );
+                       } )
+               } );
+       }
+} );
+
+jQuery.fn.extend( {
+       queue: function( type, data ) {
+               var setter = 2;
+
+               if ( typeof type !== "string" ) {
+                       data = type;
+                       type = "fx";
+                       setter--;
+               }
+
+               if ( arguments.length < setter ) {
+                       return jQuery.queue( this[ 0 ], type );
+               }
+
+               return data === undefined ?
+                       this :
+                       this.each( function() {
+                               var queue = jQuery.queue( this, type, data );
+
+                               // Ensure a hooks for this queue
+                               jQuery._queueHooks( this, type );
+
+                               if ( type === "fx" && queue[ 0 ] !== "inprogress" ) {
+                                       jQuery.dequeue( this, type );
+                               }
+                       } );
+       },
+       dequeue: function( type ) {
+               return this.each( function() {
+                       jQuery.dequeue( this, type );
+               } );
+       },
+       clearQueue: function( type ) {
+               return this.queue( type || "fx", [] );
+       },
+
+       // Get a promise resolved when queues of a certain type
+       // are emptied (fx is the type by default)
+       promise: function( type, obj ) {
+               var tmp,
+                       count = 1,
+                       defer = jQuery.Deferred(),
+                       elements = this,
+                       i = this.length,
+                       resolve = function() {
+                               if ( !( --count ) ) {
+                                       defer.resolveWith( elements, [ elements ] );
+                               }
+                       };
+
+               if ( typeof type !== "string" ) {
+                       obj = type;
+                       type = undefined;
+               }
+               type = type || "fx";
+
+               while ( i-- ) {
+                       tmp = dataPriv.get( elements[ i ], type + "queueHooks" );
+                       if ( tmp && tmp.empty ) {
+                               count++;
+                               tmp.empty.add( resolve );
+                       }
+               }
+               resolve();
+               return defer.promise( obj );
+       }
+} );
+
+return jQuery;
+} );
diff --git a/js/jquery/src/queue/delay.js b/js/jquery/src/queue/delay.js
new file mode 100644 (file)
index 0000000..d471eed
--- /dev/null
@@ -0,0 +1,24 @@
+define( [
+       "../core",
+       "../queue",
+       "../effects" // Delay is optional because of this dependency
+], function( jQuery ) {
+
+"use strict";
+
+// Based off of the plugin by Clint Helfers, with permission.
+// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/
+jQuery.fn.delay = function( time, type ) {
+       time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
+       type = type || "fx";
+
+       return this.queue( type, function( next, hooks ) {
+               var timeout = window.setTimeout( next, time );
+               hooks.stop = function() {
+                       window.clearTimeout( timeout );
+               };
+       } );
+};
+
+return jQuery.fn.delay;
+} );
diff --git a/js/jquery/src/selector-native.js b/js/jquery/src/selector-native.js
new file mode 100644 (file)
index 0000000..da837a0
--- /dev/null
@@ -0,0 +1,237 @@
+define( [
+       "./core",
+       "./var/document",
+       "./var/documentElement",
+       "./var/hasOwn",
+       "./var/indexOf"
+], function( jQuery, document, documentElement, hasOwn, indexOf ) {
+
+"use strict";
+
+/*
+ * Optional (non-Sizzle) selector module for custom builds.
+ *
+ * Note that this DOES NOT SUPPORT many documented jQuery
+ * features in exchange for its smaller size:
+ *
+ * Attribute not equal selector
+ * Positional selectors (:first; :eq(n); :odd; etc.)
+ * Type selectors (:input; :checkbox; :button; etc.)
+ * State-based selectors (:animated; :visible; :hidden; etc.)
+ * :has(selector)
+ * :not(complex selector)
+ * custom selectors via Sizzle extensions
+ * Leading combinators (e.g., $collection.find("> *"))
+ * Reliable functionality on XML fragments
+ * Requiring all parts of a selector to match elements under context
+ *   (e.g., $div.find("div > *") now matches children of $div)
+ * Matching against non-elements
+ * Reliable sorting of disconnected nodes
+ * querySelectorAll bug fixes (e.g., unreliable :focus on WebKit)
+ *
+ * If any of these are unacceptable tradeoffs, either use Sizzle or
+ * customize this stub for the project's specific needs.
+ */
+
+var hasDuplicate, sortInput,
+       sortStable = jQuery.expando.split( "" ).sort( sortOrder ).join( "" ) === jQuery.expando,
+       matches = documentElement.matches ||
+               documentElement.webkitMatchesSelector ||
+               documentElement.mozMatchesSelector ||
+               documentElement.oMatchesSelector ||
+               documentElement.msMatchesSelector,
+
+       // CSS string/identifier serialization
+       // https://drafts.csswg.org/cssom/#common-serializing-idioms
+       rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g,
+       fcssescape = function( ch, asCodePoint ) {
+               if ( asCodePoint ) {
+
+                       // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER
+                       if ( ch === "\0" ) {
+                               return "\uFFFD";
+                       }
+
+                       // Control characters and (dependent upon position) numbers get escaped as code points
+                       return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " ";
+               }
+
+               // Other potentially-special ASCII characters get backslash-escaped
+               return "\\" + ch;
+       };
+
+function sortOrder( a, b ) {
+
+       // Flag for duplicate removal
+       if ( a === b ) {
+               hasDuplicate = true;
+               return 0;
+       }
+
+       // Sort on method existence if only one input has compareDocumentPosition
+       var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
+       if ( compare ) {
+               return compare;
+       }
+
+       // Calculate position if both inputs belong to the same document
+       compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?
+               a.compareDocumentPosition( b ) :
+
+               // Otherwise we know they are disconnected
+               1;
+
+       // Disconnected nodes
+       if ( compare & 1 ) {
+
+               // Choose the first element that is related to our preferred document
+               if ( a === document || a.ownerDocument === document &&
+                       jQuery.contains( document, a ) ) {
+                       return -1;
+               }
+               if ( b === document || b.ownerDocument === document &&
+                       jQuery.contains( document, b ) ) {
+                       return 1;
+               }
+
+               // Maintain original order
+               return sortInput ?
+                       ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :
+                       0;
+       }
+
+       return compare & 4 ? -1 : 1;
+}
+
+function uniqueSort( results ) {
+       var elem,
+               duplicates = [],
+               j = 0,
+               i = 0;
+
+       hasDuplicate = false;
+       sortInput = !sortStable && results.slice( 0 );
+       results.sort( sortOrder );
+
+       if ( hasDuplicate ) {
+               while ( ( elem = results[ i++ ] ) ) {
+                       if ( elem === results[ i ] ) {
+                               j = duplicates.push( i );
+                       }
+               }
+               while ( j-- ) {
+                       results.splice( duplicates[ j ], 1 );
+               }
+       }
+
+       // Clear input after sorting to release objects
+       // See https://github.com/jquery/sizzle/pull/225
+       sortInput = null;
+
+       return results;
+}
+
+function escape( sel ) {
+       return ( sel + "" ).replace( rcssescape, fcssescape );
+}
+
+jQuery.extend( {
+       uniqueSort: uniqueSort,
+       unique: uniqueSort,
+       escapeSelector: escape,
+       find: function( selector, context, results, seed ) {
+               var elem, nodeType,
+                       i = 0;
+
+               results = results || [];
+               context = context || document;
+
+               // Same basic safeguard as Sizzle
+               if ( !selector || typeof selector !== "string" ) {
+                       return results;
+               }
+
+               // Early return if context is not an element or document
+               if ( ( nodeType = context.nodeType ) !== 1 && nodeType !== 9 ) {
+                       return [];
+               }
+
+               if ( seed ) {
+                       while ( ( elem = seed[ i++ ] ) ) {
+                               if ( jQuery.find.matchesSelector( elem, selector ) ) {
+                                       results.push( elem );
+                               }
+                       }
+               } else {
+                       jQuery.merge( results, context.querySelectorAll( selector ) );
+               }
+
+               return results;
+       },
+       text: function( elem ) {
+               var node,
+                       ret = "",
+                       i = 0,
+                       nodeType = elem.nodeType;
+
+               if ( !nodeType ) {
+
+                       // If no nodeType, this is expected to be an array
+                       while ( ( node = elem[ i++ ] ) ) {
+
+                               // Do not traverse comment nodes
+                               ret += jQuery.text( node );
+                       }
+               } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
+
+                       // Use textContent for elements
+                       return elem.textContent;
+               } else if ( nodeType === 3 || nodeType === 4 ) {
+                       return elem.nodeValue;
+               }
+
+               // Do not include comment or processing instruction nodes
+
+               return ret;
+       },
+       contains: function( a, b ) {
+               var adown = a.nodeType === 9 ? a.documentElement : a,
+                       bup = b && b.parentNode;
+               return a === bup || !!( bup && bup.nodeType === 1 && adown.contains( bup ) );
+       },
+       isXMLDoc: function( elem ) {
+
+               // documentElement is verified for cases where it doesn't yet exist
+               // (such as loading iframes in IE - #4833)
+               var documentElement = elem && ( elem.ownerDocument || elem ).documentElement;
+               return documentElement ? documentElement.nodeName !== "HTML" : false;
+       },
+       expr: {
+               attrHandle: {},
+               match: {
+                       bool: new RegExp( "^(?:checked|selected|async|autofocus|autoplay|controls|defer" +
+                               "|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped)$", "i" ),
+                       needsContext: /^[\x20\t\r\n\f]*[>+~]/
+               }
+       }
+} );
+
+jQuery.extend( jQuery.find, {
+       matches: function( expr, elements ) {
+               return jQuery.find( expr, null, null, elements );
+       },
+       matchesSelector: function( elem, expr ) {
+               return matches.call( elem, expr );
+       },
+       attr: function( elem, name ) {
+               var fn = jQuery.expr.attrHandle[ name.toLowerCase() ],
+
+                       // Don't get fooled by Object.prototype properties (jQuery #13807)
+                       value = fn && hasOwn.call( jQuery.expr.attrHandle, name.toLowerCase() ) ?
+                               fn( elem, name, jQuery.isXMLDoc( elem ) ) :
+                               undefined;
+               return value !== undefined ? value : elem.getAttribute( name );
+       }
+} );
+
+} );
diff --git a/js/jquery/src/selector-sizzle.js b/js/jquery/src/selector-sizzle.js
new file mode 100644 (file)
index 0000000..ff7bc70
--- /dev/null
@@ -0,0 +1,19 @@
+define( [
+       "./core",
+       "../external/sizzle/dist/sizzle"
+], function( jQuery, Sizzle ) {
+
+"use strict";
+
+jQuery.find = Sizzle;
+jQuery.expr = Sizzle.selectors;
+
+// Deprecated
+jQuery.expr[ ":" ] = jQuery.expr.pseudos;
+jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;
+jQuery.text = Sizzle.getText;
+jQuery.isXMLDoc = Sizzle.isXML;
+jQuery.contains = Sizzle.contains;
+jQuery.escapeSelector = Sizzle.escape;
+
+} );
diff --git a/js/jquery/src/selector.js b/js/jquery/src/selector.js
new file mode 100644 (file)
index 0000000..2e0c17e
--- /dev/null
@@ -0,0 +1,3 @@
+define( [ "./selector-sizzle" ], function() {
+       "use strict";
+} );
diff --git a/js/jquery/src/serialize.js b/js/jquery/src/serialize.js
new file mode 100644 (file)
index 0000000..2e28ce1
--- /dev/null
@@ -0,0 +1,130 @@
+define( [
+       "./core",
+       "./manipulation/var/rcheckableType",
+       "./core/init",
+       "./traversing", // filter
+       "./attributes/prop"
+], function( jQuery, rcheckableType ) {
+
+"use strict";
+
+var
+       rbracket = /\[\]$/,
+       rCRLF = /\r?\n/g,
+       rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
+       rsubmittable = /^(?:input|select|textarea|keygen)/i;
+
+function buildParams( prefix, obj, traditional, add ) {
+       var name;
+
+       if ( Array.isArray( obj ) ) {
+
+               // Serialize array item.
+               jQuery.each( obj, function( i, v ) {
+                       if ( traditional || rbracket.test( prefix ) ) {
+
+                               // Treat each array item as a scalar.
+                               add( prefix, v );
+
+                       } else {
+
+                               // Item is non-scalar (array or object), encode its numeric index.
+                               buildParams(
+                                       prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]",
+                                       v,
+                                       traditional,
+                                       add
+                               );
+                       }
+               } );
+
+       } else if ( !traditional && jQuery.type( obj ) === "object" ) {
+
+               // Serialize object item.
+               for ( name in obj ) {
+                       buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
+               }
+
+       } else {
+
+               // Serialize scalar item.
+               add( prefix, obj );
+       }
+}
+
+// Serialize an array of form elements or a set of
+// key/values into a query string
+jQuery.param = function( a, traditional ) {
+       var prefix,
+               s = [],
+               add = function( key, valueOrFunction ) {
+
+                       // If value is a function, invoke it and use its return value
+                       var value = jQuery.isFunction( valueOrFunction ) ?
+                               valueOrFunction() :
+                               valueOrFunction;
+
+                       s[ s.length ] = encodeURIComponent( key ) + "=" +
+                               encodeURIComponent( value == null ? "" : value );
+               };
+
+       // If an array was passed in, assume that it is an array of form elements.
+       if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
+
+               // Serialize the form elements
+               jQuery.each( a, function() {
+                       add( this.name, this.value );
+               } );
+
+       } else {
+
+               // If traditional, encode the "old" way (the way 1.3.2 or older
+               // did it), otherwise encode params recursively.
+               for ( prefix in a ) {
+                       buildParams( prefix, a[ prefix ], traditional, add );
+               }
+       }
+
+       // Return the resulting serialization
+       return s.join( "&" );
+};
+
+jQuery.fn.extend( {
+       serialize: function() {
+               return jQuery.param( this.serializeArray() );
+       },
+       serializeArray: function() {
+               return this.map( function() {
+
+                       // Can add propHook for "elements" to filter or add form elements
+                       var elements = jQuery.prop( this, "elements" );
+                       return elements ? jQuery.makeArray( elements ) : this;
+               } )
+               .filter( function() {
+                       var type = this.type;
+
+                       // Use .is( ":disabled" ) so that fieldset[disabled] works
+                       return this.name && !jQuery( this ).is( ":disabled" ) &&
+                               rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
+                               ( this.checked || !rcheckableType.test( type ) );
+               } )
+               .map( function( i, elem ) {
+                       var val = jQuery( this ).val();
+
+                       if ( val == null ) {
+                               return null;
+                       }
+
+                       if ( Array.isArray( val ) ) {
+                               return jQuery.map( val, function( val ) {
+                                       return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+                               } );
+                       }
+
+                       return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+               } ).get();
+       }
+} );
+
+return jQuery;
+} );
diff --git a/js/jquery/src/traversing.js b/js/jquery/src/traversing.js
new file mode 100644 (file)
index 0000000..64c7252
--- /dev/null
@@ -0,0 +1,191 @@
+define( [
+       "./core",
+       "./var/indexOf",
+       "./traversing/var/dir",
+       "./traversing/var/siblings",
+       "./traversing/var/rneedsContext",
+       "./core/nodeName",
+
+       "./core/init",
+       "./traversing/findFilter",
+       "./selector"
+], function( jQuery, indexOf, dir, siblings, rneedsContext, nodeName ) {
+
+"use strict";
+
+var rparentsprev = /^(?:parents|prev(?:Until|All))/,
+
+       // Methods guaranteed to produce a unique set when starting from a unique set
+       guaranteedUnique = {
+               children: true,
+               contents: true,
+               next: true,
+               prev: true
+       };
+
+jQuery.fn.extend( {
+       has: function( target ) {
+               var targets = jQuery( target, this ),
+                       l = targets.length;
+
+               return this.filter( function() {
+                       var i = 0;
+                       for ( ; i < l; i++ ) {
+                               if ( jQuery.contains( this, targets[ i ] ) ) {
+                                       return true;
+                               }
+                       }
+               } );
+       },
+
+       closest: function( selectors, context ) {
+               var cur,
+                       i = 0,
+                       l = this.length,
+                       matched = [],
+                       targets = typeof selectors !== "string" && jQuery( selectors );
+
+               // Positional selectors never match, since there's no _selection_ context
+               if ( !rneedsContext.test( selectors ) ) {
+                       for ( ; i < l; i++ ) {
+                               for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {
+
+                                       // Always skip document fragments
+                                       if ( cur.nodeType < 11 && ( targets ?
+                                               targets.index( cur ) > -1 :
+
+                                               // Don't pass non-elements to Sizzle
+                                               cur.nodeType === 1 &&
+                                                       jQuery.find.matchesSelector( cur, selectors ) ) ) {
+
+                                               matched.push( cur );
+                                               break;
+                                       }
+                               }
+                       }
+               }
+
+               return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );
+       },
+
+       // Determine the position of an element within the set
+       index: function( elem ) {
+
+               // No argument, return index in parent
+               if ( !elem ) {
+                       return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;
+               }
+
+               // Index in selector
+               if ( typeof elem === "string" ) {
+                       return indexOf.call( jQuery( elem ), this[ 0 ] );
+               }
+
+               // Locate the position of the desired element
+               return indexOf.call( this,
+
+                       // If it receives a jQuery object, the first element is used
+                       elem.jquery ? elem[ 0 ] : elem
+               );
+       },
+
+       add: function( selector, context ) {
+               return this.pushStack(
+                       jQuery.uniqueSort(
+                               jQuery.merge( this.get(), jQuery( selector, context ) )
+                       )
+               );
+       },
+
+       addBack: function( selector ) {
+               return this.add( selector == null ?
+                       this.prevObject : this.prevObject.filter( selector )
+               );
+       }
+} );
+
+function sibling( cur, dir ) {
+       while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}
+       return cur;
+}
+
+jQuery.each( {
+       parent: function( elem ) {
+               var parent = elem.parentNode;
+               return parent && parent.nodeType !== 11 ? parent : null;
+       },
+       parents: function( elem ) {
+               return dir( elem, "parentNode" );
+       },
+       parentsUntil: function( elem, i, until ) {
+               return dir( elem, "parentNode", until );
+       },
+       next: function( elem ) {
+               return sibling( elem, "nextSibling" );
+       },
+       prev: function( elem ) {
+               return sibling( elem, "previousSibling" );
+       },
+       nextAll: function( elem ) {
+               return dir( elem, "nextSibling" );
+       },
+       prevAll: function( elem ) {
+               return dir( elem, "previousSibling" );
+       },
+       nextUntil: function( elem, i, until ) {
+               return dir( elem, "nextSibling", until );
+       },
+       prevUntil: function( elem, i, until ) {
+               return dir( elem, "previousSibling", until );
+       },
+       siblings: function( elem ) {
+               return siblings( ( elem.parentNode || {} ).firstChild, elem );
+       },
+       children: function( elem ) {
+               return siblings( elem.firstChild );
+       },
+       contents: function( elem ) {
+        if ( nodeName( elem, "iframe" ) ) {
+            return elem.contentDocument;
+        }
+
+        // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only
+        // Treat the template element as a regular one in browsers that
+        // don't support it.
+        if ( nodeName( elem, "template" ) ) {
+            elem = elem.content || elem;
+        }
+
+        return jQuery.merge( [], elem.childNodes );
+       }
+}, function( name, fn ) {
+       jQuery.fn[ name ] = function( until, selector ) {
+               var matched = jQuery.map( this, fn, until );
+
+               if ( name.slice( -5 ) !== "Until" ) {
+                       selector = until;
+               }
+
+               if ( selector && typeof selector === "string" ) {
+                       matched = jQuery.filter( selector, matched );
+               }
+
+               if ( this.length > 1 ) {
+
+                       // Remove duplicates
+                       if ( !guaranteedUnique[ name ] ) {
+                               jQuery.uniqueSort( matched );
+                       }
+
+                       // Reverse order for parents* and prev-derivatives
+                       if ( rparentsprev.test( name ) ) {
+                               matched.reverse();
+                       }
+               }
+
+               return this.pushStack( matched );
+       };
+} );
+
+return jQuery;
+} );
diff --git a/js/jquery/src/traversing/findFilter.js b/js/jquery/src/traversing/findFilter.js
new file mode 100644 (file)
index 0000000..3bd036a
--- /dev/null
@@ -0,0 +1,106 @@
+define( [
+       "../core",
+       "../var/indexOf",
+       "./var/rneedsContext",
+       "../selector"
+], function( jQuery, indexOf, rneedsContext ) {
+
+"use strict";
+
+var risSimple = /^.[^:#\[\.,]*$/;
+
+// Implement the identical functionality for filter and not
+function winnow( elements, qualifier, not ) {
+       if ( jQuery.isFunction( qualifier ) ) {
+               return jQuery.grep( elements, function( elem, i ) {
+                       return !!qualifier.call( elem, i, elem ) !== not;
+               } );
+       }
+
+       // Single element
+       if ( qualifier.nodeType ) {
+               return jQuery.grep( elements, function( elem ) {
+                       return ( elem === qualifier ) !== not;
+               } );
+       }
+
+       // Arraylike of elements (jQuery, arguments, Array)
+       if ( typeof qualifier !== "string" ) {
+               return jQuery.grep( elements, function( elem ) {
+                       return ( indexOf.call( qualifier, elem ) > -1 ) !== not;
+               } );
+       }
+
+       // Simple selector that can be filtered directly, removing non-Elements
+       if ( risSimple.test( qualifier ) ) {
+               return jQuery.filter( qualifier, elements, not );
+       }
+
+       // Complex selector, compare the two sets, removing non-Elements
+       qualifier = jQuery.filter( qualifier, elements );
+       return jQuery.grep( elements, function( elem ) {
+               return ( indexOf.call( qualifier, elem ) > -1 ) !== not && elem.nodeType === 1;
+       } );
+}
+
+jQuery.filter = function( expr, elems, not ) {
+       var elem = elems[ 0 ];
+
+       if ( not ) {
+               expr = ":not(" + expr + ")";
+       }
+
+       if ( elems.length === 1 && elem.nodeType === 1 ) {
+               return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];
+       }
+
+       return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
+               return elem.nodeType === 1;
+       } ) );
+};
+
+jQuery.fn.extend( {
+       find: function( selector ) {
+               var i, ret,
+                       len = this.length,
+                       self = this;
+
+               if ( typeof selector !== "string" ) {
+                       return this.pushStack( jQuery( selector ).filter( function() {
+                               for ( i = 0; i < len; i++ ) {
+                                       if ( jQuery.contains( self[ i ], this ) ) {
+                                               return true;
+                                       }
+                               }
+                       } ) );
+               }
+
+               ret = this.pushStack( [] );
+
+               for ( i = 0; i < len; i++ ) {
+                       jQuery.find( selector, self[ i ], ret );
+               }
+
+               return len > 1 ? jQuery.uniqueSort( ret ) : ret;
+       },
+       filter: function( selector ) {
+               return this.pushStack( winnow( this, selector || [], false ) );
+       },
+       not: function( selector ) {
+               return this.pushStack( winnow( this, selector || [], true ) );
+       },
+       is: function( selector ) {
+               return !!winnow(
+                       this,
+
+                       // If this is a positional/relative selector, check membership in the returned set
+                       // so $("p:first").is("p:last") won't return true for a doc with two "p".
+                       typeof selector === "string" && rneedsContext.test( selector ) ?
+                               jQuery( selector ) :
+                               selector || [],
+                       false
+               ).length;
+       }
+} );
+
+} );
diff --git a/js/jquery/src/traversing/var/dir.js b/js/jquery/src/traversing/var/dir.js
new file mode 100644 (file)
index 0000000..366a823
--- /dev/null
@@ -0,0 +1,22 @@
+define( [
+       "../../core"
+], function( jQuery ) {
+
+"use strict";
+
+return function( elem, dir, until ) {
+       var matched = [],
+               truncate = until !== undefined;
+
+       while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {
+               if ( elem.nodeType === 1 ) {
+                       if ( truncate && jQuery( elem ).is( until ) ) {
+                               break;
+                       }
+                       matched.push( elem );
+               }
+       }
+       return matched;
+};
+
+} );
diff --git a/js/jquery/src/traversing/var/rneedsContext.js b/js/jquery/src/traversing/var/rneedsContext.js
new file mode 100644 (file)
index 0000000..d0663ce
--- /dev/null
@@ -0,0 +1,8 @@
+define( [
+       "../../core",
+       "../../selector"
+], function( jQuery ) {
+       "use strict";
+
+       return jQuery.expr.match.needsContext;
+} );
diff --git a/js/jquery/src/traversing/var/siblings.js b/js/jquery/src/traversing/var/siblings.js
new file mode 100644 (file)
index 0000000..952629d
--- /dev/null
@@ -0,0 +1,17 @@
+define( function() {
+
+"use strict";
+
+return function( n, elem ) {
+       var matched = [];
+
+       for ( ; n; n = n.nextSibling ) {
+               if ( n.nodeType === 1 && n !== elem ) {
+                       matched.push( n );
+               }
+       }
+
+       return matched;
+};
+
+} );
diff --git a/js/jquery/src/var/ObjectFunctionString.js b/js/jquery/src/var/ObjectFunctionString.js
new file mode 100644 (file)
index 0000000..f9e850f
--- /dev/null
@@ -0,0 +1,7 @@
+define( [
+       "./fnToString"
+], function( fnToString ) {
+       "use strict";
+
+       return fnToString.call( Object );
+} );
diff --git a/js/jquery/src/var/arr.js b/js/jquery/src/var/arr.js
new file mode 100644 (file)
index 0000000..84713d8
--- /dev/null
@@ -0,0 +1,5 @@
+define( function() {
+       "use strict";
+
+       return [];
+} );
diff --git a/js/jquery/src/var/class2type.js b/js/jquery/src/var/class2type.js
new file mode 100644 (file)
index 0000000..4365d46
--- /dev/null
@@ -0,0 +1,6 @@
+define( function() {
+       "use strict";
+
+       // [[Class]] -> type pairs
+       return {};
+} );
diff --git a/js/jquery/src/var/concat.js b/js/jquery/src/var/concat.js
new file mode 100644 (file)
index 0000000..e47c19d
--- /dev/null
@@ -0,0 +1,7 @@
+define( [
+       "./arr"
+], function( arr ) {
+       "use strict";
+
+       return arr.concat;
+} );
diff --git a/js/jquery/src/var/document.js b/js/jquery/src/var/document.js
new file mode 100644 (file)
index 0000000..dd3939d
--- /dev/null
@@ -0,0 +1,5 @@
+define( function() {
+       "use strict";
+
+       return window.document;
+} );
diff --git a/js/jquery/src/var/documentElement.js b/js/jquery/src/var/documentElement.js
new file mode 100644 (file)
index 0000000..0e3f8b4
--- /dev/null
@@ -0,0 +1,7 @@
+define( [
+       "./document"
+], function( document ) {
+       "use strict";
+
+       return document.documentElement;
+} );
diff --git a/js/jquery/src/var/fnToString.js b/js/jquery/src/var/fnToString.js
new file mode 100644 (file)
index 0000000..18c43ff
--- /dev/null
@@ -0,0 +1,7 @@
+define( [
+       "./hasOwn"
+], function( hasOwn ) {
+       "use strict";
+
+       return hasOwn.toString;
+} );
diff --git a/js/jquery/src/var/getProto.js b/js/jquery/src/var/getProto.js
new file mode 100644 (file)
index 0000000..965fab8
--- /dev/null
@@ -0,0 +1,5 @@
+define( function() {
+       "use strict";
+
+       return Object.getPrototypeOf;
+} );
diff --git a/js/jquery/src/var/hasOwn.js b/js/jquery/src/var/hasOwn.js
new file mode 100644 (file)
index 0000000..44ab680
--- /dev/null
@@ -0,0 +1,7 @@
+define( [
+       "./class2type"
+], function( class2type ) {
+       "use strict";
+
+       return class2type.hasOwnProperty;
+} );
diff --git a/js/jquery/src/var/indexOf.js b/js/jquery/src/var/indexOf.js
new file mode 100644 (file)
index 0000000..8320b98
--- /dev/null
@@ -0,0 +1,7 @@
+define( [
+       "./arr"
+], function( arr ) {
+       "use strict";
+
+       return arr.indexOf;
+} );
diff --git a/js/jquery/src/var/pnum.js b/js/jquery/src/var/pnum.js
new file mode 100644 (file)
index 0000000..6f06d73
--- /dev/null
@@ -0,0 +1,5 @@
+define( function() {
+       "use strict";
+
+       return ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source;
+} );
diff --git a/js/jquery/src/var/push.js b/js/jquery/src/var/push.js
new file mode 100644 (file)
index 0000000..9465620
--- /dev/null
@@ -0,0 +1,7 @@
+define( [
+       "./arr"
+], function( arr ) {
+       "use strict";
+
+       return arr.push;
+} );
diff --git a/js/jquery/src/var/rcssNum.js b/js/jquery/src/var/rcssNum.js
new file mode 100644 (file)
index 0000000..4214b14
--- /dev/null
@@ -0,0 +1,9 @@
+define( [
+       "../var/pnum"
+], function( pnum ) {
+
+"use strict";
+
+return new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" );
+
+} );
diff --git a/js/jquery/src/var/rnothtmlwhite.js b/js/jquery/src/var/rnothtmlwhite.js
new file mode 100644 (file)
index 0000000..30604db
--- /dev/null
@@ -0,0 +1,8 @@
+define( function() {
+       "use strict";
+
+       // Only count HTML whitespace
+       // Other whitespace should count in values
+       // https://html.spec.whatwg.org/multipage/infrastructure.html#space-character
+       return ( /[^\x20\t\r\n\f]+/g );
+} );
diff --git a/js/jquery/src/var/slice.js b/js/jquery/src/var/slice.js
new file mode 100644 (file)
index 0000000..915f837
--- /dev/null
@@ -0,0 +1,7 @@
+define( [
+       "./arr"
+], function( arr ) {
+       "use strict";
+
+       return arr.slice;
+} );
diff --git a/js/jquery/src/var/support.js b/js/jquery/src/var/support.js
new file mode 100644 (file)
index 0000000..094d0ae
--- /dev/null
@@ -0,0 +1,6 @@
+define( function() {
+       "use strict";
+
+       // All support tests are defined in their respective modules.
+       return {};
+} );
diff --git a/js/jquery/src/var/toString.js b/js/jquery/src/var/toString.js
new file mode 100644 (file)
index 0000000..ff4ecdc
--- /dev/null
@@ -0,0 +1,7 @@
+define( [
+       "./class2type"
+], function( class2type ) {
+       "use strict";
+
+       return class2type.toString;
+} );
diff --git a/js/jquery/src/wrap.js b/js/jquery/src/wrap.js
new file mode 100644 (file)
index 0000000..88b9bb5
--- /dev/null
@@ -0,0 +1,77 @@
+define( [
+       "./core",
+       "./core/init",
+       "./manipulation", // clone
+       "./traversing" // parent, contents
+], function( jQuery ) {
+
+"use strict";
+
+jQuery.fn.extend( {
+       wrapAll: function( html ) {
+               var wrap;
+
+               if ( this[ 0 ] ) {
+                       if ( jQuery.isFunction( html ) ) {
+                               html = html.call( this[ 0 ] );
+                       }
+
+                       // The elements to wrap the target around
+                       wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );
+
+                       if ( this[ 0 ].parentNode ) {
+                               wrap.insertBefore( this[ 0 ] );
+                       }
+
+                       wrap.map( function() {
+                               var elem = this;
+
+                               while ( elem.firstElementChild ) {
+                                       elem = elem.firstElementChild;
+                               }
+
+                               return elem;
+                       } ).append( this );
+               }
+
+               return this;
+       },
+
+       wrapInner: function( html ) {
+               if ( jQuery.isFunction( html ) ) {
+                       return this.each( function( i ) {
+                               jQuery( this ).wrapInner( html.call( this, i ) );
+                       } );
+               }
+
+               return this.each( function() {
+                       var self = jQuery( this ),
+                               contents = self.contents();
+
+                       if ( contents.length ) {
+                               contents.wrapAll( html );
+
+                       } else {
+                               self.append( html );
+                       }
+               } );
+       },
+
+       wrap: function( html ) {
+               var isFunction = jQuery.isFunction( html );
+
+               return this.each( function( i ) {
+                       jQuery( this ).wrapAll( isFunction ? html.call( this, i ) : html );
+               } );
+       },
+
+       unwrap: function( selector ) {
+               this.parent( selector ).not( "body" ).each( function() {
+                       jQuery( this ).replaceWith( this.childNodes );
+               } );
+               return this;
+       }
+} );
+
+return jQuery;
+} );
diff --git a/js/modernizr/feature-detects/a-download.js b/js/modernizr/feature-detects/a-download.js
new file mode 100644 (file)
index 0000000..559fadd
--- /dev/null
@@ -0,0 +1,8 @@
+
+// a[download] attribute
+// When used on an <a>, this attribute signifies that the resource it
+// points to should be downloaded by the browser rather than navigating to it.
+// http://developers.whatwg.org/links.html#downloading-resources
+// By Addy Osmani
+
+Modernizr.addTest('adownload', 'download' in document.createElement('a'));
diff --git a/js/modernizr/feature-detects/audio-audiodata-api.js b/js/modernizr/feature-detects/audio-audiodata-api.js
new file mode 100644 (file)
index 0000000..bfcd9fe
--- /dev/null
@@ -0,0 +1,4 @@
+// Mozilla Audio Data API
+// https://wiki.mozilla.org/Audio_Data_API
+// by Addy Osmani
+Modernizr.addTest('audiodata', !!(window.Audio));
diff --git a/js/modernizr/feature-detects/audio-webaudio-api.js b/js/modernizr/feature-detects/audio-webaudio-api.js
new file mode 100644 (file)
index 0000000..46d3c63
--- /dev/null
@@ -0,0 +1,4 @@
+// Web Audio API
+// https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html
+// By Addy Osmani
+Modernizr.addTest('webaudio', !!(window.webkitAudioContext || window.AudioContext));
diff --git a/js/modernizr/feature-detects/battery-api.js b/js/modernizr/feature-detects/battery-api.js
new file mode 100644 (file)
index 0000000..4177e8f
--- /dev/null
@@ -0,0 +1,8 @@
+
+// Battery API
+// https://developer.mozilla.org/en/DOM/window.navigator.mozBattery
+// By: Paul Sayre
+
+Modernizr.addTest('battery',
+       !!Modernizr.prefixed('battery', navigator)
+);
\ No newline at end of file
diff --git a/js/modernizr/feature-detects/battery-level.js b/js/modernizr/feature-detects/battery-level.js
new file mode 100644 (file)
index 0000000..07f9575
--- /dev/null
@@ -0,0 +1,11 @@
+
+// Low Battery Level
+// Enable a developer to remove CPU intensive CSS/JS when battery is low
+// developer.mozilla.org/en/DOM/window.navigator.mozBattery
+// By: Paul Sayre
+
+Modernizr.addTest('lowbattery', function () {
+       var minLevel = 0.20,
+               battery = Modernizr.prefixed('battery', navigator);
+       return !!(battery && !battery.charging && battery.level <= minLevel);
+});
diff --git a/js/modernizr/feature-detects/blob-constructor.js b/js/modernizr/feature-detects/blob-constructor.js
new file mode 100644 (file)
index 0000000..f10bd7b
--- /dev/null
@@ -0,0 +1,10 @@
+// Blob constructor
+// http://dev.w3.org/2006/webapi/FileAPI/#constructorBlob
+
+Modernizr.addTest('blobconstructor', function () {
+    try {
+        return !!new Blob();
+    } catch (e) {
+        return false;
+    }
+});
diff --git a/js/modernizr/feature-detects/canvas-todataurl-type.js b/js/modernizr/feature-detects/canvas-todataurl-type.js
new file mode 100644 (file)
index 0000000..bf8f2e3
--- /dev/null
@@ -0,0 +1,28 @@
+// canvas.toDataURL type support
+// http://www.w3.org/TR/html5/the-canvas-element.html#dom-canvas-todataurl
+
+// This test is asynchronous. Watch out.
+
+(function () {
+
+    if (!Modernizr.canvas) {
+        return false;
+    }
+
+    var image = new Image(),
+        canvas = document.createElement('canvas'),
+        ctx = canvas.getContext('2d');
+
+    image.onload = function() {
+        ctx.drawImage(image, 0, 0);
+
+        Modernizr.addTest('todataurljpeg', function() {
+            return canvas.toDataURL('image/jpeg').indexOf('data:image/jpeg') === 0;
+        });
+        Modernizr.addTest('todataurlwebp', function() {
+            return canvas.toDataURL('image/webp').indexOf('data:image/webp') === 0;
+        });
+    };
+
+    image.src = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAACklEQVR4nGMAAQAABQABDQottAAAAABJRU5ErkJggg==';
+}());
diff --git a/js/modernizr/feature-detects/contenteditable.js b/js/modernizr/feature-detects/contenteditable.js
new file mode 100644 (file)
index 0000000..6543666
--- /dev/null
@@ -0,0 +1,9 @@
+// contentEditable
+// http://www.whatwg.org/specs/web-apps/current-work/multipage/editing.html#contenteditable
+
+// this is known to false positive in some mobile browsers
+// here is a whitelist of verified working browsers:
+// https://github.com/NielsLeenheer/html5test/blob/549f6eac866aa861d9649a0707ff2c0157895706/scripts/engine.js#L2083
+
+Modernizr.addTest('contenteditable',
+        'contentEditable' in document.documentElement);
diff --git a/js/modernizr/feature-detects/contentsecuritypolicy.js b/js/modernizr/feature-detects/contentsecuritypolicy.js
new file mode 100644 (file)
index 0000000..a95e45a
--- /dev/null
@@ -0,0 +1,10 @@
+// Test for (experimental) Content Security Policy 1.1 support.
+//
+// This feature is still quite experimental, but is available now in Chrome 22.
+// If the `SecurityPolicy` property is available, you can be sure the browser
+// supports CSP. If it's not available, the browser still might support an
+// earlier version of the CSP spec.
+//
+// Editor's Draft: https://dvcs.w3.org/hg/content-security-policy/raw-file/tip/csp-specification.dev.html
+
+Modernizr.addTest('contentsecuritypolicy', ('securityPolicy' in document || 'SecurityPolicy' in document));
diff --git a/js/modernizr/feature-detects/contextmenu.js b/js/modernizr/feature-detects/contextmenu.js
new file mode 100644 (file)
index 0000000..dd8182f
--- /dev/null
@@ -0,0 +1,11 @@
+// http://www.w3.org/TR/html5/interactive-elements.html#context-menus
+// Demo at http://thewebrocks.com/demos/context-menu/
+Modernizr.addTest(
+  'contextmenu', 
+  ('contextMenu' in document.documentElement && 'HTMLMenuItemElement' in window) 
+);
+
+
+
+
+
diff --git a/js/modernizr/feature-detects/cookies.js b/js/modernizr/feature-detects/cookies.js
new file mode 100644 (file)
index 0000000..6a2f9d4
--- /dev/null
@@ -0,0 +1,15 @@
+
+// by tauren
+// https://github.com/Modernizr/Modernizr/issues/191
+
+Modernizr.addTest('cookies', function () {
+  // Quick test if browser has cookieEnabled host property
+  if (navigator.cookieEnabled) return true;
+  // Create cookie
+  document.cookie = "cookietest=1";
+  var ret = document.cookie.indexOf("cookietest=") != -1;
+  // Delete cookie
+  document.cookie = "cookietest=1; expires=Thu, 01-Jan-1970 00:00:01 GMT";
+  return ret;
+});
+
diff --git a/js/modernizr/feature-detects/cors.js b/js/modernizr/feature-detects/cors.js
new file mode 100644 (file)
index 0000000..286d717
--- /dev/null
@@ -0,0 +1,3 @@
+// cors
+// By Theodoor van Donge
+Modernizr.addTest('cors', !!(window.XMLHttpRequest && 'withCredentials' in new XMLHttpRequest()));
\ No newline at end of file
diff --git a/js/modernizr/feature-detects/css-backgroundposition-shorthand.js b/js/modernizr/feature-detects/css-backgroundposition-shorthand.js
new file mode 100644 (file)
index 0000000..ce016e1
--- /dev/null
@@ -0,0 +1,19 @@
+/*
+    https://developer.mozilla.org/en/CSS/background-position
+    http://www.w3.org/TR/css3-background/#background-position
+
+    Example: http://jsfiddle.net/Blink/bBXvt/
+*/
+
+(function() {
+
+    var elem = document.createElement('a'),
+        eStyle = elem.style,
+        val = "right 10px bottom 10px";
+
+    Modernizr.addTest('bgpositionshorthand', function(){
+        eStyle.cssText = "background-position: " + val + ";";
+        return (eStyle.backgroundPosition === val);
+    });
+
+}());
diff --git a/js/modernizr/feature-detects/css-backgroundposition-xy.js b/js/modernizr/feature-detects/css-backgroundposition-xy.js
new file mode 100644 (file)
index 0000000..d52d600
--- /dev/null
@@ -0,0 +1,15 @@
+/*
+       Allan Lei https://github.com/allanlei
+       
+       Check adapted from https://github.com/brandonaaron/jquery-cssHooks/blob/master/bgpos.js
+       
+       Test: http://jsfiddle.net/allanlei/R8AYS/
+*/
+Modernizr.addTest('bgpositionxy', function() {
+    return Modernizr.testStyles('#modernizr {background-position: 3px 5px;}', function(elem) {
+        var cssStyleDeclaration = window.getComputedStyle ? getComputedStyle(elem, null) : elem.currentStyle;
+        var xSupport = (cssStyleDeclaration.backgroundPositionX == '3px') || (cssStyleDeclaration['background-position-x'] == '3px');
+        var ySupport = (cssStyleDeclaration.backgroundPositionY == '5px') || (cssStyleDeclaration['background-position-y'] == '5px');
+        return xSupport && ySupport;
+    });
+});
\ No newline at end of file
diff --git a/js/modernizr/feature-detects/css-backgroundrepeat.js b/js/modernizr/feature-detects/css-backgroundrepeat.js
new file mode 100644 (file)
index 0000000..365447c
--- /dev/null
@@ -0,0 +1,31 @@
+// developer.mozilla.org/en/CSS/background-repeat
+
+// test page: jsbin.com/uzesun/
+// http://jsfiddle.net/ryanseddon/yMLTQ/6/    
+
+(function(){
+
+
+function getBgRepeatValue(elem){
+    return (window.getComputedStyle ?
+             getComputedStyle(elem, null).getPropertyValue('background') :
+             elem.currentStyle['background']);
+}
+  
+
+Modernizr.testStyles(' #modernizr { background-repeat: round; } ', function(elem, rule){ 
+
+  Modernizr.addTest('bgrepeatround', getBgRepeatValue(elem) == 'round');
+
+});
+
+
+
+Modernizr.testStyles(' #modernizr { background-repeat: space; } ', function(elem, rule){ 
+
+  Modernizr.addTest('bgrepeatspace', getBgRepeatValue(elem) == 'space');
+
+});
+
+
+})();
diff --git a/js/modernizr/feature-detects/css-backgroundsizecover.js b/js/modernizr/feature-detects/css-backgroundsizecover.js
new file mode 100644 (file)
index 0000000..dd7e51b
--- /dev/null
@@ -0,0 +1,10 @@
+
+// developer.mozilla.org/en/CSS/background-size
+
+Modernizr.testStyles( '#modernizr{background-size:cover}', function( elem ) {
+       var style = window.getComputedStyle ?
+               window.getComputedStyle( elem, null )
+               : elem.currentStyle;
+               
+       Modernizr.addTest( 'bgsizecover', style.backgroundSize == 'cover' );
+});
\ No newline at end of file
diff --git a/js/modernizr/feature-detects/css-boxsizing.js b/js/modernizr/feature-detects/css-boxsizing.js
new file mode 100644 (file)
index 0000000..ab90913
--- /dev/null
@@ -0,0 +1,9 @@
+
+// developer.mozilla.org/en/CSS/box-sizing
+// github.com/Modernizr/Modernizr/issues/248
+
+Modernizr.addTest("boxsizing",function(){
+    return Modernizr.testAllProps("boxSizing") && (document.documentMode === undefined || document.documentMode > 7);
+});
+
+
diff --git a/js/modernizr/feature-detects/css-calc.js b/js/modernizr/feature-detects/css-calc.js
new file mode 100644 (file)
index 0000000..bb5b7e9
--- /dev/null
@@ -0,0 +1,12 @@
+// Method of allowing calculated values for length units, i.e. width: calc(100%-3em) http://caniuse.com/#search=calc
+// By @calvein
+
+Modernizr.addTest('csscalc', function() {
+    var prop = 'width:';
+    var value = 'calc(10px);';
+    var el = document.createElement('div');
+
+    el.style.cssText = prop + Modernizr._prefixes.join(value + prop);
+
+    return !!el.style.length;
+});
diff --git a/js/modernizr/feature-detects/css-cubicbezierrange.js b/js/modernizr/feature-detects/css-cubicbezierrange.js
new file mode 100644 (file)
index 0000000..28e72aa
--- /dev/null
@@ -0,0 +1,8 @@
+// cubic-bezier values can't be > 1 for Webkit until bug #45761 (https://bugs.webkit.org/show_bug.cgi?id=45761) is fixed
+// By @calvein
+
+Modernizr.addTest('cubicbezierrange', function() {
+    var el = document.createElement('div');
+    el.style.cssText = Modernizr._prefixes.join('transition-timing-function' + ':cubic-bezier(1,0,0,1.1); ');
+    return !!el.style.length;
+});
diff --git a/js/modernizr/feature-detects/css-displayrunin.js b/js/modernizr/feature-detects/css-displayrunin.js
new file mode 100644 (file)
index 0000000..01eddb7
--- /dev/null
@@ -0,0 +1,18 @@
+
+// by alanhogan
+
+// https://github.com/Modernizr/Modernizr/issues/198
+// http://css-tricks.com/596-run-in/
+
+
+
+Modernizr.testStyles(' #modernizr { display: run-in; } ', function(elem, rule){ 
+
+  var ret = (window.getComputedStyle ?
+         getComputedStyle(elem, null).getPropertyValue('display') :
+         elem.currentStyle['display']);
+
+  Modernizr.addTest('display-runin', ret == 'run-in');
+
+});
+
diff --git a/js/modernizr/feature-detects/css-displaytable.js b/js/modernizr/feature-detects/css-displaytable.js
new file mode 100644 (file)
index 0000000..bc0a67c
--- /dev/null
@@ -0,0 +1,27 @@
+// display: table and table-cell test. (both are tested under one name "table-cell" )
+// By @scottjehl
+
+// all additional table display values are here: http://pastebin.com/Gk9PeVaQ though Scott has seen some IE false positives with that sort of weak detection.
+// more testing neccessary perhaps.
+
+Modernizr.addTest( "display-table",function(){
+  
+  var doc   = window.document,
+      docElem = doc.documentElement,   
+      parent  = doc.createElement( "div" ),
+      child = doc.createElement( "div" ),
+      childb  = doc.createElement( "div" ),
+      ret;
+  
+  parent.style.cssText = "display: table";
+  child.style.cssText = childb.style.cssText = "display: table-cell; padding: 10px";    
+          
+  parent.appendChild( child );
+  parent.appendChild( childb );
+  docElem.insertBefore( parent, docElem.firstChild );
+  
+  ret = child.offsetLeft < childb.offsetLeft;
+  docElem.removeChild(parent);
+  return ret; 
+});
+
diff --git a/js/modernizr/feature-detects/css-filters.js b/js/modernizr/feature-detects/css-filters.js
new file mode 100644 (file)
index 0000000..aec4fad
--- /dev/null
@@ -0,0 +1,7 @@
+// https://github.com/Modernizr/Modernizr/issues/615
+// documentMode is needed for false positives in oldIE, please see issue above
+Modernizr.addTest('cssfilters', function() {
+    var el = document.createElement('div');
+    el.style.cssText = Modernizr._prefixes.join('filter' + ':blur(2px); ');
+    return !!el.style.length && ((document.documentMode === undefined || document.documentMode > 9));
+});
\ No newline at end of file
diff --git a/js/modernizr/feature-detects/css-hyphens.js b/js/modernizr/feature-detects/css-hyphens.js
new file mode 100644 (file)
index 0000000..8215dd5
--- /dev/null
@@ -0,0 +1,205 @@
+/* see http://davidnewton.ca/the-current-state-of-hyphenation-on-the-web
+   http://davidnewton.ca/demos/hyphenation/test.html
+
+
+There are three tests:
+   1. csshyphens      - tests hyphens:auto actually adds hyphens to text
+   2. softhyphens     - tests that &shy; does its job
+   3. softhyphensfind - tests that in-browser Find functionality still works correctly with &shy;
+
+These tests currently require document.body to be present
+
+Hyphenation is language specific, sometimes.
+  See for more details: http://code.google.com/p/hyphenator/source/diff?spec=svn975&r=975&format=side&path=/trunk/Hyphenator.js#sc_svn975_313
+
+If loading Hyphenator.js via Modernizr.load, be cautious of issue 158: http://code.google.com/p/hyphenator/issues/detail?id=158
+
+More details at https://github.com/Modernizr/Modernizr/issues/312
+
+*/
+
+(function() {
+
+       if (!document.body){
+               window.console && console.warn('document.body doesn\'t exist. Modernizr hyphens test needs it.');
+               return;
+       }
+
+       // functional test of adding hyphens:auto
+       function test_hyphens_css() {
+               try {
+                       /* create a div container and a span within that
+                        * these have to be appended to document.body, otherwise some browsers can give false negative */
+                       var div = document.createElement('div'),
+                               span = document.createElement('span'),
+                               divStyle = div.style,
+                               spanHeight = 0,
+                               spanWidth = 0,
+                               result = false,
+                               firstChild = document.body.firstElementChild || document.body.firstChild;
+
+                       div.appendChild(span);
+                       span.innerHTML = 'Bacon ipsum dolor sit amet jerky velit in culpa hamburger et. Laborum dolor proident, enim dolore duis commodo et strip steak. Salami anim et, veniam consectetur dolore qui tenderloin jowl velit sirloin. Et ad culpa, fatback cillum jowl ball tip ham hock nulla short ribs pariatur aute. Pig pancetta ham bresaola, ut boudin nostrud commodo flank esse cow tongue culpa. Pork belly bresaola enim pig, ea consectetur nisi. Fugiat officia turkey, ea cow jowl pariatur ullamco proident do laborum velit sausage. Magna biltong sint tri-tip commodo sed bacon, esse proident aliquip. Ullamco ham sint fugiat, velit in enim sed mollit nulla cow ut adipisicing nostrud consectetur. Proident dolore beef ribs, laborum nostrud meatball ea laboris rump cupidatat labore culpa. Shankle minim beef, velit sint cupidatat fugiat tenderloin pig et ball tip. Ut cow fatback salami, bacon ball tip et in shank strip steak bresaola. In ut pork belly sed mollit tri-tip magna culpa veniam, short ribs qui in andouille ham consequat. Dolore bacon t-bone, velit short ribs enim strip steak nulla. Voluptate labore ut, biltong swine irure jerky. Cupidatat excepteur aliquip salami dolore. Ball tip strip steak in pork dolor. Ad in esse biltong. Dolore tenderloin exercitation ad pork loin t-bone, dolore in chicken ball tip qui pig. Ut culpa tongue, sint ribeye dolore ex shank voluptate hamburger. Jowl et tempor, boudin pork chop labore ham hock drumstick consectetur tri-tip elit swine meatball chicken ground round. Proident shankle mollit dolore. Shoulder ut duis t-bone quis reprehenderit. Meatloaf dolore minim strip steak, laboris ea aute bacon beef ribs elit shank in veniam drumstick qui. Ex laboris meatball cow tongue pork belly. Ea ball tip reprehenderit pig, sed fatback boudin dolore flank aliquip laboris eu quis. Beef ribs duis beef, cow corned beef adipisicing commodo nisi deserunt exercitation. Cillum dolor t-bone spare ribs, ham hock est sirloin. Brisket irure meatloaf in, boudin pork belly sirloin ball tip. Sirloin sint irure nisi nostrud aliqua. Nostrud nulla aute, enim officia culpa ham hock. Aliqua reprehenderit dolore sunt nostrud sausage, ea boudin pork loin ut t-bone ham tempor. Tri-tip et pancetta drumstick laborum. Ham hock magna do nostrud in proident. Ex ground round fatback, venison non ribeye in.';
+
+                       document.body.insertBefore(div, firstChild);
+
+                       /* get size of unhyphenated text */
+                       divStyle.cssText = 'position:absolute;top:0;left:0;width:5em;text-align:justify;text-justification:newspaper;';
+                       spanHeight = span.offsetHeight;
+                       spanWidth = span.offsetWidth;
+
+                       /* compare size with hyphenated text */
+                       divStyle.cssText = 'position:absolute;top:0;left:0;width:5em;text-align:justify;'+
+                                                                                                'text-justification:newspaper;'+
+                                                                                                Modernizr._prefixes.join('hyphens:auto; ');
+
+                       result = (span.offsetHeight != spanHeight || span.offsetWidth != spanWidth);
+
+                       /* results and cleanup */
+                       document.body.removeChild(div);
+                       div.removeChild(span);
+
+                       return result;
+               } catch(e) {
+                       return false;
+               }
+       }
+
+       // for the softhyphens test
+       function test_hyphens(delimiter, testWidth) {
+               try {
+                       /* create a div container and a span within that
+                        * these have to be appended to document.body, otherwise some browsers can give false negative */
+                       var div = document.createElement('div'),
+                               span = document.createElement('span'),
+                               divStyle = div.style,
+                               spanSize = 0,
+                               result = false,
+                               result1 = false,
+                               result2 = false,
+                               firstChild = document.body.firstElementChild || document.body.firstChild;
+
+                       divStyle.cssText = 'position:absolute;top:0;left:0;overflow:visible;width:1.25em;';
+                       div.appendChild(span);
+                       document.body.insertBefore(div, firstChild);
+
+
+                       /* get height of unwrapped text */
+                       span.innerHTML = 'mm';
+                       spanSize = span.offsetHeight;
+
+                       /* compare height w/ delimiter, to see if it wraps to new line */
+                       span.innerHTML = 'm' + delimiter + 'm';
+                       result1 = (span.offsetHeight > spanSize);
+
+                       /* if we're testing the width too (i.e. for soft-hyphen, not zws),
+                        * this is because tested Blackberry devices will wrap the text but not display the hyphen */
+                       if (testWidth) {
+                               /* get width of wrapped, non-hyphenated text */
+                               span.innerHTML = 'm<br />m';
+                               spanSize = span.offsetWidth;
+
+                               /* compare width w/ wrapped w/ delimiter to see if hyphen is present */
+                               span.innerHTML = 'm' + delimiter + 'm';
+                               result2 = (span.offsetWidth > spanSize);
+                       } else {
+                               result2 = true;
+                       }
+
+                       /* results and cleanup */
+                       if (result1 === true && result2 === true) { result = true; }
+                       document.body.removeChild(div);
+                       div.removeChild(span);
+
+                       return result;
+               } catch(e) {
+                       return false;
+               }
+       }
+
+       // testing if in-browser Find functionality will work on hyphenated text
+       function test_hyphens_find(delimiter) {
+               try {
+                       /* create a dummy input for resetting selection location, and a div container
+                        * these have to be appended to document.body, otherwise some browsers can give false negative
+                        * div container gets the doubled testword, separated by the delimiter
+                        * Note: giving a width to div gives false positive in iOS Safari */
+                       var dummy = document.createElement('input'),
+                               div = document.createElement('div'),
+                               testword = 'lebowski',
+                               result = false,
+                               textrange,
+                               firstChild = document.body.firstElementChild || document.body.firstChild;
+
+                       div.innerHTML = testword + delimiter + testword;
+
+                       document.body.insertBefore(div, firstChild);
+                       document.body.insertBefore(dummy, div);
+
+
+                       /* reset the selection to the dummy input element, i.e. BEFORE the div container
+                        *   stackoverflow.com/questions/499126/jquery-set-cursor-position-in-text-area */
+                       if (dummy.setSelectionRange) {
+                               dummy.focus();
+                               dummy.setSelectionRange(0,0);
+                       } else if (dummy.createTextRange) {
+                               textrange = dummy.createTextRange();
+                               textrange.collapse(true);
+                               textrange.moveEnd('character', 0);
+                               textrange.moveStart('character', 0);
+                               textrange.select();
+                       }
+
+                       /* try to find the doubled testword, without the delimiter */
+                       if (window.find) {
+                               result = window.find(testword + testword);
+                       } else {
+                               try {
+                                       textrange = window.self.document.body.createTextRange();
+                                       result = textrange.findText(testword + testword);
+                               } catch(e) {
+                                       result = false;
+                               }
+                       }
+
+                       document.body.removeChild(div);
+                       document.body.removeChild(dummy);
+
+                       return result;
+               } catch(e) {
+                       return false;
+               }
+       }
+
+       Modernizr.addTest("csshyphens", function() {
+
+               if (!Modernizr.testAllProps('hyphens')) return false;
+
+               /* Chrome lies about its hyphens support so we need a more robust test
+                               crbug.com/107111
+               */
+               try {
+                       return test_hyphens_css();
+               } catch(e) {
+                       return false;
+               }
+       });
+
+       Modernizr.addTest("softhyphens", function() {
+               try {
+                       // use numeric entity instead of &shy; in case it's XHTML
+                       return test_hyphens('&#173;', true) && test_hyphens('&#8203;', false);
+               } catch(e) {
+                       return false;
+               }
+       });
+
+       Modernizr.addTest("softhyphensfind", function() {
+               try {
+                       return test_hyphens_find('&#173;') && test_hyphens_find('&#8203;');
+               } catch(e) {
+                       return false;
+               }
+       });
+
+})();
diff --git a/js/modernizr/feature-detects/css-lastchild.js b/js/modernizr/feature-detects/css-lastchild.js
new file mode 100644 (file)
index 0000000..3e51516
--- /dev/null
@@ -0,0 +1,11 @@
+// last-child pseudo selector
+// https://github.com/Modernizr/Modernizr/pull/304
+
+
+Modernizr.addTest('lastchild', function(){
+
+  return Modernizr.testStyles("#modernizr div {width:100px} #modernizr :last-child{width:200px;display:block}", function (elem) {
+    return elem.lastChild.offsetWidth > elem.firstChild.offsetWidth;
+  }, 2);
+
+});
diff --git a/js/modernizr/feature-detects/css-mask.js b/js/modernizr/feature-detects/css-mask.js
new file mode 100644 (file)
index 0000000..2f6f28a
--- /dev/null
@@ -0,0 +1,12 @@
+// this tests passes for webkit's proprietary `-webkit-mask` feature
+//   www.webkit.org/blog/181/css-masks/
+//   developer.apple.com/library/safari/#documentation/InternetWeb/Conceptual/SafariVisualEffectsProgGuide/Masks/Masks.html
+
+// it does not pass mozilla's implementation of `mask` for SVG
+
+//   developer.mozilla.org/en/CSS/mask
+//   developer.mozilla.org/En/Applying_SVG_effects_to_HTML_content
+
+// Can combine with clippaths for awesomeness: http://generic.cx/for/webkit/test.html
+
+Modernizr.addTest('cssmask', Modernizr.testAllProps('maskRepeat'));
diff --git a/js/modernizr/feature-detects/css-mediaqueries.js b/js/modernizr/feature-detects/css-mediaqueries.js
new file mode 100644 (file)
index 0000000..e0e2c50
--- /dev/null
@@ -0,0 +1,3 @@
+
+
+Modernizr.addTest('mediaqueries', Modernizr.mq('only all'));
\ No newline at end of file
diff --git a/js/modernizr/feature-detects/css-objectfit.js b/js/modernizr/feature-detects/css-objectfit.js
new file mode 100644 (file)
index 0000000..3daecde
--- /dev/null
@@ -0,0 +1,6 @@
+
+// dev.opera.com/articles/view/css3-object-fit-object-position/
+
+Modernizr.addTest('object-fit',
+       !!Modernizr.prefixed('objectFit')
+);
\ No newline at end of file
diff --git a/js/modernizr/feature-detects/css-overflow-scrolling.js b/js/modernizr/feature-detects/css-overflow-scrolling.js
new file mode 100644 (file)
index 0000000..364e71d
--- /dev/null
@@ -0,0 +1,9 @@
+
+// johanbrook.com/browsers/native-momentum-scrolling-ios-5/
+// introduced in iOS5b2. Possible API may change...
+
+Modernizr.addTest("overflowscrolling",function(){
+    return Modernizr.testAllProps("overflowScrolling");
+});
+
+
diff --git a/js/modernizr/feature-detects/css-pointerevents.js b/js/modernizr/feature-detects/css-pointerevents.js
new file mode 100644 (file)
index 0000000..f18a5c1
--- /dev/null
@@ -0,0 +1,25 @@
+
+// developer.mozilla.org/en/CSS/pointer-events
+
+// Test and project pages:
+// ausi.github.com/Feature-detection-technique-for-pointer-events/
+// github.com/ausi/Feature-detection-technique-for-pointer-events/wiki
+// github.com/Modernizr/Modernizr/issues/80
+
+
+Modernizr.addTest('pointerevents', function(){
+    var element = document.createElement('x'),
+        documentElement = document.documentElement,
+        getComputedStyle = window.getComputedStyle,
+        supports;
+    if(!('pointerEvents' in element.style)){
+        return false;
+    }
+    element.style.pointerEvents = 'auto';
+    element.style.pointerEvents = 'x';
+    documentElement.appendChild(element);
+    supports = getComputedStyle &&
+        getComputedStyle(element, '').pointerEvents === 'auto';
+    documentElement.removeChild(element);
+    return !!supports;
+});
diff --git a/js/modernizr/feature-detects/css-positionsticky.js b/js/modernizr/feature-detects/css-positionsticky.js
new file mode 100644 (file)
index 0000000..43a19ec
--- /dev/null
@@ -0,0 +1,13 @@
+// Sticky positioning - constrains an element to be positioned inside the
+// intersection of its container box, and the viewport.
+Modernizr.addTest('csspositionsticky', function () {
+
+    var prop = 'position:';
+    var value = 'sticky';
+    var el = document.createElement('modernizr');
+    var mStyle = el.style;
+
+    mStyle.cssText = prop + Modernizr._prefixes.join(value + ';' + prop).slice(0, -prop.length);
+
+    return mStyle.position.indexOf(value) !== -1;
+});
diff --git a/js/modernizr/feature-detects/css-regions.js b/js/modernizr/feature-detects/css-regions.js
new file mode 100644 (file)
index 0000000..c8995c3
--- /dev/null
@@ -0,0 +1,55 @@
+// CSS Regions
+// http://www.w3.org/TR/css3-regions/
+// By: Mihai Balan
+
+// We start with a CSS parser test then we check page geometry to see if it's affected by regions
+// Later we might be able to retire the second part, as WebKit builds with the false positives die out
+
+Modernizr.addTest('regions', function() {
+
+       /* Get the 'flowFrom' property name available in the browser. Either default or vendor prefixed.
+       If the property name can't be found we'll get Boolean 'false' and fail quickly */
+       var flowFromProperty = Modernizr.prefixed("flowFrom"),
+               flowIntoProperty = Modernizr.prefixed("flowInto");
+
+       if (!flowFromProperty || !flowIntoProperty){
+               return false;
+       }
+
+       /* If CSS parsing is there, try to determine if regions actually work. */
+       var container           = document.createElement('div'),
+               content                 = document.createElement('div'),
+               region                  = document.createElement('div'),
+
+       /* we create a random, unlikely to be generated flow number to make sure we don't
+       clash with anything more vanilla, like 'flow', or 'article', or 'f1' */
+       flowName = 'modernizr_flow_for_regions_check';
+
+       /* First create a div with two adjacent divs inside it. The first will be the
+       content, the second will be the region. To be able to distinguish between the two,
+       we'll give the region a particular padding */
+       content.innerText               = 'M';
+       container.style.cssText = 'top: 150px; left: 150px; padding: 0px;';
+       region.style.cssText    = 'width: 50px; height: 50px; padding: 42px;';
+
+       region.style[flowFromProperty] = flowName;
+       container.appendChild(content);
+       container.appendChild(region);
+       document.documentElement.appendChild(container);
+
+       /* Now compute the bounding client rect, before and after attempting to flow the
+       content div in the region div. If regions are enabled, the after bounding rect
+       should reflect the padding of the region div.*/
+       var flowedRect, delta,
+               plainRect = content.getBoundingClientRect();
+
+
+       content.style[flowIntoProperty] = flowName;
+       flowedRect = content.getBoundingClientRect();
+
+       delta = flowedRect.left - plainRect.left;
+       document.documentElement.removeChild(container);
+       content = region = container = undefined;
+
+       return (delta == 42);
+});
diff --git a/js/modernizr/feature-detects/css-remunit.js b/js/modernizr/feature-detects/css-remunit.js
new file mode 100644 (file)
index 0000000..38e15b8
--- /dev/null
@@ -0,0 +1,19 @@
+
+// test by github.com/nsfmc
+
+// "The 'rem' unit ('root em') is relative to the computed
+// value of the 'font-size' value of the root element."
+// http://www.w3.org/TR/css3-values/#relative0
+// you can test by checking if the prop was ditched
+
+// http://snook.ca/archives/html_and_css/font-size-with-rem
+
+Modernizr.addTest('cssremunit', function(){
+
+  var div = document.createElement('div');
+  try {
+    div.style.fontSize = '3rem';
+  } catch(er){}
+  return (/rem/).test(div.style.fontSize);
+
+});
diff --git a/js/modernizr/feature-detects/css-resize.js b/js/modernizr/feature-detects/css-resize.js
new file mode 100644 (file)
index 0000000..fff99ba
--- /dev/null
@@ -0,0 +1,8 @@
+
+// Test for CSS 3 UI "resize" property
+// http://www.w3.org/TR/css3-ui/#resize
+// https://developer.mozilla.org/en/CSS/resize
+
+Modernizr.addTest('cssresize', Modernizr.testAllProps('resize'));
+
+
diff --git a/js/modernizr/feature-detects/css-scrollbars.js b/js/modernizr/feature-detects/css-scrollbars.js
new file mode 100644 (file)
index 0000000..f26de9f
--- /dev/null
@@ -0,0 +1,19 @@
+// Stylable scrollbars detection
+Modernizr.addTest('cssscrollbar', function() {
+
+       var bool,
+
+               styles = "#modernizr{overflow: scroll; width: 40px }#" +
+                       Modernizr._prefixes
+                               .join("scrollbar{width:0px}"+' #modernizr::')
+                               .split('#')
+                               .slice(1)
+                               .join('#') + "scrollbar{width:0px}";
+
+       Modernizr.testStyles(styles, function(node) {
+               bool = 'scrollWidth' in node && node.scrollWidth == 40;
+       });
+
+       return bool;
+
+});
diff --git a/js/modernizr/feature-detects/css-shapes.js b/js/modernizr/feature-detects/css-shapes.js
new file mode 100644 (file)
index 0000000..2801165
--- /dev/null
@@ -0,0 +1,4 @@
+
+// http://html.adobe.com/webplatform/layout/shapes
+
+Modernizr.addTest('shapes', Modernizr.testAllProps('shapeOutside', 'content-box', true));
diff --git a/js/modernizr/feature-detects/css-subpixelfont.js b/js/modernizr/feature-detects/css-subpixelfont.js
new file mode 100644 (file)
index 0000000..57a11b0
--- /dev/null
@@ -0,0 +1,23 @@
+/*
+ * Test for SubPixel Font Rendering
+ * (to infer if GDI or DirectWrite is used on Windows)
+ * Authors: @derSchepp, @gerritvanaaken, @rodneyrehm, @yatil, @ryanseddon
+ * Web: https://github.com/gerritvanaaken/subpixeldetect
+ */
+Modernizr.addTest('subpixelfont', function() {
+    var bool,
+        styles = "#modernizr{position: absolute; top: -10em; visibility:hidden; font: normal 10px arial;}#subpixel{float: left; font-size: 33.3333%;}";
+    
+    // see https://github.com/Modernizr/Modernizr/blob/master/modernizr.js#L97
+    Modernizr.testStyles(styles, function(elem) {
+        var subpixel = elem.firstChild;
+
+        subpixel.innerHTML = 'This is a text written in Arial';
+
+        bool = window.getComputedStyle ?
+            window.getComputedStyle(subpixel, null).getPropertyValue("width") !== '44px'
+            : false;
+    }, 1, ['subpixel']);
+
+    return bool;
+});
diff --git a/js/modernizr/feature-detects/css-supports.js b/js/modernizr/feature-detects/css-supports.js
new file mode 100644 (file)
index 0000000..24d26d4
--- /dev/null
@@ -0,0 +1,6 @@
+// http://dev.w3.org/csswg/css3-conditional/#at-supports
+// github.com/Modernizr/Modernizr/issues/648
+// Relies on the fact that a browser vendor should expose the CSSSupportsRule interface
+// http://dev.w3.org/csswg/css3-conditional/#the-csssupportsrule-interface
+
+Modernizr.addTest("supports","CSSSupportsRule" in window);
\ No newline at end of file
diff --git a/js/modernizr/feature-detects/css-userselect.js b/js/modernizr/feature-detects/css-userselect.js
new file mode 100644 (file)
index 0000000..062ee90
--- /dev/null
@@ -0,0 +1,10 @@
+// -moz-user-select:none test.
+
+// by ryan seddon
+//https://github.com/Modernizr/Modernizr/issues/250
+
+
+Modernizr.addTest("userselect",function(){
+    return Modernizr.testAllProps("user-select");
+});
+
diff --git a/js/modernizr/feature-detects/css-vhunit.js b/js/modernizr/feature-detects/css-vhunit.js
new file mode 100644 (file)
index 0000000..9de2b64
--- /dev/null
@@ -0,0 +1,14 @@
+// https://github.com/Modernizr/Modernizr/issues/572
+// Similar to http://jsfiddle.net/FWeinb/etnYC/
+Modernizr.addTest('cssvhunit', function() {
+    var bool;
+    Modernizr.testStyles("#modernizr { height: 50vh; }", function(elem, rule) {   
+        var height = parseInt(window.innerHeight/2,10),
+            compStyle = parseInt((window.getComputedStyle ?
+                      getComputedStyle(elem, null) :
+                      elem.currentStyle)["height"],10);
+        
+        bool= (compStyle == height);
+    });
+    return bool;
+});
\ No newline at end of file
diff --git a/js/modernizr/feature-detects/css-vmaxunit.js b/js/modernizr/feature-detects/css-vmaxunit.js
new file mode 100644 (file)
index 0000000..142346b
--- /dev/null
@@ -0,0 +1,14 @@
+// https://github.com/Modernizr/Modernizr/issues/572
+// http://jsfiddle.net/glsee/JDsWQ/4/
+Modernizr.addTest('cssvmaxunit', function(){
+    var bool;
+    Modernizr.testStyles("#modernizr { width: 50vmax; }", function(elem, rule) {
+        var one_vw = window.innerWidth/100,
+            one_vh = window.innerHeight/100,
+            compWidth = parseInt((window.getComputedStyle ?
+                                  getComputedStyle(elem, null) :
+                                  elem.currentStyle)['width'],10);
+        bool = ( parseInt(Math.max(one_vw, one_vh)*50,10) == compWidth );
+    });
+    return bool;
+});
\ No newline at end of file
diff --git a/js/modernizr/feature-detects/css-vminunit.js b/js/modernizr/feature-detects/css-vminunit.js
new file mode 100644 (file)
index 0000000..e6b9881
--- /dev/null
@@ -0,0 +1,14 @@
+// https://github.com/Modernizr/Modernizr/issues/572
+// http://jsfiddle.net/glsee/JRmdq/8/
+Modernizr.addTest('cssvminunit', function(){
+    var bool;
+    Modernizr.testStyles("#modernizr { width: 50vmin; }", function(elem, rule) {
+        var one_vw = window.innerWidth/100,
+            one_vh = window.innerHeight/100,
+            compWidth = parseInt((window.getComputedStyle ?
+                                  getComputedStyle(elem, null) :
+                                  elem.currentStyle)['width'],10);
+        bool = ( parseInt(Math.min(one_vw, one_vh)*50,10) == compWidth );
+    });
+    return bool;
+});
diff --git a/js/modernizr/feature-detects/css-vwunit.js b/js/modernizr/feature-detects/css-vwunit.js
new file mode 100644 (file)
index 0000000..28f8ca2
--- /dev/null
@@ -0,0 +1,14 @@
+// https://github.com/Modernizr/Modernizr/issues/572
+// http://jsfiddle.net/FWeinb/etnYC/
+Modernizr.addTest('cssvwunit', function(){
+    var bool;
+    Modernizr.testStyles("#modernizr { width: 50vw; }", function(elem, rule) {
+        var width = parseInt(window.innerWidth/2,10),
+            compStyle = parseInt((window.getComputedStyle ?
+                      getComputedStyle(elem, null) :
+                      elem.currentStyle)["width"],10);
+        
+        bool= (compStyle == width);
+    });
+    return bool;
+});
diff --git a/js/modernizr/feature-detects/custom-protocol-handler.js b/js/modernizr/feature-detects/custom-protocol-handler.js
new file mode 100644 (file)
index 0000000..2534189
--- /dev/null
@@ -0,0 +1,10 @@
+/*
+       Custom protocol handler support
+       http://developers.whatwg.org/timers.html#custom-handlers
+       
+       Added by @benschwarz
+*/
+
+Modernizr.addTest('customprotocolhandler', function () {
+    return !!navigator.registerProtocolHandler;
+});
diff --git a/js/modernizr/feature-detects/dart.js b/js/modernizr/feature-detects/dart.js
new file mode 100644 (file)
index 0000000..9a8bc82
--- /dev/null
@@ -0,0 +1,6 @@
+// Dart
+// By Theodoor van Donge
+
+// https://chromiumcodereview.appspot.com/9232049/
+
+Modernizr.addTest('dart', !!Modernizr.prefixed('startDart', navigator));
diff --git a/js/modernizr/feature-detects/dataview-api.js b/js/modernizr/feature-detects/dataview-api.js
new file mode 100644 (file)
index 0000000..249bfff
--- /dev/null
@@ -0,0 +1,4 @@
+// DataView 
+// https://developer.mozilla.org/en/JavaScript_typed_arrays/DataView
+// By Addy Osmani
+Modernizr.addTest('dataview', (typeof DataView !== 'undefined' && 'getFloat64' in DataView.prototype));
\ No newline at end of file
diff --git a/js/modernizr/feature-detects/dom-classlist.js b/js/modernizr/feature-detects/dom-classlist.js
new file mode 100644 (file)
index 0000000..c227057
--- /dev/null
@@ -0,0 +1,4 @@
+// classList
+// https://developer.mozilla.org/en/DOM/element.classList
+// By Addy Osmani
+Modernizr.addTest('classlist', 'classList' in document.documentElement);
diff --git a/js/modernizr/feature-detects/dom-createElement-attrs.js b/js/modernizr/feature-detects/dom-createElement-attrs.js
new file mode 100644 (file)
index 0000000..d9a3b11
--- /dev/null
@@ -0,0 +1,11 @@
+// by james a rosen.
+// https://github.com/Modernizr/Modernizr/issues/258
+
+Modernizr.addTest('createelement-attrs', function() {
+  try {
+    return document.createElement("<input name='test' />").getAttribute('name') == 'test';
+  } catch(e) {
+    return false;
+  }
+});
+
diff --git a/js/modernizr/feature-detects/dom-dataset.js b/js/modernizr/feature-detects/dom-dataset.js
new file mode 100644 (file)
index 0000000..810ff50
--- /dev/null
@@ -0,0 +1,9 @@
+
+// dataset API for data-* attributes
+// test by @phiggins42
+
+Modernizr.addTest('dataset', function(){
+  var n = document.createElement("div");
+  n.setAttribute("data-a-b", "c");
+  return !!(n.dataset && n.dataset.aB === "c");
+});
diff --git a/js/modernizr/feature-detects/dom-microdata.js b/js/modernizr/feature-detects/dom-microdata.js
new file mode 100644 (file)
index 0000000..ab0a5d6
--- /dev/null
@@ -0,0 +1,4 @@
+// Microdata support
+// http://www.w3.org/TR/html5/microdata.html
+// By Addy Osmani
+Modernizr.addTest('microdata', !!(document['getItems']));
\ No newline at end of file
diff --git a/js/modernizr/feature-detects/elem-datalist.js b/js/modernizr/feature-detects/elem-datalist.js
new file mode 100644 (file)
index 0000000..4bcdc1f
--- /dev/null
@@ -0,0 +1,12 @@
+
+
+// lol. we already have a test for datalist built in! silly you.
+
+
+// Helpful links while you're here, though..
+
+// http://css-tricks.com/15346-relevant-dropdowns-polyfill-for-datalist/
+// http://miketaylr.com/test/datalist.html
+// http://miketaylr.com/code/datalist.html
+
+Modernizr.addTest('datalistelem', Modernizr.input.list );
diff --git a/js/modernizr/feature-detects/elem-details.js b/js/modernizr/feature-detects/elem-details.js
new file mode 100644 (file)
index 0000000..90501f1
--- /dev/null
@@ -0,0 +1,25 @@
+// By @mathias, based on http://mths.be/axh
+Modernizr.addTest('details', function() {
+    var doc = document,
+        el = doc.createElement('details'),
+        fake,
+        root,
+        diff;
+    if (!('open' in el)) { // return early if possible; thanks @aFarkas!
+        return false;
+    }
+    root = doc.body || (function() {
+        var de = doc.documentElement;
+        fake = true;
+        return de.insertBefore(doc.createElement('body'), de.firstElementChild || de.firstChild);
+    }());
+    el.innerHTML = '<summary>a</summary>b';
+    el.style.display = 'block';
+    root.appendChild(el);
+    diff = el.offsetHeight;
+    el.open = true;
+    diff = diff != el.offsetHeight;
+    root.removeChild(el);
+    fake && root.parentNode.removeChild(root);
+    return diff;
+});
\ No newline at end of file
diff --git a/js/modernizr/feature-detects/elem-output.js b/js/modernizr/feature-detects/elem-output.js
new file mode 100644 (file)
index 0000000..54276b2
--- /dev/null
@@ -0,0 +1,4 @@
+// <output>
+// http://www.whatwg.org/specs/web-apps/current-work/multipage/the-button-element.html#the-output-element
+// by Addy Osmani
+Modernizr.addTest('outputelem', 'value' in document.createElement('output'));
diff --git a/js/modernizr/feature-detects/elem-progress-meter.js b/js/modernizr/feature-detects/elem-progress-meter.js
new file mode 100644 (file)
index 0000000..cfa4bdf
--- /dev/null
@@ -0,0 +1,11 @@
+//By Stefan Wallin
+
+//tests for progressbar-support. All browsers that don't support progressbar returns undefined =)
+Modernizr.addTest("progressbar",function(){
+    return document.createElement('progress').max !== undefined;
+});
+
+//tests for meter-support. All browsers that don't support meters returns undefined =)
+Modernizr.addTest("meter",function(){
+    return document.createElement('meter').max !== undefined;
+});
diff --git a/js/modernizr/feature-detects/elem-ruby.js b/js/modernizr/feature-detects/elem-ruby.js
new file mode 100644 (file)
index 0000000..dbb978f
--- /dev/null
@@ -0,0 +1,53 @@
+// Browser support test for the HTML5 <ruby>, <rt> and <rp> elements
+// http://www.whatwg.org/specs/web-apps/current-work/multipage/text-level-semantics.html#the-ruby-element
+//
+// by @alrra
+
+Modernizr.addTest('ruby', function () {
+
+    var ruby = document.createElement('ruby'),
+        rt = document.createElement('rt'),
+        rp = document.createElement('rp'),
+        docElement = document.documentElement,
+        displayStyleProperty = 'display',
+        fontSizeStyleProperty = 'fontSize'; // 'fontSize' - because it`s only used for IE6 and IE7
+
+    ruby.appendChild(rp);
+    ruby.appendChild(rt);
+    docElement.appendChild(ruby);
+
+    // browsers that support <ruby> hide the <rp> via "display:none"
+    if ( getStyle(rp, displayStyleProperty) == 'none' ||                                                       // for non-IE browsers
+    // but in IE browsers <rp> has "display:inline" so, the test needs other conditions:
+        getStyle(ruby, displayStyleProperty) == 'ruby' && getStyle(rt, displayStyleProperty) == 'ruby-text' || // for IE8 & IE9
+        getStyle(rp, fontSizeStyleProperty) == '6pt' && getStyle(rt, fontSizeStyleProperty) == '6pt' ) {       // for IE6 & IE7
+
+        cleanUp();
+        return true;
+
+    } else {
+        cleanUp();
+        return false;
+    }
+
+    function getStyle( element, styleProperty ) {
+        var result;
+
+        if ( window.getComputedStyle ) {     // for non-IE browsers
+            result = document.defaultView.getComputedStyle(element,null).getPropertyValue(styleProperty);
+        } else if ( element.currentStyle ) { // for IE
+            result = element.currentStyle[styleProperty];
+        }
+
+        return result;
+    }
+
+    function cleanUp() {
+        docElement.removeChild(ruby);
+        // the removed child node still exists in memory, so ...
+        ruby = null;
+        rt = null;
+        rp = null;
+    }
+
+});
diff --git a/js/modernizr/feature-detects/elem-time.js b/js/modernizr/feature-detects/elem-time.js
new file mode 100644 (file)
index 0000000..fc88606
--- /dev/null
@@ -0,0 +1,4 @@
+// <time> element
+// http://www.whatwg.org/specs/web-apps/current-work/multipage/rendering.html#the-time-element-0
+// by Addy Osmani
+Modernizr.addTest('time', 'valueAsDate' in document.createElement('time'));
diff --git a/js/modernizr/feature-detects/elem-track.js b/js/modernizr/feature-detects/elem-track.js
new file mode 100644 (file)
index 0000000..7d8e495
--- /dev/null
@@ -0,0 +1,11 @@
+// Track element + Timed Text Track API
+// http://www.w3.org/TR/html5/video.html#the-track-element
+// http://www.w3.org/TR/html5/media-elements.html#text-track-api
+//
+// While IE10 has implemented the track element, IE10 does not expose the underlying APIs to create timed text tracks by JS (really sad)
+// By Addy Osmani
+Modernizr.addTest({
+       texttrackapi: (typeof (document.createElement('video').addTextTrack) === 'function'),
+       // a more strict test for track including UI support: document.createElement('track').kind === 'subtitles'
+       track: ('kind' in document.createElement('track'))
+});
diff --git a/js/modernizr/feature-detects/emoji.js b/js/modernizr/feature-detects/emoji.js
new file mode 100644 (file)
index 0000000..271db65
--- /dev/null
@@ -0,0 +1,11 @@
+// Requires a Modernizr build with `canvastext` included
+// http://www.modernizr.com/download/#-canvas-canvastext
+Modernizr.addTest('emoji', function() {
+  if (!Modernizr.canvastext) return false;
+  var node = document.createElement('canvas'),
+      ctx = node.getContext('2d');
+  ctx.textBaseline = 'top';
+  ctx.font = '32px Arial';
+  ctx.fillText('\ud83d\ude03', 0, 0); // "smiling face with open mouth" emoji
+  return ctx.getImageData(16, 16, 1, 1).data[0] !== 0;
+});
\ No newline at end of file
diff --git a/js/modernizr/feature-detects/es5-strictmode.js b/js/modernizr/feature-detects/es5-strictmode.js
new file mode 100644 (file)
index 0000000..bffbe95
--- /dev/null
@@ -0,0 +1,7 @@
+// strict mode
+
+// test by @kangax
+
+Modernizr.addTest('strictmode', function(){
+       return (function(){ "use strict"; return !this; })(); 
+});
\ No newline at end of file
diff --git a/js/modernizr/feature-detects/event-deviceorientation-motion.js b/js/modernizr/feature-detects/event-deviceorientation-motion.js
new file mode 100644 (file)
index 0000000..644e671
--- /dev/null
@@ -0,0 +1,11 @@
+//By Shi Chuan
+//Part of Device Access aspect of HTML5, same category as geolocation
+//W3C Editor's Draft at http://dev.w3.org/geo/api/spec-source-orientation.html
+//Implementation by iOS Safari at http://goo.gl/fhce3 and http://goo.gl/rLKz8
+
+
+//test for Device Motion Event support, returns boolean value true/false
+Modernizr.addTest('devicemotion', ('DeviceMotionEvent' in window) );
+
+//test for Device Orientation Event support, returns boolean value true/false
+Modernizr.addTest('deviceorientation', ('DeviceOrientationEvent' in window) );
diff --git a/js/modernizr/feature-detects/exif-orientation.js b/js/modernizr/feature-detects/exif-orientation.js
new file mode 100644 (file)
index 0000000..994c13d
--- /dev/null
@@ -0,0 +1,32 @@
+// EXIF Orientation test
+
+// iOS looks at the EXIF Orientation flag in jpgs and rotates the image
+// accordingly. Looks like most desktop browsers just ignore this data.
+
+// description: www.impulseadventure.com/photo/exif-orientation.html
+
+// Bug trackers:
+//    bugzil.la/298619 (unimplemented)
+//    crbug.com/56845 (looks incomplete)
+//    webk.it/19688 (available upstream but its up all ports to turn on individually)
+//
+
+// detect by Paul Sayre
+
+
+(function(){
+
+  var img = new Image();
+
+  img.onerror = function() {
+      Modernizr.addTest('exif-orientation', function () { return false; });
+  };
+
+  img.onload = function() {
+      Modernizr.addTest('exif-orientation', function () { return img.width !== 2; });
+  };
+
+  // There may be a way to shrink this more, it's a 1x2 white jpg with the orientation flag set to 6
+  img.src = "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/4QAiRXhpZgAASUkqAAgAAAABABIBAwABAAAABgASAAAAAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/2wBDAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/wAARCAABAAIDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD+/iiiigD/2Q==";
+
+})();
diff --git a/js/modernizr/feature-detects/file-api.js b/js/modernizr/feature-detects/file-api.js
new file mode 100644 (file)
index 0000000..7c31e8c
--- /dev/null
@@ -0,0 +1,12 @@
+/**
+ * file tests for the File API specification
+ *   Tests for objects specific to the File API W3C specification without
+ *   being redundant (don't bother testing for Blob since it is assumed
+ *   to be the File object's prototype.
+ *
+ *   Will fail in Safari 5 due to its lack of support for the standards
+ *   defined FileReader object
+ */
+Modernizr.addTest('filereader', function () {
+    return !!(window.File && window.FileList && window.FileReader);
+});
diff --git a/js/modernizr/feature-detects/file-filesystem.js b/js/modernizr/feature-detects/file-filesystem.js
new file mode 100644 (file)
index 0000000..ced6761
--- /dev/null
@@ -0,0 +1,9 @@
+// Filesystem API
+// dev.w3.org/2009/dap/file-system/file-dir-sys.html
+
+// The API will be present in Chrome incognito, but will throw an exception.
+// See crbug.com/93417
+//
+// By Eric Bidelman (@ebidel)
+
+Modernizr.addTest('filesystem', !!Modernizr.prefixed('requestFileSystem', window));
\ No newline at end of file
diff --git a/js/modernizr/feature-detects/forms-fileinput.js b/js/modernizr/feature-detects/forms-fileinput.js
new file mode 100644 (file)
index 0000000..b33eb97
--- /dev/null
@@ -0,0 +1,13 @@
+
+
+// Detects whether input type="file" is available on the platform
+// E.g. iOS < 6 and some android version don't support this
+
+//  It's useful if you want to hide the upload feature of your app on devices that
+//  don't support it (iphone, ipad, etc).
+
+Modernizr.addTest('fileinput', function() {
+    var elem = document.createElement('input');
+    elem.type = 'file';
+    return !elem.disabled;
+});
diff --git a/js/modernizr/feature-detects/forms-formattribute.js b/js/modernizr/feature-detects/forms-formattribute.js
new file mode 100644 (file)
index 0000000..6b8e114
--- /dev/null
@@ -0,0 +1,29 @@
+// Detects whether input form="form_id" is available on the platform
+// E.g. IE 10 (and below), don't support this
+Modernizr.addTest("formattribute", function() {
+       var form = document.createElement("form"),
+               input = document.createElement("input"),
+               div = document.createElement("div"),
+               id = "formtest"+(new Date().getTime()),
+               attr,
+               bool = false;
+
+               form.id = id;
+
+       //IE6/7 confuses the form idl attribute and the form content attribute
+       if(document.createAttribute){
+               attr = document.createAttribute("form");
+               attr.nodeValue = id;
+               input.setAttributeNode(attr);
+               div.appendChild(form);
+               div.appendChild(input);
+
+               document.documentElement.appendChild(div);
+
+               bool = form.elements.length === 1 && input.form == form;
+
+               div.parentNode.removeChild(div);
+       }
+
+       return bool;
+});
\ No newline at end of file
diff --git a/js/modernizr/feature-detects/forms-inputnumber-l10n.js b/js/modernizr/feature-detects/forms-inputnumber-l10n.js
new file mode 100644 (file)
index 0000000..8746b42
--- /dev/null
@@ -0,0 +1,32 @@
+// input[type="number"] localized input/output
+// // Detects whether input type="number" is capable of receiving and
+// // displaying localized numbers, e.g. with comma separator
+// // https://bugs.webkit.org/show_bug.cgi?id=42484
+// // Based on http://trac.webkit.org/browser/trunk/LayoutTests/fast/forms/script-tests/input-number-keyoperation.js?rev=80096#L9
+// // By Peter Janes
+
+Modernizr.addTest('localizedNumber', function() {
+    var doc = document,
+        el = document.createElement('div'),
+        fake,
+        root,
+        input,
+        diff;
+    root = doc.body || (function() {
+        var de = doc.documentElement;
+        fake = true;
+        return de.insertBefore(doc.createElement('body'), de.firstElementChild || de.firstChild);
+    }());
+    el.innerHTML = '<input type="number" value="1.0" step="0.1"/>';
+    input = el.childNodes[0];
+    root.appendChild(el);
+    input.focus();
+    try {
+        doc.execCommand('InsertText', false, '1,1');
+    } catch(e) { // prevent warnings in IE
+    }
+    diff = input.type === 'number' && input.valueAsNumber === 1.1 && input.checkValidity();
+    root.removeChild(el);
+    fake && root.parentNode.removeChild(root);
+    return diff;
+});
diff --git a/js/modernizr/feature-detects/forms-placeholder.js b/js/modernizr/feature-detects/forms-placeholder.js
new file mode 100644 (file)
index 0000000..e68014b
--- /dev/null
@@ -0,0 +1,10 @@
+// testing for placeholder attribute in inputs and textareas
+// re-using Modernizr.input if available
+
+Modernizr.addTest('placeholder', function(){
+
+  return !!( 'placeholder' in ( Modernizr.input    || document.createElement('input')    ) && 
+             'placeholder' in ( Modernizr.textarea || document.createElement('textarea') )
+           );
+
+});
diff --git a/js/modernizr/feature-detects/forms-speechinput.js b/js/modernizr/feature-detects/forms-speechinput.js
new file mode 100644 (file)
index 0000000..48c9021
--- /dev/null
@@ -0,0 +1,19 @@
+// speech input for inputs
+// by @alrra
+
+
+// `webkitSpeech` in elem 
+// doesn`t work correctly in all versions of Chromium based browsers.
+//   It can return false even if they have support for speech i.imgur.com/2Y40n.png
+//  Testing with 'onwebkitspeechchange' seems to fix this problem
+
+// this detect only checks the webkit version because
+// the speech attribute is likely to be deprecated in favor of a JavaScript API.
+// http://lists.w3.org/Archives/Public/public-webapps/2011OctDec/att-1696/speechapi.html
+
+// FIXME: add support for detecting the new spec'd behavior
+
+Modernizr.addTest('speechinput', function(){
+    var elem = document.createElement('input'); 
+    return 'speech' in elem || 'onwebkitspeechchange' in elem; 
+});
\ No newline at end of file
diff --git a/js/modernizr/feature-detects/forms-validation.js b/js/modernizr/feature-detects/forms-validation.js
new file mode 100644 (file)
index 0000000..d52921a
--- /dev/null
@@ -0,0 +1,62 @@
+// This implementation only tests support for interactive form validation.
+// To check validation for a specific type or a specific other constraint,
+// the test can be combined: 
+//    - Modernizr.inputtypes.numer && Modernizr.formvalidation (browser supports rangeOverflow, typeMismatch etc. for type=number)
+//    - Modernizr.input.required && Modernizr.formvalidation (browser supports valueMissing)
+//
+(function(document, Modernizr){
+
+
+  Modernizr.formvalidationapi = false;
+  Modernizr.formvalidationmessage = false;
+
+  Modernizr.addTest('formvalidation', function() {
+    var form = document.createElement('form');
+    if ( !('checkValidity' in form) || !('addEventListener' in form) ) {
+      return false;
+    }
+    if ('reportValidity' in form) {
+      return true;
+    }
+    var invalidFired = false;
+    var input;
+
+    Modernizr.formvalidationapi =  true;
+
+    // Prevent form from being submitted
+    form.addEventListener('submit', function(e) {
+      //Opera does not validate form, if submit is prevented
+      if ( !window.opera ) {
+        e.preventDefault();
+      }
+      e.stopPropagation();
+    }, false);
+
+    // Calling form.submit() doesn't trigger interactive validation,
+    // use a submit button instead
+    //older opera browsers need a name attribute
+    form.innerHTML = '<input name="modTest" required><button></button>';
+
+    Modernizr.testStyles('#modernizr form{position:absolute;top:-99999em}', function( node ) {
+      node.appendChild(form);
+
+      input = form.getElementsByTagName('input')[0];
+
+      // Record whether "invalid" event is fired
+      input.addEventListener('invalid', function(e) {
+        invalidFired = true;
+        e.preventDefault();
+        e.stopPropagation();
+      }, false);
+
+      //Opera does not fully support the validationMessage property
+      Modernizr.formvalidationmessage = !!input.validationMessage;
+
+      // Submit form by clicking submit button
+      form.getElementsByTagName('button')[0].click();
+    });
+
+    return invalidFired;
+  });
+
+})(document, window.Modernizr);
diff --git a/js/modernizr/feature-detects/fullscreen-api.js b/js/modernizr/feature-detects/fullscreen-api.js
new file mode 100644 (file)
index 0000000..7432571
--- /dev/null
@@ -0,0 +1,10 @@
+Modernizr.addTest('fullscreen',function(){
+     for(var i = 0; i < Modernizr._domPrefixes.length; i++) {
+        if( document[Modernizr._domPrefixes[i].toLowerCase() + 'CancelFullScreen'])
+            return true;
+     }
+     return !!document['cancelFullScreen'] || false;
+});
+
+// http://developer.apple.com/library/safari/documentation/AudioVideo/Conceptual/Using_HTML5_Audio_Video/ControllingMediaWithJavaScript/ControllingMediaWithJavaScript.html#//apple_ref/doc/uid/TP40009523-CH3-SW20
+// https://developer.mozilla.org/en/API/Fullscreen
diff --git a/js/modernizr/feature-detects/gamepad.js b/js/modernizr/feature-detects/gamepad.js
new file mode 100644 (file)
index 0000000..0756289
--- /dev/null
@@ -0,0 +1,12 @@
+// GamePad API
+// https://dvcs.w3.org/hg/gamepad/raw-file/default/gamepad.html
+// By Eric Bidelman
+
+// FF has Gamepad API support only in special builds, but not in any release (even behind a flag)
+// Their current implementation has no way to feature detect, only events to bind to.
+//   http://www.html5rocks.com/en/tutorials/doodles/gamepad/#toc-featuredetect
+
+// but a patch will bring them up to date with the spec when it lands (and they'll pass this test)
+//   https://bugzilla.mozilla.org/show_bug.cgi?id=690935
+
+Modernizr.addTest('gamepads', !!Modernizr.prefixed('getGamepads', navigator));
diff --git a/js/modernizr/feature-detects/getusermedia.js b/js/modernizr/feature-detects/getusermedia.js
new file mode 100644 (file)
index 0000000..4c38bec
--- /dev/null
@@ -0,0 +1,5 @@
+// getUserMedia
+// http://www.whatwg.org/specs/web-apps/current-work/multipage/video-conferencing-and-peer-to-peer-communication.html
+// By Eric Bidelman
+
+Modernizr.addTest('getusermedia', !!Modernizr.prefixed('getUserMedia', navigator));
\ No newline at end of file
diff --git a/js/modernizr/feature-detects/ie8compat.js b/js/modernizr/feature-detects/ie8compat.js
new file mode 100644 (file)
index 0000000..c95e56a
--- /dev/null
@@ -0,0 +1,12 @@
+
+// IE8 compat mode aka Fake IE7
+// by Erich Ocean
+
+// In this case, IE8 will be acting as IE7. You may choose to remove features in this case.
+
+// related:
+// james.padolsey.com/javascript/detect-ie-in-js-using-conditional-comments/
+
+Modernizr.addTest('ie8compat',function(){
+    return (!window.addEventListener && document.documentMode && document.documentMode === 7);
+});
diff --git a/js/modernizr/feature-detects/iframe-sandbox.js b/js/modernizr/feature-detects/iframe-sandbox.js
new file mode 100644 (file)
index 0000000..869c94a
--- /dev/null
@@ -0,0 +1,5 @@
+// Test for `sandbox` attribute in iframes.
+//
+// Spec: http://www.whatwg.org/specs/web-apps/current-work/multipage/the-iframe-element.html#attr-iframe-sandbox
+
+Modernizr.addTest('sandbox', 'sandbox' in document.createElement('iframe'));
diff --git a/js/modernizr/feature-detects/iframe-seamless.js b/js/modernizr/feature-detects/iframe-seamless.js
new file mode 100644 (file)
index 0000000..247b9e6
--- /dev/null
@@ -0,0 +1,5 @@
+// Test for `seamless` attribute in iframes.
+//
+// Spec: http://www.whatwg.org/specs/web-apps/current-work/multipage/the-iframe-element.html#attr-iframe-seamless
+
+Modernizr.addTest('seamless', 'seamless' in document.createElement('iframe'));
diff --git a/js/modernizr/feature-detects/iframe-srcdoc.js b/js/modernizr/feature-detects/iframe-srcdoc.js
new file mode 100644 (file)
index 0000000..1769858
--- /dev/null
@@ -0,0 +1,5 @@
+// Test for `srcdoc` attribute in iframes.
+//
+// Spec: http://www.whatwg.org/specs/web-apps/current-work/multipage/the-iframe-element.html#attr-iframe-srcdoc
+
+Modernizr.addTest('srcdoc', 'srcdoc' in document.createElement('iframe'));
diff --git a/js/modernizr/feature-detects/img-apng.js b/js/modernizr/feature-detects/img-apng.js
new file mode 100644 (file)
index 0000000..069ac93
--- /dev/null
@@ -0,0 +1,26 @@
+// Animated PNG
+// http://en.wikipedia.org/wiki/APNG
+// By Addy Osmani
+(function () {
+
+    if (!Modernizr.canvas) return false;
+    
+    var image = new Image(),
+        canvas = document.createElement('canvas'),
+        ctx = canvas.getContext('2d');
+
+
+    image.onload = function () {
+        Modernizr.addTest('apng', function () {
+            if (typeof canvas.getContext == 'undefined') {
+                return false;
+            } else {
+                ctx.drawImage(image, 0, 0);
+                return ctx.getImageData(0, 0, 1, 1).data[3] === 0;
+            }
+        });
+    };
+
+    image.src = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAACGFjVEwAAAABAAAAAcMq2TYAAAANSURBVAiZY2BgYPgPAAEEAQB9ssjfAAAAGmZjVEwAAAAAAAAAAQAAAAEAAAAAAAAAAAD6A+gBAbNU+2sAAAARZmRBVAAAAAEImWNgYGBgAAAABQAB6MzFdgAAAABJRU5ErkJggg==";
+
+}());
diff --git a/js/modernizr/feature-detects/img-webp.js b/js/modernizr/feature-detects/img-webp.js
new file mode 100644 (file)
index 0000000..360cdf8
--- /dev/null
@@ -0,0 +1,20 @@
+// code.google.com/speed/webp/
+// by rich bradshaw, ryan seddon, and paul irish
+
+
+// This test is asynchronous. Watch out.
+
+(function(){
+
+  var image = new Image();
+
+  image.onerror = function() {
+      Modernizr.addTest('webp', false);
+  };  
+  image.onload = function() {
+      Modernizr.addTest('webp', function() { return image.width == 1; });
+  };
+
+  image.src = 'data:image/webp;base64,UklGRiwAAABXRUJQVlA4ICAAAAAUAgCdASoBAAEAL/3+/3+CAB/AAAFzrNsAAP5QAAAAAA==';
+
+}());
\ No newline at end of file
diff --git a/js/modernizr/feature-detects/json.js b/js/modernizr/feature-detects/json.js
new file mode 100644 (file)
index 0000000..af58064
--- /dev/null
@@ -0,0 +1,7 @@
+// native JSON support.
+// developer.mozilla.org/en/JSON
+
+// this will also succeed if you've loaded the JSON2.js polyfill ahead of time
+//   ... but that should be obvious. :)
+
+Modernizr.addTest('json', !!window.JSON && !!JSON.parse);
diff --git a/js/modernizr/feature-detects/lists-reversed.js b/js/modernizr/feature-detects/lists-reversed.js
new file mode 100644 (file)
index 0000000..22fd92c
--- /dev/null
@@ -0,0 +1,6 @@
+
+// impressivewebs.com/reverse-ordered-lists-html5
+// polyfill: github.com/impressivewebs/HTML5-Reverse-Ordered-Lists
+
+
+Modernizr.addTest('olreversed', 'reversed' in document.createElement('ol'));
diff --git a/js/modernizr/feature-detects/mathml.js b/js/modernizr/feature-detects/mathml.js
new file mode 100644 (file)
index 0000000..e1c907a
--- /dev/null
@@ -0,0 +1,23 @@
+// MathML
+// http://www.w3.org/Math/ 
+// By Addy Osmani
+// Based on work by Davide (@dpvc) and David (@davidcarlisle)
+// in https://github.com/mathjax/MathJax/issues/182
+
+Modernizr.addTest('mathml', function(){
+       var hasMathML = false;
+       if ( document.createElementNS ) {
+       var ns = "http://www.w3.org/1998/Math/MathML",
+           div = document.createElement("div");
+           div.style.position = "absolute"; 
+       var mfrac = div.appendChild(document.createElementNS(ns,"math"))
+                      .appendChild(document.createElementNS(ns,"mfrac"));
+       mfrac.appendChild(document.createElementNS(ns,"mi"))
+            .appendChild(document.createTextNode("xx"));
+       mfrac.appendChild(document.createElementNS(ns,"mi"))
+            .appendChild(document.createTextNode("yy"));
+       document.body.appendChild(div);
+       hasMathML = div.offsetHeight > div.offsetWidth;
+       }
+       return hasMathML;
+});
\ No newline at end of file
diff --git a/js/modernizr/feature-detects/network-connection.js b/js/modernizr/feature-detects/network-connection.js
new file mode 100644 (file)
index 0000000..242cdfe
--- /dev/null
@@ -0,0 +1,22 @@
+// determining low-bandwidth via navigator.connection
+
+// There are two iterations of the navigator.connection interface:
+
+// The first is present in Android 2.2+ and only in the Browser (not WebView)
+// : docs.phonegap.com/en/1.2.0/phonegap_connection_connection.md.html#connection.type
+// : davidbcalhoun.com/2010/using-navigator-connection-android
+
+// The second is specced at dev.w3.org/2009/dap/netinfo/ and perhaps landing in WebKit
+// : bugs.webkit.org/show_bug.cgi?id=73528
+
+// unknown devices are assumed as fast
+// for more rigorous network testing, consider boomerang.js: github.com/bluesmoon/boomerang/
+
+Modernizr.addTest('lowbandwidth', function() {
+
+  var connection = navigator.connection || { type: 0 }; // polyfill
+
+  return connection.type == 3 || // connection.CELL_2G
+      connection.type == 4 || // connection.CELL_3G
+      /^[23]g$/.test(connection.type); // string value in new spec
+});
diff --git a/js/modernizr/feature-detects/network-eventsource.js b/js/modernizr/feature-detects/network-eventsource.js
new file mode 100644 (file)
index 0000000..ac94065
--- /dev/null
@@ -0,0 +1,5 @@
+
+// server sent events aka eventsource
+// dev.w3.org/html5/eventsource/
+
+Modernizr.addTest('eventsource', !!window.EventSource);
diff --git a/js/modernizr/feature-detects/network-xhr2.js b/js/modernizr/feature-detects/network-xhr2.js
new file mode 100644 (file)
index 0000000..8d3fb51
--- /dev/null
@@ -0,0 +1,13 @@
+
+
+// XML HTTP Request Level 2
+// www.w3.org/TR/XMLHttpRequest2/
+
+// Much more details at github.com/Modernizr/Modernizr/issues/385
+
+// all three of these details report consistently across all target browsers:
+//   !!(window.ProgressEvent);
+//   !!(window.FormData);
+//   window.XMLHttpRequest && "withCredentials" in new XMLHttpRequest;
+
+Modernizr.addTest('xhr2', 'FormData' in window);
diff --git a/js/modernizr/feature-detects/notification.js b/js/modernizr/feature-detects/notification.js
new file mode 100644 (file)
index 0000000..92d1eef
--- /dev/null
@@ -0,0 +1,10 @@
+// Notifications
+// By Theodoor van Donge
+
+// window.webkitNotifications is only used by Chrome 
+//     http://www.html5rocks.com/en/tutorials/notifications/quick/
+
+// window.Notification only exist in the draft specs 
+//     http://dev.w3.org/2006/webapi/WebNotifications/publish/Notifications.html#idl-if-Notification
+
+Modernizr.addTest('notification', 'Notification' in window && 'permission' in window.Notification && 'requestPermission' in window.Notification);
diff --git a/js/modernizr/feature-detects/performance.js b/js/modernizr/feature-detects/performance.js
new file mode 100644 (file)
index 0000000..903c5c9
--- /dev/null
@@ -0,0 +1,5 @@
+// Navigation Timing (Performance)
+// https://dvcs.w3.org/hg/webperf/raw-file/tip/specs/NavigationTiming/
+// http://www.html5rocks.com/en/tutorials/webperformance/basics/
+// By Scott Murphy (uxder)
+Modernizr.addTest('performance', !!Modernizr.prefixed('performance', window));
\ No newline at end of file
diff --git a/js/modernizr/feature-detects/pointerlock-api.js b/js/modernizr/feature-detects/pointerlock-api.js
new file mode 100644 (file)
index 0000000..07eb07e
--- /dev/null
@@ -0,0 +1,4 @@
+// https://developer.mozilla.org/en-US/docs/API/Pointer_Lock_API
+
+Modernizr.addTest('pointerlock',!!Modernizr.prefixed('pointerLockElement', document));
+
diff --git a/js/modernizr/feature-detects/quota-management-api.js b/js/modernizr/feature-detects/quota-management-api.js
new file mode 100644 (file)
index 0000000..5ce2b02
--- /dev/null
@@ -0,0 +1,11 @@
+// Quota Storage Management API
+// This API can be used to check how much quota an origin is using and request more
+
+// Currently only implemented in Chrome.
+// https://developers.google.com/chrome/whitepapers/storage
+// By Addy Osmani
+
+Modernizr.addTest('quotamanagement', function(){
+  var storage = Modernizr.prefixed('StorageInfo', window);
+  return !!(storage && 'TEMPORARY' in storage && 'PERSISTENT' in storage);
+});
diff --git a/js/modernizr/feature-detects/requestanimationframe.js b/js/modernizr/feature-detects/requestanimationframe.js
new file mode 100644 (file)
index 0000000..5ac4bcf
--- /dev/null
@@ -0,0 +1,7 @@
+
+// requestAnimationFrame
+// Offload animation repainting to browser for optimized performance. 
+// http://dvcs.w3.org/hg/webperf/raw-file/tip/specs/RequestAnimationFrame/Overview.html
+// By Addy Osmani
+
+Modernizr.addTest('raf', !!Modernizr.prefixed('requestAnimationFrame', window));
\ No newline at end of file
diff --git a/js/modernizr/feature-detects/script-async.js b/js/modernizr/feature-detects/script-async.js
new file mode 100644 (file)
index 0000000..d80d04b
--- /dev/null
@@ -0,0 +1,3 @@
+// async script
+// By Theodoor van Donge
+Modernizr.addTest('scriptasync', 'async' in document.createElement('script'));
\ No newline at end of file
diff --git a/js/modernizr/feature-detects/script-defer.js b/js/modernizr/feature-detects/script-defer.js
new file mode 100644 (file)
index 0000000..782f14a
--- /dev/null
@@ -0,0 +1,3 @@
+// defer script
+// By Theodoor van Donge
+Modernizr.addTest('scriptdefer', 'defer' in document.createElement('script'));
\ No newline at end of file
diff --git a/js/modernizr/feature-detects/style-scoped.js b/js/modernizr/feature-detects/style-scoped.js
new file mode 100644 (file)
index 0000000..3add1b0
--- /dev/null
@@ -0,0 +1,6 @@
+// Browser support test for <style scoped>
+// http://www.w3.org/TR/html5/the-style-element.html#attr-style-scoped
+//
+// by @alrra
+
+Modernizr.addTest( 'stylescoped', 'scoped' in document.createElement('style') );
diff --git a/js/modernizr/feature-detects/svg-filters.js b/js/modernizr/feature-detects/svg-filters.js
new file mode 100644 (file)
index 0000000..d289b9d
--- /dev/null
@@ -0,0 +1,13 @@
+// Detect support for svg filters - http://www.w3.org/TR/SVG11/filters.html.
+// Should fail in Safari: http://stackoverflow.com/questions/9739955/feature-detecting-support-for-svg-filters.
+// detect by erik dahlstrom
+
+Modernizr.addTest('svgfilters', function(){
+       var result = false;
+    try {
+      result = typeof SVGFEColorMatrixElement !== undefined &&
+               SVGFEColorMatrixElement.SVG_FECOLORMATRIX_TYPE_SATURATE == 2;
+    }
+    catch(e) {}
+    return result;
+});
diff --git a/js/modernizr/feature-detects/unicode.js b/js/modernizr/feature-detects/unicode.js
new file mode 100644 (file)
index 0000000..39908bf
--- /dev/null
@@ -0,0 +1,32 @@
+/**
+ * Unicode special character support
+ * 
+ * Detection is made by testing missing glyph box rendering against star character
+ * If widths are the same, this "probably" means the browser didn't support the star character and rendered a glyph box instead
+ * Just need to ensure the font characters have different widths
+ * 
+ * Warning : positive Unicode support doesn't mean you can use it inside <title>, this seams more related to OS & Language packs
+ */
+Modernizr.addTest('unicode', function() {
+       
+       
+       var bool,
+
+               missingGlyph = document.createElement('span'),
+               
+               star = document.createElement('span');
+
+       Modernizr.testStyles('#modernizr{font-family:Arial,sans;font-size:300em;}', function(node) {
+
+               missingGlyph.innerHTML = '&#5987';
+               star.innerHTML = '&#9734';              
+               
+               node.appendChild(missingGlyph);
+               node.appendChild(star);
+               
+               bool = 'offsetWidth' in missingGlyph && missingGlyph.offsetWidth !== star.offsetWidth;
+       });
+
+       return bool;
+
+});
\ No newline at end of file
diff --git a/js/modernizr/feature-detects/url-data-uri.js b/js/modernizr/feature-detects/url-data-uri.js
new file mode 100644 (file)
index 0000000..e6479a2
--- /dev/null
@@ -0,0 +1,26 @@
+// data uri test.
+// https://github.com/Modernizr/Modernizr/issues/14
+
+// This test is asynchronous. Watch out.
+
+
+// in IE7 in HTTPS this can cause a Mixed Content security popup. 
+//  github.com/Modernizr/Modernizr/issues/362
+// To avoid that you can create a new iframe and inject this.. perhaps..
+
+
+(function(){
+
+  var datauri = new Image();
+
+
+  datauri.onerror = function() {
+      Modernizr.addTest('datauri', function () { return false; });
+  };  
+  datauri.onload = function() {
+      Modernizr.addTest('datauri', function () { return (datauri.width == 1 && datauri.height == 1); });
+  };
+
+  datauri.src = "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==";
+
+})();
diff --git a/js/modernizr/feature-detects/userdata.js b/js/modernizr/feature-detects/userdata.js
new file mode 100644 (file)
index 0000000..79d921e
--- /dev/null
@@ -0,0 +1,7 @@
+// test if IE userdata supported
+// msdn.microsoft.com/en-us/library/ms531424(v=vs.85).aspx
+// test by @stereobooster
+
+Modernizr.addTest('userdata', function(){
+  return !!document.createElement('div').addBehavior;
+});
diff --git a/js/modernizr/feature-detects/vibration.js b/js/modernizr/feature-detects/vibration.js
new file mode 100644 (file)
index 0000000..034c25d
--- /dev/null
@@ -0,0 +1,4 @@
+// Vibration API
+// http://www.w3.org/TR/vibration/
+// https://developer.mozilla.org/en/DOM/window.navigator.mozVibrate
+Modernizr.addTest('vibrate', !!Modernizr.prefixed('vibrate', navigator));
\ No newline at end of file
diff --git a/js/modernizr/feature-detects/web-intents.js b/js/modernizr/feature-detects/web-intents.js
new file mode 100644 (file)
index 0000000..d0557fe
--- /dev/null
@@ -0,0 +1,6 @@
+// Tests for the ability to use Web Intents (http://webintents.org).
+// By Eric Bidelman
+
+Modernizr.addTest('webintents', function() {
+  return !!Modernizr.prefixed('startActivity', navigator);
+});
diff --git a/js/modernizr/feature-detects/webgl-extensions.js b/js/modernizr/feature-detects/webgl-extensions.js
new file mode 100644 (file)
index 0000000..c005c00
--- /dev/null
@@ -0,0 +1,42 @@
+
+// Grab the WebGL extensions currently supported and add to the Modernizr.webgl object
+// spec: www.khronos.org/registry/webgl/specs/latest/#5.13.14
+
+// based on code from ilmari heikkinen
+// code.google.com/p/graphics-detect/source/browse/js/detect.js
+
+
+(function(){
+
+    if (!Modernizr.webgl) return;
+
+    var canvas, ctx, exts;
+
+    try {
+        canvas  = document.createElement('canvas');
+        ctx     = canvas.getContext('webgl') || canvas.getContext('experimental-webgl');
+        exts    = ctx.getSupportedExtensions();
+    }
+    catch (e) {
+        return;
+    }
+
+    if (ctx === undefined) {
+        Modernizr.webgl = new Boolean(false);
+    }
+    else {
+        Modernizr.webgl = new Boolean(true);
+    }
+
+
+    for (var i = -1, len = exts.length; ++i < len; ){
+        Modernizr.webgl[exts[i]] = true;
+    }
+
+    // hack for addressing modernizr testsuite failures. sorry.
+    if (window.TEST && TEST.audvid){
+        TEST.audvid.push('webgl');
+    }
+
+    canvas = undefined;
+})();
\ No newline at end of file
diff --git a/js/modernizr/feature-detects/websockets-binary.js b/js/modernizr/feature-detects/websockets-binary.js
new file mode 100644 (file)
index 0000000..8f549ce
--- /dev/null
@@ -0,0 +1,20 @@
+
+// binaryType is truthy if there is support.. returns "blob" in new-ish chrome.
+// plus.google.com/115535723976198353696/posts/ERN6zYozENV
+// github.com/Modernizr/Modernizr/issues/370
+
+Modernizr.addTest('websocketsbinary', function() {
+  var protocol = 'https:'==location.protocol?'wss':'ws',
+  protoBin;
+
+  if('WebSocket' in window) {
+    if( protoBin = 'binaryType' in WebSocket.prototype ) {
+      return protoBin;
+    }
+    try {
+      return !!(new WebSocket(protocol+'://.').binaryType);
+    } catch (e){}
+  }
+
+  return false;
+});
diff --git a/js/modernizr/feature-detects/window-framed.js b/js/modernizr/feature-detects/window-framed.js
new file mode 100644 (file)
index 0000000..f8a6704
--- /dev/null
@@ -0,0 +1,8 @@
+
+// tests if page is iframed
+
+// github.com/Modernizr/Modernizr/issues/242
+
+Modernizr.addTest('framed', function(){
+  return window.location != top.location;
+});
diff --git a/js/modernizr/feature-detects/workers-blobworkers.js b/js/modernizr/feature-detects/workers-blobworkers.js
new file mode 100644 (file)
index 0000000..33e82eb
--- /dev/null
@@ -0,0 +1,66 @@
+// by jussi-kalliokoski
+
+
+// This test is asynchronous. Watch out.
+
+// The test will potentially add garbage to console.
+
+(function(){
+  try {
+    // we're avoiding using Modernizr._domPrefixes as the prefix capitalization on
+    // these guys are notoriously peculiar.
+    var BlobBuilder = window.MozBlobBuilder || window.WebKitBlobBuilder || window.MSBlobBuilder || window.OBlobBuilder || window.BlobBuilder;
+    var URL         = window.MozURL || window.webkitURL || window.MSURL || window.OURL || window.URL;
+    var data    = 'Modernizr',
+        blob,
+        bb,
+        worker,
+        url,
+        timeout,
+        scriptText = 'this.onmessage=function(e){postMessage(e.data)}';
+
+    try {
+      blob = new Blob([scriptText], {type:'text/javascript'});
+    } catch(e) {
+      // we'll fall back to the deprecated BlobBuilder
+    }
+    if (!blob) {
+      bb = new BlobBuilder();
+      bb.append(scriptText);
+      blob = bb.getBlob();
+    }
+
+    url = URL.createObjectURL(blob);
+    worker = new Worker(url);
+
+    worker.onmessage = function(e) {
+      Modernizr.addTest('blobworkers', data === e.data);
+      cleanup();
+    };
+
+    // Just in case...
+    worker.onerror = fail;
+    timeout = setTimeout(fail, 200);
+
+    worker.postMessage(data);
+  } catch (e) {
+    fail();
+  }
+
+  function fail() {
+    Modernizr.addTest('blobworkers', false);
+    cleanup();
+  }
+
+  function cleanup() {
+    if (url) {
+      URL.revokeObjectURL(url);
+    }
+    if (worker) {
+      worker.terminate();
+    }
+    if (timeout) {
+      clearTimeout(timeout);
+    }
+  }
+}());
diff --git a/js/modernizr/feature-detects/workers-dataworkers.js b/js/modernizr/feature-detects/workers-dataworkers.js
new file mode 100644 (file)
index 0000000..efa95a5
--- /dev/null
@@ -0,0 +1,34 @@
+// by jussi-kalliokoski
+
+
+// This test is asynchronous. Watch out.
+
+// The test will potentially add garbage to console.
+
+(function(){
+  try {
+    var data    = 'Modernizr',
+        worker  = new Worker('data:text/javascript;base64,dGhpcy5vbm1lc3NhZ2U9ZnVuY3Rpb24oZSl7cG9zdE1lc3NhZ2UoZS5kYXRhKX0=');
+
+    worker.onmessage = function(e) {
+      worker.terminate();
+      Modernizr.addTest('dataworkers', data === e.data);
+      worker = null;
+    };
+
+    // Just in case...
+    worker.onerror = function() {
+      Modernizr.addTest('dataworkers', false);
+      worker = null;
+    };
+
+    setTimeout(function() {
+        Modernizr.addTest('dataworkers', false);
+    }, 200);
+
+    worker.postMessage(data);
+
+  } catch (e) {
+    Modernizr.addTest('dataworkers', false);
+  }
+}());
diff --git a/js/modernizr/feature-detects/workers-sharedworkers.js b/js/modernizr/feature-detects/workers-sharedworkers.js
new file mode 100644 (file)
index 0000000..a9d78eb
--- /dev/null
@@ -0,0 +1,3 @@
+Modernizr.addTest('sharedworkers', function(){
+  return !!window.SharedWorker;
+});
\ No newline at end of file
diff --git a/js/modernizr/grunt.js b/js/modernizr/grunt.js
new file mode 100644 (file)
index 0000000..ed591da
--- /dev/null
@@ -0,0 +1,69 @@
+/*global module */
+module.exports = function( grunt ) {
+    'use strict';
+
+    grunt.initConfig({
+        meta: {
+          version: '2.8.3',
+          banner: '/*!\n' +
+            ' * Modernizr v<%= meta.version %>\n' +
+            ' * www.modernizr.com\n *\n' +
+            ' * Copyright (c) Faruk Ates, Paul Irish, Alex Sexton\n' +
+            ' * Available under the BSD and MIT licenses: www.modernizr.com/license/\n */'
+        },
+        qunit: {
+            files: ['test/index.html']
+        },
+        lint: {
+            files: [
+                'grunt.js',
+                'modernizr.js',
+                'feature-detects/*.js'
+            ]
+        },
+        min: {
+            dist: {
+                src: [
+                    '<banner:meta.banner>',
+                    'modernizr.js'
+                ],
+                dest: 'modernizr.min.js'
+            }
+        },
+        watch: {
+            files: '<config:lint.files>',
+            tasks: 'lint'
+        },
+        jshint: {
+            options: {
+                boss: true,
+                browser: true,
+                curly: false,
+                devel: true,
+                eqeqeq: false,
+                eqnull: true,
+                expr: true,
+                evil: true,
+                immed: false,
+                laxcomma: true,
+                newcap: false,
+                noarg: true,
+                smarttabs: true,
+                sub: true,
+                undef: true
+            },
+            globals: {
+                Modernizr: true,
+                DocumentTouch: true,
+                TEST: true,
+                SVGFEColorMatrixElement : true,
+                Blob: true
+            }
+        }
+    });
+
+    grunt.registerTask('default', 'min');
+
+    // Travis CI task.
+    grunt.registerTask('travis', 'qunit');
+};
diff --git a/js/modernizr/modernizr.js b/js/modernizr/modernizr.js
new file mode 100644 (file)
index 0000000..3365339
--- /dev/null
@@ -0,0 +1,1406 @@
+/*!
+ * Modernizr v2.8.3
+ * www.modernizr.com
+ *
+ * Copyright (c) Faruk Ates, Paul Irish, Alex Sexton
+ * Available under the BSD and MIT licenses: www.modernizr.com/license/
+ */
+
+/*
+ * Modernizr tests which native CSS3 and HTML5 features are available in
+ * the current UA and makes the results available to you in two ways:
+ * as properties on a global Modernizr object, and as classes on the
+ * <html> element. This information allows you to progressively enhance
+ * your pages with a granular level of control over the experience.
+ *
+ * Modernizr has an optional (not included) conditional resource loader
+ * called Modernizr.load(), based on Yepnope.js (yepnopejs.com).
+ * To get a build that includes Modernizr.load(), as well as choosing
+ * which tests to include, go to www.modernizr.com/download/
+ *
+ * Authors        Faruk Ates, Paul Irish, Alex Sexton
+ * Contributors   Ryan Seddon, Ben Alman
+ */
+
+window.Modernizr = (function( window, document, undefined ) {
+
+    var version = '2.8.3',
+
+    Modernizr = {},
+
+    /*>>cssclasses*/
+    // option for enabling the HTML classes to be added
+    enableClasses = true,
+    /*>>cssclasses*/
+
+    docElement = document.documentElement,
+
+    /**
+     * Create our "modernizr" element that we do most feature tests on.
+     */
+    mod = 'modernizr',
+    modElem = document.createElement(mod),
+    mStyle = modElem.style,
+
+    /**
+     * Create the input element for various Web Forms feature tests.
+     */
+    inputElem /*>>inputelem*/ = document.createElement('input') /*>>inputelem*/ ,
+
+    /*>>smile*/
+    smile = ':)',
+    /*>>smile*/
+
+    toString = {}.toString,
+
+    // TODO :: make the prefixes more granular
+    /*>>prefixes*/
+    // List of property values to set for css tests. See ticket #21
+    prefixes = ' -webkit- -moz- -o- -ms- '.split(' '),
+    /*>>prefixes*/
+
+    /*>>domprefixes*/
+    // Following spec is to expose vendor-specific style properties as:
+    //   elem.style.WebkitBorderRadius
+    // and the following would be incorrect:
+    //   elem.style.webkitBorderRadius
+
+    // Webkit ghosts their properties in lowercase but Opera & Moz do not.
+    // Microsoft uses a lowercase `ms` instead of the correct `Ms` in IE8+
+    //   erik.eae.net/archives/2008/03/10/21.48.10/
+
+    // More here: github.com/Modernizr/Modernizr/issues/issue/21
+    omPrefixes = 'Webkit Moz O ms',
+
+    cssomPrefixes = omPrefixes.split(' '),
+
+    domPrefixes = omPrefixes.toLowerCase().split(' '),
+    /*>>domprefixes*/
+
+    /*>>ns*/
+    ns = {'svg': 'http://www.w3.org/2000/svg'},
+    /*>>ns*/
+
+    tests = {},
+    inputs = {},
+    attrs = {},
+
+    classes = [],
+
+    slice = classes.slice,
+
+    featureName, // used in testing loop
+
+
+    /*>>teststyles*/
+    // Inject element with style element and some CSS rules
+    injectElementWithStyles = function( rule, callback, nodes, testnames ) {
+
+      var style, ret, node, docOverflow,
+          div = document.createElement('div'),
+          // After page load injecting a fake body doesn't work so check if body exists
+          body = document.body,
+          // IE6 and 7 won't return offsetWidth or offsetHeight unless it's in the body element, so we fake it.
+          fakeBody = body || document.createElement('body');
+
+      if ( parseInt(nodes, 10) ) {
+          // In order not to give false positives we create a node for each test
+          // This also allows the method to scale for unspecified uses
+          while ( nodes-- ) {
+              node = document.createElement('div');
+              node.id = testnames ? testnames[nodes] : mod + (nodes + 1);
+              div.appendChild(node);
+          }
+      }
+
+      // <style> elements in IE6-9 are considered 'NoScope' elements and therefore will be removed
+      // when injected with innerHTML. To get around this you need to prepend the 'NoScope' element
+      // with a 'scoped' element, in our case the soft-hyphen entity as it won't mess with our measurements.
+      // msdn.microsoft.com/en-us/library/ms533897%28VS.85%29.aspx
+      // Documents served as xml will throw if using &shy; so use xml friendly encoded version. See issue #277
+      style = ['&#173;','<style id="s', mod, '">', rule, '</style>'].join('');
+      div.id = mod;
+      // IE6 will false positive on some tests due to the style element inside the test div somehow interfering offsetHeight, so insert it into body or fakebody.
+      // Opera will act all quirky when injecting elements in documentElement when page is served as xml, needs fakebody too. #270
+      (body ? div : fakeBody).innerHTML += style;
+      fakeBody.appendChild(div);
+      if ( !body ) {
+          //avoid crashing IE8, if background image is used
+          fakeBody.style.background = '';
+          //Safari 5.13/5.1.4 OSX stops loading if ::-webkit-scrollbar is used and scrollbars are visible
+          fakeBody.style.overflow = 'hidden';
+          docOverflow = docElement.style.overflow;
+          docElement.style.overflow = 'hidden';
+          docElement.appendChild(fakeBody);
+      }
+
+      ret = callback(div, rule);
+      // If this is done after page load we don't want to remove the body so check if body exists
+      if ( !body ) {
+          fakeBody.parentNode.removeChild(fakeBody);
+          docElement.style.overflow = docOverflow;
+      } else {
+          div.parentNode.removeChild(div);
+      }
+
+      return !!ret;
+
+    },
+    /*>>teststyles*/
+
+    /*>>mq*/
+    // adapted from matchMedia polyfill
+    // by Scott Jehl and Paul Irish
+    // gist.github.com/786768
+    testMediaQuery = function( mq ) {
+
+      var matchMedia = window.matchMedia || window.msMatchMedia;
+      if ( matchMedia ) {
+        return matchMedia(mq) && matchMedia(mq).matches || false;
+      }
+
+      var bool;
+
+      injectElementWithStyles('@media ' + mq + ' { #' + mod + ' { position: absolute; } }', function( node ) {
+        bool = (window.getComputedStyle ?
+                  getComputedStyle(node, null) :
+                  node.currentStyle)['position'] == 'absolute';
+      });
+
+      return bool;
+
+     },
+     /*>>mq*/
+
+
+    /*>>hasevent*/
+    //
+    // isEventSupported determines if a given element supports the given event
+    // kangax.github.com/iseventsupported/
+    //
+    // The following results are known incorrects:
+    //   Modernizr.hasEvent("webkitTransitionEnd", elem) // false negative
+    //   Modernizr.hasEvent("textInput") // in Webkit. github.com/Modernizr/Modernizr/issues/333
+    //   ...
+    isEventSupported = (function() {
+
+      var TAGNAMES = {
+        'select': 'input', 'change': 'input',
+        'submit': 'form', 'reset': 'form',
+        'error': 'img', 'load': 'img', 'abort': 'img'
+      };
+
+      function isEventSupported( eventName, element ) {
+
+        element = element || document.createElement(TAGNAMES[eventName] || 'div');
+        eventName = 'on' + eventName;
+
+        // When using `setAttribute`, IE skips "unload", WebKit skips "unload" and "resize", whereas `in` "catches" those
+        var isSupported = eventName in element;
+
+        if ( !isSupported ) {
+          // If it has no `setAttribute` (i.e. doesn't implement Node interface), try generic element
+          if ( !element.setAttribute ) {
+            element = document.createElement('div');
+          }
+          if ( element.setAttribute && element.removeAttribute ) {
+            element.setAttribute(eventName, '');
+            isSupported = is(element[eventName], 'function');
+
+            // If property was created, "remove it" (by setting value to `undefined`)
+            if ( !is(element[eventName], 'undefined') ) {
+              element[eventName] = undefined;
+            }
+            element.removeAttribute(eventName);
+          }
+        }
+
+        element = null;
+        return isSupported;
+      }
+      return isEventSupported;
+    })(),
+    /*>>hasevent*/
+
+    // TODO :: Add flag for hasownprop ? didn't last time
+
+    // hasOwnProperty shim by kangax needed for Safari 2.0 support
+    _hasOwnProperty = ({}).hasOwnProperty, hasOwnProp;
+
+    if ( !is(_hasOwnProperty, 'undefined') && !is(_hasOwnProperty.call, 'undefined') ) {
+      hasOwnProp = function (object, property) {
+        return _hasOwnProperty.call(object, property);
+      };
+    }
+    else {
+      hasOwnProp = function (object, property) { /* yes, this can give false positives/negatives, but most of the time we don't care about those */
+        return ((property in object) && is(object.constructor.prototype[property], 'undefined'));
+      };
+    }
+
+    // Adapted from ES5-shim https://github.com/kriskowal/es5-shim/blob/master/es5-shim.js
+    // es5.github.com/#x15.3.4.5
+
+    if (!Function.prototype.bind) {
+      Function.prototype.bind = function bind(that) {
+
+        var target = this;
+
+        if (typeof target != "function") {
+            throw new TypeError();
+        }
+
+        var args = slice.call(arguments, 1),
+            bound = function () {
+
+            if (this instanceof bound) {
+
+              var F = function(){};
+              F.prototype = target.prototype;
+              var self = new F();
+
+              var result = target.apply(
+                  self,
+                  args.concat(slice.call(arguments))
+              );
+              if (Object(result) === result) {
+                  return result;
+              }
+              return self;
+
+            } else {
+
+              return target.apply(
+                  that,
+                  args.concat(slice.call(arguments))
+              );
+
+            }
+
+        };
+
+        return bound;
+      };
+    }
+
+    /**
+     * setCss applies given styles to the Modernizr DOM node.
+     */
+    function setCss( str ) {
+        mStyle.cssText = str;
+    }
+
+    /**
+     * setCssAll extrapolates all vendor-specific css strings.
+     */
+    function setCssAll( str1, str2 ) {
+        return setCss(prefixes.join(str1 + ';') + ( str2 || '' ));
+    }
+
+    /**
+     * is returns a boolean for if typeof obj is exactly type.
+     */
+    function is( obj, type ) {
+        return typeof obj === type;
+    }
+
+    /**
+     * contains returns a boolean for if substr is found within str.
+     */
+    function contains( str, substr ) {
+        return !!~('' + str).indexOf(substr);
+    }
+
+    /*>>testprop*/
+
+    // testProps is a generic CSS / DOM property test.
+
+    // In testing support for a given CSS property, it's legit to test:
+    //    `elem.style[styleName] !== undefined`
+    // If the property is supported it will return an empty string,
+    // if unsupported it will return undefined.
+
+    // We'll take advantage of this quick test and skip setting a style
+    // on our modernizr element, but instead just testing undefined vs
+    // empty string.
+
+    // Because the testing of the CSS property names (with "-", as
+    // opposed to the camelCase DOM properties) is non-portable and
+    // non-standard but works in WebKit and IE (but not Gecko or Opera),
+    // we explicitly reject properties with dashes so that authors
+    // developing in WebKit or IE first don't end up with
+    // browser-specific content by accident.
+
+    function testProps( props, prefixed ) {
+        for ( var i in props ) {
+            var prop = props[i];
+            if ( !contains(prop, "-") && mStyle[prop] !== undefined ) {
+                return prefixed == 'pfx' ? prop : true;
+            }
+        }
+        return false;
+    }
+    /*>>testprop*/
+
+    // TODO :: add testDOMProps
+    /**
+     * testDOMProps is a generic DOM property test; if a browser supports
+     *   a certain property, it won't return undefined for it.
+     */
+    function testDOMProps( props, obj, elem ) {
+        for ( var i in props ) {
+            var item = obj[props[i]];
+            if ( item !== undefined) {
+
+                // return the property name as a string
+                if (elem === false) return props[i];
+
+                // let's bind a function
+                if (is(item, 'function')){
+                  // default to autobind unless override
+                  return item.bind(elem || obj);
+                }
+
+                // return the unbound function or obj or value
+                return item;
+            }
+        }
+        return false;
+    }
+
+    /*>>testallprops*/
+    /**
+     * testPropsAll tests a list of DOM properties we want to check against.
+     *   We specify literally ALL possible (known and/or likely) properties on
+     *   the element including the non-vendor prefixed one, for forward-
+     *   compatibility.
+     */
+    function testPropsAll( prop, prefixed, elem ) {
+
+        var ucProp  = prop.charAt(0).toUpperCase() + prop.slice(1),
+            props   = (prop + ' ' + cssomPrefixes.join(ucProp + ' ') + ucProp).split(' ');
+
+        // did they call .prefixed('boxSizing') or are we just testing a prop?
+        if(is(prefixed, "string") || is(prefixed, "undefined")) {
+          return testProps(props, prefixed);
+
+        // otherwise, they called .prefixed('requestAnimationFrame', window[, elem])
+        } else {
+          props = (prop + ' ' + (domPrefixes).join(ucProp + ' ') + ucProp).split(' ');
+          return testDOMProps(props, prefixed, elem);
+        }
+    }
+    /*>>testallprops*/
+
+
+    /**
+     * Tests
+     * -----
+     */
+
+    // The *new* flexbox
+    // dev.w3.org/csswg/css3-flexbox
+
+    tests['flexbox'] = function() {
+      return testPropsAll('flexWrap');
+    };
+
+    // The *old* flexbox
+    // www.w3.org/TR/2009/WD-css3-flexbox-20090723/
+
+    tests['flexboxlegacy'] = function() {
+        return testPropsAll('boxDirection');
+    };
+
+    // On the S60 and BB Storm, getContext exists, but always returns undefined
+    // so we actually have to call getContext() to verify
+    // github.com/Modernizr/Modernizr/issues/issue/97/
+
+    tests['canvas'] = function() {
+        var elem = document.createElement('canvas');
+        return !!(elem.getContext && elem.getContext('2d'));
+    };
+
+    tests['canvastext'] = function() {
+        return !!(Modernizr['canvas'] && is(document.createElement('canvas').getContext('2d').fillText, 'function'));
+    };
+
+    // webk.it/70117 is tracking a legit WebGL feature detect proposal
+
+    // We do a soft detect which may false positive in order to avoid
+    // an expensive context creation: bugzil.la/732441
+
+    tests['webgl'] = function() {
+        return !!window.WebGLRenderingContext;
+    };
+
+    /*
+     * The Modernizr.touch test only indicates if the browser supports
+     *    touch events, which does not necessarily reflect a touchscreen
+     *    device, as evidenced by tablets running Windows 7 or, alas,
+     *    the Palm Pre / WebOS (touch) phones.
+     *
+     * Additionally, Chrome (desktop) used to lie about its support on this,
+     *    but that has since been rectified: crbug.com/36415
+     *
+     * We also test for Firefox 4 Multitouch Support.
+     *
+     * For more info, see: modernizr.github.com/Modernizr/touch.html
+     */
+
+    tests['touch'] = function() {
+        var bool;
+
+        if(('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch) {
+          bool = true;
+        } else {
+          injectElementWithStyles(['@media (',prefixes.join('touch-enabled),('),mod,')','{#modernizr{top:9px;position:absolute}}'].join(''), function( node ) {
+            bool = node.offsetTop === 9;
+          });
+        }
+
+        return bool;
+    };
+
+
+    // geolocation is often considered a trivial feature detect...
+    // Turns out, it's quite tricky to get right:
+    //
+    // Using !!navigator.geolocation does two things we don't want. It:
+    //   1. Leaks memory in IE9: github.com/Modernizr/Modernizr/issues/513
+    //   2. Disables page caching in WebKit: webk.it/43956
+    //
+    // Meanwhile, in Firefox < 8, an about:config setting could expose
+    // a false positive that would throw an exception: bugzil.la/688158
+
+    tests['geolocation'] = function() {
+        return 'geolocation' in navigator;
+    };
+
+
+    tests['postmessage'] = function() {
+      return !!window.postMessage;
+    };
+
+
+    // Chrome incognito mode used to throw an exception when using openDatabase
+    // It doesn't anymore.
+    tests['websqldatabase'] = function() {
+      return !!window.openDatabase;
+    };
+
+    // Vendors had inconsistent prefixing with the experimental Indexed DB:
+    // - Webkit's implementation is accessible through webkitIndexedDB
+    // - Firefox shipped moz_indexedDB before FF4b9, but since then has been mozIndexedDB
+    // For speed, we don't test the legacy (and beta-only) indexedDB
+    tests['indexedDB'] = function() {
+      return !!testPropsAll("indexedDB", window);
+    };
+
+    // documentMode logic from YUI to filter out IE8 Compat Mode
+    //   which false positives.
+    tests['hashchange'] = function() {
+      return isEventSupported('hashchange', window) && (document.documentMode === undefined || document.documentMode > 7);
+    };
+
+    // Per 1.6:
+    // This used to be Modernizr.historymanagement but the longer
+    // name has been deprecated in favor of a shorter and property-matching one.
+    // The old API is still available in 1.6, but as of 2.0 will throw a warning,
+    // and in the first release thereafter disappear entirely.
+    tests['history'] = function() {
+      return !!(window.history && history.pushState);
+    };
+
+    tests['draganddrop'] = function() {
+        var div = document.createElement('div');
+        return ('draggable' in div) || ('ondragstart' in div && 'ondrop' in div);
+    };
+
+    // FF3.6 was EOL'ed on 4/24/12, but the ESR version of FF10
+    // will be supported until FF19 (2/12/13), at which time, ESR becomes FF17.
+    // FF10 still uses prefixes, so check for it until then.
+    // for more ESR info, see: mozilla.org/en-US/firefox/organizations/faq/
+    tests['websockets'] = function() {
+        return 'WebSocket' in window || 'MozWebSocket' in window;
+    };
+
+
+    // css-tricks.com/rgba-browser-support/
+    tests['rgba'] = function() {
+        // Set an rgba() color and check the returned value
+
+        setCss('background-color:rgba(150,255,150,.5)');
+
+        return contains(mStyle.backgroundColor, 'rgba');
+    };
+
+    tests['hsla'] = function() {
+        // Same as rgba(), in fact, browsers re-map hsla() to rgba() internally,
+        //   except IE9 who retains it as hsla
+
+        setCss('background-color:hsla(120,40%,100%,.5)');
+
+        return contains(mStyle.backgroundColor, 'rgba') || contains(mStyle.backgroundColor, 'hsla');
+    };
+
+    tests['multiplebgs'] = function() {
+        // Setting multiple images AND a color on the background shorthand property
+        //  and then querying the style.background property value for the number of
+        //  occurrences of "url(" is a reliable method for detecting ACTUAL support for this!
+
+        setCss('background:url(https://),url(https://),red url(https://)');
+
+        // If the UA supports multiple backgrounds, there should be three occurrences
+        //   of the string "url(" in the return value for elemStyle.background
+
+        return (/(url\s*\(.*?){3}/).test(mStyle.background);
+    };
+
+
+
+    // this will false positive in Opera Mini
+    //   github.com/Modernizr/Modernizr/issues/396
+
+    tests['backgroundsize'] = function() {
+        return testPropsAll('backgroundSize');
+    };
+
+    tests['borderimage'] = function() {
+        return testPropsAll('borderImage');
+    };
+
+
+    // Super comprehensive table about all the unique implementations of
+    // border-radius: muddledramblings.com/table-of-css3-border-radius-compliance
+
+    tests['borderradius'] = function() {
+        return testPropsAll('borderRadius');
+    };
+
+    // WebOS unfortunately false positives on this test.
+    tests['boxshadow'] = function() {
+        return testPropsAll('boxShadow');
+    };
+
+    // FF3.0 will false positive on this test
+    tests['textshadow'] = function() {
+        return document.createElement('div').style.textShadow === '';
+    };
+
+
+    tests['opacity'] = function() {
+        // Browsers that actually have CSS Opacity implemented have done so
+        //  according to spec, which means their return values are within the
+        //  range of [0.0,1.0] - including the leading zero.
+
+        setCssAll('opacity:.55');
+
+        // The non-literal . in this regex is intentional:
+        //   German Chrome returns this value as 0,55
+        // github.com/Modernizr/Modernizr/issues/#issue/59/comment/516632
+        return (/^0.55$/).test(mStyle.opacity);
+    };
+
+
+    // Note, Android < 4 will pass this test, but can only animate
+    //   a single property at a time
+    //   goo.gl/v3V4Gp
+    tests['cssanimations'] = function() {
+        return testPropsAll('animationName');
+    };
+
+
+    tests['csscolumns'] = function() {
+        return testPropsAll('columnCount');
+    };
+
+
+    tests['cssgradients'] = function() {
+        /**
+         * For CSS Gradients syntax, please see:
+         * webkit.org/blog/175/introducing-css-gradients/
+         * developer.mozilla.org/en/CSS/-moz-linear-gradient
+         * developer.mozilla.org/en/CSS/-moz-radial-gradient
+         * dev.w3.org/csswg/css3-images/#gradients-
+         */
+
+        var str1 = 'background-image:',
+            str2 = 'gradient(linear,left top,right bottom,from(#9f9),to(white));',
+            str3 = 'linear-gradient(left top,#9f9, white);';
+
+        setCss(
+             // legacy webkit syntax (FIXME: remove when syntax not in use anymore)
+              (str1 + '-webkit- '.split(' ').join(str2 + str1) +
+             // standard syntax             // trailing 'background-image:'
+              prefixes.join(str3 + str1)).slice(0, -str1.length)
+        );
+
+        return contains(mStyle.backgroundImage, 'gradient');
+    };
+
+
+    tests['cssreflections'] = function() {
+        return testPropsAll('boxReflect');
+    };
+
+
+    tests['csstransforms'] = function() {
+        return !!testPropsAll('transform');
+    };
+
+
+    tests['csstransforms3d'] = function() {
+
+        var ret = !!testPropsAll('perspective');
+
+        // Webkit's 3D transforms are passed off to the browser's own graphics renderer.
+        //   It works fine in Safari on Leopard and Snow Leopard, but not in Chrome in
+        //   some conditions. As a result, Webkit typically recognizes the syntax but
+        //   will sometimes throw a false positive, thus we must do a more thorough check:
+        if ( ret && 'webkitPerspective' in docElement.style ) {
+
+          // Webkit allows this media query to succeed only if the feature is enabled.
+          // `@media (transform-3d),(-webkit-transform-3d){ ... }`
+          injectElementWithStyles('@media (transform-3d),(-webkit-transform-3d){#modernizr{left:9px;position:absolute;height:3px;}}', function( node, rule ) {
+            ret = node.offsetLeft === 9 && node.offsetHeight === 3;
+          });
+        }
+        return ret;
+    };
+
+
+    tests['csstransitions'] = function() {
+        return testPropsAll('transition');
+    };
+
+
+    /*>>fontface*/
+    // @font-face detection routine by Diego Perini
+    // javascript.nwbox.com/CSSSupport/
+
+    // false positives:
+    //   WebOS github.com/Modernizr/Modernizr/issues/342
+    //   WP7   github.com/Modernizr/Modernizr/issues/538
+    tests['fontface'] = function() {
+        var bool;
+
+        injectElementWithStyles('@font-face {font-family:"font";src:url("https://")}', function( node, rule ) {
+          var style = document.getElementById('smodernizr'),
+              sheet = style.sheet || style.styleSheet,
+              cssText = sheet ? (sheet.cssRules && sheet.cssRules[0] ? sheet.cssRules[0].cssText : sheet.cssText || '') : '';
+
+          bool = /src/i.test(cssText) && cssText.indexOf(rule.split(' ')[0]) === 0;
+        });
+
+        return bool;
+    };
+    /*>>fontface*/
+
+    // CSS generated content detection
+    tests['generatedcontent'] = function() {
+        var bool;
+
+        injectElementWithStyles(['#',mod,'{font:0/0 a}#',mod,':after{content:"',smile,'";visibility:hidden;font:3px/1 a}'].join(''), function( node ) {
+          bool = node.offsetHeight >= 3;
+        });
+
+        return bool;
+    };
+
+
+
+    // These tests evaluate support of the video/audio elements, as well as
+    // testing what types of content they support.
+    //
+    // We're using the Boolean constructor here, so that we can extend the value
+    // e.g.  Modernizr.video     // true
+    //       Modernizr.video.ogg // 'probably'
+    //
+    // Codec values from : github.com/NielsLeenheer/html5test/blob/9106a8/index.html#L845
+    //                     thx to NielsLeenheer and zcorpan
+
+    // Note: in some older browsers, "no" was a return value instead of empty string.
+    //   It was live in FF3.5.0 and 3.5.1, but fixed in 3.5.2
+    //   It was also live in Safari 4.0.0 - 4.0.4, but fixed in 4.0.5
+
+    tests['video'] = function() {
+        var elem = document.createElement('video'),
+            bool = false;
+
+        // IE9 Running on Windows Server SKU can cause an exception to be thrown, bug #224
+        try {
+            if ( bool = !!elem.canPlayType ) {
+                bool      = new Boolean(bool);
+                bool.ogg  = elem.canPlayType('video/ogg; codecs="theora"')      .replace(/^no$/,'');
+
+                // Without QuickTime, this value will be `undefined`. github.com/Modernizr/Modernizr/issues/546
+                bool.h264 = elem.canPlayType('video/mp4; codecs="avc1.42E01E"') .replace(/^no$/,'');
+
+                bool.webm = elem.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/^no$/,'');
+            }
+
+        } catch(e) { }
+
+        return bool;
+    };
+
+    tests['audio'] = function() {
+        var elem = document.createElement('audio'),
+            bool = false;
+
+        try {
+            if ( bool = !!elem.canPlayType ) {
+                bool      = new Boolean(bool);
+                bool.ogg  = elem.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,'');
+                bool.mp3  = elem.canPlayType('audio/mpeg;')               .replace(/^no$/,'');
+
+                // Mimetypes accepted:
+                //   developer.mozilla.org/En/Media_formats_supported_by_the_audio_and_video_elements
+                //   bit.ly/iphoneoscodecs
+                bool.wav  = elem.canPlayType('audio/wav; codecs="1"')     .replace(/^no$/,'');
+                bool.m4a  = ( elem.canPlayType('audio/x-m4a;')            ||
+                              elem.canPlayType('audio/aac;'))             .replace(/^no$/,'');
+            }
+        } catch(e) { }
+
+        return bool;
+    };
+
+
+    // In FF4, if disabled, window.localStorage should === null.
+
+    // Normally, we could not test that directly and need to do a
+    //   `('localStorage' in window) && ` test first because otherwise Firefox will
+    //   throw bugzil.la/365772 if cookies are disabled
+
+    // Also in iOS5 Private Browsing mode, attempting to use localStorage.setItem
+    // will throw the exception:
+    //   QUOTA_EXCEEDED_ERRROR DOM Exception 22.
+    // Peculiarly, getItem and removeItem calls do not throw.
+
+    // Because we are forced to try/catch this, we'll go aggressive.
+
+    // Just FWIW: IE8 Compat mode supports these features completely:
+    //   www.quirksmode.org/dom/html5.html
+    // But IE8 doesn't support either with local files
+
+    tests['localstorage'] = function() {
+        try {
+            localStorage.setItem(mod, mod);
+            localStorage.removeItem(mod);
+            return true;
+        } catch(e) {
+            return false;
+        }
+    };
+
+    tests['sessionstorage'] = function() {
+        try {
+            sessionStorage.setItem(mod, mod);
+            sessionStorage.removeItem(mod);
+            return true;
+        } catch(e) {
+            return false;
+        }
+    };
+
+
+    tests['webworkers'] = function() {
+        return !!window.Worker;
+    };
+
+
+    tests['applicationcache'] = function() {
+        return !!window.applicationCache;
+    };
+
+
+    // Thanks to Erik Dahlstrom
+    tests['svg'] = function() {
+        return !!document.createElementNS && !!document.createElementNS(ns.svg, 'svg').createSVGRect;
+    };
+
+    // specifically for SVG inline in HTML, not within XHTML
+    // test page: paulirish.com/demo/inline-svg
+    tests['inlinesvg'] = function() {
+      var div = document.createElement('div');
+      div.innerHTML = '<svg/>';
+      return (div.firstChild && div.firstChild.namespaceURI) == ns.svg;
+    };
+
+    // SVG SMIL animation
+    tests['smil'] = function() {
+        return !!document.createElementNS && /SVGAnimate/.test(toString.call(document.createElementNS(ns.svg, 'animate')));
+    };
+
+    // This test is only for clip paths in SVG proper, not clip paths on HTML content
+    // demo: srufaculty.sru.edu/david.dailey/svg/newstuff/clipPath4.svg
+
+    // However read the comments to dig into applying SVG clippaths to HTML content here:
+    //   github.com/Modernizr/Modernizr/issues/213#issuecomment-1149491
+    tests['svgclippaths'] = function() {
+        return !!document.createElementNS && /SVGClipPath/.test(toString.call(document.createElementNS(ns.svg, 'clipPath')));
+    };
+
+    /*>>webforms*/
+    // input features and input types go directly onto the ret object, bypassing the tests loop.
+    // Hold this guy to execute in a moment.
+    function webforms() {
+        /*>>input*/
+        // Run through HTML5's new input attributes to see if the UA understands any.
+        // We're using f which is the <input> element created early on
+        // Mike Taylr has created a comprehensive resource for testing these attributes
+        //   when applied to all input types:
+        //   miketaylr.com/code/input-type-attr.html
+        // spec: www.whatwg.org/specs/web-apps/current-work/multipage/the-input-element.html#input-type-attr-summary
+
+        // Only input placeholder is tested while textarea's placeholder is not.
+        // Currently Safari 4 and Opera 11 have support only for the input placeholder
+        // Both tests are available in feature-detects/forms-placeholder.js
+        Modernizr['input'] = (function( props ) {
+            for ( var i = 0, len = props.length; i < len; i++ ) {
+                attrs[ props[i] ] = !!(props[i] in inputElem);
+            }
+            if (attrs.list){
+              // safari false positive's on datalist: webk.it/74252
+              // see also github.com/Modernizr/Modernizr/issues/146
+              attrs.list = !!(document.createElement('datalist') && window.HTMLDataListElement);
+            }
+            return attrs;
+        })('autocomplete autofocus list placeholder max min multiple pattern required step'.split(' '));
+        /*>>input*/
+
+        /*>>inputtypes*/
+        // Run through HTML5's new input types to see if the UA understands any.
+        //   This is put behind the tests runloop because it doesn't return a
+        //   true/false like all the other tests; instead, it returns an object
+        //   containing each input type with its corresponding true/false value
+
+        // Big thanks to @miketaylr for the html5 forms expertise. miketaylr.com/
+        Modernizr['inputtypes'] = (function(props) {
+
+            for ( var i = 0, bool, inputElemType, defaultView, len = props.length; i < len; i++ ) {
+
+                inputElem.setAttribute('type', inputElemType = props[i]);
+                bool = inputElem.type !== 'text';
+
+                // We first check to see if the type we give it sticks..
+                // If the type does, we feed it a textual value, which shouldn't be valid.
+                // If the value doesn't stick, we know there's input sanitization which infers a custom UI
+                if ( bool ) {
+
+                    inputElem.value         = smile;
+                    inputElem.style.cssText = 'position:absolute;visibility:hidden;';
+
+                    if ( /^range$/.test(inputElemType) && inputElem.style.WebkitAppearance !== undefined ) {
+
+                      docElement.appendChild(inputElem);
+                      defaultView = document.defaultView;
+
+                      // Safari 2-4 allows the smiley as a value, despite making a slider
+                      bool =  defaultView.getComputedStyle &&
+                              defaultView.getComputedStyle(inputElem, null).WebkitAppearance !== 'textfield' &&
+                              // Mobile android web browser has false positive, so must
+                              // check the height to see if the widget is actually there.
+                              (inputElem.offsetHeight !== 0);
+
+                      docElement.removeChild(inputElem);
+
+                    } else if ( /^(search|tel)$/.test(inputElemType) ){
+                      // Spec doesn't define any special parsing or detectable UI
+                      //   behaviors so we pass these through as true
+
+                      // Interestingly, opera fails the earlier test, so it doesn't
+                      //  even make it here.
+
+                    } else if ( /^(url|email)$/.test(inputElemType) ) {
+                      // Real url and email support comes with prebaked validation.
+                      bool = inputElem.checkValidity && inputElem.checkValidity() === false;
+
+                    } else {
+                      // If the upgraded input compontent rejects the :) text, we got a winner
+                      bool = inputElem.value != smile;
+                    }
+                }
+
+                inputs[ props[i] ] = !!bool;
+            }
+            return inputs;
+        })('search tel url email datetime date month week time datetime-local number range color'.split(' '));
+        /*>>inputtypes*/
+    }
+    /*>>webforms*/
+
+
+    // End of test definitions
+    // -----------------------
+
+
+
+    // Run through all tests and detect their support in the current UA.
+    // todo: hypothetically we could be doing an array of tests and use a basic loop here.
+    for ( var feature in tests ) {
+        if ( hasOwnProp(tests, feature) ) {
+            // run the test, throw the return value into the Modernizr,
+            //   then based on that boolean, define an appropriate className
+            //   and push it into an array of classes we'll join later.
+            featureName  = feature.toLowerCase();
+            Modernizr[featureName] = tests[feature]();
+
+            classes.push((Modernizr[featureName] ? '' : 'no-') + featureName);
+        }
+    }
+
+    /*>>webforms*/
+    // input tests need to run.
+    Modernizr.input || webforms();
+    /*>>webforms*/
+
+
+    /**
+     * addTest allows the user to define their own feature tests
+     * the result will be added onto the Modernizr object,
+     * as well as an appropriate className set on the html element
+     *
+     * @param feature - String naming the feature
+     * @param test - Function returning true if feature is supported, false if not
+     */
+     Modernizr.addTest = function ( feature, test ) {
+       if ( typeof feature == 'object' ) {
+         for ( var key in feature ) {
+           if ( hasOwnProp( feature, key ) ) {
+             Modernizr.addTest( key, feature[ key ] );
+           }
+         }
+       } else {
+
+         feature = feature.toLowerCase();
+
+         if ( Modernizr[feature] !== undefined ) {
+           // we're going to quit if you're trying to overwrite an existing test
+           // if we were to allow it, we'd do this:
+           //   var re = new RegExp("\\b(no-)?" + feature + "\\b");
+           //   docElement.className = docElement.className.replace( re, '' );
+           // but, no rly, stuff 'em.
+           return Modernizr;
+         }
+
+         test = typeof test == 'function' ? test() : test;
+
+         if (typeof enableClasses !== "undefined" && enableClasses) {
+           docElement.className += ' ' + (test ? '' : 'no-') + feature;
+         }
+         Modernizr[feature] = test;
+
+       }
+
+       return Modernizr; // allow chaining.
+     };
+
+
+    // Reset modElem.cssText to nothing to reduce memory footprint.
+    setCss('');
+    modElem = inputElem = null;
+
+    /*>>shiv*/
+    /**
+     * @preserve HTML5 Shiv prev3.7.1 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
+     */
+    ;(function(window, document) {
+        /*jshint evil:true */
+        /** version */
+        var version = '3.7.0';
+
+        /** Preset options */
+        var options = window.html5 || {};
+
+        /** Used to skip problem elements */
+        var reSkip = /^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i;
+
+        /** Not all elements can be cloned in IE **/
+        var saveClones = /^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i;
+
+        /** Detect whether the browser supports default html5 styles */
+        var supportsHtml5Styles;
+
+        /** Name of the expando, to work with multiple documents or to re-shiv one document */
+        var expando = '_html5shiv';
+
+        /** The id for the the documents expando */
+        var expanID = 0;
+
+        /** Cached data for each document */
+        var expandoData = {};
+
+        /** Detect whether the browser supports unknown elements */
+        var supportsUnknownElements;
+
+        (function() {
+          try {
+            var a = document.createElement('a');
+            a.innerHTML = '<xyz></xyz>';
+            //if the hidden property is implemented we can assume, that the browser supports basic HTML5 Styles
+            supportsHtml5Styles = ('hidden' in a);
+
+            supportsUnknownElements = a.childNodes.length == 1 || (function() {
+              // assign a false positive if unable to shiv
+              (document.createElement)('a');
+              var frag = document.createDocumentFragment();
+              return (
+                typeof frag.cloneNode == 'undefined' ||
+                typeof frag.createDocumentFragment == 'undefined' ||
+                typeof frag.createElement == 'undefined'
+              );
+            }());
+          } catch(e) {
+            // assign a false positive if detection fails => unable to shiv
+            supportsHtml5Styles = true;
+            supportsUnknownElements = true;
+          }
+
+        }());
+
+        /*--------------------------------------------------------------------------*/
+
+        /**
+         * Creates a style sheet with the given CSS text and adds it to the document.
+         * @private
+         * @param {Document} ownerDocument The document.
+         * @param {String} cssText The CSS text.
+         * @returns {StyleSheet} The style element.
+         */
+        function addStyleSheet(ownerDocument, cssText) {
+          var p = ownerDocument.createElement('p'),
+          parent = ownerDocument.getElementsByTagName('head')[0] || ownerDocument.documentElement;
+
+          p.innerHTML = 'x<style>' + cssText + '</style>';
+          return parent.insertBefore(p.lastChild, parent.firstChild);
+        }
+
+        /**
+         * Returns the value of `html5.elements` as an array.
+         * @private
+         * @returns {Array} An array of shived element node names.
+         */
+        function getElements() {
+          var elements = html5.elements;
+          return typeof elements == 'string' ? elements.split(' ') : elements;
+        }
+
+        /**
+         * Returns the data associated to the given document
+         * @private
+         * @param {Document} ownerDocument The document.
+         * @returns {Object} An object of data.
+         */
+        function getExpandoData(ownerDocument) {
+          var data = expandoData[ownerDocument[expando]];
+          if (!data) {
+            data = {};
+            expanID++;
+            ownerDocument[expando] = expanID;
+            expandoData[expanID] = data;
+          }
+          return data;
+        }
+
+        /**
+         * returns a shived element for the given nodeName and document
+         * @memberOf html5
+         * @param {String} nodeName name of the element
+         * @param {Document} ownerDocument The context document.
+         * @returns {Object} The shived element.
+         */
+        function createElement(nodeName, ownerDocument, data){
+          if (!ownerDocument) {
+            ownerDocument = document;
+          }
+          if(supportsUnknownElements){
+            return ownerDocument.createElement(nodeName);
+          }
+          if (!data) {
+            data = getExpandoData(ownerDocument);
+          }
+          var node;
+
+          if (data.cache[nodeName]) {
+            node = data.cache[nodeName].cloneNode();
+          } else if (saveClones.test(nodeName)) {
+            node = (data.cache[nodeName] = data.createElem(nodeName)).cloneNode();
+          } else {
+            node = data.createElem(nodeName);
+          }
+
+          // Avoid adding some elements to fragments in IE < 9 because
+          // * Attributes like `name` or `type` cannot be set/changed once an element
+          //   is inserted into a document/fragment
+          // * Link elements with `src` attributes that are inaccessible, as with
+          //   a 403 response, will cause the tab/window to crash
+          // * Script elements appended to fragments will execute when their `src`
+          //   or `text` property is set
+          return node.canHaveChildren && !reSkip.test(nodeName) && !node.tagUrn ? data.frag.appendChild(node) : node;
+        }
+
+        /**
+         * returns a shived DocumentFragment for the given document
+         * @memberOf html5
+         * @param {Document} ownerDocument The context document.
+         * @returns {Object} The shived DocumentFragment.
+         */
+        function createDocumentFragment(ownerDocument, data){
+          if (!ownerDocument) {
+            ownerDocument = document;
+          }
+          if(supportsUnknownElements){
+            return ownerDocument.createDocumentFragment();
+          }
+          data = data || getExpandoData(ownerDocument);
+          var clone = data.frag.cloneNode(),
+          i = 0,
+          elems = getElements(),
+          l = elems.length;
+          for(;i<l;i++){
+            clone.createElement(elems[i]);
+          }
+          return clone;
+        }
+
+        /**
+         * Shivs the `createElement` and `createDocumentFragment` methods of the document.
+         * @private
+         * @param {Document|DocumentFragment} ownerDocument The document.
+         * @param {Object} data of the document.
+         */
+        function shivMethods(ownerDocument, data) {
+          if (!data.cache) {
+            data.cache = {};
+            data.createElem = ownerDocument.createElement;
+            data.createFrag = ownerDocument.createDocumentFragment;
+            data.frag = data.createFrag();
+          }
+
+
+          ownerDocument.createElement = function(nodeName) {
+            //abort shiv
+            if (!html5.shivMethods) {
+              return data.createElem(nodeName);
+            }
+            return createElement(nodeName, ownerDocument, data);
+          };
+
+          ownerDocument.createDocumentFragment = Function('h,f', 'return function(){' +
+                                                          'var n=f.cloneNode(),c=n.createElement;' +
+                                                          'h.shivMethods&&(' +
+                                                          // unroll the `createElement` calls
+                                                          getElements().join().replace(/[\w\-]+/g, function(nodeName) {
+            data.createElem(nodeName);
+            data.frag.createElement(nodeName);
+            return 'c("' + nodeName + '")';
+          }) +
+            ');return n}'
+                                                         )(html5, data.frag);
+        }
+
+        /*--------------------------------------------------------------------------*/
+
+        /**
+         * Shivs the given document.
+         * @memberOf html5
+         * @param {Document} ownerDocument The document to shiv.
+         * @returns {Document} The shived document.
+         */
+        function shivDocument(ownerDocument) {
+          if (!ownerDocument) {
+            ownerDocument = document;
+          }
+          var data = getExpandoData(ownerDocument);
+
+          if (html5.shivCSS && !supportsHtml5Styles && !data.hasCSS) {
+            data.hasCSS = !!addStyleSheet(ownerDocument,
+                                          // corrects block display not defined in IE6/7/8/9
+                                          'article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}' +
+                                            // adds styling not present in IE6/7/8/9
+                                            'mark{background:#FF0;color:#000}' +
+                                            // hides non-rendered elements
+                                            'template{display:none}'
+                                         );
+          }
+          if (!supportsUnknownElements) {
+            shivMethods(ownerDocument, data);
+          }
+          return ownerDocument;
+        }
+
+        /*--------------------------------------------------------------------------*/
+
+        /**
+         * The `html5` object is exposed so that more elements can be shived and
+         * existing shiving can be detected on iframes.
+         * @type Object
+         * @example
+         *
+         * // options can be changed before the script is included
+         * html5 = { 'elements': 'mark section', 'shivCSS': false, 'shivMethods': false };
+         */
+        var html5 = {
+
+          /**
+           * An array or space separated string of node names of the elements to shiv.
+           * @memberOf html5
+           * @type Array|String
+           */
+          'elements': options.elements || 'abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output progress section summary template time video',
+
+          /**
+           * current version of html5shiv
+           */
+          'version': version,
+
+          /**
+           * A flag to indicate that the HTML5 style sheet should be inserted.
+           * @memberOf html5
+           * @type Boolean
+           */
+          'shivCSS': (options.shivCSS !== false),
+
+          /**
+           * Is equal to true if a browser supports creating unknown/HTML5 elements
+           * @memberOf html5
+           * @type boolean
+           */
+          'supportsUnknownElements': supportsUnknownElements,
+
+          /**
+           * A flag to indicate that the document's `createElement` and `createDocumentFragment`
+           * methods should be overwritten.
+           * @memberOf html5
+           * @type Boolean
+           */
+          'shivMethods': (options.shivMethods !== false),
+
+          /**
+           * A string to describe the type of `html5` object ("default" or "default print").
+           * @memberOf html5
+           * @type String
+           */
+          'type': 'default',
+
+          // shivs the document according to the specified `html5` object options
+          'shivDocument': shivDocument,
+
+          //creates a shived element
+          createElement: createElement,
+
+          //creates a shived documentFragment
+          createDocumentFragment: createDocumentFragment
+        };
+
+        /*--------------------------------------------------------------------------*/
+
+        // expose html5
+        window.html5 = html5;
+
+        // shiv the document
+        shivDocument(document);
+
+    }(this, document));
+    /*>>shiv*/
+
+    // Assign private properties to the return object with prefix
+    Modernizr._version      = version;
+
+    // expose these for the plugin API. Look in the source for how to join() them against your input
+    /*>>prefixes*/
+    Modernizr._prefixes     = prefixes;
+    /*>>prefixes*/
+    /*>>domprefixes*/
+    Modernizr._domPrefixes  = domPrefixes;
+    Modernizr._cssomPrefixes  = cssomPrefixes;
+    /*>>domprefixes*/
+
+    /*>>mq*/
+    // Modernizr.mq tests a given media query, live against the current state of the window
+    // A few important notes:
+    //   * If a browser does not support media queries at all (eg. oldIE) the mq() will always return false
+    //   * A max-width or orientation query will be evaluated against the current state, which may change later.
+    //   * You must specify values. Eg. If you are testing support for the min-width media query use:
+    //       Modernizr.mq('(min-width:0)')
+    // usage:
+    // Modernizr.mq('only screen and (max-width:768)')
+    Modernizr.mq            = testMediaQuery;
+    /*>>mq*/
+
+    /*>>hasevent*/
+    // Modernizr.hasEvent() detects support for a given event, with an optional element to test on
+    // Modernizr.hasEvent('gesturestart', elem)
+    Modernizr.hasEvent      = isEventSupported;
+    /*>>hasevent*/
+
+    /*>>testprop*/
+    // Modernizr.testProp() investigates whether a given style property is recognized
+    // Note that the property names must be provided in the camelCase variant.
+    // Modernizr.testProp('pointerEvents')
+    Modernizr.testProp      = function(prop){
+        return testProps([prop]);
+    };
+    /*>>testprop*/
+
+    /*>>testallprops*/
+    // Modernizr.testAllProps() investigates whether a given style property,
+    //   or any of its vendor-prefixed variants, is recognized
+    // Note that the property names must be provided in the camelCase variant.
+    // Modernizr.testAllProps('boxSizing')
+    Modernizr.testAllProps  = testPropsAll;
+    /*>>testallprops*/
+
+
+    /*>>teststyles*/
+    // Modernizr.testStyles() allows you to add custom styles to the document and test an element afterwards
+    // Modernizr.testStyles('#modernizr { position:absolute }', function(elem, rule){ ... })
+    Modernizr.testStyles    = injectElementWithStyles;
+    /*>>teststyles*/
+
+
+    /*>>prefixed*/
+    // Modernizr.prefixed() returns the prefixed or nonprefixed property name variant of your input
+    // Modernizr.prefixed('boxSizing') // 'MozBoxSizing'
+
+    // Properties must be passed as dom-style camelcase, rather than `box-sizing` hypentated style.
+    // Return values will also be the camelCase variant, if you need to translate that to hypenated style use:
+    //
+    //     str.replace(/([A-Z])/g, function(str,m1){ return '-' + m1.toLowerCase(); }).replace(/^ms-/,'-ms-');
+
+    // If you're trying to ascertain which transition end event to bind to, you might do something like...
+    //
+    //     var transEndEventNames = {
+    //       'WebkitTransition' : 'webkitTransitionEnd',
+    //       'MozTransition'    : 'transitionend',
+    //       'OTransition'      : 'oTransitionEnd',
+    //       'msTransition'     : 'MSTransitionEnd',
+    //       'transition'       : 'transitionend'
+    //     },
+    //     transEndEventName = transEndEventNames[ Modernizr.prefixed('transition') ];
+
+    Modernizr.prefixed      = function(prop, obj, elem){
+      if(!obj) {
+        return testPropsAll(prop, 'pfx');
+      } else {
+        // Testing DOM property e.g. Modernizr.prefixed('requestAnimationFrame', window) // 'mozRequestAnimationFrame'
+        return testPropsAll(prop, obj, elem);
+      }
+    };
+    /*>>prefixed*/
+
+
+    /*>>cssclasses*/
+    // Remove "no-js" class from <html> element, if it exists:
+    docElement.className = docElement.className.replace(/(^|\s)no-js(\s|$)/, '$1$2') +
+
+                            // Add the new classes to the <html> element.
+                            (enableClasses ? ' js ' + classes.join(' ') : '');
+    /*>>cssclasses*/
+
+    return Modernizr;
+
+})(this, this.document);
diff --git a/js/modernizr/modernizr.min.js b/js/modernizr/modernizr.min.js
new file mode 100644 (file)
index 0000000..6d551f1
--- /dev/null
@@ -0,0 +1 @@
+window.Modernizr=function(a,b,c){function d(a){t.cssText=a}function e(a,b){return d(x.join(a+";")+(b||""))}function f(a,b){return typeof a===b}function g(a,b){return!!~(""+a).indexOf(b)}function h(a,b){for(var d in a){var e=a[d];if(!g(e,"-")&&t[e]!==c)return"pfx"!=b||e}return!1}function i(a,b,d){for(var e in a){var g=b[a[e]];if(g!==c)return!1===d?a[e]:f(g,"function")?g.bind(d||b):g}return!1}function j(a,b,c){var d=a.charAt(0).toUpperCase()+a.slice(1),e=(a+" "+z.join(d+" ")+d).split(" ");return f(b,"string")||f(b,"undefined")?h(e,b):(e=(a+" "+A.join(d+" ")+d).split(" "),i(e,b,c))}function k(){o.input=function(c){for(var d=0,e=c.length;d<e;d++)E[c[d]]=!!(c[d]in u);return E.list&&(E.list=!(!b.createElement("datalist")||!a.HTMLDataListElement)),E}("autocomplete autofocus list placeholder max min multiple pattern required step".split(" ")),o.inputtypes=function(a){for(var d,e,f,g=0,h=a.length;g<h;g++)u.setAttribute("type",e=a[g]),d="text"!==u.type,d&&(u.value=v,u.style.cssText="position:absolute;visibility:hidden;",/^range$/.test(e)&&u.style.WebkitAppearance!==c?(q.appendChild(u),f=b.defaultView,d=f.getComputedStyle&&"textfield"!==f.getComputedStyle(u,null).WebkitAppearance&&0!==u.offsetHeight,q.removeChild(u)):/^(search|tel)$/.test(e)||(d=/^(url|email)$/.test(e)?u.checkValidity&&!1===u.checkValidity():u.value!=v)),D[a[g]]=!!d;return D}("search tel url email datetime date month week time datetime-local number range color".split(" "))}var l,m,n="2.8.3",o={},p=!0,q=b.documentElement,r="modernizr",s=b.createElement(r),t=s.style,u=b.createElement("input"),v=":)",w={}.toString,x=" -webkit- -moz- -o- -ms- ".split(" "),y="Webkit Moz O ms",z=y.split(" "),A=y.toLowerCase().split(" "),B={svg:"http://www.w3.org/2000/svg"},C={},D={},E={},F=[],G=F.slice,H=function(a,c,d,e){var f,g,h,i,j=b.createElement("div"),k=b.body,l=k||b.createElement("body");if(parseInt(d,10))for(;d--;)h=b.createElement("div"),h.id=e?e[d]:r+(d+1),j.appendChild(h);return f=["&#173;",'<style id="s',r,'">',a,"</style>"].join(""),j.id=r,(k?j:l).innerHTML+=f,l.appendChild(j),k||(l.style.background="",l.style.overflow="hidden",i=q.style.overflow,q.style.overflow="hidden",q.appendChild(l)),g=c(j,a),k?j.parentNode.removeChild(j):(l.parentNode.removeChild(l),q.style.overflow=i),!!g},I=function(b){var c=a.matchMedia||a.msMatchMedia;if(c)return c(b)&&c(b).matches||!1;var d;return H("@media "+b+" { #"+r+" { position: absolute; } }",function(b){d="absolute"==(a.getComputedStyle?getComputedStyle(b,null):b.currentStyle).position}),d},J=function(){function a(a,e){e=e||b.createElement(d[a]||"div"),a="on"+a;var g=a in e;return g||(e.setAttribute||(e=b.createElement("div")),e.setAttribute&&e.removeAttribute&&(e.setAttribute(a,""),g=f(e[a],"function"),f(e[a],"undefined")||(e[a]=c),e.removeAttribute(a))),e=null,g}var d={select:"input",change:"input",submit:"form",reset:"form",error:"img",load:"img",abort:"img"};return a}(),K={}.hasOwnProperty;m=f(K,"undefined")||f(K.call,"undefined")?function(a,b){return b in a&&f(a.constructor.prototype[b],"undefined")}:function(a,b){return K.call(a,b)},Function.prototype.bind||(Function.prototype.bind=function(a){var b=this;if("function"!=typeof b)throw new TypeError;var c=G.call(arguments,1),d=function(){if(this instanceof d){var e=function(){};e.prototype=b.prototype;var f=new e,g=b.apply(f,c.concat(G.call(arguments)));return Object(g)===g?g:f}return b.apply(a,c.concat(G.call(arguments)))};return d}),C.flexbox=function(){return j("flexWrap")},C.flexboxlegacy=function(){return j("boxDirection")},C.canvas=function(){var a=b.createElement("canvas");return!(!a.getContext||!a.getContext("2d"))},C.canvastext=function(){return!(!o.canvas||!f(b.createElement("canvas").getContext("2d").fillText,"function"))},C.webgl=function(){return!!a.WebGLRenderingContext},C.touch=function(){var c;return"ontouchstart"in a||a.DocumentTouch&&b instanceof DocumentTouch?c=!0:H(["@media (",x.join("touch-enabled),("),r,")","{#modernizr{top:9px;position:absolute}}"].join(""),function(a){c=9===a.offsetTop}),c},C.geolocation=function(){return"geolocation"in navigator},C.postmessage=function(){return!!a.postMessage},C.websqldatabase=function(){return!!a.openDatabase},C.indexedDB=function(){return!!j("indexedDB",a)},C.hashchange=function(){return J("hashchange",a)&&(b.documentMode===c||b.documentMode>7)},C.history=function(){return!(!a.history||!history.pushState)},C.draganddrop=function(){var a=b.createElement("div");return"draggable"in a||"ondragstart"in a&&"ondrop"in a},C.websockets=function(){return"WebSocket"in a||"MozWebSocket"in a},C.rgba=function(){return d("background-color:rgba(150,255,150,.5)"),g(t.backgroundColor,"rgba")},C.hsla=function(){return d("background-color:hsla(120,40%,100%,.5)"),g(t.backgroundColor,"rgba")||g(t.backgroundColor,"hsla")},C.multiplebgs=function(){return d("background:url(https://),url(https://),red url(https://)"),/(url\s*\(.*?){3}/.test(t.background)},C.backgroundsize=function(){return j("backgroundSize")},C.borderimage=function(){return j("borderImage")},C.borderradius=function(){return j("borderRadius")},C.boxshadow=function(){return j("boxShadow")},C.textshadow=function(){return""===b.createElement("div").style.textShadow},C.opacity=function(){return e("opacity:.55"),/^0.55$/.test(t.opacity)},C.cssanimations=function(){return j("animationName")},C.csscolumns=function(){return j("columnCount")},C.cssgradients=function(){var a="background-image:";return d((a+"-webkit- ".split(" ").join("gradient(linear,left top,right bottom,from(#9f9),to(white));"+a)+x.join("linear-gradient(left top,#9f9, white);"+a)).slice(0,-a.length)),g(t.backgroundImage,"gradient")},C.cssreflections=function(){return j("boxReflect")},C.csstransforms=function(){return!!j("transform")},C.csstransforms3d=function(){var a=!!j("perspective");return a&&"webkitPerspective"in q.style&&H("@media (transform-3d),(-webkit-transform-3d){#modernizr{left:9px;position:absolute;height:3px;}}",function(b,c){a=9===b.offsetLeft&&3===b.offsetHeight}),a},C.csstransitions=function(){return j("transition")},C.fontface=function(){var a;return H('@font-face {font-family:"font";src:url("https://")}',function(c,d){var e=b.getElementById("smodernizr"),f=e.sheet||e.styleSheet,g=f?f.cssRules&&f.cssRules[0]?f.cssRules[0].cssText:f.cssText||"":"";a=/src/i.test(g)&&0===g.indexOf(d.split(" ")[0])}),a},C.generatedcontent=function(){var a;return H(["#",r,"{font:0/0 a}#",r,':after{content:"',v,'";visibility:hidden;font:3px/1 a}'].join(""),function(b){a=b.offsetHeight>=3}),a},C.video=function(){var a=b.createElement("video"),c=!1;try{(c=!!a.canPlayType)&&(c=new Boolean(c),c.ogg=a.canPlayType('video/ogg; codecs="theora"').replace(/^no$/,""),c.h264=a.canPlayType('video/mp4; codecs="avc1.42E01E"').replace(/^no$/,""),c.webm=a.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/^no$/,""))}catch(a){}return c},C.audio=function(){var a=b.createElement("audio"),c=!1;try{(c=!!a.canPlayType)&&(c=new Boolean(c),c.ogg=a.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,""),c.mp3=a.canPlayType("audio/mpeg;").replace(/^no$/,""),c.wav=a.canPlayType('audio/wav; codecs="1"').replace(/^no$/,""),c.m4a=(a.canPlayType("audio/x-m4a;")||a.canPlayType("audio/aac;")).replace(/^no$/,""))}catch(a){}return c},C.localstorage=function(){try{return localStorage.setItem(r,r),localStorage.removeItem(r),!0}catch(a){return!1}},C.sessionstorage=function(){try{return sessionStorage.setItem(r,r),sessionStorage.removeItem(r),!0}catch(a){return!1}},C.webworkers=function(){return!!a.Worker},C.applicationcache=function(){return!!a.applicationCache},C.svg=function(){return!!b.createElementNS&&!!b.createElementNS(B.svg,"svg").createSVGRect},C.inlinesvg=function(){var a=b.createElement("div");return a.innerHTML="<svg/>",(a.firstChild&&a.firstChild.namespaceURI)==B.svg},C.smil=function(){return!!b.createElementNS&&/SVGAnimate/.test(w.call(b.createElementNS(B.svg,"animate")))},C.svgclippaths=function(){return!!b.createElementNS&&/SVGClipPath/.test(w.call(b.createElementNS(B.svg,"clipPath")))};for(var L in C)m(C,L)&&(l=L.toLowerCase(),o[l]=C[L](),F.push((o[l]?"":"no-")+l));return o.input||k(),o.addTest=function(a,b){if("object"==typeof a)for(var d in a)m(a,d)&&o.addTest(d,a[d]);else{if(a=a.toLowerCase(),o[a]!==c)return o;b="function"==typeof b?b():b,void 0!==p&&p&&(q.className+=" "+(b?"":"no-")+a),o[a]=b}return o},d(""),s=u=null,function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x<style>"+b+"</style>",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=s.elements;return"string"==typeof a?a.split(" "):a}function e(a){var b=r[a[p]];return b||(b={},q++,a[p]=q,r[q]=b),b}function f(a,c,d){if(c||(c=b),k)return c.createElement(a);d||(d=e(c));var f;return f=d.cache[a]?d.cache[a].cloneNode():o.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!f.canHaveChildren||n.test(a)||f.tagUrn?f:d.frag.appendChild(f)}function g(a,c){if(a||(a=b),k)return a.createDocumentFragment();c=c||e(a);for(var f=c.frag.cloneNode(),g=0,h=d(),i=h.length;g<i;g++)f.createElement(h[g]);return f}function h(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return s.shivMethods?f(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(s,b.frag)}function i(a){a||(a=b);var d=e(a);return!s.shivCSS||j||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),k||h(a,d),a}var j,k,l="3.7.0",m=a.html5||{},n=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,o=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,p="_html5shiv",q=0,r={};!function(){try{var a=b.createElement("a");a.innerHTML="<xyz></xyz>",j="hidden"in a,k=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return void 0===a.cloneNode||void 0===a.createDocumentFragment||void 0===a.createElement}()}catch(a){j=!0,k=!0}}();var s={elements:m.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output progress section summary template time video",version:l,shivCSS:!1!==m.shivCSS,supportsUnknownElements:k,shivMethods:!1!==m.shivMethods,type:"default",shivDocument:i,createElement:f,createDocumentFragment:g};a.html5=s,i(b)}(this,b),o._version=n,o._prefixes=x,o._domPrefixes=A,o._cssomPrefixes=z,o.mq=I,o.hasEvent=J,o.testProp=function(a){return h([a])},o.testAllProps=j,o.testStyles=H,o.prefixed=function(a,b,c){return b?j(a,b,c):j(a,"pfx")},q.className=q.className.replace(/(^|\s)no-js(\s|$)/,"$1$2")+(p?" js "+F.join(" "):""),o}(this,this.document);
\ No newline at end of file
diff --git a/js/modernizr/test/caniuse_files/ga.js b/js/modernizr/test/caniuse_files/ga.js
new file mode 100644 (file)
index 0000000..76a01b0
--- /dev/null
@@ -0,0 +1,43 @@
+(function(){var k=void 0,aa=encodeURIComponent,l=String,o=Math,ba="push",ca="cookie",p="charAt",q="indexOf",da="getTime",r="toString",t="window",v="length",w="document",x="split",y="location",ea="protocol",fa="href",z="substring",A="join",C="toLowerCase";var ga="_gat",ha="_gaq",ia="4.9.4",ja="_gaUserPrefs",ka="ioo",D="&",E="=",F="__utma=",H="__utmb=",la="__utmc=",ma="__utmk=",I="__utmv=",J="__utmz=",na="__utmx=",oa="GASO=";var pa=function(){var d=this,f=[],b="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";d.set=function(b){f[b]=!0};d.Sc=function(){for(var d=[],e=0;e<f[v];e++)f[e]&&(d[o.floor(e/6)]^=1<<e%6);for(e=0;e<d[v];e++)d[e]=b[p](d[e]||0);return d[A]("")+"~"}},qa=new pa;function K(d){qa.set(d)};var ra=function(d,f){var b=this;b.window=d;b.document=f;b.setTimeout=function(b,e){setTimeout(b,e)};b.Jb=function(b){return navigator.userAgent[q](b)>=0};b.Xc=function(){return b.Jb("Firefox")&&![].reduce};b.Vc=function(){return L[t][ja]};b.Gc=function(){return L[t].external};b.Hc=function(){return L[t].performance||L[t].webkitPerformance};b.Ic=function(){return L[t].top==L[t]};b.Ya=function(b){var e=L[t]&&L[t].gaGlobal;if(b&&!e)e={},L[t].gaGlobal=e;return e};b.ec=function(b){L[w][y].href=b};b.qb=
+function(d){if(!d||!b.Jb("Firefox"))return d;for(var d=d.replace(/\n|\r/g," "),e=0,f=d[v];e<f;++e){var g=d.charCodeAt(e)&255;if(g==10||g==13)d=d[z](0,e)+"?"+d[z](e+1)}return d}},L=new ra(window,document);var sa=function(d){return function(f,b,h){d[f]=function(){K(b);return h.apply(d,arguments)};return h}},ta=function(d,f,b,h){d.addEventListener?d.addEventListener(f,b,!!h):d.attachEvent&&d.attachEvent("on"+f,b)},ua=function(d){return Object.prototype[r].call(Object(d))=="[object Array]"},M=function(d){return k==d||"-"==d||""==d},N=function(d,f,b){var h="-",e;!M(d)&&!M(f)&&!M(b)&&(e=d[q](f),e>-1&&(b=d[q](b,e),b<0&&(b=d[v]),h=d[z](e+f[q](E)+1,b)));return h},xa=function(d){var f=!1,b=0,h,e;if(!M(d)){f=
+!0;for(h=0;h<d[v];h++)e=d[p](h),b+="."==e?1:0,f=f&&b<=1&&(0==h&&"-"==e||".0123456789"[q](e)>-1)}return f},P=function(d,f){var b=aa;return b instanceof Function?f?encodeURI(d):b(d):(K(68),escape(d))},Q=function(d,f){var b=decodeURIComponent,h,d=d[x]("+")[A](" ");if(b instanceof Function)try{h=f?decodeURI(d):b(d)}catch(e){K(17),h=unescape(d)}else K(68),h=unescape(d);return h},R=function(d,f){return d[q](f)>-1};
+function ya(d){if(!d||""==d)return"";for(;d[p](0)[v]>0&&" \n\r\t"[q](d[p](0))>-1;)d=d[z](1);for(;d[p](d[v]-1)[v]>0&&" \n\r\t"[q](d[p](d[v]-1))>-1;)d=d[z](0,d[v]-1);return d}var T=function(d,f){d[ba]||K(94);d[d[v]]=f},za=function(d){var f=1,b=0,h;if(!M(d)){f=0;for(h=d[v]-1;h>=0;h--)b=d.charCodeAt(h),f=(f<<6&268435455)+b+(b<<14),b=f&266338304,f=b!=0?f^b>>21:f}return f},Aa=function(){return o.round(o.random()*2147483647)},Ba=function(){};var Ca=function(d,f){this.ib=d;this.jb=f},Da=function(){function d(b){for(var d=[],b=b[x](","),e,f=0;f<b[v];f++)e=b[f][x](":"),d[ba](new Ca(e[0],e[1]));return d}var f=this;f.Ca="utm_campaign";f.Da="utm_content";f.Ea="utm_id";f.Fa="utm_medium";f.Ga="utm_nooverride";f.Ha="utm_source";f.Ia="utm_term";f.Ja="gclid";f.vc="dclid";f.U=0;f.w=0;f.La=15768E6;f.Ma=18E5;f.s=63072E6;f.V=[];f.W=[];f.wc="cse";f.xc="q";f.Ta=50;f.J=d("daum:q,eniro:search_word,naver:query,pchome:q,images.google:q,google:q,yahoo:p,yahoo:q,msn:q,bing:q,aol:query,aol:encquery,aol:q,lycos:query,ask:q,altavista:q,netscape:query,cnn:query,about:terms,mamma:q,alltheweb:q,voila:rdata,virgilio:qs,live:q,baidu:wd,alice:qs,yandex:text,najdi:q,mama:query,seznam:q,search:q,wp:szukaj,onet:qt,szukacz:q,yam:k,kvasir:q,sesam:q,ozu:q,terra:query,mynet:q,ekolay:q,rambler:query,rambler:words");
+f.f="/";f.L=100;f.ga="/__utm.gif";f.la=1;f.ma=1;f.u="|";f.ka=1;f.Ka=1;f.Ua=1;f.b="auto";f.B=1;f.Wb=10;f.zc=10;f.Ac=0.2;f.o=k};var Ea=function(d){function f(a,c,b,j){var i="",d=0,i=N(a,"2"+c,";");if(!M(i)){a=i[q]("^"+b+".");if(a<0)return["",0];i=i[z](a+b[v]+2);i[q]("^")>0&&(i=i[x]("^")[0]);b=i[x](":");i=b[1];d=parseInt(b[0],10);!j&&d<e.m&&(i="")}M(i)&&(i="");return[i,d]}function b(a,c){return"^"+[[c,a[1]][A]("."),a[0]][A](":")}function h(a){var c=new Date,a=new Date(c[da]()+a);return"expires="+a.toGMTString()+"; "}var e=this,m=d;e.m=(new Date)[da]();var g=[F,H,la,J,I,na,oa];e.g=function(){var a=L[w][ca];return m.o?e.Nc(a,
+m.o):a};e.Nc=function(a,c){for(var b=[],j,i=0;i<g[v];i++)j=f(a,g[i],c)[0],M(j)||(b[b[v]]=g[i]+j+";");return b[A]("")};e.l=function(a,c,b){var j=b>0?h(b):"";m.o&&(c=e.Oc(L[w][ca],a,m.o,c,b),a="2"+a,j=b>0?h(m.s):"");a+=c;a=L.qb(a);a[v]>2E3&&(K(69),a=a[z](0,2E3));j=a+"; path="+m.f+"; "+j+e.hb();if(!V.pb())L[w].cookie=j};e.Oc=function(a,c,d,j,i){var g="",i=i||m.s,j=b([j,e.m+i*1],d),g=N(a,"2"+c,";");if(!M(g))return a=b(f(a,c,d,!0),d),g=g[x](a)[A](""),g=j+g;return j};e.hb=function(){return M(m.b)?"":"domain="+
+m.b+";"}};var Fa=function(d){function f(a){a=ua(a)?a[A]("."):"";return M(a)?"-":a}function b(a,c){var n=[],b;if(!M(a)&&(n=a[x]("."),c))for(b=0;b<n[v];b++)xa(n[b])||(n[b]="-");return n}function h(a,c,n){var b=i.I,j,d;for(j=0;j<b[v];j++)d=b[j][0],d+=M(c)?c:c+b[j][4],b[j][2](N(a,d,n))}var e,m,g,a,c,u,j,i=this,s,n=d;i.i=new Ea(d);i.Ba=function(){return k==s||s==i.K()};i.g=function(){return i.i.g()};i.ea=function(){return c?c:"-"};i.Pa=function(a){c=a};i.fa=function(a){s=xa(a)?a*1:"-"};i.da=function(){return f(u)};
+i.X=function(a){u=b(a)};i.yc=function(){i.i.l(I,"",-1)};i.Rb=function(){return s?s:"-"};i.hb=function(){return M(n.b)?"":"domain="+n.b+";"};i.ba=function(){return f(e)};i.Na=function(a){e=b(a,1)};i.z=function(){return f(m)};i.$=function(a){m=b(a,1)};i.ca=function(){return f(g)};i.Oa=function(a){g=b(a,1)};i.qa=function(){return f(a)};i.ra=function(c){a=b(c);for(c=0;c<a[v];c++)c<4&&!xa(a[c])&&(a[c]="-")};i.Fc=function(){return j};i.Dc=function(a){j=a};i.Qb=function(){e=[];m=[];g=[];a=[];c=k;u=[];s=
+k};i.K=function(){for(var a="",c=0;c<i.I[v];c++)a+=i.I[c][1]();return za(a)};i.Z=function(a){var c=i.g(),n=!1;c&&(h(c,a,";"),i.fa(l(i.K())),n=!0);return n};i.Sb=function(a){h(a,"",D);i.fa(N(a,ma,D))};i.Tb=function(){var a=i.I,c=[],n;for(n=0;n<a[v];n++)T(c,a[n][0]+a[n][1]());T(c,ma+i.K());return c[A](D)};i.Ub=function(a,c){var b=i.I,j=n.f;i.Z(a);n.f=c;for(var d=0;d<b[v];d++)if(!M(b[d][1]()))b[d][3]();n.f=j};i.Qa=function(){i.i.l(F,i.ba(),n.s)};i.aa=function(){i.i.l(H,i.z(),n.Ma)};i.Ra=function(){i.i.l(la,
+i.ca(),0)};i.sa=function(){i.i.l(J,i.qa(),n.La)};i.Sa=function(){i.i.l(na,i.ea(),n.s)};i.Y=function(){i.i.l(I,i.da(),n.s)};i.Ec=function(){i.i.l(oa,i.Fc(),0)};i.I=[[F,i.ba,i.Na,i.Qa,"."],[H,i.z,i.$,i.aa,""],[la,i.ca,i.Oa,i.Ra,""],[na,i.ea,i.Pa,i.Sa,""],[J,i.qa,i.ra,i.sa,"."],[I,i.da,i.X,i.Y,"."]]};var Ga="https:"==L[w][y][ea]?"https://ssl.google-analytics.com/":"http://www.google-analytics.com/",Ha=Ga+"p/__utm.gif",Ja=function(){var d=this;d.Bb=function(f,b,h,e,m){b[v]<=2036||m?d.Aa(f+"?"+b,e):b[v]<=8192?L.Xc()?d.Aa(f+"?"+h+"&err=ff2post&len="+b[v],e):d.fd(b,e):d.Aa(f+"?"+h+"&err=len&max=8192&len="+b[v],e)};d.Aa=function(d,b){var h=new Image(1,1);h.src=d;h.onload=function(){h.onload=null;(b||Ba)()}};d.fd=function(f,b){d.ed(f,b)||d.Ob(f,b)};d.ed=function(d,b){var h,e=L[t].XDomainRequest;if(e)h=
+new e,h.open("POST",Ha);else if(e=L[t].XMLHttpRequest)e=new e,"withCredentials"in e&&(h=e,h.open("POST",Ha,!0),h.setRequestHeader("Content-Type","text/plain"));if(h)return h.onreadystatechange=function(){h.readyState==4&&(b&&b(),h=null)},h.send(d),!0;return!1};d.Ob=function(f,b){var h=L[w];if(h.body){f=aa(f);try{var e=h.createElement('<iframe name="'+f+'"></iframe>')}catch(m){e=h.createElement("iframe"),e.name=f}e.height="0";e.width="0";e.style.display="none";e.style.visibility="hidden";var g=h[y],
+g=g[ea]+"//"+g.host+"/favicon.ico",g=Ga+"u/post_iframe.html#"+aa(g),a=function(){e.src="";e.parentNode&&e.parentNode.removeChild(e)};ta(L[t],"beforeunload",a);var c=!1,u=0,j=function(){if(!c){try{if(u>9||e.contentWindow[y].host==h[y].host){c=!0;a();var d=L[t],g="beforeunload",n=a;d.removeEventListener?d.removeEventListener(g,n,!1):d.detachEvent&&d.detachEvent("on"+g,n);b&&b();return}}catch(f){}u++;L.setTimeout(j,200)}};ta(e,"load",j);h.body.appendChild(e);e.src=g}else L.setTimeout(function(){d.Ob(f,
+b)},100)}};var Ka=function(d){var f=this,b=d,h=new Fa(b),e=null,m=!V.pb(),g=function(){};f.Uc=function(){return"https:"==L[w][y][ea]?"https://ssl.google-analytics.com/__utm.gif":"http://www.google-analytics.com/__utm.gif"};f.A=function(a,c,d,j,i,s){e||(e=new Ja);var n=b.B,O=L[w][y];h.Z(d);var B=h.z()[x](".");if(B[1]<500||j){if(i){var S=(new Date)[da](),X;X=(S-B[3])*(b.Ac/1E3);X>=1&&(B[2]=o.min(o.floor(B[2]*1+X),b.zc),B[3]=S)}if(j||!i||B[2]>=1){!j&&i&&(B[2]=B[2]*1-1);j=B[1]*1+1;B[1]=j;i="utmwv="+ia;S="&utms="+
+j;X="&utmn="+Aa();j=i+"e"+S+X;a=i+S+X+(M(O.hostname)?"":"&utmhn="+P(O.hostname))+(b.L==100?"":"&utmsp="+P(b.L))+a;if(0==n||2==n)O=2==n?g:s||g,m&&e.Bb(b.ga,a,j,O,!0);if(1==n||2==n)c="&utmac="+c,j+=c,a+=c+"&utmcc="+f.Tc(d),V.Ab&&(d="&aip=1",j+=d,a+=d),a+="&utmu="+qa.Sc(),m&&e.Bb(f.Uc(),a,j,s)}}h.$(B[A]("."));h.aa()};f.Tc=function(a){for(var c=[],b=[F,J,I,na],d=h.g(),i,g=0;g<b[v];g++)if(i=N(d,b[g]+a,";"),!M(i)){if(b[g]==I){i=i[x](a+".")[1][x]("|")[0];if(M(i))continue;i=a+"."+i}T(c,b[g]+i+";")}return P(c[A]("+"))}};var W=function(){var d=this;d.N=[];d.Va=function(f){for(var b,h=d.N,e=0;e<h[v];e++)b=f==h[e].q?h[e]:b;return b};d.Xb=function(f,b,h,e,m,g,a,c){var u=d.Va(f);k==u?(u=new W.Wc(f,b,h,e,m,g,a,c),T(d.N,u)):(u.tb=b,u.zb=h,u.yb=e,u.wb=m,u.ub=g,u.xb=a,u.vb=c);return u}};W.Qc=function(d,f,b,h,e,m){var g=this;g.Fb=d;g.va=f;g.n=b;g.Cb=h;g.Db=e;g.Eb=m;g.ha=function(){return"&"+["utmt=item","tid="+P(g.Fb),"ipc="+P(g.va),"ipn="+P(g.n),"iva="+P(g.Cb),"ipr="+P(g.Db),"iqt="+P(g.Eb)][A]("&utm")}};
+W.Wc=function(d,f,b,h,e,m,g,a){var c=this;c.q=d;c.tb=f;c.zb=b;c.yb=h;c.wb=e;c.ub=m;c.xb=g;c.vb=a;c.M=[];c.Vb=function(a,b,d,g,n){var e=c.Rc(a),f=c.q;k==e?T(c.M,new W.Qc(f,a,b,d,g,n)):(e.Fb=f,e.va=a,e.n=b,e.Cb=d,e.Db=g,e.Eb=n)};c.Rc=function(a){for(var b,d=c.M,g=0;g<d[v];g++)b=a==d[g].va?d[g]:b;return b};c.ha=function(){return"&"+["utmt=tran","id="+P(c.q),"st="+P(c.tb),"to="+P(c.zb),"tx="+P(c.yb),"sp="+P(c.wb),"ci="+P(c.ub),"rg="+P(c.xb),"co="+P(c.vb)][A]("&utmt")}};var La=function(d){function f(){var b,a,c;a="ShockwaveFlash";var d="$version",j=L[t].navigator;if((j=j?j.plugins:k)&&j[v]>0)for(b=0;b<j[v]&&!c;b++)a=j[b],R(a.name,"Shockwave Flash")&&(c=a.description[x]("Shockwave Flash ")[1]);else{a=a+"."+a;try{b=new ActiveXObject(a+".7"),c=b.GetVariable(d)}catch(e){}if(!c)try{b=new ActiveXObject(a+".6"),c="WIN 6,0,21,0",b.we="always",c=b.GetVariable(d)}catch(f){}if(!c)try{b=new ActiveXObject(a),c=b.GetVariable(d)}catch(n){}c&&(c=c[x](" ")[1][x](","),c=c[0]+"."+
+c[1]+" r"+c[2])}return c?c:h}var b=this,h="-",e=L[t].screen,m=L[t].navigator;b.Nb=e?e.width+"x"+e.height:h;b.Mb=e?e.colorDepth+"-bit":h;b.cd=P(L[w].characterSet?L[w].characterSet:L[w].charset?L[w].charset:h);b.Lb=(m&&m.language?m.language:m&&m.browserLanguage?m.browserLanguage:h)[C]();b.Kb=m&&m.javaEnabled()?1:0;b.dd=d?f():h;b.dc=function(){return D+"utm"+["cs="+P(b.cd),"sr="+b.Nb,"sc="+b.Mb,"ul="+b.Lb,"je="+b.Kb,"fl="+P(b.dd)][A]("&utm")};b.cc=function(){for(var d=L[t].navigator,a=L[t].history[v],
+d=d.appName+d.version+b.Lb+d.platform+d.userAgent+b.Kb+b.Nb+b.Mb+(L[w][ca]?L[w][ca]:"")+(L[w].referrer?L[w].referrer:""),c=d[v];a>0;)d+=a--^c++;return za(d)}};var Z=function(d,f,b,h){function e(a){var c="",c=a[x]("://")[1][C]();R(c,"/")&&(c=c[x]("/")[0]);return c}var m=h,g=this;g.a=d;g.ob=f;g.m=b;g.mb=function(a){var c=g.ua();return new Z.v(N(a,m.Ea+E,D),N(a,m.Ha+E,D),N(a,m.Ja+E,D),g.R(a,m.Ca,"(not set)"),g.R(a,m.Fa,"(not set)"),g.R(a,m.Ia,c&&!M(c.G)?Q(c.G):k),g.R(a,m.Da,k),N(a,m.vc+E,D))};g.nb=function(a){var c=e(a),b;b=a;var d="";b=b[x]("://")[1][C]();R(b,"/")&&(b=b[x]("/")[1],R(b,"?")&&(d=b[x]("?")[0]));b=d;if(R(c,"google")&&(a=a[x]("?")[A](D),R(a,D+
+m.xc+E)&&b==m.wc))return!0;return!1};g.ua=function(){var a,c=g.ob,b,d=m.J;if(!M(c)&&"0"!=c&&R(c,"://")&&!g.nb(c)){a=e(c);for(var i=0;i<d[v];i++)if(b=d[i],R(a,b.ib[C]())&&(c=c[x]("?")[A](D),R(c,D+b.jb+E)))return a=c[x](D+b.jb+E)[1],R(a,D)&&(a=a[x](D)[0]),new Z.v(k,b.ib,k,"(organic)","organic",a,k,k)}};g.R=function(a,c,b){a=N(a,c+E,D);return b=!M(a)?Q(a):!M(b)?b:"-"};g.Bc=function(a){var c=m.V,b=!1;if(a&&"organic"==a.P)for(var a=Q(a.G)[C](),d=0;d<c[v];d++)b=b||c[d][C]()==a;return b};g.lb=function(){var a=
+"",c="",a=g.ob;if(!M(a)&&"0"!=a&&R(a,"://")&&!g.nb(a))return a=a[x]("://")[1],R(a,"/")&&(c=a[z](a[q]("/")),c=c[x]("?")[0],a=a[x]("/")[0][C]()),0==a[q]("www.")&&(a=a[z](4)),new Z.v(k,a,k,"(referral)","referral",k,c,k)};g.kb=function(a){var c="";m.U&&(c=a&&a.hash?a[fa][z](a[fa][q]("#")):"",c=""!=c?c+D:c);c+=a.search;return c};g.ta=function(){return new Z.v(k,"(direct)",k,"(direct)","(none)",k,k,k)};g.Cc=function(a){var c=!1,b=m.W;if(a&&"referral"==a.P)for(var a=P(a.Q)[C](),d=0;d<b[v];d++)c=c||R(a,b[d][C]());
+return c};g.h=function(a){return k!=a&&a.fb()};g.te=function(a){var a=N(a,J+g.a+".",";"),c=a[x]("."),a=new Z.v;a.gb(c.slice(4)[A]("."));if(!g.h(a))return!0;c=L[w][y];c=g.kb(c);c=g.mb(c);g.h(c)||(c=g.ua(),g.h(c)||(c=g.lb()));return g.h(c)&&a.H()[C]()!=c.H()[C]()};g.Pb=function(a,c){if(m.Ka){var b="",d="-",e,f=0,n,h,B=g.a;if(a){h=a.g();b=g.kb(L[w][y]);if(m.w&&a.Ba()&&(d=Q(a.qa()),!M(d)&&!R(d,";"))){a.ra(d);a.sa();return}d=N(h,J+B+".",";");e=g.mb(b);if(g.h(e)&&(b=N(b,m.Ga+E,D),"1"==b&&!M(d)))return;
+if(!g.h(e)){e=g.ua();b=g.Bc(e);if(!M(d)&&b)return;b&&(e=g.ta())}if(!g.h(e)&&c){e=g.lb();b=g.Cc(e);if(!M(d)&&b)return;b&&(e=g.ta())}g.h(e)||M(d)&&c&&(e=g.ta());if(g.h(e)&&(M(d)||(f=d[x]("."),n=new Z.v,n.gb(f.slice(4)[A](".")),n=n.H()[C]()==e.H()[C](),f=f[3]*1),!n||c))h=N(h,F+B+".",";"),n=h.lastIndexOf("."),h=n>9?h[z](n+1)*1:0,f++,h=0==h?1:h,a.ra([B,g.m,h,f,e.H()][A](".")),a.sa()}}}};
+Z.v=function(d,f,b,h,e,m,g,a){var c=this;c.q=d;c.Q=f;c.ya=b;c.n=h;c.P=e;c.G=m;c.Gb=g;c.xa=a;c.H=function(){var a=[],b=[["cid",c.q],["csr",c.Q],["gclid",c.ya],["ccn",c.n],["cmd",c.P],["ctr",c.G],["cct",c.Gb],["dclid",c.xa]],d,e;if(c.fb())for(d=0;d<b[v];d++)M(b[d][1])||(e=b[d][1][x]("+")[A]("%20"),e=e[x](" ")[A]("%20"),T(a,"utm"+b[d][0]+E+e));return L.qb(a[A]("|"))};c.fb=function(){return!(M(c.q)&&M(c.Q)&&M(c.ya)&&M(c.xa))};c.gb=function(a){var b=function(b){return Q(N(a,"utm"+b+E,"|"))};c.q=b("cid");
+c.Q=b("csr");c.ya=b("gclid");c.n=b("ccn");c.P=b("cmd");c.G=b("ctr");c.Gb=b("cct");c.xa=b("dclid")}};var Ma=function(d,f,b,h){var e=this,m=f,g=E,a=d,c=h;e.S=b;e.wa="";e.r={};e.$b=function(){var a;a=N(e.S.g(),I+m+".",";")[x](m+".")[1];if(!M(a)){a=a[x]("|");var b=e.r,c=a[1],d;if(!M(c))for(var c=c[x](","),n=0;n<c[v];n++)d=c[n],M(d)||(d=d[x](g),d[v]==4&&(b[d[0]]=[Q(d[1]),Q(d[2]),1]));e.wa=Q(a[0]);e.T()}};e.T=function(){e.Pc();var a=P(e.wa),b,c,d="";for(b in e.r)(c=e.r[b])&&1===c[2]&&(d+=b+g+P(c[0])+g+P(c[1])+g+1+",");M(d)||(a+="|"+d);M(a)?e.S.yc():(e.S.X(m+"."+a),e.S.Y())};e.bc=function(a){e.wa=a;e.T()};
+e.ac=function(b,c,d,g){1!=g&&2!=g&&3!=g&&(g=3);var n=!1;if(c&&d&&b>0&&b<=a.Ta){var f=P(c),h=P(d);f[v]+h[v]<=64&&(e.r[b]=[c,d,g],e.T(),n=!0)}return n};e.Zb=function(a){if((a=e.r[a])&&1===a[2])return a[1]};e.Yb=function(a){var b=e.r;b[a]&&(delete b[a],e.T())};e.Pc=function(){c.t(8);c.t(9);c.t(11);var a=e.r,b,d;for(d in a)if(b=a[d])c.j(8,d,b[0]),c.j(9,d,b[1]),(b=b[2])&&3!=b&&c.j(11,d,""+b)}};var Na=function(){function d(a,b,c,d){k==g[a]&&(g[a]={});k==g[a][b]&&(g[a][b]=[]);g[a][b][c]=d}function f(a,b,c){if(k!=g[a]&&k!=g[a][b])return g[a][b][c]}function b(a,b){if(k!=g[a]&&k!=g[a][b]){g[a][b]=k;var c=!0,d;for(d=0;d<u[v];d++)if(k!=g[a][u[d]]){c=!1;break}c&&(g[a]=k)}}function h(a){var b="",c=!1,d,e;for(d=0;d<u[v];d++)if(e=a[u[d]],k!=e){c&&(b+=u[d]);for(var c=[],g=k,f=k,f=0;f<e[v];f++)if(k!=e[f]){g="";f!=S&&k==e[f-1]&&(g+=f[r]()+n);var h;h=e[f];for(var O="",m=k,U=k,wa=k,m=0;m<h[v];m++)U=h[p](m),
+wa=B[U],O+=k!=wa?wa:U;h=O;g+=h;T(c,g)}e=j+c[A](s)+i;b+=e;c=!1}else c=!0;return b}var e=this,m=sa(e),g={},a="k",c="v",u=[a,c],j="(",i=")",s="*",n="!",O="'",B={};B[O]="'0";B[i]="'1";B[s]="'2";B[n]="'3";var S=1;e.Yc=function(a){return k!=g[a]};e.C=function(){var a="",b;for(b in g)k!=g[b]&&(a+=b[r]()+h(g[b]));return a};e.hc=function(a){if(a==k)return e.C();var b=a.C(),c;for(c in g)k!=g[c]&&!a.Yc(c)&&(b+=c[r]()+h(g[c]));return b};e.j=m("_setKey",89,function(b,c,n){if(typeof n!="string")return!1;d(b,a,
+c,n);return!0});e.ja=m("_setValue",90,function(a,b,n){if(typeof n!="number"&&(k==Number||!(n instanceof Number))||o.round(n)!=n||n==NaN||n==Infinity)return!1;d(a,c,b,n[r]());return!0});e.fc=m("_getKey",87,function(b,c){return f(b,a,c)});e.gc=m("_getValue",88,function(a,b){return f(a,c,b)});e.t=m("_clearKey",85,function(c){b(c,a)});e.ia=m("_clearValue",86,function(a){b(a,c)})};var Oa=function(d,f){var b=this,h=sa(b);b.ze=f;b.gd=d;b.Za=h("_trackEvent",91,function(d,h,g){return f.Za(b.gd,d,h,g)})};var Pa=function(d,f){var b=this,h=L.Gc(),e=L.Hc(),m=10;b.rb=new Na;b.Kc=function(){var b,a="timing",c="onloadT";h&&h[c]!=k&&h.isValidLoadTime?b=h[c]:e&&e[a]&&(b=e[a].loadEventStart-e[a].fetchStart);return b};b.Mc=function(){return d.D()&&d.Xa()%100<m};b.Lc=function(){var e="&utmt=event&utme="+P(b.rb.C())+d.na();f.A(e,d.p,d.a,!1,!0)};b.Jc=function(b){b=o.min(o.floor(b/100),5E3);return b>0?b+"00":"0"};b.sb=function(){var d=b.Kc();if(d==k||isNaN(d))return!1;if(d<=0)return!0;if(d>2147483648)return!1;
+var a=b.rb;a.t(14);a.ia(14);var c=b.Jc(d);a.j(14,1,c)&&a.ja(14,1,d)&&b.Lc();h&&h.isValidLoadTime!=k&&h.setPageReadyTime();return!1};b.Wa=function(){if(!b.Mc())return!1;if(!L.Ic())return!1;b.sb()&&ta(L[t],"load",b.sb,!1);return!0}};var $=function(){};$.Zc=function(d){var f="gaso=",b=L[w][y].hash;d=b&&1==b[q](f)?N(b,f,D):(b=L[t].name)&&0<=b[q](f)?N(b,f,D):N(d.g(),oa,";");return d};$.ad=function(d,f){var b=(f||"www")+".google.com",b="https://"+b+"/analytics/reporting/overlay_js?gaso="+d+D+Aa(),h="_gasojs",e=L[w].createElement("script");e.type="text/javascript";e.src=b;if(h)e.id=h;(L[w].getElementsByTagName("head")[0]||L[w].getElementsByTagName("body")[0]).appendChild(e)};
+$.load=function(d,f){if(!$.$c){var b=$.Zc(f),h=b&&b.match(/^(?:\|([-0-9a-z.]{1,30})\|)?([-.\w]{10,1200})$/i);if(h)f.Dc(b),f.Ec(),V._gasoDomain=d.b,V._gasoCPath=d.f,$.ad(h[2],h[1]);$.$c=!0}};var Qa=function(d,f,b){function h(){if("auto"==j.b){var a=L[w].domain;"www."==a[z](0,4)&&(a=a[z](4));j.b=a}j.b=j.b[C]()}function e(){h();var a=j.b,b=a[q]("www.google.")*a[q](".google.")*a[q]("google.");return b||"/"!=j.f||a[q]("google.org")>-1}function m(b,c,d){if(M(b)||M(c)||M(d))return"-";b=N(b,F+a.a+".",c);M(b)||(b=b[x]("."),b[5]=""+(b[5]?b[5]*1+1:1),b[3]=b[4],b[4]=d,b=b[A]("."));return b}function g(){return"file:"!=L[w][y][ea]&&e()}var a=this,c=sa(a),u=k,j=new Da,i=!1,s=k;a.n=d;a.m=o.round((new Date)[da]()/
+1E3);a.p=f||"UA-XXXXX-X";a.ab=L[w].referrer;a.oa=k;a.d=k;a.F=!1;a.O=k;a.e=k;a.bb=k;a.pa=k;a.a=k;a.k=k;j.o=b?P(b):k;a.eb=!1;a.mc=function(){return Aa()^a.O.cc()&2147483647};a.lc=function(){if(!j.b||""==j.b||"none"==j.b)return j.b="",1;h();return j.Ua?za(j.b):1};a.kc=function(a,b){if(M(a))a="-";else{b+=j.f&&"/"!=j.f?j.f:"";var c=a[q](b),a=c>=0&&c<=8?"0":"["==a[p](0)&&"]"==a[p](a[v]-1)?"-":a}return a};a.na=function(b){var c="";c+=j.ka?a.O.dc():"";c+=j.la&&!M(L[w].title)?"&utmdt="+P(L[w].title):"";var d;
+d=L.Ya(!0);if(!d.hid)d.hid=Aa();d=d.hid;c+="&utmhid="+d+"&utmr="+P(l(a.oa))+"&utmp="+P(a.pc(b));return c};a.pc=function(a){var b=L[w][y];a&&K(13);return a=k!=a&&""!=a?P(a,!0):P(b.pathname+b.search,!0)};a.uc=function(b){if(a.D()){var c="";a.e!=k&&a.e.C()[v]>0&&(c+="&utme="+P(a.e.C()));c+=a.na(b);u.A(c,a.p,a.a)}};a.jc=function(){var b=new Fa(j);return b.Z(a.a)?b.Tb():k};a.cb=c("_getLinkerUrl",52,function(b,c){var d=b[x]("#"),e=b,f=a.jc();if(f)if(c&&1>=d[v])e+="#"+f;else if(!c||1>=d[v])1>=d[v]?e+=(R(b,
+"?")?D:"?")+f:e=d[0]+(R(b,"?")?D:"?")+f+"#"+d[1];return e});a.nc=function(){var b=a.m,c=a.k,d=c.g(),e=a.a+"",f=L.Ya(),g,h=R(d,F+e+"."),i=R(d,H+e),u=R(d,la+e),s,G=[],Y="",Ia=!1,d=M(d)?"":d;if(j.w&&!a.eb){g=L[w][y]&&L[w][y].hash?L[w][y][fa][z](L[w][y][fa][q]("#")):"";j.U&&!M(g)&&(Y=g+D);Y+=L[w][y].search;if(!M(Y)&&R(Y,F))c.Sb(Y),c.Ba()||c.Qb(),s=c.ba(),a.eb=!0;g=c.ea;var va=c.Pa,U=c.Sa;M(g())||(va(Q(g())),R(g(),";")||U());g=c.da;va=c.X;U=c.Y;M(g())||(va(g()),R(g(),";")||U())}M(s)?h?(s=!i||!u)?(s=m(d,
+";",l(b)),a.F=!0):(s=N(d,F+e+".",";"),G=N(d,H+e,";")[x](".")):(s=[e,a.mc(),b,b,b,1][A]("."),Ia=a.F=!0):M(c.z())||M(c.ca())?(s=m(Y,D,l(b)),a.F=!0):(G=c.z()[x]("."),e=G[0]);s=s[x](".");L[t]&&f&&f.dh==e&&!j.o&&(s[4]=f.sid?f.sid:s[4],Ia&&(s[3]=f.sid?f.sid:s[4],f.vid&&(b=f.vid[x]("."),s[1]=b[0],s[2]=b[1])));c.Na(s[A]("."));G[0]=e;G[1]=G[1]?G[1]:0;G[2]=k!=G[2]?G[2]:j.Wb;G[3]=G[3]?G[3]:s[4];c.$(G[A]("."));c.Oa(e);M(c.Rb())||c.fa(c.K());c.Qa();c.aa();c.Ra()};a.oc=function(){u=new Ka(j)};a.getName=c("_getName",
+58,function(){return a.n});a.c=c("_initData",2,function(){var b;if(!i){if(!a.O)a.O=new La(j.ma);a.a=a.lc();a.k=new Fa(j);a.e=new Na;s=new Ma(j,l(a.a),a.k,a.e);a.oc()}if(g()){if(!i)a.oa=a.kc(a.ab,L[w].domain),b=new Z(l(a.a),a.oa,a.m,j);a.nc(b);s.$b()}if(!i)g()&&b.Pb(a.k,a.F),a.bb=new Na,$.load(j,a.k),i=!0});a.Xa=c("_visitCode",54,function(){a.c();var b=N(a.k.g(),F+a.a+".",";"),b=b[x](".");return b[v]<4?"":b[1]});a.qd=c("_cookiePathCopy",30,function(b){a.c();a.k&&a.k.Ub(a.a,b)});a.D=function(){return a.Xa()%
+1E4<j.L*100};a.re=c("_trackPageview",1,function(b){if(g())a.c(),a.uc(b),a.F=!1});a.se=c("_trackTrans",18,function(){var b=a.a,c=[],d,e,f;a.c();if(a.d&&a.D()){for(d=0;d<a.d.N[v];d++){e=a.d.N[d];T(c,e.ha());for(f=0;f<e.M[v];f++)T(c,e.M[f].ha())}for(d=0;d<c[v];d++)u.A(c[d],a.p,b,!0)}});a.me=c("_setTrans",20,function(){var b,c,d,e;b=L[w].getElementById?L[w].getElementById("utmtrans"):L[w].utmform&&L[w].utmform.utmtrans?L[w].utmform.utmtrans:k;a.c();if(b&&b.value){a.d=new W;e=b.value[x]("UTM:");j.u=!j.u||
+""==j.u?"|":j.u;for(b=0;b<e[v];b++){e[b]=ya(e[b]);c=e[b][x](j.u);for(d=0;d<c[v];d++)c[d]=ya(c[d]);"T"==c[0]?a.$a(c[1],c[2],c[3],c[4],c[5],c[6],c[7],c[8]):"I"==c[0]&&a.ic(c[1],c[2],c[3],c[4],c[5],c[6])}}});a.$a=c("_addTrans",21,function(b,c,d,e,f,g,h,i){a.d=a.d?a.d:new W;return a.d.Xb(b,c,d,e,f,g,h,i)});a.ic=c("_addItem",19,function(b,c,d,e,f,g){var h;a.d=a.d?a.d:new W;(h=a.d.Va(b))||(h=a.$a(b,"","","","","","",""));h.Vb(c,d,e,f,g)});a.oe=c("_setVar",22,function(b){b&&""!=b&&e()&&(a.c(),s.bc(b),a.D()&&
+u.A("&utmt=var",a.p,a.a))});a.Yd=c("_setCustomVar",10,function(b,c,d,e){a.c();return s.ac(b,c,d,e)});a.td=c("_deleteCustomVar",35,function(b){a.c();s.Yb(b)});a.Cd=c("_getVisitorCustomVar",50,function(b){a.c();return s.Zb(b)});a.fe=c("_setMaxCustomVariables",71,function(a){j.Ta=a});a.link=c("_link",101,function(b,c){j.w&&b&&(a.c(),L.ec(a.cb(b,c)))});a.Fd=c("_linkByPost",102,function(b,c){if(j.w&&b&&b.action)a.c(),b.action=a.cb(b.action,c)});a.pe=c("_setXKey",83,function(b,c,d){a.e.j(b,c,d)});a.qe=
+c("_setXValue",84,function(b,c,d){a.e.ja(b,c,d)});a.Dd=c("_getXKey",76,function(b,c){return a.e.fc(b,c)});a.Ed=c("_getXValue",77,function(b,c){return a.e.gc(b,c)});a.od=c("_clearXKey",72,function(b){a.e.t(b)});a.pd=c("_clearXValue",73,function(b){a.e.ia(b)});a.sd=c("_createXObj",75,function(){a.c();return new Na});a.qc=c("_sendXEvent",78,function(b){var c="";a.c();a.D()&&(c+="&utmt=event&utme="+P(a.e.hc(b))+a.na(),u.A(c,a.p,a.a,!1,!0))});a.rd=c("_createEventTracker",74,function(b){a.c();return new Oa(b,
+a)});a.Za=c("_trackEvent",4,function(b,c,d,e){a.c();var f=a.bb;k!=b&&k!=c&&""!=b&&""!=c?(f.t(5),f.ia(5),(b=f.j(5,1,b)&&f.j(5,2,c)&&(k==d||f.j(5,3,d))&&(k==e||f.ja(5,1,e)))&&a.qc(f)):b=!1;return b});a.Wa=c("_trackPageLoadTime",100,function(){a.c();if(!a.pa)a.pa=new Pa(a,u);return a.pa.Wa()});a.wd=function(){return j};a.ae=c("_setDomainName",6,function(a){j.b=a});a.kd=c("_addOrganic",14,function(a,b,c){j.J.splice(c?0:j.J[v],0,new Ca(a,b))});a.nd=c("_clearOrganic",70,function(){j.J=[]});a.hd=c("_addIgnoredOrganic",
+15,function(a){T(j.V,a)});a.ld=c("_clearIgnoredOrganic",97,function(){j.V=[]});a.jd=c("_addIgnoredRef",31,function(a){T(j.W,a)});a.md=c("_clearIgnoredRef",32,function(){j.W=[]});a.Id=c("_setAllowHash",8,function(a){j.Ua=a?1:0});a.Td=c("_setCampaignTrack",36,function(a){j.Ka=a?1:0});a.Ud=c("_setClientInfo",66,function(a){j.ka=a?1:0});a.vd=c("_getClientInfo",53,function(){return j.ka});a.Vd=c("_setCookiePath",9,function(a){j.f=a});a.ne=c("_setTransactionDelim",82,function(a){j.u=a});a.Xd=c("_setCookieTimeout",
+25,function(b){a.rc(b*1E3)});a.rc=c("_setCampaignCookieTimeout",29,function(a){j.La=a});a.Zd=c("_setDetectFlash",61,function(a){j.ma=a?1:0});a.xd=c("_getDetectFlash",65,function(){return j.ma});a.$d=c("_setDetectTitle",62,function(a){j.la=a?1:0});a.yd=c("_getDetectTitle",56,function(){return j.la});a.ce=c("_setLocalGifPath",46,function(a){j.ga=a});a.zd=c("_getLocalGifPath",57,function(){return j.ga});a.ee=c("_setLocalServerMode",92,function(){j.B=0});a.ie=c("_setRemoteServerMode",63,function(){j.B=
+1});a.de=c("_setLocalRemoteServerMode",47,function(){j.B=2});a.Ad=c("_getServiceMode",59,function(){return j.B});a.je=c("_setSampleRate",45,function(a){j.L=a});a.ke=c("_setSessionTimeout",27,function(b){a.sc(b*1E3)});a.sc=c("_setSessionCookieTimeout",26,function(a){j.Ma=a});a.Jd=c("_setAllowLinker",11,function(a){j.w=a?1:0});a.Hd=c("_setAllowAnchor",7,function(a){j.U=a?1:0});a.Qd=c("_setCampNameKey",41,function(a){j.Ca=a});a.Md=c("_setCampContentKey",38,function(a){j.Da=a});a.Nd=c("_setCampIdKey",
+39,function(a){j.Ea=a});a.Od=c("_setCampMediumKey",40,function(a){j.Fa=a});a.Pd=c("_setCampNOKey",42,function(a){j.Ga=a});a.Rd=c("_setCampSourceKey",43,function(a){j.Ha=a});a.Sd=c("_setCampTermKey",44,function(a){j.Ia=a});a.Ld=c("_setCampCIdKey",37,function(a){j.Ja=a});a.ud=c("_getAccount",64,function(){return a.p});a.Gd=c("_setAccount",3,function(b){a.p=b});a.ge=c("_setNamespace",48,function(a){j.o=a?P(a):k});a.Bd=c("_getVersion",60,function(){return ia});a.Kd=c("_setAutoTrackOutbound",79,Ba);a.le=
+c("_setTrackOutboundSubdomains",81,Ba);a.be=c("_setHrefExamineLimit",80,Ba);a.he=c("_setReferrerOverride",49,function(b){a.ab=b});a.Wd=c("_setCookiePersistence",24,function(b){a.tc(b)});a.tc=c("_setVisitorCookieTimeout",28,function(a){j.s=a})};var Ra=function(){var d=this,f=sa(d);d.Ab=!1;d.Ib={};d.bd=0;d._gasoDomain=k;d._gasoCPath=k;d.ve=f("_getTracker",0,function(b,f){return d.za(b,k,f)});d.za=f("_createTracker",55,function(b,d,e){d&&K(23);e&&K(67);d==k&&(d="~"+V.bd++);return V.Ib[d]=new Qa(d,b,e)});d.Hb=f("_getTrackerByName",51,function(b){b=b||"";return V.Ib[b]||V.za(k,b)});d.pb=function(){var b=L.Vc();return b&&b[ka]&&b[ka]()};d.ue=f("_anonymizeIp",16,function(){d.Ab=!0})};var Ta=function(){var d=this,f=sa(d);d.xe=f("_createAsyncTracker",33,function(b,d){return V.za(b,d||"")});d.ye=f("_getAsyncTracker",34,function(b){return V.Hb(b)});d.push=function(){K(5);for(var b=arguments,d=0,e=0;e<b[v];e++)try{if(typeof b[e]==="function")b[e]();else{var f="",g=b[e][0],a=g.lastIndexOf(".");a>0&&(f=g[z](0,a),g=g[z](a+1));var c=f==ga?V:f==ha?Sa:V.Hb(f);c[g].apply(c,b[e].slice(1))}}catch(u){d++}return d}};var V=new Ra;var Ua=L[t][ga];Ua&&typeof Ua._getTracker=="function"?V=Ua:L[t][ga]=V;var Sa=new Ta;a:{var Va=L[t][ha],Wa=!1;if(Va&&typeof Va[ba]=="function"&&(Wa=ua(Va),!Wa))break a;L[t][ha]=Sa;Wa&&Sa[ba].apply(Sa,Va)};})();
diff --git a/js/modernizr/test/caniuse_files/jquery.min.js b/js/modernizr/test/caniuse_files/jquery.min.js
new file mode 100644 (file)
index 0000000..b2ac174
--- /dev/null
@@ -0,0 +1,18 @@
+/*!
+ * jQuery JavaScript Library v1.6.1
+ * http://jquery.com/
+ *
+ * Copyright 2011, John Resig
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * Includes Sizzle.js
+ * http://sizzlejs.com/
+ * Copyright 2011, The Dojo Foundation
+ * Released under the MIT, BSD, and GPL Licenses.
+ *
+ * Date: Thu May 12 15:04:36 2011 -0400
+ */
+(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!cj[a]){var b=f("<"+a+">").appendTo("body"),d=b.css("display");b.remove();if(d==="none"||d===""){ck||(ck=c.createElement("iframe"),ck.frameBorder=ck.width=ck.height=0),c.body.appendChild(ck);if(!cl||!ck.createElement)cl=(ck.contentWindow||ck.contentDocument).document,cl.write("<!doctype><html><body></body></html>");b=cl.createElement(a),cl.body.appendChild(b),d=f.css(b,"display"),c.body.removeChild(ck)}cj[a]=d}return cj[a]}function cu(a,b){var c={};f.each(cp.concat.apply([],cp.slice(0,b)),function(){c[this]=a});return c}function ct(){cq=b}function cs(){setTimeout(ct,0);return cq=f.now()}function ci(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ch(){try{return new a.XMLHttpRequest}catch(b){}}function cb(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function ca(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function b_(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bF.test(a)?d(a,e):b_(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b=="object")for(var e in b)b_(a+"["+e+"]",b[e],c,d);else d(a,b)}function b$(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bU,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=b$(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=b$(a,c,d,e,"*",g));return l}function bZ(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bQ),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function bD(a,b,c){var d=b==="width"?bx:by,e=b==="width"?a.offsetWidth:a.offsetHeight;if(c==="border")return e;f.each(d,function(){c||(e-=parseFloat(f.css(a,"padding"+this))||0),c==="margin"?e+=parseFloat(f.css(a,"margin"+this))||0:e-=parseFloat(f.css(a,"border"+this+"Width"))||0});return e}function bn(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bf,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bm(a){f.nodeName(a,"input")?bl(a):a.getElementsByTagName&&f.grep(a.getElementsByTagName("input"),bl)}function bl(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bk(a){return"getElementsByTagName"in a?a.getElementsByTagName("*"):"querySelectorAll"in a?a.querySelectorAll("*"):[]}function bj(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bi(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c=f.expando,d=f.data(a),e=f.data(b,d);if(d=d[c]){var g=d.events;e=e[c]=f.extend({},d);if(g){delete e.handle,e.events={};for(var h in g)for(var i=0,j=g[h].length;i<j;i++)f.event.add(b,h+(g[h][i].namespace?".":"")+g[h][i].namespace,g[h][i],g[h][i].data)}}}}function bh(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function X(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(S.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function W(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function O(a,b){return(a&&a!=="*"?a+".":"")+b.replace(A,"`").replace(B,"&")}function N(a){var b,c,d,e,g,h,i,j,k,l,m,n,o,p=[],q=[],r=f._data(this,"events");if(!(a.liveFired===this||!r||!r.live||a.target.disabled||a.button&&a.type==="click")){a.namespace&&(n=new RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)")),a.liveFired=this;var s=r.live.slice(0);for(i=0;i<s.length;i++)g=s[i],g.origType.replace(y,"")===a.type?q.push(g.selector):s.splice(i--,1);e=f(a.target).closest(q,a.currentTarget);for(j=0,k=e.length;j<k;j++){m=e[j];for(i=0;i<s.length;i++){g=s[i];if(m.selector===g.selector&&(!n||n.test(g.namespace))&&!m.elem.disabled){h=m.elem,d=null;if(g.preType==="mouseenter"||g.preType==="mouseleave")a.type=g.preType,d=f(a.relatedTarget).closest(g.selector)[0],d&&f.contains(h,d)&&(d=h);(!d||d!==h)&&p.push({elem:h,handleObj:g,level:m.level})}}}for(j=0,k=p.length;j<k;j++){e=p[j];if(c&&e.level>c)break;a.currentTarget=e.elem,a.data=e.handleObj.data,a.handleObj=e.handleObj,o=e.handleObj.origHandler.apply(e.elem,arguments);if(o===!1||a.isPropagationStopped()){c=e.level,o===!1&&(b=!1);if(a.isImmediatePropagationStopped())break}}return b}}function L(a,c,d){var e=f.extend({},d[0]);e.type=a,e.originalEvent={},e.liveFired=b,f.event.handle.call(c,e),e.isDefaultPrevented()&&d[0].preventDefault()}function F(){return!0}function E(){return!1}function m(a,c,d){var e=c+"defer",g=c+"queue",h=c+"mark",i=f.data(a,e,b,!0);i&&(d==="queue"||!f.data(a,g,b,!0))&&(d==="mark"||!f.data(a,h,b,!0))&&setTimeout(function(){!f.data(a,g,b,!0)&&!f.data(a,h,b,!0)&&(f.removeData(a,e,!0),i.resolve())},0)}function l(a){for(var b in a)if(b!=="toJSON")return!1;return!0}function k(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(j,"$1-$2").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNaN(d)?i.test(d)?f.parseJSON(d):d:parseFloat(d)}catch(g){}f.data(a,c,d)}else d=b}return d}var c=a.document,d=a.navigator,e=a.location,f=function(){function H(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(H,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/\d/,n=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,o=/^[\],:{}\s]*$/,p=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,q=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,r=/(?:^|:|,)(?:\s*\[)+/g,s=/(webkit)[ \/]([\w.]+)/,t=/(opera)(?:.*version)?[ \/]([\w.]+)/,u=/(msie) ([\w.]+)/,v=/(mozilla)(?:.*? rv:([\w.]+))?/,w=d.userAgent,x,y,z,A=Object.prototype.toString,B=Object.prototype.hasOwnProperty,C=Array.prototype.push,D=Array.prototype.slice,E=String.prototype.trim,F=Array.prototype.indexOf,G={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=n.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.6.1",length:0,size:function(){return this.length},toArray:function(){return D.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?C.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),y.done(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(D.apply(this,arguments),"slice",D.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:C,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;y.resolveWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!y){y=e._Deferred();if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",z,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",z),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&H()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNaN:function(a){return a==null||!m.test(a)||isNaN(a)},type:function(a){return a==null?String(a):G[A.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;if(a.constructor&&!B.call(a,"constructor")&&!B.call(a.constructor.prototype,"isPrototypeOf"))return!1;var c;for(c in a);return c===b||B.call(a,c)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(o.test(b.replace(p,"@").replace(q,"]").replace(r,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(b,c,d){a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b)),d=c.documentElement,(!d||!d.nodeName||d.nodeName==="parsererror")&&e.error("Invalid XML: "+b);return c},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:E?function(a){return a==null?"":E.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?C.call(c,a):e.merge(c,a)}return c},inArray:function(a,b){if(F)return F.call(b,a);for(var c=0,d=b.length;c<d;c++)if(b[c]===a)return c;return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=D.call(arguments,2),g=function(){return a.apply(c,f.concat(D.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h){var i=a.length;if(typeof c=="object"){for(var j in c)e.access(a,j,c[j],f,g,d);return a}if(d!==b){f=!h&&f&&e.isFunction(d);for(var k=0;k<i;k++)g(a[k],c,f?d.call(a[k],k,g(a[k],c)):d,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=s.exec(a)||t.exec(a)||u.exec(a)||a.indexOf("compatible")<0&&v.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){G["[object "+b+"]"]=b.toLowerCase()}),x=e.uaMatch(w),x.browser&&(e.browser[x.browser]=!0,e.browser.version=x.version),e.browser.webkit&&(e.browser.safari=!0),j.test(" ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?z=function(){c.removeEventListener("DOMContentLoaded",z,!1),e.ready()}:c.attachEvent&&(z=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",z),e.ready())});return e}(),g="done fail isResolved isRejected promise then always pipe".split(" "),h=[].slice;f.extend({_Deferred:function(){var a=[],b,c,d,e={done:function(){if(!d){var c=arguments,g,h,i,j,k;b&&(k=b,b=0);for(g=0,h=c.length;g<h;g++)i=c[g],j=f.type(i),j==="array"?e.done.apply(e,i):j==="function"&&a.push(i);k&&e.resolveWith(k[0],k[1])}return this},resolveWith:function(e,f){if(!d&&!b&&!c){f=f||[],c=1;try{while(a[0])a.shift().apply(e,f)}finally{b=[e,f],c=0}}return this},resolve:function(){e.resolveWith(this,arguments);return this},isResolved:function(){return!!c||!!b},cancel:function(){d=1,a=[];return this}};return e},Deferred:function(a){var b=f._Deferred(),c=f._Deferred(),d;f.extend(b,{then:function(a,c){b.done(a).fail(c);return this},always:function(){return b.done.apply(b,arguments).fail.apply(this,arguments)},fail:c.done,rejectWith:c.resolveWith,reject:c.resolve,isRejected:c.isResolved,pipe:function(a,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[c,"reject"]},function(a,c){var e=c[0],g=c[1],h;f.isFunction(e)?b[a](function(){h=e.apply(this,arguments),h&&f.isFunction(h.promise)?h.promise().then(d.resolve,d.reject):d[g](h)}):b[a](d[g])})}).promise()},promise:function(a){if(a==null){if(d)return d;d=a={}}var c=g.length;while(c--)a[g[c]]=b[g[c]];return a}}),b.done(c.cancel).fail(b.cancel),delete b.cancel,a&&a.call(b,b);return b},when:function(a){function i(a){return function(c){b[a]=arguments.length>1?h.call(arguments,0):c,--e||g.resolveWith(g,h.call(b,0))}}var b=arguments,c=0,d=b.length,e=d,g=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred();if(d>1){for(;c<d;c++)b[c]&&f.isFunction(b[c].promise)?b[c].promise().then(i(c),g.reject):--e;e||g.resolveWith(g,b)}else g!==a&&g.resolveWith(g,d?[a]:[]);return g.promise()}}),f.support=function(){var a=c.createElement("div"),b=c.documentElement,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;a.setAttribute("className","t"),a.innerHTML="   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",d=a.getElementsByTagName("*"),e=a.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};f=c.createElement("select"),g=f.appendChild(c.createElement("option")),h=a.getElementsByTagName("input")[0],j={leadingWhitespace:a.firstChild.nodeType===3,tbody:!a.getElementsByTagName("tbody").length,htmlSerialize:!!a.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55$/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:h.value==="on",optSelected:g.selected,getSetAttribute:a.className!=="t",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},h.checked=!0,j.noCloneChecked=h.cloneNode(!0).checked,f.disabled=!0,j.optDisabled=!g.disabled;try{delete a.test}catch(s){j.deleteExpando=!1}!a.addEventListener&&a.attachEvent&&a.fireEvent&&(a.attachEvent("onclick",function b(){j.noCloneEvent=!1,a.detachEvent("onclick",b)}),a.cloneNode(!0).fireEvent("onclick")),h=c.createElement("input"),h.value="t",h.setAttribute("type","radio"),j.radioValue=h.value==="t",h.setAttribute("checked","checked"),a.appendChild(h),k=c.createDocumentFragment(),k.appendChild(a.firstChild),j.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,a.innerHTML="",a.style.width=a.style.paddingLeft="1px",l=c.createElement("body"),m={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"};for(q in m)l.style[q]=m[q];l.appendChild(a),b.insertBefore(l,b.firstChild),j.appendChecked=h.checked,j.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,j.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="<div style='width:4px;'></div>",j.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>",n=a.getElementsByTagName("td"),r=n[0].offsetHeight===0,n[0].style.display="",n[1].style.display="none",j.reliableHiddenOffsets=r&&n[0].offsetHeight===0,a.innerHTML="",c.defaultView&&c.defaultView.getComputedStyle&&(i=c.createElement("div"),i.style.width="0",i.style.marginRight="0",a.appendChild(i),j.reliableMarginRight=(parseInt((c.defaultView.getComputedStyle(i,null)||{marginRight:0}).marginRight,10)||0)===0),l.innerHTML="",b.removeChild(l);if(a.attachEvent)for(q in{submit:1,change:1,focusin:1})p="on"+q,r=p in a,r||(a.setAttribute(p,"return;"),r=typeof a[p]=="function"),j[q+"Bubbles"]=r;return j}(),f.boxModel=f.support.boxModel;var i=/^(?:\{.*\}|\[.*\])$/,j=/([a-z])([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!l(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g=f.expando,h=typeof c=="string",i,j=a.nodeType,k=j?f.cache:a,l=j?a[f.expando]:a[f.expando]&&f.expando;if((!l||e&&l&&!k[l][g])&&h&&d===b)return;l||(j?a[f.expando]=l=++f.uuid:l=f.expando),k[l]||(k[l]={},j||(k[l].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?k[l][g]=f.extend(k[l][g],c):k[l]=f.extend(k[l],c);i=k[l],e&&(i[g]||(i[g]={}),i=i[g]),d!==b&&(i[f.camelCase(c)]=d);if(c==="events"&&!i[c])return i[g]&&i[g].events;return h?i[f.camelCase(c)]:i}},removeData:function(b,c,d){if(!!f.acceptData(b)){var e=f.expando,g=b.nodeType,h=g?f.cache:b,i=g?b[f.expando]:f.expando;if(!h[i])return;if(c){var j=d?h[i][e]:h[i];if(j){delete j[c];if(!l(j))return}}if(d){delete h[i][e];if(!l(h[i]))return}var k=h[i][e];f.support.deleteExpando||h!=a?delete h[i]:h[i]=null,k?(h[i]={},g||(h[i].toJSON=f.noop),h[i][e]=k):g&&(f.support.deleteExpando?delete b[f.expando]:b.removeAttribute?b.removeAttribute(f.expando):b[f.expando]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d=null;if(typeof a=="undefined"){if(this.length){d=f.data(this[0]);if(this[0].nodeType===1){var e=this[0].attributes,g;for(var h=0,i=e.length;h<i;h++)g=e[h].name,g.indexOf("data-")===0&&(g=f.camelCase(g.substring(5)),k(this[0],g,d[g]))}}return d}if(typeof a=="object")return this.each(function(){f.data(this,a)});var j=a.split(".");j[1]=j[1]?"."+j[1]:"";if(c===b){d=this.triggerHandler("getData"+j[1]+"!",[j[0]]),d===b&&this.length&&(d=f.data(this[0],a),d=k(this[0],a,d));return d===b&&j[1]?this.data(j[0]):d}return this.each(function(){var b=f(this),d=[j[0],c];b.triggerHandler("setData"+j[1]+"!",d),f.data(this,a,c),b.triggerHandler("changeData"+j[1]+"!",d)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,c){a&&(c=(c||"fx")+"mark",f.data(a,c,(f.data(a,c,b,!0)||0)+1,!0))},_unmark:function(a,c,d){a!==!0&&(d=c,c=a,a=!1);if(c){d=d||"fx";var e=d+"mark",g=a?0:(f.data(c,e,b,!0)||1)-1;g?f.data(c,e,g,!0):(f.removeData(c,e,!0),m(c,d,"mark"))}},queue:function(a,c,d){if(a){c=(c||"fx")+"queue";var e=f.data(a,c,b,!0);d&&(!e||f.isArray(d)?e=f.data(a,c,f.makeArray(d),!0):e.push(d));return e||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e;d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),d.call(a,function(){f.dequeue(a,b)})),c.length||(f.removeData(a,b+"queue",!0),m(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){typeof a!="string"&&(c=a,a="fx");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(){var c=this;setTimeout(function(){f.dequeue(c,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f._Deferred(),!0))h++,l.done(m);m();return d.promise()}});var n=/[\n\t\r]/g,o=/\s+/,p=/\r/g,q=/^(?:button|input)$/i,r=/^(?:button|input|object|select|textarea)$/i,s=/^a(?:rea)?$/i,t=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,u=/\:/,v,w;f.fn.extend({attr:function(a,b){return f.access(this,a,b,!0,f.attr)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,a,b,!0,f.prop)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.addClass(a.call(this,b,c.attr("class")||""))});if(a&&typeof a=="string"){var b=(a||"").split(o);for(var c=0,d=this.length;c<d;c++){var e=this[c];if(e.nodeType===1)if(!e.className)e.className=a;else{var g=" "+e.className+" ",h=e.className;for(var i=0,j=b.length;i<j;i++)g.indexOf(" "+b[i]+" ")<0&&(h+=" "+b[i]);e.className=f.trim(h)}}}return this},removeClass:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.removeClass(a.call(this,b,c.attr("class")))});if(a&&typeof a=="string"||a===b){var c=(a||"").split(o);for(var d=0,e=this.length;d<e;d++){var g=this[d];if(g.nodeType===1&&g.className)if(a){var h=(" "+g.className+" ").replace(n," ");for(var i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){var d=f(this);d.toggleClass(a.call(this,c,d.attr("class"),b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(o);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ";for(var c=0,d=this.length;c<d;c++)if((" "+this[c].className+" ").replace(n," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e=this[0];if(!arguments.length){if(e){c=f.valHooks[e.nodeName.toLowerCase()]||f.valHooks[e.type];if(c&&"get"in c&&(d=c.get(e,"value"))!==b)return d;return(e.value||"").replace(p,"")}return b}var g=f.isFunction(a);return this.each(function(d){var e=f(this),h;if(this.nodeType===1){g?h=a.call(this,d,e.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c=a.selectedIndex,d=[],e=a.options,g=a.type==="select-one";if(c<0)return null;for(var h=g?c:0,i=g?c+1:e.length;h<i;h++){var j=e[h];if(j.selected&&(f.support.optDisabled?!j.disabled:j.getAttribute("disabled")===null)&&(!j.parentNode.disabled||!f.nodeName(j.parentNode,"optgroup"))){b=f(j).val();if(g)return b;d.push(b)}}if(g&&!d.length&&e.length)return f(e[c]).val();return d},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attrFix:{tabindex:"tabIndex"},attr:function(a,c,d,e){var g=a.nodeType;if(!a||g===3||g===8||g===2)return b;if(e&&c in f.attrFn)return f(a)[c](d);if(!("getAttribute"in a))return f.prop(a,c,d);var h,i,j=g!==1||!f.isXMLDoc(a);c=j&&f.attrFix[c]||c,i=f.attrHooks[c],i||(!t.test(c)||typeof d!="boolean"&&d!==b&&d.toLowerCase()!==c.toLowerCase()?v&&(f.nodeName(a,"form")||u.test(c))&&(i=v):i=w);if(d!==b){if(d===null){f.removeAttr(a,c);return b}if(i&&"set"in i&&j&&(h=i.set(a,d,c))!==b)return h;a.setAttribute(c,""+d);return d}if(i&&"get"in i&&j)return i.get(a,c);h=a.getAttribute(c);return h===null?b:h},removeAttr:function(a,b){var c;a.nodeType===1&&(b=f.attrFix[b]||b,f.support.getSetAttribute?a.removeAttribute(b):(f.attr(a,b,""),a.removeAttributeNode(a.getAttributeNode(b))),t.test(b)&&(c=f.propFix[b]||b)in a&&(a[c]=!1))},attrHooks:{type:{set:function(a,b){if(q.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},tabIndex:{get:function(a){var c=a.getAttributeNode("tabIndex");return c&&c.specified?parseInt(c.value,10):r.test(a.nodeName)||s.test(a.nodeName)&&a.href?0:b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e=a.nodeType;if(!a||e===3||e===8||e===2)return b;var g,h,i=e!==1||!f.isXMLDoc(a);c=i&&f.propFix[c]||c,h=f.propHooks[c];return d!==b?h&&"set"in h&&(g=h.set(a,d,c))!==b?g:a[c]=d:h&&"get"in h&&(g=h.get(a,c))!==b?g:a[c]},propHooks:{}}),w={get:function(a,c){return a[f.propFix[c]||c]?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=b),a.setAttribute(c,c.toLowerCase()));return c}},f.attrHooks.value={get:function(a,b){if(v&&f.nodeName(a,"button"))return v.get(a,b);return a.value},set:function(a,b,c){if(v&&f.nodeName(a,"button"))return v.set(a,b,c);a.value=b}},f.support.getSetAttribute||(f.attrFix=f.propFix,v=f.attrHooks.name=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&d.nodeValue!==""?d.nodeValue:b},set:function(a,b,c){var d=a.getAttributeNode(c);if(d){d.nodeValue=b;return b}}},f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})})),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}})),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var x=Object.prototype.hasOwnProperty,y=/\.(.*)$/,z=/^(?:textarea|input|select)$/i,A=/\./g,B=/ /g,C=/[^\w\s.|`]/g,D=function(a){return a.replace(C,"\\$&")};f.event={add:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){if(d===!1)d=E;else if(!d)return;var g,h;d.handler&&(g=d,d=g.handler),d.guid||(d.guid=f.guid++);var i=f._data(a);if(!i)return;var j=i.events,k=i.handle;j||(i.events=j={}),k||(i.handle=k=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.handle.apply(k.elem,arguments):b}),k.elem=a,c=c.split(" ");var l,m=0,n;while(l=c[m++]){h=g?f.extend({},g):{handler:d,data:e},l.indexOf(".")>-1?(n=l.split("."),l=n.shift(),h.namespace=n.slice(0).sort().join(".")):(n=[],h.namespace=""),h.type=l,h.guid||(h.guid=d.guid);var o=j[l],p=f.event.special[l]||{};if(!o){o=j[l]=[];if(!p.setup||p.setup.call(a,e,n,k)===!1)a.addEventListener?a.addEventListener(l,k,!1):a.attachEvent&&a.attachEvent("on"+l,k)}p.add&&(p.add.call(a,h),h.handler.guid||(h.handler.guid=d.guid)),o.push(h),f.event.global[l]=!0}a=null}},global:{},remove:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){d===!1&&(d=E);var g,h,i,j,k=0,l,m,n,o,p,q,r,s=f.hasData(a)&&f._data(a),t=s&&s.events;if(!s||!t)return;c&&c.type&&(d=c.handler,c=c.type);if(!c||typeof c=="string"&&c.charAt(0)==="."){c=c||"";for(h in t)f.event.remove(a,h+c);return}c=c.split(" ");while(h=c[k++]){r=h,q=null,l=h.indexOf(".")<0,m=[],l||(m=h.split("."),h=m.shift(),n=new RegExp("(^|\\.)"+f.map(m.slice(0).sort(),D).join("\\.(?:.*\\.)?")+"(\\.|$)")),p=t[h];if(!p)continue;if(!d){for(j=0;j<p.length;j++){q=p[j];if(l||n.test(q.namespace))f.event.remove(a,r,q.handler,j),p.splice(j--,1)}continue}o=f.event.special[h]||{};for(j=e||0;j<p.length;j++){q=p[j];if(d.guid===q.guid){if(l||n.test(q.namespace))e==null&&p.splice(j--,1),o.remove&&o.remove.call(a,q);if(e!=null)break}}if(p.length===0||e!=null&&p.length===1)(!o.teardown||o.teardown.call(a,m)===!1)&&f.removeEvent(a,h,s.handle),g=null,delete t[h]}if(f.isEmptyObject(t)){var u=s.handle;u&&(u.elem=null),delete s.events,delete s.handle,f.isEmptyObject(s)&&f.removeData(a,b,!0)}}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){var h=c.type||c,i=[],j;h.indexOf("!")>=0&&(h=h.slice(0,-1),j=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if(!!e&&!f.event.customEvent[h]||!!f.event.global[h]){c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.exclusive=j,c.namespace=i.join("."),c.namespace_re=new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)");if(g||!e)c.preventDefault(),c.stopPropagation();if(!e){f.each(f.cache,function(){var a=f.expando,b=this[a];b&&b.events&&b.events[h]&&f.event.trigger(c,d,b.handle.elem
+)});return}if(e.nodeType===3||e.nodeType===8)return;c.result=b,c.target=e,d=d?f.makeArray(d):[],d.unshift(c);var k=e,l=h.indexOf(":")<0?"on"+h:"";do{var m=f._data(k,"handle");c.currentTarget=k,m&&m.apply(k,d),l&&f.acceptData(k)&&k[l]&&k[l].apply(k,d)===!1&&(c.result=!1,c.preventDefault()),k=k.parentNode||k.ownerDocument||k===c.target.ownerDocument&&a}while(k&&!c.isPropagationStopped());if(!c.isDefaultPrevented()){var n,o=f.event.special[h]||{};if((!o._default||o._default.call(e.ownerDocument,c)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)){try{l&&e[h]&&(n=e[l],n&&(e[l]=null),f.event.triggered=h,e[h]())}catch(p){}n&&(e[l]=n),f.event.triggered=b}}return c.result}},handle:function(c){c=f.event.fix(c||a.event);var d=((f._data(this,"events")||{})[c.type]||[]).slice(0),e=!c.exclusive&&!c.namespace,g=Array.prototype.slice.call(arguments,0);g[0]=c,c.currentTarget=this;for(var h=0,i=d.length;h<i;h++){var j=d[h];if(e||c.namespace_re.test(j.namespace)){c.handler=j.handler,c.data=j.data,c.handleObj=j;var k=j.handler.apply(this,g);k!==b&&(c.result=k,k===!1&&(c.preventDefault(),c.stopPropagation()));if(c.isImmediatePropagationStopped())break}}return c.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(a){if(a[f.expando])return a;var d=a;a=f.Event(d);for(var e=this.props.length,g;e;)g=this.props[--e],a[g]=d[g];a.target||(a.target=a.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),!a.relatedTarget&&a.fromElement&&(a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement);if(a.pageX==null&&a.clientX!=null){var h=a.target.ownerDocument||c,i=h.documentElement,j=h.body;a.pageX=a.clientX+(i&&i.scrollLeft||j&&j.scrollLeft||0)-(i&&i.clientLeft||j&&j.clientLeft||0),a.pageY=a.clientY+(i&&i.scrollTop||j&&j.scrollTop||0)-(i&&i.clientTop||j&&j.clientTop||0)}a.which==null&&(a.charCode!=null||a.keyCode!=null)&&(a.which=a.charCode!=null?a.charCode:a.keyCode),!a.metaKey&&a.ctrlKey&&(a.metaKey=a.ctrlKey),!a.which&&a.button!==b&&(a.which=a.button&1?1:a.button&2?3:a.button&4?2:0);return a},guid:1e8,proxy:f.proxy,special:{ready:{setup:f.bindReady,teardown:f.noop},live:{add:function(a){f.event.add(this,O(a.origType,a.selector),f.extend({},a,{handler:N,guid:a.handler.guid}))},remove:function(a){f.event.remove(this,O(a.origType,a.selector),a)}},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}}},f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!this.preventDefault)return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?F:E):this.type=a,b&&f.extend(this,b),this.timeStamp=f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=F;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=F;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=F,this.stopPropagation()},isDefaultPrevented:E,isPropagationStopped:E,isImmediatePropagationStopped:E};var G=function(a){var b=a.relatedTarget;a.type=a.data;try{if(b&&b!==c&&!b.parentNode)return;while(b&&b!==this)b=b.parentNode;b!==this&&f.event.handle.apply(this,arguments)}catch(d){}},H=function(a){a.type=a.data,f.event.handle.apply(this,arguments)};f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={setup:function(c){f.event.add(this,b,c&&c.selector?H:G,a)},teardown:function(a){f.event.remove(this,b,a&&a.selector?H:G)}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(a,b){if(!f.nodeName(this,"form"))f.event.add(this,"click.specialSubmit",function(a){var b=a.target,c=b.type;(c==="submit"||c==="image")&&f(b).closest("form").length&&L("submit",this,arguments)}),f.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,c=b.type;(c==="text"||c==="password")&&f(b).closest("form").length&&a.keyCode===13&&L("submit",this,arguments)});else return!1},teardown:function(a){f.event.remove(this,".specialSubmit")}});if(!f.support.changeBubbles){var I,J=function(a){var b=a.type,c=a.value;b==="radio"||b==="checkbox"?c=a.checked:b==="select-multiple"?c=a.selectedIndex>-1?f.map(a.options,function(a){return a.selected}).join("-"):"":f.nodeName(a,"select")&&(c=a.selectedIndex);return c},K=function(c){var d=c.target,e,g;if(!!z.test(d.nodeName)&&!d.readOnly){e=f._data(d,"_change_data"),g=J(d),(c.type!=="focusout"||d.type!=="radio")&&f._data(d,"_change_data",g);if(e===b||g===e)return;if(e!=null||g)c.type="change",c.liveFired=b,f.event.trigger(c,arguments[1],d)}};f.event.special.change={filters:{focusout:K,beforedeactivate:K,click:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(c==="radio"||c==="checkbox"||f.nodeName(b,"select"))&&K.call(this,a)},keydown:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(a.keyCode===13&&!f.nodeName(b,"textarea")||a.keyCode===32&&(c==="checkbox"||c==="radio")||c==="select-multiple")&&K.call(this,a)},beforeactivate:function(a){var b=a.target;f._data(b,"_change_data",J(b))}},setup:function(a,b){if(this.type==="file")return!1;for(var c in I)f.event.add(this,c+".specialChange",I[c]);return z.test(this.nodeName)},teardown:function(a){f.event.remove(this,".specialChange");return z.test(this.nodeName)}},I=f.event.special.change.filters,I.focus=I.beforeactivate}f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){function e(a){var c=f.event.fix(a);c.type=b,c.originalEvent={},f.event.trigger(c,null,c.target),c.isDefaultPrevented()&&a.preventDefault()}var d=0;f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.each(["bind","one"],function(a,c){f.fn[c]=function(a,d,e){var g;if(typeof a=="object"){for(var h in a)this[c](h,d,a[h],e);return this}if(arguments.length===2||d===!1)e=d,d=b;c==="one"?(g=function(a){f(this).unbind(a,g);return e.apply(this,arguments)},g.guid=e.guid||f.guid++):g=e;if(a==="unload"&&c!=="one")this.one(a,d,e);else for(var i=0,j=this.length;i<j;i++)f.event.add(this[i],a,g,d);return this}}),f.fn.extend({unbind:function(a,b){if(typeof a=="object"&&!a.preventDefault)for(var c in a)this.unbind(c,a[c]);else for(var d=0,e=this.length;d<e;d++)f.event.remove(this[d],a,b);return this},delegate:function(a,b,c,d){return this.live(b,c,d,a)},undelegate:function(a,b,c){return arguments.length===0?this.unbind("live"):this.die(b,null,c,a)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f.data(this,"lastToggle"+a.guid)||0)%d;f.data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var M={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};f.each(["live","die"],function(a,c){f.fn[c]=function(a,d,e,g){var h,i=0,j,k,l,m=g||this.selector,n=g?this:f(this.context);if(typeof a=="object"&&!a.preventDefault){for(var o in a)n[c](o,d,a[o],m);return this}if(c==="die"&&!a&&g&&g.charAt(0)==="."){n.unbind(g);return this}if(d===!1||f.isFunction(d))e=d||E,d=b;a=(a||"").split(" ");while((h=a[i++])!=null){j=y.exec(h),k="",j&&(k=j[0],h=h.replace(y,""));if(h==="hover"){a.push("mouseenter"+k,"mouseleave"+k);continue}l=h,M[h]?(a.push(M[h]+k),h=h+k):h=(M[h]||h)+k;if(c==="live")for(var p=0,q=n.length;p<q;p++)f.event.add(n[p],"live."+O(h,m),{data:d,selector:m,handler:e,origType:h,origHandler:e,preType:l});else n.unbind("live."+O(h,m),e)}return this}}),f.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.bind(b,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0)}),function(){function u(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}if(i.nodeType===1){f||(i.sizcache=c,i.sizset=g);if(typeof b!="string"){if(i===b){j=!0;break}}else if(k.filter(b,[i]).length>0){j=i;break}}i=i[a]}d[g]=j}}}function t(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}i.nodeType===1&&!f&&(i.sizcache=c,i.sizset=g);if(i.nodeName.toLowerCase()===b){j=i;break}i=i[a]}d[g]=j}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d=0,e=Object.prototype.toString,g=!1,h=!0,i=/\\/g,j=/\W/;[0,0].sort(function(){h=!1;return 0});var k=function(b,d,f,g){f=f||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return f;var i,j,n,o,q,r,s,t,u=!0,w=k.isXML(d),x=[],y=b;do{a.exec(""),i=a.exec(y);if(i){y=i[3],x.push(i[1]);if(i[2]){o=i[3];break}}}while(i);if(x.length>1&&m.exec(b))if(x.length===2&&l.relative[x[0]])j=v(x[0]+x[1],d);else{j=l.relative[x[0]]?[d]:k(x.shift(),d);while(x.length)b=x.shift(),l.relative[b]&&(b+=x.shift()),j=v(b,j)}else{!g&&x.length>1&&d.nodeType===9&&!w&&l.match.ID.test(x[0])&&!l.match.ID.test(x[x.length-1])&&(q=k.find(x.shift(),d,w),d=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]);if(d){q=g?{expr:x.pop(),set:p(g)}:k.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&d.parentNode?d.parentNode:d,w),j=q.expr?k.filter(q.expr,q.set):q.set,x.length>0?n=p(j):u=!1;while(x.length)r=x.pop(),s=r,l.relative[r]?s=x.pop():r="",s==null&&(s=d),l.relative[r](n,s,w)}else n=x=[]}n||(n=j),n||k.error(r||b);if(e.call(n)==="[object Array]")if(!u)f.push.apply(f,n);else if(d&&d.nodeType===1)for(t=0;n[t]!=null;t++)n[t]&&(n[t]===!0||n[t].nodeType===1&&k.contains(d,n[t]))&&f.push(j[t]);else for(t=0;n[t]!=null;t++)n[t]&&n[t].nodeType===1&&f.push(j[t]);else p(n,f);o&&(k(o,h,f,g),k.uniqueSort(f));return f};k.uniqueSort=function(a){if(r){g=h,a.sort(r);if(g)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},k.matches=function(a,b){return k(a,null,null,b)},k.matchesSelector=function(a,b){return k(b,null,null,[a]).length>0},k.find=function(a,b,c){var d;if(!a)return[];for(var e=0,f=l.order.length;e<f;e++){var g,h=l.order[e];if(g=l.leftMatch[h].exec(a)){var j=g[1];g.splice(1,1);if(j.substr(j.length-1)!=="\\"){g[1]=(g[1]||"").replace(i,""),d=l.find[h](g,b,c);if(d!=null){a=a.replace(l.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},k.filter=function(a,c,d,e){var f,g,h=a,i=[],j=c,m=c&&c[0]&&k.isXML(c[0]);while(a&&c.length){for(var n in l.filter)if((f=l.leftMatch[n].exec(a))!=null&&f[2]){var o,p,q=l.filter[n],r=f[1];g=!1,f.splice(1,1);if(r.substr(r.length-1)==="\\")continue;j===i&&(i=[]);if(l.preFilter[n]){f=l.preFilter[n](f,j,d,i,e,m);if(!f)g=o=!0;else if(f===!0)continue}if(f)for(var s=0;(p=j[s])!=null;s++)if(p){o=q(p,f,s,j);var t=e^!!o;d&&o!=null?t?g=!0:j[s]=!1:t&&(i.push(p),g=!0)}if(o!==b){d||(j=i),a=a.replace(l.match[n],"");if(!g)return[];break}}if(a===h)if(g==null)k.error(a);else break;h=a}return j},k.error=function(a){throw"Syntax error, unrecognized expression: "+a};var l=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!j.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&k.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!j.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&k.filter(b,a,!0)}},"":function(a,b,c){var e,f=d++,g=u;typeof b=="string"&&!j.test(b)&&(b=b.toLowerCase(),e=b,g=t),g("parentNode",b,f,a,e,c)},"~":function(a,b,c){var e,f=d++,g=u;typeof b=="string"&&!j.test(b)&&(b=b.toLowerCase(),e=b,g=t),g("previousSibling",b,f,a,e,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(i,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(i,"")},TAG:function(a,b){return a[1].replace(i,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||k.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&k.error(a[0]);a[0]=d++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(i,"");!f&&l.attrMap[g]&&(a[1]=l.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(i,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=k(b[3],null,null,c);else{var g=k.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(l.match.POS.test(b[0])||l.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!k(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=l.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||k.getText([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}k.error(e)},CHILD:function(a,b){var c=b[1],d=a;switch(c){case"only":case"first":while(d=d.previousSibling)if(d.nodeType===1)return!1;if(c==="first")return!0;d=a;case"last":while(d=d.nextSibling)if(d.nodeType===1)return!1;return!0;case"nth":var e=b[2],f=b[3];if(e===1&&f===0)return!0;var g=b[0],h=a.parentNode;if(h&&(h.sizcache!==g||!a.nodeIndex)){var i=0;for(d=h.firstChild;d;d=d.nextSibling)d.nodeType===1&&(d.nodeIndex=++i);h.sizcache=g}var j=a.nodeIndex-f;return e===0?j===0:j%e===0&&j/e>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=l.attrHandle[c]?l.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=l.setFilters[e];if(f)return f(a,c,b,d)}}},m=l.match.POS,n=function(a,b){return"\\"+(b-0+1)};for(var o in l.match)l.match[o]=new RegExp(l.match[o].source+/(?![^\[]*\])(?![^\(]*\))/.source),l.leftMatch[o]=new RegExp(/(^(?:.|\r|\n)*?)/.source+l.match[o].source.replace(/\\(\d+)/g,n));var p=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(q){p=function(a,b){var c=0,d=b||[];if(e.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var f=a.length;c<f;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var r,s;c.documentElement.compareDocumentPosition?r=function(a,b){if(a===b){g=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(r=function(a,b){if(a===b){g=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],h=a.parentNode,i=b.parentNode,j=h;if(h===i)return s(a,b);if(!h)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return s(e[k],f[k]);return k===c?s(a,f[k],-1):s(e[k],b,1)},s=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),k.getText=function(a){var b="",c;for(var d=0;a[d];d++)c=a[d],c.nodeType===3||c.nodeType===4?b+=c.nodeValue:c.nodeType!==8&&(b+=k.getText(c.childNodes));return b},function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(l.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},l.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(l.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(l.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=k,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){k=function(b,e,f,g){e=e||c;if(!g&&!k.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return p(e.getElementsByTagName(b),f);if(h[2]&&l.find.CLASS&&e.getElementsByClassName)return p(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return p([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return p([],f);if(i.id===h[3])return p([i],f)}try{return p(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var m=e,n=e.getAttribute("id"),o=n||d,q=e.parentNode,r=/^\s*[+~]/.test(b);n?o=o.replace(/'/g,"\\$&"):e.setAttribute("id",o),r&&q&&(e=e.parentNode);try{if(!r||q)return p(e.querySelectorAll("[id='"+o+"'] "+b),f)}catch(s){}finally{n||m.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)k[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}k.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(a))try{if(e||!l.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return k(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;l.order.splice(1,0,"CLASS"),l.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?k.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?k.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:k.contains=function(){return!1},k.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var v=function(a,b){var c,d=[],e="",f=b.nodeType?[b]:b;while(c=l.match.PSEUDO.exec(a))e+=c[0],a=a.replace(l.match.PSEUDO,"");a=l.relative[a]?a+"*":a;for(var g=0,h=f.length;g<h;g++)k(a,f[g],d);return k.filter(e,d)};f.find=k,f.expr=k.selectors,f.expr[":"]=f.expr.filters,f.unique=k.uniqueSort,f.text=k.getText,f.isXMLDoc=k.isXML,f.contains=k.contains}();var P=/Until$/,Q=/^(?:parents|prevUntil|prevAll)/,R=/,/,S=/^.[^:#\[\.,]*$/,T=Array.prototype.slice,U=f.expr.match.POS,V={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(X(this,a,!1),"not",a)},filter:function(a){return this.pushStack(X(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h,i,j={},k=1;if(g&&a.length){for(d=0,e=a.length;d<e;d++)i=a[d],j[i]||(j[i]=U.test(i)?f(i,b||this.context):i);while(g&&g.ownerDocument&&g!==b){for(i in j)h=j[i],(h.jquery?h.index(g)>-1:f(g).is(h))&&c.push({selector:i,elem:g,level:k});g=g.parentNode,k++}}return c}var l=U.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(l?l.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a||typeof a=="string")return f.inArray(this[0],a?f(a):this.parent().children());return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(W(c[0])||W(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c),g=T.call(arguments);P.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!V[a]?f.unique(e):e,(this.length>1||R.test(d))&&Q.test(a)&&(e=e.reverse());return this.pushStack(e,a,g.join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var Y=/ jQuery\d+="(?:\d+|null)"/g,Z=/^\s+/,$=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,_=/<([\w:]+)/,ba=/<tbody/i,bb=/<|&#?\w+;/,bc=/<(?:script|object|embed|option|style)/i,bd=/checked\s*(?:[^=]|=\s*.checked.)/i,be=/\/(java|ecma)script/i,bf=/^\s*<!(?:\[CDATA\[|\-\-)/,bg={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){f(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Y,""):null;if(typeof a=="string"&&!bc.test(a)&&(f.support.leadingWhitespace||!Z.test(a))&&!bg[(_.exec(a)||["",""])[1].toLowerCase()]){a=a.replace($,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bd.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bh(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,bn)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i=b&&b[0]?b[0].ownerDocument||b[0]:c;a.length===1&&typeof a[0]=="string"&&a[0].length<512&&i===c&&a[0].charAt(0)==="<"&&!bc.test(a[0])&&(f.support.checkClone||!bd.test(a[0]))&&(g=!0,h=f.fragments[a[0]],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean(a,i,e,d)),g&&(f.fragments[a[0]]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d=a.cloneNode(!0),e,g,h;if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bj(a,d),e=bk(a),g=bk(d);for(h=0;e[h];++h)bj(e[h],g[h])}if(b){bi(a,d);if(c){e=bk(a),g=bk(d);for(h=0;e[h];++h)bi(e[h],g[h])}}return d},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||
+b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!bb.test(k))k=b.createTextNode(k);else{k=k.replace($,"<$1></$2>");var l=(_.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=ba.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]==="<table>"&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&Z.test(k)&&o.insertBefore(b.createTextNode(Z.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i<r;i++)bm(k[i]);else bm(k);k.nodeType?h.push(k):h=f.merge(h,k)}if(d){g=function(a){return!a.type||be.test(a.type)};for(j=0;h[j];j++)if(e&&f.nodeName(h[j],"script")&&(!h[j].type||h[j].type.toLowerCase()==="text/javascript"))e.push(h[j].parentNode?h[j].parentNode.removeChild(h[j]):h[j]);else{if(h[j].nodeType===1){var s=f.grep(h[j].getElementsByTagName("script"),g);h.splice.apply(h,[j+1,0].concat(s))}d.appendChild(h[j])}}return h},cleanData:function(a){var b,c,d=f.cache,e=f.expando,g=f.event.special,h=f.support.deleteExpando;for(var i=0,j;(j=a[i])!=null;i++){if(j.nodeName&&f.noData[j.nodeName.toLowerCase()])continue;c=j[f.expando];if(c){b=d[c]&&d[c][e];if(b&&b.events){for(var k in b.events)g[k]?f.event.remove(j,k):f.removeEvent(j,k,b.handle);b.handle&&(b.handle.elem=null)}h?delete j[f.expando]:j.removeAttribute&&j.removeAttribute(f.expando),delete d[c]}}}});var bo=/alpha\([^)]*\)/i,bp=/opacity=([^)]*)/,bq=/-([a-z])/ig,br=/([A-Z]|^ms)/g,bs=/^-?\d+(?:px)?$/i,bt=/^-?\d/,bu=/^[+\-]=/,bv=/[^+\-\.\de]+/g,bw={position:"absolute",visibility:"hidden",display:"block"},bx=["Left","Right"],by=["Top","Bottom"],bz,bA,bB,bC=function(a,b){return b.toUpperCase()};f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bz(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{zIndex:!0,fontWeight:!0,opacity:!0,zoom:!0,lineHeight:!0,widows:!0,orphans:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d;if(h==="number"&&isNaN(d)||d==null)return;h==="string"&&bu.test(d)&&(d=+d.replace(bv,"")+parseFloat(f.css(a,c))),h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(bz)return bz(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]},camelCase:function(a){return a.replace(bq,bC)}}),f.curCSS=f.css,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){var e;if(c){a.offsetWidth!==0?e=bD(a,b,d):f.swap(a,bw,function(){e=bD(a,b,d)});if(e<=0){e=bz(a,b,b),e==="0px"&&bB&&(e=bB(a,b,b));if(e!=null)return e===""||e==="auto"?"0px":e}if(e<0||e==null){e=a.style[b];return e===""||e==="auto"?"0px":e}return typeof e=="string"?e:e+"px"}},set:function(a,b){if(!bs.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bp.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle;c.zoom=1;var e=f.isNaN(b)?"":"alpha(opacity="+b*100+")",g=d&&d.filter||c.filter||"";c.filter=bo.test(g)?g.replace(bo,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,c){var d,e,g;c=c.replace(br,"-$1").toLowerCase();if(!(e=a.ownerDocument.defaultView))return b;if(g=e.getComputedStyle(a,null))d=g.getPropertyValue(c),d===""&&!f.contains(a.ownerDocument.documentElement,a)&&(d=f.style(a,c));return d}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d=a.currentStyle&&a.currentStyle[b],e=a.runtimeStyle&&a.runtimeStyle[b],f=a.style;!bs.test(d)&&bt.test(d)&&(c=f.left,e&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":d||0,d=f.pixelLeft+"px",f.left=c,e&&(a.runtimeStyle.left=e));return d===""?"auto":d}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bE=/%20/g,bF=/\[\]$/,bG=/\r?\n/g,bH=/#.*$/,bI=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bJ=/^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bK=/^(?:about|app|app\-storage|.+\-extension|file|widget):$/,bL=/^(?:GET|HEAD)$/,bM=/^\/\//,bN=/\?/,bO=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bP=/^(?:select|textarea)/i,bQ=/\s+/,bR=/([?&])_=[^&]*/,bS=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bT=f.fn.load,bU={},bV={},bW,bX;try{bW=e.href}catch(bY){bW=c.createElement("a"),bW.href="",bW=bW.href}bX=bS.exec(bW.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bT)return bT.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bO,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bP.test(this.nodeName)||bJ.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bG,"\r\n")}}):{name:b.name,value:c.replace(bG,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.bind(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?f.extend(!0,a,f.ajaxSettings,b):(b=a,a=f.extend(!0,f.ajaxSettings,b));for(var c in{context:1,url:1})c in b?a[c]=b[c]:c in f.ajaxSettings&&(a[c]=f.ajaxSettings[c]);return a},ajaxSettings:{url:bW,isLocal:bK.test(bX[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":"*/*"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML}},ajaxPrefilter:bZ(bU),ajaxTransport:bZ(bV),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a?4:0;var o,r,u,w=l?ca(d,v,l):b,x,y;if(a>=200&&a<300||a===304){if(d.ifModified){if(x=v.getResponseHeader("Last-Modified"))f.lastModified[k]=x;if(y=v.getResponseHeader("Etag"))f.etag[k]=y}if(a===304)c="notmodified",o=!0;else try{r=cb(d,w),c="success",o=!0}catch(z){c="parsererror",u=z}}else{u=c;if(!c||a)c="error",a<0&&(a=0)}v.status=a,v.statusText=c,o?h.resolveWith(e,[r,c,v]):h.rejectWith(e,[v,c,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.resolveWith(e,[v,c]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f._Deferred(),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bI.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.done,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bH,"").replace(bM,bX[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bQ),d.crossDomain==null&&(r=bS.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bX[1]&&r[2]==bX[2]&&(r[3]||(r[1]==="http:"?80:443))==(bX[3]||(bX[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bU,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bL.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bN.test(d.url)?"&":"?")+d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bR,"$1_="+x);d.url=y+(y===d.url?(bN.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", */*; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bV,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){status<2?w(-1,z):f.error(z)}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)b_(g,a[g],c,e);return d.join("&").replace(bE,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cc=f.now(),cd=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cc++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(cd.test(b.url)||e&&cd.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(cd,l),b.url===j&&(e&&(k=k.replace(cd,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var ce=a.ActiveXObject?function(){for(var a in cg)cg[a](0,1)}:!1,cf=0,cg;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ch()||ci()}:ch,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,ce&&delete cg[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cf,ce&&(cg||(cg={},f(a).unload(ce)),cg[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cj={},ck,cl,cm=/^(?:toggle|show|hide)$/,cn=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,co,cp=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cq,cr=a.webkitRequestAnimationFrame||a.mozRequestAnimationFrame||a.oRequestAnimationFrame;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),e===""&&f.css(d,"display")==="none"&&f._data(d,"olddisplay",cv(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(cu("hide",3),a,b,c);for(var d=0,e=this.length;d<e;d++)if(this[d].style){var g=f.css(this[d],"display");g!=="none"&&!f._data(this[d],"olddisplay")&&f._data(this[d],"olddisplay",g)}for(d=0;d<e;d++)this[d].style&&(this[d].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(cu("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return this[e.queue===!1?"each":"queue"](function(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||"swing";if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(f.support.inlineBlockNeedsLayout?(j=cv(this.nodeName),j==="inline"?this.style.display="inline-block":(this.style.display="inline",this.style.zoom=1)):this.style.display="inline-block"))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)k=new f.fx(this,b,i),h=a[i],cm.test(h)?k[h==="toggle"?d?"show":"hide":h]():(l=cn.exec(h),m=k.cur(),l?(n=parseFloat(l[2]),o=l[3]||(f.cssNumber[i]?"":"px"),o!=="px"&&(f.style(this,i,(n||1)+o),m=(n||1)/k.cur()*m,f.style(this,i,m+o)),l[1]&&(n=(l[1]==="-="?-1:1)*n+m),k.custom(m,n,o)):k.custom(m,h,""));return!0})},stop:function(a,b){a&&this.queue([]),this.each(function(){var a=f.timers,c=a.length;b||f._unmark(!0,this);while(c--)a[c].elem===this&&(b&&a[c](!0),a.splice(c,1))}),b||this.dequeue();return this}}),f.each({slideDown:cu("show",1),slideUp:cu("hide",1),slideToggle:cu("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default,d.old=d.complete,d.complete=function(a){d.queue!==!1?f.dequeue(this):a!==!1&&f._unmark(this),f.isFunction(d.old)&&d.old.call(this)};return d},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,b,c){function h(a){return d.step(a)}var d=this,e=f.fx,g;this.startTime=cq||cs(),this.start=a,this.end=b,this.unit=c||this.unit||(f.cssNumber[this.prop]?"":"px"),this.now=this.start,this.pos=this.state=0,h.elem=this.elem,h()&&f.timers.push(h)&&!co&&(cr?(co=1,g=function(){co&&(cr(g),e.tick())},cr(g)):co=setInterval(e.tick,e.interval))},show:function(){this.options.orig[this.prop]=f.style(this.elem,this.prop),this.options.show=!0,this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b=cq||cs(),c=!0,d=this.elem,e=this.options,g,h;if(a||b>=e.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),e.animatedProperties[this.prop]=!0;for(g in e.animatedProperties)e.animatedProperties[g]!==!0&&(c=!1);if(c){e.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){d.style["overflow"+b]=e.overflow[a]}),e.hide&&f(d).hide();if(e.hide||e.show)for(var i in e.animatedProperties)f.style(d,i,e.orig[i]);e.complete.call(d)}return!1}e.duration==Infinity?this.now=b:(h=b-this.startTime,this.state=h/e.duration,this.pos=f.easing[e.animatedProperties[this.prop]](this.state,h,0,1,e.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){for(var a=f.timers,b=0;b<a.length;++b)a[b]()||a.splice(b--,1);a.length||f.fx.stop()},interval:13,stop:function(){clearInterval(co),co=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit:a.elem[a.prop]=a.now}}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cw=/^t(?:able|d|h)$/i,cx=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?f.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,g=e.documentElement;if(!c||!f.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=e.body,i=cy(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);f.offset.initialize();var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.offset.supportsFixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.offset.doesNotAddBorder&&(!f.offset.doesAddBorderForTableAndCells||!cw.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.offset.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;f.offset.supportsFixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={initialize:function(){var a=c.body,b=c.createElement("div"),d,e,g,h,i=parseFloat(f.css(a,"marginTop"))||0,j="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";f.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"}),b.innerHTML=j,a.insertBefore(b,a.firstChild),d=b.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,this.doesNotAddBorder=e.offsetTop!==5,this.doesAddBorderForTableAndCells=h.offsetTop===5,e.style.position="fixed",e.style.top="20px",this.supportsFixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",this.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==i,a.removeChild(b),f.offset.initialize=f.noop},bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.offset.initialize(),f.offset.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){return this[0]?parseFloat(f.css(this[0],d,"padding")):null},f.fn["outer"+c]=function(a){return this[0]?parseFloat(f.css(this[0],d,a?"margin":"border")):null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c];return e.document.compatMode==="CSS1Compat"&&g||e.document.body["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var h=f.css(e,d),i=parseFloat(h);return f.isNaN(i)?h:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f})(window);
\ No newline at end of file
diff --git a/js/modernizr/test/caniuse_files/modernizr-1.7.min.js b/js/modernizr/test/caniuse_files/modernizr-1.7.min.js
new file mode 100644 (file)
index 0000000..6f54850
--- /dev/null
@@ -0,0 +1,2 @@
+// Modernizr v1.7  www.modernizr.com
+window.Modernizr=function(a,b,c){function G(){e.input=function(a){for(var b=0,c=a.length;b<c;b++)t[a[b]]=!!(a[b]in l);return t}("autocomplete autofocus list placeholder max min multiple pattern required step".split(" ")),e.inputtypes=function(a){for(var d=0,e,f,h,i=a.length;d<i;d++)l.setAttribute("type",f=a[d]),e=l.type!=="text",e&&(l.value=m,l.style.cssText="position:absolute;visibility:hidden;",/^range$/.test(f)&&l.style.WebkitAppearance!==c?(g.appendChild(l),h=b.defaultView,e=h.getComputedStyle&&h.getComputedStyle(l,null).WebkitAppearance!=="textfield"&&l.offsetHeight!==0,g.removeChild(l)):/^(search|tel)$/.test(f)||(/^(url|email)$/.test(f)?e=l.checkValidity&&l.checkValidity()===!1:/^color$/.test(f)?(g.appendChild(l),g.offsetWidth,e=l.value!=m,g.removeChild(l)):e=l.value!=m)),s[a[d]]=!!e;return s}("search tel url email datetime date month week time datetime-local number range color".split(" "))}function F(a,b){var c=a.charAt(0).toUpperCase()+a.substr(1),d=(a+" "+p.join(c+" ")+c).split(" ");return!!E(d,b)}function E(a,b){for(var d in a)if(k[a[d]]!==c&&(!b||b(a[d],j)))return!0}function D(a,b){return(""+a).indexOf(b)!==-1}function C(a,b){return typeof a===b}function B(a,b){return A(o.join(a+";")+(b||""))}function A(a){k.cssText=a}var d="1.7",e={},f=!0,g=b.documentElement,h=b.head||b.getElementsByTagName("head")[0],i="modernizr",j=b.createElement(i),k=j.style,l=b.createElement("input"),m=":)",n=Object.prototype.toString,o=" -webkit- -moz- -o- -ms- -khtml- ".split(" "),p="Webkit Moz O ms Khtml".split(" "),q={svg:"http://www.w3.org/2000/svg"},r={},s={},t={},u=[],v,w=function(a){var c=b.createElement("style"),d=b.createElement("div"),e;c.textContent=a+"{#modernizr{height:3px}}",h.appendChild(c),d.id="modernizr",g.appendChild(d),e=d.offsetHeight===3,c.parentNode.removeChild(c),d.parentNode.removeChild(d);return!!e},x=function(){function d(d,e){e=e||b.createElement(a[d]||"div");var f=(d="on"+d)in e;f||(e.setAttribute||(e=b.createElement("div")),e.setAttribute&&e.removeAttribute&&(e.setAttribute(d,""),f=C(e[d],"function"),C(e[d],c)||(e[d]=c),e.removeAttribute(d))),e=null;return f}var a={select:"input",change:"input",submit:"form",reset:"form",error:"img",load:"img",abort:"img"};return d}(),y=({}).hasOwnProperty,z;C(y,c)||C(y.call,c)?z=function(a,b){return b in a&&C(a.constructor.prototype[b],c)}:z=function(a,b){return y.call(a,b)},r.flexbox=function(){function c(a,b,c,d){a.style.cssText=o.join(b+":"+c+";")+(d||"")}function a(a,b,c,d){b+=":",a.style.cssText=(b+o.join(c+";"+b)).slice(0,-b.length)+(d||"")}var d=b.createElement("div"),e=b.createElement("div");a(d,"display","box","width:42px;padding:0;"),c(e,"box-flex","1","width:10px;"),d.appendChild(e),g.appendChild(d);var f=e.offsetWidth===42;d.removeChild(e),g.removeChild(d);return f},r.canvas=function(){var a=b.createElement("canvas");return a.getContext&&a.getContext("2d")},r.canvastext=function(){return e.canvas&&C(b.createElement("canvas").getContext("2d").fillText,"function")},r.webgl=function(){return!!a.WebGLRenderingContext},r.touch=function(){return"ontouchstart"in a||w("@media ("+o.join("touch-enabled),(")+"modernizr)")},r.geolocation=function(){return!!navigator.geolocation},r.postmessage=function(){return!!a.postMessage},r.websqldatabase=function(){var b=!!a.openDatabase;return b},r.indexedDB=function(){for(var b=-1,c=p.length;++b<c;){var d=p[b].toLowerCase();if(a[d+"_indexedDB"]||a[d+"IndexedDB"])return!0}return!1},r.hashchange=function(){return x("hashchange",a)&&(b.documentMode===c||b.documentMode>7)},r.history=function(){return !!(a.history&&history.pushState)},r.draganddrop=function(){return x("dragstart")&&x("drop")},r.websockets=function(){return"WebSocket"in a},r.rgba=function(){A("background-color:rgba(150,255,150,.5)");return D(k.backgroundColor,"rgba")},r.hsla=function(){A("background-color:hsla(120,40%,100%,.5)");return D(k.backgroundColor,"rgba")||D(k.backgroundColor,"hsla")},r.multiplebgs=function(){A("background:url(//:),url(//:),red url(//:)");return(new RegExp("(url\\s*\\(.*?){3}")).test(k.background)},r.backgroundsize=function(){return F("backgroundSize")},r.borderimage=function(){return F("borderImage")},r.borderradius=function(){return F("borderRadius","",function(a){return D(a,"orderRadius")})},r.boxshadow=function(){return F("boxShadow")},r.textshadow=function(){return b.createElement("div").style.textShadow===""},r.opacity=function(){B("opacity:.55");return/^0.55$/.test(k.opacity)},r.cssanimations=function(){return F("animationName")},r.csscolumns=function(){return F("columnCount")},r.cssgradients=function(){var a="background-image:",b="gradient(linear,left top,right bottom,from(#9f9),to(white));",c="linear-gradient(left top,#9f9, white);";A((a+o.join(b+a)+o.join(c+a)).slice(0,-a.length));return D(k.backgroundImage,"gradient")},r.cssreflections=function(){return F("boxReflect")},r.csstransforms=function(){return!!E(["transformProperty","WebkitTransform","MozTransform","OTransform","msTransform"])},r.csstransforms3d=function(){var a=!!E(["perspectiveProperty","WebkitPerspective","MozPerspective","OPerspective","msPerspective"]);a&&"webkitPerspective"in g.style&&(a=w("@media ("+o.join("transform-3d),(")+"modernizr)"));return a},r.csstransitions=function(){return F("transitionProperty")},r.fontface=function(){var a,c,d=h||g,e=b.createElement("style"),f=b.implementation||{hasFeature:function(){return!1}};e.type="text/css",d.insertBefore(e,d.firstChild),a=e.sheet||e.styleSheet;var i=f.hasFeature("CSS2","")?function(b){if(!a||!b)return!1;var c=!1;try{a.insertRule(b,0),c=/src/i.test(a.cssRules[0].cssText),a.deleteRule(a.cssRules.length-1)}catch(d){}return c}:function(b){if(!a||!b)return!1;a.cssText=b;return a.cssText.length!==0&&/src/i.test(a.cssText)&&a.cssText.replace(/\r+|\n+/g,"").indexOf(b.split(" ")[0])===0};c=i('@font-face { font-family: "font"; src: url(data:,); }'),d.removeChild(e);return c},r.video=function(){var a=b.createElement("video"),c=!!a.canPlayType;if(c){c=new Boolean(c),c.ogg=a.canPlayType('video/ogg; codecs="theora"');var d='video/mp4; codecs="avc1.42E01E';c.h264=a.canPlayType(d+'"')||a.canPlayType(d+', mp4a.40.2"'),c.webm=a.canPlayType('video/webm; codecs="vp8, vorbis"')}return c},r.audio=function(){var a=b.createElement("audio"),c=!!a.canPlayType;c&&(c=new Boolean(c),c.ogg=a.canPlayType('audio/ogg; codecs="vorbis"'),c.mp3=a.canPlayType("audio/mpeg;"),c.wav=a.canPlayType('audio/wav; codecs="1"'),c.m4a=a.canPlayType("audio/x-m4a;")||a.canPlayType("audio/aac;"));return c},r.localstorage=function(){try{return!!localStorage.getItem}catch(a){return!1}},r.sessionstorage=function(){try{return!!sessionStorage.getItem}catch(a){return!1}},r.webWorkers=function(){return!!a.Worker},r.applicationcache=function(){return!!a.applicationCache},r.svg=function(){return!!b.createElementNS&&!!b.createElementNS(q.svg,"svg").createSVGRect},r.inlinesvg=function(){var a=b.createElement("div");a.innerHTML="<svg/>";return(a.firstChild&&a.firstChild.namespaceURI)==q.svg},r.smil=function(){return!!b.createElementNS&&/SVG/.test(n.call(b.createElementNS(q.svg,"animate")))},r.svgclippaths=function(){return!!b.createElementNS&&/SVG/.test(n.call(b.createElementNS(q.svg,"clipPath")))};for(var H in r)z(r,H)&&(v=H.toLowerCase(),e[v]=r[H](),u.push((e[v]?"":"no-")+v));e.input||G(),e.crosswindowmessaging=e.postmessage,e.historymanagement=e.history,e.addTest=function(a,b){a=a.toLowerCase();if(!e[a]){b=!!b(),g.className+=" "+(b?"":"no-")+a,e[a]=b;return e}},A(""),j=l=null,f&&a.attachEvent&&function(){var a=b.createElement("div");a.innerHTML="<elem></elem>";return a.childNodes.length!==1}()&&function(a,b){function p(a,b){var c=-1,d=a.length,e,f=[];while(++c<d)e=a[c],(b=e.media||b)!="screen"&&f.push(p(e.imports,b),e.cssText);return f.join("")}function o(a){var b=-1;while(++b<e)a.createElement(d[b])}var c="abbr|article|aside|audio|canvas|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",d=c.split("|"),e=d.length,f=new RegExp("(^|\\s)("+c+")","gi"),g=new RegExp("<(/*)("+c+")","gi"),h=new RegExp("(^|[^\\n]*?\\s)("+c+")([^\\n]*)({[\\n\\w\\W]*?})","gi"),i=b.createDocumentFragment(),j=b.documentElement,k=j.firstChild,l=b.createElement("body"),m=b.createElement("style"),n;o(b),o(i),k.insertBefore(m,k.firstChild),m.media="print",a.attachEvent("onbeforeprint",function(){var a=-1,c=p(b.styleSheets,"all"),k=[],o;n=n||b.body;while((o=h.exec(c))!=null)k.push((o[1]+o[2]+o[3]).replace(f,"$1.iepp_$2")+o[4]);m.styleSheet.cssText=k.join("\n");while(++a<e){var q=b.getElementsByTagName(d[a]),r=q.length,s=-1;while(++s<r)q[s].className.indexOf("iepp_")<0&&(q[s].className+=" iepp_"+d[a])}i.appendChild(n),j.appendChild(l),l.className=n.className,l.innerHTML=n.innerHTML.replace(g,"<$1font")}),a.attachEvent("onafterprint",function(){l.innerHTML="",j.removeChild(l),j.appendChild(n),m.styleSheet.cssText=""})}(a,b),e._enableHTML5=f,e._version=d,g.className=g.className.replace(/\bno-js\b/,"")+" js "+u.join(" ");return e}(this,this.document)
\ No newline at end of file
diff --git a/js/modernizr/test/js/dumpdata.js b/js/modernizr/test/js/dumpdata.js
new file mode 100644 (file)
index 0000000..43c667b
--- /dev/null
@@ -0,0 +1,75 @@
+function dumpModernizr(){
+  var str = '';
+  dumpModernizr.old = dumpModernizr.old || {};
+
+    for (var prop in Modernizr) {
+
+      // skip previously done ones.
+      if (dumpModernizr.old[prop]) continue;
+      else dumpModernizr.old[prop] = true;
+
+      if (typeof Modernizr[prop] === 'function') continue;
+      // skip unit test items
+      if (/^test/.test(prop)) continue;
+
+      if (~TEST.inputs.indexOf(prop)) {
+        str += '<li><b>'+prop+'{}</b><ul>';
+        for (var field in Modernizr[prop]) {
+          str += '<li class="' + (Modernizr[prop][field] ? 'yes' : '') + '">' + field + ': ' + Modernizr[prop][field] + '</li>';
+        }
+        str += '</ul></li>';
+      } else {
+        str += '<li  id="'+prop+'" class="' + (Modernizr[prop] ? 'yes' : '') + '">' + prop + ': ' + Modernizr[prop] + '</li>';
+      }
+  }
+  return str;
+}
+
+
+function grabFeatDetects(){
+  // thx github.js
+  $.getScript('https://api.github.com/repos/Modernizr/Modernizr/git/trees/master?recursive=1&callback=processTree');
+}
+
+
+function processTree(data){
+  var filenames = [];
+
+  for (var i = 0; i < data.data.tree.length; i++){
+    var file = data.data.tree[i];
+    var match = file.path.match(/^feature-detects\/(.*)/);
+    if (!match) continue;
+
+    var relpath = location.host == "modernizr.github.com" ?
+                    '../modernizr-git/' : '../';
+
+    filenames.push(relpath + match[0]);
+  }
+
+  var jqxhrs = filenames.map(function(filename){
+    return jQuery.getScript(filename);
+  });
+
+  jQuery.when.apply(jQuery, jqxhrs).done(resultsToDOM);
+
+}
+
+function resultsToDOM(){
+
+  var modOutput = document.createElement('div'),
+      ref = document.getElementById('qunit-testresult') || document.getElementById('qunit-tests');
+
+  modOutput.className = 'output';
+  modOutput.innerHTML = dumpModernizr();
+
+  ref.parentNode.insertBefore(modOutput, ref);
+
+  // Modernizr object as text
+  document.getElementsByTagName('textarea')[0].innerHTML = JSON.stringify(Modernizr);
+
+}
+
+/* uno    */ resultsToDOM();
+/* dos    */ grabFeatDetects();
+/* tres   */ setTimeout(resultsToDOM,  5e3);
+/* quatro */ setTimeout(resultsToDOM, 15e3);
diff --git a/js/modernizr/test/js/lib/detect-global.js b/js/modernizr/test/js/lib/detect-global.js
new file mode 100644 (file)
index 0000000..48b4ac2
--- /dev/null
@@ -0,0 +1,153 @@
+// https://github.com/kangax/detect-global
+
+// tweaked to run without a UI.
+
+(function () {
+    function getPropertyDescriptors(object) {
+      var props = { };
+      for (var prop in object) {
+        
+        // nerfing for firefox who goes crazy over some objects like sessionStorage
+        try {
+          
+          props[prop] = {
+            type:  typeof object[prop],
+            value: object[prop]
+          };
+          
+        } catch(e){
+          props[prop] = {}; 
+        }
+      }
+      return props;
+    }
+    
+    function getCleanWindow() {
+      var elIframe = document.createElement('iframe');
+      elIframe.style.display = 'none';
+      
+      var ref = document.getElementsByTagName('script')[0];
+      ref.parentNode.insertBefore(elIframe, ref);
+      
+      elIframe.src = 'about:blank';
+      return elIframe.contentWindow;
+    }
+    
+    function appendControl(el, name) {
+      var elCheckbox = document.createElement('input');
+      elCheckbox.type = 'checkbox';
+      elCheckbox.checked = true;
+      elCheckbox.id = '__' + name;
+      
+      var elLabel = document.createElement('label');
+      elLabel.htmlFor = '__' + name;
+      elLabel.innerHTML = 'Exclude ' + name + ' properties?';
+      elLabel.style.marginLeft = '0.5em';
+      
+      var elWrapper = document.createElement('p');
+      elWrapper.style.marginBottom = '0.5em';
+      
+      elWrapper.appendChild(elCheckbox);
+      elWrapper.appendChild(elLabel);
+
+      el.appendChild(elWrapper);
+    }
+    
+    function appendAnalyze(el) {
+      var elAnalyze = document.createElement('button');
+      elAnalyze.id = '__analyze';
+      elAnalyze.innerHTML = 'Analyze';
+      elAnalyze.style.marginTop = '1em';
+      el.appendChild(elAnalyze);
+    }
+    
+    function appendCancel(el) {
+      var elCancel = document.createElement('a');
+      elCancel.href = '#';
+      elCancel.innerHTML = 'Cancel';
+      elCancel.style.cssText = 'color:#eee;margin-left:0.5em;';
+      elCancel.onclick = function() {
+        el.parentNode.removeChild(el);
+        return false; 
+      };
+      el.appendChild(elCancel);
+    }
+    
+    function initConfigPopup() {
+      var el = document.createElement('div');
+      
+      el.style.cssText =  'position:fixed; left:10px; top:10px; width:300px; background:rgba(50,50,50,0.9);' +
+                          '-moz-border-radius:10px; padding:1em; color: #eee; text-align: left;' +
+                          'font-family: "Helvetica Neue", Verdana, Arial, sans serif; z-index: 99999;';
+      
+      for (var prop in propSets) {
+        appendControl(el, prop);
+      }
+      
+      appendAnalyze(el);
+      appendCancel(el);
+      
+      var ref = document.getElementsByTagName('script')[0];
+      ref.parentNode.insertBefore(el, ref);
+    }
+    
+    function getPropsCount(object) {
+      var count = 0;
+      for (var prop in object) {
+        count++;
+      }
+      return count;
+    }
+    
+    function shouldDeleteProperty(propToCheck) {
+      for (var prop in propSets) {
+        var elCheckbox = document.getElementById('__' + prop);
+        var isPropInSet = propSets[prop].indexOf(propToCheck) > -1;
+        if (isPropInSet && (elCheckbox ? elCheckbox.checked : true) ) {
+          return true;
+        }
+      }
+    }
+    
+    function analyze() {
+      var global = (function(){ return this; })(),
+          globalProps = getPropertyDescriptors(global),
+          cleanWindow = getCleanWindow();
+          
+      for (var prop in cleanWindow) {
+        if (globalProps[prop]) {
+          delete globalProps[prop];
+        }
+      }
+      for (var prop in globalProps) {
+        if (shouldDeleteProperty(prop)) {
+          delete globalProps[prop];
+        }
+      }
+      
+      window.__globalsCount = getPropsCount(globalProps);
+      window.__globals      = globalProps;
+      
+      window.console && console.log('Total number of global properties: ' + __globalsCount);
+      window.console && console.dir(__globals);
+    }
+    
+    var propSets = {
+      'Prototype':        '$$ $A $F $H $R $break $continue $w Abstract Ajax Class Enumerable Element Field Form ' +
+                          'Hash Insertion ObjectRange PeriodicalExecuter Position Prototype Selector Template Toggle Try'.split(' '),
+                        
+      'Scriptaculous':    'Autocompleter Builder Control Draggable Draggables Droppables Effect Sortable SortableObserver Sound Scriptaculous'.split(' '),
+      'Firebug':          'loadFirebugConsole console _getFirebugConsoleElement _FirebugConsole _FirebugCommandLine _firebug'.split(' '),
+      'Mozilla':          'Components XPCNativeWrapper XPCSafeJSObjectWrapper getInterface netscape GetWeakReference GeckoActiveXObject'.split(' '),
+      'GoogleAnalytics':  'gaJsHost gaGlobal _gat _gaq pageTracker'.split(' '),
+      'lazyGlobals':      'onhashchange'.split(' ')
+    };
+    
+    // initConfigPopup(); // disable because we're going UI-less.
+    
+    var analyzeElem = document.getElementById('__analyze');
+    analyzeElem && (analyzeElem.onclick = analyze);
+    
+    analyze(); // and assign total added globals to window.__globalsCount
+    
+})();
\ No newline at end of file
diff --git a/js/modernizr/test/js/lib/jquery-1.7b2.js b/js/modernizr/test/js/lib/jquery-1.7b2.js
new file mode 100644 (file)
index 0000000..98c6d0d
--- /dev/null
@@ -0,0 +1,9279 @@
+/*!
+ * jQuery JavaScript Library v1.7b2
+ * http://jquery.com/
+ *
+ * Copyright 2011, John Resig
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * Includes Sizzle.js
+ * http://sizzlejs.com/
+ * Copyright 2011, The Dojo Foundation
+ * Released under the MIT, BSD, and GPL Licenses.
+ *
+ * Date: Thu Oct 13 21:12:55 2011 -0400
+ */
+(function( window, undefined ) {
+
+// Use the correct document accordingly with window argument (sandbox)
+var document = window.document,
+       navigator = window.navigator,
+       location = window.location;
+var jQuery = (function() {
+
+// Define a local copy of jQuery
+var jQuery = function( selector, context ) {
+               // The jQuery object is actually just the init constructor 'enhanced'
+               return new jQuery.fn.init( selector, context, rootjQuery );
+       },
+
+       // Map over jQuery in case of overwrite
+       _jQuery = window.jQuery,
+
+       // Map over the $ in case of overwrite
+       _$ = window.$,
+
+       // A central reference to the root jQuery(document)
+       rootjQuery,
+
+       // A simple way to check for HTML strings or ID strings
+       // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
+       quickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,
+
+       // Check if a string has a non-whitespace character in it
+       rnotwhite = /\S/,
+
+       // Used for trimming whitespace
+       trimLeft = /^\s+/,
+       trimRight = /\s+$/,
+
+       // Check for digits
+       rdigit = /\d/,
+
+       // Match a standalone tag
+       rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/,
+
+       // JSON RegExp
+       rvalidchars = /^[\],:{}\s]*$/,
+       rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,
+       rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,
+       rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g,
+
+       // Useragent RegExp
+       rwebkit = /(webkit)[ \/]([\w.]+)/,
+       ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/,
+       rmsie = /(msie) ([\w.]+)/,
+       rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/,
+
+       // Matches dashed string for camelizing
+       rdashAlpha = /-([a-z]|[0-9])/ig,
+       rmsPrefix = /^-ms-/,
+
+       // Used by jQuery.camelCase as callback to replace()
+       fcamelCase = function( all, letter ) {
+               return ( letter + "" ).toUpperCase();
+       },
+
+       // Keep a UserAgent string for use with jQuery.browser
+       userAgent = navigator.userAgent,
+
+       // For matching the engine and version of the browser
+       browserMatch,
+
+       // The deferred used on DOM ready
+       readyList,
+
+       // The ready event handler
+       DOMContentLoaded,
+
+       // Save a reference to some core methods
+       toString = Object.prototype.toString,
+       hasOwn = Object.prototype.hasOwnProperty,
+       push = Array.prototype.push,
+       slice = Array.prototype.slice,
+       trim = String.prototype.trim,
+       indexOf = Array.prototype.indexOf,
+
+       // [[Class]] -> type pairs
+       class2type = {};
+
+jQuery.fn = jQuery.prototype = {
+       constructor: jQuery,
+       init: function( selector, context, rootjQuery ) {
+               var match, elem, ret, doc;
+
+               // Handle $(""), $(null), or $(undefined)
+               if ( !selector ) {
+                       return this;
+               }
+
+               // Handle $(DOMElement)
+               if ( selector.nodeType ) {
+                       this.context = this[0] = selector;
+                       this.length = 1;
+                       return this;
+               }
+
+               // The body element only exists once, optimize finding it
+               if ( selector === "body" && !context && document.body ) {
+                       this.context = document;
+                       this[0] = document.body;
+                       this.selector = selector;
+                       this.length = 1;
+                       return this;
+               }
+
+               // Handle HTML strings
+               if ( typeof selector === "string" ) {
+                       // Are we dealing with HTML string or an ID?
+                       if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) {
+                               // Assume that strings that start and end with <> are HTML and skip the regex check
+                               match = [ null, selector, null ];
+
+                       } else {
+                               match = quickExpr.exec( selector );
+                       }
+
+                       // Verify a match, and that no context was specified for #id
+                       if ( match && (match[1] || !context) ) {
+
+                               // HANDLE: $(html) -> $(array)
+                               if ( match[1] ) {
+                                       context = context instanceof jQuery ? context[0] : context;
+                                       doc = (context ? context.ownerDocument || context : document);
+
+                                       // If a single string is passed in and it's a single tag
+                                       // just do a createElement and skip the rest
+                                       ret = rsingleTag.exec( selector );
+
+                                       if ( ret ) {
+                                               if ( jQuery.isPlainObject( context ) ) {
+                                                       selector = [ document.createElement( ret[1] ) ];
+                                                       jQuery.fn.attr.call( selector, context, true );
+
+                                               } else {
+                                                       selector = [ doc.createElement( ret[1] ) ];
+                                               }
+
+                                       } else {
+                                               ret = jQuery.buildFragment( [ match[1] ], [ doc ] );
+                                               selector = (ret.cacheable ? jQuery.clone(ret.fragment) : ret.fragment).childNodes;
+                                       }
+
+                                       return jQuery.merge( this, selector );
+
+                               // HANDLE: $("#id")
+                               } else {
+                                       elem = document.getElementById( match[2] );
+
+                                       // Check parentNode to catch when Blackberry 4.6 returns
+                                       // nodes that are no longer in the document #6963
+                                       if ( elem && elem.parentNode ) {
+                                               // Handle the case where IE and Opera return items
+                                               // by name instead of ID
+                                               if ( elem.id !== match[2] ) {
+                                                       return rootjQuery.find( selector );
+                                               }
+
+                                               // Otherwise, we inject the element directly into the jQuery object
+                                               this.length = 1;
+                                               this[0] = elem;
+                                       }
+
+                                       this.context = document;
+                                       this.selector = selector;
+                                       return this;
+                               }
+
+                       // HANDLE: $(expr, $(...))
+                       } else if ( !context || context.jquery ) {
+                               return (context || rootjQuery).find( selector );
+
+                       // HANDLE: $(expr, context)
+                       // (which is just equivalent to: $(context).find(expr)
+                       } else {
+                               return this.constructor( context ).find( selector );
+                       }
+
+               // HANDLE: $(function)
+               // Shortcut for document ready
+               } else if ( jQuery.isFunction( selector ) ) {
+                       return rootjQuery.ready( selector );
+               }
+
+               if (selector.selector !== undefined) {
+                       this.selector = selector.selector;
+                       this.context = selector.context;
+               }
+
+               return jQuery.makeArray( selector, this );
+       },
+
+       // Start with an empty selector
+       selector: "",
+
+       // The current version of jQuery being used
+       jquery: "1.7b2",
+
+       // The default length of a jQuery object is 0
+       length: 0,
+
+       // The number of elements contained in the matched element set
+       size: function() {
+               return this.length;
+       },
+
+       toArray: function() {
+               return slice.call( this, 0 );
+       },
+
+       // Get the Nth element in the matched element set OR
+       // Get the whole matched element set as a clean array
+       get: function( num ) {
+               return num == null ?
+
+                       // Return a 'clean' array
+                       this.toArray() :
+
+                       // Return just the object
+                       ( num < 0 ? this[ this.length + num ] : this[ num ] );
+       },
+
+       // Take an array of elements and push it onto the stack
+       // (returning the new matched element set)
+       pushStack: function( elems, name, selector ) {
+               // Build a new jQuery matched element set
+               var ret = this.constructor();
+
+               if ( jQuery.isArray( elems ) ) {
+                       push.apply( ret, elems );
+
+               } else {
+                       jQuery.merge( ret, elems );
+               }
+
+               // Add the old object onto the stack (as a reference)
+               ret.prevObject = this;
+
+               ret.context = this.context;
+
+               if ( name === "find" ) {
+                       ret.selector = this.selector + (this.selector ? " " : "") + selector;
+               } else if ( name ) {
+                       ret.selector = this.selector + "." + name + "(" + selector + ")";
+               }
+
+               // Return the newly-formed element set
+               return ret;
+       },
+
+       // Execute a callback for every element in the matched set.
+       // (You can seed the arguments with an array of args, but this is
+       // only used internally.)
+       each: function( callback, args ) {
+               return jQuery.each( this, callback, args );
+       },
+
+       ready: function( fn ) {
+               // Attach the listeners
+               jQuery.bindReady();
+
+               // Add the callback
+               readyList.add( fn );
+
+               return this;
+       },
+
+       eq: function( i ) {
+               return i === -1 ?
+                       this.slice( i ) :
+                       this.slice( i, +i + 1 );
+       },
+
+       first: function() {
+               return this.eq( 0 );
+       },
+
+       last: function() {
+               return this.eq( -1 );
+       },
+
+       slice: function() {
+               return this.pushStack( slice.apply( this, arguments ),
+                       "slice", slice.call(arguments).join(",") );
+       },
+
+       map: function( callback ) {
+               return this.pushStack( jQuery.map(this, function( elem, i ) {
+                       return callback.call( elem, i, elem );
+               }));
+       },
+
+       end: function() {
+               return this.prevObject || this.constructor(null);
+       },
+
+       // For internal use only.
+       // Behaves like an Array's method, not like a jQuery method.
+       push: push,
+       sort: [].sort,
+       splice: [].splice
+};
+
+// Give the init function the jQuery prototype for later instantiation
+jQuery.fn.init.prototype = jQuery.fn;
+
+jQuery.extend = jQuery.fn.extend = function() {
+       var options, name, src, copy, copyIsArray, clone,
+               target = arguments[0] || {},
+               i = 1,
+               length = arguments.length,
+               deep = false;
+
+       // Handle a deep copy situation
+       if ( typeof target === "boolean" ) {
+               deep = target;
+               target = arguments[1] || {};
+               // skip the boolean and the target
+               i = 2;
+       }
+
+       // Handle case when target is a string or something (possible in deep copy)
+       if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
+               target = {};
+       }
+
+       // extend jQuery itself if only one argument is passed
+       if ( length === i ) {
+               target = this;
+               --i;
+       }
+
+       for ( ; i < length; i++ ) {
+               // Only deal with non-null/undefined values
+               if ( (options = arguments[ i ]) != null ) {
+                       // Extend the base object
+                       for ( name in options ) {
+                               src = target[ name ];
+                               copy = options[ name ];
+
+                               // Prevent never-ending loop
+                               if ( target === copy ) {
+                                       continue;
+                               }
+
+                               // Recurse if we're merging plain objects or arrays
+                               if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
+                                       if ( copyIsArray ) {
+                                               copyIsArray = false;
+                                               clone = src && jQuery.isArray(src) ? src : [];
+
+                                       } else {
+                                               clone = src && jQuery.isPlainObject(src) ? src : {};
+                                       }
+
+                                       // Never move original objects, clone them
+                                       target[ name ] = jQuery.extend( deep, clone, copy );
+
+                               // Don't bring in undefined values
+                               } else if ( copy !== undefined ) {
+                                       target[ name ] = copy;
+                               }
+                       }
+               }
+       }
+
+       // Return the modified object
+       return target;
+};
+
+jQuery.extend({
+       noConflict: function( deep ) {
+               if ( window.$ === jQuery ) {
+                       window.$ = _$;
+               }
+
+               if ( deep && window.jQuery === jQuery ) {
+                       window.jQuery = _jQuery;
+               }
+
+               return jQuery;
+       },
+
+       // Is the DOM ready to be used? Set to true once it occurs.
+       isReady: false,
+
+       // A counter to track how many items to wait for before
+       // the ready event fires. See #6781
+       readyWait: 1,
+
+       // Hold (or release) the ready event
+       holdReady: function( hold ) {
+               if ( hold ) {
+                       jQuery.readyWait++;
+               } else {
+                       jQuery.ready( true );
+               }
+       },
+
+       // Handle when the DOM is ready
+       ready: function( wait ) {
+               // Either a released hold or an DOMready/load event and not yet ready
+               if ( (wait === true && !--jQuery.readyWait) || (wait !== true && !jQuery.isReady) ) {
+                       // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
+                       if ( !document.body ) {
+                               return setTimeout( jQuery.ready, 1 );
+                       }
+
+                       // Remember that the DOM is ready
+                       jQuery.isReady = true;
+
+                       // If a normal DOM Ready event fired, decrement, and wait if need be
+                       if ( wait !== true && --jQuery.readyWait > 0 ) {
+                               return;
+                       }
+
+                       // If there are functions bound, to execute
+                       readyList.fireWith( document, [ jQuery ] );
+
+                       // Trigger any bound ready events
+                       if ( jQuery.fn.trigger ) {
+                               jQuery( document ).trigger( "ready" ).unbind( "ready" );
+                       }
+               }
+       },
+
+       bindReady: function() {
+               if ( readyList ) {
+                       return;
+               }
+
+               readyList = jQuery.Callbacks( "once memory" );
+
+               // Catch cases where $(document).ready() is called after the
+               // browser event has already occurred.
+               if ( document.readyState === "complete" ) {
+                       // Handle it asynchronously to allow scripts the opportunity to delay ready
+                       return setTimeout( jQuery.ready, 1 );
+               }
+
+               // Mozilla, Opera and webkit nightlies currently support this event
+               if ( document.addEventListener ) {
+                       // Use the handy event callback
+                       document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false );
+
+                       // A fallback to window.onload, that will always work
+                       window.addEventListener( "load", jQuery.ready, false );
+
+               // If IE event model is used
+               } else if ( document.attachEvent ) {
+                       // ensure firing before onload,
+                       // maybe late but safe also for iframes
+                       document.attachEvent( "onreadystatechange", DOMContentLoaded );
+
+                       // A fallback to window.onload, that will always work
+                       window.attachEvent( "onload", jQuery.ready );
+
+                       // If IE and not a frame
+                       // continually check to see if the document is ready
+                       var toplevel = false;
+
+                       try {
+                               toplevel = window.frameElement == null;
+                       } catch(e) {}
+
+                       if ( document.documentElement.doScroll && toplevel ) {
+                               doScrollCheck();
+                       }
+               }
+       },
+
+       // See test/unit/core.js for details concerning isFunction.
+       // Since version 1.3, DOM methods and functions like alert
+       // aren't supported. They return false on IE (#2968).
+       isFunction: function( obj ) {
+               return jQuery.type(obj) === "function";
+       },
+
+       isArray: Array.isArray || function( obj ) {
+               return jQuery.type(obj) === "array";
+       },
+
+       // A crude way of determining if an object is a window
+       isWindow: function( obj ) {
+               return obj && typeof obj === "object" && "setInterval" in obj;
+       },
+
+       isNumeric: function( obj ) {
+               return obj != null && rdigit.test( obj ) && !isNaN( obj );
+       },
+
+       type: function( obj ) {
+               return obj == null ?
+                       String( obj ) :
+                       class2type[ toString.call(obj) ] || "object";
+       },
+
+       isPlainObject: function( obj ) {
+               // Must be an Object.
+               // Because of IE, we also have to check the presence of the constructor property.
+               // Make sure that DOM nodes and window objects don't pass through, as well
+               if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
+                       return false;
+               }
+
+               try {
+                       // Not own constructor property must be Object
+                       if ( obj.constructor &&
+                               !hasOwn.call(obj, "constructor") &&
+                               !hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
+                               return false;
+                       }
+               } catch ( e ) {
+                       // IE8,9 Will throw exceptions on certain host objects #9897
+                       return false;
+               }
+
+               // Own properties are enumerated firstly, so to speed up,
+               // if last one is own, then all properties are own.
+
+               var key;
+               for ( key in obj ) {}
+
+               return key === undefined || hasOwn.call( obj, key );
+       },
+
+       isEmptyObject: function( obj ) {
+               for ( var name in obj ) {
+                       return false;
+               }
+               return true;
+       },
+
+       error: function( msg ) {
+               throw msg;
+       },
+
+       parseJSON: function( data ) {
+               if ( typeof data !== "string" || !data ) {
+                       return null;
+               }
+
+               // Make sure leading/trailing whitespace is removed (IE can't handle it)
+               data = jQuery.trim( data );
+
+               // Attempt to parse using the native JSON parser first
+               if ( window.JSON && window.JSON.parse ) {
+                       return window.JSON.parse( data );
+               }
+
+               // Make sure the incoming data is actual JSON
+               // Logic borrowed from http://json.org/json2.js
+               if ( rvalidchars.test( data.replace( rvalidescape, "@" )
+                       .replace( rvalidtokens, "]" )
+                       .replace( rvalidbraces, "")) ) {
+
+                       return (new Function( "return " + data ))();
+
+               }
+               jQuery.error( "Invalid JSON: " + data );
+       },
+
+       // Cross-browser xml parsing
+       parseXML: function( data ) {
+               var xml, tmp;
+               try {
+                       if ( window.DOMParser ) { // Standard
+                               tmp = new DOMParser();
+                               xml = tmp.parseFromString( data , "text/xml" );
+                       } else { // IE
+                               xml = new ActiveXObject( "Microsoft.XMLDOM" );
+                               xml.async = "false";
+                               xml.loadXML( data );
+                       }
+               } catch( e ) {
+                       xml = undefined;
+               }
+               if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) {
+                       jQuery.error( "Invalid XML: " + data );
+               }
+               return xml;
+       },
+
+       noop: function() {},
+
+       // Evaluates a script in a global context
+       // Workarounds based on findings by Jim Driscoll
+       // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context
+       globalEval: function( data ) {
+               if ( data && rnotwhite.test( data ) ) {
+                       // We use execScript on Internet Explorer
+                       // We use an anonymous function so that context is window
+                       // rather than jQuery in Firefox
+                       ( window.execScript || function( data ) {
+                               window[ "eval" ].call( window, data );
+                       } )( data );
+               }
+       },
+
+       // Convert dashed to camelCase; used by the css and data modules
+       // Microsoft forgot to hump their vendor prefix (#9572)
+       camelCase: function( string ) {
+               return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
+       },
+
+       nodeName: function( elem, name ) {
+               return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase();
+       },
+
+       // args is for internal usage only
+       each: function( object, callback, args ) {
+               var name, i = 0,
+                       length = object.length,
+                       isObj = length === undefined || jQuery.isFunction( object );
+
+               if ( args ) {
+                       if ( isObj ) {
+                               for ( name in object ) {
+                                       if ( callback.apply( object[ name ], args ) === false ) {
+                                               break;
+                                       }
+                               }
+                       } else {
+                               for ( ; i < length; ) {
+                                       if ( callback.apply( object[ i++ ], args ) === false ) {
+                                               break;
+                                       }
+                               }
+                       }
+
+               // A special, fast, case for the most common use of each
+               } else {
+                       if ( isObj ) {
+                               for ( name in object ) {
+                                       if ( callback.call( object[ name ], name, object[ name ] ) === false ) {
+                                               break;
+                                       }
+                               }
+                       } else {
+                               for ( ; i < length; ) {
+                                       if ( callback.call( object[ i ], i, object[ i++ ] ) === false ) {
+                                               break;
+                                       }
+                               }
+                       }
+               }
+
+               return object;
+       },
+
+       // Use native String.trim function wherever possible
+       trim: trim ?
+               function( text ) {
+                       return text == null ?
+                               "" :
+                               trim.call( text );
+               } :
+
+               // Otherwise use our own trimming functionality
+               function( text ) {
+                       return text == null ?
+                               "" :
+                               text.toString().replace( trimLeft, "" ).replace( trimRight, "" );
+               },
+
+       // results is for internal usage only
+       makeArray: function( array, results ) {
+               var ret = results || [];
+
+               if ( array != null ) {
+                       // The window, strings (and functions) also have 'length'
+                       // The extra typeof function check is to prevent crashes
+                       // in Safari 2 (See: #3039)
+                       // Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930
+                       var type = jQuery.type( array );
+
+                       if ( array.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( array ) ) {
+                               push.call( ret, array );
+                       } else {
+                               jQuery.merge( ret, array );
+                       }
+               }
+
+               return ret;
+       },
+
+       inArray: function( elem, array, i ) {
+               var len;
+
+               if ( array ) {
+                       if ( indexOf ) {
+                               return indexOf.call( array, elem, i );
+                       }
+
+                       len = array.length;
+                       i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;
+
+                       for ( ; i < len; i++ ) {
+                               // Skip accessing in sparse arrays
+                               if ( i in array && array[ i ] === elem ) {
+                                       return i;
+                               }
+                       }
+               }
+
+               return -1;
+       },
+
+       merge: function( first, second ) {
+               var i = first.length,
+                       j = 0;
+
+               if ( typeof second.length === "number" ) {
+                       for ( var l = second.length; j < l; j++ ) {
+                               first[ i++ ] = second[ j ];
+                       }
+
+               } else {
+                       while ( second[j] !== undefined ) {
+                               first[ i++ ] = second[ j++ ];
+                       }
+               }
+
+               first.length = i;
+
+               return first;
+       },
+
+       grep: function( elems, callback, inv ) {
+               var ret = [], retVal;
+               inv = !!inv;
+
+               // Go through the array, only saving the items
+               // that pass the validator function
+               for ( var i = 0, length = elems.length; i < length; i++ ) {
+                       retVal = !!callback( elems[ i ], i );
+                       if ( inv !== retVal ) {
+                               ret.push( elems[ i ] );
+                       }
+               }
+
+               return ret;
+       },
+
+       // arg is for internal usage only
+       map: function( elems, callback, arg ) {
+               var value, key, ret = [],
+                       i = 0,
+                       length = elems.length,
+                       // jquery objects are treated as arrays
+                       isArray = elems instanceof jQuery || length !== undefined && typeof length === "number" && ( ( length > 0 && elems[ 0 ] && elems[ length -1 ] ) || length === 0 || jQuery.isArray( elems ) ) ;
+
+               // Go through the array, translating each of the items to their
+               if ( isArray ) {
+                       for ( ; i < length; i++ ) {
+                               value = callback( elems[ i ], i, arg );
+
+                               if ( value != null ) {
+                                       ret[ ret.length ] = value;
+                               }
+                       }
+
+               // Go through every key on the object,
+               } else {
+                       for ( key in elems ) {
+                               value = callback( elems[ key ], key, arg );
+
+                               if ( value != null ) {
+                                       ret[ ret.length ] = value;
+                               }
+                       }
+               }
+
+               // Flatten any nested arrays
+               return ret.concat.apply( [], ret );
+       },
+
+       // A global GUID counter for objects
+       guid: 1,
+
+       // Bind a function to a context, optionally partially applying any
+       // arguments.
+       proxy: function( fn, context ) {
+               if ( typeof context === "string" ) {
+                       var tmp = fn[ context ];
+                       context = fn;
+                       fn = tmp;
+               }
+
+               // Quick check to determine if target is callable, in the spec
+               // this throws a TypeError, but we will just return undefined.
+               if ( !jQuery.isFunction( fn ) ) {
+                       return undefined;
+               }
+
+               // Simulated bind
+               var args = slice.call( arguments, 2 ),
+                       proxy = function() {
+                               return fn.apply( context, args.concat( slice.call( arguments ) ) );
+                       };
+
+               // Set the guid of unique handler to the same of original handler, so it can be removed
+               proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++;
+
+               return proxy;
+       },
+
+       // Mutifunctional method to get and set values to a collection
+       // The value/s can optionally be executed if it's a function
+       access: function( elems, key, value, exec, fn, pass ) {
+               var length = elems.length;
+
+               // Setting many attributes
+               if ( typeof key === "object" ) {
+                       for ( var k in key ) {
+                               jQuery.access( elems, k, key[k], exec, fn, value );
+                       }
+                       return elems;
+               }
+
+               // Setting one attribute
+               if ( value !== undefined ) {
+                       // Optionally, function values get executed if exec is true
+                       exec = !pass && exec && jQuery.isFunction(value);
+
+                       for ( var i = 0; i < length; i++ ) {
+                               fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass );
+                       }
+
+                       return elems;
+               }
+
+               // Getting an attribute
+               return length ? fn( elems[0], key ) : undefined;
+       },
+
+       now: function() {
+               return (new Date()).getTime();
+       },
+
+       // Use of jQuery.browser is frowned upon.
+       // More details: http://docs.jquery.com/Utilities/jQuery.browser
+       uaMatch: function( ua ) {
+               ua = ua.toLowerCase();
+
+               var match = rwebkit.exec( ua ) ||
+                       ropera.exec( ua ) ||
+                       rmsie.exec( ua ) ||
+                       ua.indexOf("compatible") < 0 && rmozilla.exec( ua ) ||
+                       [];
+
+               return { browser: match[1] || "", version: match[2] || "0" };
+       },
+
+       sub: function() {
+               function jQuerySub( selector, context ) {
+                       return new jQuerySub.fn.init( selector, context );
+               }
+               jQuery.extend( true, jQuerySub, this );
+               jQuerySub.superclass = this;
+               jQuerySub.fn = jQuerySub.prototype = this();
+               jQuerySub.fn.constructor = jQuerySub;
+               jQuerySub.sub = this.sub;
+               jQuerySub.fn.init = function init( selector, context ) {
+                       if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) {
+                               context = jQuerySub( context );
+                       }
+
+                       return jQuery.fn.init.call( this, selector, context, rootjQuerySub );
+               };
+               jQuerySub.fn.init.prototype = jQuerySub.fn;
+               var rootjQuerySub = jQuerySub(document);
+               return jQuerySub;
+       },
+
+       browser: {}
+});
+
+// Populate the class2type map
+jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) {
+       class2type[ "[object " + name + "]" ] = name.toLowerCase();
+});
+
+browserMatch = jQuery.uaMatch( userAgent );
+if ( browserMatch.browser ) {
+       jQuery.browser[ browserMatch.browser ] = true;
+       jQuery.browser.version = browserMatch.version;
+}
+
+// Deprecated, use jQuery.browser.webkit instead
+if ( jQuery.browser.webkit ) {
+       jQuery.browser.safari = true;
+}
+
+// IE doesn't match non-breaking spaces with \s
+if ( rnotwhite.test( "\xA0" ) ) {
+       trimLeft = /^[\s\xA0]+/;
+       trimRight = /[\s\xA0]+$/;
+}
+
+// All jQuery objects should point back to these
+rootjQuery = jQuery(document);
+
+// Cleanup functions for the document ready method
+if ( document.addEventListener ) {
+       DOMContentLoaded = function() {
+               document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false );
+               jQuery.ready();
+       };
+
+} else if ( document.attachEvent ) {
+       DOMContentLoaded = function() {
+               // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
+               if ( document.readyState === "complete" ) {
+                       document.detachEvent( "onreadystatechange", DOMContentLoaded );
+                       jQuery.ready();
+               }
+       };
+}
+
+// The DOM ready check for Internet Explorer
+function doScrollCheck() {
+       if ( jQuery.isReady ) {
+               return;
+       }
+
+       try {
+               // If IE is used, use the trick by Diego Perini
+               // http://javascript.nwbox.com/IEContentLoaded/
+               document.documentElement.doScroll("left");
+       } catch(e) {
+               setTimeout( doScrollCheck, 1 );
+               return;
+       }
+
+       // and execute any waiting functions
+       jQuery.ready();
+}
+
+// Expose jQuery as an AMD module, but only for AMD loaders that
+// understand the issues with loading multiple versions of jQuery
+// in a page that all might call define(). The loader will indicate
+// they have special allowances for multiple jQuery versions by
+// specifying define.amd.jQuery = true. Register as a named module,
+// since jQuery can be concatenated with other files that may use define,
+// but not use a proper concatenation script that understands anonymous
+// AMD modules. A named AMD is safest and most robust way to register.
+// Lowercase jquery is used because AMD module names are derived from
+// file names, and jQuery is normally delivered in a lowercase file name.
+if ( typeof define === "function" && define.amd && define.amd.jQuery ) {
+       define( "jquery", [], function () { return jQuery; } );
+}
+
+return jQuery;
+
+})();
+
+
+// String to Object flags format cache
+var flagsCache = {};
+
+// Convert String-formatted flags into Object-formatted ones and store in cache
+function createFlags( flags ) {
+       var object = flagsCache[ flags ] = {},
+               i, length;
+       flags = flags.split( /\s+/ );
+       for ( i = 0, length = flags.length; i < length; i++ ) {
+               object[ flags[i] ] = true;
+       }
+       return object;
+}
+
+/*
+ * Create a callback list using the following parameters:
+ *
+ *     flags:  an optional list of space-separated flags that will change how
+ *                     the callback list behaves
+ *
+ * By default a callback list will act like an event callback list and can be
+ * "fired" multiple times.
+ *
+ * Possible flags:
+ *
+ *     once:                   will ensure the callback list can only be fired once (like a Deferred)
+ *
+ *     memory:                 will keep track of previous values and will call any callback added
+ *                                     after the list has been fired right away with the latest "memorized"
+ *                                     values (like a Deferred)
+ *
+ *     unique:                 will ensure a callback can only be added once (no duplicate in the list)
+ *
+ *     stopOnFalse:    interrupt callings when a callback returns false
+ *
+ */
+jQuery.Callbacks = function( flags ) {
+
+       // Convert flags from String-formatted to Object-formatted
+       // (we check in cache first)
+       flags = flags ? ( flagsCache[ flags ] || createFlags( flags ) ) : {};
+
+       var // Actual callback list
+               list = [],
+               // Stack of fire calls for repeatable lists
+               stack = [],
+               // Last fire value (for non-forgettable lists)
+               memory,
+               // Flag to know if list is currently firing
+               firing,
+               // First callback to fire (used internally by add and fireWith)
+               firingStart,
+               // End of the loop when firing
+               firingLength,
+               // Index of currently firing callback (modified by remove if needed)
+               firingIndex,
+               // Add one or several callbacks to the list
+               add = function( args ) {
+                       var i,
+                               length,
+                               elem,
+                               type,
+                               actual;
+                       for ( i = 0, length = args.length; i < length; i++ ) {
+                               elem = args[ i ];
+                               type = jQuery.type( elem );
+                               if ( type === "array" ) {
+                                       // Inspect recursively
+                                       add( elem );
+                               } else if ( type === "function" ) {
+                                       // Add if not in unique mode and callback is not in
+                                       if ( !flags.unique || !self.has( elem ) ) {
+                                               list.push( elem );
+                                       }
+                               }
+                       }
+               },
+               // Fire callbacks
+               fire = function( context, args ) {
+                       args = args || [];
+                       memory = !flags.memory || [ context, args ];
+                       firing = true;
+                       firingIndex = firingStart || 0;
+                       firingStart = 0;
+                       firingLength = list.length;
+                       for ( ; list && firingIndex < firingLength; firingIndex++ ) {
+                               if ( list[ firingIndex ].apply( context, args ) === false && flags.stopOnFalse ) {
+                                       memory = true; // Mark as halted
+                                       break;
+                               }
+                       }
+                       firing = false;
+                       if ( list ) {
+                               if ( !flags.once ) {
+                                       if ( stack && stack.length ) {
+                                               memory = stack.shift();
+                                               self.fireWith( memory[ 0 ], memory[ 1 ] );
+                                       }
+                               } else if ( memory === true ) {
+                                       self.disable();
+                               } else {
+                                       list = [];
+                               }
+                       }
+               },
+               // Actual Callbacks object
+               self = {
+                       // Add a callback or a collection of callbacks to the list
+                       add: function() {
+                               if ( list ) {
+                                       var length = list.length;
+                                       add( arguments );
+                                       // Do we need to add the callbacks to the
+                                       // current firing batch?
+                                       if ( firing ) {
+                                               firingLength = list.length;
+                                       // With memory, if we're not firing then
+                                       // we should call right away, unless previous
+                                       // firing was halted (stopOnFalse)
+                                       } else if ( memory && memory !== true ) {
+                                               firingStart = length;
+                                               fire( memory[ 0 ], memory[ 1 ] );
+                                       }
+                               }
+                               return this;
+                       },
+                       // Remove a callback from the list
+                       remove: function() {
+                               if ( list ) {
+                                       var args = arguments,
+                                               argIndex = 0,
+                                               argLength = args.length;
+                                       for ( ; argIndex < argLength ; argIndex++ ) {
+                                               for ( var i = 0; i < list.length; i++ ) {
+                                                       if ( args[ argIndex ] === list[ i ] ) {
+                                                               // Handle firingIndex and firingLength
+                                                               if ( firing ) {
+                                                                       if ( i <= firingLength ) {
+                                                                               firingLength--;
+                                                                               if ( i <= firingIndex ) {
+                                                                                       firingIndex--;
+                                                                               }
+                                                                       }
+                                                               }
+                                                               // Remove the element
+                                                               list.splice( i--, 1 );
+                                                               // If we have some unicity property then
+                                                               // we only need to do this once
+                                                               if ( flags.unique ) {
+                                                                       break;
+                                                               }
+                                                       }
+                                               }
+                                       }
+                               }
+                               return this;
+                       },
+                       // Control if a given callback is in the list
+                       has: function( fn ) {
+                               if ( list ) {
+                                       var i = 0,
+                                               length = list.length;
+                                       for ( ; i < length; i++ ) {
+                                               if ( fn === list[ i ] ) {
+                                                       return true;
+                                               }
+                                       }
+                               }
+                               return false;
+                       },
+                       // Remove all callbacks from the list
+                       empty: function() {
+                               list = [];
+                               return this;
+                       },
+                       // Have the list do nothing anymore
+                       disable: function() {
+                               list = stack = memory = undefined;
+                               return this;
+                       },
+                       // Is it disabled?
+                       disabled: function() {
+                               return !list;
+                       },
+                       // Lock the list in its current state
+                       lock: function() {
+                               stack = undefined;
+                               if ( !memory || memory === true ) {
+                                       self.disable();
+                               }
+                               return this;
+                       },
+                       // Is it locked?
+                       locked: function() {
+                               return !stack;
+                       },
+                       // Call all callbacks with the given context and arguments
+                       fireWith: function( context, args ) {
+                               if ( stack ) {
+                                       if ( firing ) {
+                                               if ( !flags.once ) {
+                                                       stack.push( [ context, args ] );
+                                               }
+                                       } else if ( !( flags.once && memory ) ) {
+                                               fire( context, args );
+                                       }
+                               }
+                               return this;
+                       },
+                       // Call all the callbacks with the given arguments
+                       fire: function() {
+                               self.fireWith( this, arguments );
+                               return this;
+                       },
+                       // To know if the callbacks have already been called at least once
+                       fired: function() {
+                               return !!memory;
+                       }
+               };
+
+       return self;
+};
+
+
+
+
+var // Static reference to slice
+       sliceDeferred = [].slice;
+
+jQuery.extend({
+
+       Deferred: function( func ) {
+               var doneList = jQuery.Callbacks( "once memory" ),
+                       failList = jQuery.Callbacks( "once memory" ),
+                       progressList = jQuery.Callbacks( "memory" ),
+                       state = "pending",
+                       lists = {
+                               resolve: doneList,
+                               reject: failList,
+                               notify: progressList
+                       },
+                       promise = {
+                               done: doneList.add,
+                               fail: failList.add,
+                               progress: progressList.add,
+
+                               state: function() {
+                                       return state;
+                               },
+
+                               // Deprecated
+                               isResolved: doneList.fired,
+                               isRejected: failList.fired,
+
+                               then: function( doneCallbacks, failCallbacks, progressCallbacks ) {
+                                       deferred.done( doneCallbacks ).fail( failCallbacks ).progress( progressCallbacks );
+                                       return this;
+                               },
+                               always: function() {
+                                       return deferred.done.apply( deferred, arguments ).fail.apply( deferred, arguments );
+                               },
+                               pipe: function( fnDone, fnFail, fnProgress ) {
+                                       return jQuery.Deferred(function( newDefer ) {
+                                               jQuery.each( {
+                                                       done: [ fnDone, "resolve" ],
+                                                       fail: [ fnFail, "reject" ],
+                                                       progress: [ fnProgress, "notify" ]
+                                               }, function( handler, data ) {
+                                                       var fn = data[ 0 ],
+                                                               action = data[ 1 ],
+                                                               returned;
+                                                       if ( jQuery.isFunction( fn ) ) {
+                                                               deferred[ handler ](function() {
+                                                                       returned = fn.apply( this, arguments );
+                                                                       if ( returned && jQuery.isFunction( returned.promise ) ) {
+                                                                               returned.promise().then( newDefer.resolve, newDefer.reject, newDefer.notify );
+                                                                       } else {
+                                                                               newDefer[ action + "With" ]( this === deferred ? newDefer : this, [ returned ] );
+                                                                       }
+                                                               });
+                                                       } else {
+                                                               deferred[ handler ]( newDefer[ action ] );
+                                                       }
+                                               });
+                                       }).promise();
+                               },
+                               // Get a promise for this deferred
+                               // If obj is provided, the promise aspect is added to the object
+                               promise: function( obj ) {
+                                       if ( obj == null ) {
+                                               obj = promise;
+                                       } else {
+                                               for( var key in promise ) {
+                                                       obj[ key ] = promise[ key ];
+                                               }
+                                       }
+                                       return obj;
+                               }
+                       },
+                       deferred = promise.promise({}),
+                       key;
+
+               for ( key in lists ) {
+                       deferred[ key ] = lists[ key ].fire;
+                       deferred[ key + "With" ] = lists[ key ].fireWith;
+               }
+
+               // Handle state
+               deferred.done( function() {
+                       state = "resolved";
+               }, failList.disable, progressList.lock ).fail( function() {
+                       state = "rejected";
+               }, doneList.disable, progressList.lock );
+
+               // Call given func if any
+               if ( func ) {
+                       func.call( deferred, deferred );
+               }
+
+               // All done!
+               return deferred;
+       },
+
+       // Deferred helper
+       when: function( firstParam ) {
+               var args = sliceDeferred.call( arguments, 0 ),
+                       i = 0,
+                       length = args.length,
+                       pValues = new Array( length ),
+                       count = length,
+                       pCount = length,
+                       deferred = length <= 1 && firstParam && jQuery.isFunction( firstParam.promise ) ?
+                               firstParam :
+                               jQuery.Deferred(),
+                       promise = deferred.promise();
+               function resolveFunc( i ) {
+                       return function( value ) {
+                               args[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value;
+                               if ( !( --count ) ) {
+                                       deferred.resolveWith( deferred, args );
+                               }
+                       };
+               }
+               function progressFunc( i ) {
+                       return function( value ) {
+                               pValues[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value;
+                               deferred.notifyWith( promise, pValues );
+                       };
+               }
+               if ( length > 1 ) {
+                       for( ; i < length; i++ ) {
+                               if ( args[ i ] && args[ i ].promise && jQuery.isFunction( args[ i ].promise ) ) {
+                                       args[ i ].promise().then( resolveFunc(i), deferred.reject, progressFunc(i) );
+                               } else {
+                                       --count;
+                               }
+                       }
+                       if ( !count ) {
+                               deferred.resolveWith( deferred, args );
+                       }
+               } else if ( deferred !== firstParam ) {
+                       deferred.resolveWith( deferred, length ? [ firstParam ] : [] );
+               }
+               return promise;
+       }
+});
+
+
+
+
+jQuery.support = (function() {
+
+       var div = document.createElement( "div" ),
+               documentElement = document.documentElement,
+               all,
+               a,
+               select,
+               opt,
+               input,
+               marginDiv,
+               support,
+               fragment,
+               body,
+               testElementParent,
+               testElement,
+               testElementStyle,
+               tds,
+               events,
+               eventName,
+               i,
+               isSupported,
+               offsetSupport;
+
+       // Preliminary tests
+       div.setAttribute("className", "t");
+       div.innerHTML = "   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/><nav></nav>";
+
+
+       all = div.getElementsByTagName( "*" );
+       a = div.getElementsByTagName( "a" )[ 0 ];
+
+       // Can't get basic test support
+       if ( !all || !all.length || !a ) {
+               return {};
+       }
+
+       // First batch of supports tests
+       select = document.createElement( "select" );
+       opt = select.appendChild( document.createElement("option") );
+       input = div.getElementsByTagName( "input" )[ 0 ];
+
+       support = {
+               // IE strips leading whitespace when .innerHTML is used
+               leadingWhitespace: ( div.firstChild.nodeType === 3 ),
+
+               // Make sure that tbody elements aren't automatically inserted
+               // IE will insert them into empty tables
+               tbody: !div.getElementsByTagName( "tbody" ).length,
+
+               // Make sure that link elements get serialized correctly by innerHTML
+               // This requires a wrapper element in IE
+               htmlSerialize: !!div.getElementsByTagName( "link" ).length,
+
+               // Get the style information from getAttribute
+               // (IE uses .cssText instead)
+               style: /top/.test( a.getAttribute("style") ),
+
+               // Make sure that URLs aren't manipulated
+               // (IE normalizes it by default)
+               hrefNormalized: ( a.getAttribute( "href" ) === "/a" ),
+
+               // Make sure that element opacity exists
+               // (IE uses filter instead)
+               // Use a regex to work around a WebKit issue. See #5145
+               opacity: /^0.55/.test( a.style.opacity ),
+
+               // Verify style float existence
+               // (IE uses styleFloat instead of cssFloat)
+               cssFloat: !!a.style.cssFloat,
+
+               // Make sure unknown elements (like HTML5 elems) are handled appropriately
+               unknownElems: !!div.getElementsByTagName( "nav" ).length,
+
+               // Make sure that if no value is specified for a checkbox
+               // that it defaults to "on".
+               // (WebKit defaults to "" instead)
+               checkOn: ( input.value === "on" ),
+
+               // Make sure that a selected-by-default option has a working selected property.
+               // (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
+               optSelected: opt.selected,
+
+               // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)
+               getSetAttribute: div.className !== "t",
+
+               // Will be defined later
+               submitBubbles: true,
+               changeBubbles: true,
+               focusinBubbles: false,
+               deleteExpando: true,
+               noCloneEvent: true,
+               inlineBlockNeedsLayout: false,
+               shrinkWrapBlocks: false,
+               reliableMarginRight: true
+       };
+
+       // Make sure checked status is properly cloned
+       input.checked = true;
+       support.noCloneChecked = input.cloneNode( true ).checked;
+
+       // Make sure that the options inside disabled selects aren't marked as disabled
+       // (WebKit marks them as disabled)
+       select.disabled = true;
+       support.optDisabled = !opt.disabled;
+
+       // Test to see if it's possible to delete an expando from an element
+       // Fails in Internet Explorer
+       try {
+               delete div.test;
+       } catch( e ) {
+               support.deleteExpando = false;
+       }
+
+       if ( !div.addEventListener && div.attachEvent && div.fireEvent ) {
+               div.attachEvent( "onclick", function() {
+                       // Cloning a node shouldn't copy over any
+                       // bound event handlers (IE does this)
+                       support.noCloneEvent = false;
+               });
+               div.cloneNode( true ).fireEvent( "onclick" );
+       }
+
+       // Check if a radio maintains its value
+       // after being appended to the DOM
+       input = document.createElement("input");
+       input.value = "t";
+       input.setAttribute("type", "radio");
+       support.radioValue = input.value === "t";
+
+       input.setAttribute("checked", "checked");
+       div.appendChild( input );
+       fragment = document.createDocumentFragment();
+       fragment.appendChild( div.firstChild );
+
+       // WebKit doesn't clone checked state correctly in fragments
+       support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked;
+
+       div.innerHTML = "";
+
+       // Figure out if the W3C box model works as expected
+       div.style.width = div.style.paddingLeft = "1px";
+
+       // We don't want to do body-related feature tests on frameset
+       // documents, which lack a body. So we use
+       // document.getElementsByTagName("body")[0], which is undefined in
+       // frameset documents, while document.body isn’t. (7398)
+       body = document.getElementsByTagName("body")[ 0 ];
+       // We use our own, invisible, body unless the body is already present
+       // in which case we use a div (#9239)
+       testElement = document.createElement( body ? "div" : "body" );
+       testElementStyle = {
+               visibility: "hidden",
+               width: 0,
+               height: 0,
+               border: 0,
+               margin: 0,
+               background: "none"
+       };
+       if ( body ) {
+               jQuery.extend( testElementStyle, {
+                       position: "absolute",
+                       left: "-999px",
+                       top: "-999px"
+               });
+       }
+       for ( i in testElementStyle ) {
+               testElement.style[ i ] = testElementStyle[ i ];
+       }
+       testElement.appendChild( div );
+       testElementParent = body || documentElement;
+       testElementParent.insertBefore( testElement, testElementParent.firstChild );
+
+       // Check if a disconnected checkbox will retain its checked
+       // value of true after appended to the DOM (IE6/7)
+       support.appendChecked = input.checked;
+
+       support.boxModel = div.offsetWidth === 2;
+
+       if ( "zoom" in div.style ) {
+               // Check if natively block-level elements act like inline-block
+               // elements when setting their display to 'inline' and giving
+               // them layout
+               // (IE < 8 does this)
+               div.style.display = "inline";
+               div.style.zoom = 1;
+               support.inlineBlockNeedsLayout = ( div.offsetWidth === 2 );
+
+               // Check if elements with layout shrink-wrap their children
+               // (IE 6 does this)
+               div.style.display = "";
+               div.innerHTML = "<div style='width:4px;'></div>";
+               support.shrinkWrapBlocks = ( div.offsetWidth !== 2 );
+       }
+
+       div.innerHTML = "<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>";
+       tds = div.getElementsByTagName( "td" );
+
+       // Check if table cells still have offsetWidth/Height when they are set
+       // to display:none and there are still other visible table cells in a
+       // table row; if so, offsetWidth/Height are not reliable for use when
+       // determining if an element has been hidden directly using
+       // display:none (it is still safe to use offsets if a parent element is
+       // hidden; don safety goggles and see bug #4512 for more information).
+       // (only IE 8 fails this test)
+       isSupported = ( tds[ 0 ].offsetHeight === 0 );
+
+       tds[ 0 ].style.display = "";
+       tds[ 1 ].style.display = "none";
+
+       // Check if empty table cells still have offsetWidth/Height
+       // (IE < 8 fail this test)
+       support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 );
+       div.innerHTML = "";
+
+       // Check if div with explicit width and no margin-right incorrectly
+       // gets computed margin-right based on width of container. For more
+       // info see bug #3333
+       // Fails in WebKit before Feb 2011 nightlies
+       // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
+       if ( document.defaultView && document.defaultView.getComputedStyle ) {
+               marginDiv = document.createElement( "div" );
+               marginDiv.style.width = "0";
+               marginDiv.style.marginRight = "0";
+               div.appendChild( marginDiv );
+               support.reliableMarginRight =
+                       ( parseInt( ( document.defaultView.getComputedStyle( marginDiv, null ) || { marginRight: 0 } ).marginRight, 10 ) || 0 ) === 0;
+       }
+
+       // Remove the body element we added
+       testElement.innerHTML = "";
+
+       // Technique from Juriy Zaytsev
+       // http://perfectionkills.com/detecting-event-support-without-browser-sniffing/
+       // We only care about the case where non-standard event systems
+       // are used, namely in IE. Short-circuiting here helps us to
+       // avoid an eval call (in setAttribute) which can cause CSP
+       // to go haywire. See: https://developer.mozilla.org/en/Security/CSP
+       if ( div.attachEvent ) {
+               for( i in {
+                       submit: 1,
+                       change: 1,
+                       focusin: 1
+               } ) {
+                       eventName = "on" + i;
+                       isSupported = ( eventName in div );
+                       if ( !isSupported ) {
+                               div.setAttribute( eventName, "return;" );
+                               isSupported = ( typeof div[ eventName ] === "function" );
+                       }
+                       support[ i + "Bubbles" ] = isSupported;
+               }
+       }
+
+       // Determine fixed-position support early
+       testElement.style.position = "static";
+       testElement.style.top = "0px";
+       testElement.style.marginTop = "1px";
+       offsetSupport = (function( body, container ) {
+
+               var outer, inner, table, td, supports,
+                       bodyMarginTop = parseFloat( body.style.marginTop ) || 0,
+                       ptlm = "position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",
+                       style = "style='" + ptlm + "border:5px solid #000;padding:0;'",
+                       html = "<div " + style + "><div></div></div>" +
+                                                       "<table " + style + " cellpadding='0' cellspacing='0'>" +
+                                                       "<tr><td></td></tr></table>";
+
+               container.style.cssText = ptlm + "border:0;visibility:hidden";
+
+               container.innerHTML = html;
+               body.insertBefore( container, body.firstChild );
+               outer = container.firstChild;
+               inner = outer.firstChild;
+               td = outer.nextSibling.firstChild.firstChild;
+
+               supports = {
+                       doesNotAddBorder: (inner.offsetTop !== 5),
+                       doesAddBorderForTableAndCells: (td.offsetTop === 5)
+               };
+
+               inner.style.position = "fixed";
+               inner.style.top = "20px";
+
+               // safari subtracts parent border width here which is 5px
+               supports.supportsFixedPosition = (inner.offsetTop === 20 || inner.offsetTop === 15);
+               inner.style.position = inner.style.top = "";
+
+               outer.style.overflow = "hidden";
+               outer.style.position = "relative";
+
+               supports.subtractsBorderForOverflowNotVisible = (inner.offsetTop === -5);
+               supports.doesNotIncludeMarginInBodyOffset = (body.offsetTop !== bodyMarginTop);
+
+               return supports;
+
+       })( testElement, div );
+
+       jQuery.extend( support, offsetSupport );
+       testElementParent.removeChild( testElement );
+
+       // Null connected elements to avoid leaks in IE
+       testElement = fragment = select = opt = body = marginDiv = div = input = null;
+
+       return support;
+})();
+
+// Keep track of boxModel
+jQuery.boxModel = jQuery.support.boxModel;
+
+
+
+
+var rbrace = /^(?:\{.*\}|\[.*\])$/,
+       rmultiDash = /([A-Z])/g;
+
+jQuery.extend({
+       cache: {},
+
+       // Please use with caution
+       uuid: 0,
+
+       // Unique for each copy of jQuery on the page
+       // Non-digits removed to match rinlinejQuery
+       expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ),
+
+       // The following elements throw uncatchable exceptions if you
+       // attempt to add expando properties to them.
+       noData: {
+               "embed": true,
+               // Ban all objects except for Flash (which handle expandos)
+               "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",
+               "applet": true
+       },
+
+       hasData: function( elem ) {
+               elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];
+               return !!elem && !isEmptyDataObject( elem );
+       },
+
+       data: function( elem, name, data, pvt /* Internal Use Only */ ) {
+               if ( !jQuery.acceptData( elem ) ) {
+                       return;
+               }
+
+               var thisCache, ret,
+                       internalKey = jQuery.expando,
+                       getByName = typeof name === "string",
+
+                       // We have to handle DOM nodes and JS objects differently because IE6-7
+                       // can't GC object references properly across the DOM-JS boundary
+                       isNode = elem.nodeType,
+
+                       // Only DOM nodes need the global jQuery cache; JS object data is
+                       // attached directly to the object so GC can occur automatically
+                       cache = isNode ? jQuery.cache : elem,
+
+                       // Only defining an ID for JS objects if its cache already exists allows
+                       // the code to shortcut on the same path as a DOM node with no cache
+                       id = isNode ? elem[ jQuery.expando ] : elem[ jQuery.expando ] && jQuery.expando;
+
+               // Avoid doing any more work than we need to when trying to get data on an
+               // object that has no data at all
+               if ( (!id || !cache[id] || (!pvt && !cache[id].data)) && getByName && data === undefined ) {
+                       return;
+               }
+
+               if ( !id ) {
+                       // Only DOM nodes need a new unique ID for each element since their data
+                       // ends up in the global cache
+                       if ( isNode ) {
+                               elem[ jQuery.expando ] = id = ++jQuery.uuid;
+                       } else {
+                               id = jQuery.expando;
+                       }
+               }
+
+               if ( !cache[ id ] ) {
+                       cache[ id ] = {};
+
+                       // Avoids exposing jQuery metadata on plain JS objects when the object 
+                       // is serialized using JSON.stringify
+                       if ( !isNode ) {
+                               cache[ id ].toJSON = jQuery.noop;
+                       }
+               }
+
+               // An object can be passed to jQuery.data instead of a key/value pair; this gets
+               // shallow copied over onto the existing cache
+               if ( typeof name === "object" || typeof name === "function" ) {
+                       if ( pvt ) {
+                               cache[ id ] = jQuery.extend( cache[ id ], name );
+                       } else {
+                               cache[ id ].data = jQuery.extend( cache[ id ].data, name );
+                       }
+               }
+
+               thisCache = cache[ id ];
+
+               // jQuery data() is stored in a separate object inside the object's internal data
+               // cache in order to avoid key collisions between internal data and user-defined
+               // data.
+               if ( !pvt ) {
+                       if ( !thisCache.data ) {
+                               thisCache.data = {};
+                       }
+
+                       thisCache = thisCache.data;
+               }
+
+               if ( data !== undefined ) {
+                       thisCache[ jQuery.camelCase( name ) ] = data;
+               }
+
+               // TODO: This is a hack for 1.5 ONLY. It will be removed in 1.6. Users should
+               // not attempt to inspect the internal events object using jQuery.data, as this
+               // internal data object is undocumented and subject to change.
+               if ( name === "events" && !thisCache[name] ) {
+                       return thisCache[ internalKey ] && thisCache[ internalKey ].events;
+               }
+
+               // Check for both converted-to-camel and non-converted data property names
+               // If a data property was specified
+               if ( getByName ) {
+
+                       // First Try to find as-is property data
+                       ret = thisCache[ name ];
+
+                       // Test for null|undefined property data
+                       if ( ret == null ) {
+
+                               // Try to find the camelCased property
+                               ret = thisCache[ jQuery.camelCase( name ) ];
+                       }
+               } else {
+                       ret = thisCache;
+               }
+
+               return ret;
+       },
+
+       removeData: function( elem, name, pvt /* Internal Use Only */ ) {
+               if ( !jQuery.acceptData( elem ) ) {
+                       return;
+               }
+
+               var thisCache, i, l,
+
+                       // Reference to internal data cache key
+                       internalKey = jQuery.expando,
+
+                       isNode = elem.nodeType,
+
+                       // See jQuery.data for more information
+                       cache = isNode ? jQuery.cache : elem,
+
+                       // See jQuery.data for more information
+                       id = isNode ? elem[ jQuery.expando ] : jQuery.expando;
+
+               // If there is already no cache entry for this object, there is no
+               // purpose in continuing
+               if ( !cache[ id ] ) {
+                       return;
+               }
+
+               if ( name ) {
+
+                       thisCache = pvt ? cache[ id ] : cache[ id ].data;
+
+                       if ( thisCache ) {
+
+                               // Support space separated names
+                               if ( jQuery.isArray( name ) ) {
+                                       name = name;
+                               } else if ( name in thisCache ) {
+                                       name = [ name ];
+                               } else {
+
+                                       // split the camel cased version by spaces
+                                       name = jQuery.camelCase( name );
+                                       if ( name in thisCache ) {
+                                               name = [ name ];
+                                       } else {
+                                               name = name.split( " " );
+                                       }
+                               }
+
+                               for ( i = 0, l = name.length; i < l; i++ ) {
+                                       delete thisCache[ name[i] ];
+                               }
+
+                               // If there is no data left in the cache, we want to continue
+                               // and let the cache object itself get destroyed
+                               if ( !( pvt ? isEmptyDataObject : jQuery.isEmptyObject )( thisCache ) ) {
+                                       return;
+                               }
+                       }
+               }
+
+               // See jQuery.data for more information
+               if ( !pvt ) {
+                       delete cache[ id ].data;
+
+                       // Don't destroy the parent cache unless the internal data object
+                       // had been the only thing left in it
+                       if ( !isEmptyDataObject(cache[ id ]) ) {
+                               return;
+                       }
+               }
+
+               // Browsers that fail expando deletion also refuse to delete expandos on
+               // the window, but it will allow it on all other JS objects; other browsers
+               // don't care
+               // Ensure that `cache` is not a window object #10080
+               if ( jQuery.support.deleteExpando || !cache.setInterval ) {
+                       delete cache[ id ];
+               } else {
+                       cache[ id ] = null;
+               }
+
+               // We destroyed the cache and need to eliminate the expando on the node to avoid
+               // false lookups in the cache for entries that no longer exist
+               if ( isNode ) {
+                       // IE does not allow us to delete expando properties from nodes,
+                       // nor does it have a removeAttribute function on Document nodes;
+                       // we must handle all of these cases
+                       if ( jQuery.support.deleteExpando ) {
+                               delete elem[ jQuery.expando ];
+                       } else if ( elem.removeAttribute ) {
+                               elem.removeAttribute( jQuery.expando );
+                       } else {
+                               elem[ jQuery.expando ] = null;
+                       }
+               }
+       },
+
+       // For internal use only.
+       _data: function( elem, name, data ) {
+               return jQuery.data( elem, name, data, true );
+       },
+
+       // A method for determining if a DOM node can handle the data expando
+       acceptData: function( elem ) {
+               if ( elem.nodeName ) {
+                       var match = jQuery.noData[ elem.nodeName.toLowerCase() ];
+
+                       if ( match ) {
+                               return !(match === true || elem.getAttribute("classid") !== match);
+                       }
+               }
+
+               return true;
+       }
+});
+
+jQuery.fn.extend({
+       data: function( key, value ) {
+               var parts, attr, name,
+                       data = null;
+
+               if ( typeof key === "undefined" ) {
+                       if ( this.length ) {
+                               data = jQuery.data( this[0] );
+
+                               if ( this[0].nodeType === 1 && !jQuery._data( this[0], "parsedAttrs" ) ) {
+                                       attr = this[0].attributes;
+                                       for ( var i = 0, l = attr.length; i < l; i++ ) {
+                                               name = attr[i].name;
+
+                                               if ( name.indexOf( "data-" ) === 0 ) {
+                                                       name = jQuery.camelCase( name.substring(5) );
+
+                                                       dataAttr( this[0], name, data[ name ] );
+                                               }
+                                       }
+                                       jQuery._data( this[0], "parsedAttrs", true );
+                               }
+                       }
+
+                       return data;
+
+               } else if ( typeof key === "object" ) {
+                       return this.each(function() {
+                               jQuery.data( this, key );
+                       });
+               }
+
+               parts = key.split(".");
+               parts[1] = parts[1] ? "." + parts[1] : "";
+
+               if ( value === undefined ) {
+                       data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]);
+
+                       // Try to fetch any internally stored data first
+                       if ( data === undefined && this.length ) {
+                               data = jQuery.data( this[0], key );
+                               data = dataAttr( this[0], key, data );
+                       }
+
+                       return data === undefined && parts[1] ?
+                               this.data( parts[0] ) :
+                               data;
+
+               } else {
+                       return this.each(function() {
+                               var $this = jQuery( this ),
+                                       args = [ parts[0], value ];
+
+                               $this.triggerHandler( "setData" + parts[1] + "!", args );
+                               jQuery.data( this, key, value );
+                               $this.triggerHandler( "changeData" + parts[1] + "!", args );
+                       });
+               }
+       },
+
+       removeData: function( key ) {
+               return this.each(function() {
+                       jQuery.removeData( this, key );
+               });
+       }
+});
+
+function dataAttr( elem, key, data ) {
+       // If nothing was found internally, try to fetch any
+       // data from the HTML5 data-* attribute
+       if ( data === undefined && elem.nodeType === 1 ) {
+
+               var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase();
+
+               data = elem.getAttribute( name );
+
+               if ( typeof data === "string" ) {
+                       try {
+                               data = data === "true" ? true :
+                               data === "false" ? false :
+                               data === "null" ? null :
+                               jQuery.isNumeric( data ) ? parseFloat( data ) :
+                                       rbrace.test( data ) ? jQuery.parseJSON( data ) :
+                                       data;
+                       } catch( e ) {}
+
+                       // Make sure we set the data so it isn't changed later
+                       jQuery.data( elem, key, data );
+
+               } else {
+                       data = undefined;
+               }
+       }
+
+       return data;
+}
+
+// checks a cache object for emptiness
+function isEmptyDataObject( obj ) {
+       for ( var name in obj ) {
+
+               // if the public data object is empty, the private is still empty
+               if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) {
+                       continue;
+               }
+               if ( name !== "toJSON" ) {
+                       return false;
+               }
+       }
+
+       return true;
+}
+
+
+
+
+function handleQueueMarkDefer( elem, type, src ) {
+       var deferDataKey = type + "defer",
+               queueDataKey = type + "queue",
+               markDataKey = type + "mark",
+               defer = jQuery._data( elem, deferDataKey );
+       if ( defer &&
+               ( src === "queue" || !jQuery._data(elem, queueDataKey) ) &&
+               ( src === "mark" || !jQuery._data(elem, markDataKey) ) ) {
+               // Give room for hard-coded callbacks to fire first
+               // and eventually mark/queue something else on the element
+               setTimeout( function() {
+                       if ( !jQuery._data( elem, queueDataKey ) &&
+                               !jQuery._data( elem, markDataKey ) ) {
+                               jQuery.removeData( elem, deferDataKey, true );
+                               defer.fire();
+                       }
+               }, 0 );
+       }
+}
+
+jQuery.extend({
+
+       _mark: function( elem, type ) {
+               if ( elem ) {
+                       type = (type || "fx") + "mark";
+                       jQuery._data( elem, type, (jQuery._data( elem, type ) || 0) + 1 );
+               }
+       },
+
+       _unmark: function( force, elem, type ) {
+               if ( force !== true ) {
+                       type = elem;
+                       elem = force;
+                       force = false;
+               }
+               if ( elem ) {
+                       type = type || "fx";
+                       var key = type + "mark",
+                               count = force ? 0 : ( (jQuery._data( elem, key ) || 1) - 1 );
+                       if ( count ) {
+                               jQuery._data( elem, key, count );
+                       } else {
+                               jQuery.removeData( elem, key, true );
+                               handleQueueMarkDefer( elem, type, "mark" );
+                       }
+               }
+       },
+
+       queue: function( elem, type, data ) {
+               var q;
+               if ( elem ) {
+                       type = (type || "fx") + "queue";
+                       q = jQuery._data( elem, type );
+
+                       // Speed up dequeue by getting out quickly if this is just a lookup
+                       if ( data ) {
+                               if ( !q || jQuery.isArray(data) ) {
+                                       q = jQuery._data( elem, type, jQuery.makeArray(data) );
+                               } else {
+                                       q.push( data );
+                               }
+                       }
+                       return q || [];
+               }
+       },
+
+       dequeue: function( elem, type ) {
+               type = type || "fx";
+
+               var queue = jQuery.queue( elem, type ),
+                       fn = queue.shift(),
+                       runner = {};
+
+               // If the fx queue is dequeued, always remove the progress sentinel
+               if ( fn === "inprogress" ) {
+                       fn = queue.shift();
+               }
+
+               if ( fn ) {
+                       // Add a progress sentinel to prevent the fx queue from being
+                       // automatically dequeued
+                       if ( type === "fx" ) {
+                               queue.unshift( "inprogress" );
+                       }
+
+                       jQuery._data( elem, type + ".run", runner );
+                       fn.call( elem, function() {
+                               jQuery.dequeue( elem, type );
+                       }, runner );
+               }
+
+               if ( !queue.length ) {
+                       jQuery.removeData( elem, type + "queue " + type + ".run", true );
+                       handleQueueMarkDefer( elem, type, "queue" );
+               }
+       }
+});
+
+jQuery.fn.extend({
+       queue: function( type, data ) {
+               if ( typeof type !== "string" ) {
+                       data = type;
+                       type = "fx";
+               }
+
+               if ( data === undefined ) {
+                       return jQuery.queue( this[0], type );
+               }
+               return this.each(function() {
+                       var queue = jQuery.queue( this, type, data );
+
+                       if ( type === "fx" && queue[0] !== "inprogress" ) {
+                               jQuery.dequeue( this, type );
+                       }
+               });
+       },
+       dequeue: function( type ) {
+               return this.each(function() {
+                       jQuery.dequeue( this, type );
+               });
+       },
+       // Based off of the plugin by Clint Helfers, with permission.
+       // http://blindsignals.com/index.php/2009/07/jquery-delay/
+       delay: function( time, type ) {
+               time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
+               type = type || "fx";
+
+               return this.queue( type, function( next, runner ) {
+                       var timeout = setTimeout( next, time );
+                       runner.stop = function() {
+                               clearTimeout( timeout );
+                       };
+               });
+       },
+       clearQueue: function( type ) {
+               return this.queue( type || "fx", [] );
+       },
+       // Get a promise resolved when queues of a certain type
+       // are emptied (fx is the type by default)
+       promise: function( type, object ) {
+               if ( typeof type !== "string" ) {
+                       object = type;
+                       type = undefined;
+               }
+               type = type || "fx";
+               var defer = jQuery.Deferred(),
+                       elements = this,
+                       i = elements.length,
+                       count = 1,
+                       deferDataKey = type + "defer",
+                       queueDataKey = type + "queue",
+                       markDataKey = type + "mark",
+                       tmp;
+               function resolve() {
+                       if ( !( --count ) ) {
+                               defer.resolveWith( elements, [ elements ] );
+                       }
+               }
+               while( i-- ) {
+                       if (( tmp = jQuery.data( elements[ i ], deferDataKey, undefined, true ) ||
+                                       ( jQuery.data( elements[ i ], queueDataKey, undefined, true ) ||
+                                               jQuery.data( elements[ i ], markDataKey, undefined, true ) ) &&
+                                       jQuery.data( elements[ i ], deferDataKey, jQuery.Callbacks( "once memory" ), true ) )) {
+                               count++;
+                               tmp.add( resolve );
+                       }
+               }
+               resolve();
+               return defer.promise();
+       }
+});
+
+
+
+
+var rclass = /[\n\t\r]/g,
+       rspace = /\s+/,
+       rreturn = /\r/g,
+       rtype = /^(?:button|input)$/i,
+       rfocusable = /^(?:button|input|object|select|textarea)$/i,
+       rclickable = /^a(?:rea)?$/i,
+       rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,
+       nodeHook, boolHook, fixSpecified;
+
+jQuery.fn.extend({
+       attr: function( name, value ) {
+               return jQuery.access( this, name, value, true, jQuery.attr );
+       },
+
+       removeAttr: function( name ) {
+               return this.each(function() {
+                       jQuery.removeAttr( this, name );
+               });
+       },
+
+       prop: function( name, value ) {
+               return jQuery.access( this, name, value, true, jQuery.prop );
+       },
+
+       removeProp: function( name ) {
+               name = jQuery.propFix[ name ] || name;
+               return this.each(function() {
+                       // try/catch handles cases where IE balks (such as removing a property on window)
+                       try {
+                               this[ name ] = undefined;
+                               delete this[ name ];
+                       } catch( e ) {}
+               });
+       },
+
+       addClass: function( value ) {
+               var classNames, i, l, elem,
+                       setClass, c, cl;
+
+               if ( jQuery.isFunction( value ) ) {
+                       return this.each(function( j ) {
+                               jQuery( this ).addClass( value.call(this, j, this.className) );
+                       });
+               }
+
+               if ( value && typeof value === "string" ) {
+                       classNames = value.split( rspace );
+
+                       for ( i = 0, l = this.length; i < l; i++ ) {
+                               elem = this[ i ];
+
+                               if ( elem.nodeType === 1 ) {
+                                       if ( !elem.className && classNames.length === 1 ) {
+                                               elem.className = value;
+
+                                       } else {
+                                               setClass = " " + elem.className + " ";
+
+                                               for ( c = 0, cl = classNames.length; c < cl; c++ ) {
+                                                       if ( !~setClass.indexOf( " " + classNames[ c ] + " " ) ) {
+                                                               setClass += classNames[ c ] + " ";
+                                                       }
+                                               }
+                                               elem.className = jQuery.trim( setClass );
+                                       }
+                               }
+                       }
+               }
+
+               return this;
+       },
+
+       removeClass: function( value ) {
+               var classNames, i, l, elem, className, c, cl;
+
+               if ( jQuery.isFunction( value ) ) {
+                       return this.each(function( j ) {
+                               jQuery( this ).removeClass( value.call(this, j, this.className) );
+                       });
+               }
+
+               if ( (value && typeof value === "string") || value === undefined ) {
+                       classNames = (value || "").split( rspace );
+
+                       for ( i = 0, l = this.length; i < l; i++ ) {
+                               elem = this[ i ];
+
+                               if ( elem.nodeType === 1 && elem.className ) {
+                                       if ( value ) {
+                                               className = (" " + elem.className + " ").replace( rclass, " " );
+                                               for ( c = 0, cl = classNames.length; c < cl; c++ ) {
+                                                       className = className.replace(" " + classNames[ c ] + " ", " ");
+                                               }
+                                               elem.className = jQuery.trim( className );
+
+                                       } else {
+                                               elem.className = "";
+                                       }
+                               }
+                       }
+               }
+
+               return this;
+       },
+
+       toggleClass: function( value, stateVal ) {
+               var type = typeof value,
+                       isBool = typeof stateVal === "boolean";
+
+               if ( jQuery.isFunction( value ) ) {
+                       return this.each(function( i ) {
+                               jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );
+                       });
+               }
+
+               return this.each(function() {
+                       if ( type === "string" ) {
+                               // toggle individual class names
+                               var className,
+                                       i = 0,
+                                       self = jQuery( this ),
+                                       state = stateVal,
+                                       classNames = value.split( rspace );
+
+                               while ( (className = classNames[ i++ ]) ) {
+                                       // check each className given, space seperated list
+                                       state = isBool ? state : !self.hasClass( className );
+                                       self[ state ? "addClass" : "removeClass" ]( className );
+                               }
+
+                       } else if ( type === "undefined" || type === "boolean" ) {
+                               if ( this.className ) {
+                                       // store className if set
+                                       jQuery._data( this, "__className__", this.className );
+                               }
+
+                               // toggle whole className
+                               this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || "";
+                       }
+               });
+       },
+
+       hasClass: function( selector ) {
+               var className = " " + selector + " ";
+               for ( var i = 0, l = this.length; i < l; i++ ) {
+                       if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) {
+                               return true;
+                       }
+               }
+
+               return false;
+       },
+
+       val: function( value ) {
+               var hooks, ret,
+                       elem = this[0];
+
+               if ( !arguments.length ) {
+                       if ( elem ) {
+                               hooks = jQuery.valHooks[ elem.nodeName.toLowerCase() ] || jQuery.valHooks[ elem.type ];
+
+                               if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
+                                       return ret;
+                               }
+
+                               ret = elem.value;
+
+                               return typeof ret === "string" ?
+                                       // handle most common string cases
+                                       ret.replace(rreturn, "") :
+                                       // handle cases where value is null/undef or number
+                                       ret == null ? "" : ret;
+                       }
+
+                       return undefined;
+               }
+
+               var isFunction = jQuery.isFunction( value );
+
+               return this.each(function( i ) {
+                       var self = jQuery(this), val;
+
+                       if ( this.nodeType !== 1 ) {
+                               return;
+                       }
+
+                       if ( isFunction ) {
+                               val = value.call( this, i, self.val() );
+                       } else {
+                               val = value;
+                       }
+
+                       // Treat null/undefined as ""; convert numbers to string
+                       if ( val == null ) {
+                               val = "";
+                       } else if ( typeof val === "number" ) {
+                               val += "";
+                       } else if ( jQuery.isArray( val ) ) {
+                               val = jQuery.map(val, function ( value ) {
+                                       return value == null ? "" : value + "";
+                               });
+                       }
+
+                       hooks = jQuery.valHooks[ this.nodeName.toLowerCase() ] || jQuery.valHooks[ this.type ];
+
+                       // If set returns undefined, fall back to normal setting
+                       if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {
+                               this.value = val;
+                       }
+               });
+       }
+});
+
+jQuery.extend({
+       valHooks: {
+               option: {
+                       get: function( elem ) {
+                               // attributes.value is undefined in Blackberry 4.7 but
+                               // uses .value. See #6932
+                               var val = elem.attributes.value;
+                               return !val || val.specified ? elem.value : elem.text;
+                       }
+               },
+               select: {
+                       get: function( elem ) {
+                               var value,
+                                       index = elem.selectedIndex,
+                                       values = [],
+                                       options = elem.options,
+                                       one = elem.type === "select-one";
+
+                               // Nothing was selected
+                               if ( index < 0 ) {
+                                       return null;
+                               }
+
+                               // Loop through all the selected options
+                               for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) {
+                                       var option = options[ i ];
+
+                                       // Don't return options that are disabled or in a disabled optgroup
+                                       if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) &&
+                                                       (!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" )) ) {
+
+                                               // Get the specific value for the option
+                                               value = jQuery( option ).val();
+
+                                               // We don't need an array for one selects
+                                               if ( one ) {
+                                                       return value;
+                                               }
+
+                                               // Multi-Selects return an array
+                                               values.push( value );
+                                       }
+                               }
+
+                               // Fixes Bug #2551 -- select.val() broken in IE after form.reset()
+                               if ( one && !values.length && options.length ) {
+                                       return jQuery( options[ index ] ).val();
+                               }
+
+                               return values;
+                       },
+
+                       set: function( elem, value ) {
+                               var values = jQuery.makeArray( value );
+
+                               jQuery(elem).find("option").each(function() {
+                                       this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;
+                               });
+
+                               if ( !values.length ) {
+                                       elem.selectedIndex = -1;
+                               }
+                               return values;
+                       }
+               }
+       },
+
+       attrFn: {
+               val: true,
+               css: true,
+               html: true,
+               text: true,
+               data: true,
+               width: true,
+               height: true,
+               offset: true
+       },
+
+       attr: function( elem, name, value, pass ) {
+               var nType = elem.nodeType;
+
+               // don't get/set attributes on text, comment and attribute nodes
+               if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
+                       return undefined;
+               }
+
+               if ( pass && name in jQuery.attrFn ) {
+                       return jQuery( elem )[ name ]( value );
+               }
+
+               // Fallback to prop when attributes are not supported
+               if ( !("getAttribute" in elem) ) {
+                       return jQuery.prop( elem, name, value );
+               }
+
+               var ret, hooks,
+                       notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
+
+               // Normalize the name if needed
+               if ( notxml ) {
+                       name = name.toLowerCase();
+                       hooks = jQuery.attrHooks[ name ] || (rboolean.test( name ) ? boolHook : nodeHook);
+               }
+
+               if ( value !== undefined ) {
+
+                       if ( value === null ) {
+                               jQuery.removeAttr( elem, name );
+                               return undefined;
+
+                       } else if ( hooks && "set" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) {
+                               return ret;
+
+                       } else {
+                               elem.setAttribute( name, "" + value );
+                               return value;
+                       }
+
+               } else if ( hooks && "get" in hooks && notxml && (ret = hooks.get( elem, name )) !== null ) {
+                       return ret;
+
+               } else {
+
+                       ret = elem.getAttribute( name );
+
+                       // Non-existent attributes return null, we normalize to undefined
+                       return ret === null ?
+                               undefined :
+                               ret;
+               }
+       },
+
+       removeAttr: function( elem, value ) {
+               var propName, attrNames, name, l,
+                       i = 0;
+
+               if ( elem.nodeType === 1 ) {
+                       attrNames = (value || "").split( rspace );
+                       l = attrNames.length;
+
+                       for ( ; i < l; i++ ) {
+                               name = attrNames[ i ].toLowerCase();
+
+                               // See #9699 for explanation of this approach (setting first, then removal)
+                               jQuery.attr( elem, name, "" );
+                               elem.removeAttribute( name );
+
+                               // Set corresponding property to false for boolean attributes
+                               if ( rboolean.test( name ) && (propName = jQuery.propFix[ name ] || name) in elem ) {
+                                       elem[ propName ] = false;
+                               }
+                       }
+               }
+       },
+
+       attrHooks: {
+               type: {
+                       set: function( elem, value ) {
+                               // We can't allow the type property to be changed (since it causes problems in IE)
+                               if ( rtype.test( elem.nodeName ) && elem.parentNode ) {
+                                       jQuery.error( "type property can't be changed" );
+                               } else if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) {
+                                       // Setting the type on a radio button after the value resets the value in IE6-9
+                                       // Reset value to it's default in case type is set after value
+                                       // This is for element creation
+                                       var val = elem.value;
+                                       elem.setAttribute( "type", value );
+                                       if ( val ) {
+                                               elem.value = val;
+                                       }
+                                       return value;
+                               }
+                       }
+               },
+               // Use the value property for back compat
+               // Use the nodeHook for button elements in IE6/7 (#1954)
+               value: {
+                       get: function( elem, name ) {
+                               if ( nodeHook && jQuery.nodeName( elem, "button" ) ) {
+                                       return nodeHook.get( elem, name );
+                               }
+                               return name in elem ?
+                                       elem.value :
+                                       null;
+                       },
+                       set: function( elem, value, name ) {
+                               if ( nodeHook && jQuery.nodeName( elem, "button" ) ) {
+                                       return nodeHook.set( elem, value, name );
+                               }
+                               // Does not return so that setAttribute is also used
+                               elem.value = value;
+                       }
+               }
+       },
+
+       propFix: {
+               tabindex: "tabIndex",
+               readonly: "readOnly",
+               "for": "htmlFor",
+               "class": "className",
+               maxlength: "maxLength",
+               cellspacing: "cellSpacing",
+               cellpadding: "cellPadding",
+               rowspan: "rowSpan",
+               colspan: "colSpan",
+               usemap: "useMap",
+               frameborder: "frameBorder",
+               contenteditable: "contentEditable"
+       },
+
+       prop: function( elem, name, value ) {
+               var nType = elem.nodeType;
+
+               // don't get/set properties on text, comment and attribute nodes
+               if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
+                       return undefined;
+               }
+
+               var ret, hooks,
+                       notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
+
+               if ( notxml ) {
+                       // Fix name and attach hooks
+                       name = jQuery.propFix[ name ] || name;
+                       hooks = jQuery.propHooks[ name ];
+               }
+
+               if ( value !== undefined ) {
+                       if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
+                               return ret;
+
+                       } else {
+                               return (elem[ name ] = value);
+                       }
+
+               } else {
+                       if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
+                               return ret;
+
+                       } else {
+                               return elem[ name ];
+                       }
+               }
+       },
+
+       propHooks: {
+               tabIndex: {
+                       get: function( elem ) {
+                               // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
+                               // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
+                               var attributeNode = elem.getAttributeNode("tabindex");
+
+                               return attributeNode && attributeNode.specified ?
+                                       parseInt( attributeNode.value, 10 ) :
+                                       rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
+                                               0 :
+                                               undefined;
+                       }
+               }
+       }
+});
+
+// Add the tabIndex propHook to attrHooks for back-compat (different case is intentional)
+jQuery.attrHooks.tabindex = jQuery.propHooks.tabIndex;
+
+// Hook for boolean attributes
+boolHook = {
+       get: function( elem, name ) {
+               // Align boolean attributes with corresponding properties
+               // Fall back to attribute presence where some booleans are not supported
+               var attrNode,
+                       property = jQuery.prop( elem, name );
+               return property === true || typeof property !== "boolean" && ( attrNode = elem.getAttributeNode(name) ) && attrNode.nodeValue !== false ?
+                       name.toLowerCase() :
+                       undefined;
+       },
+       set: function( elem, value, name ) {
+               var propName;
+               if ( value === false ) {
+                       // Remove boolean attributes when set to false
+                       jQuery.removeAttr( elem, name );
+               } else {
+                       // value is true since we know at this point it's type boolean and not false
+                       // Set boolean attributes to the same name and set the DOM property
+                       propName = jQuery.propFix[ name ] || name;
+                       if ( propName in elem ) {
+                               // Only set the IDL specifically if it already exists on the element
+                               elem[ propName ] = true;
+                       }
+
+                       elem.setAttribute( name, name.toLowerCase() );
+               }
+               return name;
+       }
+};
+
+// IE6/7 do not support getting/setting some attributes with get/setAttribute
+if ( !jQuery.support.getSetAttribute ) {
+
+       fixSpecified = {
+               name: true,
+               id: true
+       };
+
+       // Use this for any attribute in IE6/7
+       // This fixes almost every IE6/7 issue
+       nodeHook = jQuery.valHooks.button = {
+               get: function( elem, name ) {
+                       var ret;
+                       ret = elem.getAttributeNode( name );
+                       return ret && (fixSpecified[ name ] ? ret.nodeValue !== "" : ret.specified) ?
+                               ret.nodeValue :
+                               undefined;
+               },
+               set: function( elem, value, name ) {
+                       // Set the existing or create a new attribute node
+                       var ret = elem.getAttributeNode( name );
+                       if ( !ret ) {
+                               ret = document.createAttribute( name );
+                               elem.setAttributeNode( ret );
+                       }
+                       return (ret.nodeValue = value + "");
+               }
+       };
+
+       // Apply the nodeHook to tabindex
+       jQuery.attrHooks.tabindex.set = nodeHook.set;
+
+       // Set width and height to auto instead of 0 on empty string( Bug #8150 )
+       // This is for removals
+       jQuery.each([ "width", "height" ], function( i, name ) {
+               jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
+                       set: function( elem, value ) {
+                               if ( value === "" ) {
+                                       elem.setAttribute( name, "auto" );
+                                       return value;
+                               }
+                       }
+               });
+       });
+
+       // Set contenteditable to false on removals(#10429)
+       // Setting to empty string throws an error as an invalid value
+       jQuery.attrHooks.contenteditable = {
+               get: nodeHook.get,
+               set: function( elem, value, name ) {
+                       if ( value === "" ) {
+                               value = "false";
+                       }
+                       nodeHook.set( elem, value, name );
+               }
+       };
+}
+
+
+// Some attributes require a special call on IE
+if ( !jQuery.support.hrefNormalized ) {
+       jQuery.each([ "href", "src", "width", "height" ], function( i, name ) {
+               jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
+                       get: function( elem ) {
+                               var ret = elem.getAttribute( name, 2 );
+                               return ret === null ? undefined : ret;
+                       }
+               });
+       });
+}
+
+if ( !jQuery.support.style ) {
+       jQuery.attrHooks.style = {
+               get: function( elem ) {
+                       // Return undefined in the case of empty string
+                       // Normalize to lowercase since IE uppercases css property names
+                       return elem.style.cssText.toLowerCase() || undefined;
+               },
+               set: function( elem, value ) {
+                       return (elem.style.cssText = "" + value);
+               }
+       };
+}
+
+// Safari mis-reports the default selected property of an option
+// Accessing the parent's selectedIndex property fixes it
+if ( !jQuery.support.optSelected ) {
+       jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, {
+               get: function( elem ) {
+                       var parent = elem.parentNode;
+
+                       if ( parent ) {
+                               parent.selectedIndex;
+
+                               // Make sure that it also works with optgroups, see #5701
+                               if ( parent.parentNode ) {
+                                       parent.parentNode.selectedIndex;
+                               }
+                       }
+                       return null;
+               }
+       });
+}
+
+// Radios and checkboxes getter/setter
+if ( !jQuery.support.checkOn ) {
+       jQuery.each([ "radio", "checkbox" ], function() {
+               jQuery.valHooks[ this ] = {
+                       get: function( elem ) {
+                               // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified
+                               return elem.getAttribute("value") === null ? "on" : elem.value;
+                       }
+               };
+       });
+}
+jQuery.each([ "radio", "checkbox" ], function() {
+       jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], {
+               set: function( elem, value ) {
+                       if ( jQuery.isArray( value ) ) {
+                               return (elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0);
+                       }
+               }
+       });
+});
+
+
+
+
+var rnamespaces = /\.(.*)$/,
+       rformElems = /^(?:textarea|input|select)$/i,
+       rperiod = /\./g,
+       rspaces = / /g,
+       rescape = /[^\w\s.|`]/g,
+       rtypenamespace = /^([^\.]*)?(?:\.(.+))?$/,
+       rhoverHack = /\bhover(\.\S+)?/,
+       rkeyEvent = /^key/,
+       rmouseEvent = /^(?:mouse|contextmenu)|click/,
+       rquickIs = /^([\w\-]+)?(?:#([\w\-]+))?(?:\.([\w\-]+))?(?:\[([\w+\-]+)=["']?([\w\-]*)["']?\])?$/,
+       quickParse = function( selector ) {
+               var quick = rquickIs.exec( selector );
+               if ( quick ) {
+                       //   0  1    2   3      4         5
+                       // [ _, tag, id, class, attrName, attrValue ]
+                       quick[1] = ( quick[1] || "" ).toLowerCase();
+                       quick[3] = quick[3] && new RegExp( "\\b" + quick[3] + "\\b" );
+               }
+               return quick;
+       },
+       quickIs = function( elem, m ) {
+               return (
+                       (!m[1] || elem.nodeName.toLowerCase() === m[1]) &&
+                       (!m[2] || elem.id === m[2]) &&
+                       (!m[3] || m[3].test( elem.className )) &&
+                       (!m[4] || elem.getAttribute( m[4] ) == m[5])
+               );
+       };
+
+/*
+ * Helper functions for managing events -- not part of the public interface.
+ * Props to Dean Edwards' addEvent library for many of the ideas.
+ */
+jQuery.event = {
+
+       add: function( elem, types, handler, data, selector ) {
+
+               var elemData, eventHandle, events,
+                       t, tns, type, namespaces, handleObj,
+                       handleObjIn, quick, handlers, special;
+
+               // Don't attach events to noData or text/comment nodes (allow plain objects tho)
+               if ( elem.nodeType === 3 || elem.nodeType === 8 || !types || !handler || !(elemData = jQuery._data( elem )) ) {
+                       return;
+               }
+
+               // Caller can pass in an object of custom data in lieu of the handler
+               if ( handler.handler ) {
+                       handleObjIn = handler;
+                       handler = handleObjIn.handler;
+               }
+
+               // Make sure that the handler has a unique ID, used to find/remove it later
+               if ( !handler.guid ) {
+                       handler.guid = jQuery.guid++;
+               }
+
+               // Init the element's event structure and main handler, if this is the first
+               events = elemData.events;
+               if ( !events ) {
+                       elemData.events = events = {};
+               }
+               eventHandle = elemData.handle;
+               if ( !eventHandle ) {
+                       elemData.handle = eventHandle = function( e ) {
+                               // Discard the second event of a jQuery.event.trigger() and
+                               // when an event is called after a page has unloaded
+                               return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ?
+                                       jQuery.event.handle.apply( eventHandle.elem, arguments ) :
+                                       undefined;
+                       };
+                       // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events
+                       eventHandle.elem = elem;
+               }
+
+               // Handle multiple events separated by a space
+               // jQuery(...).bind("mouseover mouseout", fn);
+               types = types.replace( rhoverHack, "mouseover$1 mouseout$1" ).split( " " );
+               for ( t = 0; t < types.length; t++ ) {
+
+                       tns = rtypenamespace.exec( types[t] ) || [];
+                       type = tns[1];
+                       namespaces = (tns[2] || "").split( "." ).sort();
+
+                       // If event changes its type, use the special event handlers for the changed type
+                       special = jQuery.event.special[ type ] || {};
+
+                       // If selector defined, determine special event api type, otherwise given type
+                       type = ( selector ? special.delegateType : special.bindType ) || type;
+
+                       // Update special based on newly reset type
+                       special = jQuery.event.special[ type ] || {};
+
+                       // handleObj is passed to all event handlers
+                       handleObj = jQuery.extend({
+                               type: type,
+                               origType: tns[1],
+                               data: data,
+                               handler: handler,
+                               guid: handler.guid,
+                               selector: selector,
+                               namespace: namespaces.join(".")
+                       }, handleObjIn );
+
+                       // Delegated event; pre-analyze selector so it's processed quickly on event dispatch
+                       if ( selector ) {
+                               handleObj.quick = quickParse( selector );
+                               if ( !handleObj.quick && jQuery.expr.match.POS.test( selector ) ) {
+                                       handleObj.isPositional = true;
+                               }
+                       }
+
+                       // Init the event handler queue if we're the first
+                       handlers = events[ type ];
+                       if ( !handlers ) {
+                               handlers = events[ type ] = [];
+                               handlers.delegateCount = 0;
+
+                               // Only use addEventListener/attachEvent if the special events handler returns false
+                               if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
+                                       // Bind the global event handler to the element
+                                       if ( elem.addEventListener ) {
+                                               elem.addEventListener( type, eventHandle, false );
+
+                                       } else if ( elem.attachEvent ) {
+                                               elem.attachEvent( "on" + type, eventHandle );
+                                       }
+                               }
+                       }
+
+                       if ( special.add ) {
+                               special.add.call( elem, handleObj );
+
+                               if ( !handleObj.handler.guid ) {
+                                       handleObj.handler.guid = handler.guid;
+                               }
+                       }
+
+                       // Add to the element's handler list, delegates in front
+                       if ( selector ) {
+                               handlers.splice( handlers.delegateCount++, 0, handleObj );
+                       } else {
+                               handlers.push( handleObj );
+                       }
+
+                       // Keep track of which events have ever been used, for event optimization
+                       jQuery.event.global[ type ] = true;
+               }
+
+               // Nullify elem to prevent memory leaks in IE
+               elem = null;
+       },
+
+       global: {},
+
+       // Detach an event or set of events from an element
+       remove: function( elem, types, handler, selector ) {
+
+               var elemData = jQuery.hasData( elem ) && jQuery._data( elem ),
+                       t, tns, type, namespaces, origCount,
+                       j, events, special, handle, eventType, handleObj;
+
+               if ( !elemData || !(events = elemData.events) ) {
+                       return;
+               }
+
+               // For removal, types can be an Event object
+               if ( types && types.type && types.handler ) {
+                       handler = types.handler;
+                       types = types.type;
+                       selector = types.selector;
+               }
+
+               // Once for each type.namespace in types; type may be omitted
+               types = (types || "").replace( rhoverHack, "mouseover$1 mouseout$1" ).split(" ");
+               for ( t = 0; t < types.length; t++ ) {
+                       tns = rtypenamespace.exec( types[t] ) || [];
+                       type = tns[1];
+                       namespaces = tns[2];
+
+                       // Unbind all events (on this namespace, if provided) for the element
+                       if ( !type ) {
+                               namespaces = namespaces? "." + namespaces : "";
+                               for ( j in events ) {
+                                       jQuery.event.remove( elem, j + namespaces, handler, selector );
+                               }
+                               return;
+                       }
+
+                       special = jQuery.event.special[ type ] || {};
+                       type = ( selector? special.delegateType : special.bindType ) || type;
+                       eventType = events[ type ] || [];
+                       origCount = eventType.length;
+                       namespaces = namespaces ? new RegExp("(^|\\.)" + namespaces.split(".").sort().join("\\.(?:.*\\.)?") + "(\\.|$)") : null;
+
+                       // Only need to loop for special events or selective removal
+                       if ( handler || namespaces || selector || special.remove ) {
+                               for ( j = 0; j < eventType.length; j++ ) {
+                                       handleObj = eventType[ j ];
+
+                                       if ( !handler || handler.guid === handleObj.guid ) {
+                                               if ( !namespaces || namespaces.test( handleObj.namespace ) ) {
+                                                       if ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) {
+                                                               eventType.splice( j--, 1 );
+
+                                                               if ( handleObj.selector ) {
+                                                                       eventType.delegateCount--;
+                                                               }
+                                                               if ( special.remove ) {
+                                                                       special.remove.call( elem, handleObj );
+                                                               }
+                                                       }
+                                               }
+                                       }
+                               }
+                       } else {
+                               // Removing all events
+                               eventType.length = 0;
+                       }
+
+                       // Remove generic event handler if we removed something and no more handlers exist
+                       // (avoids potential for endless recursion during removal of special event handlers)
+                       if ( eventType.length === 0 && origCount !== eventType.length ) {
+                               if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) {
+                                       jQuery.removeEvent( elem, type, elemData.handle );
+                               }
+
+                               delete events[ type ];
+                       }
+               }
+
+               // Remove the expando if it's no longer used
+               if ( jQuery.isEmptyObject( events ) ) {
+                       handle = elemData.handle;
+                       if ( handle ) {
+                               handle.elem = null;
+                       }
+
+                       // removeData also checks for emptiness and clears the expando if empty
+                       // so use it instead of delete
+                       jQuery.removeData( elem, [ "events", "handle" ], true );
+               }
+       },
+
+       // Events that are safe to short-circuit if no handlers are attached.
+       // Native DOM events should not be added, they may have inline handlers.
+       customEvent: {
+               "getData": true,
+               "setData": true,
+               "changeData": true
+       },
+
+       trigger: function( event, data, elem, onlyHandlers ) {
+               // Don't do events on text and comment nodes
+               if ( elem && (elem.nodeType === 3 || elem.nodeType === 8) ) {
+                       return;
+               }
+
+               // Event object or event type
+               var type = event.type || event,
+                       namespaces = [],
+                       cache, exclusive, i, cur, old, ontype, special, handle, eventPath, bubbleType;
+
+               if ( type.indexOf( "!" ) >= 0 ) {
+                       // Exclusive events trigger only for the exact event (no namespaces)
+                       type = type.slice(0, -1);
+                       exclusive = true;
+               }
+
+               if ( type.indexOf( "." ) >= 0 ) {
+                       // Namespaced trigger; create a regexp to match event type in handle()
+                       namespaces = type.split(".");
+                       type = namespaces.shift();
+                       namespaces.sort();
+               }
+
+               if ( (!elem || jQuery.event.customEvent[ type ]) && !jQuery.event.global[ type ] ) {
+                       // No jQuery handlers for this event type, and it can't have inline handlers
+                       return;
+               }
+
+               // Caller can pass in an Event, Object, or just an event type string
+               event = typeof event === "object" ?
+                       // jQuery.Event object
+                       event[ jQuery.expando ] ? event :
+                       // Object literal
+                       new jQuery.Event( type, event ) :
+                       // Just the event type (string)
+                       new jQuery.Event( type );
+
+               event.type = type;
+               event.isTrigger = true;
+               event.exclusive = exclusive;
+               event.namespace = namespaces.join( "." );
+               event.namespace_re = event.namespace? new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.)?") + "(\\.|$)") : null;
+               ontype = type.indexOf( ":" ) < 0 ? "on" + type : "";
+
+               // triggerHandler() and global events don't bubble or run the default action
+               if ( onlyHandlers || !elem ) {
+                       event.preventDefault();
+               }
+
+               // Handle a global trigger
+               if ( !elem ) {
+
+                       // TODO: Stop taunting the data cache; remove global events and always attach to document
+                       cache = jQuery.cache;
+                       event.stopPropagation();
+                       for ( i in cache ) {
+                               if ( cache[ i ].events && cache[ i ].events[ type ] ) {
+                                       jQuery.event.trigger( event, data, cache[ i ].handle.elem );
+                               }
+                       }
+                       return;
+               }
+
+               // Clean up the event in case it is being reused
+               event.result = undefined;
+               if ( !event.target ) {
+                       event.target = elem;
+               }
+
+               // Clone any incoming data and prepend the event, creating the handler arg list
+               data = data != null ? jQuery.makeArray( data ) : [];
+               data.unshift( event );
+
+               // Allow special events to draw outside the lines
+               special = jQuery.event.special[ type ] || {};
+               if ( special.trigger && special.trigger.apply( elem, data ) === false ) {
+                       return;
+               }
+
+               // Determine event propagation path in advance, per W3C events spec (#9951)
+               // Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
+               eventPath = [[ elem, special.bindType || type ]];
+               if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
+
+                       bubbleType = special.delegateType || type;
+                       old = null;
+                       for ( cur = elem.parentNode; cur; cur = cur.parentNode ) {
+                               eventPath.push([ cur, bubbleType ]);
+                               old = cur;
+                       }
+
+                       // Only add window if we got to document (e.g., not plain obj or detached DOM)
+                       if ( old && old === elem.ownerDocument ) {
+                               eventPath.push([ old.defaultView || old.parentWindow || window, bubbleType ]);
+                       }
+               }
+
+               // Fire handlers on the event path
+               for ( i = 0; i < eventPath.length; i++ ) {
+
+                       cur = eventPath[i][0];
+                       event.type = eventPath[i][1];
+
+                       handle = (jQuery._data( cur, "events" ) || {})[ event.type ] && jQuery._data( cur, "handle" );
+                       if ( handle ) {
+                               handle.apply( cur, data );
+                       }
+                       handle = ontype && cur[ ontype ];
+                       if ( handle && jQuery.acceptData( cur ) ) {
+                               handle.apply( cur, data );
+                       }
+
+                       if ( event.isPropagationStopped() ) {
+                               break;
+                       }
+               }
+               event.type = type;
+
+               // If nobody prevented the default action, do it now
+               if ( !event.isDefaultPrevented() ) {
+
+                       if ( (!special._default || special._default.call( elem.ownerDocument, event, data ) === false) &&
+                               !(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) {
+
+                               // Call a native DOM method on the target with the same name name as the event.
+                               // Can't use an .isFunction() check here because IE6/7 fails that test.
+                               // Don't do default actions on window, that's where global variables be (#6170)
+                               // IE<9 dies on focus/blur to hidden element (#1486)
+                               if ( ontype && elem[ type ] && ((type !== "focus" && type !== "blur") || event.target.offsetWidth !== 0) && !jQuery.isWindow( elem ) ) {
+
+                                       // Don't re-trigger an onFOO event when we call its FOO() method
+                                       old = elem[ ontype ];
+
+                                       if ( old ) {
+                                               elem[ ontype ] = null;
+                                       }
+
+                                       // Prevent re-triggering of the same event, since we already bubbled it above
+                                       jQuery.event.triggered = type;
+                                       elem[ type ]();
+                                       jQuery.event.triggered = undefined;
+
+                                       if ( old ) {
+                                               elem[ ontype ] = old;
+                                       }
+                               }
+                       }
+               }
+
+               return event.result;
+       },
+
+       handle: function( event ) {
+
+               // Make a writable jQuery.Event from the native event object
+               event = jQuery.event.fix( event || window.event );
+
+               var handlers = ((jQuery._data( this, "events" ) || {})[ event.type ] || []),
+                       delegateCount = handlers.delegateCount,
+                       args = [].slice.call( arguments, 0 ),
+                       handlerQueue = [],
+                       i, cur, selMatch, matches, handleObj, sel, hit, related;
+
+               // Use the fix-ed jQuery.Event rather than the (read-only) native event
+               args[0] = event;
+
+               // Determine handlers that should run if there are delegated events
+               // Avoid disabled elements in IE (#6911) and non-left-click bubbling in Firefox (#3861)
+               if ( delegateCount && !event.target.disabled && !(event.button && event.type === "click") ) {
+
+                       for ( cur = event.target; cur != this; cur = cur.parentNode || this ) {
+                               selMatch = {};
+                               matches = [];
+                               for ( i = 0; i < delegateCount; i++ ) {
+                                       handleObj = handlers[ i ];
+                                       sel = handleObj.selector;
+                                       hit = selMatch[ sel ];
+
+                                       if ( handleObj.isPositional ) {
+                                               // Since .is() does not work for positionals; see http://jsfiddle.net/eJ4yd/3/
+                                               hit = ( hit || (selMatch[ sel ] = jQuery( sel )) ).index( cur ) >= 0;
+                                       } else if ( hit === undefined ) {
+                                               hit = selMatch[ sel ] = ( handleObj.quick ? quickIs( cur, handleObj.quick ) : jQuery( cur ).is( sel ) );
+                                       }
+                                       if ( hit ) {
+                                               matches.push( handleObj );
+                                       }
+                               }
+                               if ( matches.length ) {
+                                       handlerQueue.push({ elem: cur, matches: matches });
+                               }
+                       }
+               }
+
+               // Copy the remaining (bound) handlers in case they're changed
+               handlers = handlers.slice( delegateCount );
+
+               // Run delegates first; they may want to stop propagation beneath us
+               event.delegateTarget = this;
+               for ( i = 0; i < handlerQueue.length && !event.isPropagationStopped(); i++ ) {
+                       matched = handlerQueue[ i ];
+                       dispatch( matched.elem, event, matched.matches, args );
+               }
+               delete event.delegateTarget;
+
+               // Run non-delegated handlers for this level
+               if ( handlers.length ) {
+                       dispatch( this, event, handlers, args );
+               }
+
+               return event.result;
+       },
+
+       // Includes some event props shared by KeyEvent and MouseEvent
+       // *** attrChange attrName relatedNode srcElement  are not normalized, non-W3C, deprecated, will be removed in 1.8 ***
+       props: "attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
+
+       fixHooks: {},
+
+       keyHooks: {
+               props: "char charCode key keyCode".split(" "),
+               filter: function( event, original ) {
+
+                       // Add which for key events
+                       if ( event.which == null ) {
+                               event.which = original.charCode != null ? original.charCode : original.keyCode;
+                       }
+
+                       return event;
+               }
+       },
+
+       mouseHooks: {
+               props: "button buttons clientX clientY fromElement layerX layerY offsetX offsetY pageX pageY screenX screenY toElement wheelDelta".split(" "),
+               filter: function( event, original ) {
+                       var eventDoc, doc, body,
+                               button = original.button,
+                               fromElement = original.fromElement;
+
+                       // Calculate pageX/Y if missing and clientX/Y available
+                       if ( event.pageX == null && original.clientX != null ) {
+                               eventDoc = event.target.ownerDocument || document;
+                               doc = eventDoc.documentElement;
+                               body = eventDoc.body;
+
+                               event.pageX = original.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0);
+                               event.pageY = original.clientY + (doc && doc.scrollTop  || body && body.scrollTop  || 0) - (doc && doc.clientTop  || body && body.clientTop  || 0);
+                       }
+
+                       // Add relatedTarget, if necessary
+                       if ( !event.relatedTarget && fromElement ) {
+                               event.relatedTarget = fromElement === event.target ? original.toElement : fromElement;
+                       }
+
+                       // Add which for click: 1 === left; 2 === middle; 3 === right
+                       // Note: button is not normalized, so don't use it
+                       if ( !event.which && button !== undefined ) {
+                               event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );
+                       }
+
+                       return event;
+               }
+       },
+
+       fix: function( event ) {
+               if ( event[ jQuery.expando ] ) {
+                       return event;
+               }
+
+               // Create a writable copy of the event object and normalize some properties
+               var i, prop,
+                       originalEvent = event,
+                       fixHook = jQuery.event.fixHooks[ event.type ] || {},
+                       copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;
+
+               event = jQuery.Event( originalEvent );
+
+               for ( i = copy.length; i; ) {
+                       prop = copy[ --i ];
+                       event[ prop ] = originalEvent[ prop ];
+               }
+
+               // Fix target property, if necessary (#1925, IE 6/7/8 & Safari2)
+               if ( !event.target ) {
+                       event.target = originalEvent.srcElement || document;
+               }
+
+               // Target should not be a text node (#504, Safari)
+               if ( event.target.nodeType === 3 ) {
+                       event.target = event.target.parentNode;
+               }
+
+               // For mouse/key events; add metaKey if it's not there (#3368, IE6/7/8)
+               if ( event.metaKey === undefined ) {
+                       event.metaKey = event.ctrlKey;
+               }
+
+               return fixHook.filter? fixHook.filter( event, originalEvent ) : event;
+       },
+
+       special: {
+               ready: {
+                       // Make sure the ready event is setup
+                       setup: jQuery.bindReady
+               },
+
+               focus: {
+                       delegateType: "focusin",
+                       noBubble: true
+               },
+               blur: {
+                       delegateType: "focusout",
+                       noBubble: true
+               },
+
+               beforeunload: {
+                       setup: function( data, namespaces, eventHandle ) {
+                               // We only want to do this special case on windows
+                               if ( jQuery.isWindow( this ) ) {
+                                       this.onbeforeunload = eventHandle;
+                               }
+                       },
+
+                       teardown: function( namespaces, eventHandle ) {
+                               if ( this.onbeforeunload === eventHandle ) {
+                                       this.onbeforeunload = null;
+                               }
+                       }
+               }
+       },
+
+       simulate: function( type, elem, event, bubble ) {
+               // Piggyback on a donor event to simulate a different one.
+               // Fake originalEvent to avoid donor's stopPropagation, but if the
+               // simulated event prevents default then we do the same on the donor.
+               var e = jQuery.extend(
+                       new jQuery.Event(),
+                       event,
+                       { type: type,
+                               isSimulated: true,
+                               originalEvent: {}
+                       }
+               );
+               if ( bubble ) {
+                       jQuery.event.trigger( e, null, elem );
+               } else {
+                       jQuery.event.handle.call( elem, e );
+               }
+               if ( e.isDefaultPrevented() ) {
+                       event.preventDefault();
+               }
+       }
+};
+
+// Run jQuery handler functions; called from jQuery.event.handle
+function dispatch( target, event, handlers, args ) {
+       var run_all = !event.exclusive && !event.namespace,
+               specialHandle = ( jQuery.event.special[ event.type ] || {} ).handle,
+               j, handleObj, ret;
+
+       event.currentTarget = target;
+       for ( j = 0; j < handlers.length && !event.isImmediatePropagationStopped(); j++ ) {
+               handleObj = handlers[ j ];
+
+               // Triggered event must either 1) be non-exclusive and have no namespace, or
+               // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).
+               if ( run_all || (!event.namespace && !handleObj.namespace) || event.namespace_re && event.namespace_re.test( handleObj.namespace ) ) {
+
+                       // Pass in a reference to the handler function itself
+                       // So that we can later remove it
+                       event.handler = handleObj.handler;
+                       event.data = handleObj.data;
+                       event.handleObj = handleObj;
+
+                       ret = ( specialHandle || handleObj.handler ).apply( target, args );
+
+                       if ( ret !== undefined ) {
+                               event.result = ret;
+                               if ( ret === false ) {
+                                       event.preventDefault();
+                                       event.stopPropagation();
+                               }
+                       }
+               }
+       }
+}
+
+jQuery.removeEvent = document.removeEventListener ?
+       function( elem, type, handle ) {
+               if ( elem.removeEventListener ) {
+                       elem.removeEventListener( type, handle, false );
+               }
+       } :
+       function( elem, type, handle ) {
+               if ( elem.detachEvent ) {
+                       elem.detachEvent( "on" + type, handle );
+               }
+       };
+
+jQuery.Event = function( src, props ) {
+       // Allow instantiation without the 'new' keyword
+       if ( !(this instanceof jQuery.Event) ) {
+               return new jQuery.Event( src, props );
+       }
+
+       // Event object
+       if ( src && src.type ) {
+               this.originalEvent = src;
+               this.type = src.type;
+
+               // Events bubbling up the document may have been marked as prevented
+               // by a handler lower down the tree; reflect the correct value.
+               this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false ||
+                       src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse;
+
+       // Event type
+       } else {
+               this.type = src;
+       }
+
+       // Put explicitly provided properties onto the event object
+       if ( props ) {
+               jQuery.extend( this, props );
+       }
+
+       // Create a timestamp if incoming event doesn't have one
+       this.timeStamp = src && src.timeStamp || jQuery.now();
+
+       // Mark it as fixed
+       this[ jQuery.expando ] = true;
+};
+
+function returnFalse() {
+       return false;
+}
+function returnTrue() {
+       return true;
+}
+
+// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
+// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
+jQuery.Event.prototype = {
+       preventDefault: function() {
+               this.isDefaultPrevented = returnTrue;
+
+               var e = this.originalEvent;
+               if ( !e ) {
+                       return;
+               }
+
+               // if preventDefault exists run it on the original event
+               if ( e.preventDefault ) {
+                       e.preventDefault();
+
+               // otherwise set the returnValue property of the original event to false (IE)
+               } else {
+                       e.returnValue = false;
+               }
+       },
+       stopPropagation: function() {
+               this.isPropagationStopped = returnTrue;
+
+               var e = this.originalEvent;
+               if ( !e ) {
+                       return;
+               }
+               // if stopPropagation exists run it on the original event
+               if ( e.stopPropagation ) {
+                       e.stopPropagation();
+               }
+               // otherwise set the cancelBubble property of the original event to true (IE)
+               e.cancelBubble = true;
+       },
+       stopImmediatePropagation: function() {
+               this.isImmediatePropagationStopped = returnTrue;
+               this.stopPropagation();
+       },
+       isDefaultPrevented: returnFalse,
+       isPropagationStopped: returnFalse,
+       isImmediatePropagationStopped: returnFalse
+};
+
+// Create mouseenter/leave events using mouseover/out and event-time checks
+jQuery.each({
+       mouseenter: "mouseover",
+       mouseleave: "mouseout"
+}, function( orig, fix ) {
+       jQuery.event.special[ orig ] = jQuery.event.special[ fix ] = {
+               delegateType: fix,
+               bindType: fix,
+
+               handle: function( event ) {
+                       var target = this,
+                               related = event.relatedTarget,
+                               handleObj = event.handleObj,
+                               selector = handleObj.selector,
+                               oldType, ret;
+
+                       // For a real mouseover/out, always call the handler; for
+                       // mousenter/leave call the handler if related is outside the target.
+                       // NB: No relatedTarget if the mouse left/entered the browser window
+                       if ( !related || handleObj.origType === event.type || (related !== target && !jQuery.contains( target, related )) ) {
+                               oldType = event.type;
+                               event.type = handleObj.origType;
+                               ret = handleObj.handler.apply( this, arguments );
+                               event.type = oldType;
+                       }
+                       return ret;
+               }
+       };
+});
+
+// IE submit delegation
+if ( !jQuery.support.submitBubbles ) {
+
+       jQuery.event.special.submit = {
+               setup: function() {
+                       // Only need this for delegated form submit events
+                       if ( jQuery.nodeName( this, "form" ) ) {
+                               return false;
+                       }
+
+                       // Lazy-add a submit handler when a descendant form may potentially be submitted
+                       jQuery.event.add( this, "click._submit keypress._submit", function( e ) {
+                               // Node name check avoids a VML-related crash in IE (#9807)
+                               var elem = e.target,
+                                       form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined;
+                               if ( form && !form._submit_attached ) {
+                                       jQuery.event.add( form, "submit._submit", function( event ) {
+                                               // Form was submitted, bubble the event up the tree
+                                               if ( this.parentNode ) {
+                                                       jQuery.event.simulate( "submit", this.parentNode, event, true );
+                                               }
+                                       });
+                                       form._submit_attached = true;
+                               }
+                       });
+                       // return undefined since we don't need an event listener
+               },
+
+               teardown: function() {
+                       // Only need this for delegated form submit events
+                       if ( jQuery.nodeName( this, "form" ) ) {
+                               return false;
+                       }
+
+                       // Remove delegated handlers; cleanData eventually reaps submit handlers attached above
+                       jQuery.event.remove( this, "._submit" );
+               }
+       };
+}
+
+// IE change delegation and checkbox/radio fix
+if ( !jQuery.support.changeBubbles ) {
+
+       jQuery.event.special.change = {
+
+               setup: function() {
+
+                       if ( rformElems.test( this.nodeName ) ) {
+                               // IE doesn't fire change on a check/radio until blur; trigger it on click
+                               // after a propertychange. Eat the blur-change in special.change.handle.
+                               // This still fires onchange a second time for check/radio after blur.
+                               if ( this.type === "checkbox" || this.type === "radio" ) {
+                                       jQuery.event.add( this, "propertychange._change", function( event ) {
+                                               if ( event.originalEvent.propertyName === "checked" ) {
+                                                       this._just_changed = true;
+                                               }
+                                       });
+                                       jQuery.event.add( this, "click._change", function( event ) {
+                                               if ( this._just_changed ) {
+                                                       this._just_changed = false;
+                                                       jQuery.event.simulate( "change", this, event, true );
+                                               }
+                                       });
+                               }
+                               return false;
+                       }
+                       // Delegated event; lazy-add a change handler on descendant inputs
+                       jQuery.event.add( this, "beforeactivate._change", function( e ) {
+                               var elem = e.target;
+
+                               if ( rformElems.test( elem.nodeName ) && !elem._change_attached ) {
+                                       jQuery.event.add( elem, "change._change", function( event ) {
+                                               if ( this.parentNode && !event.isSimulated ) {
+                                                       jQuery.event.simulate( "change", this.parentNode, event, true );
+                                               }
+                                       });
+                                       elem._change_attached = true;
+                               }
+                       });
+               },
+
+               handle: function( event ) {
+                       var elem = event.target;
+
+                       // Swallow native change events from checkbox/radio, we already triggered them above
+                       if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) {
+                               return event.handleObj.handler.apply( this, arguments );
+                       }
+               },
+
+               teardown: function() {
+                       jQuery.event.remove( this, "._change" );
+
+                       return rformElems.test( this.nodeName );
+               }
+       };
+}
+
+// Create "bubbling" focus and blur events
+if ( !jQuery.support.focusinBubbles ) {
+       jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
+
+               // Attach a single capturing handler while someone wants focusin/focusout
+               var attaches = 0,
+                       handler = function( event ) {
+                               jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );
+                       };
+
+               jQuery.event.special[ fix ] = {
+                       setup: function() {
+                               if ( attaches++ === 0 ) {
+                                       document.addEventListener( orig, handler, true );
+                               }
+                       },
+                       teardown: function() {
+                               if ( --attaches === 0 ) {
+                                       document.removeEventListener( orig, handler, true );
+                               }
+                       }
+               };
+       });
+}
+
+jQuery.fn.extend({
+
+       on: function( types, selector, data, fn, /*INTERNAL*/ one ) {
+               var origFn, type;
+
+               // Types can be a map of types/handlers
+               if ( typeof types === "object" ) {
+                       // ( types-Object, selector, data )
+                       if ( typeof selector !== "string" ) {
+                               // ( types-Object, data )
+                               data = selector;
+                               selector = undefined;
+                       }
+                       for ( type in types ) {
+                               this.on( type, selector, data, types[ type ], one );
+                       }
+                       return this;
+               }
+
+               if ( data == null && fn == null ) {
+                       // ( types, fn )
+                       fn = selector;
+                       data = selector = undefined;
+               } else if ( fn == null ) {
+                       if ( typeof selector === "string" ) {
+                               // ( types, selector, fn )
+                               fn = data;
+                               data = undefined;
+                       } else {
+                               // ( types, data, fn )
+                               fn = data;
+                               data = selector;
+                               selector = undefined;
+                       }
+               }
+               if ( fn === false ) {
+                       fn = returnFalse;
+               } else if ( !fn ) {
+                       return this;
+               }
+
+               if ( one === 1 ) {
+                       origFn = fn;
+                       fn = function( event ) {
+                               jQuery.event.remove( event.delegateTarget || this, event );
+                               return origFn.apply( this, arguments );
+                       };
+                       // Use same guid so caller can remove using origFn
+                       fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
+               }
+               return this.each( function() {
+                       jQuery.event.add( this, types, fn, data, selector );
+               });
+       },
+       one: function( types, selector, data, fn ) {
+               return this.on.call( this, types, selector, data, fn, 1 );
+       },
+       off: function( types, selector, fn ) {
+               if ( types && types.preventDefault ) {
+                       // ( event )  native or jQuery.Event
+                       return this.off( types.type, types.handler, types.selector );
+               }
+               if ( typeof types === "object" ) {
+                       // ( types-object [, selector] )
+                       for ( var type in types ) {
+                               this.off( type, selector, types[ type ] );
+                       }
+                       return this;
+               }
+               if ( selector === false || typeof selector === "function" ) {
+                       // ( types [, fn] )
+                       fn = selector;
+                       selector = undefined;
+               }
+               if ( fn === false ) {
+                       fn = returnFalse;
+               }
+               return this.each(function() {
+                       jQuery.event.remove( this, types, fn, selector );
+               });
+       },
+
+       bind: function( types, data, fn ) {
+               return this.on( types, null, data, fn );
+       },
+       unbind: function( types, fn ) {
+               return this.off( types, null, fn );
+       },
+
+       live: function( types, data, fn ) {
+               jQuery( this.context ).on( types, this.selector, data, fn );
+               return this;
+       },
+       die: function( types, fn ) {
+               jQuery( this.context ).off( types, this.selector || "**", fn );
+               return this;
+       },
+
+       delegate: function( selector, types, data, fn ) {
+               return this.on( types, selector, data, fn );
+       },
+       undelegate: function( selector, types, fn ) {
+               // ( namespace ) or ( selector, types [, fn] )
+               return arguments.length == 1? this.off( selector, "**" ) : this.off( types, selector, fn );
+       },
+
+       trigger: function( type, data ) {
+               return this.each(function() {
+                       jQuery.event.trigger( type, data, this );
+               });
+       },
+       triggerHandler: function( type, data ) {
+               if ( this[0] ) {
+                       return jQuery.event.trigger( type, data, this[0], true );
+               }
+       },
+
+       toggle: function( fn ) {
+               // Save reference to arguments for access in closure
+               var args = arguments,
+                       guid = fn.guid || jQuery.guid++,
+                       i = 0,
+                       toggler = function( event ) {
+                               // Figure out which function to execute
+                               var lastToggle = ( jQuery._data( this, "lastToggle" + fn.guid ) || 0 ) % i;
+                               jQuery._data( this, "lastToggle" + fn.guid, lastToggle + 1 );
+
+                               // Make sure that clicks stop
+                               event.preventDefault();
+
+                               // and execute the function
+                               return args[ lastToggle ].apply( this, arguments ) || false;
+                       };
+
+               // link all the functions, so any of them can unbind this click handler
+               toggler.guid = guid;
+               while ( i < args.length ) {
+                       args[ i++ ].guid = guid;
+               }
+
+               return this.click( toggler );
+       },
+
+       hover: function( fnOver, fnOut ) {
+               return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
+       }
+});
+
+jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
+       "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
+       "change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) {
+
+       // Handle event binding
+       jQuery.fn[ name ] = function( data, fn ) {
+               if ( fn == null ) {
+                       fn = data;
+                       data = null;
+               }
+
+               return arguments.length > 0 ?
+                       this.bind( name, data, fn ) :
+                       this.trigger( name );
+       };
+
+       if ( jQuery.attrFn ) {
+               jQuery.attrFn[ name ] = true;
+       }
+
+       if ( rkeyEvent.test( name ) ) {
+               jQuery.event.fixHooks[ name ] = jQuery.event.keyHooks;
+       }
+
+       if ( rmouseEvent.test( name ) ) {
+               jQuery.event.fixHooks[ name ] = jQuery.event.mouseHooks;
+       }
+});
+
+
+
+/*!
+ * Sizzle CSS Selector Engine
+ *  Copyright 2011, The Dojo Foundation
+ *  Released under the MIT, BSD, and GPL Licenses.
+ *  More information: http://sizzlejs.com/
+ */
+(function(){
+
+var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
+       expando = "sizcache" + (Math.random() + '').replace('.', ''),
+       done = 0,
+       toString = Object.prototype.toString,
+       hasDuplicate = false,
+       baseHasDuplicate = true,
+       rBackslash = /\\/g,
+       rReturn = /\r\n/g,
+       rNonWord = /\W/;
+
+// Here we check if the JavaScript engine is using some sort of
+// optimization where it does not always call our comparision
+// function. If that is the case, discard the hasDuplicate value.
+//   Thus far that includes Google Chrome.
+[0, 0].sort(function() {
+       baseHasDuplicate = false;
+       return 0;
+});
+
+var Sizzle = function( selector, context, results, seed ) {
+       results = results || [];
+       context = context || document;
+
+       var origContext = context;
+
+       if ( context.nodeType !== 1 && context.nodeType !== 9 ) {
+               return [];
+       }
+       
+       if ( !selector || typeof selector !== "string" ) {
+               return results;
+       }
+
+       var m, set, checkSet, extra, ret, cur, pop, i,
+               prune = true,
+               contextXML = Sizzle.isXML( context ),
+               parts = [],
+               soFar = selector;
+       
+       // Reset the position of the chunker regexp (start from head)
+       do {
+               chunker.exec( "" );
+               m = chunker.exec( soFar );
+
+               if ( m ) {
+                       soFar = m[3];
+               
+                       parts.push( m[1] );
+               
+                       if ( m[2] ) {
+                               extra = m[3];
+                               break;
+                       }
+               }
+       } while ( m );
+
+       if ( parts.length > 1 && origPOS.exec( selector ) ) {
+
+               if ( parts.length === 2 && Expr.relative[ parts[0] ] ) {
+                       set = posProcess( parts[0] + parts[1], context, seed );
+
+               } else {
+                       set = Expr.relative[ parts[0] ] ?
+                               [ context ] :
+                               Sizzle( parts.shift(), context );
+
+                       while ( parts.length ) {
+                               selector = parts.shift();
+
+                               if ( Expr.relative[ selector ] ) {
+                                       selector += parts.shift();
+                               }
+                               
+                               set = posProcess( selector, set, seed );
+                       }
+               }
+
+       } else {
+               // Take a shortcut and set the context if the root selector is an ID
+               // (but not if it'll be faster if the inner selector is an ID)
+               if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML &&
+                               Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) {
+
+                       ret = Sizzle.find( parts.shift(), context, contextXML );
+                       context = ret.expr ?
+                               Sizzle.filter( ret.expr, ret.set )[0] :
+                               ret.set[0];
+               }
+
+               if ( context ) {
+                       ret = seed ?
+                               { expr: parts.pop(), set: makeArray(seed) } :
+                               Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML );
+
+                       set = ret.expr ?
+                               Sizzle.filter( ret.expr, ret.set ) :
+                               ret.set;
+
+                       if ( parts.length > 0 ) {
+                               checkSet = makeArray( set );
+
+                       } else {
+                               prune = false;
+                       }
+
+                       while ( parts.length ) {
+                               cur = parts.pop();
+                               pop = cur;
+
+                               if ( !Expr.relative[ cur ] ) {
+                                       cur = "";
+                               } else {
+                                       pop = parts.pop();
+                               }
+
+                               if ( pop == null ) {
+                                       pop = context;
+                               }
+
+                               Expr.relative[ cur ]( checkSet, pop, contextXML );
+                       }
+
+               } else {
+                       checkSet = parts = [];
+               }
+       }
+
+       if ( !checkSet ) {
+               checkSet = set;
+       }
+
+       if ( !checkSet ) {
+               Sizzle.error( cur || selector );
+       }
+
+       if ( toString.call(checkSet) === "[object Array]" ) {
+               if ( !prune ) {
+                       results.push.apply( results, checkSet );
+
+               } else if ( context && context.nodeType === 1 ) {
+                       for ( i = 0; checkSet[i] != null; i++ ) {
+                               if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) {
+                                       results.push( set[i] );
+                               }
+                       }
+
+               } else {
+                       for ( i = 0; checkSet[i] != null; i++ ) {
+                               if ( checkSet[i] && checkSet[i].nodeType === 1 ) {
+                                       results.push( set[i] );
+                               }
+                       }
+               }
+
+       } else {
+               makeArray( checkSet, results );
+       }
+
+       if ( extra ) {
+               Sizzle( extra, origContext, results, seed );
+               Sizzle.uniqueSort( results );
+       }
+
+       return results;
+};
+
+Sizzle.uniqueSort = function( results ) {
+       if ( sortOrder ) {
+               hasDuplicate = baseHasDuplicate;
+               results.sort( sortOrder );
+
+               if ( hasDuplicate ) {
+                       for ( var i = 1; i < results.length; i++ ) {
+                               if ( results[i] === results[ i - 1 ] ) {
+                                       results.splice( i--, 1 );
+                               }
+                       }
+               }
+       }
+
+       return results;
+};
+
+Sizzle.matches = function( expr, set ) {
+       return Sizzle( expr, null, null, set );
+};
+
+Sizzle.matchesSelector = function( node, expr ) {
+       return Sizzle( expr, null, null, [node] ).length > 0;
+};
+
+Sizzle.find = function( expr, context, isXML ) {
+       var set, i, len, match, type, left;
+
+       if ( !expr ) {
+               return [];
+       }
+
+       for ( i = 0, len = Expr.order.length; i < len; i++ ) {
+               type = Expr.order[i];
+               
+               if ( (match = Expr.leftMatch[ type ].exec( expr )) ) {
+                       left = match[1];
+                       match.splice( 1, 1 );
+
+                       if ( left.substr( left.length - 1 ) !== "\\" ) {
+                               match[1] = (match[1] || "").replace( rBackslash, "" );
+                               set = Expr.find[ type ]( match, context, isXML );
+
+                               if ( set != null ) {
+                                       expr = expr.replace( Expr.match[ type ], "" );
+                                       break;
+                               }
+                       }
+               }
+       }
+
+       if ( !set ) {
+               set = typeof context.getElementsByTagName !== "undefined" ?
+                       context.getElementsByTagName( "*" ) :
+                       [];
+       }
+
+       return { set: set, expr: expr };
+};
+
+Sizzle.filter = function( expr, set, inplace, not ) {
+       var match, anyFound,
+               type, found, item, filter, left,
+               i, pass,
+               old = expr,
+               result = [],
+               curLoop = set,
+               isXMLFilter = set && set[0] && Sizzle.isXML( set[0] );
+
+       while ( expr && set.length ) {
+               for ( type in Expr.filter ) {
+                       if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) {
+                               filter = Expr.filter[ type ];
+                               left = match[1];
+
+                               anyFound = false;
+
+                               match.splice(1,1);
+
+                               if ( left.substr( left.length - 1 ) === "\\" ) {
+                                       continue;
+                               }
+
+                               if ( curLoop === result ) {
+                                       result = [];
+                               }
+
+                               if ( Expr.preFilter[ type ] ) {
+                                       match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter );
+
+                                       if ( !match ) {
+                                               anyFound = found = true;
+
+                                       } else if ( match === true ) {
+                                               continue;
+                                       }
+                               }
+
+                               if ( match ) {
+                                       for ( i = 0; (item = curLoop[i]) != null; i++ ) {
+                                               if ( item ) {
+                                                       found = filter( item, match, i, curLoop );
+                                                       pass = not ^ found;
+
+                                                       if ( inplace && found != null ) {
+                                                               if ( pass ) {
+                                                                       anyFound = true;
+
+                                                               } else {
+                                                                       curLoop[i] = false;
+                                                               }
+
+                                                       } else if ( pass ) {
+                                                               result.push( item );
+                                                               anyFound = true;
+                                                       }
+                                               }
+                                       }
+                               }
+
+                               if ( found !== undefined ) {
+                                       if ( !inplace ) {
+                                               curLoop = result;
+                                       }
+
+                                       expr = expr.replace( Expr.match[ type ], "" );
+
+                                       if ( !anyFound ) {
+                                               return [];
+                                       }
+
+                                       break;
+                               }
+                       }
+               }
+
+               // Improper expression
+               if ( expr === old ) {
+                       if ( anyFound == null ) {
+                               Sizzle.error( expr );
+
+                       } else {
+                               break;
+                       }
+               }
+
+               old = expr;
+       }
+
+       return curLoop;
+};
+
+Sizzle.error = function( msg ) {
+       throw "Syntax error, unrecognized expression: " + msg;
+};
+
+/**
+ * Utility function for retreiving the text value of an array of DOM nodes
+ * @param {Array|Element} elem
+ */
+var getText = Sizzle.getText = function( elem ) {
+    var i, node,
+               nodeType = elem.nodeType,
+               ret = "";
+
+       if ( nodeType ) {
+               if ( nodeType === 1 ) {
+                       // Use textContent || innerText for elements
+                       if ( typeof elem.textContent === 'string' ) {
+                               return elem.textContent;
+                       } else if ( typeof elem.innerText === 'string' ) {
+                               // Replace IE's carriage returns
+                               return elem.innerText.replace( rReturn, '' );
+                       } else {
+                               // Traverse it's children
+                               for ( elem = elem.firstChild; elem; elem = elem.nextSibling) {
+                                       ret += getText( elem );
+                               }
+                       }
+               } else if ( nodeType === 3 || nodeType === 4 ) {
+                       return elem.nodeValue;
+               }
+       } else {
+
+               // If no nodeType, this is expected to be an array
+               for ( i = 0; (node = elem[i]); i++ ) {
+                       // Do not traverse comment nodes
+                       if ( node.nodeType !== 8 ) {
+                               ret += getText( node );
+                       }
+               }
+       }
+       return ret;
+};
+
+var Expr = Sizzle.selectors = {
+       order: [ "ID", "NAME", "TAG" ],
+
+       match: {
+               ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
+               CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
+               NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,
+               ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,
+               TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,
+               CHILD: /:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,
+               POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,
+               PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/
+       },
+
+       leftMatch: {},
+
+       attrMap: {
+               "class": "className",
+               "for": "htmlFor"
+       },
+
+       attrHandle: {
+               href: function( elem ) {
+                       return elem.getAttribute( "href" );
+               },
+               type: function( elem ) {
+                       return elem.getAttribute( "type" );
+               }
+       },
+
+       relative: {
+               "+": function(checkSet, part){
+                       var isPartStr = typeof part === "string",
+                               isTag = isPartStr && !rNonWord.test( part ),
+                               isPartStrNotTag = isPartStr && !isTag;
+
+                       if ( isTag ) {
+                               part = part.toLowerCase();
+                       }
+
+                       for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) {
+                               if ( (elem = checkSet[i]) ) {
+                                       while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {}
+
+                                       checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ?
+                                               elem || false :
+                                               elem === part;
+                               }
+                       }
+
+                       if ( isPartStrNotTag ) {
+                               Sizzle.filter( part, checkSet, true );
+                       }
+               },
+
+               ">": function( checkSet, part ) {
+                       var elem,
+                               isPartStr = typeof part === "string",
+                               i = 0,
+                               l = checkSet.length;
+
+                       if ( isPartStr && !rNonWord.test( part ) ) {
+                               part = part.toLowerCase();
+
+                               for ( ; i < l; i++ ) {
+                                       elem = checkSet[i];
+
+                                       if ( elem ) {
+                                               var parent = elem.parentNode;
+                                               checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false;
+                                       }
+                               }
+
+                       } else {
+                               for ( ; i < l; i++ ) {
+                                       elem = checkSet[i];
+
+                                       if ( elem ) {
+                                               checkSet[i] = isPartStr ?
+                                                       elem.parentNode :
+                                                       elem.parentNode === part;
+                                       }
+                               }
+
+                               if ( isPartStr ) {
+                                       Sizzle.filter( part, checkSet, true );
+                               }
+                       }
+               },
+
+               "": function(checkSet, part, isXML){
+                       var nodeCheck,
+                               doneName = done++,
+                               checkFn = dirCheck;
+
+                       if ( typeof part === "string" && !rNonWord.test( part ) ) {
+                               part = part.toLowerCase();
+                               nodeCheck = part;
+                               checkFn = dirNodeCheck;
+                       }
+
+                       checkFn( "parentNode", part, doneName, checkSet, nodeCheck, isXML );
+               },
+
+               "~": function( checkSet, part, isXML ) {
+                       var nodeCheck,
+                               doneName = done++,
+                               checkFn = dirCheck;
+
+                       if ( typeof part === "string" && !rNonWord.test( part ) ) {
+                               part = part.toLowerCase();
+                               nodeCheck = part;
+                               checkFn = dirNodeCheck;
+                       }
+
+                       checkFn( "previousSibling", part, doneName, checkSet, nodeCheck, isXML );
+               }
+       },
+
+       find: {
+               ID: function( match, context, isXML ) {
+                       if ( typeof context.getElementById !== "undefined" && !isXML ) {
+                               var m = context.getElementById(match[1]);
+                               // Check parentNode to catch when Blackberry 4.6 returns
+                               // nodes that are no longer in the document #6963
+                               return m && m.parentNode ? [m] : [];
+                       }
+               },
+
+               NAME: function( match, context ) {
+                       if ( typeof context.getElementsByName !== "undefined" ) {
+                               var ret = [],
+                                       results = context.getElementsByName( match[1] );
+
+                               for ( var i = 0, l = results.length; i < l; i++ ) {
+                                       if ( results[i].getAttribute("name") === match[1] ) {
+                                               ret.push( results[i] );
+                                       }
+                               }
+
+                               return ret.length === 0 ? null : ret;
+                       }
+               },
+
+               TAG: function( match, context ) {
+                       if ( typeof context.getElementsByTagName !== "undefined" ) {
+                               return context.getElementsByTagName( match[1] );
+                       }
+               }
+       },
+       preFilter: {
+               CLASS: function( match, curLoop, inplace, result, not, isXML ) {
+                       match = " " + match[1].replace( rBackslash, "" ) + " ";
+
+                       if ( isXML ) {
+                               return match;
+                       }
+
+                       for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) {
+                               if ( elem ) {
+                                       if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n\r]/g, " ").indexOf(match) >= 0) ) {
+                                               if ( !inplace ) {
+                                                       result.push( elem );
+                                               }
+
+                                       } else if ( inplace ) {
+                                               curLoop[i] = false;
+                                       }
+                               }
+                       }
+
+                       return false;
+               },
+
+               ID: function( match ) {
+                       return match[1].replace( rBackslash, "" );
+               },
+
+               TAG: function( match, curLoop ) {
+                       return match[1].replace( rBackslash, "" ).toLowerCase();
+               },
+
+               CHILD: function( match ) {
+                       if ( match[1] === "nth" ) {
+                               if ( !match[2] ) {
+                                       Sizzle.error( match[0] );
+                               }
+
+                               match[2] = match[2].replace(/^\+|\s*/g, '');
+
+                               // parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'
+                               var test = /(-?)(\d*)(?:n([+\-]?\d*))?/.exec(
+                                       match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" ||
+                                       !/\D/.test( match[2] ) && "0n+" + match[2] || match[2]);
+
+                               // calculate the numbers (first)n+(last) including if they are negative
+                               match[2] = (test[1] + (test[2] || 1)) - 0;
+                               match[3] = test[3] - 0;
+                       }
+                       else if ( match[2] ) {
+                               Sizzle.error( match[0] );
+                       }
+
+                       // TODO: Move to normal caching system
+                       match[0] = done++;
+
+                       return match;
+               },
+
+               ATTR: function( match, curLoop, inplace, result, not, isXML ) {
+                       var name = match[1] = match[1].replace( rBackslash, "" );
+                       
+                       if ( !isXML && Expr.attrMap[name] ) {
+                               match[1] = Expr.attrMap[name];
+                       }
+
+                       // Handle if an un-quoted value was used
+                       match[4] = ( match[4] || match[5] || "" ).replace( rBackslash, "" );
+
+                       if ( match[2] === "~=" ) {
+                               match[4] = " " + match[4] + " ";
+                       }
+
+                       return match;
+               },
+
+               PSEUDO: function( match, curLoop, inplace, result, not ) {
+                       if ( match[1] === "not" ) {
+                               // If we're dealing with a complex expression, or a simple one
+                               if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) {
+                                       match[3] = Sizzle(match[3], null, null, curLoop);
+
+                               } else {
+                                       var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not);
+
+                                       if ( !inplace ) {
+                                               result.push.apply( result, ret );
+                                       }
+
+                                       return false;
+                               }
+
+                       } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) {
+                               return true;
+                       }
+                       
+                       return match;
+               },
+
+               POS: function( match ) {
+                       match.unshift( true );
+
+                       return match;
+               }
+       },
+       
+       filters: {
+               enabled: function( elem ) {
+                       return elem.disabled === false && elem.type !== "hidden";
+               },
+
+               disabled: function( elem ) {
+                       return elem.disabled === true;
+               },
+
+               checked: function( elem ) {
+                       return elem.checked === true;
+               },
+               
+               selected: function( elem ) {
+                       // Accessing this property makes selected-by-default
+                       // options in Safari work properly
+                       if ( elem.parentNode ) {
+                               elem.parentNode.selectedIndex;
+                       }
+                       
+                       return elem.selected === true;
+               },
+
+               parent: function( elem ) {
+                       return !!elem.firstChild;
+               },
+
+               empty: function( elem ) {
+                       return !elem.firstChild;
+               },
+
+               has: function( elem, i, match ) {
+                       return !!Sizzle( match[3], elem ).length;
+               },
+
+               header: function( elem ) {
+                       return (/h\d/i).test( elem.nodeName );
+               },
+
+               text: function( elem ) {
+                       var attr = elem.getAttribute( "type" ), type = elem.type;
+                       // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc) 
+                       // use getAttribute instead to test this case
+                       return elem.nodeName.toLowerCase() === "input" && "text" === type && ( attr === type || attr === null );
+               },
+
+               radio: function( elem ) {
+                       return elem.nodeName.toLowerCase() === "input" && "radio" === elem.type;
+               },
+
+               checkbox: function( elem ) {
+                       return elem.nodeName.toLowerCase() === "input" && "checkbox" === elem.type;
+               },
+
+               file: function( elem ) {
+                       return elem.nodeName.toLowerCase() === "input" && "file" === elem.type;
+               },
+
+               password: function( elem ) {
+                       return elem.nodeName.toLowerCase() === "input" && "password" === elem.type;
+               },
+
+               submit: function( elem ) {
+                       var name = elem.nodeName.toLowerCase();
+                       return (name === "input" || name === "button") && "submit" === elem.type;
+               },
+
+               image: function( elem ) {
+                       return elem.nodeName.toLowerCase() === "input" && "image" === elem.type;
+               },
+
+               reset: function( elem ) {
+                       var name = elem.nodeName.toLowerCase();
+                       return (name === "input" || name === "button") && "reset" === elem.type;
+               },
+
+               button: function( elem ) {
+                       var name = elem.nodeName.toLowerCase();
+                       return name === "input" && "button" === elem.type || name === "button";
+               },
+
+               input: function( elem ) {
+                       return (/input|select|textarea|button/i).test( elem.nodeName );
+               },
+
+               focus: function( elem ) {
+                       return elem === elem.ownerDocument.activeElement;
+               }
+       },
+       setFilters: {
+               first: function( elem, i ) {
+                       return i === 0;
+               },
+
+               last: function( elem, i, match, array ) {
+                       return i === array.length - 1;
+               },
+
+               even: function( elem, i ) {
+                       return i % 2 === 0;
+               },
+
+               odd: function( elem, i ) {
+                       return i % 2 === 1;
+               },
+
+               lt: function( elem, i, match ) {
+                       return i < match[3] - 0;
+               },
+
+               gt: function( elem, i, match ) {
+                       return i > match[3] - 0;
+               },
+
+               nth: function( elem, i, match ) {
+                       return match[3] - 0 === i;
+               },
+
+               eq: function( elem, i, match ) {
+                       return match[3] - 0 === i;
+               }
+       },
+       filter: {
+               PSEUDO: function( elem, match, i, array ) {
+                       var name = match[1],
+                               filter = Expr.filters[ name ];
+
+                       if ( filter ) {
+                               return filter( elem, i, match, array );
+
+                       } else if ( name === "contains" ) {
+                               return (elem.textContent || elem.innerText || getText([ elem ]) || "").indexOf(match[3]) >= 0;
+
+                       } else if ( name === "not" ) {
+                               var not = match[3];
+
+                               for ( var j = 0, l = not.length; j < l; j++ ) {
+                                       if ( not[j] === elem ) {
+                                               return false;
+                                       }
+                               }
+
+                               return true;
+
+                       } else {
+                               Sizzle.error( name );
+                       }
+               },
+
+               CHILD: function( elem, match ) {
+                       var first, last,
+                               doneName, parent, cache,
+                               count, diff,
+                               type = match[1],
+                               node = elem;
+
+                       switch ( type ) {
+                               case "only":
+                               case "first":
+                                       while ( (node = node.previousSibling) )  {
+                                               if ( node.nodeType === 1 ) { 
+                                                       return false; 
+                                               }
+                                       }
+
+                                       if ( type === "first" ) { 
+                                               return true; 
+                                       }
+
+                                       node = elem;
+
+                               case "last":
+                                       while ( (node = node.nextSibling) )      {
+                                               if ( node.nodeType === 1 ) { 
+                                                       return false; 
+                                               }
+                                       }
+
+                                       return true;
+
+                               case "nth":
+                                       first = match[2];
+                                       last = match[3];
+
+                                       if ( first === 1 && last === 0 ) {
+                                               return true;
+                                       }
+                                       
+                                       doneName = match[0];
+                                       parent = elem.parentNode;
+       
+                                       if ( parent && (parent[ expando ] !== doneName || !elem.nodeIndex) ) {
+                                               count = 0;
+                                               
+                                               for ( node = parent.firstChild; node; node = node.nextSibling ) {
+                                                       if ( node.nodeType === 1 ) {
+                                                               node.nodeIndex = ++count;
+                                                       }
+                                               } 
+
+                                               parent[ expando ] = doneName;
+                                       }
+                                       
+                                       diff = elem.nodeIndex - last;
+
+                                       if ( first === 0 ) {
+                                               return diff === 0;
+
+                                       } else {
+                                               return ( diff % first === 0 && diff / first >= 0 );
+                                       }
+                       }
+               },
+
+               ID: function( elem, match ) {
+                       return elem.nodeType === 1 && elem.getAttribute("id") === match;
+               },
+
+               TAG: function( elem, match ) {
+                       return (match === "*" && elem.nodeType === 1) || !!elem.nodeName && elem.nodeName.toLowerCase() === match;
+               },
+               
+               CLASS: function( elem, match ) {
+                       return (" " + (elem.className || elem.getAttribute("class")) + " ")
+                               .indexOf( match ) > -1;
+               },
+
+               ATTR: function( elem, match ) {
+                       var name = match[1],
+                               result = Sizzle.attr ?
+                                       Sizzle.attr( elem, name ) :
+                                       Expr.attrHandle[ name ] ?
+                                       Expr.attrHandle[ name ]( elem ) :
+                                       elem[ name ] != null ?
+                                               elem[ name ] :
+                                               elem.getAttribute( name ),
+                               value = result + "",
+                               type = match[2],
+                               check = match[4];
+
+                       return result == null ?
+                               type === "!=" :
+                               !type && Sizzle.attr ?
+                               result != null :
+                               type === "=" ?
+                               value === check :
+                               type === "*=" ?
+                               value.indexOf(check) >= 0 :
+                               type === "~=" ?
+                               (" " + value + " ").indexOf(check) >= 0 :
+                               !check ?
+                               value && result !== false :
+                               type === "!=" ?
+                               value !== check :
+                               type === "^=" ?
+                               value.indexOf(check) === 0 :
+                               type === "$=" ?
+                               value.substr(value.length - check.length) === check :
+                               type === "|=" ?
+                               value === check || value.substr(0, check.length + 1) === check + "-" :
+                               false;
+               },
+
+               POS: function( elem, match, i, array ) {
+                       var name = match[2],
+                               filter = Expr.setFilters[ name ];
+
+                       if ( filter ) {
+                               return filter( elem, i, match, array );
+                       }
+               }
+       }
+};
+
+var origPOS = Expr.match.POS,
+       fescape = function(all, num){
+               return "\\" + (num - 0 + 1);
+       };
+
+for ( var type in Expr.match ) {
+       Expr.match[ type ] = new RegExp( Expr.match[ type ].source + (/(?![^\[]*\])(?![^\(]*\))/.source) );
+       Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, fescape) );
+}
+
+var makeArray = function( array, results ) {
+       array = Array.prototype.slice.call( array, 0 );
+
+       if ( results ) {
+               results.push.apply( results, array );
+               return results;
+       }
+       
+       return array;
+};
+
+// Perform a simple check to determine if the browser is capable of
+// converting a NodeList to an array using builtin methods.
+// Also verifies that the returned array holds DOM nodes
+// (which is not the case in the Blackberry browser)
+try {
+       Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType;
+
+// Provide a fallback method if it does not work
+} catch( e ) {
+       makeArray = function( array, results ) {
+               var i = 0,
+                       ret = results || [];
+
+               if ( toString.call(array) === "[object Array]" ) {
+                       Array.prototype.push.apply( ret, array );
+
+               } else {
+                       if ( typeof array.length === "number" ) {
+                               for ( var l = array.length; i < l; i++ ) {
+                                       ret.push( array[i] );
+                               }
+
+                       } else {
+                               for ( ; array[i]; i++ ) {
+                                       ret.push( array[i] );
+                               }
+                       }
+               }
+
+               return ret;
+       };
+}
+
+var sortOrder, siblingCheck;
+
+if ( document.documentElement.compareDocumentPosition ) {
+       sortOrder = function( a, b ) {
+               if ( a === b ) {
+                       hasDuplicate = true;
+                       return 0;
+               }
+
+               if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) {
+                       return a.compareDocumentPosition ? -1 : 1;
+               }
+
+               return a.compareDocumentPosition(b) & 4 ? -1 : 1;
+       };
+
+} else {
+       sortOrder = function( a, b ) {
+               // The nodes are identical, we can exit early
+               if ( a === b ) {
+                       hasDuplicate = true;
+                       return 0;
+
+               // Fallback to using sourceIndex (in IE) if it's available on both nodes
+               } else if ( a.sourceIndex && b.sourceIndex ) {
+                       return a.sourceIndex - b.sourceIndex;
+               }
+
+               var al, bl,
+                       ap = [],
+                       bp = [],
+                       aup = a.parentNode,
+                       bup = b.parentNode,
+                       cur = aup;
+
+               // If the nodes are siblings (or identical) we can do a quick check
+               if ( aup === bup ) {
+                       return siblingCheck( a, b );
+
+               // If no parents were found then the nodes are disconnected
+               } else if ( !aup ) {
+                       return -1;
+
+               } else if ( !bup ) {
+                       return 1;
+               }
+
+               // Otherwise they're somewhere else in the tree so we need
+               // to build up a full list of the parentNodes for comparison
+               while ( cur ) {
+                       ap.unshift( cur );
+                       cur = cur.parentNode;
+               }
+
+               cur = bup;
+
+               while ( cur ) {
+                       bp.unshift( cur );
+                       cur = cur.parentNode;
+               }
+
+               al = ap.length;
+               bl = bp.length;
+
+               // Start walking down the tree looking for a discrepancy
+               for ( var i = 0; i < al && i < bl; i++ ) {
+                       if ( ap[i] !== bp[i] ) {
+                               return siblingCheck( ap[i], bp[i] );
+                       }
+               }
+
+               // We ended someplace up the tree so do a sibling check
+               return i === al ?
+                       siblingCheck( a, bp[i], -1 ) :
+                       siblingCheck( ap[i], b, 1 );
+       };
+
+       siblingCheck = function( a, b, ret ) {
+               if ( a === b ) {
+                       return ret;
+               }
+
+               var cur = a.nextSibling;
+
+               while ( cur ) {
+                       if ( cur === b ) {
+                               return -1;
+                       }
+
+                       cur = cur.nextSibling;
+               }
+
+               return 1;
+       };
+}
+
+// Check to see if the browser returns elements by name when
+// querying by getElementById (and provide a workaround)
+(function(){
+       // We're going to inject a fake input element with a specified name
+       var form = document.createElement("div"),
+               id = "script" + (new Date()).getTime(),
+               root = document.documentElement;
+
+       form.innerHTML = "<a name='" + id + "'/>";
+
+       // Inject it into the root element, check its status, and remove it quickly
+       root.insertBefore( form, root.firstChild );
+
+       // The workaround has to do additional checks after a getElementById
+       // Which slows things down for other browsers (hence the branching)
+       if ( document.getElementById( id ) ) {
+               Expr.find.ID = function( match, context, isXML ) {
+                       if ( typeof context.getElementById !== "undefined" && !isXML ) {
+                               var m = context.getElementById(match[1]);
+
+                               return m ?
+                                       m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ?
+                                               [m] :
+                                               undefined :
+                                       [];
+                       }
+               };
+
+               Expr.filter.ID = function( elem, match ) {
+                       var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");
+
+                       return elem.nodeType === 1 && node && node.nodeValue === match;
+               };
+       }
+
+       root.removeChild( form );
+
+       // release memory in IE
+       root = form = null;
+})();
+
+(function(){
+       // Check to see if the browser returns only elements
+       // when doing getElementsByTagName("*")
+
+       // Create a fake element
+       var div = document.createElement("div");
+       div.appendChild( document.createComment("") );
+
+       // Make sure no comments are found
+       if ( div.getElementsByTagName("*").length > 0 ) {
+               Expr.find.TAG = function( match, context ) {
+                       var results = context.getElementsByTagName( match[1] );
+
+                       // Filter out possible comments
+                       if ( match[1] === "*" ) {
+                               var tmp = [];
+
+                               for ( var i = 0; results[i]; i++ ) {
+                                       if ( results[i].nodeType === 1 ) {
+                                               tmp.push( results[i] );
+                                       }
+                               }
+
+                               results = tmp;
+                       }
+
+                       return results;
+               };
+       }
+
+       // Check to see if an attribute returns normalized href attributes
+       div.innerHTML = "<a href='#'></a>";
+
+       if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" &&
+                       div.firstChild.getAttribute("href") !== "#" ) {
+
+               Expr.attrHandle.href = function( elem ) {
+                       return elem.getAttribute( "href", 2 );
+               };
+       }
+
+       // release memory in IE
+       div = null;
+})();
+
+if ( document.querySelectorAll ) {
+       (function(){
+               var oldSizzle = Sizzle,
+                       div = document.createElement("div"),
+                       id = "__sizzle__";
+
+               div.innerHTML = "<p class='TEST'></p>";
+
+               // Safari can't handle uppercase or unicode characters when
+               // in quirks mode.
+               if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) {
+                       return;
+               }
+       
+               Sizzle = function( query, context, extra, seed ) {
+                       context = context || document;
+
+                       // Only use querySelectorAll on non-XML documents
+                       // (ID selectors don't work in non-HTML documents)
+                       if ( !seed && !Sizzle.isXML(context) ) {
+                               // See if we find a selector to speed up
+                               var match = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec( query );
+                               
+                               if ( match && (context.nodeType === 1 || context.nodeType === 9) ) {
+                                       // Speed-up: Sizzle("TAG")
+                                       if ( match[1] ) {
+                                               return makeArray( context.getElementsByTagName( query ), extra );
+                                       
+                                       // Speed-up: Sizzle(".CLASS")
+                                       } else if ( match[2] && Expr.find.CLASS && context.getElementsByClassName ) {
+                                               return makeArray( context.getElementsByClassName( match[2] ), extra );
+                                       }
+                               }
+                               
+                               if ( context.nodeType === 9 ) {
+                                       // Speed-up: Sizzle("body")
+                                       // The body element only exists once, optimize finding it
+                                       if ( query === "body" && context.body ) {
+                                               return makeArray( [ context.body ], extra );
+                                               
+                                       // Speed-up: Sizzle("#ID")
+                                       } else if ( match && match[3] ) {
+                                               var elem = context.getElementById( match[3] );
+
+                                               // Check parentNode to catch when Blackberry 4.6 returns
+                                               // nodes that are no longer in the document #6963
+                                               if ( elem && elem.parentNode ) {
+                                                       // Handle the case where IE and Opera return items
+                                                       // by name instead of ID
+                                                       if ( elem.id === match[3] ) {
+                                                               return makeArray( [ elem ], extra );
+                                                       }
+                                                       
+                                               } else {
+                                                       return makeArray( [], extra );
+                                               }
+                                       }
+                                       
+                                       try {
+                                               return makeArray( context.querySelectorAll(query), extra );
+                                       } catch(qsaError) {}
+
+                               // qSA works strangely on Element-rooted queries
+                               // We can work around this by specifying an extra ID on the root
+                               // and working up from there (Thanks to Andrew Dupont for the technique)
+                               // IE 8 doesn't work on object elements
+                               } else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
+                                       var oldContext = context,
+                                               old = context.getAttribute( "id" ),
+                                               nid = old || id,
+                                               hasParent = context.parentNode,
+                                               relativeHierarchySelector = /^\s*[+~]/.test( query );
+
+                                       if ( !old ) {
+                                               context.setAttribute( "id", nid );
+                                       } else {
+                                               nid = nid.replace( /'/g, "\\$&" );
+                                       }
+                                       if ( relativeHierarchySelector && hasParent ) {
+                                               context = context.parentNode;
+                                       }
+
+                                       try {
+                                               if ( !relativeHierarchySelector || hasParent ) {
+                                                       return makeArray( context.querySelectorAll( "[id='" + nid + "'] " + query ), extra );
+                                               }
+
+                                       } catch(pseudoError) {
+                                       } finally {
+                                               if ( !old ) {
+                                                       oldContext.removeAttribute( "id" );
+                                               }
+                                       }
+                               }
+                       }
+               
+                       return oldSizzle(query, context, extra, seed);
+               };
+
+               for ( var prop in oldSizzle ) {
+                       Sizzle[ prop ] = oldSizzle[ prop ];
+               }
+
+               // release memory in IE
+               div = null;
+       })();
+}
+
+(function(){
+       var html = document.documentElement,
+               matches = html.matchesSelector || html.mozMatchesSelector || html.webkitMatchesSelector || html.msMatchesSelector;
+
+       if ( matches ) {
+               // Check to see if it's possible to do matchesSelector
+               // on a disconnected node (IE 9 fails this)
+               var disconnectedMatch = !matches.call( document.createElement( "div" ), "div" ),
+                       pseudoWorks = false;
+
+               try {
+                       // This should fail with an exception
+                       // Gecko does not error, returns false instead
+                       matches.call( document.documentElement, "[test!='']:sizzle" );
+       
+               } catch( pseudoError ) {
+                       pseudoWorks = true;
+               }
+
+               Sizzle.matchesSelector = function( node, expr ) {
+                       // Make sure that attribute selectors are quoted
+                       expr = expr.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']");
+
+                       if ( !Sizzle.isXML( node ) ) {
+                               try { 
+                                       if ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) && !/!=/.test( expr ) ) {
+                                               var ret = matches.call( node, expr );
+
+                                               // IE 9's matchesSelector returns false on disconnected nodes
+                                               if ( ret || !disconnectedMatch ||
+                                                               // As well, disconnected nodes are said to be in a document
+                                                               // fragment in IE 9, so check for that
+                                                               node.document && node.document.nodeType !== 11 ) {
+                                                       return ret;
+                                               }
+                                       }
+                               } catch(e) {}
+                       }
+
+                       return Sizzle(expr, null, null, [node]).length > 0;
+               };
+       }
+})();
+
+(function(){
+       var div = document.createElement("div");
+
+       div.innerHTML = "<div class='test e'></div><div class='test'></div>";
+
+       // Opera can't find a second classname (in 9.6)
+       // Also, make sure that getElementsByClassName actually exists
+       if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) {
+               return;
+       }
+
+       // Safari caches class attributes, doesn't catch changes (in 3.2)
+       div.lastChild.className = "e";
+
+       if ( div.getElementsByClassName("e").length === 1 ) {
+               return;
+       }
+       
+       Expr.order.splice(1, 0, "CLASS");
+       Expr.find.CLASS = function( match, context, isXML ) {
+               if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) {
+                       return context.getElementsByClassName(match[1]);
+               }
+       };
+
+       // release memory in IE
+       div = null;
+})();
+
+function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
+       for ( var i = 0, l = checkSet.length; i < l; i++ ) {
+               var elem = checkSet[i];
+
+               if ( elem ) {
+                       var match = false;
+
+                       elem = elem[dir];
+
+                       while ( elem ) {
+                               if ( elem[ expando ] === doneName ) {
+                                       match = checkSet[elem.sizset];
+                                       break;
+                               }
+
+                               if ( elem.nodeType === 1 && !isXML ){
+                                       elem[ expando ] = doneName;
+                                       elem.sizset = i;
+                               }
+
+                               if ( elem.nodeName.toLowerCase() === cur ) {
+                                       match = elem;
+                                       break;
+                               }
+
+                               elem = elem[dir];
+                       }
+
+                       checkSet[i] = match;
+               }
+       }
+}
+
+function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
+       for ( var i = 0, l = checkSet.length; i < l; i++ ) {
+               var elem = checkSet[i];
+
+               if ( elem ) {
+                       var match = false;
+                       
+                       elem = elem[dir];
+
+                       while ( elem ) {
+                               if ( elem[ expando ] === doneName ) {
+                                       match = checkSet[elem.sizset];
+                                       break;
+                               }
+
+                               if ( elem.nodeType === 1 ) {
+                                       if ( !isXML ) {
+                                               elem[ expando ] = doneName;
+                                               elem.sizset = i;
+                                       }
+
+                                       if ( typeof cur !== "string" ) {
+                                               if ( elem === cur ) {
+                                                       match = true;
+                                                       break;
+                                               }
+
+                                       } else if ( Sizzle.filter( cur, [elem] ).length > 0 ) {
+                                               match = elem;
+                                               break;
+                                       }
+                               }
+
+                               elem = elem[dir];
+                       }
+
+                       checkSet[i] = match;
+               }
+       }
+}
+
+if ( document.documentElement.contains ) {
+       Sizzle.contains = function( a, b ) {
+               return a !== b && (a.contains ? a.contains(b) : true);
+       };
+
+} else if ( document.documentElement.compareDocumentPosition ) {
+       Sizzle.contains = function( a, b ) {
+               return !!(a.compareDocumentPosition(b) & 16);
+       };
+
+} else {
+       Sizzle.contains = function() {
+               return false;
+       };
+}
+
+Sizzle.isXML = function( elem ) {
+       // documentElement is verified for cases where it doesn't yet exist
+       // (such as loading iframes in IE - #4833) 
+       var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement;
+
+       return documentElement ? documentElement.nodeName !== "HTML" : false;
+};
+
+var posProcess = function( selector, context, seed ) {
+       var match,
+               tmpSet = [],
+               later = "",
+               root = context.nodeType ? [context] : context;
+
+       // Position selectors must be done after the filter
+       // And so must :not(positional) so we move all PSEUDOs to the end
+       while ( (match = Expr.match.PSEUDO.exec( selector )) ) {
+               later += match[0];
+               selector = selector.replace( Expr.match.PSEUDO, "" );
+       }
+
+       selector = Expr.relative[selector] ? selector + "*" : selector;
+
+       for ( var i = 0, l = root.length; i < l; i++ ) {
+               Sizzle( selector, root[i], tmpSet, seed );
+       }
+
+       return Sizzle.filter( later, tmpSet );
+};
+
+// EXPOSE
+// Override sizzle attribute retrieval
+Sizzle.attr = jQuery.attr;
+Sizzle.selectors.attrMap = {};
+jQuery.find = Sizzle;
+jQuery.expr = Sizzle.selectors;
+jQuery.expr[":"] = jQuery.expr.filters;
+jQuery.unique = Sizzle.uniqueSort;
+jQuery.text = Sizzle.getText;
+jQuery.isXMLDoc = Sizzle.isXML;
+jQuery.contains = Sizzle.contains;
+
+
+})();
+
+
+var runtil = /Until$/,
+       rparentsprev = /^(?:parents|prevUntil|prevAll)/,
+       // Note: This RegExp should be improved, or likely pulled from Sizzle
+       rmultiselector = /,/,
+       isSimple = /^.[^:#\[\.,]*$/,
+       slice = Array.prototype.slice,
+       POS = jQuery.expr.match.POS,
+       // methods guaranteed to produce a unique set when starting from a unique set
+       guaranteedUnique = {
+               children: true,
+               contents: true,
+               next: true,
+               prev: true
+       };
+
+jQuery.fn.extend({
+       find: function( selector ) {
+               var self = this,
+                       i, l;
+
+               if ( typeof selector !== "string" ) {
+                       return jQuery( selector ).filter(function() {
+                               for ( i = 0, l = self.length; i < l; i++ ) {
+                                       if ( jQuery.contains( self[ i ], this ) ) {
+                                               return true;
+                                       }
+                               }
+                       });
+               }
+
+               var ret = this.pushStack( "", "find", selector ),
+                       length, n, r;
+
+               for ( i = 0, l = this.length; i < l; i++ ) {
+                       length = ret.length;
+                       jQuery.find( selector, this[i], ret );
+
+                       if ( i > 0 ) {
+                               // Make sure that the results are unique
+                               for ( n = length; n < ret.length; n++ ) {
+                                       for ( r = 0; r < length; r++ ) {
+                                               if ( ret[r] === ret[n] ) {
+                                                       ret.splice(n--, 1);
+                                                       break;
+                                               }
+                                       }
+                               }
+                       }
+               }
+
+               return ret;
+       },
+
+       has: function( target ) {
+               var targets = jQuery( target );
+               return this.filter(function() {
+                       for ( var i = 0, l = targets.length; i < l; i++ ) {
+                               if ( jQuery.contains( this, targets[i] ) ) {
+                                       return true;
+                               }
+                       }
+               });
+       },
+
+       not: function( selector ) {
+               return this.pushStack( winnow(this, selector, false), "not", selector);
+       },
+
+       filter: function( selector ) {
+               return this.pushStack( winnow(this, selector, true), "filter", selector );
+       },
+
+       is: function( selector ) {
+               return !!selector && ( 
+                       typeof selector === "string" ?
+                               // If this is a positional selector, check membership in the returned set
+                               // so $("p:first").is("p:last") won't return true for a doc with two "p".
+                               POS.test( selector ) ? 
+                                       jQuery( selector, this.context ).index( this[0] ) >= 0 :
+                                       jQuery.filter( selector, this ).length > 0 :
+                               this.filter( selector ).length > 0 );
+       },
+
+       closest: function( selectors, context ) {
+               var ret = [], i, l, cur = this[0];
+               
+               // Array (deprecated as of jQuery 1.7)
+               if ( jQuery.isArray( selectors ) ) {
+                       var level = 1;
+
+                       while ( cur && cur.ownerDocument && cur !== context ) {
+                               for ( i = 0; i < selectors.length; i++ ) {
+
+                                       if ( jQuery( cur ).is( selectors[ i ] ) ) {
+                                               ret.push({ selector: selectors[ i ], elem: cur, level: level });
+                                       }
+                               }
+
+                               cur = cur.parentNode;
+                               level++;
+                       }
+
+                       return ret;
+               }
+
+               // String
+               var pos = POS.test( selectors ) || typeof selectors !== "string" ?
+                               jQuery( selectors, context || this.context ) :
+                               0;
+
+               for ( i = 0, l = this.length; i < l; i++ ) {
+                       cur = this[i];
+
+                       while ( cur ) {
+                               if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) {
+                                       ret.push( cur );
+                                       break;
+
+                               } else {
+                                       cur = cur.parentNode;
+                                       if ( !cur || !cur.ownerDocument || cur === context || cur.nodeType === 11 ) {
+                                               break;
+                                       }
+                               }
+                       }
+               }
+
+               ret = ret.length > 1 ? jQuery.unique( ret ) : ret;
+
+               return this.pushStack( ret, "closest", selectors );
+       },
+
+       // Determine the position of an element within
+       // the matched set of elements
+       index: function( elem ) {
+
+               // No argument, return index in parent
+               if ( !elem ) {
+                       return ( this[0] && this[0].parentNode ) ? this.prevAll().length : -1;
+               }
+
+               // index in selector
+               if ( typeof elem === "string" ) {
+                       return jQuery.inArray( this[0], jQuery( elem ) );
+               }
+
+               // Locate the position of the desired element
+               return jQuery.inArray(
+                       // If it receives a jQuery object, the first element is used
+                       elem.jquery ? elem[0] : elem, this );
+       },
+
+       add: function( selector, context ) {
+               var set = typeof selector === "string" ?
+                               jQuery( selector, context ) :
+                               jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ),
+                       all = jQuery.merge( this.get(), set );
+
+               return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ?
+                       all :
+                       jQuery.unique( all ) );
+       },
+
+       andSelf: function() {
+               return this.add( this.prevObject );
+       }
+});
+
+// A painfully simple check to see if an element is disconnected
+// from a document (should be improved, where feasible).
+function isDisconnected( node ) {
+       return !node || !node.parentNode || node.parentNode.nodeType === 11;
+}
+
+jQuery.each({
+       parent: function( elem ) {
+               var parent = elem.parentNode;
+               return parent && parent.nodeType !== 11 ? parent : null;
+       },
+       parents: function( elem ) {
+               return jQuery.dir( elem, "parentNode" );
+       },
+       parentsUntil: function( elem, i, until ) {
+               return jQuery.dir( elem, "parentNode", until );
+       },
+       next: function( elem ) {
+               return jQuery.nth( elem, 2, "nextSibling" );
+       },
+       prev: function( elem ) {
+               return jQuery.nth( elem, 2, "previousSibling" );
+       },
+       nextAll: function( elem ) {
+               return jQuery.dir( elem, "nextSibling" );
+       },
+       prevAll: function( elem ) {
+               return jQuery.dir( elem, "previousSibling" );
+       },
+       nextUntil: function( elem, i, until ) {
+               return jQuery.dir( elem, "nextSibling", until );
+       },
+       prevUntil: function( elem, i, until ) {
+               return jQuery.dir( elem, "previousSibling", until );
+       },
+       siblings: function( elem ) {
+               return jQuery.sibling( elem.parentNode.firstChild, elem );
+       },
+       children: function( elem ) {
+               return jQuery.sibling( elem.firstChild );
+       },
+       contents: function( elem ) {
+               return jQuery.nodeName( elem, "iframe" ) ?
+                       elem.contentDocument || elem.contentWindow.document :
+                       jQuery.makeArray( elem.childNodes );
+       }
+}, function( name, fn ) {
+       jQuery.fn[ name ] = function( until, selector ) {
+               var ret = jQuery.map( this, fn, until ),
+                       // The variable 'args' was introduced in
+                       // https://github.com/jquery/jquery/commit/52a0238
+                       // to work around a bug in Chrome 10 (Dev) and should be removed when the bug is fixed.
+                       // http://code.google.com/p/v8/issues/detail?id=1050
+                       args = slice.call(arguments);
+
+               if ( !runtil.test( name ) ) {
+                       selector = until;
+               }
+
+               if ( selector && typeof selector === "string" ) {
+                       ret = jQuery.filter( selector, ret );
+               }
+
+               ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret;
+
+               if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) {
+                       ret = ret.reverse();
+               }
+
+               return this.pushStack( ret, name, args.join(",") );
+       };
+});
+
+jQuery.extend({
+       filter: function( expr, elems, not ) {
+               if ( not ) {
+                       expr = ":not(" + expr + ")";
+               }
+
+               return elems.length === 1 ?
+                       jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] :
+                       jQuery.find.matches(expr, elems);
+       },
+
+       dir: function( elem, dir, until ) {
+               var matched = [],
+                       cur = elem[ dir ];
+
+               while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {
+                       if ( cur.nodeType === 1 ) {
+                               matched.push( cur );
+                       }
+                       cur = cur[dir];
+               }
+               return matched;
+       },
+
+       nth: function( cur, result, dir, elem ) {
+               result = result || 1;
+               var num = 0;
+
+               for ( ; cur; cur = cur[dir] ) {
+                       if ( cur.nodeType === 1 && ++num === result ) {
+                               break;
+                       }
+               }
+
+               return cur;
+       },
+
+       sibling: function( n, elem ) {
+               var r = [];
+
+               for ( ; n; n = n.nextSibling ) {
+                       if ( n.nodeType === 1 && n !== elem ) {
+                               r.push( n );
+                       }
+               }
+
+               return r;
+       }
+});
+
+// Implement the identical functionality for filter and not
+function winnow( elements, qualifier, keep ) {
+
+       // Can't pass null or undefined to indexOf in Firefox 4
+       // Set to 0 to skip string check
+       qualifier = qualifier || 0;
+
+       if ( jQuery.isFunction( qualifier ) ) {
+               return jQuery.grep(elements, function( elem, i ) {
+                       var retVal = !!qualifier.call( elem, i, elem );
+                       return retVal === keep;
+               });
+
+       } else if ( qualifier.nodeType ) {
+               return jQuery.grep(elements, function( elem, i ) {
+                       return (elem === qualifier) === keep;
+               });
+
+       } else if ( typeof qualifier === "string" ) {
+               var filtered = jQuery.grep(elements, function( elem ) {
+                       return elem.nodeType === 1;
+               });
+
+               if ( isSimple.test( qualifier ) ) {
+                       return jQuery.filter(qualifier, filtered, !keep);
+               } else {
+                       qualifier = jQuery.filter( qualifier, filtered );
+               }
+       }
+
+       return jQuery.grep(elements, function( elem, i ) {
+               return (jQuery.inArray( elem, qualifier ) >= 0) === keep;
+       });
+}
+
+
+
+
+function createSafeFragment( document ) {
+       var nodeNames = (
+               "abbr article aside audio canvas datalist details figcaption figure footer " +
+               "header hgroup mark meter nav output progress section summary time video"
+       ).split( " " ),
+       safeFrag = document.createDocumentFragment();
+
+       if ( safeFrag.createElement ) {
+               while ( nodeNames.length ) {
+                       safeFrag.createElement(
+                               nodeNames.pop()
+                       );
+               }
+       }
+       return safeFrag;
+}
+
+var rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g,
+       rleadingWhitespace = /^\s+/,
+       rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,
+       rtagName = /<([\w:]+)/,
+       rtbody = /<tbody/i,
+       rhtml = /<|&#?\w+;/,
+       rnoInnerhtml = /<(?:script|style)/i,
+       rnocache = /<(?:script|object|embed|option|style)/i,
+       // checked="checked" or checked
+       rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
+       rscriptType = /\/(java|ecma)script/i,
+       rcleanScript = /^\s*<!(?:\[CDATA\[|\-\-)/,
+       wrapMap = {
+               option: [ 1, "<select multiple='multiple'>", "</select>" ],
+               legend: [ 1, "<fieldset>", "</fieldset>" ],
+               thead: [ 1, "<table>", "</table>" ],
+               tr: [ 2, "<table><tbody>", "</tbody></table>" ],
+               td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
+               col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ],
+               area: [ 1, "<map>", "</map>" ],
+               _default: [ 0, "", "" ]
+       },
+       safeFragment = createSafeFragment( document );
+
+wrapMap.optgroup = wrapMap.option;
+wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
+wrapMap.th = wrapMap.td;
+
+// IE can't serialize <link> and <script> tags normally
+if ( !jQuery.support.htmlSerialize ) {
+       wrapMap._default = [ 1, "div<div>", "</div>" ];
+}
+
+jQuery.fn.extend({
+       text: function( text ) {
+               if ( jQuery.isFunction(text) ) {
+                       return this.each(function(i) {
+                               var self = jQuery( this );
+
+                               self.text( text.call(this, i, self.text()) );
+                       });
+               }
+
+               if ( typeof text !== "object" && text !== undefined ) {
+                       return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) );
+               }
+
+               return jQuery.text( this );
+       },
+
+       wrapAll: function( html ) {
+               if ( jQuery.isFunction( html ) ) {
+                       return this.each(function(i) {
+                               jQuery(this).wrapAll( html.call(this, i) );
+                       });
+               }
+
+               if ( this[0] ) {
+                       // The elements to wrap the target around
+                       var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);
+
+                       if ( this[0].parentNode ) {
+                               wrap.insertBefore( this[0] );
+                       }
+
+                       wrap.map(function() {
+                               var elem = this;
+
+                               while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {
+                                       elem = elem.firstChild;
+                               }
+
+                               return elem;
+                       }).append( this );
+               }
+
+               return this;
+       },
+
+       wrapInner: function( html ) {
+               if ( jQuery.isFunction( html ) ) {
+                       return this.each(function(i) {
+                               jQuery(this).wrapInner( html.call(this, i) );
+                       });
+               }
+
+               return this.each(function() {
+                       var self = jQuery( this ),
+                               contents = self.contents();
+
+                       if ( contents.length ) {
+                               contents.wrapAll( html );
+
+                       } else {
+                               self.append( html );
+                       }
+               });
+       },
+
+       wrap: function( html ) {
+               return this.each(function() {
+                       jQuery( this ).wrapAll( html );
+               });
+       },
+
+       unwrap: function() {
+               return this.parent().each(function() {
+                       if ( !jQuery.nodeName( this, "body" ) ) {
+                               jQuery( this ).replaceWith( this.childNodes );
+                       }
+               }).end();
+       },
+
+       append: function() {
+               return this.domManip(arguments, true, function( elem ) {
+                       if ( this.nodeType === 1 ) {
+                               this.appendChild( elem );
+                       }
+               });
+       },
+
+       prepend: function() {
+               return this.domManip(arguments, true, function( elem ) {
+                       if ( this.nodeType === 1 ) {
+                               this.insertBefore( elem, this.firstChild );
+                       }
+               });
+       },
+
+       before: function() {
+               if ( this[0] && this[0].parentNode ) {
+                       return this.domManip(arguments, false, function( elem ) {
+                               this.parentNode.insertBefore( elem, this );
+                       });
+               } else if ( arguments.length ) {
+                       var set = jQuery(arguments[0]);
+                       set.push.apply( set, this.toArray() );
+                       return this.pushStack( set, "before", arguments );
+               }
+       },
+
+       after: function() {
+               if ( this[0] && this[0].parentNode ) {
+                       return this.domManip(arguments, false, function( elem ) {
+                               this.parentNode.insertBefore( elem, this.nextSibling );
+                       });
+               } else if ( arguments.length ) {
+                       var set = this.pushStack( this, "after", arguments );
+                       set.push.apply( set, jQuery(arguments[0]).toArray() );
+                       return set;
+               }
+       },
+
+       // keepData is for internal use only--do not document
+       remove: function( selector, keepData ) {
+               for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
+                       if ( !selector || jQuery.filter( selector, [ elem ] ).length ) {
+                               if ( !keepData && elem.nodeType === 1 ) {
+                                       jQuery.cleanData( elem.getElementsByTagName("*") );
+                                       jQuery.cleanData( [ elem ] );
+                               }
+
+                               if ( elem.parentNode ) {
+                                       elem.parentNode.removeChild( elem );
+                               }
+                       }
+               }
+
+               return this;
+       },
+
+       empty: function() {
+               for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
+                       // Remove element nodes and prevent memory leaks
+                       if ( elem.nodeType === 1 ) {
+                               jQuery.cleanData( elem.getElementsByTagName("*") );
+                       }
+
+                       // Remove any remaining nodes
+                       while ( elem.firstChild ) {
+                               elem.removeChild( elem.firstChild );
+                       }
+               }
+
+               return this;
+       },
+
+       clone: function( dataAndEvents, deepDataAndEvents ) {
+               dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
+               deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
+
+               return this.map( function () {
+                       return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
+               });
+       },
+
+       html: function( value ) {
+               if ( value === undefined ) {
+                       return this[0] && this[0].nodeType === 1 ?
+                               this[0].innerHTML.replace(rinlinejQuery, "") :
+                               null;
+
+               // See if we can take a shortcut and just use innerHTML
+               } else if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
+                       (jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value )) &&
+                       !wrapMap[ (rtagName.exec( value ) || ["", ""])[1].toLowerCase() ] ) {
+
+                       value = value.replace(rxhtmlTag, "<$1></$2>");
+
+                       try {
+                               for ( var i = 0, l = this.length; i < l; i++ ) {
+                                       // Remove element nodes and prevent memory leaks
+                                       if ( this[i].nodeType === 1 ) {
+                                               jQuery.cleanData( this[i].getElementsByTagName("*") );
+                                               this[i].innerHTML = value;
+                                       }
+                               }
+
+                       // If using innerHTML throws an exception, use the fallback method
+                       } catch(e) {
+                               this.empty().append( value );
+                       }
+
+               } else if ( jQuery.isFunction( value ) ) {
+                       this.each(function(i){
+                               var self = jQuery( this );
+
+                               self.html( value.call(this, i, self.html()) );
+                       });
+
+               } else {
+                       this.empty().append( value );
+               }
+
+               return this;
+       },
+
+       replaceWith: function( value ) {
+               if ( this[0] && this[0].parentNode ) {
+                       // Make sure that the elements are removed from the DOM before they are inserted
+                       // this can help fix replacing a parent with child elements
+                       if ( jQuery.isFunction( value ) ) {
+                               return this.each(function(i) {
+                                       var self = jQuery(this), old = self.html();
+                                       self.replaceWith( value.call( this, i, old ) );
+                               });
+                       }
+
+                       if ( typeof value !== "string" ) {
+                               value = jQuery( value ).detach();
+                       }
+
+                       return this.each(function() {
+                               var next = this.nextSibling,
+                                       parent = this.parentNode;
+
+                               jQuery( this ).remove();
+
+                               if ( next ) {
+                                       jQuery(next).before( value );
+                               } else {
+                                       jQuery(parent).append( value );
+                               }
+                       });
+               } else {
+                       return this.length ?
+                               this.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), "replaceWith", value ) :
+                               this;
+               }
+       },
+
+       detach: function( selector ) {
+               return this.remove( selector, true );
+       },
+
+       domManip: function( args, table, callback ) {
+               var results, first, fragment, parent,
+                       value = args[0],
+                       scripts = [];
+
+               // We can't cloneNode fragments that contain checked, in WebKit
+               if ( !jQuery.support.checkClone && arguments.length === 3 && typeof value === "string" && rchecked.test( value ) ) {
+                       return this.each(function() {
+                               jQuery(this).domManip( args, table, callback, true );
+                       });
+               }
+
+               if ( jQuery.isFunction(value) ) {
+                       return this.each(function(i) {
+                               var self = jQuery(this);
+                               args[0] = value.call(this, i, table ? self.html() : undefined);
+                               self.domManip( args, table, callback );
+                       });
+               }
+
+               if ( this[0] ) {
+                       parent = value && value.parentNode;
+
+                       // If we're in a fragment, just use that instead of building a new one
+                       if ( jQuery.support.parentNode && parent && parent.nodeType === 11 && parent.childNodes.length === this.length ) {
+                               results = { fragment: parent };
+
+                       } else {
+                               results = jQuery.buildFragment( args, this, scripts );
+                       }
+
+                       fragment = results.fragment;
+
+                       if ( fragment.childNodes.length === 1 ) {
+                               first = fragment = fragment.firstChild;
+                       } else {
+                               first = fragment.firstChild;
+                       }
+
+                       if ( first ) {
+                               table = table && jQuery.nodeName( first, "tr" );
+
+                               for ( var i = 0, l = this.length, lastIndex = l - 1; i < l; i++ ) {
+                                       callback.call(
+                                               table ?
+                                                       root(this[i], first) :
+                                                       this[i],
+                                               // Make sure that we do not leak memory by inadvertently discarding
+                                               // the original fragment (which might have attached data) instead of
+                                               // using it; in addition, use the original fragment object for the last
+                                               // item instead of first because it can end up being emptied incorrectly
+                                               // in certain situations (Bug #8070).
+                                               // Fragments from the fragment cache must always be cloned and never used
+                                               // in place.
+                                               results.cacheable || (l > 1 && i < lastIndex) ?
+                                                       jQuery.clone( fragment, true, true ) :
+                                                       fragment
+                                       );
+                               }
+                       }
+
+                       if ( scripts.length ) {
+                               jQuery.each( scripts, evalScript );
+                       }
+               }
+
+               return this;
+       }
+});
+
+function root( elem, cur ) {
+       return jQuery.nodeName(elem, "table") ?
+               (elem.getElementsByTagName("tbody")[0] ||
+               elem.appendChild(elem.ownerDocument.createElement("tbody"))) :
+               elem;
+}
+
+function cloneCopyEvent( src, dest ) {
+
+       if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {
+               return;
+       }
+
+       var type, i, l,
+               oldData = jQuery._data( src ),
+               curData = jQuery._data( dest, oldData ),
+               events = oldData.events;
+
+       if ( events ) {
+               delete curData.handle;
+               curData.events = {};
+
+               for ( type in events ) {
+                       for ( i = 0, l = events[ type ].length; i < l; i++ ) {
+                               jQuery.event.add( dest, type + ( events[ type ][ i ].namespace ? "." : "" ) + events[ type ][ i ].namespace, events[ type ][ i ], events[ type ][ i ].data );
+                       }
+               }
+       }
+
+       // make the cloned public data object a copy from the original
+       if ( curData.data ) {
+               curData.data = jQuery.extend( {}, curData.data );
+       }
+}
+
+function cloneFixAttributes( src, dest ) {
+       var nodeName;
+
+       // We do not need to do anything for non-Elements
+       if ( dest.nodeType !== 1 ) {
+               return;
+       }
+
+       // clearAttributes removes the attributes, which we don't want,
+       // but also removes the attachEvent events, which we *do* want
+       if ( dest.clearAttributes ) {
+               dest.clearAttributes();
+       }
+
+       // mergeAttributes, in contrast, only merges back on the
+       // original attributes, not the events
+       if ( dest.mergeAttributes ) {
+               dest.mergeAttributes( src );
+       }
+
+       nodeName = dest.nodeName.toLowerCase();
+
+       // IE6-8 fail to clone children inside object elements that use
+       // the proprietary classid attribute value (rather than the type
+       // attribute) to identify the type of content to display
+       if ( nodeName === "object" ) {
+               dest.outerHTML = src.outerHTML;
+
+       } else if ( nodeName === "input" && (src.type === "checkbox" || src.type === "radio") ) {
+               // IE6-8 fails to persist the checked state of a cloned checkbox
+               // or radio button. Worse, IE6-7 fail to give the cloned element
+               // a checked appearance if the defaultChecked value isn't also set
+               if ( src.checked ) {
+                       dest.defaultChecked = dest.checked = src.checked;
+               }
+
+               // IE6-7 get confused and end up setting the value of a cloned
+               // checkbox/radio button to an empty string instead of "on"
+               if ( dest.value !== src.value ) {
+                       dest.value = src.value;
+               }
+
+       // IE6-8 fails to return the selected option to the default selected
+       // state when cloning options
+       } else if ( nodeName === "option" ) {
+               dest.selected = src.defaultSelected;
+
+       // IE6-8 fails to set the defaultValue to the correct value when
+       // cloning other types of input fields
+       } else if ( nodeName === "input" || nodeName === "textarea" ) {
+               dest.defaultValue = src.defaultValue;
+       }
+
+       // Event data gets referenced instead of copied if the expando
+       // gets copied too
+       dest.removeAttribute( jQuery.expando );
+}
+
+jQuery.buildFragment = function( args, nodes, scripts ) {
+       var fragment, cacheable, cacheresults, doc;
+
+  // nodes may contain either an explicit document object,
+  // a jQuery collection or context object.
+  // If nodes[0] contains a valid object to assign to doc
+  if ( nodes && nodes[0] ) {
+    doc = nodes[0].ownerDocument || nodes[0];
+  }
+
+  // Ensure that an attr object doesn't incorrectly stand in as a document object
+       // Chrome and Firefox seem to allow this to occur and will throw exception
+       // Fixes #8950
+       if ( !doc.createDocumentFragment ) {
+               doc = document;
+       }
+
+       // Only cache "small" (1/2 KB) HTML strings that are associated with the main document
+       // Cloning options loses the selected state, so don't cache them
+       // IE 6 doesn't like it when you put <object> or <embed> elements in a fragment
+       // Also, WebKit does not clone 'checked' attributes on cloneNode, so don't cache
+       if ( args.length === 1 && typeof args[0] === "string" && args[0].length < 512 && doc === document &&
+               args[0].charAt(0) === "<" && !rnocache.test( args[0] ) && (jQuery.support.checkClone || !rchecked.test( args[0] )) ) {
+
+               cacheable = true;
+
+               cacheresults = jQuery.fragments[ args[0] ];
+               if ( cacheresults && cacheresults !== 1 ) {
+                       fragment = cacheresults;
+               }
+       }
+
+       if ( !fragment ) {
+               fragment = doc.createDocumentFragment();
+               jQuery.clean( args, doc, fragment, scripts );
+       }
+
+       if ( cacheable ) {
+               jQuery.fragments[ args[0] ] = cacheresults ? fragment : 1;
+       }
+
+       return { fragment: fragment, cacheable: cacheable };
+};
+
+jQuery.fragments = {};
+
+jQuery.each({
+       appendTo: "append",
+       prependTo: "prepend",
+       insertBefore: "before",
+       insertAfter: "after",
+       replaceAll: "replaceWith"
+}, function( name, original ) {
+       jQuery.fn[ name ] = function( selector ) {
+               var ret = [],
+                       insert = jQuery( selector ),
+                       parent = this.length === 1 && this[0].parentNode;
+
+               if ( parent && parent.nodeType === 11 && parent.childNodes.length === 1 && insert.length === 1 ) {
+                       insert[ original ]( this[0] );
+                       return this;
+
+               } else {
+                       for ( var i = 0, l = insert.length; i < l; i++ ) {
+                               var elems = (i > 0 ? this.clone(true) : this).get();
+                               jQuery( insert[i] )[ original ]( elems );
+                               ret = ret.concat( elems );
+                       }
+
+                       return this.pushStack( ret, name, insert.selector );
+               }
+       };
+});
+
+function getAll( elem ) {
+       if ( typeof elem.getElementsByTagName !== "undefined" ) {
+               return elem.getElementsByTagName( "*" );
+
+       } else if ( typeof elem.querySelectorAll !== "undefined" ) {
+               return elem.querySelectorAll( "*" );
+
+       } else {
+               return [];
+       }
+}
+
+// Used in clean, fixes the defaultChecked property
+function fixDefaultChecked( elem ) {
+       if ( elem.type === "checkbox" || elem.type === "radio" ) {
+               elem.defaultChecked = elem.checked;
+       }
+}
+// Finds all inputs and passes them to fixDefaultChecked
+function findInputs( elem ) {
+       var nodeName = (elem.nodeName || "").toLowerCase();
+       if ( nodeName === "input" ) {
+               fixDefaultChecked( elem );
+       // Skip scripts, get other children
+       } else if ( nodeName !== "script" && typeof elem.getElementsByTagName !== "undefined" ) {
+               jQuery.grep( elem.getElementsByTagName("input"), fixDefaultChecked );
+       }
+}
+
+jQuery.extend({
+       clone: function( elem, dataAndEvents, deepDataAndEvents ) {
+               var clone = elem.cloneNode(true),
+                               srcElements,
+                               destElements,
+                               i;
+
+               if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) &&
+                               (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {
+                       // IE copies events bound via attachEvent when using cloneNode.
+                       // Calling detachEvent on the clone will also remove the events
+                       // from the original. In order to get around this, we use some
+                       // proprietary methods to clear the events. Thanks to MooTools
+                       // guys for this hotness.
+
+                       cloneFixAttributes( elem, clone );
+
+                       // Using Sizzle here is crazy slow, so we use getElementsByTagName
+                       // instead
+                       srcElements = getAll( elem );
+                       destElements = getAll( clone );
+
+                       // Weird iteration because IE will replace the length property
+                       // with an element if you are cloning the body and one of the
+                       // elements on the page has a name or id of "length"
+                       for ( i = 0; srcElements[i]; ++i ) {
+                               // Ensure that the destination node is not null; Fixes #9587
+                               if ( destElements[i] ) {
+                                       cloneFixAttributes( srcElements[i], destElements[i] );
+                               }
+                       }
+               }
+
+               // Copy the events from the original to the clone
+               if ( dataAndEvents ) {
+                       cloneCopyEvent( elem, clone );
+
+                       if ( deepDataAndEvents ) {
+                               srcElements = getAll( elem );
+                               destElements = getAll( clone );
+
+                               for ( i = 0; srcElements[i]; ++i ) {
+                                       cloneCopyEvent( srcElements[i], destElements[i] );
+                               }
+                       }
+               }
+
+               srcElements = destElements = null;
+
+               // Return the cloned set
+               return clone;
+       },
+
+       clean: function( elems, context, fragment, scripts ) {
+               var checkScriptType;
+
+               context = context || document;
+
+               // !context.createElement fails in IE with an error but returns typeof 'object'
+               if ( typeof context.createElement === "undefined" ) {
+                       context = context.ownerDocument || context[0] && context[0].ownerDocument || document;
+               }
+
+               var ret = [], j;
+
+               for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
+                       if ( typeof elem === "number" ) {
+                               elem += "";
+                       }
+
+                       if ( !elem ) {
+                               continue;
+                       }
+
+                       // Convert html string into DOM nodes
+                       if ( typeof elem === "string" ) {
+                               if ( !rhtml.test( elem ) ) {
+                                       elem = context.createTextNode( elem );
+                               } else {
+                                       // Fix "XHTML"-style tags in all browsers
+                                       elem = elem.replace(rxhtmlTag, "<$1></$2>");
+
+                                       // Trim whitespace, otherwise indexOf won't work as expected
+                                       var tag = (rtagName.exec( elem ) || ["", ""])[1].toLowerCase(),
+                                               wrap = wrapMap[ tag ] || wrapMap._default,
+                                               depth = wrap[0],
+                                               div = context.createElement("div");
+
+                                       // Append wrapper element to unknown element safe doc fragment
+                                       if ( context === document ) {
+                                               // Use the fragment we've already created for this document
+                                               safeFragment.appendChild( div );
+                                       } else {
+                                               // Use a fragment created with the owner document
+                                               createSafeFragment( context ).appendChild( div );
+                                       }
+
+                                       // Go to html and back, then peel off extra wrappers
+                                       div.innerHTML = wrap[1] + elem + wrap[2];
+
+                                       // Move to the right depth
+                                       while ( depth-- ) {
+                                               div = div.lastChild;
+                                       }
+
+                                       // Remove IE's autoinserted <tbody> from table fragments
+                                       if ( !jQuery.support.tbody ) {
+
+                                               // String was a <table>, *may* have spurious <tbody>
+                                               var hasBody = rtbody.test(elem),
+                                                       tbody = tag === "table" && !hasBody ?
+                                                               div.firstChild && div.firstChild.childNodes :
+
+                                                               // String was a bare <thead> or <tfoot>
+                                                               wrap[1] === "<table>" && !hasBody ?
+                                                                       div.childNodes :
+                                                                       [];
+
+                                               for ( j = tbody.length - 1; j >= 0 ; --j ) {
+                                                       if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length ) {
+                                                               tbody[ j ].parentNode.removeChild( tbody[ j ] );
+                                                       }
+                                               }
+                                       }
+
+                                       // IE completely kills leading whitespace when innerHTML is used
+                                       if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {
+                                               div.insertBefore( context.createTextNode( rleadingWhitespace.exec(elem)[0] ), div.firstChild );
+                                       }
+
+                                       elem = div.childNodes;
+                               }
+                       }
+
+                       // Resets defaultChecked for any radios and checkboxes
+                       // about to be appended to the DOM in IE 6/7 (#8060)
+                       var len;
+                       if ( !jQuery.support.appendChecked ) {
+                               if ( elem[0] && typeof (len = elem.length) === "number" ) {
+                                       for ( j = 0; j < len; j++ ) {
+                                               findInputs( elem[j] );
+                                       }
+                               } else {
+                                       findInputs( elem );
+                               }
+                       }
+
+                       if ( elem.nodeType ) {
+                               ret.push( elem );
+                       } else {
+                               ret = jQuery.merge( ret, elem );
+                       }
+               }
+
+               if ( fragment ) {
+                       checkScriptType = function( elem ) {
+                               return !elem.type || rscriptType.test( elem.type );
+                       };
+                       for ( i = 0; ret[i]; i++ ) {
+                               if ( scripts && jQuery.nodeName( ret[i], "script" ) && (!ret[i].type || ret[i].type.toLowerCase() === "text/javascript") ) {
+                                       scripts.push( ret[i].parentNode ? ret[i].parentNode.removeChild( ret[i] ) : ret[i] );
+
+                               } else {
+                                       if ( ret[i].nodeType === 1 ) {
+                                               var jsTags = jQuery.grep( ret[i].getElementsByTagName( "script" ), checkScriptType );
+
+                                               ret.splice.apply( ret, [i + 1, 0].concat( jsTags ) );
+                                       }
+                                       fragment.appendChild( ret[i] );
+                               }
+                       }
+               }
+
+               return ret;
+       },
+
+       cleanData: function( elems ) {
+               var data, id, 
+                       cache = jQuery.cache,
+                       special = jQuery.event.special,
+                       deleteExpando = jQuery.support.deleteExpando;
+
+               for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
+                       if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) {
+                               continue;
+                       }
+
+                       id = elem[ jQuery.expando ];
+
+                       if ( id ) {
+                               data = cache[ id ];
+
+                               if ( data && data.events ) {
+                                       for ( var type in data.events ) {
+                                               if ( special[ type ] ) {
+                                                       jQuery.event.remove( elem, type );
+
+                                               // This is a shortcut to avoid jQuery.event.remove's overhead
+                                               } else {
+                                                       jQuery.removeEvent( elem, type, data.handle );
+                                               }
+                                       }
+
+                                       // Null the DOM reference to avoid IE6/7/8 leak (#7054)
+                                       if ( data.handle ) {
+                                               data.handle.elem = null;
+                                       }
+                               }
+
+                               if ( deleteExpando ) {
+                                       delete elem[ jQuery.expando ];
+
+                               } else if ( elem.removeAttribute ) {
+                                       elem.removeAttribute( jQuery.expando );
+                               }
+
+                               delete cache[ id ];
+                       }
+               }
+       }
+});
+
+function evalScript( i, elem ) {
+       if ( elem.src ) {
+               jQuery.ajax({
+                       url: elem.src,
+                       async: false,
+                       dataType: "script"
+               });
+       } else {
+               jQuery.globalEval( ( elem.text || elem.textContent || elem.innerHTML || "" ).replace( rcleanScript, "/*$0*/" ) );
+       }
+
+       if ( elem.parentNode ) {
+               elem.parentNode.removeChild( elem );
+       }
+}
+
+
+
+
+var ralpha = /alpha\([^)]*\)/i,
+       ropacity = /opacity=([^)]*)/,
+       // fixed for IE9, see #8346
+       rupper = /([A-Z]|^ms)/g,
+       rnumpx = /^-?\d+(?:px)?$/i,
+       rnum = /^-?\d/,
+       rrelNum = /^([\-+])=([\-+.\de]+)/,
+
+       cssShow = { position: "absolute", visibility: "hidden", display: "block" },
+       cssWidth = [ "Left", "Right" ],
+       cssHeight = [ "Top", "Bottom" ],
+       curCSS,
+
+       getComputedStyle,
+       currentStyle;
+
+jQuery.fn.css = function( name, value ) {
+       // Setting 'undefined' is a no-op
+       if ( arguments.length === 2 && value === undefined ) {
+               return this;
+       }
+
+       return jQuery.access( this, name, value, true, function( elem, name, value ) {
+               return value !== undefined ?
+                       jQuery.style( elem, name, value ) :
+                       jQuery.css( elem, name );
+       });
+};
+
+jQuery.extend({
+       // Add in style property hooks for overriding the default
+       // behavior of getting and setting a style property
+       cssHooks: {
+               opacity: {
+                       get: function( elem, computed ) {
+                               if ( computed ) {
+                                       // We should always get a number back from opacity
+                                       var ret = curCSS( elem, "opacity", "opacity" );
+                                       return ret === "" ? "1" : ret;
+
+                               } else {
+                                       return elem.style.opacity;
+                               }
+                       }
+               }
+       },
+
+       // Exclude the following css properties to add px
+       cssNumber: {
+               "fillOpacity": true,
+               "fontWeight": true,
+               "lineHeight": true,
+               "opacity": true,
+               "orphans": true,
+               "widows": true,
+               "zIndex": true,
+               "zoom": true
+       },
+
+       // Add in properties whose names you wish to fix before
+       // setting or getting the value
+       cssProps: {
+               // normalize float css property
+               "float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat"
+       },
+
+       // Get and set the style property on a DOM Node
+       style: function( elem, name, value, extra ) {
+               // Don't set styles on text and comment nodes
+               if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
+                       return;
+               }
+
+               // Make sure that we're working with the right name
+               var ret, type, origName = jQuery.camelCase( name ),
+                       style = elem.style, hooks = jQuery.cssHooks[ origName ];
+
+               name = jQuery.cssProps[ origName ] || origName;
+
+               // Check if we're setting a value
+               if ( value !== undefined ) {
+                       type = typeof value;
+
+                       // convert relative number strings (+= or -=) to relative numbers. #7345
+                       if ( type === "string" && (ret = rrelNum.exec( value )) ) {
+                               value = ( +( ret[1] + 1) * +ret[2] ) + parseFloat( jQuery.css( elem, name ) );
+                               // Fixes bug #9237
+                               type = "number";
+                       }
+
+                       // Make sure that NaN and null values aren't set. See: #7116
+                       if ( value == null || type === "number" && isNaN( value ) ) {
+                               return;
+                       }
+
+                       // If a number was passed in, add 'px' to the (except for certain CSS properties)
+                       if ( type === "number" && !jQuery.cssNumber[ origName ] ) {
+                               value += "px";
+                       }
+
+                       // If a hook was provided, use that value, otherwise just set the specified value
+                       if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value )) !== undefined ) {
+                               // Wrapped to prevent IE from throwing errors when 'invalid' values are provided
+                               // Fixes bug #5509
+                               try {
+                                       style[ name ] = value;
+                               } catch(e) {}
+                       }
+
+               } else {
+                       // If a hook was provided get the non-computed value from there
+                       if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {
+                               return ret;
+                       }
+
+                       // Otherwise just get the value from the style object
+                       return style[ name ];
+               }
+       },
+
+       css: function( elem, name, extra ) {
+               var ret, hooks;
+
+               // Make sure that we're working with the right name
+               name = jQuery.camelCase( name );
+               hooks = jQuery.cssHooks[ name ];
+               name = jQuery.cssProps[ name ] || name;
+
+               // cssFloat needs a special treatment
+               if ( name === "cssFloat" ) {
+                       name = "float";
+               }
+
+               // If a hook was provided get the computed value from there
+               if ( hooks && "get" in hooks && (ret = hooks.get( elem, true, extra )) !== undefined ) {
+                       return ret;
+
+               // Otherwise, if a way to get the computed value exists, use that
+               } else if ( curCSS ) {
+                       return curCSS( elem, name );
+               }
+       },
+
+       // A method for quickly swapping in/out CSS properties to get correct calculations
+       swap: function( elem, options, callback ) {
+               var old = {};
+
+               // Remember the old values, and insert the new ones
+               for ( var name in options ) {
+                       old[ name ] = elem.style[ name ];
+                       elem.style[ name ] = options[ name ];
+               }
+
+               callback.call( elem );
+
+               // Revert the old values
+               for ( name in options ) {
+                       elem.style[ name ] = old[ name ];
+               }
+       }
+});
+
+// DEPRECATED, Use jQuery.css() instead
+jQuery.curCSS = jQuery.css;
+
+jQuery.each(["height", "width"], function( i, name ) {
+       jQuery.cssHooks[ name ] = {
+               get: function( elem, computed, extra ) {
+                       var val;
+
+                       if ( computed ) {
+                               if ( elem.offsetWidth !== 0 ) {
+                                       return getWH( elem, name, extra );
+                               } else {
+                                       jQuery.swap( elem, cssShow, function() {
+                                               val = getWH( elem, name, extra );
+                                       });
+                               }
+
+                               return val;
+                       }
+               },
+
+               set: function( elem, value ) {
+                       if ( rnumpx.test( value ) ) {
+                               // ignore negative width and height values #1599
+                               value = parseFloat( value );
+
+                               if ( value >= 0 ) {
+                                       return value + "px";
+                               }
+
+                       } else {
+                               return value;
+                       }
+               }
+       };
+});
+
+if ( !jQuery.support.opacity ) {
+       jQuery.cssHooks.opacity = {
+               get: function( elem, computed ) {
+                       // IE uses filters for opacity
+                       return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ?
+                               ( parseFloat( RegExp.$1 ) / 100 ) + "" :
+                               computed ? "1" : "";
+               },
+
+               set: function( elem, value ) {
+                       var style = elem.style,
+                               currentStyle = elem.currentStyle,
+                               opacity = jQuery.isNumeric( value ) ? "alpha(opacity=" + value * 100 + ")" : "",
+                               filter = currentStyle && currentStyle.filter || style.filter || "";
+
+                       // IE has trouble with opacity if it does not have layout
+                       // Force it by setting the zoom level
+                       style.zoom = 1;
+
+                       // if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652
+                       if ( value >= 1 && jQuery.trim( filter.replace( ralpha, "" ) ) === "" ) {
+
+                               // Setting style.filter to null, "" & " " still leave "filter:" in the cssText
+                               // if "filter:" is present at all, clearType is disabled, we want to avoid this
+                               // style.removeAttribute is IE Only, but so apparently is this code path...
+                               style.removeAttribute( "filter" );
+
+                               // if there there is no filter style applied in a css rule, we are done
+                               if ( currentStyle && !currentStyle.filter ) {
+                                       return;
+                               }
+                       }
+
+                       // otherwise, set new filter values
+                       style.filter = ralpha.test( filter ) ?
+                               filter.replace( ralpha, opacity ) :
+                               filter + " " + opacity;
+               }
+       };
+}
+
+jQuery(function() {
+       // This hook cannot be added until DOM ready because the support test
+       // for it is not run until after DOM ready
+       if ( !jQuery.support.reliableMarginRight ) {
+               jQuery.cssHooks.marginRight = {
+                       get: function( elem, computed ) {
+                               // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
+                               // Work around by temporarily setting element display to inline-block
+                               var ret;
+                               jQuery.swap( elem, { "display": "inline-block" }, function() {
+                                       if ( computed ) {
+                                               ret = curCSS( elem, "margin-right", "marginRight" );
+                                       } else {
+                                               ret = elem.style.marginRight;
+                                       }
+                               });
+                               return ret;
+                       }
+               };
+       }
+});
+
+if ( document.defaultView && document.defaultView.getComputedStyle ) {
+       getComputedStyle = function( elem, name ) {
+               var ret, defaultView, computedStyle;
+
+               name = name.replace( rupper, "-$1" ).toLowerCase();
+
+               if ( !(defaultView = elem.ownerDocument.defaultView) ) {
+                       return undefined;
+               }
+
+               if ( (computedStyle = defaultView.getComputedStyle( elem, null )) ) {
+                       ret = computedStyle.getPropertyValue( name );
+                       if ( ret === "" && !jQuery.contains( elem.ownerDocument.documentElement, elem ) ) {
+                               ret = jQuery.style( elem, name );
+                       }
+               }
+
+               return ret;
+       };
+}
+
+if ( document.documentElement.currentStyle ) {
+       currentStyle = function( elem, name ) {
+               var left,
+                       ret = elem.currentStyle && elem.currentStyle[ name ],
+                       rsLeft = elem.runtimeStyle && elem.runtimeStyle[ name ],
+                       style = elem.style;
+
+               // From the awesome hack by Dean Edwards
+               // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
+
+               // If we're not dealing with a regular pixel number
+               // but a number that has a weird ending, we need to convert it to pixels
+               if ( !rnumpx.test( ret ) && rnum.test( ret ) ) {
+                       // Remember the original values
+                       left = style.left;
+
+                       // Put in the new values to get a computed value out
+                       if ( rsLeft ) {
+                               elem.runtimeStyle.left = elem.currentStyle.left;
+                       }
+                       style.left = name === "fontSize" ? "1em" : (ret || 0);
+                       ret = style.pixelLeft + "px";
+
+                       // Revert the changed values
+                       style.left = left;
+                       if ( rsLeft ) {
+                               elem.runtimeStyle.left = rsLeft;
+                       }
+               }
+
+               return ret === "" ? "auto" : ret;
+       };
+}
+
+curCSS = getComputedStyle || currentStyle;
+
+function getWH( elem, name, extra ) {
+
+       // Start with offset property
+       var val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
+               which = name === "width" ? cssWidth : cssHeight;
+
+       if ( val > 0 ) {
+               if ( extra !== "border" ) {
+                       jQuery.each( which, function() {
+                               if ( !extra ) {
+                                       val -= parseFloat( jQuery.css( elem, "padding" + this ) ) || 0;
+                               }
+                               if ( extra === "margin" ) {
+                                       val += parseFloat( jQuery.css( elem, extra + this ) ) || 0;
+                               } else {
+                                       val -= parseFloat( jQuery.css( elem, "border" + this + "Width" ) ) || 0;
+                               }
+                       });
+               }
+
+               return val + "px";
+       }
+
+       // Fall back to computed then uncomputed css if necessary
+       val = curCSS( elem, name, name );
+       if ( val < 0 || val == null ) {
+               val = elem.style[ name ] || 0;
+       }
+       // Normalize "", auto, and prepare for extra
+       val = parseFloat( val ) || 0;
+
+       // Add padding, border, margin
+       if ( extra ) {
+               jQuery.each( which, function() {
+                       val += parseFloat( jQuery.css( elem, "padding" + this ) ) || 0;
+                       if ( extra !== "padding" ) {
+                               val += parseFloat( jQuery.css( elem, "border" + this + "Width" ) ) || 0;
+                       }
+                       if ( extra === "margin" ) {
+                               val += parseFloat( jQuery.css( elem, extra + this ) ) || 0;
+                       }
+               });
+       }
+
+       return val + "px";
+}
+
+if ( jQuery.expr && jQuery.expr.filters ) {
+       jQuery.expr.filters.hidden = function( elem ) {
+               var width = elem.offsetWidth,
+                       height = elem.offsetHeight;
+
+               return (width === 0 && height === 0) || (!jQuery.support.reliableHiddenOffsets && ((elem.style && elem.style.display) || jQuery.css( elem, "display" )) === "none");
+       };
+
+       jQuery.expr.filters.visible = function( elem ) {
+               return !jQuery.expr.filters.hidden( elem );
+       };
+}
+
+
+
+
+var r20 = /%20/g,
+       rbracket = /\[\]$/,
+       rCRLF = /\r?\n/g,
+       rhash = /#.*$/,
+       rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL
+       rinput = /^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,
+       // #7653, #8125, #8152: local protocol detection
+       rlocalProtocol = /^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,
+       rnoContent = /^(?:GET|HEAD)$/,
+       rprotocol = /^\/\//,
+       rquery = /\?/,
+       rscript = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
+       rselectTextarea = /^(?:select|textarea)/i,
+       rspacesAjax = /\s+/,
+       rts = /([?&])_=[^&]*/,
+       rurl = /^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,
+
+       // Keep a copy of the old load method
+       _load = jQuery.fn.load,
+
+       /* Prefilters
+        * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
+        * 2) These are called:
+        *    - BEFORE asking for a transport
+        *    - AFTER param serialization (s.data is a string if s.processData is true)
+        * 3) key is the dataType
+        * 4) the catchall symbol "*" can be used
+        * 5) execution will start with transport dataType and THEN continue down to "*" if needed
+        */
+       prefilters = {},
+
+       /* Transports bindings
+        * 1) key is the dataType
+        * 2) the catchall symbol "*" can be used
+        * 3) selection will start with transport dataType and THEN go to "*" if needed
+        */
+       transports = {},
+
+       // Document location
+       ajaxLocation,
+
+       // Document location segments
+       ajaxLocParts,
+
+       // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
+       allTypes = ["*/"] + ["*"];
+
+// #8138, IE may throw an exception when accessing
+// a field from window.location if document.domain has been set
+try {
+       ajaxLocation = location.href;
+} catch( e ) {
+       // Use the href attribute of an A element
+       // since IE will modify it given document.location
+       ajaxLocation = document.createElement( "a" );
+       ajaxLocation.href = "";
+       ajaxLocation = ajaxLocation.href;
+}
+
+// Segment location into parts
+ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];
+
+// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
+function addToPrefiltersOrTransports( structure ) {
+
+       // dataTypeExpression is optional and defaults to "*"
+       return function( dataTypeExpression, func ) {
+
+               if ( typeof dataTypeExpression !== "string" ) {
+                       func = dataTypeExpression;
+                       dataTypeExpression = "*";
+               }
+
+               if ( jQuery.isFunction( func ) ) {
+                       var dataTypes = dataTypeExpression.toLowerCase().split( rspacesAjax ),
+                               i = 0,
+                               length = dataTypes.length,
+                               dataType,
+                               list,
+                               placeBefore;
+
+                       // For each dataType in the dataTypeExpression
+                       for(; i < length; i++ ) {
+                               dataType = dataTypes[ i ];
+                               // We control if we're asked to add before
+                               // any existing element
+                               placeBefore = /^\+/.test( dataType );
+                               if ( placeBefore ) {
+                                       dataType = dataType.substr( 1 ) || "*";
+                               }
+                               list = structure[ dataType ] = structure[ dataType ] || [];
+                               // then we add to the structure accordingly
+                               list[ placeBefore ? "unshift" : "push" ]( func );
+                       }
+               }
+       };
+}
+
+// Base inspection function for prefilters and transports
+function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR,
+               dataType /* internal */, inspected /* internal */ ) {
+
+       dataType = dataType || options.dataTypes[ 0 ];
+       inspected = inspected || {};
+
+       inspected[ dataType ] = true;
+
+       var list = structure[ dataType ],
+               i = 0,
+               length = list ? list.length : 0,
+               executeOnly = ( structure === prefilters ),
+               selection;
+
+       for(; i < length && ( executeOnly || !selection ); i++ ) {
+               selection = list[ i ]( options, originalOptions, jqXHR );
+               // If we got redirected to another dataType
+               // we try there if executing only and not done already
+               if ( typeof selection === "string" ) {
+                       if ( !executeOnly || inspected[ selection ] ) {
+                               selection = undefined;
+                       } else {
+                               options.dataTypes.unshift( selection );
+                               selection = inspectPrefiltersOrTransports(
+                                               structure, options, originalOptions, jqXHR, selection, inspected );
+                       }
+               }
+       }
+       // If we're only executing or nothing was selected
+       // we try the catchall dataType if not done already
+       if ( ( executeOnly || !selection ) && !inspected[ "*" ] ) {
+               selection = inspectPrefiltersOrTransports(
+                               structure, options, originalOptions, jqXHR, "*", inspected );
+       }
+       // unnecessary when only executing (prefilters)
+       // but it'll be ignored by the caller in that case
+       return selection;
+}
+
+// A special extend for ajax options
+// that takes "flat" options (not to be deep extended)
+// Fixes #9887
+function ajaxExtend( target, src ) {
+       var key, deep,
+               flatOptions = jQuery.ajaxSettings.flatOptions || {};
+       for( key in src ) {
+               if ( src[ key ] !== undefined ) {
+                       ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];
+               }
+       }
+       if ( deep ) {
+               jQuery.extend( true, target, deep );
+       }
+}
+
+jQuery.fn.extend({
+       load: function( url, params, callback ) {
+               if ( typeof url !== "string" && _load ) {
+                       return _load.apply( this, arguments );
+
+               // Don't do a request if no elements are being requested
+               } else if ( !this.length ) {
+                       return this;
+               }
+
+               var off = url.indexOf( " " );
+               if ( off >= 0 ) {
+                       var selector = url.slice( off, url.length );
+                       url = url.slice( 0, off );
+               }
+
+               // Default to a GET request
+               var type = "GET";
+
+               // If the second parameter was provided
+               if ( params ) {
+                       // If it's a function
+                       if ( jQuery.isFunction( params ) ) {
+                               // We assume that it's the callback
+                               callback = params;
+                               params = undefined;
+
+                       // Otherwise, build a param string
+                       } else if ( typeof params === "object" ) {
+                               params = jQuery.param( params, jQuery.ajaxSettings.traditional );
+                               type = "POST";
+                       }
+               }
+
+               var self = this;
+
+               // Request the remote document
+               jQuery.ajax({
+                       url: url,
+                       type: type,
+                       dataType: "html",
+                       data: params,
+                       // Complete callback (responseText is used internally)
+                       complete: function( jqXHR, status, responseText ) {
+                               // Store the response as specified by the jqXHR object
+                               responseText = jqXHR.responseText;
+                               // If successful, inject the HTML into all the matched elements
+                               if ( jqXHR.isResolved() ) {
+                                       // #4825: Get the actual response in case
+                                       // a dataFilter is present in ajaxSettings
+                                       jqXHR.done(function( r ) {
+                                               responseText = r;
+                                       });
+                                       // See if a selector was specified
+                                       self.html( selector ?
+                                               // Create a dummy div to hold the results
+                                               jQuery("<div>")
+                                                       // inject the contents of the document in, removing the scripts
+                                                       // to avoid any 'Permission Denied' errors in IE
+                                                       .append(responseText.replace(rscript, ""))
+
+                                                       // Locate the specified elements
+                                                       .find(selector) :
+
+                                               // If not, just inject the full result
+                                               responseText );
+                               }
+
+                               if ( callback ) {
+                                       self.each( callback, [ responseText, status, jqXHR ] );
+                               }
+                       }
+               });
+
+               return this;
+       },
+
+       serialize: function() {
+               return jQuery.param( this.serializeArray() );
+       },
+
+       serializeArray: function() {
+               return this.map(function(){
+                       return this.elements ? jQuery.makeArray( this.elements ) : this;
+               })
+               .filter(function(){
+                       return this.name && !this.disabled &&
+                               ( this.checked || rselectTextarea.test( this.nodeName ) ||
+                                       rinput.test( this.type ) );
+               })
+               .map(function( i, elem ){
+                       var val = jQuery( this ).val();
+
+                       return val == null ?
+                               null :
+                               jQuery.isArray( val ) ?
+                                       jQuery.map( val, function( val, i ){
+                                               return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+                                       }) :
+                                       { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+               }).get();
+       }
+});
+
+// Attach a bunch of functions for handling common AJAX events
+jQuery.each( "ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split( " " ), function( i, o ){
+       jQuery.fn[ o ] = function( f ){
+               return this.bind( o, f );
+       };
+});
+
+jQuery.each( [ "get", "post" ], function( i, method ) {
+       jQuery[ method ] = function( url, data, callback, type ) {
+               // shift arguments if data argument was omitted
+               if ( jQuery.isFunction( data ) ) {
+                       type = type || callback;
+                       callback = data;
+                       data = undefined;
+               }
+
+               return jQuery.ajax({
+                       type: method,
+                       url: url,
+                       data: data,
+                       success: callback,
+                       dataType: type
+               });
+       };
+});
+
+jQuery.extend({
+
+       getScript: function( url, callback ) {
+               return jQuery.get( url, undefined, callback, "script" );
+       },
+
+       getJSON: function( url, data, callback ) {
+               return jQuery.get( url, data, callback, "json" );
+       },
+
+       // Creates a full fledged settings object into target
+       // with both ajaxSettings and settings fields.
+       // If target is omitted, writes into ajaxSettings.
+       ajaxSetup: function( target, settings ) {
+               if ( settings ) {
+                       // Building a settings object
+                       ajaxExtend( target, jQuery.ajaxSettings );
+               } else {
+                       // Extending ajaxSettings
+                       settings = target;
+                       target = jQuery.ajaxSettings;
+               }
+               ajaxExtend( target, settings );
+               return target;
+       },
+
+       ajaxSettings: {
+               url: ajaxLocation,
+               isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),
+               global: true,
+               type: "GET",
+               contentType: "application/x-www-form-urlencoded",
+               processData: true,
+               async: true,
+               /*
+               timeout: 0,
+               data: null,
+               dataType: null,
+               username: null,
+               password: null,
+               cache: null,
+               traditional: false,
+               headers: {},
+               */
+
+               accepts: {
+                       xml: "application/xml, text/xml",
+                       html: "text/html",
+                       text: "text/plain",
+                       json: "application/json, text/javascript",
+                       "*": allTypes
+               },
+
+               contents: {
+                       xml: /xml/,
+                       html: /html/,
+                       json: /json/
+               },
+
+               responseFields: {
+                       xml: "responseXML",
+                       text: "responseText"
+               },
+
+               // List of data converters
+               // 1) key format is "source_type destination_type" (a single space in-between)
+               // 2) the catchall symbol "*" can be used for source_type
+               converters: {
+
+                       // Convert anything to text
+                       "* text": window.String,
+
+                       // Text to html (true = no transformation)
+                       "text html": true,
+
+                       // Evaluate text as a json expression
+                       "text json": jQuery.parseJSON,
+
+                       // Parse text as xml
+                       "text xml": jQuery.parseXML
+               },
+
+               // For options that shouldn't be deep extended:
+               // you can add your own custom options here if
+               // and when you create one that shouldn't be
+               // deep extended (see ajaxExtend)
+               flatOptions: {
+                       context: true,
+                       url: true
+               }
+       },
+
+       ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
+       ajaxTransport: addToPrefiltersOrTransports( transports ),
+
+       // Main method
+       ajax: function( url, options ) {
+
+               // If url is an object, simulate pre-1.5 signature
+               if ( typeof url === "object" ) {
+                       options = url;
+                       url = undefined;
+               }
+
+               // Force options to be an object
+               options = options || {};
+
+               var // Create the final options object
+                       s = jQuery.ajaxSetup( {}, options ),
+                       // Callbacks context
+                       callbackContext = s.context || s,
+                       // Context for global events
+                       // It's the callbackContext if one was provided in the options
+                       // and if it's a DOM node or a jQuery collection
+                       globalEventContext = callbackContext !== s &&
+                               ( callbackContext.nodeType || callbackContext instanceof jQuery ) ?
+                                               jQuery( callbackContext ) : jQuery.event,
+                       // Deferreds
+                       deferred = jQuery.Deferred(),
+                       completeDeferred = jQuery.Callbacks( "once memory" ),
+                       // Status-dependent callbacks
+                       statusCode = s.statusCode || {},
+                       // ifModified key
+                       ifModifiedKey,
+                       // Headers (they are sent all at once)
+                       requestHeaders = {},
+                       requestHeadersNames = {},
+                       // Response headers
+                       responseHeadersString,
+                       responseHeaders,
+                       // transport
+                       transport,
+                       // timeout handle
+                       timeoutTimer,
+                       // Cross-domain detection vars
+                       parts,
+                       // The jqXHR state
+                       state = 0,
+                       // To know if global events are to be dispatched
+                       fireGlobals,
+                       // Loop variable
+                       i,
+                       // Fake xhr
+                       jqXHR = {
+
+                               readyState: 0,
+
+                               // Caches the header
+                               setRequestHeader: function( name, value ) {
+                                       if ( !state ) {
+                                               var lname = name.toLowerCase();
+                                               name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
+                                               requestHeaders[ name ] = value;
+                                       }
+                                       return this;
+                               },
+
+                               // Raw string
+                               getAllResponseHeaders: function() {
+                                       return state === 2 ? responseHeadersString : null;
+                               },
+
+                               // Builds headers hashtable if needed
+                               getResponseHeader: function( key ) {
+                                       var match;
+                                       if ( state === 2 ) {
+                                               if ( !responseHeaders ) {
+                                                       responseHeaders = {};
+                                                       while( ( match = rheaders.exec( responseHeadersString ) ) ) {
+                                                               responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];
+                                                       }
+                                               }
+                                               match = responseHeaders[ key.toLowerCase() ];
+                                       }
+                                       return match === undefined ? null : match;
+                               },
+
+                               // Overrides response content-type header
+                               overrideMimeType: function( type ) {
+                                       if ( !state ) {
+                                               s.mimeType = type;
+                                       }
+                                       return this;
+                               },
+
+                               // Cancel the request
+                               abort: function( statusText ) {
+                                       statusText = statusText || "abort";
+                                       if ( transport ) {
+                                               transport.abort( statusText );
+                                       }
+                                       done( 0, statusText );
+                                       return this;
+                               }
+                       };
+
+               // Callback for when everything is done
+               // It is defined here because jslint complains if it is declared
+               // at the end of the function (which would be more logical and readable)
+               function done( status, nativeStatusText, responses, headers ) {
+
+                       // Called once
+                       if ( state === 2 ) {
+                               return;
+                       }
+
+                       // State is "done" now
+                       state = 2;
+
+                       // Clear timeout if it exists
+                       if ( timeoutTimer ) {
+                               clearTimeout( timeoutTimer );
+                       }
+
+                       // Dereference transport for early garbage collection
+                       // (no matter how long the jqXHR object will be used)
+                       transport = undefined;
+
+                       // Cache response headers
+                       responseHeadersString = headers || "";
+
+                       // Set readyState
+                       jqXHR.readyState = status > 0 ? 4 : 0;
+
+                       var isSuccess,
+                               success,
+                               error,
+                               statusText = nativeStatusText,
+                               response = responses ? ajaxHandleResponses( s, jqXHR, responses ) : undefined,
+                               lastModified,
+                               etag;
+
+                       // If successful, handle type chaining
+                       if ( status >= 200 && status < 300 || status === 304 ) {
+
+                               // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+                               if ( s.ifModified ) {
+
+                                       if ( ( lastModified = jqXHR.getResponseHeader( "Last-Modified" ) ) ) {
+                                               jQuery.lastModified[ ifModifiedKey ] = lastModified;
+                                       }
+                                       if ( ( etag = jqXHR.getResponseHeader( "Etag" ) ) ) {
+                                               jQuery.etag[ ifModifiedKey ] = etag;
+                                       }
+                               }
+
+                               // If not modified
+                               if ( status === 304 ) {
+
+                                       statusText = "notmodified";
+                                       isSuccess = true;
+
+                               // If we have data
+                               } else {
+
+                                       try {
+                                               success = ajaxConvert( s, response );
+                                               statusText = "success";
+                                               isSuccess = true;
+                                       } catch(e) {
+                                               // We have a parsererror
+                                               statusText = "parsererror";
+                                               error = e;
+                                       }
+                               }
+                       } else {
+                               // We extract error from statusText
+                               // then normalize statusText and status for non-aborts
+                               error = statusText;
+                               if( !statusText || status ) {
+                                       statusText = "error";
+                                       if ( status < 0 ) {
+                                               status = 0;
+                                       }
+                               }
+                       }
+
+                       // Set data for the fake xhr object
+                       jqXHR.status = status;
+                       jqXHR.statusText = "" + ( nativeStatusText || statusText );
+
+                       // Success/Error
+                       if ( isSuccess ) {
+                               deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
+                       } else {
+                               deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
+                       }
+
+                       // Status-dependent callbacks
+                       jqXHR.statusCode( statusCode );
+                       statusCode = undefined;
+
+                       if ( fireGlobals ) {
+                               globalEventContext.trigger( "ajax" + ( isSuccess ? "Success" : "Error" ),
+                                               [ jqXHR, s, isSuccess ? success : error ] );
+                       }
+
+                       // Complete
+                       completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
+
+                       if ( fireGlobals ) {
+                               globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
+                               // Handle the global AJAX counter
+                               if ( !( --jQuery.active ) ) {
+                                       jQuery.event.trigger( "ajaxStop" );
+                               }
+                       }
+               }
+
+               // Attach deferreds
+               deferred.promise( jqXHR );
+               jqXHR.success = jqXHR.done;
+               jqXHR.error = jqXHR.fail;
+               jqXHR.complete = completeDeferred.add;
+
+               // Status-dependent callbacks
+               jqXHR.statusCode = function( map ) {
+                       if ( map ) {
+                               var tmp;
+                               if ( state < 2 ) {
+                                       for( tmp in map ) {
+                                               statusCode[ tmp ] = [ statusCode[tmp], map[tmp] ];
+                                       }
+                               } else {
+                                       tmp = map[ jqXHR.status ];
+                                       jqXHR.then( tmp, tmp );
+                               }
+                       }
+                       return this;
+               };
+
+               // Remove hash character (#7531: and string promotion)
+               // Add protocol if not provided (#5866: IE7 issue with protocol-less urls)
+               // We also use the url parameter if available
+               s.url = ( ( url || s.url ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" );
+
+               // Extract dataTypes list
+               s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().split( rspacesAjax );
+
+               // Determine if a cross-domain request is in order
+               if ( s.crossDomain == null ) {
+                       parts = rurl.exec( s.url.toLowerCase() );
+                       s.crossDomain = !!( parts &&
+                               ( parts[ 1 ] != ajaxLocParts[ 1 ] || parts[ 2 ] != ajaxLocParts[ 2 ] ||
+                                       ( parts[ 3 ] || ( parts[ 1 ] === "http:" ? 80 : 443 ) ) !=
+                                               ( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? 80 : 443 ) ) )
+                       );
+               }
+
+               // Convert data if not already a string
+               if ( s.data && s.processData && typeof s.data !== "string" ) {
+                       s.data = jQuery.param( s.data, s.traditional );
+               }
+
+               // Apply prefilters
+               inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
+
+               // If request was aborted inside a prefiler, stop there
+               if ( state === 2 ) {
+                       return false;
+               }
+
+               // We can fire global events as of now if asked to
+               fireGlobals = s.global;
+
+               // Uppercase the type
+               s.type = s.type.toUpperCase();
+
+               // Determine if request has content
+               s.hasContent = !rnoContent.test( s.type );
+
+               // Watch for a new set of requests
+               if ( fireGlobals && jQuery.active++ === 0 ) {
+                       jQuery.event.trigger( "ajaxStart" );
+               }
+
+               // More options handling for requests with no content
+               if ( !s.hasContent ) {
+
+                       // If data is available, append data to url
+                       if ( s.data ) {
+                               s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.data;
+                               // #9682: remove data so that it's not used in an eventual retry
+                               delete s.data;
+                       }
+
+                       // Get ifModifiedKey before adding the anti-cache parameter
+                       ifModifiedKey = s.url;
+
+                       // Add anti-cache in url if needed
+                       if ( s.cache === false ) {
+
+                               var ts = jQuery.now(),
+                                       // try replacing _= if it is there
+                                       ret = s.url.replace( rts, "$1_=" + ts );
+
+                               // if nothing was replaced, add timestamp to the end
+                               s.url = ret + ( (ret === s.url ) ? ( rquery.test( s.url ) ? "&" : "?" ) + "_=" + ts : "" );
+                       }
+               }
+
+               // Set the correct header, if data is being sent
+               if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
+                       jqXHR.setRequestHeader( "Content-Type", s.contentType );
+               }
+
+               // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+               if ( s.ifModified ) {
+                       ifModifiedKey = ifModifiedKey || s.url;
+                       if ( jQuery.lastModified[ ifModifiedKey ] ) {
+                               jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ ifModifiedKey ] );
+                       }
+                       if ( jQuery.etag[ ifModifiedKey ] ) {
+                               jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ ifModifiedKey ] );
+                       }
+               }
+
+               // Set the Accepts header for the server, depending on the dataType
+               jqXHR.setRequestHeader(
+                       "Accept",
+                       s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?
+                               s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
+                               s.accepts[ "*" ]
+               );
+
+               // Check for headers option
+               for ( i in s.headers ) {
+                       jqXHR.setRequestHeader( i, s.headers[ i ] );
+               }
+
+               // Allow custom headers/mimetypes and early abort
+               if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
+                               // Abort if not done already
+                               jqXHR.abort();
+                               return false;
+
+               }
+
+               // Install callbacks on deferreds
+               for ( i in { success: 1, error: 1, complete: 1 } ) {
+                       jqXHR[ i ]( s[ i ] );
+               }
+
+               // Get transport
+               transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
+
+               // If no transport, we auto-abort
+               if ( !transport ) {
+                       done( -1, "No Transport" );
+               } else {
+                       jqXHR.readyState = 1;
+                       // Send global event
+                       if ( fireGlobals ) {
+                               globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
+                       }
+                       // Timeout
+                       if ( s.async && s.timeout > 0 ) {
+                               timeoutTimer = setTimeout( function(){
+                                       jqXHR.abort( "timeout" );
+                               }, s.timeout );
+                       }
+
+                       try {
+                               state = 1;
+                               transport.send( requestHeaders, done );
+                       } catch (e) {
+                               // Propagate exception as error if not done
+                               if ( state < 2 ) {
+                                       done( -1, e );
+                               // Simply rethrow otherwise
+                               } else {
+                                       jQuery.error( e );
+                               }
+                       }
+               }
+
+               return jqXHR;
+       },
+
+       // Serialize an array of form elements or a set of
+       // key/values into a query string
+       param: function( a, traditional ) {
+               var s = [],
+                       add = function( key, value ) {
+                               // If value is a function, invoke it and return its value
+                               value = jQuery.isFunction( value ) ? value() : value;
+                               s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
+                       };
+
+               // Set traditional to true for jQuery <= 1.3.2 behavior.
+               if ( traditional === undefined ) {
+                       traditional = jQuery.ajaxSettings.traditional;
+               }
+
+               // If an array was passed in, assume that it is an array of form elements.
+               if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
+                       // Serialize the form elements
+                       jQuery.each( a, function() {
+                               add( this.name, this.value );
+                       });
+
+               } else {
+                       // If traditional, encode the "old" way (the way 1.3.2 or older
+                       // did it), otherwise encode params recursively.
+                       for ( var prefix in a ) {
+                               buildParams( prefix, a[ prefix ], traditional, add );
+                       }
+               }
+
+               // Return the resulting serialization
+               return s.join( "&" ).replace( r20, "+" );
+       }
+});
+
+function buildParams( prefix, obj, traditional, add ) {
+       if ( jQuery.isArray( obj ) ) {
+               // Serialize array item.
+               jQuery.each( obj, function( i, v ) {
+                       if ( traditional || rbracket.test( prefix ) ) {
+                               // Treat each array item as a scalar.
+                               add( prefix, v );
+
+                       } else {
+                               // If array item is non-scalar (array or object), encode its
+                               // numeric index to resolve deserialization ambiguity issues.
+                               // Note that rack (as of 1.0.0) can't currently deserialize
+                               // nested arrays properly, and attempting to do so may cause
+                               // a server error. Possible fixes are to modify rack's
+                               // deserialization algorithm or to provide an option or flag
+                               // to force array serialization to be shallow.
+                               buildParams( prefix + "[" + ( typeof v === "object" || jQuery.isArray(v) ? i : "" ) + "]", v, traditional, add );
+                       }
+               });
+
+       } else if ( !traditional && obj != null && typeof obj === "object" ) {
+               // Serialize object item.
+               for ( var name in obj ) {
+                       buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
+               }
+
+       } else {
+               // Serialize scalar item.
+               add( prefix, obj );
+       }
+}
+
+// This is still on the jQuery object... for now
+// Want to move this to jQuery.ajax some day
+jQuery.extend({
+
+       // Counter for holding the number of active queries
+       active: 0,
+
+       // Last-Modified header cache for next request
+       lastModified: {},
+       etag: {}
+
+});
+
+/* Handles responses to an ajax request:
+ * - sets all responseXXX fields accordingly
+ * - finds the right dataType (mediates between content-type and expected dataType)
+ * - returns the corresponding response
+ */
+function ajaxHandleResponses( s, jqXHR, responses ) {
+
+       var contents = s.contents,
+               dataTypes = s.dataTypes,
+               responseFields = s.responseFields,
+               ct,
+               type,
+               finalDataType,
+               firstDataType;
+
+       // Fill responseXXX fields
+       for( type in responseFields ) {
+               if ( type in responses ) {
+                       jqXHR[ responseFields[type] ] = responses[ type ];
+               }
+       }
+
+       // Remove auto dataType and get content-type in the process
+       while( dataTypes[ 0 ] === "*" ) {
+               dataTypes.shift();
+               if ( ct === undefined ) {
+                       ct = s.mimeType || jqXHR.getResponseHeader( "content-type" );
+               }
+       }
+
+       // Check if we're dealing with a known content-type
+       if ( ct ) {
+               for ( type in contents ) {
+                       if ( contents[ type ] && contents[ type ].test( ct ) ) {
+                               dataTypes.unshift( type );
+                               break;
+                       }
+               }
+       }
+
+       // Check to see if we have a response for the expected dataType
+       if ( dataTypes[ 0 ] in responses ) {
+               finalDataType = dataTypes[ 0 ];
+       } else {
+               // Try convertible dataTypes
+               for ( type in responses ) {
+                       if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) {
+                               finalDataType = type;
+                               break;
+                       }
+                       if ( !firstDataType ) {
+                               firstDataType = type;
+                       }
+               }
+               // Or just use first one
+               finalDataType = finalDataType || firstDataType;
+       }
+
+       // If we found a dataType
+       // We add the dataType to the list if needed
+       // and return the corresponding response
+       if ( finalDataType ) {
+               if ( finalDataType !== dataTypes[ 0 ] ) {
+                       dataTypes.unshift( finalDataType );
+               }
+               return responses[ finalDataType ];
+       }
+}
+
+// Chain conversions given the request and the original response
+function ajaxConvert( s, response ) {
+
+       // Apply the dataFilter if provided
+       if ( s.dataFilter ) {
+               response = s.dataFilter( response, s.dataType );
+       }
+
+       var dataTypes = s.dataTypes,
+               converters = {},
+               i,
+               key,
+               length = dataTypes.length,
+               tmp,
+               // Current and previous dataTypes
+               current = dataTypes[ 0 ],
+               prev,
+               // Conversion expression
+               conversion,
+               // Conversion function
+               conv,
+               // Conversion functions (transitive conversion)
+               conv1,
+               conv2;
+
+       // For each dataType in the chain
+       for( i = 1; i < length; i++ ) {
+
+               // Create converters map
+               // with lowercased keys
+               if ( i === 1 ) {
+                       for( key in s.converters ) {
+                               if( typeof key === "string" ) {
+                                       converters[ key.toLowerCase() ] = s.converters[ key ];
+                               }
+                       }
+               }
+
+               // Get the dataTypes
+               prev = current;
+               current = dataTypes[ i ];
+
+               // If current is auto dataType, update it to prev
+               if( current === "*" ) {
+                       current = prev;
+               // If no auto and dataTypes are actually different
+               } else if ( prev !== "*" && prev !== current ) {
+
+                       // Get the converter
+                       conversion = prev + " " + current;
+                       conv = converters[ conversion ] || converters[ "* " + current ];
+
+                       // If there is no direct converter, search transitively
+                       if ( !conv ) {
+                               conv2 = undefined;
+                               for( conv1 in converters ) {
+                                       tmp = conv1.split( " " );
+                                       if ( tmp[ 0 ] === prev || tmp[ 0 ] === "*" ) {
+                                               conv2 = converters[ tmp[1] + " " + current ];
+                                               if ( conv2 ) {
+                                                       conv1 = converters[ conv1 ];
+                                                       if ( conv1 === true ) {
+                                                               conv = conv2;
+                                                       } else if ( conv2 === true ) {
+                                                               conv = conv1;
+                                                       }
+                                                       break;
+                                               }
+                                       }
+                               }
+                       }
+                       // If we found no converter, dispatch an error
+                       if ( !( conv || conv2 ) ) {
+                               jQuery.error( "No conversion from " + conversion.replace(" "," to ") );
+                       }
+                       // If found converter is not an equivalence
+                       if ( conv !== true ) {
+                               // Convert with 1 or 2 converters accordingly
+                               response = conv ? conv( response ) : conv2( conv1(response) );
+                       }
+               }
+       }
+       return response;
+}
+
+
+
+
+var jsc = jQuery.now(),
+       jsre = /(\=)\?(&|$)|\?\?/i;
+
+// Default jsonp settings
+jQuery.ajaxSetup({
+       jsonp: "callback",
+       jsonpCallback: function() {
+               return jQuery.expando + "_" + ( jsc++ );
+       }
+});
+
+// Detect, normalize options and install callbacks for jsonp requests
+jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
+
+       var inspectData = s.contentType === "application/x-www-form-urlencoded" &&
+               ( typeof s.data === "string" );
+
+       if ( s.dataTypes[ 0 ] === "jsonp" ||
+               s.jsonp !== false && ( jsre.test( s.url ) ||
+                               inspectData && jsre.test( s.data ) ) ) {
+
+               var responseContainer,
+                       jsonpCallback = s.jsonpCallback =
+                               jQuery.isFunction( s.jsonpCallback ) ? s.jsonpCallback() : s.jsonpCallback,
+                       previous = window[ jsonpCallback ],
+                       url = s.url,
+                       data = s.data,
+                       replace = "$1" + jsonpCallback + "$2";
+
+               if ( s.jsonp !== false ) {
+                       url = url.replace( jsre, replace );
+                       if ( s.url === url ) {
+                               if ( inspectData ) {
+                                       data = data.replace( jsre, replace );
+                               }
+                               if ( s.data === data ) {
+                                       // Add callback manually
+                                       url += (/\?/.test( url ) ? "&" : "?") + s.jsonp + "=" + jsonpCallback;
+                               }
+                       }
+               }
+
+               s.url = url;
+               s.data = data;
+
+               // Install callback
+               window[ jsonpCallback ] = function( response ) {
+                       responseContainer = [ response ];
+               };
+
+               // Clean-up function
+               jqXHR.always(function() {
+                       // Set callback back to previous value
+                       window[ jsonpCallback ] = previous;
+                       // Call if it was a function and we have a response
+                       if ( responseContainer && jQuery.isFunction( previous ) ) {
+                               window[ jsonpCallback ]( responseContainer[ 0 ] );
+                       }
+               });
+
+               // Use data converter to retrieve json after script execution
+               s.converters["script json"] = function() {
+                       if ( !responseContainer ) {
+                               jQuery.error( jsonpCallback + " was not called" );
+                       }
+                       return responseContainer[ 0 ];
+               };
+
+               // force json dataType
+               s.dataTypes[ 0 ] = "json";
+
+               // Delegate to script
+               return "script";
+       }
+});
+
+
+
+
+// Install script dataType
+jQuery.ajaxSetup({
+       accepts: {
+               script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
+       },
+       contents: {
+               script: /javascript|ecmascript/
+       },
+       converters: {
+               "text script": function( text ) {
+                       jQuery.globalEval( text );
+                       return text;
+               }
+       }
+});
+
+// Handle cache's special case and global
+jQuery.ajaxPrefilter( "script", function( s ) {
+       if ( s.cache === undefined ) {
+               s.cache = false;
+       }
+       if ( s.crossDomain ) {
+               s.type = "GET";
+               s.global = false;
+       }
+});
+
+// Bind script tag hack transport
+jQuery.ajaxTransport( "script", function(s) {
+
+       // This transport only deals with cross domain requests
+       if ( s.crossDomain ) {
+
+               var script,
+                       head = document.head || document.getElementsByTagName( "head" )[0] || document.documentElement;
+
+               return {
+
+                       send: function( _, callback ) {
+
+                               script = document.createElement( "script" );
+
+                               script.async = "async";
+
+                               if ( s.scriptCharset ) {
+                                       script.charset = s.scriptCharset;
+                               }
+
+                               script.src = s.url;
+
+                               // Attach handlers for all browsers
+                               script.onload = script.onreadystatechange = function( _, isAbort ) {
+
+                                       if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {
+
+                                               // Handle memory leak in IE
+                                               script.onload = script.onreadystatechange = null;
+
+                                               // Remove the script
+                                               if ( head && script.parentNode ) {
+                                                       head.removeChild( script );
+                                               }
+
+                                               // Dereference the script
+                                               script = undefined;
+
+                                               // Callback if not abort
+                                               if ( !isAbort ) {
+                                                       callback( 200, "success" );
+                                               }
+                                       }
+                               };
+                               // Use insertBefore instead of appendChild  to circumvent an IE6 bug.
+                               // This arises when a base node is used (#2709 and #4378).
+                               head.insertBefore( script, head.firstChild );
+                       },
+
+                       abort: function() {
+                               if ( script ) {
+                                       script.onload( 0, 1 );
+                               }
+                       }
+               };
+       }
+});
+
+
+
+
+var // #5280: Internet Explorer will keep connections alive if we don't abort on unload
+       xhrOnUnloadAbort = window.ActiveXObject ? function() {
+               // Abort all pending requests
+               for ( var key in xhrCallbacks ) {
+                       xhrCallbacks[ key ]( 0, 1 );
+               }
+       } : false,
+       xhrId = 0,
+       xhrCallbacks;
+
+// Functions to create xhrs
+function createStandardXHR() {
+       try {
+               return new window.XMLHttpRequest();
+       } catch( e ) {}
+}
+
+function createActiveXHR() {
+       try {
+               return new window.ActiveXObject( "Microsoft.XMLHTTP" );
+       } catch( e ) {}
+}
+
+// Create the request object
+// (This is still attached to ajaxSettings for backward compatibility)
+jQuery.ajaxSettings.xhr = window.ActiveXObject ?
+       /* Microsoft failed to properly
+        * implement the XMLHttpRequest in IE7 (can't request local files),
+        * so we use the ActiveXObject when it is available
+        * Additionally XMLHttpRequest can be disabled in IE7/IE8 so
+        * we need a fallback.
+        */
+       function() {
+               return !this.isLocal && createStandardXHR() || createActiveXHR();
+       } :
+       // For all other browsers, use the standard XMLHttpRequest object
+       createStandardXHR;
+
+// Determine support properties
+(function( xhr ) {
+       jQuery.extend( jQuery.support, {
+               ajax: !!xhr,
+               cors: !!xhr && ( "withCredentials" in xhr )
+       });
+})( jQuery.ajaxSettings.xhr() );
+
+// Create transport if the browser can provide an xhr
+if ( jQuery.support.ajax ) {
+
+       jQuery.ajaxTransport(function( s ) {
+               // Cross domain only allowed if supported through XMLHttpRequest
+               if ( !s.crossDomain || jQuery.support.cors ) {
+
+                       var callback;
+
+                       return {
+                               send: function( headers, complete ) {
+
+                                       // Get a new xhr
+                                       var xhr = s.xhr(),
+                                               handle,
+                                               i;
+
+                                       // Open the socket
+                                       // Passing null username, generates a login popup on Opera (#2865)
+                                       if ( s.username ) {
+                                               xhr.open( s.type, s.url, s.async, s.username, s.password );
+                                       } else {
+                                               xhr.open( s.type, s.url, s.async );
+                                       }
+
+                                       // Apply custom fields if provided
+                                       if ( s.xhrFields ) {
+                                               for ( i in s.xhrFields ) {
+                                                       xhr[ i ] = s.xhrFields[ i ];
+                                               }
+                                       }
+
+                                       // Override mime type if needed
+                                       if ( s.mimeType && xhr.overrideMimeType ) {
+                                               xhr.overrideMimeType( s.mimeType );
+                                       }
+
+                                       // X-Requested-With header
+                                       // For cross-domain requests, seeing as conditions for a preflight are
+                                       // akin to a jigsaw puzzle, we simply never set it to be sure.
+                                       // (it can always be set on a per-request basis or even using ajaxSetup)
+                                       // For same-domain requests, won't change header if already provided.
+                                       if ( !s.crossDomain && !headers["X-Requested-With"] ) {
+                                               headers[ "X-Requested-With" ] = "XMLHttpRequest";
+                                       }
+
+                                       // Need an extra try/catch for cross domain requests in Firefox 3
+                                       try {
+                                               for ( i in headers ) {
+                                                       xhr.setRequestHeader( i, headers[ i ] );
+                                               }
+                                       } catch( _ ) {}
+
+                                       // Do send the request
+                                       // This may raise an exception which is actually
+                                       // handled in jQuery.ajax (so no try/catch here)
+                                       xhr.send( ( s.hasContent && s.data ) || null );
+
+                                       // Listener
+                                       callback = function( _, isAbort ) {
+
+                                               var status,
+                                                       statusText,
+                                                       responseHeaders,
+                                                       responses,
+                                                       xml;
+
+                                               // Firefox throws exceptions when accessing properties
+                                               // of an xhr when a network error occured
+                                               // http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE)
+                                               try {
+
+                                                       // Was never called and is aborted or complete
+                                                       if ( callback && ( isAbort || xhr.readyState === 4 ) ) {
+
+                                                               // Only called once
+                                                               callback = undefined;
+
+                                                               // Do not keep as active anymore
+                                                               if ( handle ) {
+                                                                       xhr.onreadystatechange = jQuery.noop;
+                                                                       if ( xhrOnUnloadAbort ) {
+                                                                               delete xhrCallbacks[ handle ];
+                                                                       }
+                                                               }
+
+                                                               // If it's an abort
+                                                               if ( isAbort ) {
+                                                                       // Abort it manually if needed
+                                                                       if ( xhr.readyState !== 4 ) {
+                                                                               xhr.abort();
+                                                                       }
+                                                               } else {
+                                                                       status = xhr.status;
+                                                                       responseHeaders = xhr.getAllResponseHeaders();
+                                                                       responses = {};
+                                                                       xml = xhr.responseXML;
+
+                                                                       // Construct response list
+                                                                       if ( xml && xml.documentElement /* #4958 */ ) {
+                                                                               responses.xml = xml;
+                                                                       }
+                                                                       responses.text = xhr.responseText;
+
+                                                                       // Firefox throws an exception when accessing
+                                                                       // statusText for faulty cross-domain requests
+                                                                       try {
+                                                                               statusText = xhr.statusText;
+                                                                       } catch( e ) {
+                                                                               // We normalize with Webkit giving an empty statusText
+                                                                               statusText = "";
+                                                                       }
+
+                                                                       // Filter status for non standard behaviors
+
+                                                                       // If the request is local and we have data: assume a success
+                                                                       // (success with no data won't get notified, that's the best we
+                                                                       // can do given current implementations)
+                                                                       if ( !status && s.isLocal && !s.crossDomain ) {
+                                                                               status = responses.text ? 200 : 404;
+                                                                       // IE - #1450: sometimes returns 1223 when it should be 204
+                                                                       } else if ( status === 1223 ) {
+                                                                               status = 204;
+                                                                       }
+                                                               }
+                                                       }
+                                               } catch( firefoxAccessException ) {
+                                                       if ( !isAbort ) {
+                                                               complete( -1, firefoxAccessException );
+                                                       }
+                                               }
+
+                                               // Call complete if needed
+                                               if ( responses ) {
+                                                       complete( status, statusText, responses, responseHeaders );
+                                               }
+                                       };
+
+                                       // if we're in sync mode or it's in cache
+                                       // and has been retrieved directly (IE6 & IE7)
+                                       // we need to manually fire the callback
+                                       if ( !s.async || xhr.readyState === 4 ) {
+                                               callback();
+                                       } else {
+                                               handle = ++xhrId;
+                                               if ( xhrOnUnloadAbort ) {
+                                                       // Create the active xhrs callbacks list if needed
+                                                       // and attach the unload handler
+                                                       if ( !xhrCallbacks ) {
+                                                               xhrCallbacks = {};
+                                                               jQuery( window ).unload( xhrOnUnloadAbort );
+                                                       }
+                                                       // Add to list of active xhrs callbacks
+                                                       xhrCallbacks[ handle ] = callback;
+                                               }
+                                               xhr.onreadystatechange = callback;
+                                       }
+                               },
+
+                               abort: function() {
+                                       if ( callback ) {
+                                               callback(0,1);
+                                       }
+                               }
+                       };
+               }
+       });
+}
+
+
+
+
+var elemdisplay = {},
+       iframe, iframeDoc,
+       rfxtypes = /^(?:toggle|show|hide)$/,
+       rfxnum = /^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,
+       timerId,
+       fxAttrs = [
+               // height animations
+               [ "height", "marginTop", "marginBottom", "paddingTop", "paddingBottom" ],
+               // width animations
+               [ "width", "marginLeft", "marginRight", "paddingLeft", "paddingRight" ],
+               // opacity animations
+               [ "opacity" ]
+       ],
+       fxNow;
+
+jQuery.fn.extend({
+       show: function( speed, easing, callback ) {
+               var elem, display;
+
+               if ( speed || speed === 0 ) {
+                       return this.animate( genFx("show", 3), speed, easing, callback);
+
+               } else {
+                       for ( var i = 0, j = this.length; i < j; i++ ) {
+                               elem = this[i];
+
+                               if ( elem.style ) {
+                                       display = elem.style.display;
+
+                                       // Reset the inline display of this element to learn if it is
+                                       // being hidden by cascaded rules or not
+                                       if ( !jQuery._data(elem, "olddisplay") && display === "none" ) {
+                                               display = elem.style.display = "";
+                                       }
+
+                                       // Set elements which have been overridden with display: none
+                                       // in a stylesheet to whatever the default browser style is
+                                       // for such an element
+                                       if ( display === "none" || ( display === ""  && jQuery.css( elem, "display" ) === "none" ) ) {
+                                               jQuery._data(elem, "olddisplay", defaultDisplay(elem.nodeName));
+                                       }
+                               }
+                       }
+
+                       // Set the display of most of the elements in a second loop
+                       // to avoid the constant reflow
+                       for ( i = 0; i < j; i++ ) {
+                               elem = this[i];
+
+                               if ( elem.style ) {
+                                       display = elem.style.display;
+
+                                       if ( display === "" || display === "none" ) {
+                                               elem.style.display = jQuery._data(elem, "olddisplay") || "";
+                                       }
+                               }
+                       }
+
+                       return this;
+               }
+       },
+
+       hide: function( speed, easing, callback ) {
+               if ( speed || speed === 0 ) {
+                       return this.animate( genFx("hide", 3), speed, easing, callback);
+
+               } else {
+                       for ( var i = 0, j = this.length; i < j; i++ ) {
+                               if ( this[i].style ) {
+                                       var display = jQuery.css( this[i], "display" );
+
+                                       if ( display !== "none" && !jQuery._data( this[i], "olddisplay" ) ) {
+                                               jQuery._data( this[i], "olddisplay", display );
+                                       }
+                               }
+                       }
+
+                       // Set the display of the elements in a second loop
+                       // to avoid the constant reflow
+                       for ( i = 0; i < j; i++ ) {
+                               if ( this[i].style ) {
+                                       this[i].style.display = "none";
+                               }
+                       }
+
+                       return this;
+               }
+       },
+
+       // Save the old toggle function
+       _toggle: jQuery.fn.toggle,
+
+       toggle: function( fn, fn2, callback ) {
+               var bool = typeof fn === "boolean";
+
+               if ( jQuery.isFunction(fn) && jQuery.isFunction(fn2) ) {
+                       this._toggle.apply( this, arguments );
+
+               } else if ( fn == null || bool ) {
+                       this.each(function() {
+                               var state = bool ? fn : jQuery(this).is(":hidden");
+                               jQuery(this)[ state ? "show" : "hide" ]();
+                       });
+
+               } else {
+                       this.animate(genFx("toggle", 3), fn, fn2, callback);
+               }
+
+               return this;
+       },
+
+       fadeTo: function( speed, to, easing, callback ) {
+               return this.filter(":hidden").css("opacity", 0).show().end()
+                                       .animate({opacity: to}, speed, easing, callback);
+       },
+
+       animate: function( prop, speed, easing, callback ) {
+               var optall = jQuery.speed( speed, easing, callback );
+
+               if ( jQuery.isEmptyObject( prop ) ) {
+                       return this.each( optall.complete, [ false ] );
+               }
+
+               // Do not change referenced properties as per-property easing will be lost
+               prop = jQuery.extend( {}, prop );
+
+               function doAnimation() {
+                       // XXX 'this' does not always have a nodeName when running the
+                       // test suite
+
+                       if ( optall.queue === false ) {
+                               jQuery._mark( this );
+                       }
+
+                       var opt = jQuery.extend( {}, optall ),
+                               isElement = this.nodeType === 1,
+                               hidden = isElement && jQuery(this).is(":hidden"),
+                               name, val, p, e,
+                               parts, start, end, unit,
+                               method;
+
+                       // will store per property easing and be used to determine when an animation is complete
+                       opt.animatedProperties = {};
+
+                       for ( p in prop ) {
+
+                               // property name normalization
+                               name = jQuery.camelCase( p );
+                               if ( p !== name ) {
+                                       prop[ name ] = prop[ p ];
+                                       delete prop[ p ];
+                               }
+
+                               val = prop[ name ];
+
+                               // easing resolution: per property > opt.specialEasing > opt.easing > 'swing' (default)
+                               if ( jQuery.isArray( val ) ) {
+                                       opt.animatedProperties[ name ] = val[ 1 ];
+                                       val = prop[ name ] = val[ 0 ];
+                               } else {
+                                       opt.animatedProperties[ name ] = opt.specialEasing && opt.specialEasing[ name ] || opt.easing || 'swing';
+                               }
+
+                               if ( val === "hide" && hidden || val === "show" && !hidden ) {
+                                       return opt.complete.call( this );
+                               }
+
+                               if ( isElement && ( name === "height" || name === "width" ) ) {
+                                       // Make sure that nothing sneaks out
+                                       // Record all 3 overflow attributes because IE does not
+                                       // change the overflow attribute when overflowX and
+                                       // overflowY are set to the same value
+                                       opt.overflow = [ this.style.overflow, this.style.overflowX, this.style.overflowY ];
+
+                                       // Set display property to inline-block for height/width
+                                       // animations on inline elements that are having width/height animated
+                                       if ( jQuery.css( this, "display" ) === "inline" &&
+                                                       jQuery.css( this, "float" ) === "none" ) {
+
+                                               // inline-level elements accept inline-block;
+                                               // block-level elements need to be inline with layout
+                                               if ( !jQuery.support.inlineBlockNeedsLayout || defaultDisplay( this.nodeName ) === "inline" ) {
+                                                       this.style.display = "inline-block";
+
+                                               } else {
+                                                       this.style.zoom = 1;
+                                               }
+                                       }
+                               }
+                       }
+
+                       if ( opt.overflow != null ) {
+                               this.style.overflow = "hidden";
+                       }
+
+                       for ( p in prop ) {
+                               e = new jQuery.fx( this, opt, p );
+                               val = prop[ p ];
+
+                               if ( rfxtypes.test( val ) ) {
+
+                                       // Tracks whether to show or hide based on private
+                                       // data attached to the element
+                                       method = jQuery._data( this, "toggle" + p ) || (val === "toggle" ? hidden ? "show" : "hide" : 0);
+                                       if ( method ) {
+                                               jQuery._data( this, "toggle" + p, method === "show" ? "hide" : "show" );
+                                               e[ method ]();
+                                       } else {
+                                               e[ val ]();
+                                       }
+
+                               } else {
+                                       parts = rfxnum.exec( val );
+                                       start = e.cur();
+
+                                       if ( parts ) {
+                                               end = parseFloat( parts[2] );
+                                               unit = parts[3] || ( jQuery.cssNumber[ p ] ? "" : "px" );
+
+                                               // We need to compute starting value
+                                               if ( unit !== "px" ) {
+                                                       jQuery.style( this, p, (end || 1) + unit);
+                                                       start = ((end || 1) / e.cur()) * start;
+                                                       jQuery.style( this, p, start + unit);
+                                               }
+
+                                               // If a +=/-= token was provided, we're doing a relative animation
+                                               if ( parts[1] ) {
+                                                       end = ( (parts[ 1 ] === "-=" ? -1 : 1) * end ) + start;
+                                               }
+
+                                               e.custom( start, end, unit );
+
+                                       } else {
+                                               e.custom( start, val, "" );
+                                       }
+                               }
+                       }
+
+                       // For JS strict compliance
+                       return true;
+               }
+
+               return optall.queue === false ?
+                       this.each( doAnimation ) :
+                       this.queue( optall.queue, doAnimation );
+       },
+
+       stop: function( type, clearQueue, gotoEnd ) {
+               if ( typeof type !== "string" ) {
+                       gotoEnd = clearQueue;
+                       clearQueue = type;
+                       type = undefined;
+               }
+               if ( clearQueue && type !== false ) {
+                       this.queue( type || "fx", [] );
+               }
+
+               return this.each(function() {
+                       var i,
+                               hadTimers = false,
+                               timers = jQuery.timers,
+                               data = jQuery._data( this );
+
+                       // clear marker counters if we know they won't be
+                       if ( !gotoEnd ) {
+                               jQuery._unmark( true, this );
+                       }
+
+                       function stopQueue( elem, data, i ) {
+                               var runner = data[ i ];
+                               jQuery.removeData( elem, i, true );
+                               runner.stop( gotoEnd );
+                       }
+
+                       if ( type == null ) {
+                               for ( i in data ) {
+                                       if ( data[ i ].stop && i.indexOf(".run") === i.length - 4 ) {
+                                               stopQueue( this, data, i );
+                                       }
+                               }
+                       } else if ( data[ i = type + ".run" ] && data[ i ].stop ){
+                               stopQueue( this, data, i );
+                       }
+
+                       for ( i = timers.length; i--; ) {
+                               if ( timers[ i ].elem === this && (type == null || timers[ i ].queue === type) ) {
+                                       if ( gotoEnd ) {
+
+                                               // force the next step to be the last
+                                               timers[ i ]( true );
+                                       } else {
+                                               timers[ i ].saveState();
+                                       }
+                                       hadTimers = true;
+                                       timers.splice( i, 1 );
+                               }
+                       }
+
+                       // start the next in the queue if the last step wasn't forced
+                       // timers currently will call their complete callbacks, which will dequeue
+                       // but only if they were gotoEnd
+                       if ( !( gotoEnd && hadTimers ) ) {
+                               jQuery.dequeue( this, type );
+                       }
+               });
+       }
+
+});
+
+// Animations created synchronously will run synchronously
+function createFxNow() {
+       setTimeout( clearFxNow, 0 );
+       return ( fxNow = jQuery.now() );
+}
+
+function clearFxNow() {
+       fxNow = undefined;
+}
+
+// Generate parameters to create a standard animation
+function genFx( type, num ) {
+       var obj = {};
+
+       jQuery.each( fxAttrs.concat.apply([], fxAttrs.slice( 0, num )), function() {
+               obj[ this ] = type;
+       });
+
+       return obj;
+}
+
+// Generate shortcuts for custom animations
+jQuery.each({
+       slideDown: genFx( "show", 1 ),
+       slideUp: genFx( "hide", 1 ),
+       slideToggle: genFx( "toggle", 1 ),
+       fadeIn: { opacity: "show" },
+       fadeOut: { opacity: "hide" },
+       fadeToggle: { opacity: "toggle" }
+}, function( name, props ) {
+       jQuery.fn[ name ] = function( speed, easing, callback ) {
+               return this.animate( props, speed, easing, callback );
+       };
+});
+
+jQuery.extend({
+       speed: function( speed, easing, fn ) {
+               var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
+                       complete: fn || !fn && easing ||
+                               jQuery.isFunction( speed ) && speed,
+                       duration: speed,
+                       easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
+               };
+
+               opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
+                       opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;
+
+               // normalize opt.queue - true/undefined/null -> "fx"
+               if ( opt.queue == null || opt.queue === true ) {
+                       opt.queue = "fx";
+               }
+
+               // Queueing
+               opt.old = opt.complete;
+
+               opt.complete = function( noUnmark ) {
+                       if ( jQuery.isFunction( opt.old ) ) {
+                               opt.old.call( this );
+                       }
+
+                       if ( opt.queue ) {
+                               jQuery.dequeue( this, opt.queue );
+                       } else if ( noUnmark !== false ) {
+                               jQuery._unmark( this );
+                       }
+               };
+
+               return opt;
+       },
+
+       easing: {
+               linear: function( p, n, firstNum, diff ) {
+                       return firstNum + diff * p;
+               },
+               swing: function( p, n, firstNum, diff ) {
+                       return ((-Math.cos(p*Math.PI)/2) + 0.5) * diff + firstNum;
+               }
+       },
+
+       timers: [],
+
+       fx: function( elem, options, prop ) {
+               this.options = options;
+               this.elem = elem;
+               this.prop = prop;
+
+               options.orig = options.orig || {};
+       }
+
+});
+
+jQuery.fx.prototype = {
+       // Simple function for setting a style value
+       update: function() {
+               if ( this.options.step ) {
+                       this.options.step.call( this.elem, this.now, this );
+               }
+
+               (jQuery.fx.step[ this.prop ] || jQuery.fx.step._default)( this );
+       },
+
+       // Get the current size
+       cur: function() {
+               if ( this.elem[ this.prop ] != null && (!this.elem.style || this.elem.style[ this.prop ] == null) ) {
+                       return this.elem[ this.prop ];
+               }
+
+               var parsed,
+                       r = jQuery.css( this.elem, this.prop );
+               // Empty strings, null, undefined and "auto" are converted to 0,
+               // complex values such as "rotate(1rad)" are returned as is,
+               // simple values such as "10px" are parsed to Float.
+               return isNaN( parsed = parseFloat( r ) ) ? !r || r === "auto" ? 0 : r : parsed;
+       },
+
+       // Start an animation from one number to another
+       custom: function( from, to, unit ) {
+               var self = this,
+                       fx = jQuery.fx;
+
+               this.startTime = fxNow || createFxNow();
+               this.end = to;
+               this.now = this.start = from;
+               this.pos = this.state = 0;
+               this.unit = unit || this.unit || ( jQuery.cssNumber[ this.prop ] ? "" : "px" );
+
+               function t( gotoEnd ) {
+                       return self.step( gotoEnd );
+               }
+
+               t.queue = this.options.queue;
+               t.elem = this.elem;
+               t.saveState = function() {
+                       if ( self.options.hide && jQuery._data( self.elem, "fxshow" + self.prop ) === undefined ) {
+                               jQuery._data( self.elem, "fxshow" + self.prop, self.start );
+                       }
+               };
+
+               if ( t() && jQuery.timers.push(t) && !timerId ) {
+                       timerId = setInterval( fx.tick, fx.interval );
+               }
+       },
+
+       // Simple 'show' function
+       show: function() {
+               var dataShow = jQuery._data( this.elem, "fxshow" + this.prop );
+
+               // Remember where we started, so that we can go back to it later
+               this.options.orig[ this.prop ] = dataShow || jQuery.style( this.elem, this.prop );
+               this.options.show = true;
+
+               // Begin the animation
+               // Make sure that we start at a small width/height to avoid any flash of content
+               if ( dataShow !== undefined ) {
+                       // This show is picking up where a previous hide or show left off
+                       this.custom( this.cur(), dataShow );
+               } else {
+                       this.custom( this.prop === "width" || this.prop === "height" ? 1 : 0, this.cur() );
+               }
+
+               // Start by showing the element
+               jQuery( this.elem ).show();
+       },
+
+       // Simple 'hide' function
+       hide: function() {
+               // Remember where we started, so that we can go back to it later
+               this.options.orig[ this.prop ] = jQuery._data( this.elem, "fxshow" + this.prop ) || jQuery.style( this.elem, this.prop );
+               this.options.hide = true;
+
+               // Begin the animation
+               this.custom( this.cur(), 0 );
+       },
+
+       // Each step of an animation
+       step: function( gotoEnd ) {
+               var p, n, complete,
+                       t = fxNow || createFxNow(),
+                       done = true,
+                       elem = this.elem,
+                       options = this.options;
+
+               if ( gotoEnd || t >= options.duration + this.startTime ) {
+                       this.now = this.end;
+                       this.pos = this.state = 1;
+                       this.update();
+
+                       options.animatedProperties[ this.prop ] = true;
+
+                       for ( p in options.animatedProperties ) {
+                               if ( options.animatedProperties[ p ] !== true ) {
+                                       done = false;
+                               }
+                       }
+
+                       if ( done ) {
+                               // Reset the overflow
+                               if ( options.overflow != null && !jQuery.support.shrinkWrapBlocks ) {
+
+                                       jQuery.each( [ "", "X", "Y" ], function( index, value ) {
+                                               elem.style[ "overflow" + value ] = options.overflow[ index ];
+                                       });
+                               }
+
+                               // Hide the element if the "hide" operation was done
+                               if ( options.hide ) {
+                                       jQuery( elem ).hide();
+                               }
+
+                               // Reset the properties, if the item has been hidden or shown
+                               if ( options.hide || options.show ) {
+                                       for ( p in options.animatedProperties ) {
+                                               jQuery.style( elem, p, options.orig[ p ] );
+                                               jQuery.removeData( elem, "fxshow" + p, true );
+                                               // Toggle data is no longer needed
+                                               jQuery.removeData( elem, "toggle" + p, true );
+                                       }
+                               }
+
+                               // Execute the complete function
+                               // in the event that the complete function throws an exception
+                               // we must ensure it won't be called twice. #5684
+
+                               complete = options.complete;
+                               if ( complete ) {
+
+                                       options.complete = false;
+                                       complete.call( elem );
+                               }
+                       }
+
+                       return false;
+
+               } else {
+                       // classical easing cannot be used with an Infinity duration
+                       if ( options.duration == Infinity ) {
+                               this.now = t;
+                       } else {
+                               n = t - this.startTime;
+                               this.state = n / options.duration;
+
+                               // Perform the easing function, defaults to swing
+                               this.pos = jQuery.easing[ options.animatedProperties[this.prop] ]( this.state, n, 0, 1, options.duration );
+                               this.now = this.start + ( (this.end - this.start) * this.pos );
+                       }
+                       // Perform the next step of the animation
+                       this.update();
+               }
+
+               return true;
+       }
+};
+
+jQuery.extend( jQuery.fx, {
+       tick: function() {
+               var timer,
+                       timers = jQuery.timers,
+                       i = 0;
+
+               for ( ; i < timers.length; i++ ) {
+                       timer = timers[ i ];
+                       // Checks the timer has not already been removed
+                       if ( !timer() && timers[ i ] === timer ) {
+                               timers.splice( i--, 1 );
+                       }
+               }
+
+               if ( !timers.length ) {
+                       jQuery.fx.stop();
+               }
+       },
+
+       interval: 13,
+
+       stop: function() {
+               clearInterval( timerId );
+               timerId = null;
+       },
+
+       speeds: {
+               slow: 600,
+               fast: 200,
+               // Default speed
+               _default: 400
+       },
+
+       step: {
+               opacity: function( fx ) {
+                       jQuery.style( fx.elem, "opacity", fx.now );
+               },
+
+               _default: function( fx ) {
+                       if ( fx.elem.style && fx.elem.style[ fx.prop ] != null ) {
+                               fx.elem.style[ fx.prop ] = fx.now + fx.unit;
+                       } else {
+                               fx.elem[ fx.prop ] = fx.now;
+                       }
+               }
+       }
+});
+
+// Adds width/height step functions
+// Do not set anything below 0
+jQuery.each([ "width", "height" ], function( i, prop ) {
+       jQuery.fx.step[ prop ] = function( fx ) {
+               jQuery.style( fx.elem, prop, Math.max(0, fx.now) );
+       };
+});
+
+if ( jQuery.expr && jQuery.expr.filters ) {
+       jQuery.expr.filters.animated = function( elem ) {
+               return jQuery.grep(jQuery.timers, function( fn ) {
+                       return elem === fn.elem;
+               }).length;
+       };
+}
+
+// Try to restore the default display value of an element
+function defaultDisplay( nodeName ) {
+
+       if ( !elemdisplay[ nodeName ] ) {
+
+               var body = document.body,
+                       elem = jQuery( "<" + nodeName + ">" ).appendTo( body ),
+                       display = elem.css( "display" );
+
+               elem.remove();
+
+               // If the simple way fails,
+               // get element's real default display by attaching it to a temp iframe
+               if ( display === "none" || display === "" ) {
+                       // No iframe to use yet, so create it
+                       if ( !iframe ) {
+                               iframe = document.createElement( "iframe" );
+                               iframe.frameBorder = iframe.width = iframe.height = 0;
+                       }
+
+                       body.appendChild( iframe );
+
+                       // Create a cacheable copy of the iframe document on first call.
+                       // IE and Opera will allow us to reuse the iframeDoc without re-writing the fake HTML
+                       // document to it; WebKit & Firefox won't allow reusing the iframe document.
+                       if ( !iframeDoc || !iframe.createElement ) {
+                               iframeDoc = ( iframe.contentWindow || iframe.contentDocument ).document;
+                               iframeDoc.write( ( document.compatMode === "CSS1Compat" ? "<!doctype html>" : "" ) + "<html><body>" );
+                               iframeDoc.close();
+                       }
+
+                       elem = iframeDoc.createElement( nodeName );
+
+                       iframeDoc.body.appendChild( elem );
+
+                       display = jQuery.css( elem, "display" );
+
+                       body.removeChild( iframe );
+               }
+
+               // Store the correct default display
+               elemdisplay[ nodeName ] = display;
+       }
+
+       return elemdisplay[ nodeName ];
+}
+
+
+
+
+var rtable = /^t(?:able|d|h)$/i,
+       rroot = /^(?:body|html)$/i;
+
+if ( "getBoundingClientRect" in document.documentElement ) {
+       jQuery.fn.offset = function( options ) {
+               var elem = this[0], box;
+
+               if ( options ) {
+                       return this.each(function( i ) {
+                               jQuery.offset.setOffset( this, options, i );
+                       });
+               }
+
+               if ( !elem || !elem.ownerDocument ) {
+                       return null;
+               }
+
+               if ( elem === elem.ownerDocument.body ) {
+                       return jQuery.offset.bodyOffset( elem );
+               }
+
+               try {
+                       box = elem.getBoundingClientRect();
+               } catch(e) {}
+
+               var doc = elem.ownerDocument,
+                       docElem = doc.documentElement;
+
+               // Make sure we're not dealing with a disconnected DOM node
+               if ( !box || !jQuery.contains( docElem, elem ) ) {
+                       return box ? { top: box.top, left: box.left } : { top: 0, left: 0 };
+               }
+
+               var body = doc.body,
+                       win = getWindow(doc),
+                       clientTop  = docElem.clientTop  || body.clientTop  || 0,
+                       clientLeft = docElem.clientLeft || body.clientLeft || 0,
+                       scrollTop  = win.pageYOffset || jQuery.support.boxModel && docElem.scrollTop  || body.scrollTop,
+                       scrollLeft = win.pageXOffset || jQuery.support.boxModel && docElem.scrollLeft || body.scrollLeft,
+                       top  = box.top  + scrollTop  - clientTop,
+                       left = box.left + scrollLeft - clientLeft;
+
+               return { top: top, left: left };
+       };
+
+} else {
+       jQuery.fn.offset = function( options ) {
+               var elem = this[0];
+
+               if ( options ) {
+                       return this.each(function( i ) {
+                               jQuery.offset.setOffset( this, options, i );
+                       });
+               }
+
+               if ( !elem || !elem.ownerDocument ) {
+                       return null;
+               }
+
+               if ( elem === elem.ownerDocument.body ) {
+                       return jQuery.offset.bodyOffset( elem );
+               }
+
+               var computedStyle,
+                       offsetParent = elem.offsetParent,
+                       prevOffsetParent = elem,
+                       doc = elem.ownerDocument,
+                       docElem = doc.documentElement,
+                       body = doc.body,
+                       defaultView = doc.defaultView,
+                       prevComputedStyle = defaultView ? defaultView.getComputedStyle( elem, null ) : elem.currentStyle,
+                       top = elem.offsetTop,
+                       left = elem.offsetLeft;
+
+               while ( (elem = elem.parentNode) && elem !== body && elem !== docElem ) {
+                       if ( jQuery.offset.supportsFixedPosition && prevComputedStyle.position === "fixed" ) {
+                               break;
+                       }
+
+                       computedStyle = defaultView ? defaultView.getComputedStyle(elem, null) : elem.currentStyle;
+                       top  -= elem.scrollTop;
+                       left -= elem.scrollLeft;
+
+                       if ( elem === offsetParent ) {
+                               top  += elem.offsetTop;
+                               left += elem.offsetLeft;
+
+                               if ( jQuery.offset.doesNotAddBorder && !(jQuery.offset.doesAddBorderForTableAndCells && rtable.test(elem.nodeName)) ) {
+                                       top  += parseFloat( computedStyle.borderTopWidth  ) || 0;
+                                       left += parseFloat( computedStyle.borderLeftWidth ) || 0;
+                               }
+
+                               prevOffsetParent = offsetParent;
+                               offsetParent = elem.offsetParent;
+                       }
+
+                       if ( jQuery.offset.subtractsBorderForOverflowNotVisible && computedStyle.overflow !== "visible" ) {
+                               top  += parseFloat( computedStyle.borderTopWidth  ) || 0;
+                               left += parseFloat( computedStyle.borderLeftWidth ) || 0;
+                       }
+
+                       prevComputedStyle = computedStyle;
+               }
+
+               if ( prevComputedStyle.position === "relative" || prevComputedStyle.position === "static" ) {
+                       top  += body.offsetTop;
+                       left += body.offsetLeft;
+               }
+
+               if ( jQuery.offset.supportsFixedPosition && prevComputedStyle.position === "fixed" ) {
+                       top  += Math.max( docElem.scrollTop, body.scrollTop );
+                       left += Math.max( docElem.scrollLeft, body.scrollLeft );
+               }
+
+               return { top: top, left: left };
+       };
+}
+
+jQuery.offset = {};
+
+jQuery.each(
+       ( "doesAddBorderForTableAndCells doesNotAddBorder " +
+               "doesNotIncludeMarginInBodyOffset subtractsBorderForOverflowNotVisible " +
+               "supportsFixedPosition" ).split(" "), function( i, prop ) {
+
+       jQuery.offset[ prop ] = jQuery.support[ prop ];
+});
+
+jQuery.extend( jQuery.offset, {
+
+       bodyOffset: function( body ) {
+               var top = body.offsetTop,
+                       left = body.offsetLeft;
+
+               if ( jQuery.offset.doesNotIncludeMarginInBodyOffset ) {
+                       top  += parseFloat( jQuery.css(body, "marginTop") ) || 0;
+                       left += parseFloat( jQuery.css(body, "marginLeft") ) || 0;
+               }
+
+               return { top: top, left: left };
+       },
+
+       setOffset: function( elem, options, i ) {
+               var position = jQuery.css( elem, "position" );
+
+               // set position first, in-case top/left are set even on static elem
+               if ( position === "static" ) {
+                       elem.style.position = "relative";
+               }
+
+               var curElem = jQuery( elem ),
+                       curOffset = curElem.offset(),
+                       curCSSTop = jQuery.css( elem, "top" ),
+                       curCSSLeft = jQuery.css( elem, "left" ),
+                       calculatePosition = (position === "absolute" || position === "fixed") && jQuery.inArray("auto", [curCSSTop, curCSSLeft]) > -1,
+                       props = {}, curPosition = {}, curTop, curLeft;
+
+               // need to be able to calculate position if either top or left is auto and position is either absolute or fixed
+               if ( calculatePosition ) {
+                       curPosition = curElem.position();
+                       curTop = curPosition.top;
+                       curLeft = curPosition.left;
+               } else {
+                       curTop = parseFloat( curCSSTop ) || 0;
+                       curLeft = parseFloat( curCSSLeft ) || 0;
+               }
+
+               if ( jQuery.isFunction( options ) ) {
+                       options = options.call( elem, i, curOffset );
+               }
+
+               if (options.top != null) {
+                       props.top = (options.top - curOffset.top) + curTop;
+               }
+               if (options.left != null) {
+                       props.left = (options.left - curOffset.left) + curLeft;
+               }
+
+               if ( "using" in options ) {
+                       options.using.call( elem, props );
+               } else {
+                       curElem.css( props );
+               }
+       }
+});
+
+
+jQuery.fn.extend({
+
+       position: function() {
+               if ( !this[0] ) {
+                       return null;
+               }
+
+               var elem = this[0],
+
+               // Get *real* offsetParent
+               offsetParent = this.offsetParent(),
+
+               // Get correct offsets
+               offset       = this.offset(),
+               parentOffset = rroot.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset();
+
+               // Subtract element margins
+               // note: when an element has margin: auto the offsetLeft and marginLeft
+               // are the same in Safari causing offset.left to incorrectly be 0
+               offset.top  -= parseFloat( jQuery.css(elem, "marginTop") ) || 0;
+               offset.left -= parseFloat( jQuery.css(elem, "marginLeft") ) || 0;
+
+               // Add offsetParent borders
+               parentOffset.top  += parseFloat( jQuery.css(offsetParent[0], "borderTopWidth") ) || 0;
+               parentOffset.left += parseFloat( jQuery.css(offsetParent[0], "borderLeftWidth") ) || 0;
+
+               // Subtract the two offsets
+               return {
+                       top:  offset.top  - parentOffset.top,
+                       left: offset.left - parentOffset.left
+               };
+       },
+
+       offsetParent: function() {
+               return this.map(function() {
+                       var offsetParent = this.offsetParent || document.body;
+                       while ( offsetParent && (!rroot.test(offsetParent.nodeName) && jQuery.css(offsetParent, "position") === "static") ) {
+                               offsetParent = offsetParent.offsetParent;
+                       }
+                       return offsetParent;
+               });
+       }
+});
+
+
+// Create scrollLeft and scrollTop methods
+jQuery.each( ["Left", "Top"], function( i, name ) {
+       var method = "scroll" + name;
+
+       jQuery.fn[ method ] = function( val ) {
+               var elem, win;
+
+               if ( val === undefined ) {
+                       elem = this[ 0 ];
+
+                       if ( !elem ) {
+                               return null;
+                       }
+
+                       win = getWindow( elem );
+
+                       // Return the scroll offset
+                       return win ? ("pageXOffset" in win) ? win[ i ? "pageYOffset" : "pageXOffset" ] :
+                               jQuery.support.boxModel && win.document.documentElement[ method ] ||
+                                       win.document.body[ method ] :
+                               elem[ method ];
+               }
+
+               // Set the scroll offset
+               return this.each(function() {
+                       win = getWindow( this );
+
+                       if ( win ) {
+                               win.scrollTo(
+                                       !i ? val : jQuery( win ).scrollLeft(),
+                                        i ? val : jQuery( win ).scrollTop()
+                               );
+
+                       } else {
+                               this[ method ] = val;
+                       }
+               });
+       };
+});
+
+function getWindow( elem ) {
+       return jQuery.isWindow( elem ) ?
+               elem :
+               elem.nodeType === 9 ?
+                       elem.defaultView || elem.parentWindow :
+                       false;
+}
+
+
+
+
+// Create width, height, innerHeight, innerWidth, outerHeight and outerWidth methods
+jQuery.each([ "Height", "Width" ], function( i, name ) {
+
+       var type = name.toLowerCase();
+
+       // innerHeight and innerWidth
+       jQuery.fn[ "inner" + name ] = function() {
+               var elem = this[0];
+               return elem ?
+                       elem.style ?
+                       parseFloat( jQuery.css( elem, type, "padding" ) ) :
+                       this[ type ]() :
+                       null;
+       };
+
+       // outerHeight and outerWidth
+       jQuery.fn[ "outer" + name ] = function( margin ) {
+               var elem = this[0];
+               return elem ?
+                       elem.style ?
+                       parseFloat( jQuery.css( elem, type, margin ? "margin" : "border" ) ) :
+                       this[ type ]() :
+                       null;
+       };
+
+       jQuery.fn[ type ] = function( size ) {
+               // Get window width or height
+               var elem = this[0];
+               if ( !elem ) {
+                       return size == null ? null : this;
+               }
+
+               if ( jQuery.isFunction( size ) ) {
+                       return this.each(function( i ) {
+                               var self = jQuery( this );
+                               self[ type ]( size.call( this, i, self[ type ]() ) );
+                       });
+               }
+
+               if ( jQuery.isWindow( elem ) ) {
+                       // Everyone else use document.documentElement or document.body depending on Quirks vs Standards mode
+                       // 3rd condition allows Nokia support, as it supports the docElem prop but not CSS1Compat
+                       var docElemProp = elem.document.documentElement[ "client" + name ],
+                               body = elem.document.body;
+                       return elem.document.compatMode === "CSS1Compat" && docElemProp ||
+                               body && body[ "client" + name ] || docElemProp;
+
+               // Get document width or height
+               } else if ( elem.nodeType === 9 ) {
+                       // Either scroll[Width/Height] or offset[Width/Height], whichever is greater
+                       return Math.max(
+                               elem.documentElement["client" + name],
+                               elem.body["scroll" + name], elem.documentElement["scroll" + name],
+                               elem.body["offset" + name], elem.documentElement["offset" + name]
+                       );
+
+               // Get or set width or height on the element
+               } else if ( size === undefined ) {
+                       var orig = jQuery.css( elem, type ),
+                               ret = parseFloat( orig );
+
+                       return jQuery.isNumeric( ret ) ? ret : orig;
+
+               // Set the width or height on the element (default to pixels if value is unitless)
+               } else {
+                       return this.css( type, typeof size === "string" ? size : size + "px" );
+               }
+       };
+
+});
+
+
+// Expose jQuery to the global object
+window.jQuery = window.$ = jQuery;
+})(window);
diff --git a/js/modernizr/test/js/lib/jsonselect.js b/js/modernizr/test/js/lib/jsonselect.js
new file mode 100644 (file)
index 0000000..84913d0
--- /dev/null
@@ -0,0 +1,279 @@
+/*! Copyright (c) 2011, Lloyd Hilaiel, ISC License */
+/*
+ * This is the JSONSelect reference implementation, in javascript.
+ */
+(function(exports) {
+
+    var // localize references
+    toString = Object.prototype.toString;
+
+    function jsonParse(str) {
+      try {
+          if(JSON && JSON.parse){
+              return JSON.parse(str);
+          }
+          return (new Function("return " + str))();
+      } catch(e) {
+        te("ijs");
+      }
+    }
+
+    // emitted error codes.
+    var errorCodes = {
+        "ijs": "invalid json string",
+        "mpc": "multiple pseudo classes (:xxx) not allowed",
+        "mepf": "malformed expression in pseudo-function",
+        "nmi": "multiple ids not allowed",
+        "se": "selector expected",
+        "sra": "string required after '.'",
+        "uc": "unrecognized char",
+        "ujs": "unclosed json string",
+        "upc": "unrecognized pseudo class"
+    };
+
+    // throw an error message
+    function te(ec) {
+        throw new Error(errorCodes[ec]);
+    }
+
+    // THE LEXER
+    var toks = {
+        psc: 1, // pseudo class
+        psf: 2, // pseudo class function
+        typ: 3, // type
+        str: 4 // string
+    };
+
+    var pat = /^(?:([\r\n\t\ ]+)|([*.,>])|(string|boolean|null|array|object|number)|(:(?:root|first-child|last-child|only-child))|(:(?:nth-child|nth-last-child))|(:\w+)|(\"(?:[^\\]|\\[^\"])*\")|(\")|((?:[_a-zA-Z]|[^\0-\0177]|\\[^\r\n\f0-9a-fA-F])(?:[_a-zA-Z0-9\-]|[^\u0000-\u0177]|(?:\\[^\r\n\f0-9a-fA-F]))*))/;
+    var exprPat = /^\s*\(\s*(?:([+\-]?)([0-9]*)n\s*(?:([+\-])\s*([0-9]))?|(odd|even)|([+\-]?[0-9]+))\s*\)/;
+    var lex = function (str, off) {
+        if (!off) off = 0;
+        var m = pat.exec(str.substr(off));
+        if (!m) return undefined;
+        off+=m[0].length;
+        var a;
+        if (m[1]) a = [off, " "];
+        else if (m[2]) a = [off, m[0]];
+        else if (m[3]) a = [off, toks.typ, m[0]];
+        else if (m[4]) a = [off, toks.psc, m[0]];
+        else if (m[5]) a = [off, toks.psf, m[0]];
+        else if (m[6]) te("upc");
+        else if (m[7]) a = [off, toks.str, jsonParse(m[0])];
+        else if (m[8]) te("ujs");
+        else if (m[9]) a = [off, toks.str, m[0].replace(/\\([^\r\n\f0-9a-fA-F])/g,"$1")];
+        return a;
+    };
+
+    // THE PARSER
+
+    var parse = function (str) {
+        var a = [], off = 0, am;
+
+        while (true) {
+            var s = parse_selector(str, off);
+            a.push(s[1]);
+            s = lex(str, off = s[0]);
+            if (s && s[1] === " ") s = lex(str, off = s[0]);
+            if (!s) break;
+            // now we've parsed a selector, and have something else...
+            if (s[1] === ">") {
+                a.push(">");
+                off = s[0];
+            } else if (s[1] === ",") {
+                if (am === undefined) am = [ ",", a ];
+                else am.push(a);
+                a = [];
+                off = s[0];
+            }
+        }
+        if (am) am.push(a);
+        return am ? am : a;
+    };
+
+    var parse_selector = function(str, off) {
+        var soff = off;
+        var s = { };
+        var l = lex(str, off);
+        // skip space
+        if (l && l[1] === " ") { soff = off = l[0]; l = lex(str, off); }
+        if (l && l[1] === toks.typ) {
+            s.type = l[2];
+            l = lex(str, (off = l[0]));
+        } else if (l && l[1] === "*") {
+            // don't bother representing the universal sel, '*' in the
+            // parse tree, cause it's the default
+            l = lex(str, (off = l[0]));
+        }
+
+        // now support either an id or a pc
+        while (true) {
+            if (l === undefined) {
+                break;
+            } else if (l[1] === ".") {
+                l = lex(str, (off = l[0]));
+                if (!l || l[1] !== toks.str) te("sra");
+                if (s.id) te("nmi");
+                s.id = l[2];
+            } else if (l[1] === toks.psc) {
+                if (s.pc || s.pf) te("mpc");
+                // collapse first-child and last-child into nth-child expressions
+                if (l[2] === ":first-child") {
+                    s.pf = ":nth-child";
+                    s.a = 0;
+                    s.b = 1;
+                } else if (l[2] === ":last-child") {
+                    s.pf = ":nth-last-child";
+                    s.a = 0;
+                    s.b = 1;
+                } else {
+                    s.pc = l[2];
+                }
+            } else if (l[1] === toks.psf) {
+                if (s.pc || s.pf ) te("mpc");
+                s.pf = l[2];
+                var m = exprPat.exec(str.substr(l[0]));
+                if (!m) te("mepf");
+                if (m[5]) {
+                    s.a = 2;
+                    s.b = (m[5] === "odd") ? 1 : 0;
+                } else if (m[6]) {
+                    s.a = 0;
+                    s.b = parseInt(m[6], 10);
+                } else {
+                    s.a = parseInt((m[1] ? m[1] : "+") + (m[2] ? m[2] : "1"),10);
+                    s.b = m[3] ? parseInt(m[3] + m[4],10) : 0;
+                }
+                l[0] += m[0].length;
+            } else {
+                break;
+            }
+            l = lex(str, (off = l[0]));
+        }
+
+        // now if we didn't actually parse anything it's an error
+        if (soff === off) te("se");
+
+        return [off, s];
+    };
+
+    // THE EVALUATOR
+
+    function isArray(o) {
+        return Array.isArray ? Array.isArray(o) : 
+          toString.call(o) === "[object Array]";
+    }
+
+    function mytypeof(o) {
+        if (o === null) return "null";
+        var to = typeof o;
+        if (to === "object" && isArray(o)) to = "array";
+        return to;
+    }
+
+    function mn(node, sel, id, num, tot) {
+        var sels = [];
+        var cs = (sel[0] === ">") ? sel[1] : sel[0];
+        var m = true, mod;
+        if (cs.type) m = m && (cs.type === mytypeof(node));
+        if (cs.id)   m = m && (cs.id === id);
+        if (m && cs.pf) {
+            if (cs.pf === ":nth-last-child") num = tot - num;
+            else num++;
+            if (cs.a === 0) {
+                m = cs.b === num;
+            } else {
+                mod = ((num - cs.b) % cs.a);
+
+                m = (!mod && ((num*cs.a + cs.b) >= 0));
+            }
+        }
+
+        // should we repeat this selector for descendants?
+        if (sel[0] !== ">" && sel[0].pc !== ":root") sels.push(sel);
+
+        if (m) {
+            // is there a fragment that we should pass down?
+            if (sel[0] === ">") { if (sel.length > 2) { m = false; sels.push(sel.slice(2)); } }
+            else if (sel.length > 1) { m = false; sels.push(sel.slice(1)); }
+        }
+
+        return [m, sels];
+    }
+
+    function forEach(sel, obj, fun, id, num, tot) {
+        var a = (sel[0] === ",") ? sel.slice(1) : [sel],
+        a0 = [],
+        call = false,
+        i = 0, j = 0, l = 0, k, x;
+        for (i = 0; i < a.length; i++) {
+            x = mn(obj, a[i], id, num, tot);
+            if (x[0]) {
+                call = true;
+            }
+            for (j = 0; j < x[1].length; j++) {
+                a0.push(x[1][j]);
+            }
+        }
+        if (a0.length && typeof obj === "object") {
+            if (a0.length >= 1) {
+                a0.unshift(",");
+            }
+            if (isArray(obj)) {
+                for (i = 0; i < obj.length; i++) {
+                    forEach(a0, obj[i], fun, undefined, i, obj.length);
+                }
+            } else {
+                // it's a shame to do this for :last-child and other
+                // properties which count from the end when we don't
+                // even know if they're present.  Also, the stream
+                // parser is going to be pissed.
+                l = 0;
+                for (k in obj) {
+                    if (obj.hasOwnProperty(k)) {
+                        l++;
+                    }
+                }
+                i = 0;
+                for (k in obj) {
+                    if (obj.hasOwnProperty(k)) {
+                        forEach(a0, obj[k], fun, k, i++, l);
+                    }
+                }
+            }
+        }
+        if (call && fun) {
+            fun(obj);
+        }
+    }
+
+    function match(sel, obj) {
+        var a = [];
+        forEach(sel, obj, function(x) {
+            a.push(x);
+        });
+        return a;
+    }
+
+    function compile(sel) {
+        return {
+            sel: parse(sel),
+            match: function(obj){
+                return match(this.sel, obj);
+            },
+            forEach: function(obj, fun) {
+                return forEach(this.sel, obj, fun);
+            }
+        };
+    }
+
+    exports._lex = lex;
+    exports._parse = parse;
+    exports.match = function (sel, obj) {
+        return compile(sel).match(obj);
+    };
+    exports.forEach = function(sel, obj, fun) {
+        return compile(sel).forEach(obj, fun);
+    };
+    exports.compile = compile;
+})(typeof exports === "undefined" ? (window.JSONSelect = {}) : exports);
+
diff --git a/js/modernizr/test/js/lib/polyfills.js b/js/modernizr/test/js/lib/polyfills.js
new file mode 100644 (file)
index 0000000..4cbb1aa
--- /dev/null
@@ -0,0 +1,96 @@
+
+// Array.prototype.indexOf  polyfill
+if (!Array.prototype.indexOf){
+  Array.prototype.indexOf = function(searchElement /*, fromIndex */)
+  {
+    "use strict";
+
+    if (this === void 0 || this === null)
+      throw new TypeError();
+
+    var t = Object(this);
+    var len = t.length >>> 0;
+    if (len === 0)
+      return -1;
+
+    var n = 0;
+    if (arguments.length > 0)
+    {
+      n = Number(arguments[1]);
+      if (n !== n) // shortcut for verifying if it's NaN
+        n = 0;
+      else if (n !== 0 && n !== (1 / 0) && n !== -(1 / 0))
+        n = (n > 0 || -1) * Math.floor(Math.abs(n));
+    }
+
+    if (n >= len)
+      return -1;
+
+    var k = n >= 0
+          ? n
+          : Math.max(len - Math.abs(n), 0);
+
+    for (; k < len; k++)
+    {
+      if (k in t && t[k] === searchElement)
+        return k;
+    }
+    return -1;
+  };
+}
+
+
+// Object.keys()
+if (!Object.keys) Object.keys = function(o){
+  if (o !== Object(o)) throw new TypeError('Object.keys called on non-object');
+  var ret=[], p;
+  for (p in o) if(Object.prototype.hasOwnProperty.call(o,p)) ret.push(p);
+  return ret;
+};
+
+
+
+if (!Array.prototype.map)
+{
+  Array.prototype.map = function(fun /*, thisp */)
+  {
+    "use strict";
+
+    if (this === void 0 || this === null)
+      throw new TypeError();
+
+    var t = Object(this);
+    var len = t.length >>> 0;
+    if (typeof fun !== "function")
+      throw new TypeError();
+
+    var res = new Array(len);
+    var thisp = arguments[1];
+    for (var i = 0; i < len; i++)
+    {
+      if (i in t)
+        res[i] = fun.call(thisp, t[i], i, t);
+    }
+
+    return res;
+  };
+}
+
+
+
+
+/*!
+    http://www.JSON.org/json2.js
+    2011-10-19
+
+    Public Domain.
+
+    NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.
+
+    See http://www.JSON.org/js.html
+
+    This code should be minified before deployment.
+    See http://javascript.crockford.com/jsmin.html
+
+*/
+var JSON;if(!JSON){JSON={}}(function(){function f(n){return n<10?"0"+n:n}if(typeof Date.prototype.toJSON!=="function"){Date.prototype.toJSON=function(key){return isFinite(this.valueOf())?this.getUTCFullYear()+"-"+f(this.getUTCMonth()+1)+"-"+f(this.getUTCDate())+"T"+f(this.getUTCHours())+":"+f(this.getUTCMinutes())+":"+f(this.getUTCSeconds())+"Z":null};String.prototype.toJSON=Number.prototype.toJSON=Boolean.prototype.toJSON=function(key){return this.valueOf()}}var cx=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,escapable=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,gap,indent,meta={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},rep;function quote(string){escapable.lastIndex=0;return escapable.test(string)?'"'+string.replace(escapable,function(a){var c=meta[a];return typeof c==="string"?c:"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+string+'"'}function str(key,holder){var i,k,v,length,mind=gap,partial,value=holder[key];if(value&&typeof value==="object"&&typeof value.toJSON==="function"){value=value.toJSON(key)}if(typeof rep==="function"){value=rep.call(holder,key,value)}switch(typeof value){case"string":return quote(value);case"number":return isFinite(value)?String(value):"null";case"boolean":case"null":return String(value);case"object":if(!value){return"null"}gap+=indent;partial=[];if(Object.prototype.toString.apply(value)==="[object Array]"){length=value.length;for(i=0;i<length;i+=1){partial[i]=str(i,value)||"null"}v=partial.length===0?"[]":gap?"[\n"+gap+partial.join(",\n"+gap)+"\n"+mind+"]":"["+partial.join(",")+"]";gap=mind;return v}if(rep&&typeof rep==="object"){length=rep.length;for(i=0;i<length;i+=1){if(typeof rep[i]==="string"){k=rep[i];v=str(k,value);if(v){partial.push(quote(k)+(gap?": ":":")+v)}}}}else{for(k in value){if(Object.prototype.hasOwnProperty.call(value,k)){v=str(k,value);if(v){partial.push(quote(k)+(gap?": ":":")+v)}}}}v=partial.length===0?"{}":gap?"{\n"+gap+partial.join(",\n"+gap)+"\n"+mind+"}":"{"+partial.join(",")+"}";gap=mind;return v}}if(typeof JSON.stringify!=="function"){JSON.stringify=function(value,replacer,space){var i;gap="";indent="";if(typeof space==="number"){for(i=0;i<space;i+=1){indent+=" "}}else{if(typeof space==="string"){indent=space}}rep=replacer;if(replacer&&typeof replacer!=="function"&&(typeof replacer!=="object"||typeof replacer.length!=="number")){throw new Error("JSON.stringify")}return str("",{"":value})}}if(typeof JSON.parse!=="function"){JSON.parse=function(text,reviver){var j;function walk(holder,key){var k,v,value=holder[key];if(value&&typeof value==="object"){for(k in value){if(Object.prototype.hasOwnProperty.call(value,k)){v=walk(value,k);if(v!==undefined){value[k]=v}else{delete value[k]}}}}return reviver.call(holder,key,value)}text=String(text);cx.lastIndex=0;if(cx.test(text)){text=text.replace(cx,function(a){return"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})}if(/^[\],:{}\s]*$/.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,""))){j=eval("("+text+")");return typeof reviver==="function"?walk({"":j},""):j}throw new SyntaxError("JSON.parse")}}}());
diff --git a/js/modernizr/test/js/lib/uaparser.js b/js/modernizr/test/js/lib/uaparser.js
new file mode 100644 (file)
index 0000000..eb70eb9
--- /dev/null
@@ -0,0 +1,215 @@
+// uaparser by lindsey simon,
+// ported to node by tobie
+// https://github.com/tobie/ua-parser/
+
+// browserized by paul irish
+
+(function(exports){
+
+  exports.uaparse = parse;
+  
+  function parse(ua) {
+    for (var i=0; i < parsers.length; i++) {
+      var result = parsers[i](ua);
+      if (result) { return result; }
+    }
+    return new UserAgent();
+  }
+
+  function UserAgent(family) {
+    this.family = family || 'Other';
+  }
+
+  UserAgent.prototype.toVersionString = function() {
+    var output = '';
+    if (this.major != null) {
+      output += this.major;
+      if (this.minor != null) {
+        output += '.' + this.minor;
+        if (this.patch != null) {
+          output += '.' + this.patch;
+        }
+      }
+    }
+    return output;
+  };
+
+  UserAgent.prototype.toString = function() {
+    var suffix = this.toVersionString();
+    if (suffix) { suffix = ' ' + suffix; }
+    return this.family + suffix;
+  };
+  
+  
+  var regexes = [
+      {"pattern":"^(Opera)/(\\d+)\\.(\\d+) \\(Nintendo Wii",
+       "v1_replacement":null,
+       "family_replacement":"Wii"},
+      {"pattern":"(Namoroka|Shiretoko|Minefield)/(\\d+)\\.(\\d+)\\.(\\d+(?:pre)?)",
+       "v1_replacement":null,
+       "family_replacement":"Firefox ($1)"},
+      {"pattern":"(Namoroka|Shiretoko|Minefield)/(\\d+)\\.(\\d+)([ab]\\d+[a-z]*)?",
+       "v1_replacement":null,
+       "family_replacement":"Firefox ($1)"},
+      {"pattern":"(SeaMonkey|Fennec|Camino)/(\\d+)\\.(\\d+)([ab]?\\d+[a-z]*)",
+       "v1_replacement":null,
+       "family_replacement":null},
+      {"pattern":"(Flock)/(\\d+)\\.(\\d+)(b\\d+?)",
+       "v1_replacement":null,
+       "family_replacement":null},
+      {"pattern":"(Fennec)/(\\d+)\\.(\\d+)(pre)",
+       "v1_replacement":null,
+       "family_replacement":null},
+      {"pattern":"(Navigator)/(\\d+)\\.(\\d+)\\.(\\d+)",
+       "v1_replacement":null,
+       "family_replacement":"Netscape"},
+      {"pattern":"(Navigator)/(\\d+)\\.(\\d+)([ab]\\d+)",
+       "v1_replacement":null,
+       "family_replacement":"Netscape"},
+      {"pattern":"(Netscape6)/(\\d+)\\.(\\d+)\\.(\\d+)",
+       "v1_replacement":null,
+       "family_replacement":"Netscape"},
+      {"pattern":"(MyIBrow)/(\\d+)\\.(\\d+)",
+       "v1_replacement":null,
+       "family_replacement":"My Internet Browser"},
+      {"pattern":"(Firefox).*Tablet browser (\\d+)\\.(\\d+)\\.(\\d+)",
+       "v1_replacement":null,
+       "family_replacement":"MicroB"},
+      {"pattern":"(Opera)/9.80.*Version\\/(\\d+)\\.(\\d+)(?:\\.(\\d+))?",
+       "v1_replacement":null,
+       "family_replacement":null},
+      {"pattern":"(Firefox)/(\\d+)\\.(\\d+)\\.(\\d+(?:pre)?) \\(Swiftfox\\)",
+       "v1_replacement":null,
+       "family_replacement":"Swiftfox"},
+      {"pattern":"(Firefox)/(\\d+)\\.(\\d+)([ab]\\d+[a-z]*)? \\(Swiftfox\\)",
+       "v1_replacement":null,
+       "family_replacement":"Swiftfox"},
+      {"pattern":"(konqueror)/(\\d+)\\.(\\d+)\\.(\\d+)",
+       "v1_replacement":null,
+       "family_replacement":"Konqueror"},
+      {"pattern":"(Jasmine|ANTGalio|Midori|Fresco|Lobo|Maxthon|Lynx|OmniWeb|Dillo|Camino|Demeter|Fluid|Fennec|Shiira|Sunrise|Chrome|Flock|Netscape|Lunascape|Epiphany|WebPilot|Vodafone|NetFront|Konqueror|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|Opera Mini|iCab|NetNewsWire|Iron|Iris)/(\\d+)\\.(\\d+)\\.(\\d+)",
+       "v1_replacement":null,
+       "family_replacement":null},
+      {"pattern":"(Bolt|Jasmine|Maxthon|Lynx|Arora|IBrowse|Dillo|Camino|Shiira|Fennec|Phoenix|Chrome|Flock|Netscape|Lunascape|Epiphany|WebPilot|Opera Mini|Opera|Vodafone|NetFront|Konqueror|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|iCab|NetNewsWire|Iron|Space Bison|Stainless|Orca)/(\\d+)\\.(\\d+)",
+       "v1_replacement":null,
+       "family_replacement":null},
+      {"pattern":"(iRider|Crazy Browser|SkipStone|iCab|Lunascape|Sleipnir|Maemo Browser) (\\d+)\\.(\\d+)\\.(\\d+)",
+       "v1_replacement":null,
+       "family_replacement":null},
+      {"pattern":"(iCab|Lunascape|Opera|Android) (\\d+)\\.(\\d+)",
+       "v1_replacement":null,
+       "family_replacement":null},
+      {"pattern":"(IEMobile) (\\d+)\\.(\\d+)",
+       "v1_replacement":null,
+       "family_replacement":"IE Mobile"},
+      {"pattern":"(Firefox)/(\\d+)\\.(\\d+)\\.(\\d+)",
+       "v1_replacement":null,
+       "family_replacement":null},
+      {"pattern":"(Firefox)/(\\d+)\\.(\\d+)(pre|[ab]\\d+[a-z]*)?",
+       "v1_replacement":null,
+       "family_replacement":null},
+      {"pattern":"(Obigo|OBIGO)[^\\d]*(\\d+)(?:.(\\d+))?",
+       "v1_replacement":null,
+       "family_replacement":"Obigo"},
+      {"pattern":"(MAXTHON|Maxthon) (\\d+)\\.(\\d+)",
+       "v1_replacement":null,
+       "family_replacement":"Maxthon"},
+      {"pattern":"(Maxthon|MyIE2|Uzbl|Shiira)",
+       "v1_replacement":"0",
+       "family_replacement":null},
+      {"pattern":"(PLAYSTATION) (\\d+)",
+       "v1_replacement":null,
+       "family_replacement":"PlayStation"},
+      {"pattern":"(PlayStation Portable)[^\\d]+(\\d+).(\\d+)",
+       "v1_replacement":null,
+       "family_replacement":null},
+      {"pattern":"(BrowseX) \\((\\d+)\\.(\\d+)\\.(\\d+)",
+       "v1_replacement":null,
+       "family_replacement":null},
+      {"pattern":"(Opera)/(\\d+)\\.(\\d+).*Opera Mobi",
+       "v1_replacement":null,
+       "family_replacement":"Opera Mobile"},
+      {"pattern":"(POLARIS)/(\\d+)\\.(\\d+)",
+       "v1_replacement":null,
+       "family_replacement":"Polaris"},
+      {"pattern":"(BonEcho)/(\\d+)\\.(\\d+)\\.(\\d+)",
+       "v1_replacement":null,
+       "family_replacement":"Bon Echo"},
+      {"pattern":"(iPhone) OS (\\d+)_(\\d+)(?:_(\\d+))?",
+       "v1_replacement":null,
+       "family_replacement":null},
+      {"pattern":"(Avant)",
+       "v1_replacement":"1",
+       "family_replacement":null},
+      {"pattern":"(Nokia)[EN]?(\\d+)",
+       "v1_replacement":null,
+       "family_replacement":null},
+      {"pattern":"(Black[bB]erry)(\\d+)",
+       "v1_replacement":null,
+       "family_replacement":"Blackberry"},
+      {"pattern":"(OmniWeb)/v(\\d+)\\.(\\d+)",
+       "v1_replacement":null,
+       "family_replacement":null},
+      {"pattern":"(Blazer)/(\\d+)\\.(\\d+)",
+       "v1_replacement":null,
+       "family_replacement":"Palm Blazer"},
+      {"pattern":"(Pre)/(\\d+)\\.(\\d+)",
+       "v1_replacement":null,
+       "family_replacement":"Palm Pre"},
+      {"pattern":"(Links) \\((\\d+)\\.(\\d+)",
+       "v1_replacement":null,
+       "family_replacement":null},
+      {"pattern":"(QtWeb) Internet Browser/(\\d+)\\.(\\d+)",
+       "v1_replacement":null,
+       "family_replacement":null},
+      {"pattern":"(Version)/(\\d+)\\.(\\d+)(?:\\.(\\d+))?.*Safari/",
+       "v1_replacement":null,
+       "family_replacement":"Safari"},
+      {"pattern":"(OLPC)/Update(\\d+)\\.(\\d+)",
+       "v1_replacement":null,
+       "family_replacement":null},
+      {"pattern":"(OLPC)/Update()\\.(\\d+)",
+       "v1_replacement":"0",
+       "family_replacement":null},
+      {"pattern":"(SamsungSGHi560)",
+       "v1_replacement":null,
+       "family_replacement":"Samsung SGHi560"},
+      {"pattern":"^(SonyEricssonK800i)",
+       "v1_replacement":null,
+       "family_replacement":"Sony Ericsson K800i"},
+      {"pattern":"(Teleca Q7)",
+       "v1_replacement":null,
+       "family_replacement":null},
+      {"pattern":"(MSIE) (\\d+)\\.(\\d+)",
+       "v1_replacement":null,
+       "family_replacement":"IE"}
+
+  ];
+  
+  var parsers = regexes.map(function(obj) {
+    var regexp = new RegExp(obj.pattern),
+        famRep = obj.family_replacement,
+        v1Rep = obj.v1_replacement;
+
+    function parser(ua) {
+      var m = ua.match(regexp);
+
+      if (!m) { return null; }
+
+      var familly = famRep ? famRep.replace('$1', m[1]) : m[1];
+
+      var obj = new UserAgent(familly);
+      obj.major = parseInt(v1Rep ? v1Rep : m[2]);
+      obj.minor = m[3] ? parseInt(m[3]) : null;
+      obj.patch = m[4] ? parseInt(m[4]) : null;
+
+      return obj;
+    }
+
+    return parser;
+  });
+  
+  
+})(window);
+
+
diff --git a/js/modernizr/test/js/setup.js b/js/modernizr/test/js/setup.js
new file mode 100644 (file)
index 0000000..b194dcd
--- /dev/null
@@ -0,0 +1,44 @@
+
+// Avoid `console` errors in browsers that lack a console
+if (!(window.console && console.log)) {
+    (function() {
+        var noop = function() {};
+        var methods = ['assert', 'clear', 'count', 'debug', 'dir', 'dirxml', 'error', 'exception', 'group', 'groupCollapsed', 'groupEnd', 'info', 'log', 'markTimeline', 'profile', 'profileEnd', 'markTimeline', 'table', 'time', 'timeEnd', 'timeStamp', 'trace', 'warn'];
+        var length = methods.length;
+        var console = window.console = {};
+        while (length--) {
+            console[methods[length]] = noop;
+        }
+    }());
+}
+
+// test helper object
+window.TEST = {
+  // note some unique members of the Modernizr object
+  inputs    : ['input','inputtypes', 'textarea'],
+  audvid    : ['video','audio'],
+  API       : ['addTest', 'mq', 'hasEvent', 'testProp', 'testAllProps', 'testStyles', '_prefixes', '_domPrefixes', '_cssomPrefixes', 'prefixed'],
+  extraclass: ['js'],
+  privates  : ['_enableHTML5','_version','_fontfaceready'],
+  deprecated : [
+                { oldish : 'crosswindowmessaging', newish : 'postmessage'},
+                { oldish : 'historymanagement', newish : 'history'},
+              ],
+
+  // utility methods
+  inArray: function(elem, array) {
+      if (array.indexOf) {
+          return array.indexOf(elem);
+      }
+      for (var i = 0, length = array.length; i < length; i++) {
+          if (array[i] === elem) {
+              return i;
+          }
+      }
+      return -1;
+  },
+  trim : function(str){
+    return str.replace(/^\s*/, "").replace(/\s*$/, "");
+  }
+};
+
diff --git a/js/modernizr/test/js/unit-caniuse.js b/js/modernizr/test/js/unit-caniuse.js
new file mode 100644 (file)
index 0000000..78bda30
--- /dev/null
@@ -0,0 +1,191 @@
+
+
+var myscript = document.createElement('script'),
+    ref = document.getElementsByTagName('script')[0];
+
+myscript.src = 'http://caniuse.com/jsonp.php?callback=caniusecb';
+
+setTimeout(function(){
+  ref.parentNode.insertBefore(myscript, ref);
+}, 100);
+
+// mapping Modernizr terms over to caniuse terms
+var map = {
+  audio : 'audio',
+  borderimage : 'border-image',
+  borderradius : 'border-radius',
+  canvas : 'canvas',
+  canvastext : 'canvas-text',
+  cssanimations : 'css-animation',
+  boxshadow : 'css-boxshadow',
+  cssgradients : 'css-gradients',
+  opacity : 'css-opacity',
+  cssreflections : 'css-reflections',
+  textshadow : 'css-textshadow',
+  csstransitions : 'css-transitions',
+  hsla : 'css3-colors',
+  rgba : 'css3-colors',
+  draganddrop : 'dragndrop',
+  flexbox : 'flexbox',
+  fontface : 'fontface',
+  geolocation : 'geolocation',
+  hashchange : 'hashchange',
+  history : 'history',
+  indexeddb : 'indexeddb',
+  multiplebgs : 'multibackgrounds',
+  csscolumns : 'multicolumn',
+  localstorage : 'namevalue-storage',
+  applicationcache : 'offline-apps',
+  websqldatabase : 'sql-storage',
+  svg : 'svg',
+  touch : 'touch',
+  csstransforms : 'transforms2d',
+  csstransforms3d : 'transforms3d',
+  video: 'video',
+  webgl: 'webgl',
+  websockets : 'websockets',
+  webworkers : 'webworkers',
+  postmessage : 'x-doc-messaging'
+};
+
+window.caniusecb = function(scriptdata) {
+
+  window.doo = scriptdata;
+
+  // quit if JSONSelect didn't make it.
+  if (!window.JSONSelect) return;
+
+  var testdata     = scriptdata.data,
+
+      // parse the current UA with uaparser
+      ua           = uaparse(navigator.userAgent),
+
+      // match the UA from uaparser into the browser used by caniuse
+      browserKey   = JSONSelect.match('.agents .browser', scriptdata).indexOf(ua.family),
+      currBrowser  = Object.keys(scriptdata.agents)[browserKey];
+
+  // So Phantom doesn't kill the caniuse.com matching exit out as it's useless anyway within PhantomJS
+  if(navigator.userAgent.indexOf("PhantomJS") != -1) {
+    return;
+  }
+
+  // translate 'y' 'n' or 'a' into a boolean that Modernizr uses
+  function bool(ciuresult){
+    if (ciuresult == 'y' || ciuresult == 'a') return true;
+    // 'p' is for polyfill
+    if (ciuresult == 'n' || ciuresult == 'p') return false;
+    throw 'unknown return value from can i use';
+  }
+
+  function testify(o){
+
+    var ciubool = bool(o.ciuresult);
+
+    // caniuse says audio/video are yes/no, Modernizr has more detail which we'll dumb down.
+    if (~TEST.audvid.indexOf(o.feature))
+      o.result = !!o.result;
+
+    // if caniuse gave us a 'partial', lets let it pass with a note.
+    if (o.ciuresult == 'a'){
+      return ok(true,
+        o.browser + o.version + ': Caniuse reported partial support for ' + o.ciufeature +
+        '. So.. Modernizr\'s ' + o.result + ' is good enough...'
+      );
+    }
+
+
+    // change the *documented* false positives
+    if ((o.feature == 'textshadow' && o.browser == 'firefox' && o.version == 3)
+        && ciubool == false
+    ) {
+      ciubool = o.fp = true;
+    }
+
+    // where we actually do most our assertions
+    equal(o.result, ciubool,
+      o.browser + o.version + ': Caniuse result for ' + o.ciufeature +
+      ' matches Modernizr\'s ' + (o.fp ? '*false positive*' : 'result') + ' for ' + o.feature
+    );
+  }
+
+
+  module('caniuse.com data matches', {
+      setup:function() {
+      },
+      teardown:function() {
+      }
+  });
+
+
+  test("we match caniuse data", function() {
+
+    for (var feature in Modernizr){
+
+      var ciufeatname = map[feature];
+
+      if (ciufeatname === undefined) continue;
+
+      var ciufeatdata = testdata[ciufeatname];
+
+      if (ciufeatdata === undefined) throw 'unknown key of caniusedata';
+
+      // get results for this feature for all versions of this browser
+      var browserResults = ciufeatdata.stats[currBrowser];
+
+      // let's get our versions in order..
+      var minorver   = ua.minor &&                                  // caniuse doesn't use two digit minors
+                       ua.minor.toString().replace(/(\d)\d$/,'$1'), // but opera does.
+
+          majorminor = (ua.major + '.' + minorver)
+                          // opera gets grouped in some cases by caniuse
+                          .replace(/(9\.(6|5))/ , ua.family == 'opera' ? '9.5-9.6'   : "$1")
+                          .replace(/(10\.(0|1))/, ua.family == 'opera' ? '10.0-10.1' : "$1"),
+
+          mmResult   = browserResults[majorminor],
+          mResult    = browserResults[ua.major];
+
+
+      // check it against the major.minor: eg. FF 3.6
+      if (mmResult && mmResult != 'u'){ // 'y' 'n' or 'a'
+
+        // data ends w/ ` x` if its still prefixed in the imp
+        mmResult = mmResult.replace(' x','');
+
+        // match it against our data.
+        testify({ feature     : feature
+                , ciufeature  : ciufeatname
+                , result      : Modernizr[feature]
+                , ciuresult   : mmResult
+                , browser     : currBrowser
+                , version     : majorminor
+        });
+
+        continue; // don't check the major version
+      }
+
+      // check it against just the major version: eg. FF 3
+      if (mResult){
+
+        // unknown support from caniuse... He would probably like to know our data, though!
+        if (mResult == 'u') continue;
+
+        // data ends w/ ` x` if its still prefixed in the imp
+        mResult = mResult.replace(' x','');
+
+        testify({ feature     : feature
+                , ciufeature  : ciufeatname
+                , result      : Modernizr[feature]
+                , ciuresult   : mResult
+                , browser     : currBrowser
+                , version     : ua.major
+        });
+
+
+      }
+
+    } // for in loop
+
+  }); // eo test()
+
+
+}; // eo caniusecallback()
diff --git a/js/modernizr/test/js/unit.js b/js/modernizr/test/js/unit.js
new file mode 100644 (file)
index 0000000..a907ba8
--- /dev/null
@@ -0,0 +1,669 @@
+QUnit.begin = function() {
+       console.log("Starting test suite");
+       console.log("================================================\n");
+};
+
+QUnit.moduleDone = function(opts) {
+       if(opts.failed === 0) {
+               console.log("\u2714 All tests passed in '"+opts.name+"' module");
+       } else {
+               console.log("\u2716 "+ opts.failed +" tests failed in '"+opts.name+"' module");
+       }
+};
+
+QUnit.done = function(opts) {
+       console.log("\n================================================");
+       console.log("Tests completed in "+opts.runtime+" milliseconds");
+       console.log(opts.passed + " tests of "+opts.total+" passed, "+opts.failed+" failed.");
+};
+
+module('Basics', {
+    setup:function() {
+    },
+    teardown:function() {
+    }
+});
+
+test("globals set up", function() {
+
+       ok(window.Modernizr, 'global modernizr object created');
+
+});
+
+test("bind is implemented", function() {
+
+  ok(Function.prototype.bind, 'bind is a member of Function.prototype');
+
+  var a = function(){
+      return this.modernizr;
+  };
+  a = a.bind({modernizr: 'just awsome'});
+
+  equal("just awsome", a(), 'bind works as expected');
+
+
+  // thank you webkit layoutTests
+
+
+  var result;
+
+  function F(x, y)
+  {
+      result = this + " -> x:" + x + ", y:" + y;
+  }
+
+  G = F.bind("'a'", "'b'");
+  H = G.bind("'Cannot rebind this!'", "'c'");
+
+  G(1,2);
+  equal(result, "\'a\' -> x:\'b\', y:1");
+  H(1,2);
+  equal(result, "\'a\' -> x:\'b\', y:\'c\'");
+
+  var f = new F(1,2);
+  equal(result, "[object Object] -> x:1, y:2");
+  var g = new G(1,2);
+  equal(result, "[object Object] -> x:\'b\', y:1");
+  var h = new H(1,2);
+  equal(result, "[object Object] -> x:\'b\', y:\'c\'");
+
+  ok(f instanceof F, "f instanceof F");
+  ok(g instanceof F, "g instanceof F");
+  ok(h instanceof F, "h instanceof F");
+
+  // Bound functions don't have a 'prototype' property.
+  ok("prototype" in F, '"prototype" in F');
+
+  // The object passed to bind as 'this' must be callable.
+  raises(function(){
+    Function.bind.call(undefined);
+  });
+
+  // Objects that allow call but not construct can be bound, but should throw if used with new.
+  var abcAt = String.prototype.charAt.bind("abc");
+  equal(abcAt(1), "b", 'Objects that allow call but not construct can be bound...');
+
+  equal(1, Function.bind.length, 'it exists');
+
+
+});
+
+
+
+test("document.documentElement is valid and correct",1, function() {
+       equal(document.documentElement,document.getElementsByTagName('html')[0]);
+});
+
+
+test("no-js class is gone.", function() {
+
+       ok(!/(?:^|\s)no-js(?:^|\s)/.test(document.documentElement.className),
+          'no-js class is gone');
+
+       ok(/(?:^|\s)js(?:^|\s)/.test(document.documentElement.className),
+          'html.js class is present');
+
+       ok(/(?:^|\s)\+no-js(?:\s|$)/.test(document.documentElement.className),
+          'html.+no-js class is still present');
+
+       ok(/(?:^|\s)no-js-(?:\s|$)/.test(document.documentElement.className),
+          'html.no-js- class is still present');
+
+       ok(/(?:^|\s)i-has-no-js(?:\s|$)/.test(document.documentElement.className),
+          'html.i-has-no-js class is still present');
+
+       if (document.querySelector){
+         ok(document.querySelector('html.js') == document.documentElement,
+            "document.querySelector('html.js') matches.");
+       }
+});
+
+test('html shim worked', function(){
+  expect(2);
+
+  // the exact test we use in the script
+  var elem = document.getElementsByTagName("section")[0];
+  elem.id = "html5section";
+
+  ok( elem.childNodes.length === 1 , 'unknown elements dont collapse');
+
+  elem.style.color = 'red';
+  ok( /red|#ff0000/i.test(elem.style.color), 'unknown elements are styleable')
+
+});
+
+
+module('Modernizr classes and bools', {
+    setup:function() {
+    },
+    teardown:function() {
+    }
+});
+
+
+test('html classes are looking good',function(){
+
+  var classes = TEST.trim(document.documentElement.className).split(/\s+/);
+
+  var modprops = Object.keys(Modernizr),
+      newprops = modprops;
+
+  // decrement for the properties that are private
+  for (var i = -1, len = TEST.privates.length; ++i < len; ){
+    var item = TEST.privates[i];
+    equal(-1, TEST.inArray(item, classes), 'private Modernizr object '+ item +'should not have matching classes');
+    equal(-1, TEST.inArray('no-' + item, classes), 'private Modernizr object no-'+item+' should not have matching classes');
+  }
+
+  // decrement for the non-boolean objects
+//  for (var i = -1, len = TEST.inputs.length; ++i < len; ){
+//    if (Modernizr[TEST.inputs[i]] != undefined) newprops--;
+//  }
+
+  // TODO decrement for the extraclasses
+
+  // decrement for deprecated ones.
+  $.each( TEST.deprecated, function(key, val){
+    newprops.splice(  TEST.inArray(item, newprops), 1);
+  });
+
+
+  //equal(classes,newprops,'equal number of classes and global object props');
+
+  if (classes.length !== newprops){
+    //window.console && console.log(classes, newprops);
+
+  }
+
+  for (var i = 0, len = classes.length, aclass; i <len; i++){
+    aclass = classes[i];
+
+    // Skip js related classes.
+    if (/^(?:js|\+no-js|no-js-|i-has-no-js)$/.test(aclass)) continue;
+
+    if (aclass.indexOf('no-') === 0){
+      aclass = aclass.replace('no-','');
+
+      equal(Modernizr[aclass], false,
+            aclass + ' is correctly false in the classes and object')
+
+    } else {
+      equal(Modernizr[aclass], true,
+             aclass + ' is correctly true in the classes and object')
+    }
+  }
+
+
+  for (var i = 0, len = classes.length, aclass; i <len; i++){
+    equal(classes[i],classes[i].toLowerCase(),'all classes are lowerCase.');
+  }
+
+  // Remove fake no-js classes before test.
+  var docElClass = document.documentElement.className;
+  $.each(['\\+no-js', 'no-js-', 'i-has-no-js'], function(i, fakeClass) {
+    docElClass = docElClass.replace(new RegExp('(^|\\s)' + fakeClass + '(\\s|$)', 'g'), '$1$2');
+  });
+  equal(/[^\s]no-/.test(docElClass), false, 'whitespace between all classes.');
+
+
+})
+
+
+test('Modernizr properties are looking good',function(){
+
+  var count  = 0,
+      nobool = TEST.API.concat(TEST.inputs)
+                       .concat(TEST.audvid)
+                       .concat(TEST.privates)
+                       .concat(['textarea']); // due to forms-placeholder.js test
+
+  for (var prop in window.Modernizr){
+    if (Modernizr.hasOwnProperty(prop)){
+
+      if (TEST.inArray(prop,nobool) >= 0) continue;
+
+      ok(Modernizr[prop] === true || Modernizr[prop] === false,
+        'Modernizr.'+prop+' is a straight up boolean');
+
+
+      equal(prop,prop.toLowerCase(),'all properties are lowerCase.')
+    }
+  }
+})
+
+
+
+test('Modernizr.audio and Modernizr.video',function(){
+
+  for (var i = -1, len = TEST.audvid.length; ++i < len;){
+    var prop = TEST.audvid[i];
+
+    if (Modernizr[prop].toString() == 'true'){
+
+      ok(Modernizr[prop],                             'Modernizr.'+prop+' is truthy.');
+      equal(Modernizr[prop] == true,true,            'Modernizr.'+prop+' is == true')
+      equal(typeof Modernizr[prop] === 'object',true,'Moderizr.'+prop+' is truly an object');
+      equal(Modernizr[prop] !== true,true,           'Modernizr.'+prop+' is !== true')
+
+    } else {
+
+      equal(Modernizr[prop] != true,true,            'Modernizr.'+prop+' is != true')
+    }
+  }
+
+
+});
+
+
+test('Modernizr results match expected values',function(){
+
+  // i'm bringing over a few tests from inside Modernizr.js
+  equal(!!document.createElement('canvas').getContext,Modernizr.canvas,'canvas test consistent');
+
+  equal(!!window.Worker,Modernizr.webworkers,'web workers test consistent')
+
+});
+
+
+
+module('Modernizr\'s API methods', {
+    setup:function() {
+    },
+    teardown:function() {
+    }
+});
+
+test('Modernizr.addTest()',22,function(){
+
+  var docEl = document.documentElement;
+
+
+  Modernizr.addTest('testtrue',function(){
+    return true;
+  });
+
+  Modernizr.addTest('testtruthy',function(){
+    return 100;
+  });
+
+  Modernizr.addTest('testfalse',function(){
+    return false;
+  });
+
+  Modernizr.addTest('testfalsy',function(){
+    return undefined;
+  });
+
+  ok(docEl.className.indexOf(' testtrue') >= 0,'positive class added');
+  equal(Modernizr.testtrue,true,'positive prop added');
+
+  ok(docEl.className.indexOf(' testtruthy') >= 0,'positive class added');
+  equal(Modernizr.testtruthy,100,'truthy value is not casted to straight boolean');
+
+  ok(docEl.className.indexOf(' no-testfalse') >= 0,'negative class added');
+  equal(Modernizr.testfalse,false,'negative prop added');
+
+  ok(docEl.className.indexOf(' no-testfalsy') >= 0,'negative class added');
+  equal(Modernizr.testfalsy,undefined,'falsy value is not casted to straight boolean');
+
+
+
+  Modernizr.addTest('testcamelCase',function(){
+     return true;
+   });
+
+  ok(docEl.className.indexOf(' testcamelCase') === -1,
+     'camelCase test name toLowerCase()\'d');
+
+
+  // okay new signature for this API! woo
+
+  Modernizr.addTest('testboolfalse', false);
+
+  ok(~docEl.className.indexOf(' no-testboolfalse'), 'Modernizr.addTest(feature, bool): negative class added');
+  equal(Modernizr.testboolfalse, false, 'Modernizr.addTest(feature, bool): negative prop added');
+
+
+
+  Modernizr.addTest('testbooltrue', true);
+
+  ok(~docEl.className.indexOf(' testbooltrue'), 'Modernizr.addTest(feature, bool): positive class added');
+  equal(Modernizr.testbooltrue, true, 'Modernizr.addTest(feature, bool): positive prop added');
+
+
+
+  Modernizr.addTest({'testobjboolfalse': false,
+                     'testobjbooltrue' : true   });
+
+  ok(~docEl.className.indexOf(' no-testobjboolfalse'), 'Modernizr.addTest({feature: bool}): negative class added');
+  equal(Modernizr.testobjboolfalse, false, 'Modernizr.addTest({feature: bool}): negative prop added');
+
+  ok(~docEl.className.indexOf(' testobjbooltrue'), 'Modernizr.addTest({feature: bool}): positive class added');
+  equal(Modernizr.testobjbooltrue, true, 'Modernizr.addTest({feature: bool}): positive prop added');
+
+
+
+
+  Modernizr.addTest({'testobjfnfalse': function(){ return false },
+                     'testobjfntrue' : function(){ return true }   });
+
+
+  ok(~docEl.className.indexOf(' no-testobjfnfalse'), 'Modernizr.addTest({feature: bool}): negative class added');
+  equal(Modernizr.testobjfnfalse, false, 'Modernizr.addTest({feature: bool}): negative prop added');
+
+  ok(~docEl.className.indexOf(' testobjfntrue'), 'Modernizr.addTest({feature: bool}): positive class added');
+  equal(Modernizr.testobjfntrue, true, 'Modernizr.addTest({feature: bool}): positive prop added');
+
+
+  Modernizr
+    .addTest('testchainone', true)
+    .addTest({ testchaintwo: true })
+    .addTest('testchainthree', function(){ return true; });
+
+  ok( Modernizr.testchainone == Modernizr.testchaintwo == Modernizr.testchainthree, 'addTest is chainable');
+
+
+}); // eo addTest
+
+
+
+
+
+test('Modernizr.mq: media query testing',function(){
+
+  var $html = $('html');
+  $.mobile = {};
+
+  // from jquery mobile
+
+  $.mobile.media = (function() {
+       // TODO: use window.matchMedia once at least one UA implements it
+       var cache = {},
+               testDiv = $( "<div id='jquery-mediatest'>" ),
+               fakeBody = $( "<body>" ).append( testDiv );
+
+       return function( query ) {
+               if ( !( query in cache ) ) {
+                       var styleBlock = document.createElement('style'),
+                       cssrule = "@media " + query + " { #jquery-mediatest { position:absolute; } }";
+               //must set type for IE!
+               styleBlock.type = "text/css";
+               if (styleBlock.styleSheet){
+                 styleBlock.styleSheet.cssText = cssrule;
+               }
+               else {
+                 styleBlock.appendChild(document.createTextNode(cssrule));
+               }
+
+                       $html.prepend( fakeBody ).prepend( styleBlock );
+                       cache[ query ] = testDiv.css( "position" ) === "absolute";
+                       fakeBody.add( styleBlock ).remove();
+               }
+               return cache[ query ];
+       };
+  })();
+
+
+  ok(Modernizr.mq,'Modernizr.mq() doesn\' freak out.');
+
+  equal($.mobile.media('only screen'), Modernizr.mq('only screen'),'screen media query matches jQuery mobile\'s result');
+
+  equal(Modernizr.mq('only all'), Modernizr.mq('only all'), 'Cache hit matches');
+
+
+});
+
+
+
+
+test('Modernizr.hasEvent()',function(){
+
+  ok(typeof Modernizr.hasEvent == 'function','Modernizr.hasEvent() is a function');
+
+
+  equal(Modernizr.hasEvent('click'), true,'click event is supported');
+
+  equal(Modernizr.hasEvent('modernizrcustomevent'), false,'random event is definitely not supported');
+
+  /* works fine in webkit but not gecko
+  equal(  Modernizr.hasEvent('resize', window),
+          !Modernizr.hasEvent('resize', document.createElement('div')),
+          'Resize is supported in window but not a div, typically...');
+  */
+
+});
+
+
+
+
+
+test('Modernizr.testStyles()',function(){
+
+  equal(typeof Modernizr.testStyles, 'function','Modernizr.testStyles() is a function');
+
+  var style = '#modernizr{ width: 9px; height: 4px; font-size: 0; color: papayawhip; }';
+
+  Modernizr.testStyles(style, function(elem, rule){
+      equal(style, rule, 'rule passsed back matches what i gave it.')
+      equal(elem.offsetWidth, 9, 'width was set through the style');
+      equal(elem.offsetHeight, 4, 'height was set through the style');
+      equal(elem.id, 'modernizr', 'element is indeed the modernizr element');
+  });
+
+});
+
+
+test('Modernizr._[properties]',function(){
+
+  equal(6, Modernizr._prefixes.length, 'Modernizr._prefixes has 6 items');
+
+  equal(4, Modernizr._domPrefixes.length, 'Modernizr.domPrefixes has 4 items');
+
+});
+
+test('Modernizr.testProp()',function(){
+
+  equal(true, Modernizr.testProp('margin'), 'Everyone supports margin');
+
+  equal(false, Modernizr.testProp('happiness'), 'Nobody supports the happiness style. :(');
+  equal(true, Modernizr.testProp('fontSize'), 'Everyone supports fontSize');
+  equal(false, Modernizr.testProp('font-size'), 'Nobody supports font-size');
+
+  equal('pointerEvents' in  document.createElement('div').style,
+         Modernizr.testProp('pointerEvents'),
+         'results for `pointer-events` are consistent with a homegrown feature test');
+
+});
+
+
+
+test('Modernizr.testAllProps()',function(){
+
+  equal(true, Modernizr.testAllProps('margin'), 'Everyone supports margin');
+
+  equal(false, Modernizr.testAllProps('happiness'), 'Nobody supports the happiness style. :(');
+  equal(true, Modernizr.testAllProps('fontSize'), 'Everyone supports fontSize');
+  equal(false, Modernizr.testAllProps('font-size'), 'Nobody supports font-size');
+
+  equal(Modernizr.csstransitions, Modernizr.testAllProps('transition'), 'Modernizr result matches API result: csstransitions');
+
+  equal(Modernizr.csscolumns, Modernizr.testAllProps('columnCount'), 'Modernizr result matches API result: csscolumns')
+
+});
+
+
+
+
+
+
+test('Modernizr.prefixed() - css and DOM resolving', function(){
+  // https://gist.github.com/523692
+
+  function gimmePrefix(prop, obj){
+    var prefixes = ['Moz','Khtml','Webkit','O','ms'],
+        domPrefixes = ['moz','khtml','webkit','o','ms'],
+        elem     = document.createElement('div'),
+        upper    = prop.charAt(0).toUpperCase() + prop.slice(1);
+
+    if(!obj) {
+      if (prop in elem.style)
+        return prop;
+
+      for (var len = prefixes.length; len--; ){
+        if ((prefixes[len] + upper)  in elem.style)
+          return (prefixes[len] + upper);
+      }
+    } else {
+      if (prop in obj)
+        return prop;
+
+      for (var len = domPrefixes.length; len--; ){
+        if ((domPrefixes[len] + upper)  in obj)
+          return (domPrefixes[len] + upper);
+      }
+    }
+
+
+    return false;
+  }
+
+  var propArr = ['transition', 'backgroundSize', 'boxSizing', 'borderImage',
+                 'borderRadius', 'boxShadow', 'columnCount'];
+
+  var domPropArr = [{ 'prop': 'requestAnimationFrame',  'obj': window },
+                    { 'prop': 'querySelectorAll',       'obj': document },
+                    { 'prop': 'matchesSelector',        'obj': document.createElement('div') }];
+
+  for (var i = -1, len = propArr.length; ++i < len; ){
+    var prop = propArr[i];
+    equal(Modernizr.prefixed(prop), gimmePrefix(prop), 'results for ' + prop + ' match the homebaked prefix finder');
+  }
+
+  for (var i = -1, len = domPropArr.length; ++i < len; ){
+    var prop = domPropArr[i];
+    ok(!!~Modernizr.prefixed(prop.prop, prop.obj, false).toString().indexOf(gimmePrefix(prop.prop, prop.obj)), 'results for ' + prop.prop + ' match the homebaked prefix finder');
+  }
+
+
+
+
+});
+
+
+// FIXME: so a few of these are whitelisting for webkit. i'd like to improve that.
+test('Modernizr.prefixed autobind', function(){
+
+  var rAFName;
+
+  // quick sniff to find the local rAF prefixed name.
+  var vendors = ['ms', 'moz', 'webkit', 'o'];
+  for(var x = 0; x < vendors.length && !rAFName; ++x) {
+    rAFName = window[vendors[x]+'RequestAnimationFrame'] && vendors[x]+'RequestAnimationFrame';
+  }
+
+  if (rAFName){
+    // rAF returns a function
+    equal(
+      'function',
+      typeof Modernizr.prefixed('requestAnimationFrame', window),
+      "Modernizr.prefixed('requestAnimationFrame', window) returns a function")
+
+    // unless we false it to a string
+    equal(
+      rAFName,
+      Modernizr.prefixed('requestAnimationFrame', window, false),
+      "Modernizr.prefixed('requestAnimationFrame', window, false) returns a string (the prop name)")
+
+  }
+
+  if (document.body.webkitMatchesSelector || document.body.mozMatchesSelector){
+
+    var fn = Modernizr.prefixed('matchesSelector', HTMLElement.prototype, document.body);
+
+    //returns function
+    equal(
+      'function',
+      typeof fn,
+      "Modernizr.prefixed('matchesSelector', HTMLElement.prototype, document.body) returns a function");
+
+      // fn scoping
+    equal(
+      true,
+      fn('body'),
+      "Modernizr.prefixed('matchesSelector', HTMLElement.prototype, document.body) is scoped to the body")
+
+  }
+
+  // Webkit only: are there other objects that are prefixed?
+  if (window.webkitNotifications){
+    // should be an object.
+
+    equal(
+      'object',
+      typeof Modernizr.prefixed('Notifications', window),
+      "Modernizr.prefixed('Notifications') returns an object");
+
+  }
+
+  // Webkit only:
+  if (typeof document.webkitIsFullScreen !== 'undefined'){
+    // boolean
+
+    equal(
+      'boolean',
+      typeof Modernizr.prefixed('isFullScreen', document),
+      "Modernizr.prefixed('isFullScreen') returns a boolean");
+  }
+
+
+
+  // Moz only:
+  if (typeof document.mozFullScreen !== 'undefined'){
+    // boolean
+
+    equal(
+      'boolean',
+      typeof Modernizr.prefixed('fullScreen', document),
+      "Modernizr.prefixed('fullScreen') returns a boolean");
+  }
+
+
+  // Webkit-only.. takes advantage of Webkit's mixed case of prefixes
+  if (document.body.style.WebkitAnimation){
+    // string
+
+    equal(
+      'string',
+      typeof Modernizr.prefixed('animation', document.body.style),
+      "Modernizr.prefixed('animation', document.body.style) returns value of that, as a string");
+
+    equal(
+      animationStyle.toLowerCase(),
+      Modernizr.prefixed('animation', document.body.style, false).toLowerCase(),
+      "Modernizr.prefixed('animation', document.body.style, false) returns the (case-normalized) name of the property: webkitanimation");
+
+  }
+
+  equal(
+    false,
+    Modernizr.prefixed('doSomethingAmazing$#$', window),
+    "Modernizr.prefixed('doSomethingAmazing$#$', window) : Gobbledygook with prefixed(str,obj) returns false");
+
+  equal(
+    false,
+    Modernizr.prefixed('doSomethingAmazing$#$', window, document.body),
+    "Modernizr.prefixed('doSomethingAmazing$#$', window) : Gobbledygook with prefixed(str,obj, scope) returns false");
+
+
+  equal(
+    false,
+    Modernizr.prefixed('doSomethingAmazing$#$', window, false),
+    "Modernizr.prefixed('doSomethingAmazing$#$', window) : Gobbledygook with prefixed(str,obj, false) returns false");
+
+
+});
+
+
+
+
+
diff --git a/js/modernizr/test/qunit/qunit.js b/js/modernizr/test/qunit/qunit.js
new file mode 100644 (file)
index 0000000..9efedcb
--- /dev/null
@@ -0,0 +1,1932 @@
+/**
+ * QUnit v1.9.0 - A JavaScript Unit Testing Framework
+ *
+ * http://docs.jquery.com/QUnit
+ *
+ * Copyright (c) 2012 John Resig, Jörn Zaefferer
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * or GPL (GPL-LICENSE.txt) licenses.
+ */
+
+(function( window ) {
+
+var QUnit,
+       config,
+       onErrorFnPrev,
+       testId = 0,
+       fileName = (sourceFromStacktrace( 0 ) || "" ).replace(/(:\d+)+\)?/, "").replace(/.+\//, ""),
+       toString = Object.prototype.toString,
+       hasOwn = Object.prototype.hasOwnProperty,
+       defined = {
+       setTimeout: typeof window.setTimeout !== "undefined",
+       sessionStorage: (function() {
+               var x = "qunit-test-string";
+               try {
+                       sessionStorage.setItem( x, x );
+                       sessionStorage.removeItem( x );
+                       return true;
+               } catch( e ) {
+                       return false;
+               }
+       }())
+};
+
+function Test( settings ) {
+       extend( this, settings );
+       this.assertions = [];
+       this.testNumber = ++Test.count;
+}
+
+Test.count = 0;
+
+Test.prototype = {
+       init: function() {
+               var a, b, li,
+        tests = id( "qunit-tests" );
+
+               if ( tests ) {
+                       b = document.createElement( "strong" );
+                       b.innerHTML = this.name;
+
+                       // `a` initialized at top of scope
+                       a = document.createElement( "a" );
+                       a.innerHTML = "Rerun";
+                       a.href = QUnit.url({ testNumber: this.testNumber });
+
+                       li = document.createElement( "li" );
+                       li.appendChild( b );
+                       li.appendChild( a );
+                       li.className = "running";
+                       li.id = this.id = "qunit-test-output" + testId++;
+
+                       tests.appendChild( li );
+               }
+       },
+       setup: function() {
+               if ( this.module !== config.previousModule ) {
+                       if ( config.previousModule ) {
+                               runLoggingCallbacks( "moduleDone", QUnit, {
+                                       name: config.previousModule,
+                                       failed: config.moduleStats.bad,
+                                       passed: config.moduleStats.all - config.moduleStats.bad,
+                                       total: config.moduleStats.all
+                               });
+                       }
+                       config.previousModule = this.module;
+                       config.moduleStats = { all: 0, bad: 0 };
+                       runLoggingCallbacks( "moduleStart", QUnit, {
+                               name: this.module
+                       });
+               } else if ( config.autorun ) {
+                       runLoggingCallbacks( "moduleStart", QUnit, {
+                               name: this.module
+                       });
+               }
+
+               config.current = this;
+
+               this.testEnvironment = extend({
+                       setup: function() {},
+                       teardown: function() {}
+               }, this.moduleTestEnvironment );
+
+               runLoggingCallbacks( "testStart", QUnit, {
+                       name: this.testName,
+                       module: this.module
+               });
+
+               // allow utility functions to access the current test environment
+               // TODO why??
+               QUnit.current_testEnvironment = this.testEnvironment;
+
+               if ( !config.pollution ) {
+                       saveGlobal();
+               }
+               if ( config.notrycatch ) {
+                       this.testEnvironment.setup.call( this.testEnvironment );
+                       return;
+               }
+               try {
+                       this.testEnvironment.setup.call( this.testEnvironment );
+               } catch( e ) {
+                       QUnit.pushFailure( "Setup failed on " + this.testName + ": " + e.message, extractStacktrace( e, 1 ) );
+               }
+       },
+       run: function() {
+               config.current = this;
+
+               var running = id( "qunit-testresult" );
+
+               if ( running ) {
+                       running.innerHTML = "Running: <br/>" + this.name;
+               }
+
+               if ( this.async ) {
+                       QUnit.stop();
+               }
+
+               if ( config.notrycatch ) {
+                       this.callback.call( this.testEnvironment, QUnit.assert );
+                       return;
+               }
+
+               try {
+                       this.callback.call( this.testEnvironment, QUnit.assert );
+               } catch( e ) {
+                       QUnit.pushFailure( "Died on test #" + (this.assertions.length + 1) + " " + this.stack + ": " + e.message, extractStacktrace( e, 0 ) );
+                       // else next test will carry the responsibility
+                       saveGlobal();
+
+                       // Restart the tests if they're blocking
+                       if ( config.blocking ) {
+                               QUnit.start();
+                       }
+               }
+       },
+       teardown: function() {
+               config.current = this;
+               if ( config.notrycatch ) {
+                       this.testEnvironment.teardown.call( this.testEnvironment );
+                       return;
+               } else {
+                       try {
+                               this.testEnvironment.teardown.call( this.testEnvironment );
+                       } catch( e ) {
+                               QUnit.pushFailure( "Teardown failed on " + this.testName + ": " + e.message, extractStacktrace( e, 1 ) );
+                       }
+               }
+               checkPollution();
+       },
+       finish: function() {
+               config.current = this;
+               if ( config.requireExpects && this.expected == null ) {
+                       QUnit.pushFailure( "Expected number of assertions to be defined, but expect() was not called.", this.stack );
+               } else if ( this.expected != null && this.expected != this.assertions.length ) {
+                       QUnit.pushFailure( "Expected " + this.expected + " assertions, but " + this.assertions.length + " were run", this.stack );
+               } else if ( this.expected == null && !this.assertions.length ) {
+                       QUnit.pushFailure( "Expected at least one assertion, but none were run - call expect(0) to accept zero assertions.", this.stack );
+               }
+
+               var assertion, a, b, i, li, ol,
+                       test = this,
+                       good = 0,
+                       bad = 0,
+                       tests = id( "qunit-tests" );
+
+               config.stats.all += this.assertions.length;
+               config.moduleStats.all += this.assertions.length;
+
+               if ( tests ) {
+                       ol = document.createElement( "ol" );
+
+                       for ( i = 0; i < this.assertions.length; i++ ) {
+                               assertion = this.assertions[i];
+
+                               li = document.createElement( "li" );
+                               li.className = assertion.result ? "pass" : "fail";
+                               li.innerHTML = assertion.message || ( assertion.result ? "okay" : "failed" );
+                               ol.appendChild( li );
+
+                               if ( assertion.result ) {
+                                       good++;
+                               } else {
+                                       bad++;
+                                       config.stats.bad++;
+                                       config.moduleStats.bad++;
+                               }
+                       }
+
+                       // store result when possible
+                       if ( QUnit.config.reorder && defined.sessionStorage ) {
+                               if ( bad ) {
+                                       sessionStorage.setItem( "qunit-test-" + this.module + "-" + this.testName, bad );
+                               } else {
+                                       sessionStorage.removeItem( "qunit-test-" + this.module + "-" + this.testName );
+                               }
+                       }
+
+                       if ( bad === 0 ) {
+                               ol.style.display = "none";
+                       }
+
+                       // `b` initialized at top of scope
+                       b = document.createElement( "strong" );
+                       b.innerHTML = this.name + " <b class='counts'>(<b class='failed'>" + bad + "</b>, <b class='passed'>" + good + "</b>, " + this.assertions.length + ")</b>";
+
+                       addEvent(b, "click", function() {
+                               var next = b.nextSibling.nextSibling,
+                                       display = next.style.display;
+                               next.style.display = display === "none" ? "block" : "none";
+                       });
+
+                       addEvent(b, "dblclick", function( e ) {
+                               var target = e && e.target ? e.target : window.event.srcElement;
+                               if ( target.nodeName.toLowerCase() == "span" || target.nodeName.toLowerCase() == "b" ) {
+                                       target = target.parentNode;
+                               }
+                               if ( window.location && target.nodeName.toLowerCase() === "strong" ) {
+                                       window.location = QUnit.url({ testNumber: test.testNumber });
+                               }
+                       });
+
+                       // `li` initialized at top of scope
+                       li = id( this.id );
+                       li.className = bad ? "fail" : "pass";
+                       li.removeChild( li.firstChild );
+                       a = li.firstChild;
+                       li.appendChild( b );
+                       li.appendChild ( a );
+                       li.appendChild( ol );
+
+               } else {
+                       for ( i = 0; i < this.assertions.length; i++ ) {
+                               if ( !this.assertions[i].result ) {
+                                       bad++;
+                                       config.stats.bad++;
+                                       config.moduleStats.bad++;
+                               }
+                       }
+               }
+
+               runLoggingCallbacks( "testDone", QUnit, {
+                       name: this.testName,
+                       module: this.module,
+                       failed: bad,
+                       passed: this.assertions.length - bad,
+                       total: this.assertions.length
+               });
+
+               QUnit.reset();
+
+               config.current = undefined;
+       },
+
+       queue: function() {
+               var bad,
+                       test = this;
+
+               synchronize(function() {
+                       test.init();
+               });
+               function run() {
+                       // each of these can by async
+                       synchronize(function() {
+                               test.setup();
+                       });
+                       synchronize(function() {
+                               test.run();
+                       });
+                       synchronize(function() {
+                               test.teardown();
+                       });
+                       synchronize(function() {
+                               test.finish();
+                       });
+               }
+
+               // `bad` initialized at top of scope
+               // defer when previous test run passed, if storage is available
+               bad = QUnit.config.reorder && defined.sessionStorage &&
+                                               +sessionStorage.getItem( "qunit-test-" + this.module + "-" + this.testName );
+
+               if ( bad ) {
+                       run();
+               } else {
+                       synchronize( run, true );
+               }
+       }
+};
+
+// Root QUnit object.
+// `QUnit` initialized at top of scope
+QUnit = {
+
+       // call on start of module test to prepend name to all tests
+       module: function( name, testEnvironment ) {
+               config.currentModule = name;
+               config.currentModuleTestEnviroment = testEnvironment;
+       },
+
+       asyncTest: function( testName, expected, callback ) {
+               if ( arguments.length === 2 ) {
+                       callback = expected;
+                       expected = null;
+               }
+
+               QUnit.test( testName, expected, callback, true );
+       },
+
+       test: function( testName, expected, callback, async ) {
+               var test,
+                       name = "<span class='test-name'>" + escapeInnerText( testName ) + "</span>";
+
+               if ( arguments.length === 2 ) {
+                       callback = expected;
+                       expected = null;
+               }
+
+               if ( config.currentModule ) {
+                       name = "<span class='module-name'>" + config.currentModule + "</span>: " + name;
+               }
+
+               test = new Test({
+                       name: name,
+                       testName: testName,
+                       expected: expected,
+                       async: async,
+                       callback: callback,
+                       module: config.currentModule,
+                       moduleTestEnvironment: config.currentModuleTestEnviroment,
+                       stack: sourceFromStacktrace( 2 )
+               });
+
+               if ( !validTest( test ) ) {
+                       return;
+               }
+
+               test.queue();
+       },
+
+       // Specify the number of expected assertions to gurantee that failed test (no assertions are run at all) don't slip through.
+       expect: function( asserts ) {
+               config.current.expected = asserts;
+       },
+
+       start: function( count ) {
+               config.semaphore -= count || 1;
+               // don't start until equal number of stop-calls
+               if ( config.semaphore > 0 ) {
+                       return;
+               }
+               // ignore if start is called more often then stop
+               if ( config.semaphore < 0 ) {
+                       config.semaphore = 0;
+               }
+               // A slight delay, to avoid any current callbacks
+               if ( defined.setTimeout ) {
+                       window.setTimeout(function() {
+                               if ( config.semaphore > 0 ) {
+                                       return;
+                               }
+                               if ( config.timeout ) {
+                                       clearTimeout( config.timeout );
+                               }
+
+                               config.blocking = false;
+                               process( true );
+                       }, 13);
+               } else {
+                       config.blocking = false;
+                       process( true );
+               }
+       },
+
+       stop: function( count ) {
+               config.semaphore += count || 1;
+               config.blocking = true;
+
+               if ( config.testTimeout && defined.setTimeout ) {
+                       clearTimeout( config.timeout );
+                       config.timeout = window.setTimeout(function() {
+                               QUnit.ok( false, "Test timed out" );
+                               config.semaphore = 1;
+                               QUnit.start();
+                       }, config.testTimeout );
+               }
+       }
+};
+
+// Asssert helpers
+// All of these must call either QUnit.push() or manually do:
+// - runLoggingCallbacks( "log", .. );
+// - config.current.assertions.push({ .. });
+QUnit.assert = {
+       /**
+        * Asserts rough true-ish result.
+        * @name ok
+        * @function
+        * @example ok( "asdfasdf".length > 5, "There must be at least 5 chars" );
+        */
+       ok: function( result, msg ) {
+               if ( !config.current ) {
+                       throw new Error( "ok() assertion outside test context, was " + sourceFromStacktrace(2) );
+               }
+               result = !!result;
+
+               var source,
+                       details = {
+                               result: result,
+                               message: msg
+                       };
+
+               msg = escapeInnerText( msg || (result ? "okay" : "failed" ) );
+               msg = "<span class='test-message'>" + msg + "</span>";
+
+               if ( !result ) {
+                       source = sourceFromStacktrace( 2 );
+                       if ( source ) {
+                               details.source = source;
+                               msg += "<table><tr class='test-source'><th>Source: </th><td><pre>" + escapeInnerText( source ) + "</pre></td></tr></table>";
+                       }
+               }
+               runLoggingCallbacks( "log", QUnit, details );
+               config.current.assertions.push({
+                       result: result,
+                       message: msg
+               });
+       },
+
+       /**
+        * Assert that the first two arguments are equal, with an optional message.
+        * Prints out both actual and expected values.
+        * @name equal
+        * @function
+        * @example equal( format( "Received {0} bytes.", 2), "Received 2 bytes.", "format() replaces {0} with next argument" );
+        */
+       equal: function( actual, expected, message ) {
+               QUnit.push( expected == actual, actual, expected, message );
+       },
+
+       /**
+        * @name notEqual
+        * @function
+        */
+       notEqual: function( actual, expected, message ) {
+               QUnit.push( expected != actual, actual, expected, message );
+       },
+
+       /**
+        * @name deepEqual
+        * @function
+        */
+       deepEqual: function( actual, expected, message ) {
+               QUnit.push( QUnit.equiv(actual, expected), actual, expected, message );
+       },
+
+       /**
+        * @name notDeepEqual
+        * @function
+        */
+       notDeepEqual: function( actual, expected, message ) {
+               QUnit.push( !QUnit.equiv(actual, expected), actual, expected, message );
+       },
+
+       /**
+        * @name strictEqual
+        * @function
+        */
+       strictEqual: function( actual, expected, message ) {
+               QUnit.push( expected === actual, actual, expected, message );
+       },
+
+       /**
+        * @name notStrictEqual
+        * @function
+        */
+       notStrictEqual: function( actual, expected, message ) {
+               QUnit.push( expected !== actual, actual, expected, message );
+       },
+
+       throws: function( block, expected, message ) {
+               var actual,
+                       ok = false;
+
+               // 'expected' is optional
+               if ( typeof expected === "string" ) {
+                       message = expected;
+                       expected = null;
+               }
+
+               config.current.ignoreGlobalErrors = true;
+               try {
+                       block.call( config.current.testEnvironment );
+               } catch (e) {
+                       actual = e;
+               }
+               config.current.ignoreGlobalErrors = false;
+
+               if ( actual ) {
+                       // we don't want to validate thrown error
+                       if ( !expected ) {
+                               ok = true;
+                       // expected is a regexp
+                       } else if ( QUnit.objectType( expected ) === "regexp" ) {
+                               ok = expected.test( actual );
+                       // expected is a constructor
+                       } else if ( actual instanceof expected ) {
+                               ok = true;
+                       // expected is a validation function which returns true is validation passed
+                       } else if ( expected.call( {}, actual ) === true ) {
+                               ok = true;
+                       }
+
+                       QUnit.push( ok, actual, null, message );
+               } else {
+                       QUnit.pushFailure( message, null, 'No exception was thrown.' );
+               }
+       }
+};
+
+/**
+ * @deprecate since 1.8.0
+ * Kept assertion helpers in root for backwards compatibility
+ */
+extend( QUnit, QUnit.assert );
+
+/**
+ * @deprecated since 1.9.0
+ * Kept global "raises()" for backwards compatibility
+ */
+QUnit.raises = QUnit.assert.throws;
+
+/**
+ * @deprecated since 1.0.0, replaced with error pushes since 1.3.0
+ * Kept to avoid TypeErrors for undefined methods.
+ */
+QUnit.equals = function() {
+       QUnit.push( false, false, false, "QUnit.equals has been deprecated since 2009 (e88049a0), use QUnit.equal instead" );
+};
+QUnit.same = function() {
+       QUnit.push( false, false, false, "QUnit.same has been deprecated since 2009 (e88049a0), use QUnit.deepEqual instead" );
+};
+
+// We want access to the constructor's prototype
+(function() {
+       function F() {}
+       F.prototype = QUnit;
+       QUnit = new F();
+       // Make F QUnit's constructor so that we can add to the prototype later
+       QUnit.constructor = F;
+}());
+
+/**
+ * Config object: Maintain internal state
+ * Later exposed as QUnit.config
+ * `config` initialized at top of scope
+ */
+config = {
+       // The queue of tests to run
+       queue: [],
+
+       // block until document ready
+       blocking: true,
+
+       // when enabled, show only failing tests
+       // gets persisted through sessionStorage and can be changed in UI via checkbox
+       hidepassed: false,
+
+       // by default, run previously failed tests first
+       // very useful in combination with "Hide passed tests" checked
+       reorder: true,
+
+       // by default, modify document.title when suite is done
+       altertitle: true,
+
+       // when enabled, all tests must call expect()
+       requireExpects: false,
+
+       // add checkboxes that are persisted in the query-string
+       // when enabled, the id is set to `true` as a `QUnit.config` property
+       urlConfig: [
+               {
+                       id: "noglobals",
+                       label: "Check for Globals",
+                       tooltip: "Enabling this will test if any test introduces new properties on the `window` object. Stored as query-strings."
+               },
+               {
+                       id: "notrycatch",
+                       label: "No try-catch",
+                       tooltip: "Enabling this will run tests outside of a try-catch block. Makes debugging exceptions in IE reasonable. Stored as query-strings."
+               }
+       ],
+
+       // logging callback queues
+       begin: [],
+       done: [],
+       log: [],
+       testStart: [],
+       testDone: [],
+       moduleStart: [],
+       moduleDone: []
+};
+
+// Initialize more QUnit.config and QUnit.urlParams
+(function() {
+       var i,
+               location = window.location || { search: "", protocol: "file:" },
+               params = location.search.slice( 1 ).split( "&" ),
+               length = params.length,
+               urlParams = {},
+               current;
+
+       if ( params[ 0 ] ) {
+               for ( i = 0; i < length; i++ ) {
+                       current = params[ i ].split( "=" );
+                       current[ 0 ] = decodeURIComponent( current[ 0 ] );
+                       // allow just a key to turn on a flag, e.g., test.html?noglobals
+                       current[ 1 ] = current[ 1 ] ? decodeURIComponent( current[ 1 ] ) : true;
+                       urlParams[ current[ 0 ] ] = current[ 1 ];
+               }
+       }
+
+       QUnit.urlParams = urlParams;
+
+       // String search anywhere in moduleName+testName
+       config.filter = urlParams.filter;
+
+       // Exact match of the module name
+       config.module = urlParams.module;
+
+       config.testNumber = parseInt( urlParams.testNumber, 10 ) || null;
+
+       // Figure out if we're running the tests from a server or not
+       QUnit.isLocal = location.protocol === "file:";
+}());
+
+// Export global variables, unless an 'exports' object exists,
+// in that case we assume we're in CommonJS (dealt with on the bottom of the script)
+if ( typeof exports === "undefined" ) {
+       extend( window, QUnit );
+
+       // Expose QUnit object
+       window.QUnit = QUnit;
+}
+
+// Extend QUnit object,
+// these after set here because they should not be exposed as global functions
+extend( QUnit, {
+       config: config,
+
+       // Initialize the configuration options
+       init: function() {
+               extend( config, {
+                       stats: { all: 0, bad: 0 },
+                       moduleStats: { all: 0, bad: 0 },
+                       started: +new Date(),
+                       updateRate: 1000,
+                       blocking: false,
+                       autostart: true,
+                       autorun: false,
+                       filter: "",
+                       queue: [],
+                       semaphore: 0
+               });
+
+               var tests, banner, result,
+                       qunit = id( "qunit" );
+
+               if ( qunit ) {
+                       qunit.innerHTML =
+                               "<h1 id='qunit-header'>" + escapeInnerText( document.title ) + "</h1>" +
+                               "<h2 id='qunit-banner'></h2>" +
+                               "<div id='qunit-testrunner-toolbar'></div>" +
+                               "<h2 id='qunit-userAgent'></h2>" +
+                               "<ol id='qunit-tests'></ol>";
+               }
+
+               tests = id( "qunit-tests" );
+               banner = id( "qunit-banner" );
+               result = id( "qunit-testresult" );
+
+               if ( tests ) {
+                       tests.innerHTML = "";
+               }
+
+               if ( banner ) {
+                       banner.className = "";
+               }
+
+               if ( result ) {
+                       result.parentNode.removeChild( result );
+               }
+
+               if ( tests ) {
+                       result = document.createElement( "p" );
+                       result.id = "qunit-testresult";
+                       result.className = "result";
+                       tests.parentNode.insertBefore( result, tests );
+                       result.innerHTML = "Running...<br/>&nbsp;";
+               }
+       },
+
+       // Resets the test setup. Useful for tests that modify the DOM.
+       // If jQuery is available, uses jQuery's html(), otherwise just innerHTML.
+       reset: function() {
+               var fixture;
+
+               if ( window.jQuery ) {
+                       jQuery( "#qunit-fixture" ).html( config.fixture );
+               } else {
+                       fixture = id( "qunit-fixture" );
+                       if ( fixture ) {
+                               fixture.innerHTML = config.fixture;
+                       }
+               }
+       },
+
+       // Trigger an event on an element.
+       // @example triggerEvent( document.body, "click" );
+       triggerEvent: function( elem, type, event ) {
+               if ( document.createEvent ) {
+                       event = document.createEvent( "MouseEvents" );
+                       event.initMouseEvent(type, true, true, elem.ownerDocument.defaultView,
+                               0, 0, 0, 0, 0, false, false, false, false, 0, null);
+
+                       elem.dispatchEvent( event );
+               } else if ( elem.fireEvent ) {
+                       elem.fireEvent( "on" + type );
+               }
+       },
+
+       // Safe object type checking
+       is: function( type, obj ) {
+               return QUnit.objectType( obj ) == type;
+       },
+
+       objectType: function( obj ) {
+               if ( typeof obj === "undefined" ) {
+                               return "undefined";
+               // consider: typeof null === object
+               }
+               if ( obj === null ) {
+                               return "null";
+               }
+
+               var type = toString.call( obj ).match(/^\[object\s(.*)\]$/)[1] || "";
+
+               switch ( type ) {
+                       case "Number":
+                               if ( isNaN(obj) ) {
+                                       return "nan";
+                               }
+                               return "number";
+                       case "String":
+                       case "Boolean":
+                       case "Array":
+                       case "Date":
+                       case "RegExp":
+                       case "Function":
+                               return type.toLowerCase();
+               }
+               if ( typeof obj === "object" ) {
+                       return "object";
+               }
+               return undefined;
+       },
+
+       push: function( result, actual, expected, message ) {
+               if ( !config.current ) {
+                       throw new Error( "assertion outside test context, was " + sourceFromStacktrace() );
+               }
+
+               var output, source,
+                       details = {
+                               result: result,
+                               message: message,
+                               actual: actual,
+                               expected: expected
+                       };
+
+               message = escapeInnerText( message ) || ( result ? "okay" : "failed" );
+               message = "<span class='test-message'>" + message + "</span>";
+               output = message;
+
+               if ( !result ) {
+                       expected = escapeInnerText( QUnit.jsDump.parse(expected) );
+                       actual = escapeInnerText( QUnit.jsDump.parse(actual) );
+                       output += "<table><tr class='test-expected'><th>Expected: </th><td><pre>" + expected + "</pre></td></tr>";
+
+                       if ( actual != expected ) {
+                               output += "<tr class='test-actual'><th>Result: </th><td><pre>" + actual + "</pre></td></tr>";
+                               output += "<tr class='test-diff'><th>Diff: </th><td><pre>" + QUnit.diff( expected, actual ) + "</pre></td></tr>";
+                       }
+
+                       source = sourceFromStacktrace();
+
+                       if ( source ) {
+                               details.source = source;
+                               output += "<tr class='test-source'><th>Source: </th><td><pre>" + escapeInnerText( source ) + "</pre></td></tr>";
+                       }
+
+                       output += "</table>";
+               }
+
+               runLoggingCallbacks( "log", QUnit, details );
+
+               config.current.assertions.push({
+                       result: !!result,
+                       message: output
+               });
+       },
+
+       pushFailure: function( message, source, actual ) {
+               if ( !config.current ) {
+                       throw new Error( "pushFailure() assertion outside test context, was " + sourceFromStacktrace(2) );
+               }
+
+               var output,
+                       details = {
+                               result: false,
+                               message: message
+                       };
+
+               message = escapeInnerText( message ) || "error";
+               message = "<span class='test-message'>" + message + "</span>";
+               output = message;
+
+               output += "<table>";
+
+               if ( actual ) {
+                       output += "<tr class='test-actual'><th>Result: </th><td><pre>" + escapeInnerText( actual ) + "</pre></td></tr>";
+               }
+
+               if ( source ) {
+                       details.source = source;
+                       output += "<tr class='test-source'><th>Source: </th><td><pre>" + escapeInnerText( source ) + "</pre></td></tr>";
+               }
+
+               output += "</table>";
+
+               runLoggingCallbacks( "log", QUnit, details );
+
+               config.current.assertions.push({
+                       result: false,
+                       message: output
+               });
+       },
+
+       url: function( params ) {
+               params = extend( extend( {}, QUnit.urlParams ), params );
+               var key,
+                       querystring = "?";
+
+               for ( key in params ) {
+                       if ( !hasOwn.call( params, key ) ) {
+                               continue;
+                       }
+                       querystring += encodeURIComponent( key ) + "=" +
+                               encodeURIComponent( params[ key ] ) + "&";
+               }
+               return window.location.pathname + querystring.slice( 0, -1 );
+       },
+
+       extend: extend,
+       id: id,
+       addEvent: addEvent
+       // load, equiv, jsDump, diff: Attached later
+});
+
+/**
+ * @deprecated: Created for backwards compatibility with test runner that set the hook function
+ * into QUnit.{hook}, instead of invoking it and passing the hook function.
+ * QUnit.constructor is set to the empty F() above so that we can add to it's prototype here.
+ * Doing this allows us to tell if the following methods have been overwritten on the actual
+ * QUnit object.
+ */
+extend( QUnit.constructor.prototype, {
+
+       // Logging callbacks; all receive a single argument with the listed properties
+       // run test/logs.html for any related changes
+       begin: registerLoggingCallback( "begin" ),
+
+       // done: { failed, passed, total, runtime }
+       done: registerLoggingCallback( "done" ),
+
+       // log: { result, actual, expected, message }
+       log: registerLoggingCallback( "log" ),
+
+       // testStart: { name }
+       testStart: registerLoggingCallback( "testStart" ),
+
+       // testDone: { name, failed, passed, total }
+       testDone: registerLoggingCallback( "testDone" ),
+
+       // moduleStart: { name }
+       moduleStart: registerLoggingCallback( "moduleStart" ),
+
+       // moduleDone: { name, failed, passed, total }
+       moduleDone: registerLoggingCallback( "moduleDone" )
+});
+
+if ( typeof document === "undefined" || document.readyState === "complete" ) {
+       config.autorun = true;
+}
+
+QUnit.load = function() {
+       runLoggingCallbacks( "begin", QUnit, {} );
+
+       // Initialize the config, saving the execution queue
+       var banner, filter, i, label, len, main, ol, toolbar, userAgent, val, urlConfigCheckboxes,
+               urlConfigHtml = "",
+               oldconfig = extend( {}, config );
+
+       QUnit.init();
+       extend(config, oldconfig);
+
+       config.blocking = false;
+
+       len = config.urlConfig.length;
+
+       for ( i = 0; i < len; i++ ) {
+               val = config.urlConfig[i];
+               if ( typeof val === "string" ) {
+                       val = {
+                               id: val,
+                               label: val,
+                               tooltip: "[no tooltip available]"
+                       };
+               }
+               config[ val.id ] = QUnit.urlParams[ val.id ];
+               urlConfigHtml += "<input id='qunit-urlconfig-" + val.id + "' name='" + val.id + "' type='checkbox'" + ( config[ val.id ] ? " checked='checked'" : "" ) + " title='" + val.tooltip + "'><label for='qunit-urlconfig-" + val.id + "' title='" + val.tooltip + "'>" + val.label + "</label>";
+       }
+
+       // `userAgent` initialized at top of scope
+       userAgent = id( "qunit-userAgent" );
+       if ( userAgent ) {
+               userAgent.innerHTML = navigator.userAgent;
+       }
+
+       // `banner` initialized at top of scope
+       banner = id( "qunit-header" );
+       if ( banner ) {
+               banner.innerHTML = "<a href='" + QUnit.url({ filter: undefined, module: undefined, testNumber: undefined }) + "'>" + banner.innerHTML + "</a> ";
+       }
+
+       // `toolbar` initialized at top of scope
+       toolbar = id( "qunit-testrunner-toolbar" );
+       if ( toolbar ) {
+               // `filter` initialized at top of scope
+               filter = document.createElement( "input" );
+               filter.type = "checkbox";
+               filter.id = "qunit-filter-pass";
+
+               addEvent( filter, "click", function() {
+                       var tmp,
+                               ol = document.getElementById( "qunit-tests" );
+
+                       if ( filter.checked ) {
+                               ol.className = ol.className + " hidepass";
+                       } else {
+                               tmp = " " + ol.className.replace( /[\n\t\r]/g, " " ) + " ";
+                               ol.className = tmp.replace( / hidepass /, " " );
+                       }
+                       if ( defined.sessionStorage ) {
+                               if (filter.checked) {
+                                       sessionStorage.setItem( "qunit-filter-passed-tests", "true" );
+                               } else {
+                                       sessionStorage.removeItem( "qunit-filter-passed-tests" );
+                               }
+                       }
+               });
+
+               if ( config.hidepassed || defined.sessionStorage && sessionStorage.getItem( "qunit-filter-passed-tests" ) ) {
+                       filter.checked = true;
+                       // `ol` initialized at top of scope
+                       ol = document.getElementById( "qunit-tests" );
+                       ol.className = ol.className + " hidepass";
+               }
+               toolbar.appendChild( filter );
+
+               // `label` initialized at top of scope
+               label = document.createElement( "label" );
+               label.setAttribute( "for", "qunit-filter-pass" );
+               label.setAttribute( "title", "Only show tests and assertons that fail. Stored in sessionStorage." );
+               label.innerHTML = "Hide passed tests";
+               toolbar.appendChild( label );
+
+               urlConfigCheckboxes = document.createElement( 'span' );
+               urlConfigCheckboxes.innerHTML = urlConfigHtml;
+               addEvent( urlConfigCheckboxes, "change", function( event ) {
+                       var params = {};
+                       params[ event.target.name ] = event.target.checked ? true : undefined;
+                       window.location = QUnit.url( params );
+               });
+               toolbar.appendChild( urlConfigCheckboxes );
+       }
+
+       // `main` initialized at top of scope
+       main = id( "qunit-fixture" );
+       if ( main ) {
+               config.fixture = main.innerHTML;
+       }
+
+       if ( config.autostart ) {
+               QUnit.start();
+       }
+};
+
+addEvent( window, "load", QUnit.load );
+
+// `onErrorFnPrev` initialized at top of scope
+// Preserve other handlers
+onErrorFnPrev = window.onerror;
+
+// Cover uncaught exceptions
+// Returning true will surpress the default browser handler,
+// returning false will let it run.
+window.onerror = function ( error, filePath, linerNr ) {
+       var ret = false;
+       if ( onErrorFnPrev ) {
+               ret = onErrorFnPrev( error, filePath, linerNr );
+       }
+
+       // Treat return value as window.onerror itself does,
+       // Only do our handling if not surpressed.
+       if ( ret !== true ) {
+               if ( QUnit.config.current ) {
+                       if ( QUnit.config.current.ignoreGlobalErrors ) {
+                               return true;
+                       }
+                       QUnit.pushFailure( error, filePath + ":" + linerNr );
+               } else {
+                       QUnit.test( "global failure", function() {
+                               QUnit.pushFailure( error, filePath + ":" + linerNr );
+                       });
+               }
+               return false;
+       }
+
+       return ret;
+};
+
+function done() {
+       config.autorun = true;
+
+       // Log the last module results
+       if ( config.currentModule ) {
+               runLoggingCallbacks( "moduleDone", QUnit, {
+                       name: config.currentModule,
+                       failed: config.moduleStats.bad,
+                       passed: config.moduleStats.all - config.moduleStats.bad,
+                       total: config.moduleStats.all
+               });
+       }
+
+       var i, key,
+               banner = id( "qunit-banner" ),
+               tests = id( "qunit-tests" ),
+               runtime = +new Date() - config.started,
+               passed = config.stats.all - config.stats.bad,
+               html = [
+                       "Tests completed in ",
+                       runtime,
+                       " milliseconds.<br/>",
+                       "<span class='passed'>",
+                       passed,
+                       "</span> tests of <span class='total'>",
+                       config.stats.all,
+                       "</span> passed, <span class='failed'>",
+                       config.stats.bad,
+                       "</span> failed."
+               ].join( "" );
+
+       if ( banner ) {
+               banner.className = ( config.stats.bad ? "qunit-fail" : "qunit-pass" );
+       }
+
+       if ( tests ) {
+               id( "qunit-testresult" ).innerHTML = html;
+       }
+
+       if ( config.altertitle && typeof document !== "undefined" && document.title ) {
+               // show ✖ for good, ✔ for bad suite result in title
+               // use escape sequences in case file gets loaded with non-utf-8-charset
+               document.title = [
+                       ( config.stats.bad ? "\u2716" : "\u2714" ),
+                       document.title.replace( /^[\u2714\u2716] /i, "" )
+               ].join( " " );
+       }
+
+       // clear own sessionStorage items if all tests passed
+       if ( config.reorder && defined.sessionStorage && config.stats.bad === 0 ) {
+               // `key` & `i` initialized at top of scope
+               for ( i = 0; i < sessionStorage.length; i++ ) {
+                       key = sessionStorage.key( i++ );
+                       if ( key.indexOf( "qunit-test-" ) === 0 ) {
+                               sessionStorage.removeItem( key );
+                       }
+               }
+       }
+
+       runLoggingCallbacks( "done", QUnit, {
+               failed: config.stats.bad,
+               passed: passed,
+               total: config.stats.all,
+               runtime: runtime
+       });
+}
+
+/** @return Boolean: true if this test should be ran */
+function validTest( test ) {
+       var include,
+               filter = config.filter && config.filter.toLowerCase(),
+               module = config.module && config.module.toLowerCase(),
+               fullName = (test.module + ": " + test.testName).toLowerCase();
+
+       if ( config.testNumber ) {
+               return test.testNumber === config.testNumber;
+       }
+
+       if ( module && ( !test.module || test.module.toLowerCase() !== module ) ) {
+               return false;
+       }
+
+       if ( !filter ) {
+               return true;
+       }
+
+       include = filter.charAt( 0 ) !== "!";
+       if ( !include ) {
+               filter = filter.slice( 1 );
+       }
+
+       // If the filter matches, we need to honour include
+       if ( fullName.indexOf( filter ) !== -1 ) {
+               return include;
+       }
+
+       // Otherwise, do the opposite
+       return !include;
+}
+
+// so far supports only Firefox, Chrome and Opera (buggy), Safari (for real exceptions)
+// Later Safari and IE10 are supposed to support error.stack as well
+// See also https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error/Stack
+function extractStacktrace( e, offset ) {
+       offset = offset === undefined ? 3 : offset;
+
+       var stack, include, i, regex;
+
+       if ( e.stacktrace ) {
+               // Opera
+               return e.stacktrace.split( "\n" )[ offset + 3 ];
+       } else if ( e.stack ) {
+               // Firefox, Chrome
+               stack = e.stack.split( "\n" );
+               if (/^error$/i.test( stack[0] ) ) {
+                       stack.shift();
+               }
+               if ( fileName ) {
+                       include = [];
+                       for ( i = offset; i < stack.length; i++ ) {
+                               if ( stack[ i ].indexOf( fileName ) != -1 ) {
+                                       break;
+                               }
+                               include.push( stack[ i ] );
+                       }
+                       if ( include.length ) {
+                               return include.join( "\n" );
+                       }
+               }
+               return stack[ offset ];
+       } else if ( e.sourceURL ) {
+               // Safari, PhantomJS
+               // hopefully one day Safari provides actual stacktraces
+               // exclude useless self-reference for generated Error objects
+               if ( /qunit.js$/.test( e.sourceURL ) ) {
+                       return;
+               }
+               // for actual exceptions, this is useful
+               return e.sourceURL + ":" + e.line;
+       }
+}
+function sourceFromStacktrace( offset ) {
+       try {
+               throw new Error();
+       } catch ( e ) {
+               return extractStacktrace( e, offset );
+       }
+}
+
+function escapeInnerText( s ) {
+       if ( !s ) {
+               return "";
+       }
+       s = s + "";
+       return s.replace( /[\&<>]/g, function( s ) {
+               switch( s ) {
+                       case "&": return "&amp;";
+                       case "<": return "&lt;";
+                       case ">": return "&gt;";
+                       default: return s;
+               }
+       });
+}
+
+function synchronize( callback, last ) {
+       config.queue.push( callback );
+
+       if ( config.autorun && !config.blocking ) {
+               process( last );
+       }
+}
+
+function process( last ) {
+       function next() {
+               process( last );
+       }
+       var start = new Date().getTime();
+       config.depth = config.depth ? config.depth + 1 : 1;
+
+       while ( config.queue.length && !config.blocking ) {
+               if ( !defined.setTimeout || config.updateRate <= 0 || ( ( new Date().getTime() - start ) < config.updateRate ) ) {
+                       config.queue.shift()();
+               } else {
+                       window.setTimeout( next, 13 );
+                       break;
+               }
+       }
+       config.depth--;
+       if ( last && !config.blocking && !config.queue.length && config.depth === 0 ) {
+               done();
+       }
+}
+
+function saveGlobal() {
+       config.pollution = [];
+
+       if ( config.noglobals ) {
+               for ( var key in window ) {
+                       // in Opera sometimes DOM element ids show up here, ignore them
+                       if ( !hasOwn.call( window, key ) || /^qunit-test-output/.test( key ) ) {
+                               continue;
+                       }
+                       config.pollution.push( key );
+               }
+       }
+}
+
+function checkPollution( name ) {
+       var newGlobals,
+               deletedGlobals,
+               old = config.pollution;
+
+       saveGlobal();
+
+       newGlobals = diff( config.pollution, old );
+       if ( newGlobals.length > 0 ) {
+               QUnit.pushFailure( "Introduced global variable(s): " + newGlobals.join(", ") );
+       }
+
+       deletedGlobals = diff( old, config.pollution );
+       if ( deletedGlobals.length > 0 ) {
+               QUnit.pushFailure( "Deleted global variable(s): " + deletedGlobals.join(", ") );
+       }
+}
+
+// returns a new Array with the elements that are in a but not in b
+function diff( a, b ) {
+       var i, j,
+               result = a.slice();
+
+       for ( i = 0; i < result.length; i++ ) {
+               for ( j = 0; j < b.length; j++ ) {
+                       if ( result[i] === b[j] ) {
+                               result.splice( i, 1 );
+                               i--;
+                               break;
+                       }
+               }
+       }
+       return result;
+}
+
+function extend( a, b ) {
+       for ( var prop in b ) {
+               if ( b[ prop ] === undefined ) {
+                       delete a[ prop ];
+
+               // Avoid "Member not found" error in IE8 caused by setting window.constructor
+               } else if ( prop !== "constructor" || a !== window ) {
+                       a[ prop ] = b[ prop ];
+               }
+       }
+
+       return a;
+}
+
+function addEvent( elem, type, fn ) {
+       if ( elem.addEventListener ) {
+               elem.addEventListener( type, fn, false );
+       } else if ( elem.attachEvent ) {
+               elem.attachEvent( "on" + type, fn );
+       } else {
+               fn();
+       }
+}
+
+function id( name ) {
+       return !!( typeof document !== "undefined" && document && document.getElementById ) &&
+               document.getElementById( name );
+}
+
+function registerLoggingCallback( key ) {
+       return function( callback ) {
+               config[key].push( callback );
+       };
+}
+
+// Supports deprecated method of completely overwriting logging callbacks
+function runLoggingCallbacks( key, scope, args ) {
+       //debugger;
+       var i, callbacks;
+       if ( QUnit.hasOwnProperty( key ) ) {
+               QUnit[ key ].call(scope, args );
+       } else {
+               callbacks = config[ key ];
+               for ( i = 0; i < callbacks.length; i++ ) {
+                       callbacks[ i ].call( scope, args );
+               }
+       }
+}
+
+// Test for equality any JavaScript type.
+// Author: Philippe Rathé <prathe@gmail.com>
+QUnit.equiv = (function() {
+
+       // Call the o related callback with the given arguments.
+       function bindCallbacks( o, callbacks, args ) {
+               var prop = QUnit.objectType( o );
+               if ( prop ) {
+                       if ( QUnit.objectType( callbacks[ prop ] ) === "function" ) {
+                               return callbacks[ prop ].apply( callbacks, args );
+                       } else {
+                               return callbacks[ prop ]; // or undefined
+                       }
+               }
+       }
+
+       // the real equiv function
+       var innerEquiv,
+               // stack to decide between skip/abort functions
+               callers = [],
+               // stack to avoiding loops from circular referencing
+               parents = [],
+
+               getProto = Object.getPrototypeOf || function ( obj ) {
+                       return obj.__proto__;
+               },
+               callbacks = (function () {
+
+                       // for string, boolean, number and null
+                       function useStrictEquality( b, a ) {
+                               if ( b instanceof a.constructor || a instanceof b.constructor ) {
+                                       // to catch short annotaion VS 'new' annotation of a
+                                       // declaration
+                                       // e.g. var i = 1;
+                                       // var j = new Number(1);
+                                       return a == b;
+                               } else {
+                                       return a === b;
+                               }
+                       }
+
+                       return {
+                               "string": useStrictEquality,
+                               "boolean": useStrictEquality,
+                               "number": useStrictEquality,
+                               "null": useStrictEquality,
+                               "undefined": useStrictEquality,
+
+                               "nan": function( b ) {
+                                       return isNaN( b );
+                               },
+
+                               "date": function( b, a ) {
+                                       return QUnit.objectType( b ) === "date" && a.valueOf() === b.valueOf();
+                               },
+
+                               "regexp": function( b, a ) {
+                                       return QUnit.objectType( b ) === "regexp" &&
+                                               // the regex itself
+                                               a.source === b.source &&
+                                               // and its modifers
+                                               a.global === b.global &&
+                                               // (gmi) ...
+                                               a.ignoreCase === b.ignoreCase &&
+                                               a.multiline === b.multiline;
+                               },
+
+                               // - skip when the property is a method of an instance (OOP)
+                               // - abort otherwise,
+                               // initial === would have catch identical references anyway
+                               "function": function() {
+                                       var caller = callers[callers.length - 1];
+                                       return caller !== Object && typeof caller !== "undefined";
+                               },
+
+                               "array": function( b, a ) {
+                                       var i, j, len, loop;
+
+                                       // b could be an object literal here
+                                       if ( QUnit.objectType( b ) !== "array" ) {
+                                               return false;
+                                       }
+
+                                       len = a.length;
+                                       if ( len !== b.length ) {
+                                               // safe and faster
+                                               return false;
+                                       }
+
+                                       // track reference to avoid circular references
+                                       parents.push( a );
+                                       for ( i = 0; i < len; i++ ) {
+                                               loop = false;
+                                               for ( j = 0; j < parents.length; j++ ) {
+                                                       if ( parents[j] === a[i] ) {
+                                                               loop = true;// dont rewalk array
+                                                       }
+                                               }
+                                               if ( !loop && !innerEquiv(a[i], b[i]) ) {
+                                                       parents.pop();
+                                                       return false;
+                                               }
+                                       }
+                                       parents.pop();
+                                       return true;
+                               },
+
+                               "object": function( b, a ) {
+                                       var i, j, loop,
+                                               // Default to true
+                                               eq = true,
+                                               aProperties = [],
+                                               bProperties = [];
+
+                                       // comparing constructors is more strict than using
+                                       // instanceof
+                                       if ( a.constructor !== b.constructor ) {
+                                               // Allow objects with no prototype to be equivalent to
+                                               // objects with Object as their constructor.
+                                               if ( !(( getProto(a) === null && getProto(b) === Object.prototype ) ||
+                                                       ( getProto(b) === null && getProto(a) === Object.prototype ) ) ) {
+                                                               return false;
+                                               }
+                                       }
+
+                                       // stack constructor before traversing properties
+                                       callers.push( a.constructor );
+                                       // track reference to avoid circular references
+                                       parents.push( a );
+
+                                       for ( i in a ) { // be strict: don't ensures hasOwnProperty
+                                                                       // and go deep
+                                               loop = false;
+                                               for ( j = 0; j < parents.length; j++ ) {
+                                                       if ( parents[j] === a[i] ) {
+                                                               // don't go down the same path twice
+                                                               loop = true;
+                                                       }
+                                               }
+                                               aProperties.push(i); // collect a's properties
+
+                                               if (!loop && !innerEquiv( a[i], b[i] ) ) {
+                                                       eq = false;
+                                                       break;
+                                               }
+                                       }
+
+                                       callers.pop(); // unstack, we are done
+                                       parents.pop();
+
+                                       for ( i in b ) {
+                                               bProperties.push( i ); // collect b's properties
+                                       }
+
+                                       // Ensures identical properties name
+                                       return eq && innerEquiv( aProperties.sort(), bProperties.sort() );
+                               }
+                       };
+               }());
+
+       innerEquiv = function() { // can take multiple arguments
+               var args = [].slice.apply( arguments );
+               if ( args.length < 2 ) {
+                       return true; // end transition
+               }
+
+               return (function( a, b ) {
+                       if ( a === b ) {
+                               return true; // catch the most you can
+                       } else if ( a === null || b === null || typeof a === "undefined" ||
+                                       typeof b === "undefined" ||
+                                       QUnit.objectType(a) !== QUnit.objectType(b) ) {
+                               return false; // don't lose time with error prone cases
+                       } else {
+                               return bindCallbacks(a, callbacks, [ b, a ]);
+                       }
+
+                       // apply transition with (1..n) arguments
+               }( args[0], args[1] ) && arguments.callee.apply( this, args.splice(1, args.length - 1 )) );
+       };
+
+       return innerEquiv;
+}());
+
+/**
+ * jsDump Copyright (c) 2008 Ariel Flesler - aflesler(at)gmail(dot)com |
+ * http://flesler.blogspot.com Licensed under BSD
+ * (http://www.opensource.org/licenses/bsd-license.php) Date: 5/15/2008
+ *
+ * @projectDescription Advanced and extensible data dumping for Javascript.
+ * @version 1.0.0
+ * @author Ariel Flesler
+ * @link {http://flesler.blogspot.com/2008/05/jsdump-pretty-dump-of-any-javascript.html}
+ */
+QUnit.jsDump = (function() {
+       function quote( str ) {
+               return '"' + str.toString().replace( /"/g, '\\"' ) + '"';
+       }
+       function literal( o ) {
+               return o + "";
+       }
+       function join( pre, arr, post ) {
+               var s = jsDump.separator(),
+                       base = jsDump.indent(),
+                       inner = jsDump.indent(1);
+               if ( arr.join ) {
+                       arr = arr.join( "," + s + inner );
+               }
+               if ( !arr ) {
+                       return pre + post;
+               }
+               return [ pre, inner + arr, base + post ].join(s);
+       }
+       function array( arr, stack ) {
+               var i = arr.length, ret = new Array(i);
+               this.up();
+               while ( i-- ) {
+                       ret[i] = this.parse( arr[i] , undefined , stack);
+               }
+               this.down();
+               return join( "[", ret, "]" );
+       }
+
+       var reName = /^function (\w+)/,
+               jsDump = {
+                       parse: function( obj, type, stack ) { //type is used mostly internally, you can fix a (custom)type in advance
+                               stack = stack || [ ];
+                               var inStack, res,
+                                       parser = this.parsers[ type || this.typeOf(obj) ];
+
+                               type = typeof parser;
+                               inStack = inArray( obj, stack );
+
+                               if ( inStack != -1 ) {
+                                       return "recursion(" + (inStack - stack.length) + ")";
+                               }
+                               //else
+                               if ( type == "function" )  {
+                                       stack.push( obj );
+                                       res = parser.call( this, obj, stack );
+                                       stack.pop();
+                                       return res;
+                               }
+                               // else
+                               return ( type == "string" ) ? parser : this.parsers.error;
+                       },
+                       typeOf: function( obj ) {
+                               var type;
+                               if ( obj === null ) {
+                                       type = "null";
+                               } else if ( typeof obj === "undefined" ) {
+                                       type = "undefined";
+                               } else if ( QUnit.is( "regexp", obj) ) {
+                                       type = "regexp";
+                               } else if ( QUnit.is( "date", obj) ) {
+                                       type = "date";
+                               } else if ( QUnit.is( "function", obj) ) {
+                                       type = "function";
+                               } else if ( typeof obj.setInterval !== undefined && typeof obj.document !== "undefined" && typeof obj.nodeType === "undefined" ) {
+                                       type = "window";
+                               } else if ( obj.nodeType === 9 ) {
+                                       type = "document";
+                               } else if ( obj.nodeType ) {
+                                       type = "node";
+                               } else if (
+                                       // native arrays
+                                       toString.call( obj ) === "[object Array]" ||
+                                       // NodeList objects
+                                       ( typeof obj.length === "number" && typeof obj.item !== "undefined" && ( obj.length ? obj.item(0) === obj[0] : ( obj.item( 0 ) === null && typeof obj[0] === "undefined" ) ) )
+                               ) {
+                                       type = "array";
+                               } else {
+                                       type = typeof obj;
+                               }
+                               return type;
+                       },
+                       separator: function() {
+                               return this.multiline ? this.HTML ? "<br />" : "\n" : this.HTML ? "&nbsp;" : " ";
+                       },
+                       indent: function( extra ) {// extra can be a number, shortcut for increasing-calling-decreasing
+                               if ( !this.multiline ) {
+                                       return "";
+                               }
+                               var chr = this.indentChar;
+                               if ( this.HTML ) {
+                                       chr = chr.replace( /\t/g, "   " ).replace( / /g, "&nbsp;" );
+                               }
+                               return new Array( this._depth_ + (extra||0) ).join(chr);
+                       },
+                       up: function( a ) {
+                               this._depth_ += a || 1;
+                       },
+                       down: function( a ) {
+                               this._depth_ -= a || 1;
+                       },
+                       setParser: function( name, parser ) {
+                               this.parsers[name] = parser;
+                       },
+                       // The next 3 are exposed so you can use them
+                       quote: quote,
+                       literal: literal,
+                       join: join,
+                       //
+                       _depth_: 1,
+                       // This is the list of parsers, to modify them, use jsDump.setParser
+                       parsers: {
+                               window: "[Window]",
+                               document: "[Document]",
+                               error: "[ERROR]", //when no parser is found, shouldn"t happen
+                               unknown: "[Unknown]",
+                               "null": "null",
+                               "undefined": "undefined",
+                               "function": function( fn ) {
+                                       var ret = "function",
+                                               name = "name" in fn ? fn.name : (reName.exec(fn) || [])[1];//functions never have name in IE
+
+                                       if ( name ) {
+                                               ret += " " + name;
+                                       }
+                                       ret += "( ";
+
+                                       ret = [ ret, QUnit.jsDump.parse( fn, "functionArgs" ), "){" ].join( "" );
+                                       return join( ret, QUnit.jsDump.parse(fn,"functionCode" ), "}" );
+                               },
+                               array: array,
+                               nodelist: array,
+                               "arguments": array,
+                               object: function( map, stack ) {
+                                       var ret = [ ], keys, key, val, i;
+                                       QUnit.jsDump.up();
+                                       if ( Object.keys ) {
+                                               keys = Object.keys( map );
+                                       } else {
+                                               keys = [];
+                                               for ( key in map ) {
+                                                       keys.push( key );
+                                               }
+                                       }
+                                       keys.sort();
+                                       for ( i = 0; i < keys.length; i++ ) {
+                                               key = keys[ i ];
+                                               val = map[ key ];
+                                               ret.push( QUnit.jsDump.parse( key, "key" ) + ": " + QUnit.jsDump.parse( val, undefined, stack ) );
+                                       }
+                                       QUnit.jsDump.down();
+                                       return join( "{", ret, "}" );
+                               },
+                               node: function( node ) {
+                                       var a, val,
+                                               open = QUnit.jsDump.HTML ? "&lt;" : "<",
+                                               close = QUnit.jsDump.HTML ? "&gt;" : ">",
+                                               tag = node.nodeName.toLowerCase(),
+                                               ret = open + tag;
+
+                                       for ( a in QUnit.jsDump.DOMAttrs ) {
+                                               val = node[ QUnit.jsDump.DOMAttrs[a] ];
+                                               if ( val ) {
+                                                       ret += " " + a + "=" + QUnit.jsDump.parse( val, "attribute" );
+                                               }
+                                       }
+                                       return ret + close + open + "/" + tag + close;
+                               },
+                               functionArgs: function( fn ) {//function calls it internally, it's the arguments part of the function
+                                       var args,
+                                               l = fn.length;
+
+                                       if ( !l ) {
+                                               return "";
+                                       }
+
+                                       args = new Array(l);
+                                       while ( l-- ) {
+                                               args[l] = String.fromCharCode(97+l);//97 is 'a'
+                                       }
+                                       return " " + args.join( ", " ) + " ";
+                               },
+                               key: quote, //object calls it internally, the key part of an item in a map
+                               functionCode: "[code]", //function calls it internally, it's the content of the function
+                               attribute: quote, //node calls it internally, it's an html attribute value
+                               string: quote,
+                               date: quote,
+                               regexp: literal, //regex
+                               number: literal,
+                               "boolean": literal
+                       },
+                       DOMAttrs: {
+                               //attributes to dump from nodes, name=>realName
+                               id: "id",
+                               name: "name",
+                               "class": "className"
+                       },
+                       HTML: false,//if true, entities are escaped ( <, >, \t, space and \n )
+                       indentChar: "  ",//indentation unit
+                       multiline: true //if true, items in a collection, are separated by a \n, else just a space.
+               };
+
+       return jsDump;
+}());
+
+// from Sizzle.js
+function getText( elems ) {
+       var i, elem,
+               ret = "";
+
+       for ( i = 0; elems[i]; i++ ) {
+               elem = elems[i];
+
+               // Get the text from text nodes and CDATA nodes
+               if ( elem.nodeType === 3 || elem.nodeType === 4 ) {
+                       ret += elem.nodeValue;
+
+               // Traverse everything else, except comment nodes
+               } else if ( elem.nodeType !== 8 ) {
+                       ret += getText( elem.childNodes );
+               }
+       }
+
+       return ret;
+}
+
+// from jquery.js
+function inArray( elem, array ) {
+       if ( array.indexOf ) {
+               return array.indexOf( elem );
+       }
+
+       for ( var i = 0, length = array.length; i < length; i++ ) {
+               if ( array[ i ] === elem ) {
+                       return i;
+               }
+       }
+
+       return -1;
+}
+
+/*
+ * Javascript Diff Algorithm
+ *  By John Resig (http://ejohn.org/)
+ *  Modified by Chu Alan "sprite"
+ *
+ * Released under the MIT license.
+ *
+ * More Info:
+ *  http://ejohn.org/projects/javascript-diff-algorithm/
+ *
+ * Usage: QUnit.diff(expected, actual)
+ *
+ * QUnit.diff( "the quick brown fox jumped over", "the quick fox jumps over" ) == "the  quick <del>brown </del> fox <del>jumped </del><ins>jumps </ins> over"
+ */
+QUnit.diff = (function() {
+       function diff( o, n ) {
+               var i,
+                       ns = {},
+                       os = {};
+
+               for ( i = 0; i < n.length; i++ ) {
+                       if ( ns[ n[i] ] == null ) {
+                               ns[ n[i] ] = {
+                                       rows: [],
+                                       o: null
+                               };
+                       }
+                       ns[ n[i] ].rows.push( i );
+               }
+
+               for ( i = 0; i < o.length; i++ ) {
+                       if ( os[ o[i] ] == null ) {
+                               os[ o[i] ] = {
+                                       rows: [],
+                                       n: null
+                               };
+                       }
+                       os[ o[i] ].rows.push( i );
+               }
+
+               for ( i in ns ) {
+                       if ( !hasOwn.call( ns, i ) ) {
+                               continue;
+                       }
+                       if ( ns[i].rows.length == 1 && typeof os[i] != "undefined" && os[i].rows.length == 1 ) {
+                               n[ ns[i].rows[0] ] = {
+                                       text: n[ ns[i].rows[0] ],
+                                       row: os[i].rows[0]
+                               };
+                               o[ os[i].rows[0] ] = {
+                                       text: o[ os[i].rows[0] ],
+                                       row: ns[i].rows[0]
+                               };
+                       }
+               }
+
+               for ( i = 0; i < n.length - 1; i++ ) {
+                       if ( n[i].text != null && n[ i + 1 ].text == null && n[i].row + 1 < o.length && o[ n[i].row + 1 ].text == null &&
+                                               n[ i + 1 ] == o[ n[i].row + 1 ] ) {
+
+                               n[ i + 1 ] = {
+                                       text: n[ i + 1 ],
+                                       row: n[i].row + 1
+                               };
+                               o[ n[i].row + 1 ] = {
+                                       text: o[ n[i].row + 1 ],
+                                       row: i + 1
+                               };
+                       }
+               }
+
+               for ( i = n.length - 1; i > 0; i-- ) {
+                       if ( n[i].text != null && n[ i - 1 ].text == null && n[i].row > 0 && o[ n[i].row - 1 ].text == null &&
+                                               n[ i - 1 ] == o[ n[i].row - 1 ]) {
+
+                               n[ i - 1 ] = {
+                                       text: n[ i - 1 ],
+                                       row: n[i].row - 1
+                               };
+                               o[ n[i].row - 1 ] = {
+                                       text: o[ n[i].row - 1 ],
+                                       row: i - 1
+                               };
+                       }
+               }
+
+               return {
+                       o: o,
+                       n: n
+               };
+       }
+
+       return function( o, n ) {
+               o = o.replace( /\s+$/, "" );
+               n = n.replace( /\s+$/, "" );
+
+               var i, pre,
+                       str = "",
+                       out = diff( o === "" ? [] : o.split(/\s+/), n === "" ? [] : n.split(/\s+/) ),
+                       oSpace = o.match(/\s+/g),
+                       nSpace = n.match(/\s+/g);
+
+               if ( oSpace == null ) {
+                       oSpace = [ " " ];
+               }
+               else {
+                       oSpace.push( " " );
+               }
+
+               if ( nSpace == null ) {
+                       nSpace = [ " " ];
+               }
+               else {
+                       nSpace.push( " " );
+               }
+
+               if ( out.n.length === 0 ) {
+                       for ( i = 0; i < out.o.length; i++ ) {
+                               str += "<del>" + out.o[i] + oSpace[i] + "</del>";
+                       }
+               }
+               else {
+                       if ( out.n[0].text == null ) {
+                               for ( n = 0; n < out.o.length && out.o[n].text == null; n++ ) {
+                                       str += "<del>" + out.o[n] + oSpace[n] + "</del>";
+                               }
+                       }
+
+                       for ( i = 0; i < out.n.length; i++ ) {
+                               if (out.n[i].text == null) {
+                                       str += "<ins>" + out.n[i] + nSpace[i] + "</ins>";
+                               }
+                               else {
+                                       // `pre` initialized at top of scope
+                                       pre = "";
+
+                                       for ( n = out.n[i].row + 1; n < out.o.length && out.o[n].text == null; n++ ) {
+                                               pre += "<del>" + out.o[n] + oSpace[n] + "</del>";
+                                       }
+                                       str += " " + out.n[i].text + nSpace[i] + pre;
+                               }
+                       }
+               }
+
+               return str;
+       };
+}());
+
+// for CommonJS enviroments, export everything
+if ( typeof exports !== "undefined" ) {
+       extend(exports, QUnit);
+}
+
+// get at whatever the global object is, like window in browsers
+}( (function() {return this;}.call()) ));
diff --git a/js/modernizr/test/qunit/run-qunit.js b/js/modernizr/test/qunit/run-qunit.js
new file mode 100644 (file)
index 0000000..5617ee4
--- /dev/null
@@ -0,0 +1,72 @@
+/**
+* Wait until the test condition is true or a timeout occurs. Useful for waiting
+* on a server response or for a ui change (fadeIn, etc.) to occur.
+*
+* @param testFx javascript condition that evaluates to a boolean,
+* it can be passed in as a string (e.g.: "1 == 1" or "$('#bar').is(':visible')" or
+* as a callback function.
+* @param onReady what to do when testFx condition is fulfilled,
+* it can be passed in as a string (e.g.: "1 == 1" or "$('#bar').is(':visible')" or
+* as a callback function.
+* @param timeOutMillis the max amount of time to wait. If not specified, 3 sec is used.
+*/
+function waitFor(testFx, onReady, timeOutMillis) {
+    var maxtimeOutMillis = timeOutMillis ? timeOutMillis : 3001, //< Default Max Timout is 3s
+        start = new Date().getTime(),
+        condition = false,
+        interval = setInterval(function() {
+            if ( (new Date().getTime() - start < maxtimeOutMillis) && !condition ) {
+                // If not time-out yet and condition not yet fulfilled
+                condition = (typeof(testFx) === "string" ? eval(testFx) : testFx()); //< defensive code
+            } else {
+                if(!condition) {
+                    // If condition still not fulfilled (timeout but condition is 'false')
+                    console.log("'waitFor()' timeout");
+                    phantom.exit(1);
+                } else {
+                    // Condition fulfilled (timeout and/or condition is 'true')
+                    typeof(onReady) === "string" ? eval(onReady) : onReady(); //< Do what it's supposed to do once the condition is fulfilled
+                    clearInterval(interval); //< Stop this interval
+                }
+            }
+        }, 100); //< repeat check every 250ms
+};
+
+
+if (phantom.args.length === 0 || phantom.args.length > 2) {
+    console.log('Usage: run-qunit.js URL');
+    phantom.exit();
+}
+
+var page = new WebPage();
+
+// Route "console.log()" calls from within the Page context to the main Phantom context (i.e. current "this")
+page.onConsoleMessage = function(msg) {
+    console.log(msg);
+};
+
+page.open(phantom.args[0], function(status){
+    if (status !== "success") {
+        console.log("Unable to access network");
+        phantom.exit();
+    } else {
+        waitFor(function(){
+            return page.evaluate(function(){
+                var el = document.getElementById('qunit-testresult');
+                if (el && el.innerText.match('completed')) {
+                    return true;
+                }
+                return false;
+            });
+        }, function(){
+            var failedNum = page.evaluate(function(){
+                var el = document.getElementById('qunit-testresult');
+                try {
+                    return el.getElementsByClassName('failed')[0].innerHTML;
+                } catch (e) { }
+                return 10000;
+            });
+            phantom.exit((parseInt(failedNum, 10) > 0) ? 1 : 0);
+        });
+    }
+});
\ No newline at end of file
diff --git a/js/nivo-lightbox.js b/js/nivo-lightbox.js
deleted file mode 100644 (file)
index b39e594..0000000
+++ /dev/null
@@ -1,393 +0,0 @@
-/*
- * Nivo Lightbox v1.2.0
- * http://dev7studios.com/nivo-lightbox
- *
- * Copyright 2013, Dev7studios
- * Free to use and abuse under the MIT license.
- * http://www.opensource.org/licenses/mit-license.php
- */
-
-;(function($, window, document, undefined){
-
-    var pluginName = 'nivoLightbox',
-        defaults = {
-            effect: 'fade',
-            theme: 'default',
-            keyboardNav: true,
-            clickOverlayToClose: true,
-            onInit: function(){},
-            beforeShowLightbox: function(){},
-            afterShowLightbox: function(lightbox){},
-            beforeHideLightbox: function(){},
-            afterHideLightbox: function(){},
-            onPrev: function(element){},
-            onNext: function(element){},
-            errorMessage: 'The requested content cannot be loaded. Please try again later.'
-        };
-
-    function NivoLightbox(element, options){
-        this.el = element;
-        this.$el = $(this.el);
-
-        this.options = $.extend({}, defaults, options);
-
-        this._defaults = defaults;
-        this._name = pluginName;
-
-        this.init();
-    }
-
-    NivoLightbox.prototype = {
-
-        init: function(){
-                       var $this = this;
-
-                       // Need this so we don't use CSS transitions in mobile
-                       if(!$('html').hasClass('nivo-lightbox-notouch')) $('html').addClass('nivo-lightbox-notouch');
-                       if('ontouchstart' in document) $('html').removeClass('nivo-lightbox-notouch');
-
-                       // Setup the click
-            this.$el.on('click', function(e){
-                $this.showLightbox(e);
-            });
-
-            // keyboardNav
-            if(this.options.keyboardNav){
-                $('body').off('keyup').on('keyup', function(e){
-                    var code = (e.keyCode ? e.keyCode : e.which);
-                    // Escape
-                    if(code == 27) $this.destructLightbox();
-                    // Left
-                    if(code == 37) $('.nivo-lightbox-prev').trigger('click');
-                    // Right
-                    if(code == 39) $('.nivo-lightbox-next').trigger('click');
-                               });
-                       }
-
-                       this.options.onInit.call(this);
-
-        },
-
-        showLightbox: function(e){
-            var $this = this,
-                currentLink = this.$el;
-
-                       // Check content
-                       var check = this.checkContent(currentLink);
-                       if(!check) return;
-
-                       e.preventDefault();
-            this.options.beforeShowLightbox.call(this);
-            var lightbox = this.constructLightbox();
-            if(!lightbox) return;
-            var content = lightbox.find('.nivo-lightbox-content');
-            if(!content) return;
-
-            $('body').addClass('nivo-lightbox-body-effect-'+ this.options.effect);
-
-                       this.processContent( content, currentLink );
-
-            // Nav
-            if(this.$el.attr('data-lightbox-gallery')){
-                var galleryItems = $('[data-lightbox-gallery="'+ this.$el.attr('data-lightbox-gallery') +'"]');
-
-                $('.nivo-lightbox-nav').show();
-
-                               // Prev
-                $('.nivo-lightbox-prev').off('click').on('click', function(e){
-                    e.preventDefault();
-                    var index = galleryItems.index(currentLink);
-                    currentLink = galleryItems.eq(index - 1);
-                    if(!$(currentLink).length) currentLink = galleryItems.last();
-                    $this.processContent(content, currentLink);
-                    $this.options.onPrev.call(this, [ currentLink ]);
-                });
-
-                // Next
-                $('.nivo-lightbox-next').off('click').on('click', function(e){
-                    e.preventDefault();
-                    var index = galleryItems.index(currentLink);
-                    currentLink = galleryItems.eq(index + 1);
-                    if(!$(currentLink).length) currentLink = galleryItems.first();
-                    $this.processContent(content, currentLink);
-                    $this.options.onNext.call(this, [ currentLink ]);
-                });
-            }
-
-            setTimeout(function(){
-                lightbox.addClass('nivo-lightbox-open');
-                $this.options.afterShowLightbox.call(this, [ lightbox ]);
-            }, 1); // For CSS transitions
-        },
-
-               checkContent: function( link ) {
-                       var $this = this,
-                href = link.attr('href'),
-                video = href.match(/(youtube|youtu|vimeo)\.(com|be)\/(watch\?v=([\w-]+)|([\w-]+))/);
-
-            if(href.match(/\.(jpeg|jpg|gif|png)$/i) !== null){
-                               return true;
-                       }
-                       // Video (Youtube/Vimeo)
-            else if(video){
-                               return true;
-                       }
-                       // AJAX
-                       else if(link.attr('data-lightbox-type') == 'ajax'){
-                               return true;
-                       }
-                       // Inline HTML
-                       else if(href.substring(0, 1) == '#' && link.attr('data-lightbox-type') == 'inline'){
-                               return true;
-                       }
-                       // iFrame (default)
-                       else if(link.attr('data-lightbox-type') == 'iframe'){
-                               return true;
-                       }
-
-                       return false;
-               },
-
-        processContent: function(content, link){
-            var $this = this,
-                href = link.attr('href'),
-                video = href.match(/(youtube|youtu|vimeo)\.(com|be)\/(watch\?v=([\w-]+)|([\w-]+))/);
-
-            content.html('').addClass('nivo-lightbox-loading');
-
-            // Is HiDPI?
-            if(this.isHidpi() && link.attr('data-lightbox-hidpi')){
-                href = link.attr('data-lightbox-hidpi');
-            }
-
-            // Image
-            if(href.match(/\.(jpeg|jpg|gif|png)$/i) !== null){
-                var img = $('<img>', { src: href });
-                img.one('load', function() {
-                                       var wrap = $('<div class="nivo-lightbox-image" />');
-                    wrap.append(img);
-                                       content.html(wrap).removeClass('nivo-lightbox-loading');
-
-                                       // Vertically center images
-                                       wrap.css({
-                                               'line-height': $('.nivo-lightbox-content').height() +'px',
-                                               'height': $('.nivo-lightbox-content').height() +'px' // For Firefox
-                                       });
-                                       $(window).resize(function() {
-                                               wrap.css({
-                                                       'line-height': $('.nivo-lightbox-content').height() +'px',
-                                                       'height': $('.nivo-lightbox-content').height() +'px' // For Firefox
-                                               });
-                                       });
-                               }).each(function() {
-                                       if(this.complete) $(this).load();
-                               });
-
-                               img.error(function() {
-                                       var wrap = $('<div class="nivo-lightbox-error"><p>'+ $this.options.errorMessage +'</p></div>');
-                    content.html(wrap).removeClass('nivo-lightbox-loading');
-                               });
-            }
-            // Video (Youtube/Vimeo)
-            else if(video){
-                var src = '',
-                    classTerm = 'nivo-lightbox-video';
-
-                if(video[1] == 'youtube'){
-                    src = 'http://www.youtube.com/embed/'+ video[4];
-                    classTerm = 'nivo-lightbox-youtube';
-                }
-                if(video[1] == 'youtu'){
-                    src = 'http://www.youtube.com/embed/'+ video[3];
-                    classTerm = 'nivo-lightbox-youtube';
-                }
-                if(video[1] == 'vimeo'){
-                    src = 'http://player.vimeo.com/video/'+ video[3];
-                    classTerm = 'nivo-lightbox-vimeo';
-                }
-
-                if(src){
-                    var iframeVideo = $('<iframe>', {
-                        src: src,
-                        'class': classTerm,
-                        frameborder: 0,
-                        vspace: 0,
-                        hspace: 0,
-                        scrolling: 'auto'
-                    });
-                    content.html(iframeVideo);
-                    iframeVideo.load(function(){ content.removeClass('nivo-lightbox-loading'); });
-                }
-            }
-            // AJAX
-            else if(link.attr('data-lightbox-type') == 'ajax'){
-                               $.ajax({
-                                       url: href,
-                                       cache: false,
-                                       success: function(data) {
-                                               var wrap = $('<div class="nivo-lightbox-ajax" />');
-                                               wrap.append(data);
-                                               content.html(wrap).removeClass('nivo-lightbox-loading');
-
-                                               // Vertically center html
-                                               if(wrap.outerHeight() < content.height()){
-                                                       wrap.css({
-                                                               'position': 'relative',
-                                                               'top': '50%',
-                                                               'margin-top': -(wrap.outerHeight()/2) +'px'
-                                                       });
-                                               }
-                                               $(window).resize(function() {
-                                                       if(wrap.outerHeight() < content.height()){
-                                                               wrap.css({
-                                                                       'position': 'relative',
-                                                                       'top': '50%',
-                                                                       'margin-top': -(wrap.outerHeight()/2) +'px'
-                                                               });
-                                                       }
-                                               });
-                                       },
-                                       error: function(){
-                                               var wrap = $('<div class="nivo-lightbox-error"><p>'+ $this.options.errorMessage +'</p></div>');
-                        content.html(wrap).removeClass('nivo-lightbox-loading');
-                                       }
-                               });
-            }
-            // Inline HTML
-            else if(href.substring(0, 1) == '#' && link.attr('data-lightbox-type') == 'inline'){
-                if($(href).length){
-                    var wrap = $('<div class="nivo-lightbox-inline" />');
-                                       wrap.append($(href).clone().show());
-                    content.html(wrap).removeClass('nivo-lightbox-loading');
-
-                    // Vertically center html
-                                       if(wrap.outerHeight() < content.height()){
-                                               wrap.css({
-                                                       'position': 'relative',
-                                                       'top': '50%',
-                                                       'margin-top': -(wrap.outerHeight()/2) +'px'
-                                               });
-                                       }
-                                       $(window).resize(function() {
-                                               if(wrap.outerHeight() < content.height()){
-                                                       wrap.css({
-                                                               'position': 'relative',
-                                                               'top': '50%',
-                                                               'margin-top': -(wrap.outerHeight()/2) +'px'
-                                                       });
-                                               }
-                                       });
-                               } else {
-                                       var wrapError = $('<div class="nivo-lightbox-error"><p>'+ $this.options.errorMessage +'</p></div>');
-                    content.html(wrapError).removeClass('nivo-lightbox-loading');
-                               }
-            }
-            // iFrame (default)
-            else if(link.attr('data-lightbox-type') == 'iframe'){
-                var iframe = $('<iframe>', {
-                    src: href,
-                    'class': 'nivo-lightbox-item',
-                    frameborder: 0,
-                    vspace: 0,
-                    hspace: 0,
-                    scrolling: 'auto'
-                });
-                content.html(iframe);
-                iframe.load(function(){ content.removeClass('nivo-lightbox-loading'); });
-            } else {
-                               return false;
-                       }
-
-            // Set the title
-            if(link.attr('title')){
-                var titleWrap = $('<span>', { 'class': 'nivo-lightbox-title' });
-                titleWrap.text(link.attr('title'));
-                $('.nivo-lightbox-title-wrap').html(titleWrap);
-            } else {
-                $('.nivo-lightbox-title-wrap').html('');
-            }
-        },
-
-        constructLightbox: function(){
-            if($('.nivo-lightbox-overlay').length) return $('.nivo-lightbox-overlay');
-
-            var overlay = $('<div>', { 'class': 'nivo-lightbox-overlay nivo-lightbox-theme-'+ this.options.theme +' nivo-lightbox-effect-'+ this.options.effect });
-            var wrap = $('<div>', { 'class': 'nivo-lightbox-wrap' });
-            var content = $('<div>', { 'class': 'nivo-lightbox-content' });
-            var nav = $('<a href="#" class="nivo-lightbox-nav nivo-lightbox-prev">Previous</a><a href="#" class="nivo-lightbox-nav nivo-lightbox-next">Next</a>');
-            var close = $('<a href="#" class="nivo-lightbox-close" title="Close">Close</a>');
-            var title = $('<div>', { 'class': 'nivo-lightbox-title-wrap' });
-
-            var isMSIE = /*@cc_on!@*/0;
-            if(isMSIE) overlay.addClass('nivo-lightbox-ie');
-
-            wrap.append(content);
-            wrap.append(title);
-            overlay.append(wrap);
-            overlay.append(nav);
-            overlay.append(close);
-            $('body').append(overlay);
-
-            var $this = this;
-            if($this.options.clickOverlayToClose){
-                overlay.on('click', function(e){
-                    if(e.target === this || $(e.target).hasClass('nivo-lightbox-content') || $(e.target).hasClass('nivo-lightbox-image')){
-                        $this.destructLightbox();
-                    }
-                });
-            }
-
-            close.on('click', function(e){
-                e.preventDefault();
-                $this.destructLightbox();
-            });
-
-            return overlay;
-        },
-
-        destructLightbox: function(){
-            var $this = this;
-            this.options.beforeHideLightbox.call(this);
-
-            $('.nivo-lightbox-overlay').removeClass('nivo-lightbox-open');
-            $('.nivo-lightbox-nav').hide();
-            $('body').removeClass('nivo-lightbox-body-effect-'+ $this.options.effect);
-
-            // For IE
-            var isMSIE = /*@cc_on!@*/0;
-            if(isMSIE){
-                $('.nivo-lightbox-overlay iframe').attr("src", " ");
-                $('.nivo-lightbox-overlay iframe').remove();
-            }
-
-            // Remove click handlers
-            $('.nivo-lightbox-prev').off('click');
-            $('.nivo-lightbox-next').off('click');
-
-            // Empty content (for videos)
-            $('.nivo-lightbox-content').empty();
-
-            this.options.afterHideLightbox.call(this);
-        },
-
-        isHidpi: function(){
-                       var mediaQuery = "(-webkit-min-device-pixel-ratio: 1.5),\
-                              (min--moz-device-pixel-ratio: 1.5),\
-                              (-o-min-device-pixel-ratio: 3/2),\
-                              (min-resolution: 1.5dppx)";
-                       if(window.devicePixelRatio > 1) return true;
-                       if(window.matchMedia && window.matchMedia(mediaQuery).matches) return true;
-                       return false;
-               }
-
-    };
-
-    $.fn[pluginName] = function(options){
-        return this.each(function(){
-            if(!$.data(this, pluginName)){
-                $.data(this, pluginName, new NivoLightbox(this, options));
-            }
-        });
-    };
-
-})(jQuery, window, document);
diff --git a/js/nivo-lightbox.min.js b/js/nivo-lightbox.min.js
deleted file mode 100644 (file)
index 95c175d..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-/*
-* Nivo Lightbox v1.2.0
-* http://dev7studios.com/nivo-lightbox
-*
-* Copyright 2013, Dev7studios
-* Free to use and abuse under the MIT license.
-* http://www.opensource.org/licenses/mit-license.php
-*/
-(function(e,t,n,r){function o(t,n){this.el=t;this.$el=e(this.el);this.options=e.extend({},s,n);this._defaults=s;this._name=i;this.init()}var i="nivoLightbox",s={effect:"fade",theme:"default",keyboardNav:true,clickOverlayToClose:true,onInit:function(){},beforeShowLightbox:function(){},afterShowLightbox:function(e){},beforeHideLightbox:function(){},afterHideLightbox:function(){},onPrev:function(e){},onNext:function(e){},errorMessage:"The requested content cannot be loaded. Please try again later."};o.prototype={init:function(){var t=this;if(!e("html").hasClass("nivo-lightbox-notouch"))e("html").addClass("nivo-lightbox-notouch");if("ontouchstart"in n)e("html").removeClass("nivo-lightbox-notouch");this.$el.on("click",function(e){t.showLightbox(e)});if(this.options.keyboardNav){e("body").off("keyup").on("keyup",function(n){var r=n.keyCode?n.keyCode:n.which;if(r==27)t.destructLightbox();if(r==37)e(".nivo-lightbox-prev").trigger("click");if(r==39)e(".nivo-lightbox-next").trigger("click")})}this.options.onInit.call(this)},showLightbox:function(t){var n=this,r=this.$el;var i=this.checkContent(r);if(!i)return;t.preventDefault();this.options.beforeShowLightbox.call(this);var s=this.constructLightbox();if(!s)return;var o=s.find(".nivo-lightbox-content");if(!o)return;e("body").addClass("nivo-lightbox-body-effect-"+this.options.effect);this.processContent(o,r);if(this.$el.attr("data-lightbox-gallery")){var u=e('[data-lightbox-gallery="'+this.$el.attr("data-lightbox-gallery")+'"]');e(".nivo-lightbox-nav").show();e(".nivo-lightbox-prev").off("click").on("click",function(t){t.preventDefault();var i=u.index(r);r=u.eq(i-1);if(!e(r).length)r=u.last();n.processContent(o,r);n.options.onPrev.call(this,[r])});e(".nivo-lightbox-next").off("click").on("click",function(t){t.preventDefault();var i=u.index(r);r=u.eq(i+1);if(!e(r).length)r=u.first();n.processContent(o,r);n.options.onNext.call(this,[r])})}setTimeout(function(){s.addClass("nivo-lightbox-open");n.options.afterShowLightbox.call(this,[s])},1)},checkContent:function(e){var t=this,n=e.attr("href"),r=n.match(/(youtube|youtu|vimeo)\.(com|be)\/(watch\?v=([\w-]+)|([\w-]+))/);if(n.match(/\.(jpeg|jpg|gif|png)$/i)!==null){return true}else if(r){return true}else if(e.attr("data-lightbox-type")=="ajax"){return true}else if(n.substring(0,1)=="#"&&e.attr("data-lightbox-type")=="inline"){return true}else if(e.attr("data-lightbox-type")=="iframe"){return true}return false},processContent:function(n,r){var i=this,s=r.attr("href"),o=s.match(/(youtube|youtu|vimeo)\.(com|be)\/(watch\?v=([\w-]+)|([\w-]+))/);n.html("").addClass("nivo-lightbox-loading");if(this.isHidpi()&&r.attr("data-lightbox-hidpi")){s=r.attr("data-lightbox-hidpi")}if(s.match(/\.(jpeg|jpg|gif|png)$/i)!==null){var u=e("<img>",{src:s});u.one("load",function(){var r=e('<div class="nivo-lightbox-image" />');r.append(u);n.html(r).removeClass("nivo-lightbox-loading");r.css({"line-height":e(".nivo-lightbox-content").height()+"px",height:e(".nivo-lightbox-content").height()+"px"});e(t).resize(function(){r.css({"line-height":e(".nivo-lightbox-content").height()+"px",height:e(".nivo-lightbox-content").height()+"px"})})}).each(function(){if(this.complete)e(this).load()});u.error(function(){var t=e('<div class="nivo-lightbox-error"><p>'+i.options.errorMessage+"</p></div>");n.html(t).removeClass("nivo-lightbox-loading")})}else if(o){var a="",f="nivo-lightbox-video";if(o[1]=="youtube"){a="http://www.youtube.com/embed/"+o[4];f="nivo-lightbox-youtube"}if(o[1]=="youtu"){a="http://www.youtube.com/embed/"+o[3];f="nivo-lightbox-youtube"}if(o[1]=="vimeo"){a="http://player.vimeo.com/video/"+o[3];f="nivo-lightbox-vimeo"}if(a){var l=e("<iframe>",{src:a,"class":f,frameborder:0,vspace:0,hspace:0,scrolling:"auto"});n.html(l);l.load(function(){n.removeClass("nivo-lightbox-loading")})}}else if(r.attr("data-lightbox-type")=="ajax"){e.ajax({url:s,cache:false,success:function(r){var i=e('<div class="nivo-lightbox-ajax" />');i.append(r);n.html(i).removeClass("nivo-lightbox-loading");if(i.outerHeight()<n.height()){i.css({position:"relative",top:"50%","margin-top":-(i.outerHeight()/2)+"px"})}e(t).resize(function(){if(i.outerHeight()<n.height()){i.css({position:"relative",top:"50%","margin-top":-(i.outerHeight()/2)+"px"})}})},error:function(){var t=e('<div class="nivo-lightbox-error"><p>'+i.options.errorMessage+"</p></div>");n.html(t).removeClass("nivo-lightbox-loading")}})}else if(s.substring(0,1)=="#"&&r.attr("data-lightbox-type")=="inline"){if(e(s).length){var c=e('<div class="nivo-lightbox-inline" />');c.append(e(s).clone().show());n.html(c).removeClass("nivo-lightbox-loading");if(c.outerHeight()<n.height()){c.css({position:"relative",top:"50%","margin-top":-(c.outerHeight()/2)+"px"})}e(t).resize(function(){if(c.outerHeight()<n.height()){c.css({position:"relative",top:"50%","margin-top":-(c.outerHeight()/2)+"px"})}})}else{var h=e('<div class="nivo-lightbox-error"><p>'+i.options.errorMessage+"</p></div>");n.html(h).removeClass("nivo-lightbox-loading")}}else if(r.attr("data-lightbox-type")=="iframe"){var p=e("<iframe>",{src:s,"class":"nivo-lightbox-item",frameborder:0,vspace:0,hspace:0,scrolling:"auto"});n.html(p);p.load(function(){n.removeClass("nivo-lightbox-loading")})}else{return false}if(r.attr("title")){var d=e("<span>",{"class":"nivo-lightbox-title"});d.text(r.attr("title"));e(".nivo-lightbox-title-wrap").html(d)}else{e(".nivo-lightbox-title-wrap").html("")}},constructLightbox:function(){if(e(".nivo-lightbox-overlay").length)return e(".nivo-lightbox-overlay");var t=e("<div>",{"class":"nivo-lightbox-overlay nivo-lightbox-theme-"+this.options.theme+" nivo-lightbox-effect-"+this.options.effect});var n=e("<div>",{"class":"nivo-lightbox-wrap"});var r=e("<div>",{"class":"nivo-lightbox-content"});var i=e('<a href="#" class="nivo-lightbox-nav nivo-lightbox-prev">Previous</a><a href="#" class="nivo-lightbox-nav nivo-lightbox-next">Next</a>');var s=e('<a href="#" class="nivo-lightbox-close" title="Close">Close</a>');var o=e("<div>",{"class":"nivo-lightbox-title-wrap"});var u=0;if(u)t.addClass("nivo-lightbox-ie");n.append(r);n.append(o);t.append(n);t.append(i);t.append(s);e("body").append(t);var a=this;if(a.options.clickOverlayToClose){t.on("click",function(t){if(t.target===this||e(t.target).hasClass("nivo-lightbox-content")||e(t.target).hasClass("nivo-lightbox-image")){a.destructLightbox()}})}s.on("click",function(e){e.preventDefault();a.destructLightbox()});return t},destructLightbox:function(){var t=this;this.options.beforeHideLightbox.call(this);e(".nivo-lightbox-overlay").removeClass("nivo-lightbox-open");e(".nivo-lightbox-nav").hide();e("body").removeClass("nivo-lightbox-body-effect-"+t.options.effect);var n=0;if(n){e(".nivo-lightbox-overlay iframe").attr("src"," ");e(".nivo-lightbox-overlay iframe").remove()}e(".nivo-lightbox-prev").off("click");e(".nivo-lightbox-next").off("click");e(".nivo-lightbox-content").empty();this.options.afterHideLightbox.call(this)},isHidpi:function(){var e="(-webkit-min-device-pixel-ratio: 1.5),                              (min--moz-device-pixel-ratio: 1.5),                              (-o-min-device-pixel-ratio: 3/2),                              (min-resolution: 1.5dppx)";if(t.devicePixelRatio>1)return true;if(t.matchMedia&&t.matchMedia(e).matches)return true;return false}};e.fn[i]=function(t){return this.each(function(){if(!e.data(this,i)){e.data(this,i,new o(this,t))}})}})(jQuery,window,document)
diff --git a/js/parallax.js b/js/parallax.js
deleted file mode 100644 (file)
index 8246ba5..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
-Plugin: jQuery Parallax
-Version 1.1.3
-Author: Ian Lunn
-Twitter: @IanLunn
-Author URL: http://www.ianlunn.co.uk/
-Plugin URL: http://www.ianlunn.co.uk/plugins/jquery-parallax/
-
-Dual licensed under the MIT and GPL licenses:
-http://www.opensource.org/licenses/mit-license.php
-http://www.gnu.org/licenses/gpl.html
-*/
-
-(function( $ ){
-       var $window = $(window);
-       var windowHeight = $window.height();
-
-       $window.resize(function () {
-               windowHeight = $window.height();
-       });
-
-       $.fn.parallax = function(xpos, speedFactor, outerHeight) {
-               var $this = $(this);
-               var getHeight;
-               var firstTop;
-               var paddingTop = 0;
-               
-               //get the starting position of each element to have parallax applied to it              
-               $this.each(function(){
-                   firstTop = $this.offset().top;
-               });
-
-               if (outerHeight) {
-                       getHeight = function(jqo) {
-                               return jqo.outerHeight(true);
-                       };
-               } else {
-                       getHeight = function(jqo) {
-                               return jqo.height();
-                       };
-               }
-                       
-               // setup defaults if arguments aren't specified
-               if (arguments.length < 1 || xpos === null) xpos = "50%";
-               if (arguments.length < 2 || speedFactor === null) speedFactor = 0.1;
-               if (arguments.length < 3 || outerHeight === null) outerHeight = true;
-               
-               // function to be called whenever the window is scrolled or resized
-               function update(){
-                       var pos = $window.scrollTop();                          
-
-                       $this.each(function(){
-                               var $element = $(this);
-                               var top = $element.offset().top;
-                               var height = getHeight($element);
-
-                               // Check if totally above or totally below viewport
-                               if (top + height < pos || top > pos + windowHeight) {
-                                       return;
-                               }
-
-                               $this.css('backgroundPosition', xpos + " " + Math.round((firstTop - pos) * speedFactor) + "px");
-                       });
-               }               
-
-               $window.bind('scroll', update).resize(update);
-               update();
-       };
-})(jQuery);
\ No newline at end of file
diff --git a/js/slick.js b/js/slick.js
deleted file mode 100644 (file)
index 9529989..0000000
+++ /dev/null
@@ -1,3004 +0,0 @@
-/*
-     _ _      _       _
- ___| (_) ___| | __  (_)___
-/ __| | |/ __| |/ /  | / __|
-\__ \ | | (__|   < _ | \__ \
-|___/_|_|\___|_|\_(_)/ |___/
-                   |__/
-
- Version: 1.8.0
-  Author: Ken Wheeler
- Website: http://kenwheeler.github.io
-    Docs: http://kenwheeler.github.io/slick
-    Repo: http://github.com/kenwheeler/slick
-  Issues: http://github.com/kenwheeler/slick/issues
-
- */
-/* global window, document, define, jQuery, setInterval, clearInterval */
-;(function(factory) {
-    'use strict';
-    if (typeof define === 'function' && define.amd) {
-        define(['jquery'], factory);
-    } else if (typeof exports !== 'undefined') {
-        module.exports = factory(require('jquery'));
-    } else {
-        factory(jQuery);
-    }
-
-}(function($) {
-    'use strict';
-    var Slick = window.Slick || {};
-
-    Slick = (function() {
-
-        var instanceUid = 0;
-
-        function Slick(element, settings) {
-
-            var _ = this, dataSettings;
-
-            _.defaults = {
-                accessibility: true,
-                adaptiveHeight: false,
-                appendArrows: $(element),
-                appendDots: $(element),
-                arrows: true,
-                asNavFor: null,
-                prevArrow: '<button class="slick-prev" aria-label="Previous" type="button">Previous</button>',
-                nextArrow: '<button class="slick-next" aria-label="Next" type="button">Next</button>',
-                autoplay: false,
-                autoplaySpeed: 3000,
-                centerMode: false,
-                centerPadding: '50px',
-                cssEase: 'ease',
-                customPaging: function(slider, i) {
-                    return $('<button type="button" />').text(i + 1);
-                },
-                dots: false,
-                dotsClass: 'slick-dots',
-                draggable: true,
-                easing: 'linear',
-                edgeFriction: 0.35,
-                fade: false,
-                focusOnSelect: false,
-                focusOnChange: false,
-                infinite: true,
-                initialSlide: 0,
-                lazyLoad: 'ondemand',
-                mobileFirst: false,
-                pauseOnHover: true,
-                pauseOnFocus: true,
-                pauseOnDotsHover: false,
-                respondTo: 'window',
-                responsive: null,
-                rows: 1,
-                rtl: false,
-                slide: '',
-                slidesPerRow: 1,
-                slidesToShow: 1,
-                slidesToScroll: 1,
-                speed: 500,
-                swipe: true,
-                swipeToSlide: false,
-                touchMove: true,
-                touchThreshold: 5,
-                useCSS: true,
-                useTransform: true,
-                variableWidth: false,
-                vertical: false,
-                verticalSwiping: false,
-                waitForAnimate: true,
-                zIndex: 1000
-            };
-
-            _.initials = {
-                animating: false,
-                dragging: false,
-                autoPlayTimer: null,
-                currentDirection: 0,
-                currentLeft: null,
-                currentSlide: 0,
-                direction: 1,
-                $dots: null,
-                listWidth: null,
-                listHeight: null,
-                loadIndex: 0,
-                $nextArrow: null,
-                $prevArrow: null,
-                scrolling: false,
-                slideCount: null,
-                slideWidth: null,
-                $slideTrack: null,
-                $slides: null,
-                sliding: false,
-                slideOffset: 0,
-                swipeLeft: null,
-                swiping: false,
-                $list: null,
-                touchObject: {},
-                transformsEnabled: false,
-                unslicked: false
-            };
-
-            $.extend(_, _.initials);
-
-            _.activeBreakpoint = null;
-            _.animType = null;
-            _.animProp = null;
-            _.breakpoints = [];
-            _.breakpointSettings = [];
-            _.cssTransitions = false;
-            _.focussed = false;
-            _.interrupted = false;
-            _.hidden = 'hidden';
-            _.paused = true;
-            _.positionProp = null;
-            _.respondTo = null;
-            _.rowCount = 1;
-            _.shouldClick = true;
-            _.$slider = $(element);
-            _.$slidesCache = null;
-            _.transformType = null;
-            _.transitionType = null;
-            _.visibilityChange = 'visibilitychange';
-            _.windowWidth = 0;
-            _.windowTimer = null;
-
-            dataSettings = $(element).data('slick') || {};
-
-            _.options = $.extend({}, _.defaults, settings, dataSettings);
-
-            _.currentSlide = _.options.initialSlide;
-
-            _.originalSettings = _.options;
-
-            if (typeof document.mozHidden !== 'undefined') {
-                _.hidden = 'mozHidden';
-                _.visibilityChange = 'mozvisibilitychange';
-            } else if (typeof document.webkitHidden !== 'undefined') {
-                _.hidden = 'webkitHidden';
-                _.visibilityChange = 'webkitvisibilitychange';
-            }
-
-            _.autoPlay = $.proxy(_.autoPlay, _);
-            _.autoPlayClear = $.proxy(_.autoPlayClear, _);
-            _.autoPlayIterator = $.proxy(_.autoPlayIterator, _);
-            _.changeSlide = $.proxy(_.changeSlide, _);
-            _.clickHandler = $.proxy(_.clickHandler, _);
-            _.selectHandler = $.proxy(_.selectHandler, _);
-            _.setPosition = $.proxy(_.setPosition, _);
-            _.swipeHandler = $.proxy(_.swipeHandler, _);
-            _.dragHandler = $.proxy(_.dragHandler, _);
-            _.keyHandler = $.proxy(_.keyHandler, _);
-
-            _.instanceUid = instanceUid++;
-
-            // A simple way to check for HTML strings
-            // Strict HTML recognition (must start with <)
-            // Extracted from jQuery v1.11 source
-            _.htmlExpr = /^(?:\s*(<[\w\W]+>)[^>]*)$/;
-
-
-            _.registerBreakpoints();
-            _.init(true);
-
-        }
-
-        return Slick;
-
-    }());
-
-    Slick.prototype.activateADA = function() {
-        var _ = this;
-
-        _.$slideTrack.find('.slick-active').attr({
-            'aria-hidden': 'false'
-        }).find('a, input, button, select').attr({
-            'tabindex': '0'
-        });
-
-    };
-
-    Slick.prototype.addSlide = Slick.prototype.slickAdd = function(markup, index, addBefore) {
-
-        var _ = this;
-
-        if (typeof(index) === 'boolean') {
-            addBefore = index;
-            index = null;
-        } else if (index < 0 || (index >= _.slideCount)) {
-            return false;
-        }
-
-        _.unload();
-
-        if (typeof(index) === 'number') {
-            if (index === 0 && _.$slides.length === 0) {
-                $(markup).appendTo(_.$slideTrack);
-            } else if (addBefore) {
-                $(markup).insertBefore(_.$slides.eq(index));
-            } else {
-                $(markup).insertAfter(_.$slides.eq(index));
-            }
-        } else {
-            if (addBefore === true) {
-                $(markup).prependTo(_.$slideTrack);
-            } else {
-                $(markup).appendTo(_.$slideTrack);
-            }
-        }
-
-        _.$slides = _.$slideTrack.children(this.options.slide);
-
-        _.$slideTrack.children(this.options.slide).detach();
-
-        _.$slideTrack.append(_.$slides);
-
-        _.$slides.each(function(index, element) {
-            $(element).attr('data-slick-index', index);
-        });
-
-        _.$slidesCache = _.$slides;
-
-        _.reinit();
-
-    };
-
-    Slick.prototype.animateHeight = function() {
-        var _ = this;
-        if (_.options.slidesToShow === 1 && _.options.adaptiveHeight === true && _.options.vertical === false) {
-            var targetHeight = _.$slides.eq(_.currentSlide).outerHeight(true);
-            _.$list.animate({
-                height: targetHeight
-            }, _.options.speed);
-        }
-    };
-
-    Slick.prototype.animateSlide = function(targetLeft, callback) {
-
-        var animProps = {},
-            _ = this;
-
-        _.animateHeight();
-
-        if (_.options.rtl === true && _.options.vertical === false) {
-            targetLeft = -targetLeft;
-        }
-        if (_.transformsEnabled === false) {
-            if (_.options.vertical === false) {
-                _.$slideTrack.animate({
-                    left: targetLeft
-                }, _.options.speed, _.options.easing, callback);
-            } else {
-                _.$slideTrack.animate({
-                    top: targetLeft
-                }, _.options.speed, _.options.easing, callback);
-            }
-
-        } else {
-
-            if (_.cssTransitions === false) {
-                if (_.options.rtl === true) {
-                    _.currentLeft = -(_.currentLeft);
-                }
-                $({
-                    animStart: _.currentLeft
-                }).animate({
-                    animStart: targetLeft
-                }, {
-                    duration: _.options.speed,
-                    easing: _.options.easing,
-                    step: function(now) {
-                        now = Math.ceil(now);
-                        if (_.options.vertical === false) {
-                            animProps[_.animType] = 'translate(' +
-                                now + 'px, 0px)';
-                            _.$slideTrack.css(animProps);
-                        } else {
-                            animProps[_.animType] = 'translate(0px,' +
-                                now + 'px)';
-                            _.$slideTrack.css(animProps);
-                        }
-                    },
-                    complete: function() {
-                        if (callback) {
-                            callback.call();
-                        }
-                    }
-                });
-
-            } else {
-
-                _.applyTransition();
-                targetLeft = Math.ceil(targetLeft);
-
-                if (_.options.vertical === false) {
-                    animProps[_.animType] = 'translate3d(' + targetLeft + 'px, 0px, 0px)';
-                } else {
-                    animProps[_.animType] = 'translate3d(0px,' + targetLeft + 'px, 0px)';
-                }
-                _.$slideTrack.css(animProps);
-
-                if (callback) {
-                    setTimeout(function() {
-
-                        _.disableTransition();
-
-                        callback.call();
-                    }, _.options.speed);
-                }
-
-            }
-
-        }
-
-    };
-
-    Slick.prototype.getNavTarget = function() {
-
-        var _ = this,
-            asNavFor = _.options.asNavFor;
-
-        if ( asNavFor && asNavFor !== null ) {
-            asNavFor = $(asNavFor).not(_.$slider);
-        }
-
-        return asNavFor;
-
-    };
-
-    Slick.prototype.asNavFor = function(index) {
-
-        var _ = this,
-            asNavFor = _.getNavTarget();
-
-        if ( asNavFor !== null && typeof asNavFor === 'object' ) {
-            asNavFor.each(function() {
-                var target = $(this).slick('getSlick');
-                if(!target.unslicked) {
-                    target.slideHandler(index, true);
-                }
-            });
-        }
-
-    };
-
-    Slick.prototype.applyTransition = function(slide) {
-
-        var _ = this,
-            transition = {};
-
-        if (_.options.fade === false) {
-            transition[_.transitionType] = _.transformType + ' ' + _.options.speed + 'ms ' + _.options.cssEase;
-        } else {
-            transition[_.transitionType] = 'opacity ' + _.options.speed + 'ms ' + _.options.cssEase;
-        }
-
-        if (_.options.fade === false) {
-            _.$slideTrack.css(transition);
-        } else {
-            _.$slides.eq(slide).css(transition);
-        }
-
-    };
-
-    Slick.prototype.autoPlay = function() {
-
-        var _ = this;
-
-        _.autoPlayClear();
-
-        if ( _.slideCount > _.options.slidesToShow ) {
-            _.autoPlayTimer = setInterval( _.autoPlayIterator, _.options.autoplaySpeed );
-        }
-
-    };
-
-    Slick.prototype.autoPlayClear = function() {
-
-        var _ = this;
-
-        if (_.autoPlayTimer) {
-            clearInterval(_.autoPlayTimer);
-        }
-
-    };
-
-    Slick.prototype.autoPlayIterator = function() {
-
-        var _ = this,
-            slideTo = _.currentSlide + _.options.slidesToScroll;
-
-        if ( !_.paused && !_.interrupted && !_.focussed ) {
-
-            if ( _.options.infinite === false ) {
-
-                if ( _.direction === 1 && ( _.currentSlide + 1 ) === ( _.slideCount - 1 )) {
-                    _.direction = 0;
-                }
-
-                else if ( _.direction === 0 ) {
-
-                    slideTo = _.currentSlide - _.options.slidesToScroll;
-
-                    if ( _.currentSlide - 1 === 0 ) {
-                        _.direction = 1;
-                    }
-
-                }
-
-            }
-
-            _.slideHandler( slideTo );
-
-        }
-
-    };
-
-    Slick.prototype.buildArrows = function() {
-
-        var _ = this;
-
-        if (_.options.arrows === true ) {
-
-            _.$prevArrow = $(_.options.prevArrow).addClass('slick-arrow');
-            _.$nextArrow = $(_.options.nextArrow).addClass('slick-arrow');
-
-            if( _.slideCount > _.options.slidesToShow ) {
-
-                _.$prevArrow.removeClass('slick-hidden').removeAttr('aria-hidden tabindex');
-                _.$nextArrow.removeClass('slick-hidden').removeAttr('aria-hidden tabindex');
-
-                if (_.htmlExpr.test(_.options.prevArrow)) {
-                    _.$prevArrow.prependTo(_.options.appendArrows);
-                }
-
-                if (_.htmlExpr.test(_.options.nextArrow)) {
-                    _.$nextArrow.appendTo(_.options.appendArrows);
-                }
-
-                if (_.options.infinite !== true) {
-                    _.$prevArrow
-                        .addClass('slick-disabled')
-                        .attr('aria-disabled', 'true');
-                }
-
-            } else {
-
-                _.$prevArrow.add( _.$nextArrow )
-
-                    .addClass('slick-hidden')
-                    .attr({
-                        'aria-disabled': 'true',
-                        'tabindex': '-1'
-                    });
-
-            }
-
-        }
-
-    };
-
-    Slick.prototype.buildDots = function() {
-
-        var _ = this,
-            i, dot;
-
-        if (_.options.dots === true) {
-
-            _.$slider.addClass('slick-dotted');
-
-            dot = $('<ul />').addClass(_.options.dotsClass);
-
-            for (i = 0; i <= _.getDotCount(); i += 1) {
-                dot.append($('<li />').append(_.options.customPaging.call(this, _, i)));
-            }
-
-            _.$dots = dot.appendTo(_.options.appendDots);
-
-            _.$dots.find('li').first().addClass('slick-active');
-
-        }
-
-    };
-
-    Slick.prototype.buildOut = function() {
-
-        var _ = this;
-
-        _.$slides =
-            _.$slider
-                .children( _.options.slide + ':not(.slick-cloned)')
-                .addClass('slick-slide');
-
-        _.slideCount = _.$slides.length;
-
-        _.$slides.each(function(index, element) {
-            $(element)
-                .attr('data-slick-index', index)
-                .data('originalStyling', $(element).attr('style') || '');
-        });
-
-        _.$slider.addClass('slick-slider');
-
-        _.$slideTrack = (_.slideCount === 0) ?
-            $('<div class="slick-track"/>').appendTo(_.$slider) :
-            _.$slides.wrapAll('<div class="slick-track"/>').parent();
-
-        _.$list = _.$slideTrack.wrap(
-            '<div class="slick-list"/>').parent();
-        _.$slideTrack.css('opacity', 0);
-
-        if (_.options.centerMode === true || _.options.swipeToSlide === true) {
-            _.options.slidesToScroll = 1;
-        }
-
-        $('img[data-lazy]', _.$slider).not('[src]').addClass('slick-loading');
-
-        _.setupInfinite();
-
-        _.buildArrows();
-
-        _.buildDots();
-
-        _.updateDots();
-
-
-        _.setSlideClasses(typeof _.currentSlide === 'number' ? _.currentSlide : 0);
-
-        if (_.options.draggable === true) {
-            _.$list.addClass('draggable');
-        }
-
-    };
-
-    Slick.prototype.buildRows = function() {
-
-        var _ = this, a, b, c, newSlides, numOfSlides, originalSlides,slidesPerSection;
-
-        newSlides = document.createDocumentFragment();
-        originalSlides = _.$slider.children();
-
-        if(_.options.rows > 1) {
-
-            slidesPerSection = _.options.slidesPerRow * _.options.rows;
-            numOfSlides = Math.ceil(
-                originalSlides.length / slidesPerSection
-            );
-
-            for(a = 0; a < numOfSlides; a++){
-                var slide = document.createElement('div');
-                for(b = 0; b < _.options.rows; b++) {
-                    var row = document.createElement('div');
-                    for(c = 0; c < _.options.slidesPerRow; c++) {
-                        var target = (a * slidesPerSection + ((b * _.options.slidesPerRow) + c));
-                        if (originalSlides.get(target)) {
-                            row.appendChild(originalSlides.get(target));
-                        }
-                    }
-                    slide.appendChild(row);
-                }
-                newSlides.appendChild(slide);
-            }
-
-            _.$slider.empty().append(newSlides);
-            _.$slider.children().children().children()
-                .css({
-                    'width':(100 / _.options.slidesPerRow) + '%',
-                    'display': 'inline-block'
-                });
-
-        }
-
-    };
-
-    Slick.prototype.checkResponsive = function(initial, forceUpdate) {
-
-        var _ = this,
-            breakpoint, targetBreakpoint, respondToWidth, triggerBreakpoint = false;
-        var sliderWidth = _.$slider.width();
-        var windowWidth = window.innerWidth || $(window).width();
-
-        if (_.respondTo === 'window') {
-            respondToWidth = windowWidth;
-        } else if (_.respondTo === 'slider') {
-            respondToWidth = sliderWidth;
-        } else if (_.respondTo === 'min') {
-            respondToWidth = Math.min(windowWidth, sliderWidth);
-        }
-
-        if ( _.options.responsive &&
-            _.options.responsive.length &&
-            _.options.responsive !== null) {
-
-            targetBreakpoint = null;
-
-            for (breakpoint in _.breakpoints) {
-                if (_.breakpoints.hasOwnProperty(breakpoint)) {
-                    if (_.originalSettings.mobileFirst === false) {
-                        if (respondToWidth < _.breakpoints[breakpoint]) {
-                            targetBreakpoint = _.breakpoints[breakpoint];
-                        }
-                    } else {
-                        if (respondToWidth > _.breakpoints[breakpoint]) {
-                            targetBreakpoint = _.breakpoints[breakpoint];
-                        }
-                    }
-                }
-            }
-
-            if (targetBreakpoint !== null) {
-                if (_.activeBreakpoint !== null) {
-                    if (targetBreakpoint !== _.activeBreakpoint || forceUpdate) {
-                        _.activeBreakpoint =
-                            targetBreakpoint;
-                        if (_.breakpointSettings[targetBreakpoint] === 'unslick') {
-                            _.unslick(targetBreakpoint);
-                        } else {
-                            _.options = $.extend({}, _.originalSettings,
-                                _.breakpointSettings[
-                                    targetBreakpoint]);
-                            if (initial === true) {
-                                _.currentSlide = _.options.initialSlide;
-                            }
-                            _.refresh(initial);
-                        }
-                        triggerBreakpoint = targetBreakpoint;
-                    }
-                } else {
-                    _.activeBreakpoint = targetBreakpoint;
-                    if (_.breakpointSettings[targetBreakpoint] === 'unslick') {
-                        _.unslick(targetBreakpoint);
-                    } else {
-                        _.options = $.extend({}, _.originalSettings,
-                            _.breakpointSettings[
-                                targetBreakpoint]);
-                        if (initial === true) {
-                            _.currentSlide = _.options.initialSlide;
-                        }
-                        _.refresh(initial);
-                    }
-                    triggerBreakpoint = targetBreakpoint;
-                }
-            } else {
-                if (_.activeBreakpoint !== null) {
-                    _.activeBreakpoint = null;
-                    _.options = _.originalSettings;
-                    if (initial === true) {
-                        _.currentSlide = _.options.initialSlide;
-                    }
-                    _.refresh(initial);
-                    triggerBreakpoint = targetBreakpoint;
-                }
-            }
-
-            // only trigger breakpoints during an actual break. not on initialize.
-            if( !initial && triggerBreakpoint !== false ) {
-                _.$slider.trigger('breakpoint', [_, triggerBreakpoint]);
-            }
-        }
-
-    };
-
-    Slick.prototype.changeSlide = function(event, dontAnimate) {
-
-        var _ = this,
-            $target = $(event.currentTarget),
-            indexOffset, slideOffset, unevenOffset;
-
-        // If target is a link, prevent default action.
-        if($target.is('a')) {
-            event.preventDefault();
-        }
-
-        // If target is not the <li> element (ie: a child), find the <li>.
-        if(!$target.is('li')) {
-            $target = $target.closest('li');
-        }
-
-        unevenOffset = (_.slideCount % _.options.slidesToScroll !== 0);
-        indexOffset = unevenOffset ? 0 : (_.slideCount - _.currentSlide) % _.options.slidesToScroll;
-
-        switch (event.data.message) {
-
-            case 'previous':
-                slideOffset = indexOffset === 0 ? _.options.slidesToScroll : _.options.slidesToShow - indexOffset;
-                if (_.slideCount > _.options.slidesToShow) {
-                    _.slideHandler(_.currentSlide - slideOffset, false, dontAnimate);
-                }
-                break;
-
-            case 'next':
-                slideOffset = indexOffset === 0 ? _.options.slidesToScroll : indexOffset;
-                if (_.slideCount > _.options.slidesToShow) {
-                    _.slideHandler(_.currentSlide + slideOffset, false, dontAnimate);
-                }
-                break;
-
-            case 'index':
-                var index = event.data.index === 0 ? 0 :
-                    event.data.index || $target.index() * _.options.slidesToScroll;
-
-                _.slideHandler(_.checkNavigable(index), false, dontAnimate);
-                $target.children().trigger('focus');
-                break;
-
-            default:
-                return;
-        }
-
-    };
-
-    Slick.prototype.checkNavigable = function(index) {
-
-        var _ = this,
-            navigables, prevNavigable;
-
-        navigables = _.getNavigableIndexes();
-        prevNavigable = 0;
-        if (index > navigables[navigables.length - 1]) {
-            index = navigables[navigables.length - 1];
-        } else {
-            for (var n in navigables) {
-                if (index < navigables[n]) {
-                    index = prevNavigable;
-                    break;
-                }
-                prevNavigable = navigables[n];
-            }
-        }
-
-        return index;
-    };
-
-    Slick.prototype.cleanUpEvents = function() {
-
-        var _ = this;
-
-        if (_.options.dots && _.$dots !== null) {
-
-            $('li', _.$dots)
-                .off('click.slick', _.changeSlide)
-                .off('mouseenter.slick', $.proxy(_.interrupt, _, true))
-                .off('mouseleave.slick', $.proxy(_.interrupt, _, false));
-
-            if (_.options.accessibility === true) {
-                _.$dots.off('keydown.slick', _.keyHandler);
-            }
-        }
-
-        _.$slider.off('focus.slick blur.slick');
-
-        if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {
-            _.$prevArrow && _.$prevArrow.off('click.slick', _.changeSlide);
-            _.$nextArrow && _.$nextArrow.off('click.slick', _.changeSlide);
-
-            if (_.options.accessibility === true) {
-                _.$prevArrow && _.$prevArrow.off('keydown.slick', _.keyHandler);
-                _.$nextArrow && _.$nextArrow.off('keydown.slick', _.keyHandler);
-            }
-        }
-
-        _.$list.off('touchstart.slick mousedown.slick', _.swipeHandler);
-        _.$list.off('touchmove.slick mousemove.slick', _.swipeHandler);
-        _.$list.off('touchend.slick mouseup.slick', _.swipeHandler);
-        _.$list.off('touchcancel.slick mouseleave.slick', _.swipeHandler);
-
-        _.$list.off('click.slick', _.clickHandler);
-
-        $(document).off(_.visibilityChange, _.visibility);
-
-        _.cleanUpSlideEvents();
-
-        if (_.options.accessibility === true) {
-            _.$list.off('keydown.slick', _.keyHandler);
-        }
-
-        if (_.options.focusOnSelect === true) {
-            $(_.$slideTrack).children().off('click.slick', _.selectHandler);
-        }
-
-        $(window).off('orientationchange.slick.slick-' + _.instanceUid, _.orientationChange);
-
-        $(window).off('resize.slick.slick-' + _.instanceUid, _.resize);
-
-        $('[draggable!=true]', _.$slideTrack).off('dragstart', _.preventDefault);
-
-        $(window).off('load.slick.slick-' + _.instanceUid, _.setPosition);
-
-    };
-
-    Slick.prototype.cleanUpSlideEvents = function() {
-
-        var _ = this;
-
-        _.$list.off('mouseenter.slick', $.proxy(_.interrupt, _, true));
-        _.$list.off('mouseleave.slick', $.proxy(_.interrupt, _, false));
-
-    };
-
-    Slick.prototype.cleanUpRows = function() {
-
-        var _ = this, originalSlides;
-
-        if(_.options.rows > 1) {
-            originalSlides = _.$slides.children().children();
-            originalSlides.removeAttr('style');
-            _.$slider.empty().append(originalSlides);
-        }
-
-    };
-
-    Slick.prototype.clickHandler = function(event) {
-
-        var _ = this;
-
-        if (_.shouldClick === false) {
-            event.stopImmediatePropagation();
-            event.stopPropagation();
-            event.preventDefault();
-        }
-
-    };
-
-    Slick.prototype.destroy = function(refresh) {
-
-        var _ = this;
-
-        _.autoPlayClear();
-
-        _.touchObject = {};
-
-        _.cleanUpEvents();
-
-        $('.slick-cloned', _.$slider).detach();
-
-        if (_.$dots) {
-            _.$dots.remove();
-        }
-
-        if ( _.$prevArrow && _.$prevArrow.length ) {
-
-            _.$prevArrow
-                .removeClass('slick-disabled slick-arrow slick-hidden')
-                .removeAttr('aria-hidden aria-disabled tabindex')
-                .css('display','');
-
-            if ( _.htmlExpr.test( _.options.prevArrow )) {
-                _.$prevArrow.remove();
-            }
-        }
-
-        if ( _.$nextArrow && _.$nextArrow.length ) {
-
-            _.$nextArrow
-                .removeClass('slick-disabled slick-arrow slick-hidden')
-                .removeAttr('aria-hidden aria-disabled tabindex')
-                .css('display','');
-
-            if ( _.htmlExpr.test( _.options.nextArrow )) {
-                _.$nextArrow.remove();
-            }
-        }
-
-
-        if (_.$slides) {
-
-            _.$slides
-                .removeClass('slick-slide slick-active slick-center slick-visible slick-current')
-                .removeAttr('aria-hidden')
-                .removeAttr('data-slick-index')
-                .each(function(){
-                    $(this).attr('style', $(this).data('originalStyling'));
-                });
-
-            _.$slideTrack.children(this.options.slide).detach();
-
-            _.$slideTrack.detach();
-
-            _.$list.detach();
-
-            _.$slider.append(_.$slides);
-        }
-
-        _.cleanUpRows();
-
-        _.$slider.removeClass('slick-slider');
-        _.$slider.removeClass('slick-initialized');
-        _.$slider.removeClass('slick-dotted');
-
-        _.unslicked = true;
-
-        if(!refresh) {
-            _.$slider.trigger('destroy', [_]);
-        }
-
-    };
-
-    Slick.prototype.disableTransition = function(slide) {
-
-        var _ = this,
-            transition = {};
-
-        transition[_.transitionType] = '';
-
-        if (_.options.fade === false) {
-            _.$slideTrack.css(transition);
-        } else {
-            _.$slides.eq(slide).css(transition);
-        }
-
-    };
-
-    Slick.prototype.fadeSlide = function(slideIndex, callback) {
-
-        var _ = this;
-
-        if (_.cssTransitions === false) {
-
-            _.$slides.eq(slideIndex).css({
-                zIndex: _.options.zIndex
-            });
-
-            _.$slides.eq(slideIndex).animate({
-                opacity: 1
-            }, _.options.speed, _.options.easing, callback);
-
-        } else {
-
-            _.applyTransition(slideIndex);
-
-            _.$slides.eq(slideIndex).css({
-                opacity: 1,
-                zIndex: _.options.zIndex
-            });
-
-            if (callback) {
-                setTimeout(function() {
-
-                    _.disableTransition(slideIndex);
-
-                    callback.call();
-                }, _.options.speed);
-            }
-
-        }
-
-    };
-
-    Slick.prototype.fadeSlideOut = function(slideIndex) {
-
-        var _ = this;
-
-        if (_.cssTransitions === false) {
-
-            _.$slides.eq(slideIndex).animate({
-                opacity: 0,
-                zIndex: _.options.zIndex - 2
-            }, _.options.speed, _.options.easing);
-
-        } else {
-
-            _.applyTransition(slideIndex);
-
-            _.$slides.eq(slideIndex).css({
-                opacity: 0,
-                zIndex: _.options.zIndex - 2
-            });
-
-        }
-
-    };
-
-    Slick.prototype.filterSlides = Slick.prototype.slickFilter = function(filter) {
-
-        var _ = this;
-
-        if (filter !== null) {
-
-            _.$slidesCache = _.$slides;
-
-            _.unload();
-
-            _.$slideTrack.children(this.options.slide).detach();
-
-            _.$slidesCache.filter(filter).appendTo(_.$slideTrack);
-
-            _.reinit();
-
-        }
-
-    };
-
-    Slick.prototype.focusHandler = function() {
-
-        var _ = this;
-
-        _.$slider
-            .off('focus.slick blur.slick')
-            .on('focus.slick blur.slick', '*', function(event) {
-
-            event.stopImmediatePropagation();
-            var $sf = $(this);
-
-            setTimeout(function() {
-
-                if( _.options.pauseOnFocus ) {
-                    _.focussed = $sf.is(':focus');
-                    _.autoPlay();
-                }
-
-            }, 0);
-
-        });
-    };
-
-    Slick.prototype.getCurrent = Slick.prototype.slickCurrentSlide = function() {
-
-        var _ = this;
-        return _.currentSlide;
-
-    };
-
-    Slick.prototype.getDotCount = function() {
-
-        var _ = this;
-
-        var breakPoint = 0;
-        var counter = 0;
-        var pagerQty = 0;
-
-        if (_.options.infinite === true) {
-            if (_.slideCount <= _.options.slidesToShow) {
-                 ++pagerQty;
-            } else {
-                while (breakPoint < _.slideCount) {
-                    ++pagerQty;
-                    breakPoint = counter + _.options.slidesToScroll;
-                    counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow;
-                }
-            }
-        } else if (_.options.centerMode === true) {
-            pagerQty = _.slideCount;
-        } else if(!_.options.asNavFor) {
-            pagerQty = 1 + Math.ceil((_.slideCount - _.options.slidesToShow) / _.options.slidesToScroll);
-        }else {
-            while (breakPoint < _.slideCount) {
-                ++pagerQty;
-                breakPoint = counter + _.options.slidesToScroll;
-                counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow;
-            }
-        }
-
-        return pagerQty - 1;
-
-    };
-
-    Slick.prototype.getLeft = function(slideIndex) {
-
-        var _ = this,
-            targetLeft,
-            verticalHeight,
-            verticalOffset = 0,
-            targetSlide,
-            coef;
-
-        _.slideOffset = 0;
-        verticalHeight = _.$slides.first().outerHeight(true);
-
-        if (_.options.infinite === true) {
-            if (_.slideCount > _.options.slidesToShow) {
-                _.slideOffset = (_.slideWidth * _.options.slidesToShow) * -1;
-                coef = -1
-
-                if (_.options.vertical === true && _.options.centerMode === true) {
-                    if (_.options.slidesToShow === 2) {
-                        coef = -1.5;
-                    } else if (_.options.slidesToShow === 1) {
-                        coef = -2
-                    }
-                }
-                verticalOffset = (verticalHeight * _.options.slidesToShow) * coef;
-            }
-            if (_.slideCount % _.options.slidesToScroll !== 0) {
-                if (slideIndex + _.options.slidesToScroll > _.slideCount && _.slideCount > _.options.slidesToShow) {
-                    if (slideIndex > _.slideCount) {
-                        _.slideOffset = ((_.options.slidesToShow - (slideIndex - _.slideCount)) * _.slideWidth) * -1;
-                        verticalOffset = ((_.options.slidesToShow - (slideIndex - _.slideCount)) * verticalHeight) * -1;
-                    } else {
-                        _.slideOffset = ((_.slideCount % _.options.slidesToScroll) * _.slideWidth) * -1;
-                        verticalOffset = ((_.slideCount % _.options.slidesToScroll) * verticalHeight) * -1;
-                    }
-                }
-            }
-        } else {
-            if (slideIndex + _.options.slidesToShow > _.slideCount) {
-                _.slideOffset = ((slideIndex + _.options.slidesToShow) - _.slideCount) * _.slideWidth;
-                verticalOffset = ((slideIndex + _.options.slidesToShow) - _.slideCount) * verticalHeight;
-            }
-        }
-
-        if (_.slideCount <= _.options.slidesToShow) {
-            _.slideOffset = 0;
-            verticalOffset = 0;
-        }
-
-        if (_.options.centerMode === true && _.slideCount <= _.options.slidesToShow) {
-            _.slideOffset = ((_.slideWidth * Math.floor(_.options.slidesToShow)) / 2) - ((_.slideWidth * _.slideCount) / 2);
-        } else if (_.options.centerMode === true && _.options.infinite === true) {
-            _.slideOffset += _.slideWidth * Math.floor(_.options.slidesToShow / 2) - _.slideWidth;
-        } else if (_.options.centerMode === true) {
-            _.slideOffset = 0;
-            _.slideOffset += _.slideWidth * Math.floor(_.options.slidesToShow / 2);
-        }
-
-        if (_.options.vertical === false) {
-            targetLeft = ((slideIndex * _.slideWidth) * -1) + _.slideOffset;
-        } else {
-            targetLeft = ((slideIndex * verticalHeight) * -1) + verticalOffset;
-        }
-
-        if (_.options.variableWidth === true) {
-
-            if (_.slideCount <= _.options.slidesToShow || _.options.infinite === false) {
-                targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex);
-            } else {
-                targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex + _.options.slidesToShow);
-            }
-
-            if (_.options.rtl === true) {
-                if (targetSlide[0]) {
-                    targetLeft = (_.$slideTrack.width() - targetSlide[0].offsetLeft - targetSlide.width()) * -1;
-                } else {
-                    targetLeft =  0;
-                }
-            } else {
-                targetLeft = targetSlide[0] ? targetSlide[0].offsetLeft * -1 : 0;
-            }
-
-            if (_.options.centerMode === true) {
-                if (_.slideCount <= _.options.slidesToShow || _.options.infinite === false) {
-                    targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex);
-                } else {
-                    targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex + _.options.slidesToShow + 1);
-                }
-
-                if (_.options.rtl === true) {
-                    if (targetSlide[0]) {
-                        targetLeft = (_.$slideTrack.width() - targetSlide[0].offsetLeft - targetSlide.width()) * -1;
-                    } else {
-                        targetLeft =  0;
-                    }
-                } else {
-                    targetLeft = targetSlide[0] ? targetSlide[0].offsetLeft * -1 : 0;
-                }
-
-                targetLeft += (_.$list.width() - targetSlide.outerWidth()) / 2;
-            }
-        }
-
-        return targetLeft;
-
-    };
-
-    Slick.prototype.getOption = Slick.prototype.slickGetOption = function(option) {
-
-        var _ = this;
-
-        return _.options[option];
-
-    };
-
-    Slick.prototype.getNavigableIndexes = function() {
-
-        var _ = this,
-            breakPoint = 0,
-            counter = 0,
-            indexes = [],
-            max;
-
-        if (_.options.infinite === false) {
-            max = _.slideCount;
-        } else {
-            breakPoint = _.options.slidesToScroll * -1;
-            counter = _.options.slidesToScroll * -1;
-            max = _.slideCount * 2;
-        }
-
-        while (breakPoint < max) {
-            indexes.push(breakPoint);
-            breakPoint = counter + _.options.slidesToScroll;
-            counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow;
-        }
-
-        return indexes;
-
-    };
-
-    Slick.prototype.getSlick = function() {
-
-        return this;
-
-    };
-
-    Slick.prototype.getSlideCount = function() {
-
-        var _ = this,
-            slidesTraversed, swipedSlide, centerOffset;
-
-        centerOffset = _.options.centerMode === true ? _.slideWidth * Math.floor(_.options.slidesToShow / 2) : 0;
-
-        if (_.options.swipeToSlide === true) {
-            _.$slideTrack.find('.slick-slide').each(function(index, slide) {
-                if (slide.offsetLeft - centerOffset + ($(slide).outerWidth() / 2) > (_.swipeLeft * -1)) {
-                    swipedSlide = slide;
-                    return false;
-                }
-            });
-
-            slidesTraversed = Math.abs($(swipedSlide).attr('data-slick-index') - _.currentSlide) || 1;
-
-            return slidesTraversed;
-
-        } else {
-            return _.options.slidesToScroll;
-        }
-
-    };
-
-    Slick.prototype.goTo = Slick.prototype.slickGoTo = function(slide, dontAnimate) {
-
-        var _ = this;
-
-        _.changeSlide({
-            data: {
-                message: 'index',
-                index: parseInt(slide)
-            }
-        }, dontAnimate);
-
-    };
-
-    Slick.prototype.init = function(creation) {
-
-        var _ = this;
-
-        if (!$(_.$slider).hasClass('slick-initialized')) {
-
-            $(_.$slider).addClass('slick-initialized');
-
-            _.buildRows();
-            _.buildOut();
-            _.setProps();
-            _.startLoad();
-            _.loadSlider();
-            _.initializeEvents();
-            _.updateArrows();
-            _.updateDots();
-            _.checkResponsive(true);
-            _.focusHandler();
-
-        }
-
-        if (creation) {
-            _.$slider.trigger('init', [_]);
-        }
-
-        if (_.options.accessibility === true) {
-            _.initADA();
-        }
-
-        if ( _.options.autoplay ) {
-
-            _.paused = false;
-            _.autoPlay();
-
-        }
-
-    };
-
-    Slick.prototype.initADA = function() {
-        var _ = this,
-                numDotGroups = Math.ceil(_.slideCount / _.options.slidesToShow),
-                tabControlIndexes = _.getNavigableIndexes().filter(function(val) {
-                    return (val >= 0) && (val < _.slideCount);
-                });
-
-        _.$slides.add(_.$slideTrack.find('.slick-cloned')).attr({
-            'aria-hidden': 'true',
-            'tabindex': '-1'
-        }).find('a, input, button, select').attr({
-            'tabindex': '-1'
-        });
-
-        if (_.$dots !== null) {
-            _.$slides.not(_.$slideTrack.find('.slick-cloned')).each(function(i) {
-                var slideControlIndex = tabControlIndexes.indexOf(i);
-
-                $(this).attr({
-                    'role': 'tabpanel',
-                    'id': 'slick-slide' + _.instanceUid + i,
-                    'tabindex': -1
-                });
-
-                if (slideControlIndex !== -1) {
-                    $(this).attr({
-                        'aria-describedby': 'slick-slide-control' + _.instanceUid + slideControlIndex
-                    });
-                }
-            });
-
-            _.$dots.attr('role', 'tablist').find('li').each(function(i) {
-                var mappedSlideIndex = tabControlIndexes[i];
-
-                $(this).attr({
-                    'role': 'presentation'
-                });
-
-                $(this).find('button').first().attr({
-                    'role': 'tab',
-                    'id': 'slick-slide-control' + _.instanceUid + i,
-                    'aria-controls': 'slick-slide' + _.instanceUid + mappedSlideIndex,
-                    'aria-label': (i + 1) + ' of ' + numDotGroups,
-                    'aria-selected': null,
-                    'tabindex': '-1'
-                });
-
-            }).eq(_.currentSlide).find('button').attr({
-                'aria-selected': 'true',
-                'tabindex': '0'
-            }).end();
-        }
-
-        for (var i=_.currentSlide, max=i+_.options.slidesToShow; i < max; i++) {
-            _.$slides.eq(i).attr('tabindex', 0);
-        }
-
-        _.activateADA();
-
-    };
-
-    Slick.prototype.initArrowEvents = function() {
-
-        var _ = this;
-
-        if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {
-            _.$prevArrow
-               .off('click.slick')
-               .on('click.slick', {
-                    message: 'previous'
-               }, _.changeSlide);
-            _.$nextArrow
-               .off('click.slick')
-               .on('click.slick', {
-                    message: 'next'
-               }, _.changeSlide);
-
-            if (_.options.accessibility === true) {
-                _.$prevArrow.on('keydown.slick', _.keyHandler);
-                _.$nextArrow.on('keydown.slick', _.keyHandler);
-            }
-        }
-
-    };
-
-    Slick.prototype.initDotEvents = function() {
-
-        var _ = this;
-
-        if (_.options.dots === true) {
-            $('li', _.$dots).on('click.slick', {
-                message: 'index'
-            }, _.changeSlide);
-
-            if (_.options.accessibility === true) {
-                _.$dots.on('keydown.slick', _.keyHandler);
-            }
-        }
-
-        if ( _.options.dots === true && _.options.pauseOnDotsHover === true ) {
-
-            $('li', _.$dots)
-                .on('mouseenter.slick', $.proxy(_.interrupt, _, true))
-                .on('mouseleave.slick', $.proxy(_.interrupt, _, false));
-
-        }
-
-    };
-
-    Slick.prototype.initSlideEvents = function() {
-
-        var _ = this;
-
-        if ( _.options.pauseOnHover ) {
-
-            _.$list.on('mouseenter.slick', $.proxy(_.interrupt, _, true));
-            _.$list.on('mouseleave.slick', $.proxy(_.interrupt, _, false));
-
-        }
-
-    };
-
-    Slick.prototype.initializeEvents = function() {
-
-        var _ = this;
-
-        _.initArrowEvents();
-
-        _.initDotEvents();
-        _.initSlideEvents();
-
-        _.$list.on('touchstart.slick mousedown.slick', {
-            action: 'start'
-        }, _.swipeHandler);
-        _.$list.on('touchmove.slick mousemove.slick', {
-            action: 'move'
-        }, _.swipeHandler);
-        _.$list.on('touchend.slick mouseup.slick', {
-            action: 'end'
-        }, _.swipeHandler);
-        _.$list.on('touchcancel.slick mouseleave.slick', {
-            action: 'end'
-        }, _.swipeHandler);
-
-        _.$list.on('click.slick', _.clickHandler);
-
-        $(document).on(_.visibilityChange, $.proxy(_.visibility, _));
-
-        if (_.options.accessibility === true) {
-            _.$list.on('keydown.slick', _.keyHandler);
-        }
-
-        if (_.options.focusOnSelect === true) {
-            $(_.$slideTrack).children().on('click.slick', _.selectHandler);
-        }
-
-        $(window).on('orientationchange.slick.slick-' + _.instanceUid, $.proxy(_.orientationChange, _));
-
-        $(window).on('resize.slick.slick-' + _.instanceUid, $.proxy(_.resize, _));
-
-        $('[draggable!=true]', _.$slideTrack).on('dragstart', _.preventDefault);
-
-        $(window).on('load.slick.slick-' + _.instanceUid, _.setPosition);
-        $(_.setPosition);
-
-    };
-
-    Slick.prototype.initUI = function() {
-
-        var _ = this;
-
-        if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {
-
-            _.$prevArrow.show();
-            _.$nextArrow.show();
-
-        }
-
-        if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {
-
-            _.$dots.show();
-
-        }
-
-    };
-
-    Slick.prototype.keyHandler = function(event) {
-
-        var _ = this;
-         //Dont slide if the cursor is inside the form fields and arrow keys are pressed
-        if(!event.target.tagName.match('TEXTAREA|INPUT|SELECT')) {
-            if (event.keyCode === 37 && _.options.accessibility === true) {
-                _.changeSlide({
-                    data: {
-                        message: _.options.rtl === true ? 'next' :  'previous'
-                    }
-                });
-            } else if (event.keyCode === 39 && _.options.accessibility === true) {
-                _.changeSlide({
-                    data: {
-                        message: _.options.rtl === true ? 'previous' : 'next'
-                    }
-                });
-            }
-        }
-
-    };
-
-    Slick.prototype.lazyLoad = function() {
-
-        var _ = this,
-            loadRange, cloneRange, rangeStart, rangeEnd;
-
-        function loadImages(imagesScope) {
-
-            $('img[data-lazy]', imagesScope).each(function() {
-
-                var image = $(this),
-                    imageSource = $(this).attr('data-lazy'),
-                    imageSrcSet = $(this).attr('data-srcset'),
-                    imageSizes  = $(this).attr('data-sizes') || _.$slider.attr('data-sizes'),
-                    imageToLoad = document.createElement('img');
-
-                imageToLoad.onload = function() {
-
-                    image
-                        .animate({ opacity: 0 }, 100, function() {
-
-                            if (imageSrcSet) {
-                                image
-                                    .attr('srcset', imageSrcSet );
-
-                                if (imageSizes) {
-                                    image
-                                        .attr('sizes', imageSizes );
-                                }
-                            }
-
-                            image
-                                .attr('src', imageSource)
-                                .animate({ opacity: 1 }, 200, function() {
-                                    image
-                                        .removeAttr('data-lazy data-srcset data-sizes')
-                                        .removeClass('slick-loading');
-                                });
-                            _.$slider.trigger('lazyLoaded', [_, image, imageSource]);
-                        });
-
-                };
-
-                imageToLoad.onerror = function() {
-
-                    image
-                        .removeAttr( 'data-lazy' )
-                        .removeClass( 'slick-loading' )
-                        .addClass( 'slick-lazyload-error' );
-
-                    _.$slider.trigger('lazyLoadError', [ _, image, imageSource ]);
-
-                };
-
-                imageToLoad.src = imageSource;
-
-            });
-
-        }
-
-        if (_.options.centerMode === true) {
-            if (_.options.infinite === true) {
-                rangeStart = _.currentSlide + (_.options.slidesToShow / 2 + 1);
-                rangeEnd = rangeStart + _.options.slidesToShow + 2;
-            } else {
-                rangeStart = Math.max(0, _.currentSlide - (_.options.slidesToShow / 2 + 1));
-                rangeEnd = 2 + (_.options.slidesToShow / 2 + 1) + _.currentSlide;
-            }
-        } else {
-            rangeStart = _.options.infinite ? _.options.slidesToShow + _.currentSlide : _.currentSlide;
-            rangeEnd = Math.ceil(rangeStart + _.options.slidesToShow);
-            if (_.options.fade === true) {
-                if (rangeStart > 0) rangeStart--;
-                if (rangeEnd <= _.slideCount) rangeEnd++;
-            }
-        }
-
-        loadRange = _.$slider.find('.slick-slide').slice(rangeStart, rangeEnd);
-
-        if (_.options.lazyLoad === 'anticipated') {
-            var prevSlide = rangeStart - 1,
-                nextSlide = rangeEnd,
-                $slides = _.$slider.find('.slick-slide');
-
-            for (var i = 0; i < _.options.slidesToScroll; i++) {
-                if (prevSlide < 0) prevSlide = _.slideCount - 1;
-                loadRange = loadRange.add($slides.eq(prevSlide));
-                loadRange = loadRange.add($slides.eq(nextSlide));
-                prevSlide--;
-                nextSlide++;
-            }
-        }
-
-        loadImages(loadRange);
-
-        if (_.slideCount <= _.options.slidesToShow) {
-            cloneRange = _.$slider.find('.slick-slide');
-            loadImages(cloneRange);
-        } else
-        if (_.currentSlide >= _.slideCount - _.options.slidesToShow) {
-            cloneRange = _.$slider.find('.slick-cloned').slice(0, _.options.slidesToShow);
-            loadImages(cloneRange);
-        } else if (_.currentSlide === 0) {
-            cloneRange = _.$slider.find('.slick-cloned').slice(_.options.slidesToShow * -1);
-            loadImages(cloneRange);
-        }
-
-    };
-
-    Slick.prototype.loadSlider = function() {
-
-        var _ = this;
-
-        _.setPosition();
-
-        _.$slideTrack.css({
-            opacity: 1
-        });
-
-        _.$slider.removeClass('slick-loading');
-
-        _.initUI();
-
-        if (_.options.lazyLoad === 'progressive') {
-            _.progressiveLazyLoad();
-        }
-
-    };
-
-    Slick.prototype.next = Slick.prototype.slickNext = function() {
-
-        var _ = this;
-
-        _.changeSlide({
-            data: {
-                message: 'next'
-            }
-        });
-
-    };
-
-    Slick.prototype.orientationChange = function() {
-
-        var _ = this;
-
-        _.checkResponsive();
-        _.setPosition();
-
-    };
-
-    Slick.prototype.pause = Slick.prototype.slickPause = function() {
-
-        var _ = this;
-
-        _.autoPlayClear();
-        _.paused = true;
-
-    };
-
-    Slick.prototype.play = Slick.prototype.slickPlay = function() {
-
-        var _ = this;
-
-        _.autoPlay();
-        _.options.autoplay = true;
-        _.paused = false;
-        _.focussed = false;
-        _.interrupted = false;
-
-    };
-
-    Slick.prototype.postSlide = function(index) {
-
-        var _ = this;
-
-        if( !_.unslicked ) {
-
-            _.$slider.trigger('afterChange', [_, index]);
-
-            _.animating = false;
-
-            if (_.slideCount > _.options.slidesToShow) {
-                _.setPosition();
-            }
-
-            _.swipeLeft = null;
-
-            if ( _.options.autoplay ) {
-                _.autoPlay();
-            }
-
-            if (_.options.accessibility === true) {
-                _.initADA();
-                
-                if (_.options.focusOnChange) {
-                    var $currentSlide = $(_.$slides.get(_.currentSlide));
-                    $currentSlide.attr('tabindex', 0).focus();
-                }
-            }
-
-        }
-
-    };
-
-    Slick.prototype.prev = Slick.prototype.slickPrev = function() {
-
-        var _ = this;
-
-        _.changeSlide({
-            data: {
-                message: 'previous'
-            }
-        });
-
-    };
-
-    Slick.prototype.preventDefault = function(event) {
-
-        event.preventDefault();
-
-    };
-
-    Slick.prototype.progressiveLazyLoad = function( tryCount ) {
-
-        tryCount = tryCount || 1;
-
-        var _ = this,
-            $imgsToLoad = $( 'img[data-lazy]', _.$slider ),
-            image,
-            imageSource,
-            imageSrcSet,
-            imageSizes,
-            imageToLoad;
-
-        if ( $imgsToLoad.length ) {
-
-            image = $imgsToLoad.first();
-            imageSource = image.attr('data-lazy');
-            imageSrcSet = image.attr('data-srcset');
-            imageSizes  = image.attr('data-sizes') || _.$slider.attr('data-sizes');
-            imageToLoad = document.createElement('img');
-
-            imageToLoad.onload = function() {
-
-                if (imageSrcSet) {
-                    image
-                        .attr('srcset', imageSrcSet );
-
-                    if (imageSizes) {
-                        image
-                            .attr('sizes', imageSizes );
-                    }
-                }
-
-                image
-                    .attr( 'src', imageSource )
-                    .removeAttr('data-lazy data-srcset data-sizes')
-                    .removeClass('slick-loading');
-
-                if ( _.options.adaptiveHeight === true ) {
-                    _.setPosition();
-                }
-
-                _.$slider.trigger('lazyLoaded', [ _, image, imageSource ]);
-                _.progressiveLazyLoad();
-
-            };
-
-            imageToLoad.onerror = function() {
-
-                if ( tryCount < 3 ) {
-
-                    /**
-                     * try to load the image 3 times,
-                     * leave a slight delay so we don't get
-                     * servers blocking the request.
-                     */
-                    setTimeout( function() {
-                        _.progressiveLazyLoad( tryCount + 1 );
-                    }, 500 );
-
-                } else {
-
-                    image
-                        .removeAttr( 'data-lazy' )
-                        .removeClass( 'slick-loading' )
-                        .addClass( 'slick-lazyload-error' );
-
-                    _.$slider.trigger('lazyLoadError', [ _, image, imageSource ]);
-
-                    _.progressiveLazyLoad();
-
-                }
-
-            };
-
-            imageToLoad.src = imageSource;
-
-        } else {
-
-            _.$slider.trigger('allImagesLoaded', [ _ ]);
-
-        }
-
-    };
-
-    Slick.prototype.refresh = function( initializing ) {
-
-        var _ = this, currentSlide, lastVisibleIndex;
-
-        lastVisibleIndex = _.slideCount - _.options.slidesToShow;
-
-        // in non-infinite sliders, we don't want to go past the
-        // last visible index.
-        if( !_.options.infinite && ( _.currentSlide > lastVisibleIndex )) {
-            _.currentSlide = lastVisibleIndex;
-        }
-
-        // if less slides than to show, go to start.
-        if ( _.slideCount <= _.options.slidesToShow ) {
-            _.currentSlide = 0;
-
-        }
-
-        currentSlide = _.currentSlide;
-
-        _.destroy(true);
-
-        $.extend(_, _.initials, { currentSlide: currentSlide });
-
-        _.init();
-
-        if( !initializing ) {
-
-            _.changeSlide({
-                data: {
-                    message: 'index',
-                    index: currentSlide
-                }
-            }, false);
-
-        }
-
-    };
-
-    Slick.prototype.registerBreakpoints = function() {
-
-        var _ = this, breakpoint, currentBreakpoint, l,
-            responsiveSettings = _.options.responsive || null;
-
-        if ( $.type(responsiveSettings) === 'array' && responsiveSettings.length ) {
-
-            _.respondTo = _.options.respondTo || 'window';
-
-            for ( breakpoint in responsiveSettings ) {
-
-                l = _.breakpoints.length-1;
-
-                if (responsiveSettings.hasOwnProperty(breakpoint)) {
-                    currentBreakpoint = responsiveSettings[breakpoint].breakpoint;
-
-                    // loop through the breakpoints and cut out any existing
-                    // ones with the same breakpoint number, we don't want dupes.
-                    while( l >= 0 ) {
-                        if( _.breakpoints[l] && _.breakpoints[l] === currentBreakpoint ) {
-                            _.breakpoints.splice(l,1);
-                        }
-                        l--;
-                    }
-
-                    _.breakpoints.push(currentBreakpoint);
-                    _.breakpointSettings[currentBreakpoint] = responsiveSettings[breakpoint].settings;
-
-                }
-
-            }
-
-            _.breakpoints.sort(function(a, b) {
-                return ( _.options.mobileFirst ) ? a-b : b-a;
-            });
-
-        }
-
-    };
-
-    Slick.prototype.reinit = function() {
-
-        var _ = this;
-
-        _.$slides =
-            _.$slideTrack
-                .children(_.options.slide)
-                .addClass('slick-slide');
-
-        _.slideCount = _.$slides.length;
-
-        if (_.currentSlide >= _.slideCount && _.currentSlide !== 0) {
-            _.currentSlide = _.currentSlide - _.options.slidesToScroll;
-        }
-
-        if (_.slideCount <= _.options.slidesToShow) {
-            _.currentSlide = 0;
-        }
-
-        _.registerBreakpoints();
-
-        _.setProps();
-        _.setupInfinite();
-        _.buildArrows();
-        _.updateArrows();
-        _.initArrowEvents();
-        _.buildDots();
-        _.updateDots();
-        _.initDotEvents();
-        _.cleanUpSlideEvents();
-        _.initSlideEvents();
-
-        _.checkResponsive(false, true);
-
-        if (_.options.focusOnSelect === true) {
-            $(_.$slideTrack).children().on('click.slick', _.selectHandler);
-        }
-
-        _.setSlideClasses(typeof _.currentSlide === 'number' ? _.currentSlide : 0);
-
-        _.setPosition();
-        _.focusHandler();
-
-        _.paused = !_.options.autoplay;
-        _.autoPlay();
-
-        _.$slider.trigger('reInit', [_]);
-
-    };
-
-    Slick.prototype.resize = function() {
-
-        var _ = this;
-
-        if ($(window).width() !== _.windowWidth) {
-            clearTimeout(_.windowDelay);
-            _.windowDelay = window.setTimeout(function() {
-                _.windowWidth = $(window).width();
-                _.checkResponsive();
-                if( !_.unslicked ) { _.setPosition(); }
-            }, 50);
-        }
-    };
-
-    Slick.prototype.removeSlide = Slick.prototype.slickRemove = function(index, removeBefore, removeAll) {
-
-        var _ = this;
-
-        if (typeof(index) === 'boolean') {
-            removeBefore = index;
-            index = removeBefore === true ? 0 : _.slideCount - 1;
-        } else {
-            index = removeBefore === true ? --index : index;
-        }
-
-        if (_.slideCount < 1 || index < 0 || index > _.slideCount - 1) {
-            return false;
-        }
-
-        _.unload();
-
-        if (removeAll === true) {
-            _.$slideTrack.children().remove();
-        } else {
-            _.$slideTrack.children(this.options.slide).eq(index).remove();
-        }
-
-        _.$slides = _.$slideTrack.children(this.options.slide);
-
-        _.$slideTrack.children(this.options.slide).detach();
-
-        _.$slideTrack.append(_.$slides);
-
-        _.$slidesCache = _.$slides;
-
-        _.reinit();
-
-    };
-
-    Slick.prototype.setCSS = function(position) {
-
-        var _ = this,
-            positionProps = {},
-            x, y;
-
-        if (_.options.rtl === true) {
-            position = -position;
-        }
-        x = _.positionProp == 'left' ? Math.ceil(position) + 'px' : '0px';
-        y = _.positionProp == 'top' ? Math.ceil(position) + 'px' : '0px';
-
-        positionProps[_.positionProp] = position;
-
-        if (_.transformsEnabled === false) {
-            _.$slideTrack.css(positionProps);
-        } else {
-            positionProps = {};
-            if (_.cssTransitions === false) {
-                positionProps[_.animType] = 'translate(' + x + ', ' + y + ')';
-                _.$slideTrack.css(positionProps);
-            } else {
-                positionProps[_.animType] = 'translate3d(' + x + ', ' + y + ', 0px)';
-                _.$slideTrack.css(positionProps);
-            }
-        }
-
-    };
-
-    Slick.prototype.setDimensions = function() {
-
-        var _ = this;
-
-        if (_.options.vertical === false) {
-            if (_.options.centerMode === true) {
-                _.$list.css({
-                    padding: ('0px ' + _.options.centerPadding)
-                });
-            }
-        } else {
-            _.$list.height(_.$slides.first().outerHeight(true) * _.options.slidesToShow);
-            if (_.options.centerMode === true) {
-                _.$list.css({
-                    padding: (_.options.centerPadding + ' 0px')
-                });
-            }
-        }
-
-        _.listWidth = _.$list.width();
-        _.listHeight = _.$list.height();
-
-
-        if (_.options.vertical === false && _.options.variableWidth === false) {
-            _.slideWidth = Math.ceil(_.listWidth / _.options.slidesToShow);
-            _.$slideTrack.width(Math.ceil((_.slideWidth * _.$slideTrack.children('.slick-slide').length)));
-
-        } else if (_.options.variableWidth === true) {
-            _.$slideTrack.width(5000 * _.slideCount);
-        } else {
-            _.slideWidth = Math.ceil(_.listWidth);
-            _.$slideTrack.height(Math.ceil((_.$slides.first().outerHeight(true) * _.$slideTrack.children('.slick-slide').length)));
-        }
-
-        var offset = _.$slides.first().outerWidth(true) - _.$slides.first().width();
-        if (_.options.variableWidth === false) _.$slideTrack.children('.slick-slide').width(_.slideWidth - offset);
-
-    };
-
-    Slick.prototype.setFade = function() {
-
-        var _ = this,
-            targetLeft;
-
-        _.$slides.each(function(index, element) {
-            targetLeft = (_.slideWidth * index) * -1;
-            if (_.options.rtl === true) {
-                $(element).css({
-                    position: 'relative',
-                    right: targetLeft,
-                    top: 0,
-                    zIndex: _.options.zIndex - 2,
-                    opacity: 0
-                });
-            } else {
-                $(element).css({
-                    position: 'relative',
-                    left: targetLeft,
-                    top: 0,
-                    zIndex: _.options.zIndex - 2,
-                    opacity: 0
-                });
-            }
-        });
-
-        _.$slides.eq(_.currentSlide).css({
-            zIndex: _.options.zIndex - 1,
-            opacity: 1
-        });
-
-    };
-
-    Slick.prototype.setHeight = function() {
-
-        var _ = this;
-
-        if (_.options.slidesToShow === 1 && _.options.adaptiveHeight === true && _.options.vertical === false) {
-            var targetHeight = _.$slides.eq(_.currentSlide).outerHeight(true);
-            _.$list.css('height', targetHeight);
-        }
-
-    };
-
-    Slick.prototype.setOption =
-    Slick.prototype.slickSetOption = function() {
-
-        /**
-         * accepts arguments in format of:
-         *
-         *  - for changing a single option's value:
-         *     .slick("setOption", option, value, refresh )
-         *
-         *  - for changing a set of responsive options:
-         *     .slick("setOption", 'responsive', [{}, ...], refresh )
-         *
-         *  - for updating multiple values at once (not responsive)
-         *     .slick("setOption", { 'option': value, ... }, refresh )
-         */
-
-        var _ = this, l, item, option, value, refresh = false, type;
-
-        if( $.type( arguments[0] ) === 'object' ) {
-
-            option =  arguments[0];
-            refresh = arguments[1];
-            type = 'multiple';
-
-        } else if ( $.type( arguments[0] ) === 'string' ) {
-
-            option =  arguments[0];
-            value = arguments[1];
-            refresh = arguments[2];
-
-            if ( arguments[0] === 'responsive' && $.type( arguments[1] ) === 'array' ) {
-
-                type = 'responsive';
-
-            } else if ( typeof arguments[1] !== 'undefined' ) {
-
-                type = 'single';
-
-            }
-
-        }
-
-        if ( type === 'single' ) {
-
-            _.options[option] = value;
-
-
-        } else if ( type === 'multiple' ) {
-
-            $.each( option , function( opt, val ) {
-
-                _.options[opt] = val;
-
-            });
-
-
-        } else if ( type === 'responsive' ) {
-
-            for ( item in value ) {
-
-                if( $.type( _.options.responsive ) !== 'array' ) {
-
-                    _.options.responsive = [ value[item] ];
-
-                } else {
-
-                    l = _.options.responsive.length-1;
-
-                    // loop through the responsive object and splice out duplicates.
-                    while( l >= 0 ) {
-
-                        if( _.options.responsive[l].breakpoint === value[item].breakpoint ) {
-
-                            _.options.responsive.splice(l,1);
-
-                        }
-
-                        l--;
-
-                    }
-
-                    _.options.responsive.push( value[item] );
-
-                }
-
-            }
-
-        }
-
-        if ( refresh ) {
-
-            _.unload();
-            _.reinit();
-
-        }
-
-    };
-
-    Slick.prototype.setPosition = function() {
-
-        var _ = this;
-
-        _.setDimensions();
-
-        _.setHeight();
-
-        if (_.options.fade === false) {
-            _.setCSS(_.getLeft(_.currentSlide));
-        } else {
-            _.setFade();
-        }
-
-        _.$slider.trigger('setPosition', [_]);
-
-    };
-
-    Slick.prototype.setProps = function() {
-
-        var _ = this,
-            bodyStyle = document.body.style;
-
-        _.positionProp = _.options.vertical === true ? 'top' : 'left';
-
-        if (_.positionProp === 'top') {
-            _.$slider.addClass('slick-vertical');
-        } else {
-            _.$slider.removeClass('slick-vertical');
-        }
-
-        if (bodyStyle.WebkitTransition !== undefined ||
-            bodyStyle.MozTransition !== undefined ||
-            bodyStyle.msTransition !== undefined) {
-            if (_.options.useCSS === true) {
-                _.cssTransitions = true;
-            }
-        }
-
-        if ( _.options.fade ) {
-            if ( typeof _.options.zIndex === 'number' ) {
-                if( _.options.zIndex < 3 ) {
-                    _.options.zIndex = 3;
-                }
-            } else {
-                _.options.zIndex = _.defaults.zIndex;
-            }
-        }
-
-        if (bodyStyle.OTransform !== undefined) {
-            _.animType = 'OTransform';
-            _.transformType = '-o-transform';
-            _.transitionType = 'OTransition';
-            if (bodyStyle.perspectiveProperty === undefined && bodyStyle.webkitPerspective === undefined) _.animType = false;
-        }
-        if (bodyStyle.MozTransform !== undefined) {
-            _.animType = 'MozTransform';
-            _.transformType = '-moz-transform';
-            _.transitionType = 'MozTransition';
-            if (bodyStyle.perspectiveProperty === undefined && bodyStyle.MozPerspective === undefined) _.animType = false;
-        }
-        if (bodyStyle.webkitTransform !== undefined) {
-            _.animType = 'webkitTransform';
-            _.transformType = '-webkit-transform';
-            _.transitionType = 'webkitTransition';
-            if (bodyStyle.perspectiveProperty === undefined && bodyStyle.webkitPerspective === undefined) _.animType = false;
-        }
-        if (bodyStyle.msTransform !== undefined) {
-            _.animType = 'msTransform';
-            _.transformType = '-ms-transform';
-            _.transitionType = 'msTransition';
-            if (bodyStyle.msTransform === undefined) _.animType = false;
-        }
-        if (bodyStyle.transform !== undefined && _.animType !== false) {
-            _.animType = 'transform';
-            _.transformType = 'transform';
-            _.transitionType = 'transition';
-        }
-        _.transformsEnabled = _.options.useTransform && (_.animType !== null && _.animType !== false);
-    };
-
-
-    Slick.prototype.setSlideClasses = function(index) {
-
-        var _ = this,
-            centerOffset, allSlides, indexOffset, remainder;
-
-        allSlides = _.$slider
-            .find('.slick-slide')
-            .removeClass('slick-active slick-center slick-current')
-            .attr('aria-hidden', 'true');
-
-        _.$slides
-            .eq(index)
-            .addClass('slick-current');
-
-        if (_.options.centerMode === true) {
-
-            var evenCoef = _.options.slidesToShow % 2 === 0 ? 1 : 0;
-
-            centerOffset = Math.floor(_.options.slidesToShow / 2);
-
-            if (_.options.infinite === true) {
-
-                if (index >= centerOffset && index <= (_.slideCount - 1) - centerOffset) {
-                    _.$slides
-                        .slice(index - centerOffset + evenCoef, index + centerOffset + 1)
-                        .addClass('slick-active')
-                        .attr('aria-hidden', 'false');
-
-                } else {
-
-                    indexOffset = _.options.slidesToShow + index;
-                    allSlides
-                        .slice(indexOffset - centerOffset + 1 + evenCoef, indexOffset + centerOffset + 2)
-                        .addClass('slick-active')
-                        .attr('aria-hidden', 'false');
-
-                }
-
-                if (index === 0) {
-
-                    allSlides
-                        .eq(allSlides.length - 1 - _.options.slidesToShow)
-                        .addClass('slick-center');
-
-                } else if (index === _.slideCount - 1) {
-
-                    allSlides
-                        .eq(_.options.slidesToShow)
-                        .addClass('slick-center');
-
-                }
-
-            }
-
-            _.$slides
-                .eq(index)
-                .addClass('slick-center');
-
-        } else {
-
-            if (index >= 0 && index <= (_.slideCount - _.options.slidesToShow)) {
-
-                _.$slides
-                    .slice(index, index + _.options.slidesToShow)
-                    .addClass('slick-active')
-                    .attr('aria-hidden', 'false');
-
-            } else if (allSlides.length <= _.options.slidesToShow) {
-
-                allSlides
-                    .addClass('slick-active')
-                    .attr('aria-hidden', 'false');
-
-            } else {
-
-                remainder = _.slideCount % _.options.slidesToShow;
-                indexOffset = _.options.infinite === true ? _.options.slidesToShow + index : index;
-
-                if (_.options.slidesToShow == _.options.slidesToScroll && (_.slideCount - index) < _.options.slidesToShow) {
-
-                    allSlides
-                        .slice(indexOffset - (_.options.slidesToShow - remainder), indexOffset + remainder)
-                        .addClass('slick-active')
-                        .attr('aria-hidden', 'false');
-
-                } else {
-
-                    allSlides
-                        .slice(indexOffset, indexOffset + _.options.slidesToShow)
-                        .addClass('slick-active')
-                        .attr('aria-hidden', 'false');
-
-                }
-
-            }
-
-        }
-
-        if (_.options.lazyLoad === 'ondemand' || _.options.lazyLoad === 'anticipated') {
-            _.lazyLoad();
-        }
-    };
-
-    Slick.prototype.setupInfinite = function() {
-
-        var _ = this,
-            i, slideIndex, infiniteCount;
-
-        if (_.options.fade === true) {
-            _.options.centerMode = false;
-        }
-
-        if (_.options.infinite === true && _.options.fade === false) {
-
-            slideIndex = null;
-
-            if (_.slideCount > _.options.slidesToShow) {
-
-                if (_.options.centerMode === true) {
-                    infiniteCount = _.options.slidesToShow + 1;
-                } else {
-                    infiniteCount = _.options.slidesToShow;
-                }
-
-                for (i = _.slideCount; i > (_.slideCount -
-                        infiniteCount); i -= 1) {
-                    slideIndex = i - 1;
-                    $(_.$slides[slideIndex]).clone(true).attr('id', '')
-                        .attr('data-slick-index', slideIndex - _.slideCount)
-                        .prependTo(_.$slideTrack).addClass('slick-cloned');
-                }
-                for (i = 0; i < infiniteCount  + _.slideCount; i += 1) {
-                    slideIndex = i;
-                    $(_.$slides[slideIndex]).clone(true).attr('id', '')
-                        .attr('data-slick-index', slideIndex + _.slideCount)
-                        .appendTo(_.$slideTrack).addClass('slick-cloned');
-                }
-                _.$slideTrack.find('.slick-cloned').find('[id]').each(function() {
-                    $(this).attr('id', '');
-                });
-
-            }
-
-        }
-
-    };
-
-    Slick.prototype.interrupt = function( toggle ) {
-
-        var _ = this;
-
-        if( !toggle ) {
-            _.autoPlay();
-        }
-        _.interrupted = toggle;
-
-    };
-
-    Slick.prototype.selectHandler = function(event) {
-
-        var _ = this;
-
-        var targetElement =
-            $(event.target).is('.slick-slide') ?
-                $(event.target) :
-                $(event.target).parents('.slick-slide');
-
-        var index = parseInt(targetElement.attr('data-slick-index'));
-
-        if (!index) index = 0;
-
-        if (_.slideCount <= _.options.slidesToShow) {
-
-            _.slideHandler(index, false, true);
-            return;
-
-        }
-
-        _.slideHandler(index);
-
-    };
-
-    Slick.prototype.slideHandler = function(index, sync, dontAnimate) {
-
-        var targetSlide, animSlide, oldSlide, slideLeft, targetLeft = null,
-            _ = this, navTarget;
-
-        sync = sync || false;
-
-        if (_.animating === true && _.options.waitForAnimate === true) {
-            return;
-        }
-
-        if (_.options.fade === true && _.currentSlide === index) {
-            return;
-        }
-
-        if (sync === false) {
-            _.asNavFor(index);
-        }
-
-        targetSlide = index;
-        targetLeft = _.getLeft(targetSlide);
-        slideLeft = _.getLeft(_.currentSlide);
-
-        _.currentLeft = _.swipeLeft === null ? slideLeft : _.swipeLeft;
-
-        if (_.options.infinite === false && _.options.centerMode === false && (index < 0 || index > _.getDotCount() * _.options.slidesToScroll)) {
-            if (_.options.fade === false) {
-                targetSlide = _.currentSlide;
-                if (dontAnimate !== true) {
-                    _.animateSlide(slideLeft, function() {
-                        _.postSlide(targetSlide);
-                    });
-                } else {
-                    _.postSlide(targetSlide);
-                }
-            }
-            return;
-        } else if (_.options.infinite === false && _.options.centerMode === true && (index < 0 || index > (_.slideCount - _.options.slidesToScroll))) {
-            if (_.options.fade === false) {
-                targetSlide = _.currentSlide;
-                if (dontAnimate !== true) {
-                    _.animateSlide(slideLeft, function() {
-                        _.postSlide(targetSlide);
-                    });
-                } else {
-                    _.postSlide(targetSlide);
-                }
-            }
-            return;
-        }
-
-        if ( _.options.autoplay ) {
-            clearInterval(_.autoPlayTimer);
-        }
-
-        if (targetSlide < 0) {
-            if (_.slideCount % _.options.slidesToScroll !== 0) {
-                animSlide = _.slideCount - (_.slideCount % _.options.slidesToScroll);
-            } else {
-                animSlide = _.slideCount + targetSlide;
-            }
-        } else if (targetSlide >= _.slideCount) {
-            if (_.slideCount % _.options.slidesToScroll !== 0) {
-                animSlide = 0;
-            } else {
-                animSlide = targetSlide - _.slideCount;
-            }
-        } else {
-            animSlide = targetSlide;
-        }
-
-        _.animating = true;
-
-        _.$slider.trigger('beforeChange', [_, _.currentSlide, animSlide]);
-
-        oldSlide = _.currentSlide;
-        _.currentSlide = animSlide;
-
-        _.setSlideClasses(_.currentSlide);
-
-        if ( _.options.asNavFor ) {
-
-            navTarget = _.getNavTarget();
-            navTarget = navTarget.slick('getSlick');
-
-            if ( navTarget.slideCount <= navTarget.options.slidesToShow ) {
-                navTarget.setSlideClasses(_.currentSlide);
-            }
-
-        }
-
-        _.updateDots();
-        _.updateArrows();
-
-        if (_.options.fade === true) {
-            if (dontAnimate !== true) {
-
-                _.fadeSlideOut(oldSlide);
-
-                _.fadeSlide(animSlide, function() {
-                    _.postSlide(animSlide);
-                });
-
-            } else {
-                _.postSlide(animSlide);
-            }
-            _.animateHeight();
-            return;
-        }
-
-        if (dontAnimate !== true) {
-            _.animateSlide(targetLeft, function() {
-                _.postSlide(animSlide);
-            });
-        } else {
-            _.postSlide(animSlide);
-        }
-
-    };
-
-    Slick.prototype.startLoad = function() {
-
-        var _ = this;
-
-        if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {
-
-            _.$prevArrow.hide();
-            _.$nextArrow.hide();
-
-        }
-
-        if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {
-
-            _.$dots.hide();
-
-        }
-
-        _.$slider.addClass('slick-loading');
-
-    };
-
-    Slick.prototype.swipeDirection = function() {
-
-        var xDist, yDist, r, swipeAngle, _ = this;
-
-        xDist = _.touchObject.startX - _.touchObject.curX;
-        yDist = _.touchObject.startY - _.touchObject.curY;
-        r = Math.atan2(yDist, xDist);
-
-        swipeAngle = Math.round(r * 180 / Math.PI);
-        if (swipeAngle < 0) {
-            swipeAngle = 360 - Math.abs(swipeAngle);
-        }
-
-        if ((swipeAngle <= 45) && (swipeAngle >= 0)) {
-            return (_.options.rtl === false ? 'left' : 'right');
-        }
-        if ((swipeAngle <= 360) && (swipeAngle >= 315)) {
-            return (_.options.rtl === false ? 'left' : 'right');
-        }
-        if ((swipeAngle >= 135) && (swipeAngle <= 225)) {
-            return (_.options.rtl === false ? 'right' : 'left');
-        }
-        if (_.options.verticalSwiping === true) {
-            if ((swipeAngle >= 35) && (swipeAngle <= 135)) {
-                return 'down';
-            } else {
-                return 'up';
-            }
-        }
-
-        return 'vertical';
-
-    };
-
-    Slick.prototype.swipeEnd = function(event) {
-
-        var _ = this,
-            slideCount,
-            direction;
-
-        _.dragging = false;
-        _.swiping = false;
-
-        if (_.scrolling) {
-            _.scrolling = false;
-            return false;
-        }
-
-        _.interrupted = false;
-        _.shouldClick = ( _.touchObject.swipeLength > 10 ) ? false : true;
-
-        if ( _.touchObject.curX === undefined ) {
-            return false;
-        }
-
-        if ( _.touchObject.edgeHit === true ) {
-            _.$slider.trigger('edge', [_, _.swipeDirection() ]);
-        }
-
-        if ( _.touchObject.swipeLength >= _.touchObject.minSwipe ) {
-
-            direction = _.swipeDirection();
-
-            switch ( direction ) {
-
-                case 'left':
-                case 'down':
-
-                    slideCount =
-                        _.options.swipeToSlide ?
-                            _.checkNavigable( _.currentSlide + _.getSlideCount() ) :
-                            _.currentSlide + _.getSlideCount();
-
-                    _.currentDirection = 0;
-
-                    break;
-
-                case 'right':
-                case 'up':
-
-                    slideCount =
-                        _.options.swipeToSlide ?
-                            _.checkNavigable( _.currentSlide - _.getSlideCount() ) :
-                            _.currentSlide - _.getSlideCount();
-
-                    _.currentDirection = 1;
-
-                    break;
-
-                default:
-
-
-            }
-
-            if( direction != 'vertical' ) {
-
-                _.slideHandler( slideCount );
-                _.touchObject = {};
-                _.$slider.trigger('swipe', [_, direction ]);
-
-            }
-
-        } else {
-
-            if ( _.touchObject.startX !== _.touchObject.curX ) {
-
-                _.slideHandler( _.currentSlide );
-                _.touchObject = {};
-
-            }
-
-        }
-
-    };
-
-    Slick.prototype.swipeHandler = function(event) {
-
-        var _ = this;
-
-        if ((_.options.swipe === false) || ('ontouchend' in document && _.options.swipe === false)) {
-            return;
-        } else if (_.options.draggable === false && event.type.indexOf('mouse') !== -1) {
-            return;
-        }
-
-        _.touchObject.fingerCount = event.originalEvent && event.originalEvent.touches !== undefined ?
-            event.originalEvent.touches.length : 1;
-
-        _.touchObject.minSwipe = _.listWidth / _.options
-            .touchThreshold;
-
-        if (_.options.verticalSwiping === true) {
-            _.touchObject.minSwipe = _.listHeight / _.options
-                .touchThreshold;
-        }
-
-        switch (event.data.action) {
-
-            case 'start':
-                _.swipeStart(event);
-                break;
-
-            case 'move':
-                _.swipeMove(event);
-                break;
-
-            case 'end':
-                _.swipeEnd(event);
-                break;
-
-        }
-
-    };
-
-    Slick.prototype.swipeMove = function(event) {
-
-        var _ = this,
-            edgeWasHit = false,
-            curLeft, swipeDirection, swipeLength, positionOffset, touches, verticalSwipeLength;
-
-        touches = event.originalEvent !== undefined ? event.originalEvent.touches : null;
-
-        if (!_.dragging || _.scrolling || touches && touches.length !== 1) {
-            return false;
-        }
-
-        curLeft = _.getLeft(_.currentSlide);
-
-        _.touchObject.curX = touches !== undefined ? touches[0].pageX : event.clientX;
-        _.touchObject.curY = touches !== undefined ? touches[0].pageY : event.clientY;
-
-        _.touchObject.swipeLength = Math.round(Math.sqrt(
-            Math.pow(_.touchObject.curX - _.touchObject.startX, 2)));
-
-        verticalSwipeLength = Math.round(Math.sqrt(
-            Math.pow(_.touchObject.curY - _.touchObject.startY, 2)));
-
-        if (!_.options.verticalSwiping && !_.swiping && verticalSwipeLength > 4) {
-            _.scrolling = true;
-            return false;
-        }
-
-        if (_.options.verticalSwiping === true) {
-            _.touchObject.swipeLength = verticalSwipeLength;
-        }
-
-        swipeDirection = _.swipeDirection();
-
-        if (event.originalEvent !== undefined && _.touchObject.swipeLength > 4) {
-            _.swiping = true;
-            event.preventDefault();
-        }
-
-        positionOffset = (_.options.rtl === false ? 1 : -1) * (_.touchObject.curX > _.touchObject.startX ? 1 : -1);
-        if (_.options.verticalSwiping === true) {
-            positionOffset = _.touchObject.curY > _.touchObject.startY ? 1 : -1;
-        }
-
-
-        swipeLength = _.touchObject.swipeLength;
-
-        _.touchObject.edgeHit = false;
-
-        if (_.options.infinite === false) {
-            if ((_.currentSlide === 0 && swipeDirection === 'right') || (_.currentSlide >= _.getDotCount() && swipeDirection === 'left')) {
-                swipeLength = _.touchObject.swipeLength * _.options.edgeFriction;
-                _.touchObject.edgeHit = true;
-            }
-        }
-
-        if (_.options.vertical === false) {
-            _.swipeLeft = curLeft + swipeLength * positionOffset;
-        } else {
-            _.swipeLeft = curLeft + (swipeLength * (_.$list.height() / _.listWidth)) * positionOffset;
-        }
-        if (_.options.verticalSwiping === true) {
-            _.swipeLeft = curLeft + swipeLength * positionOffset;
-        }
-
-        if (_.options.fade === true || _.options.touchMove === false) {
-            return false;
-        }
-
-        if (_.animating === true) {
-            _.swipeLeft = null;
-            return false;
-        }
-
-        _.setCSS(_.swipeLeft);
-
-    };
-
-    Slick.prototype.swipeStart = function(event) {
-
-        var _ = this,
-            touches;
-
-        _.interrupted = true;
-
-        if (_.touchObject.fingerCount !== 1 || _.slideCount <= _.options.slidesToShow) {
-            _.touchObject = {};
-            return false;
-        }
-
-        if (event.originalEvent !== undefined && event.originalEvent.touches !== undefined) {
-            touches = event.originalEvent.touches[0];
-        }
-
-        _.touchObject.startX = _.touchObject.curX = touches !== undefined ? touches.pageX : event.clientX;
-        _.touchObject.startY = _.touchObject.curY = touches !== undefined ? touches.pageY : event.clientY;
-
-        _.dragging = true;
-
-    };
-
-    Slick.prototype.unfilterSlides = Slick.prototype.slickUnfilter = function() {
-
-        var _ = this;
-
-        if (_.$slidesCache !== null) {
-
-            _.unload();
-
-            _.$slideTrack.children(this.options.slide).detach();
-
-            _.$slidesCache.appendTo(_.$slideTrack);
-
-            _.reinit();
-
-        }
-
-    };
-
-    Slick.prototype.unload = function() {
-
-        var _ = this;
-
-        $('.slick-cloned', _.$slider).remove();
-
-        if (_.$dots) {
-            _.$dots.remove();
-        }
-
-        if (_.$prevArrow && _.htmlExpr.test(_.options.prevArrow)) {
-            _.$prevArrow.remove();
-        }
-
-        if (_.$nextArrow && _.htmlExpr.test(_.options.nextArrow)) {
-            _.$nextArrow.remove();
-        }
-
-        _.$slides
-            .removeClass('slick-slide slick-active slick-visible slick-current')
-            .attr('aria-hidden', 'true')
-            .css('width', '');
-
-    };
-
-    Slick.prototype.unslick = function(fromBreakpoint) {
-
-        var _ = this;
-        _.$slider.trigger('unslick', [_, fromBreakpoint]);
-        _.destroy();
-
-    };
-
-    Slick.prototype.updateArrows = function() {
-
-        var _ = this,
-            centerOffset;
-
-        centerOffset = Math.floor(_.options.slidesToShow / 2);
-
-        if ( _.options.arrows === true &&
-            _.slideCount > _.options.slidesToShow &&
-            !_.options.infinite ) {
-
-            _.$prevArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');
-            _.$nextArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');
-
-            if (_.currentSlide === 0) {
-
-                _.$prevArrow.addClass('slick-disabled').attr('aria-disabled', 'true');
-                _.$nextArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');
-
-            } else if (_.currentSlide >= _.slideCount - _.options.slidesToShow && _.options.centerMode === false) {
-
-                _.$nextArrow.addClass('slick-disabled').attr('aria-disabled', 'true');
-                _.$prevArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');
-
-            } else if (_.currentSlide >= _.slideCount - 1 && _.options.centerMode === true) {
-
-                _.$nextArrow.addClass('slick-disabled').attr('aria-disabled', 'true');
-                _.$prevArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');
-
-            }
-
-        }
-
-    };
-
-    Slick.prototype.updateDots = function() {
-
-        var _ = this;
-
-        if (_.$dots !== null) {
-
-            _.$dots
-                .find('li')
-                    .removeClass('slick-active')
-                    .end();
-
-            _.$dots
-                .find('li')
-                .eq(Math.floor(_.currentSlide / _.options.slidesToScroll))
-                .addClass('slick-active');
-
-        }
-
-    };
-
-    Slick.prototype.visibility = function() {
-
-        var _ = this;
-
-        if ( _.options.autoplay ) {
-
-            if ( document[_.hidden] ) {
-
-                _.interrupted = true;
-
-            } else {
-
-                _.interrupted = false;
-
-            }
-
-        }
-
-    };
-
-    $.fn.slick = function() {
-        var _ = this,
-            opt = arguments[0],
-            args = Array.prototype.slice.call(arguments, 1),
-            l = _.length,
-            i,
-            ret;
-        for (i = 0; i < l; i++) {
-            if (typeof opt == 'object' || typeof opt == 'undefined')
-                _[i].slick = new Slick(_[i], opt);
-            else
-                ret = _[i].slick[opt].apply(_[i].slick, args);
-            if (typeof ret != 'undefined') return ret;
-        }
-        return _;
-    };
-
-}));
diff --git a/js/wow.js b/js/wow.js
deleted file mode 100644 (file)
index d480b3d..0000000
--- a/js/wow.js
+++ /dev/null
@@ -1,309 +0,0 @@
-/*! WOW - v1.0.2 - 2014-10-28
-* Copyright (c) 2014 Matthieu Aussaguel; Licensed MIT */
-
-(function() {
-  var Util, WeakMap,
-    __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };
-
-  Util = (function() {
-    function Util() {}
-
-    Util.prototype.extend = function(custom, defaults) {
-      var key, value;
-      for (key in custom) {
-        value = custom[key];
-        if (value != null) {
-          defaults[key] = value;
-        }
-      }
-      return defaults;
-    };
-
-    Util.prototype.isMobile = function(agent) {
-      return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(agent);
-    };
-
-    return Util;
-
-  })();
-
-  WeakMap = this.WeakMap || (WeakMap = (function() {
-    function WeakMap() {
-      this.keys = [];
-      this.values = [];
-    }
-
-    WeakMap.prototype.get = function(key) {
-      var i, item, _i, _len, _ref;
-      _ref = this.keys;
-      for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) {
-        item = _ref[i];
-        if (item === key) {
-          return this.values[i];
-        }
-      }
-    };
-
-    WeakMap.prototype.set = function(key, value) {
-      var i, item, _i, _len, _ref;
-      _ref = this.keys;
-      for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) {
-        item = _ref[i];
-        if (item === key) {
-          this.values[i] = value;
-          return;
-        }
-      }
-      this.keys.push(key);
-      return this.values.push(value);
-    };
-
-    return WeakMap;
-
-  })());
-
-  this.WOW = (function() {
-    WOW.prototype.defaults = {
-      boxClass: 'wow',
-      animateClass: 'animated',
-      offset: 0,
-      mobile: true
-    };
-
-    function WOW(options) {
-      if (options == null) {
-        options = {};
-      }
-      this.scrollCallback = __bind(this.scrollCallback, this);
-      this.scrollHandler = __bind(this.scrollHandler, this);
-      this.start = __bind(this.start, this);
-      this.scrolled = true;
-      this.config = this.util().extend(options, this.defaults);
-      this.animationNameCache = new WeakMap();
-    }
-
-    WOW.prototype.init = function() {
-      var _ref;
-      this.element = window.document.documentElement;
-      if ((_ref = document.readyState) === "interactive" || _ref === "complete") {
-        return this.start();
-      } else {
-        return document.addEventListener('DOMContentLoaded', this.start);
-      }
-    };
-
-    WOW.prototype.start = function() {
-      var box, _i, _len, _ref;
-      this.boxes = this.element.getElementsByClassName(this.config.boxClass);
-      if (this.boxes.length) {
-        if (this.disabled()) {
-          return this.resetStyle();
-        } else {
-          _ref = this.boxes;
-          for (_i = 0, _len = _ref.length; _i < _len; _i++) {
-            box = _ref[_i];
-            this.applyStyle(box, true);
-          }
-          window.addEventListener('scroll', this.scrollHandler, false);
-          window.addEventListener('resize', this.scrollHandler, false);
-          return this.interval = setInterval(this.scrollCallback, 50);
-        }
-      }
-    };
-
-    WOW.prototype.stop = function() {
-      window.removeEventListener('scroll', this.scrollHandler, false);
-      window.removeEventListener('resize', this.scrollHandler, false);
-      if (this.interval != null) {
-        return clearInterval(this.interval);
-      }
-    };
-
-    WOW.prototype.show = function(box) {
-      this.applyStyle(box);
-      return box.className = "" + box.className + " " + this.config.animateClass;
-    };
-
-    WOW.prototype.applyStyle = function(box, hidden) {
-      var delay, duration, iteration;
-      duration = box.getAttribute('data-wow-duration');
-      delay = box.getAttribute('data-wow-delay');
-      iteration = box.getAttribute('data-wow-iteration');
-      return this.animate((function(_this) {
-        return function() {
-          return _this.customStyle(box, hidden, duration, delay, iteration);
-        };
-      })(this));
-    };
-
-    WOW.prototype.animate = (function() {
-      if ('requestAnimationFrame' in window) {
-        return function(callback) {
-          return window.requestAnimationFrame(callback);
-        };
-      } else {
-        return function(callback) {
-          return callback();
-        };
-      }
-    })();
-
-    WOW.prototype.resetStyle = function() {
-      var box, _i, _len, _ref, _results;
-      _ref = this.boxes;
-      _results = [];
-      for (_i = 0, _len = _ref.length; _i < _len; _i++) {
-        box = _ref[_i];
-        _results.push(box.setAttribute('style', 'visibility: visible;'));
-      }
-      return _results;
-    };
-
-    WOW.prototype.customStyle = function(box, hidden, duration, delay, iteration) {
-      if (hidden) {
-        this.cacheAnimationName(box);
-      }
-      box.style.visibility = hidden ? 'hidden' : 'visible';
-      if (duration) {
-        this.vendorSet(box.style, {
-          animationDuration: duration
-        });
-      }
-      if (delay) {
-        this.vendorSet(box.style, {
-          animationDelay: delay
-        });
-      }
-      if (iteration) {
-        this.vendorSet(box.style, {
-          animationIterationCount: iteration
-        });
-      }
-      this.vendorSet(box.style, {
-        animationName: hidden ? 'none' : this.cachedAnimationName(box)
-      });
-      return box;
-    };
-
-    WOW.prototype.vendors = ["moz", "webkit"];
-
-    WOW.prototype.vendorSet = function(elem, properties) {
-      var name, value, vendor, _results;
-      _results = [];
-      for (name in properties) {
-        value = properties[name];
-        elem["" + name] = value;
-        _results.push((function() {
-          var _i, _len, _ref, _results1;
-          _ref = this.vendors;
-          _results1 = [];
-          for (_i = 0, _len = _ref.length; _i < _len; _i++) {
-            vendor = _ref[_i];
-            _results1.push(elem["" + vendor + (name.charAt(0).toUpperCase()) + (name.substr(1))] = value);
-          }
-          return _results1;
-        }).call(this));
-      }
-      return _results;
-    };
-
-    WOW.prototype.vendorCSS = function(elem, property) {
-      var result, style, vendor, _i, _len, _ref;
-      style = window.getComputedStyle(elem);
-      result = style.getPropertyCSSValue(property);
-      _ref = this.vendors;
-      for (_i = 0, _len = _ref.length; _i < _len; _i++) {
-        vendor = _ref[_i];
-        result = result || style.getPropertyCSSValue("-" + vendor + "-" + property);
-      }
-      return result;
-    };
-
-    WOW.prototype.animationName = function(box) {
-      var animationName;
-      try {
-        animationName = this.vendorCSS(box, 'animation-name').cssText;
-      } catch (_error) {
-        animationName = window.getComputedStyle(box).getPropertyValue('animation-name');
-      }
-      if (animationName === 'none') {
-        return '';
-      } else {
-        return animationName;
-      }
-    };
-
-    WOW.prototype.cacheAnimationName = function(box) {
-      return this.animationNameCache.set(box, this.animationName(box));
-    };
-
-    WOW.prototype.cachedAnimationName = function(box) {
-      return this.animationNameCache.get(box);
-    };
-
-    WOW.prototype.scrollHandler = function() {
-      return this.scrolled = true;
-    };
-
-    WOW.prototype.scrollCallback = function() {
-      var box;
-      if (this.scrolled) {
-        this.scrolled = false;
-        this.boxes = (function() {
-          var _i, _len, _ref, _results;
-          _ref = this.boxes;
-          _results = [];
-          for (_i = 0, _len = _ref.length; _i < _len; _i++) {
-            box = _ref[_i];
-            if (!(box)) {
-              continue;
-            }
-            if (this.isVisible(box)) {
-              this.show(box);
-              continue;
-            }
-            _results.push(box);
-          }
-          return _results;
-        }).call(this);
-        if (!this.boxes.length) {
-          return this.stop();
-        }
-      }
-    };
-
-    WOW.prototype.offsetTop = function(element) {
-      var top;
-      while (element.offsetTop === void 0) {
-        element = element.parentNode;
-      }
-      top = element.offsetTop;
-      while (element = element.offsetParent) {
-        top += element.offsetTop;
-      }
-      return top;
-    };
-
-    WOW.prototype.isVisible = function(box) {
-      var bottom, offset, top, viewBottom, viewTop;
-      offset = box.getAttribute('data-wow-offset') || this.config.offset;
-      viewTop = window.pageYOffset;
-      viewBottom = viewTop + this.element.clientHeight - offset;
-      top = this.offsetTop(box);
-      bottom = top + box.clientHeight;
-      return top <= viewBottom && bottom >= viewTop;
-    };
-
-    WOW.prototype.util = function() {
-      return this._util || (this._util = new Util());
-    };
-
-    WOW.prototype.disabled = function() {
-      return !this.config.mobile && this.util().isMobile(navigator.userAgent);
-    };
-
-    return WOW;
-
-  })();
-
-}).call(this);
diff --git a/landingpage-template.php b/landingpage-template.php
new file mode 100644 (file)
index 0000000..bc72fc8
--- /dev/null
@@ -0,0 +1,4 @@
+<?php
+/** Template Name: Landing Page
+ */
+get_template_part('index');
diff --git a/languages/accesspress-parallax.pot b/languages/accesspress-parallax.pot
deleted file mode 100644 (file)
index fa1af82..0000000
+++ /dev/null
@@ -1,1217 +0,0 @@
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: AccessPress Parallax\n"
-"Report-Msgid-Bugs-To: AccessPress Themes <info@accesspressthemes.com>\n"
-"POT-Creation-Date: 2016-09-25 12:10+0000\n"
-"POT-Revision-Date: Tue Sep 22 2015 15:07:07 GMT+0545 (Nepal Standard Time)\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: \n"
-"Language-Team: AccessPress Themes <info@accesspressthemes.com>\n"
-"Language: \n"
-"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Poedit-SourceCharset: UTF-8\n"
-"X-Poedit-Basepath: .\n"
-"X-Poedit-SearchPath-0: ..\n"
-"X-Poedit-KeywordsList: _:1;gettext:1;dgettext:2;ngettext:1,2;dngettext:2,3;"
-"__:1;_e:1;_c:1;_n:1,2;_n_noop:1,2;_nc:1,2;__ngettext:1,2;__ngettext_noop:1,2;"
-"_x:1,2c;_ex:1,2c;_nx:1,2,4c;_nx_noop:1,2,3c;_n_js:1,2;_nx_js:1,2,3c;"
-"esc_attr__:1;esc_html__:1;esc_attr_e:1;esc_html_e:1;esc_attr_x:1,2c;"
-"esc_html_x:1,2c;comments_number_link:2,3;t:1;st:1;trans:1;transChoice:1,2\n"
-"X-Generator: Loco - https://localise.biz/"
-
-#: 404.php:15
-msgid "Oops! That page can&rsquo;t be found."
-msgstr ""
-
-#: comments.php:28
-msgctxt "comments title"
-msgid "One thought on &ldquo;%2$s&rdquo;"
-msgid_plural "%1$s thoughts on &ldquo;%2$s&rdquo;"
-msgstr[0] ""
-msgstr[1] ""
-
-#: comments.php:35 comments.php:52
-msgid "Comment navigation"
-msgstr ""
-
-#: comments.php:36 comments.php:53
-msgid "&larr; Older Comments"
-msgstr ""
-
-#: comments.php:37 comments.php:54
-msgid "Newer Comments &rarr;"
-msgstr ""
-
-#: comments.php:64
-msgid "Comments are closed."
-msgstr ""
-
-#: content-none.php:13
-msgid "Nothing Found"
-msgstr ""
-
-#: content-none.php:19
-msgid ""
-"Ready to publish your first post? <a href=\"%1$s\">Get started here</a>."
-msgstr ""
-
-#: content-none.php:23
-msgid ""
-"Sorry, but nothing matched your search terms. Please try again with some "
-"different keywords."
-msgstr ""
-
-#: content-none.php:28
-msgid ""
-"It seems we can&rsquo;t find what you&rsquo;re looking for. Perhaps "
-"searching can help."
-msgstr ""
-
-#: content-page.php:18 content-single.php:30 content.php:35
-msgid "Pages:"
-msgstr ""
-
-#: content-page.php:24 content-search.php:53 content-single.php:72 
-#: content.php:68
-msgid "Edit"
-msgstr ""
-
-#: content-search.php:34
-msgid "Posted in %1$s"
-msgstr ""
-
-#: content-search.php:44
-msgid "Tagged %1$s"
-msgstr ""
-
-#: content-search.php:50
-msgid "Leave a comment"
-msgstr ""
-
-#: content-search.php:50
-msgid "1 Comment"
-msgstr ""
-
-#: content-search.php:50
-msgid "% Comments"
-msgstr ""
-
-#: content-single.php:48
-msgid ""
-"This entry was tagged %2$s. Bookmark the <a href=\"%3$s\" rel=\"bookmark\">"
-"permalink</a>."
-msgstr ""
-
-#: content-single.php:50
-msgid "Bookmark the <a href=\"%3$s\" rel=\"bookmark\">permalink</a>."
-msgstr ""
-
-#: content-single.php:56
-msgid ""
-"This entry was posted in %1$s and tagged %2$s. Bookmark the <a href=\"%3$s\" "
-"rel=\"bookmark\">permalink</a>."
-msgstr ""
-
-#: content-single.php:58
-msgid ""
-"This entry was posted in %1$s. Bookmark the <a href=\"%3$s\" "
-"rel=\"bookmark\">permalink</a>."
-msgstr ""
-
-#: content.php:32
-msgid "Continue reading <span class=\"meta-nav\">&rarr;</span>"
-msgstr ""
-
-#: content.php:49
-msgid "<i class=\"fa fa-folder-open\"></i>Posted in %1$s"
-msgstr ""
-
-#. translators: used between list items, there is a space after the comma
-#. translators: used between list items, there is a space after the comma
-#. translators: used between list items, there is a space after the comma
-#. translators: used between list items, there is a space after the comma
-#. translators: used between list items, there is a space after the comma
-#. translators: used between list items, there is a space after the comma
-#: content.php:55
-msgid ", "
-msgstr ""
-
-#: content.php:59
-msgid "<i class=\"fa fa-tags\"></i>Tagged %1$s"
-msgstr ""
-
-#: content.php:65
-msgid "<i class=\"fa fa-comments\"></i>Leave a comment"
-msgstr ""
-
-#: content.php:65
-msgid "<i class=\"fa fa-comments\"></i>1 Comment"
-msgstr ""
-
-#: content.php:65
-msgid "<i class=\"fa fa-comments\"></i>% Comments"
-msgstr ""
-
-#: demo.php:6
-msgid ""
-"Curabitur eget interdum risus. Curabitur dictum, libero ut mattis consequat, "
-"lectus mauris congue risus, et volutpat nulla eros vel arcu."
-msgstr ""
-
-#: demo.php:16 demo.php:28 demo.php:40 demo.php:52 demo.php:64 demo.php:76 
-#: demo.php:89
-msgid ""
-"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec iaculis metus "
-"vitae ligula elementum ut luctus lorem facilisis."
-msgstr ""
-
-#: demo.php:98
-msgid "Product 11"
-msgstr ""
-
-#: demo.php:105
-msgid "Product 10"
-msgstr ""
-
-#: demo.php:112
-msgid "Product 9"
-msgstr ""
-
-#: demo.php:119
-msgid "Product 8"
-msgstr ""
-
-#: demo.php:126
-msgid "Product 7"
-msgstr ""
-
-#: demo.php:133
-msgid "Product 6"
-msgstr ""
-
-#: demo.php:140
-msgid "Product 5"
-msgstr ""
-
-#: demo.php:147
-msgid "Product 4"
-msgstr ""
-
-#: demo.php:191
-msgid "Russel Clinton"
-msgstr ""
-
-#: demo.php:192
-msgid "Interior Head"
-msgstr ""
-
-#: demo.php:193
-msgid ""
-"Duis luctus nisl vel rhoncus rhoncus. Nam vehicula maximus sagittis. Proin "
-"quis lobortis nisi. Etiam luctus auctor urna, a luctus metus blandit in. Nam "
-"quis facilisis nunc, nec scelerisque ligula. Aenean quis lacus bibendum, "
-"lobortis dolor sed, facilisis ipsum. Nunc feugiat augue ac ligula blandit, "
-"id maximus purus molestie.<br /><br />\n"
-"                                Duis luctus nisl vel rhoncus rhoncus. Nam "
-"vehicula maximus sagittis. Proin quis lobortis nisi. Etiam luctus auctor "
-"urna, a luctus metus blandit in. Nam quis facilisis nunc, nec scelerisque "
-"ligula. Aenean quis lacus bibendum, lobortis dolor sed, facilisis ipsum. "
-"Nunc feugiat augue ac ligula blandit, id maximus purus molestie."
-msgstr ""
-
-#: demo.php:202
-msgid "Bibo Aurther"
-msgstr ""
-
-#: demo.php:203
-msgid "CEO"
-msgstr ""
-
-#: demo.php:204
-msgid ""
-"Proin libero odio, ultrices et tincidunt vitae, consequat et sapien. Duis "
-"luctus nisl vel rhoncus rhoncus. Nam vehicula maximus sagittis. Proin quis "
-"lobortis nisi. Etiam luctus auctor urna, a luctus metus blandit in. Nam quis "
-"facilisis nunc, nec scelerisque ligula. Aenean quis lacus bibendum, lobortis "
-"dolor sed, facilisis ipsum. Nunc feugiat augue ac ligula blandit, id maximus "
-"purus molestie.<br /><br />\n"
-"                                Proin libero odio, ultrices et tincidunt "
-"vitae, consequat et sapien. Duis luctus nisl vel rhoncus rhoncus. Nam "
-"vehicula maximus sagittis. Proin quis lobortis nisi. Etiam luctus auctor "
-"urna, a luctus metus blandit in. Nam quis facilisis nunc, nec scelerisque "
-"ligula. Aenean quis lacus bibendum, lobortis dolor sed, facilisis ipsum. "
-"Nunc feugiat augue ac ligula blandit, id maximus purus molestie."
-msgstr ""
-
-#: demo.php:213
-msgid "Rusel Misil"
-msgstr ""
-
-#: demo.php:214
-msgid "Technician"
-msgstr ""
-
-#: demo.php:215
-msgid ""
-"Etiam vestibulum pellentesque nisi, ac scelerisque metus aliquam non. Proin "
-"tincidunt tortor auctor, accumsan arcu id, congue felis. Curabitur vitae "
-"lorem at purus imperdiet commodo quis non sem. Donec magna odio, commodo "
-"eget rhoncus quis, facilisis et dolor.<br /><br />\n"
-"                                Proin libero odio, ultrices et tincidunt "
-"vitae, consequat et sapien. Duis luctus nisl vel rhoncus rhoncus. Nam "
-"vehicula maximus sagittis. Proin quis lobortis nisi. Etiam luctus auctor "
-"urna, a luctus metus blandit in. Nam quis facilisis nunc, nec scelerisque "
-"ligula. Aenean quis lacus bibendum, lobortis dolor sed, facilisis ipsum. "
-"Nunc feugiat augue ac ligula blandit, id maximus purus molestie."
-msgstr ""
-
-#: demo.php:224
-msgid "Linda Harley"
-msgstr ""
-
-#: demo.php:225 demo.php:236
-msgid "Staff"
-msgstr ""
-
-#: demo.php:226
-msgid ""
-"Nulla facilisis sapien dui, vel faucibus risus consequat sit amet. Phasellus "
-"vestibulum vestibulum mi quis posuere. Aenean pretium purus ut purus "
-"vehicula dictum. Morbi elementum dignissim aliquet. Nullam et purus et mi "
-"finibus laoreet. Aliquam posuere erat eu lobortis vulputate. Phasellus "
-"pulvinar fringilla turpis in congue. Integer et felis fringilla, elementum "
-"lacus eu, tincidunt purus.<br/><br />\n"
-"                            Nulla facilisis sapien dui, vel faucibus risus "
-"consequat sit amet. Phasellus vestibulum vestibulum mi quis posuere. Aenean "
-"pretium purus ut purus vehicula dictum. Morbi elementum dignissim aliquet. "
-"Nullam et purus et mi finibus laoreet. Aliquam posuere erat eu lobortis "
-"vulputate. Phasellus pulvinar fringilla turpis in congue. Integer et felis "
-"fringilla, elementum lacus eu, tincidunt purus."
-msgstr ""
-
-#: demo.php:235
-msgid "John Doe"
-msgstr ""
-
-#: demo.php:237
-msgid ""
-"Donec ut neque placerat, euismod enim et, sodales magna. Sed sit amet nunc "
-"ullamcorper, semper nunc mattis, scelerisque urna. Donec dictum mattis "
-"malesuada. Suspendisse vestibulum enim eu nisi auctor, a mollis odio posuere."
-" Ut scelerisque luctus arcu id tempus.<br/><br />\n"
-"                            Nulla facilisis sapien dui, vel faucibus risus "
-"consequat sit amet. Phasellus vestibulum vestibulum mi quis posuere. Aenean "
-"pretium purus ut purus vehicula dictum. Morbi elementum dignissim aliquet. "
-"Nullam et purus et mi finibus laoreet. Aliquam posuere erat eu lobortis "
-"vulputate. Phasellus pulvinar fringilla turpis in congue. Integer et felis "
-"fringilla, elementum lacus eu, tincidunt purus."
-msgstr ""
-
-#: demo.php:246
-msgid "Jakson Biber"
-msgstr ""
-
-#: demo.php:247
-msgid "Marketing Executive"
-msgstr ""
-
-#: demo.php:248
-msgid ""
-"Fusce imperdiet enim eget neque auctor, venenatis feugiat neque dapibus. "
-"Nulla consequat, nunc sed vestibulum semper, nibh velit pellentesque lectus, "
-"ac lobortis elit massa hendrerit lacus. Nulla facilisis sapien dui, vel "
-"faucibus risus consequat sit amet. Phasellus vestibulum vestibulum mi quis "
-"posuere.<br/><br />\n"
-"                            Fusce imperdiet enim eget neque auctor, "
-"venenatis feugiat neque dapibus. Nulla consequat, nunc sed vestibulum semper,"
-" nibh velit pellentesque lectus, ac lobortis elit massa hendrerit lacus. "
-"Nulla facilisis sapien dui, vel faucibus risus consequat sit amet. Phasellus "
-"vestibulum vestibulum mi quis posuere."
-msgstr ""
-
-#: demo.php:257
-msgid "Jack Peterson"
-msgstr ""
-
-#: demo.php:258
-msgid "Sales Executive"
-msgstr ""
-
-#: demo.php:259
-msgid ""
-"Donec ut neque placerat, euismod enim et, sodales magna. Sed sit amet nunc "
-"ullamcorper, semper nunc mattis, scelerisque urna. Donec dictum mattis "
-"malesuada. Suspendisse vestibulum enim eu nisi auctor, a mollis odio posuere."
-" Ut scelerisque luctus arcu id tempus.<br/><br />\n"
-"                            Donec ut neque placerat, euismod enim et, "
-"sodales magna. Sed sit amet nunc ullamcorper, semper nunc mattis, "
-"scelerisque urna. Donec dictum mattis malesuada. Suspendisse vestibulum enim "
-"eu nisi auctor, a mollis odio posuere. Ut scelerisque luctus arcu id tempus."
-msgstr ""
-
-#: demo.php:275
-msgid "Testimonials"
-msgstr ""
-
-#: demo.php:281
-msgid ""
-"Thanks for delivering top quality services to your clients. It just takes a "
-"minute to get an answer from you when in difficulties. I use the chat "
-"service and I can say that the AccessPress Themes staff knows how to shorten "
-"the physical distance to its clients.<br />Thanks again for making our "
-"experience with AccessPress Themes the best one online!"
-msgstr ""
-
-#: demo.php:283
-msgid "Yanetxys Torreblanca"
-msgstr ""
-
-#: demo.php:289
-msgid ""
-"Thank you very much the support team accesspress lite for service, are "
-"really wonderful in their care and in the resolution of the problem. "
-"Congratulations to facebook chat and Junu team."
-msgstr ""
-
-#: demo.php:291
-msgid "David Soriano"
-msgstr ""
-
-#: demo.php:297
-msgid ""
-"Great Customer service and technical assistance!!!<br />\n"
-"                                The template is really good and nice, "
-"definitely worth going PRO"
-msgstr ""
-
-#: demo.php:300
-msgid "Stefano Roganti"
-msgstr ""
-
-#: demo.php:315
-msgid "Read our latest blog"
-msgstr ""
-
-#: demo.php:324
-msgid "Nulla pretium leo ac congue"
-msgstr ""
-
-#: demo.php:325
-msgid "December 26, 2014"
-msgstr ""
-
-#: demo.php:326
-msgid ""
-"Nulla pretium leo ac congue molestie. Aliquam ac velit laoreet, consectetur "
-"elit pulvinar, elementum lorem. Duis sed venenatis eros. Vestibulum ante "
-"ipsum primis in faucibus orci luctus et ultrices po... "
-msgstr ""
-
-#: demo.php:327 demo.php:338 demo.php:349 inc/accesspress-functions.php:158 
-#: inc/accesspress-functions.php:171 layouts/blog-section.php:36
-msgid "Read More"
-msgstr ""
-
-#: demo.php:335
-msgid "Pellentesque cursus dolor quis"
-msgstr ""
-
-#: demo.php:336 demo.php:347
-msgid "September 9, 2014"
-msgstr ""
-
-#: demo.php:337
-msgid ""
-"Nullam faucibus mi at quam mattis egestas. Ut dapibus lectus at risus "
-"rhoncus finibus. Pellentesque sem risus, suscipit iaculis ex in, rutrum "
-"sodales enim. Vivamus non mauris tortor. Maecenas tellus n... "
-msgstr ""
-
-#: demo.php:346
-msgid "Lorem ipsum dolor"
-msgstr ""
-
-#: demo.php:348
-msgid ""
-"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod "
-"tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, "
-"quis nostrud exercitation ullamco laboris nisi ut ... "
-msgstr ""
-
-#: demo.php:354 layouts/blog-section.php:47
-msgid "Read All"
-msgstr ""
-
-#: demo.php:362
-msgid "For News and Updates Subscribe us"
-msgstr ""
-
-#: demo.php:365
-msgid "Here can be some text as well"
-msgstr ""
-
-#: demo.php:366
-msgid "Subscribe Us"
-msgstr ""
-
-#: demo.php:400
-msgid "AccessPress Themes"
-msgstr ""
-
-#: demo.php:401
-msgid "5th Floor, Mathuri Sadan"
-msgstr ""
-
-#: demo.php:402
-msgid "Rabi Bhawan, Kathmandu - Nepal"
-msgstr ""
-
-#: demo.php:404
-msgid "General enquiries:"
-msgstr ""
-
-#: demo.php:405
-msgid "Support:"
-msgstr ""
-
-#: demo.php:407
-msgid "Skype: access-keys"
-msgstr ""
-
-#: footer.php:55
-msgid "by"
-msgstr ""
-
-#: functions.php:66
-msgid "Primary Menu"
-msgstr ""
-
-#: functions.php:93
-msgid "Sidebar"
-msgstr ""
-
-#: functions.php:103
-msgid "Footer One"
-msgstr ""
-
-#: functions.php:113
-msgid "Footer Two"
-msgstr ""
-
-#: functions.php:123
-msgid "Footer Three"
-msgstr ""
-
-#: functions.php:133
-msgid "Footer Four"
-msgstr ""
-
-#: header.php:40
-msgid "Menu"
-msgstr ""
-
-#. Name of the template
-msgid "Home Page"
-msgstr ""
-
-#: search.php:16
-msgid "Search Results for: %s"
-msgstr ""
-
-#: single.php:21 single.php:22
-msgid "%title"
-msgstr ""
-
-#: inc/accesspress-functions.php:155
-msgid "Welcome to AccessPress Parallax!"
-msgstr ""
-
-#: inc/accesspress-functions.php:157
-msgid "A full featured parallax theme - and its absolutely free!"
-msgstr ""
-
-#: inc/accesspress-functions.php:168
-msgid "Amazing multi-purpose parallax theme"
-msgstr ""
-
-#: inc/accesspress-functions.php:170
-msgid ""
-"Travel, corporate, small biz, portfolio, agencies, photography, health, "
-"creative - useful for anyone and everyone"
-msgstr ""
-
-#: inc/accesspress-functions.php:390
-msgid "AccessPress Social Icons"
-msgstr ""
-
-#: inc/accesspress-functions.php:397
-msgid "AccessPress Social Counter"
-msgstr ""
-
-#: inc/accesspress-functions.php:404
-msgid "AccessPress Social Share"
-msgstr ""
-
-#: inc/accesspress-options.php:15
-msgid "Fade"
-msgstr ""
-
-#: inc/accesspress-options.php:16
-msgid "Slide Horizontal"
-msgstr ""
-
-#: inc/accesspress-options.php:17
-msgid "Slide Vertical"
-msgstr ""
-
-#: inc/accesspress-options.php:21 inc/ajax.php:111 
-#: inc/options-framework/includes/class-options-sanitization.php:498
-msgid "No Overlay"
-msgstr ""
-
-#: inc/accesspress-options.php:22 inc/ajax.php:112 
-#: inc/options-framework/includes/class-options-sanitization.php:499
-msgid "Small Dotted"
-msgstr ""
-
-#: inc/accesspress-options.php:23 inc/ajax.php:113 
-#: inc/options-framework/includes/class-options-sanitization.php:500
-msgid "Large Dotted"
-msgstr ""
-
-#: inc/accesspress-options.php:24 inc/ajax.php:114 
-#: inc/options-framework/includes/class-options-sanitization.php:501
-msgid "Light Black"
-msgstr ""
-
-#: inc/accesspress-options.php:25 inc/ajax.php:115 
-#: inc/options-framework/includes/class-options-sanitization.php:502
-msgid "Black Dotted"
-msgstr ""
-
-#: inc/accesspress-options.php:29 inc/ajax.php:41 
-#: inc/options-framework/includes/class-options-sanitization.php:478
-msgid "Default Section"
-msgstr ""
-
-#: inc/accesspress-options.php:30 inc/ajax.php:42 
-#: inc/options-framework/includes/class-options-sanitization.php:479
-msgid "Service Section"
-msgstr ""
-
-#: inc/accesspress-options.php:31 inc/ajax.php:43 
-#: inc/options-framework/includes/class-options-sanitization.php:480
-msgid "Team Section"
-msgstr ""
-
-#: inc/accesspress-options.php:32 inc/ajax.php:44 
-#: inc/options-framework/includes/class-options-sanitization.php:481
-msgid "Portfolio Section"
-msgstr ""
-
-#: inc/accesspress-options.php:33 inc/ajax.php:45 
-#: inc/options-framework/includes/class-options-sanitization.php:482
-msgid "Testimonial Section"
-msgstr ""
-
-#: inc/accesspress-options.php:34 inc/ajax.php:46 
-#: inc/options-framework/includes/class-options-sanitization.php:483
-msgid "Blog Section"
-msgstr ""
-
-#: inc/accesspress-options.php:35 inc/ajax.php:47 
-#: inc/options-framework/includes/class-options-sanitization.php:484
-msgid "Call to Action Section"
-msgstr ""
-
-#: inc/accesspress-options.php:36 inc/ajax.php:48 
-#: inc/options-framework/includes/class-options-sanitization.php:485
-msgid "Google Map Section"
-msgstr ""
-
-#: inc/accesspress-options.php:37 inc/ajax.php:49 
-#: inc/options-framework/includes/class-options-sanitization.php:486
-msgid "Blank Section"
-msgstr ""
-
-#: inc/accesspress-options.php:41
-msgid "Yes"
-msgstr ""
-
-#: inc/accesspress-options.php:42
-msgid "No"
-msgstr ""
-
-#: inc/accesspress-options.php:58
-msgid ""
-"AccessPress Parallax is a beautiful WordPress theme with Parallax design. "
-"Parallax design has become popular and is being adopted because 3D effects "
-"are possible with it, you can add some sphere to your product, it is the "
-"best way of storytelling, you can draw your visitors in, it is interactive, "
-"engaging, makes your visitors curious, fun, surprise, effective to trigger "
-"action, invite your visitors in great Call to Action, great conversion rates "
-"and many more. This is probably the most beautiful, feature rich and "
-"complete free WordPress parallax theme with features like: fully responsive, "
-"advance theme option panel, featured slider, advance post settings, "
-"services/team/blog/portfolio/testimonial layout, Google map integration, "
-"custom logo/fav icon, call to action, CSS animation, SEO friendly, "
-"translation ready, RTL support, custom CSS/JS and more! "
-msgstr ""
-
-#: inc/accesspress-options.php:59
-msgid "- A WordPress Division of Access Keys."
-msgstr ""
-
-#: inc/accesspress-options.php:62
-msgid "Demo:"
-msgstr ""
-
-#: inc/accesspress-options.php:63
-msgid "Documentation:"
-msgstr ""
-
-#: inc/accesspress-options.php:66
-msgid "Other products by AccessPressThemes"
-msgstr ""
-
-#: inc/accesspress-options.php:67
-msgid "Our Themes - "
-msgstr ""
-
-#: inc/accesspress-options.php:68
-msgid "Our Plugins - "
-msgstr ""
-
-#: inc/accesspress-options.php:72
-msgid "Get in touch"
-msgstr ""
-
-#: inc/accesspress-options.php:73
-msgid ""
-"If you have any question/feedback regarding theme, please post in our forum"
-msgstr ""
-
-#: inc/accesspress-options.php:74
-msgid "Forum:"
-msgstr ""
-
-#: inc/accesspress-options.php:75
-msgid "Live Chat Support:"
-msgstr ""
-
-#: inc/accesspress-options.php:77
-msgid "For Queries Regading Pro Themes:"
-msgstr ""
-
-#: inc/accesspress-options.php:110
-msgid "General Settings"
-msgstr ""
-
-#: inc/accesspress-options.php:114
-msgid ""
-"Enable Single Page Parallax Home Page - if disabled, will show Blog-"
-"roll/Static-page"
-msgstr ""
-
-#: inc/accesspress-options.php:115 inc/accesspress-options.php:122 
-#: inc/accesspress-options.php:136 inc/accesspress-options.php:143 
-#: inc/accesspress-options.php:205 inc/accesspress-options.php:212 
-#: inc/accesspress-options.php:219 inc/accesspress-options.php:226 
-#: inc/accesspress-options.php:318
-msgid "Check To enable"
-msgstr ""
-
-#: inc/accesspress-options.php:121
-msgid "Enable Single Page Nav(Menu) - if disabled, will show primary menu"
-msgstr ""
-
-#: inc/accesspress-options.php:128
-msgid "Home Menu Text - Single Page Nav(Menu)"
-msgstr ""
-
-#: inc/accesspress-options.php:130
-msgid "Leave blank if you do not want to show"
-msgstr ""
-
-#: inc/accesspress-options.php:135
-msgid ""
-"Enable Animation on scroll - Page Elements will show with some animation "
-"only in home page."
-msgstr ""
-
-#: inc/accesspress-options.php:142
-msgid "Enable Responsive"
-msgstr ""
-
-#: inc/accesspress-options.php:150
-msgid "Upload Logo"
-msgstr ""
-
-#: inc/accesspress-options.php:151 inc/ajax.php:66 
-#: inc/options-framework/includes/class-options-media-uploader.php:64 
-#: inc/options-framework/includes/class-options-media-uploader.php:117
-msgid "Upload"
-msgstr ""
-
-#: inc/accesspress-options.php:155
-msgid "Upload Fav Icon"
-msgstr ""
-
-#: inc/accesspress-options.php:161
-msgid "Select Header Layout"
-msgstr ""
-
-#: inc/accesspress-options.php:171
-msgid "Parallax Sections"
-msgstr ""
-
-#: inc/accesspress-options.php:175
-msgid ""
-"<strong>Note: Please make a new page before you create a section. Each "
-"Section should have unique Page.</strong>"
-msgstr ""
-
-#: inc/accesspress-options.php:200
-msgid "Post Settings"
-msgstr ""
-
-#: inc/accesspress-options.php:204
-msgid "Show Posted Date"
-msgstr ""
-
-#: inc/accesspress-options.php:211
-msgid "Show Post Author"
-msgstr ""
-
-#: inc/accesspress-options.php:218
-msgid "Show Post Footer text"
-msgstr ""
-
-#: inc/accesspress-options.php:225
-msgid "Show Prev Next Pagination"
-msgstr ""
-
-#: inc/accesspress-options.php:233
-msgid "Slider Settings"
-msgstr ""
-
-#: inc/accesspress-options.php:237
-msgid "Show Slider"
-msgstr ""
-
-#: inc/accesspress-options.php:245
-msgid "Select a Category"
-msgstr ""
-
-#: inc/accesspress-options.php:252
-msgid "Show full window"
-msgstr ""
-
-#: inc/accesspress-options.php:259
-msgid "Remove Slider overlay - Black Dots"
-msgstr ""
-
-#: inc/accesspress-options.php:266
-msgid "Show Pager"
-msgstr ""
-
-#: inc/accesspress-options.php:273
-msgid "Show Controls"
-msgstr ""
-
-#: inc/accesspress-options.php:280
-msgid "Auto Transition"
-msgstr ""
-
-#: inc/accesspress-options.php:287
-msgid "Slider Transition"
-msgstr ""
-
-#: inc/accesspress-options.php:294
-msgid "Slider Transition Speed"
-msgstr ""
-
-#: inc/accesspress-options.php:300
-msgid "Slider Pause Duration"
-msgstr ""
-
-#: inc/accesspress-options.php:306
-msgid "Show Caption"
-msgstr ""
-
-#: inc/accesspress-options.php:313
-msgid "Social Links"
-msgstr ""
-
-#: inc/accesspress-options.php:317
-msgid "Show Social Icon"
-msgstr ""
-
-#: inc/accesspress-options.php:324
-msgid "Facebook"
-msgstr ""
-
-#: inc/accesspress-options.php:329
-msgid "Twitter"
-msgstr ""
-
-#: inc/accesspress-options.php:334
-msgid "Google Plus"
-msgstr ""
-
-#: inc/accesspress-options.php:339
-msgid "Youtube"
-msgstr ""
-
-#: inc/accesspress-options.php:344
-msgid "Pinterest"
-msgstr ""
-
-#: inc/accesspress-options.php:349
-msgid "Linkedin"
-msgstr ""
-
-#: inc/accesspress-options.php:354
-msgid "Fickr"
-msgstr ""
-
-#: inc/accesspress-options.php:359
-msgid "Vimeo"
-msgstr ""
-
-#: inc/accesspress-options.php:364
-msgid "Instagram"
-msgstr ""
-
-#: inc/accesspress-options.php:369
-msgid "Skype"
-msgstr ""
-
-#: inc/accesspress-options.php:374
-msgid "Tools"
-msgstr ""
-
-#: inc/accesspress-options.php:378
-msgid "Custom CSS"
-msgstr ""
-
-#: inc/accesspress-options.php:381
-msgid "Put your custom CSS here"
-msgstr ""
-
-#: inc/accesspress-options.php:384
-msgid "About"
-msgstr ""
-
-#: inc/accesspress-options.php:388
-msgid "About AccessPress Themes"
-msgstr ""
-
-#: inc/ajax.php:15
-msgid "Page Title:"
-msgstr ""
-
-#: inc/ajax.php:19 
-#: inc/options-framework/includes/class-options-interface.php:426
-msgid "Page"
-msgstr ""
-
-#: inc/ajax.php:21
-msgid "Select a page:"
-msgstr ""
-
-#: inc/ajax.php:29 
-#: inc/options-framework/includes/class-options-interface.php:442
-msgid "Font Color"
-msgstr ""
-
-#: inc/ajax.php:34 
-#: inc/options-framework/includes/class-options-interface.php:453
-msgid "Background Color"
-msgstr ""
-
-#: inc/ajax.php:39 
-#: inc/options-framework/includes/class-options-interface.php:459
-msgid "Layout"
-msgstr ""
-
-#: inc/ajax.php:54 
-#: inc/options-framework/includes/class-options-interface.php:471
-msgid "Category"
-msgstr ""
-
-#: inc/ajax.php:56
-msgid "Select a Category:"
-msgstr ""
-
-#: inc/ajax.php:64 
-#: inc/options-framework/includes/class-options-interface.php:486
-msgid "Background Image"
-msgstr ""
-
-#: inc/ajax.php:72 
-#: inc/options-framework/includes/class-options-interface.php:495
-msgid "Background Settings"
-msgstr ""
-
-#: inc/ajax.php:77 
-#: inc/options-framework/includes/class-options-sanitization.php:415
-msgid "No Repeat"
-msgstr ""
-
-#: inc/ajax.php:78 
-#: inc/options-framework/includes/class-options-sanitization.php:416
-msgid "Repeat Horizontally"
-msgstr ""
-
-#: inc/ajax.php:79 
-#: inc/options-framework/includes/class-options-sanitization.php:417
-msgid "Repeat Vertically"
-msgstr ""
-
-#: inc/ajax.php:80 
-#: inc/options-framework/includes/class-options-sanitization.php:418
-msgid "Repeat All"
-msgstr ""
-
-#: inc/ajax.php:84 
-#: inc/options-framework/includes/class-options-sanitization.php:430
-msgid "Top Left"
-msgstr ""
-
-#: inc/ajax.php:85 
-#: inc/options-framework/includes/class-options-sanitization.php:431
-msgid "Top Center"
-msgstr ""
-
-#: inc/ajax.php:86 
-#: inc/options-framework/includes/class-options-sanitization.php:432
-msgid "Top Right"
-msgstr ""
-
-#: inc/ajax.php:87 
-#: inc/options-framework/includes/class-options-sanitization.php:433
-msgid "Middle Left"
-msgstr ""
-
-#: inc/ajax.php:88 
-#: inc/options-framework/includes/class-options-sanitization.php:434
-msgid "Middle Center"
-msgstr ""
-
-#: inc/ajax.php:89 
-#: inc/options-framework/includes/class-options-sanitization.php:435
-msgid "Middle Right"
-msgstr ""
-
-#: inc/ajax.php:90 
-#: inc/options-framework/includes/class-options-sanitization.php:436
-msgid "Bottom Left"
-msgstr ""
-
-#: inc/ajax.php:91 
-#: inc/options-framework/includes/class-options-sanitization.php:437
-msgid "Bottom Center"
-msgstr ""
-
-#: inc/ajax.php:92 
-#: inc/options-framework/includes/class-options-sanitization.php:438
-msgid "Bottom Right"
-msgstr ""
-
-#: inc/ajax.php:96 
-#: inc/options-framework/includes/class-options-sanitization.php:450
-msgid "Scroll Normally"
-msgstr ""
-
-#: inc/ajax.php:97 
-#: inc/options-framework/includes/class-options-sanitization.php:451
-msgid "Fixed in Place"
-msgstr ""
-
-#: inc/ajax.php:101 
-#: inc/options-framework/includes/class-options-sanitization.php:463
-msgid "Auto"
-msgstr ""
-
-#: inc/ajax.php:102 
-#: inc/options-framework/includes/class-options-sanitization.php:464
-msgid "Cover"
-msgstr ""
-
-#: inc/ajax.php:103 
-#: inc/options-framework/includes/class-options-sanitization.php:465
-msgid "Contain"
-msgstr ""
-
-#: inc/ajax.php:109 
-#: inc/options-framework/includes/class-options-interface.php:538
-msgid "Overlay"
-msgstr ""
-
-#: inc/ajax.php:119 
-#: inc/options-framework/includes/class-options-interface.php:549 
-#: inc/options-framework/includes/class-options-media-uploader.php:66 
-#: inc/options-framework/includes/class-options-media-uploader.php:118
-msgid "Remove"
-msgstr ""
-
-#: inc/more-themes.php:14 inc/more-themes.php:15
-msgid "More Themes"
-msgstr ""
-
-#: inc/more-themes.php:31
-msgid ""
-"More Themes from <a href=\"%s\" target=\"_blank\">AccessPress Themes</a>"
-msgstr ""
-
-#: inc/more-themes.php:59
-msgid "Active"
-msgstr ""
-
-#: inc/more-themes.php:61
-msgid "Customize"
-msgstr ""
-
-#: inc/more-themes.php:96
-msgid "Already installed"
-msgstr ""
-
-#: inc/more-themes.php:99
-msgid "Activate"
-msgstr ""
-
-#: inc/more-themes.php:108
-msgid "Install Now"
-msgstr ""
-
-#: inc/more-themes.php:111
-msgid "Live Preview"
-msgstr ""
-
-#: inc/template-tags.php:31
-msgctxt "post author"
-msgid "By %s"
-msgstr ""
-
-#: layouts/googlemap-section.php:10
-msgid "Map"
-msgstr ""
-
-#: inc/options-framework/includes/class-options-framework-admin.php:78
-msgid "Theme Options"
-msgstr ""
-
-#: inc/options-framework/includes/class-options-framework-admin.php:173
-msgid "AccessPress Lite"
-msgstr ""
-
-#: inc/options-framework/includes/class-options-framework-admin.php:177
-msgid "Demo"
-msgstr ""
-
-#: inc/options-framework/includes/class-options-framework-admin.php:178
-msgid "Documentation/Video Tutorial"
-msgstr ""
-
-#: inc/options-framework/includes/class-options-framework-admin.php:195
-msgid "Save Options"
-msgstr ""
-
-#: inc/options-framework/includes/class-options-framework-admin.php:196
-msgid "Restore Defaults"
-msgstr ""
-
-#: inc/options-framework/includes/class-options-framework-admin.php:196
-msgid "Click OK to reset. Any theme settings will be lost!"
-msgstr ""
-
-#: inc/options-framework/includes/class-options-framework-admin.php:203
-msgid "Upgrade to Parallax Pro"
-msgstr ""
-
-#: inc/options-framework/includes/class-options-framework-admin.php:210
-msgid ""
-"Any question!! Click <a href=\"%s\" target=\"_blank\">here</a> for Live Chat."
-msgstr ""
-
-#: inc/options-framework/includes/class-options-framework-admin.php:212
-msgid "Pro Features"
-msgstr ""
-
-#: inc/options-framework/includes/class-options-framework-admin.php:247
-msgid "Default options restored."
-msgstr ""
-
-#: inc/options-framework/includes/class-options-framework-admin.php:301
-msgid "Options saved."
-msgstr ""
-
-#: inc/options-framework/includes/class-options-interface.php:422
-msgid "Page Title: "
-msgstr ""
-
-#: inc/options-framework/includes/class-options-interface.php:558
-msgid "Add New Section"
-msgstr ""
-
-#: inc/options-framework/includes/class-options-media-uploader.php:61
-msgid "No file chosen"
-msgstr ""
-
-#: inc/options-framework/includes/class-options-media-uploader.php:69
-msgid "Upgrade your version of WordPress for full media support."
-msgstr ""
-
-#: inc/options-framework/includes/class-options-media-uploader.php:93
-msgid "View File"
-msgstr ""
-
-#: inc/options-framework/includes/class-options-sanitization.php:574
-msgid "Normal"
-msgstr ""
-
-#: inc/options-framework/includes/class-options-sanitization.php:575
-msgid "Italic"
-msgstr ""
-
-#: inc/options-framework/includes/class-options-sanitization.php:576
-msgid "Bold"
-msgstr ""
-
-#: inc/options-framework/includes/class-options-sanitization.php:577
-msgid "Bold Italic"
-msgstr ""
-
-#. Name of the theme
-msgid "AccessPress Parallax"
-msgstr ""
-
-#. Description of the theme
-msgid ""
-"AccessPress Parallax is a beautiful WordPress theme with Parallax design. "
-"Parallax design has become popular and is widely implemented these days. "
-"This is probably the most beautiful, feature rich and complete free "
-"WordPress parallax theme with features like: fully responsive, advance theme "
-"option panel, featured slider, advance post settings, "
-"services/team/blog/portfolio/testimonial layout, Google map integration, "
-"custom logo/fav icon, call to action, CSS animation, SEO friendly, "
-"translation ready, RTL support, custom CSS/JS and more! More over the theme "
-"is fully translation ready, WooCommerce Compatible, bbPress Compatible and "
-"fully support multilanguage via POLYLANG plugin. Demo: http:"
-"//accesspressthemes.com/theme-demos/?theme=accesspress-parallax Support "
-"forum: https://accesspressthemes.com/support/ Pro version: https:"
-"//accesspressthemes.com/wordpress-themes/accesspress-parallax-pro/"
-msgstr ""
-
-#. Theme URI of the theme
-msgid "https://accesspressthemes.com/wordpress-themes/accesspress-parallax/"
-msgstr ""
-
-#. Author URI of the theme
-msgid "https://accesspressthemes.com/"
-msgstr ""
diff --git a/languages/id_ID.mo b/languages/id_ID.mo
deleted file mode 100644 (file)
index 2fb96e2..0000000
Binary files a/languages/id_ID.mo and /dev/null differ
diff --git a/languages/id_ID.po b/languages/id_ID.po
deleted file mode 100644 (file)
index 11d2103..0000000
+++ /dev/null
@@ -1,1859 +0,0 @@
-# Loco Gettext template
-msgid ""
-msgstr ""
-"Project-Id-Version: AccessPress Parallax\n"
-"Report-Msgid-Bugs-To: AccessPress Themes <info@accesspressthemes.com>\n"
-"POT-Creation-Date: 2016-01-15 04:43-0800\n"
-"POT-Revision-Date: Tue Sep 22 2015 15:07:07 GMT+0545 (Nepal Standard Time)\n"
-"PO-Revision-Date: 2016-01-16 11:03-0800\n"
-"Language-Team: AccessPress Themes <info@accesspressthemes.com>\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Poedit-SourceCharset: UTF-8\n"
-"X-Poedit-Basepath: .\n"
-"X-Poedit-KeywordsList: _:1;gettext:1;dgettext:2;ngettext:1,2;dngettext:2,3;"
-"__:1;_e:1;_c:1;_n:1,2;_n_noop:1,2;_nc:1,2;__ngettext:1,2;__ngettext_noop:1,2;"
-"_x:1,2c;_ex:1,2c;_nx:1,2,4c;_nx_noop:1,2,3c;_n_js:1,2;_nx_js:1,2,3c;"
-"esc_attr__:1;esc_html__:1;esc_attr_e:1;esc_html_e:1;esc_attr_x:1,2c;"
-"esc_html_x:1,2c;comments_number_link:2,3;t:1;st:1;trans:1;transChoice:1,2\n"
-"X-Generator: Poedit 1.8.4\n"
-"Last-Translator: \n"
-"Language: id_ID\n"
-"X-Poedit-SearchPath-0: ..\n"
-
-#: ../404.php:15
-msgid "Oops! That page can&rsquo;t be found."
-msgstr "Ups! Laman tidak dapat ditemukan."
-
-#: ../archive.php:27
-#, php-format
-msgid "Author: %s"
-msgstr "Penulis:%s"
-
-#: ../archive.php:30
-#, php-format
-msgid "Day: %s"
-msgstr "Hari: %s"
-
-#: ../archive.php:33
-#, php-format
-msgid "Month: %s"
-msgstr "Bulan: %s"
-
-#: ../archive.php:33
-msgctxt "monthly archives date format"
-msgid "F Y"
-msgstr ""
-
-#: ../archive.php:36
-#, php-format
-msgid "Year: %s"
-msgstr "Tahun: %s"
-
-#: ../archive.php:36
-msgctxt "yearly archives date format"
-msgid "Y"
-msgstr ""
-
-#: ../archive.php:39
-msgid "Asides"
-msgstr "Selain karena"
-
-#: ../archive.php:42
-msgid "Galleries"
-msgstr "Galeri"
-
-#: ../archive.php:45
-msgid "Images"
-msgstr "Gambar"
-
-#: ../archive.php:48
-msgid "Videos"
-msgstr "Video"
-
-#: ../archive.php:51
-msgid "Quotes"
-msgstr "Kutipan"
-
-#: ../archive.php:54
-msgid "Links"
-msgstr "Link"
-
-#: ../archive.php:57
-msgid "Statuses"
-msgstr "Status"
-
-#: ../archive.php:60
-msgid "Audios"
-msgstr "Audio"
-
-#: ../archive.php:63
-msgid "Chats"
-msgstr "Obrolan"
-
-#: ../archive.php:66
-msgid "Archives"
-msgstr "Arsip"
-
-#: ../comments.php:28
-#, php-format
-msgctxt "comments title"
-msgid "One thought on &ldquo;%2$s&rdquo;"
-msgid_plural "%1$s thoughts on &ldquo;%2$s&rdquo;"
-msgstr[0] ""
-"Satu respon untuk &ldquo;%2$s&rdquo;\n"
-"%1$s respon untuk &ldquo;%2$s&rdquo;"
-
-#: ../comments.php:35 ../comments.php:52
-msgid "Comment navigation"
-msgstr "Navigasi Komentar"
-
-#: ../comments.php:36 ../comments.php:53
-msgid "&larr; Older Comments"
-msgstr "&larr; Komentar Jadul"
-
-#: ../comments.php:37 ../comments.php:54
-msgid "Newer Comments &rarr;"
-msgstr "Komentar Baru &rarr;"
-
-#: ../comments.php:64
-msgid "Comments are closed."
-msgstr "Komentar ditutup."
-
-#: ../content-none.php:13
-msgid "Nothing Found"
-msgstr "Tidak ada yang ditemukan"
-
-#: ../content-none.php:19
-#, php-format
-msgid ""
-"Ready to publish your first post? <a href=\"%1$s\">Get started here</a>."
-msgstr ""
-"Siap untuk publikasikan post pertama Anda? <a href=\"%1$s\">Mulai di sini</"
-"a>."
-
-#: ../content-none.php:23
-msgid ""
-"Sorry, but nothing matched your search terms. Please try again with some "
-"different keywords."
-msgstr ""
-"Maaf, tidak ada yang cocok dengan istilah pencarian Anda. Silakan coba lagi "
-"dengan kata kunci yang berbeda."
-
-#: ../content-none.php:28
-msgid ""
-"It seems we can&rsquo;t find what you&rsquo;re looking for. Perhaps "
-"searching can help."
-msgstr ""
-"Tampaknya kita tidak dapat menemukan apa yang Anda cari. Mungkin pencarian "
-"bisa membantu."
-
-#: ../content-page.php:18 ../content-single.php:31 ../content.php:35
-msgid "Pages:"
-msgstr "Laman:"
-
-#: ../content-page.php:24 ../content-search.php:53 ../content-single.php:73
-msgid "Edit"
-msgstr ""
-
-#. translators: used between list items, there is a space after the comma
-#. translators: used between list items, there is a space after the comma
-#. translators: used between list items, there is a space after the comma
-#. translators: used between list items, there is a space after the comma
-#. translators: used between list items, there is a space after the comma
-#. translators: used between list items, there is a space after the comma
-#: ../content-search.php:30 ../content-search.php:40 ../content-single.php:41
-#: .. /content-single.php:44 ../content.php:45 ../content.php:55
-msgid ", "
-msgstr ""
-
-#: ../content-search.php:34
-#, php-format
-msgid "Posted in %1$s"
-msgstr "Diterbitkan pada %1$s"
-
-#: ../content-search.php:44
-#, php-format
-msgid "Tagged %1$s"
-msgstr "Tag %1$s"
-
-#: ../content-search.php:50
-msgid "Leave a comment"
-msgstr "Beri komentar"
-
-#: ../content-search.php:50
-msgid "1 Comment"
-msgstr "1 Komentar"
-
-#: ../content-search.php:50
-#, php-format
-msgid "% Comments"
-msgstr "% Komentar"
-
-#: ../content-single.php:49
-#, php-format
-msgid ""
-"This entry was tagged %2$s. Bookmark the <a href=\"%3$s\" rel=\"bookmark"
-"\">permalink</a>."
-msgstr ""
-"Catatan ini telah di tag %2$s. Bookmark <a href=\"%3$s\" rel=\"bookmark"
-"\">permalink.</a>"
-
-#: ../content-single.php:51
-#, php-format
-msgid "Bookmark the <a href=\"%3$s\" rel=\"bookmark\">permalink</a>."
-msgstr "Bookmark <a href=\"%3$s\" rel=\"bookmark\">permalink.</a>"
-
-#: ../content-single.php:57
-#, php-format
-msgid ""
-"This entry was posted in %1$s and tagged %2$s. Bookmark the <a href=\"%3$s\" "
-"rel=\"bookmark\">permalink</a>."
-msgstr ""
-"Catatan ini telah diposting di%1$s dan menandai%2$s. Bookmark <a href=\"%3$s"
-"\" rel=\"bookmark\">permalink.</a>"
-
-#: ../content-single.php:59
-#, php-format
-msgid ""
-"This entry was posted in %1$s. Bookmark the <a href=\"%3$s\" rel=\"bookmark"
-"\">permalink</a>."
-msgstr ""
-"Entri memiliki tag %1$s. Bookmark <a href=\"%3$s\" rel=\"bookmark"
-"\">permalink.</a>"
-
-#: ../content.php:32
-msgid "Continue reading <span class=\"meta-nav\">&rarr;</span>"
-msgstr "Lanjutkan baca <span class=\"meta-nav\">&rarr;</span>"
-
-#: ../content.php:49
-#, php-format
-msgid "<i class=\"fa fa-folder-open\"></i>Posted in %1$s"
-msgstr "<i class=\"fa fa-folder-open\"></i>Diposting di %1$s"
-
-#: ../content.php:59
-#, php-format
-msgid "<i class=\"fa fa-tags\"></i>Tagged %1$s"
-msgstr "<i class=\"fa fa-tags\"></i>Tag %1$s"
-
-#: ../content.php:65
-msgid "<i class=\"fa fa-comments\"></i>Leave a comment"
-msgstr "<i class=\"fa fa-comments\"></i>Beri komentar"
-
-#: ../content.php:65
-msgid "<i class=\"fa fa-comments\"></i>1 Comment"
-msgstr "<i class=\"fa fa-comments\"></i>1 komentar"
-
-#: ../content.php:65
-#, php-format
-msgid "<i class=\"fa fa-comments\"></i>% Comments"
-msgstr "<i class=\"fa fa-comments\"></i>% Komentar"
-
-#: ../content.php:68
-msgid "<i class=\"fa fa-pencil-square-o\"></i>Edit"
-msgstr ""
-
-#: ../demo.php:6
-msgid ""
-"Curabitur eget interdum risus. Curabitur dictum, libero ut mattis consequat, "
-"lectus mauris congue risus, et volutpat nulla eros vel arcu."
-msgstr ""
-
-#: ../demo.php:16 ../demo.php:28 ../demo.php:40 ../demo.php:52 ../demo.php:64
-#: .. /demo.php:76 ../demo.php:89
-msgid ""
-"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec iaculis metus "
-"vitae ligula elementum ut luctus lorem facilisis."
-msgstr ""
-"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec iaculis metus "
-"vitae ligula elementum ut luctus Rio Bermano."
-
-#: ../demo.php:98
-msgid "Product 11"
-msgstr "Produk 11"
-
-#: ../demo.php:105
-msgid "Product 10"
-msgstr "Produk 10"
-
-#: ../demo.php:112
-msgid "Product 9"
-msgstr "Produk 9"
-
-#: ../demo.php:119
-msgid "Product 8"
-msgstr "Produk 8"
-
-#: ../demo.php:126
-msgid "Product 7"
-msgstr "Produk 7"
-
-#: ../demo.php:133
-msgid "Product 6"
-msgstr "Produk 6"
-
-#: ../demo.php:140
-msgid "Product 5"
-msgstr "Produk 5"
-
-#: ../demo.php:147
-msgid "Product 4"
-msgstr "Produk 4"
-
-#: ../demo.php:191
-msgid "Russel Clinton"
-msgstr "Rio Bermano"
-
-#: ../demo.php:192
-msgid "Interior Head"
-msgstr "Interior kepala"
-
-#: ../demo.php:193
-msgid ""
-"Duis luctus nisl vel rhoncus rhoncus. Nam vehicula maximus sagittis. Proin "
-"quis lobortis nisi. Etiam luctus auctor urna, a luctus metus blandit in. Nam "
-"quis facilisis nunc, nec scelerisque ligula. Aenean quis lacus bibendum, "
-"lobortis dolor sed, facilisis ipsum. Nunc feugiat augue ac ligula blandit, "
-"id maximus purus molestie.<br /><br />\n"
-"                                Duis luctus nisl vel rhoncus rhoncus. Nam "
-"vehicula maximus sagittis. Proin quis lobortis nisi. Etiam luctus auctor "
-"urna, a luctus metus blandit in. Nam quis facilisis nunc, nec scelerisque "
-"ligula. Aenean quis lacus bibendum, lobortis dolor sed, facilisis ipsum. "
-"Nunc feugiat augue ac ligula blandit, id maximus purus molestie."
-msgstr ""
-"Duis luctus nisl vel rhoncus rhoncus. Nam vehicula maximus sagittis. Proin "
-"quis lobortis nisi. Etiam luctus auctor urna, a luctus metus blandit in. Nam "
-"quis facilisis nunc, nec scelerisque ligula. Aenean quis lacus bibendum, "
-"lobortis dolor sed, facilisis ipsum. Nunc feugiat augue ac ligula blandit, "
-"id maximus purus molestie.<br /><br />\n"
-"                                Duis luctus nisl vel rhoncus rhoncus. Nam "
-"vehicula maximus sagittis. Proin quis lobortis nisi. Etiam luctus auctor "
-"urna, a luctus metus blandit in. Nam quis facilisis nunc, nec scelerisque "
-"ligula. Aenean quis lacus bibendum, lobortis dolor sed, facilisis ipsum. "
-"Nunc feugiat augue ac ligula blandit, id maximus Rio Bermano."
-
-#: ../demo.php:202
-msgid "Bibo Aurther"
-msgstr ""
-
-#: ../demo.php:203
-msgid "CEO"
-msgstr ""
-
-#: ../demo.php:204
-msgid ""
-"Proin libero odio, ultrices et tincidunt vitae, consequat et sapien. Duis "
-"luctus nisl vel rhoncus rhoncus. Nam vehicula maximus sagittis. Proin quis "
-"lobortis nisi. Etiam luctus auctor urna, a luctus metus blandit in. Nam quis "
-"facilisis nunc, nec scelerisque ligula. Aenean quis lacus bibendum, lobortis "
-"dolor sed, facilisis ipsum. Nunc feugiat augue ac ligula blandit, id maximus "
-"purus molestie.<br /><br />\n"
-"                                Proin libero odio, ultrices et tincidunt "
-"vitae, consequat et sapien. Duis luctus nisl vel rhoncus rhoncus. Nam "
-"vehicula maximus sagittis. Proin quis lobortis nisi. Etiam luctus auctor "
-"urna, a luctus metus blandit in. Nam quis facilisis nunc, nec scelerisque "
-"ligula. Aenean quis lacus bibendum, lobortis dolor sed, facilisis ipsum. "
-"Nunc feugiat augue ac ligula blandit, id maximus purus molestie."
-msgstr ""
-
-#: ../demo.php:213
-msgid "Rusel Misil"
-msgstr "Rio Bermano"
-
-#: ../demo.php:214
-msgid "Technician"
-msgstr "Teknisi"
-
-#: ../demo.php:215
-msgid ""
-"Etiam vestibulum pellentesque nisi, ac scelerisque metus aliquam non. Proin "
-"tincidunt tortor auctor, accumsan arcu id, congue felis. Curabitur vitae "
-"lorem at purus imperdiet commodo quis non sem. Donec magna odio, commodo "
-"eget rhoncus quis, facilisis et dolor.<br /><br />\n"
-"                                Proin libero odio, ultrices et tincidunt "
-"vitae, consequat et sapien. Duis luctus nisl vel rhoncus rhoncus. Nam "
-"vehicula maximus sagittis. Proin quis lobortis nisi. Etiam luctus auctor "
-"urna, a luctus metus blandit in. Nam quis facilisis nunc, nec scelerisque "
-"ligula. Aenean quis lacus bibendum, lobortis dolor sed, facilisis ipsum. "
-"Nunc feugiat augue ac ligula blandit, id maximus purus molestie."
-msgstr ""
-
-#: ../demo.php:224
-msgid "Linda Harley"
-msgstr ""
-
-#: ../demo.php:225 ../demo.php:236
-msgid "Staff"
-msgstr ""
-
-#: ../demo.php:226
-msgid ""
-"Nulla facilisis sapien dui, vel faucibus risus consequat sit amet. Phasellus "
-"vestibulum vestibulum mi quis posuere. Aenean pretium purus ut purus "
-"vehicula dictum. Morbi elementum dignissim aliquet. Nullam et purus et mi "
-"finibus laoreet. Aliquam posuere erat eu lobortis vulputate. Phasellus "
-"pulvinar fringilla turpis in congue. Integer et felis fringilla, elementum "
-"lacus eu, tincidunt purus.<br/><br />\n"
-"                            Nulla facilisis sapien dui, vel faucibus risus "
-"consequat sit amet. Phasellus vestibulum vestibulum mi quis posuere. Aenean "
-"pretium purus ut purus vehicula dictum. Morbi elementum dignissim aliquet. "
-"Nullam et purus et mi finibus laoreet. Aliquam posuere erat eu lobortis "
-"vulputate. Phasellus pulvinar fringilla turpis in congue. Integer et felis "
-"fringilla, elementum lacus eu, tincidunt purus."
-msgstr ""
-
-#: ../demo.php:235
-msgid "John Doe"
-msgstr ""
-
-#: ../demo.php:237
-msgid ""
-"Donec ut neque placerat, euismod enim et, sodales magna. Sed sit amet nunc "
-"ullamcorper, semper nunc mattis, scelerisque urna. Donec dictum mattis "
-"malesuada. Suspendisse vestibulum enim eu nisi auctor, a mollis odio "
-"posuere. Ut scelerisque luctus arcu id tempus.<br/><br />\n"
-"                            Nulla facilisis sapien dui, vel faucibus risus "
-"consequat sit amet. Phasellus vestibulum vestibulum mi quis posuere. Aenean "
-"pretium purus ut purus vehicula dictum. Morbi elementum dignissim aliquet. "
-"Nullam et purus et mi finibus laoreet. Aliquam posuere erat eu lobortis "
-"vulputate. Phasellus pulvinar fringilla turpis in congue. Integer et felis "
-"fringilla, elementum lacus eu, tincidunt purus."
-msgstr ""
-
-#: ../demo.php:246
-msgid "Jakson Biber"
-msgstr "Rio Bermano"
-
-#: ../demo.php:247
-msgid "Marketing Executive"
-msgstr ""
-
-#: ../demo.php:248
-msgid ""
-"Fusce imperdiet enim eget neque auctor, venenatis feugiat neque dapibus. "
-"Nulla consequat, nunc sed vestibulum semper, nibh velit pellentesque lectus, "
-"ac lobortis elit massa hendrerit lacus. Nulla facilisis sapien dui, vel "
-"faucibus risus consequat sit amet. Phasellus vestibulum vestibulum mi quis "
-"posuere.<br/><br />\n"
-"                            Fusce imperdiet enim eget neque auctor, "
-"venenatis feugiat neque dapibus. Nulla consequat, nunc sed vestibulum "
-"semper, nibh velit pellentesque lectus, ac lobortis elit massa hendrerit "
-"lacus. Nulla facilisis sapien dui, vel faucibus risus consequat sit amet. "
-"Phasellus vestibulum vestibulum mi quis posuere."
-msgstr ""
-
-#: ../demo.php:257
-msgid "Jack Peterson"
-msgstr ""
-
-#: ../demo.php:258
-msgid "Sales Executive"
-msgstr "Eksekutif penjualan"
-
-#: ../demo.php:259
-msgid ""
-"Donec ut neque placerat, euismod enim et, sodales magna. Sed sit amet nunc "
-"ullamcorper, semper nunc mattis, scelerisque urna. Donec dictum mattis "
-"malesuada. Suspendisse vestibulum enim eu nisi auctor, a mollis odio "
-"posuere. Ut scelerisque luctus arcu id tempus.<br/><br />\n"
-"                            Donec ut neque placerat, euismod enim et, "
-"sodales magna. Sed sit amet nunc ullamcorper, semper nunc mattis, "
-"scelerisque urna. Donec dictum mattis malesuada. Suspendisse vestibulum enim "
-"eu nisi auctor, a mollis odio posuere. Ut scelerisque luctus arcu id tempus."
-msgstr ""
-
-#: ../demo.php:275
-msgid "Testimonials"
-msgstr "Testimonial"
-
-#: ../demo.php:281
-msgid ""
-"Thanks for delivering top quality services to your clients. It just takes a "
-"minute to get an answer from you when in difficulties. I use the chat "
-"service and I can say that the AccessPress Themes staff knows how to shorten "
-"the physical distance to its clients.<br />Thanks again for making our "
-"experience with AccessPress Themes the best one online!"
-msgstr ""
-"Thanks for delivering top quality services to your clients. It just takes a "
-"minute to get an answer from you when in difficulties. I use the chat "
-"service and I can say that the AccessPress Themes staff knows how to shorten "
-"the physical distance to its clients.<br />Thanks again for making our "
-"experience with AccessPress Themes the best one online!"
-
-#: ../demo.php:283
-msgid "Yanetxys Torreblanca"
-msgstr "Rio Bermano"
-
-#: ../demo.php:289
-msgid ""
-"Thank you very much the support team accesspress lite for service, are "
-"really wonderful in their care and in the resolution of the problem. "
-"Congratulations to facebook chat and Junu team."
-msgstr ""
-
-#: ../demo.php:291
-msgid "David Soriano"
-msgstr "Amelia"
-
-#: ../demo.php:297
-msgid ""
-"Great Customer service and technical assistance!!!<br />\n"
-"                                The template is really good and nice, "
-"definitely worth going PRO"
-msgstr ""
-
-#: ../demo.php:300
-msgid "Stefano Roganti"
-msgstr ""
-
-#: ../demo.php:315
-msgid "Read our latest blog"
-msgstr "Lihat blog terbaru"
-
-#: ../demo.php:324
-msgid "Nulla pretium leo ac congue"
-msgstr ""
-
-#: ../demo.php:325
-msgid "December 26, 2014"
-msgstr ""
-
-#: ../demo.php:326
-msgid ""
-"Nulla pretium leo ac congue molestie. Aliquam ac velit laoreet, consectetur "
-"elit pulvinar, elementum lorem. Duis sed venenatis eros. Vestibulum ante "
-"ipsum primis in faucibus orci luctus et ultrices po... "
-msgstr ""
-"Nulla pretium leo ac congue molestie. Aliquam ac velit laoreet, consectetur "
-"elit pulvinar, elementum lorem. Duis sed venenatis eros. Vestibulum ante "
-"ipsum primis in faucibus orci luctus et rio bermano... "
-
-#: ../demo.php:327 ../demo.php:338 ../demo.php:349
-#: ../layouts/blog-section.php:36
-msgid "Read More"
-msgstr "Selengkapnya"
-
-#: ../demo.php:335
-msgid "Pellentesque cursus dolor quis"
-msgstr ""
-
-#: ../demo.php:336 ../demo.php:347
-msgid "September 9, 2014"
-msgstr ""
-
-#: ../demo.php:337
-msgid ""
-"Nullam faucibus mi at quam mattis egestas. Ut dapibus lectus at risus "
-"rhoncus finibus. Pellentesque sem risus, suscipit iaculis ex in, rutrum "
-"sodales enim. Vivamus non mauris tortor. Maecenas tellus n... "
-msgstr ""
-
-#: ../demo.php:346
-msgid "Lorem ipsum dolor"
-msgstr ""
-
-#: ../demo.php:348
-msgid ""
-"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod "
-"tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, "
-"quis nostrud exercitation ullamco laboris nisi ut ... "
-msgstr ""
-
-#: ../demo.php:354 ../layouts/blog-section.php:47
-msgid "Read All"
-msgstr "Baca Semua"
-
-#: ../demo.php:362
-msgid "For News and Updates Subscribe us"
-msgstr "Untuk Dapatkan Update Terbaru Silahkan SubScribe"
-
-#: ../demo.php:365
-msgid "Here can be some text as well"
-msgstr "Disini Anda dapat meletakkan beberapa teks"
-
-#: ../demo.php:366
-msgid "Subscribe Us"
-msgstr "SubScribe"
-
-#: ../demo.php:400
-msgid "AccessPress Themes"
-msgstr ""
-
-#: ../demo.php:401
-msgid "5th Floor, Mathuri Sadan"
-msgstr "Cisaat, kab. Sukabumi"
-
-#: ../demo.php:402
-msgid "Rabi Bhawan, Kathmandu - Nepal"
-msgstr "JAwa Barat - Indonesia"
-
-#: ../demo.php:404
-msgid "General enquiries:"
-msgstr "Pertanyaan umum:"
-
-#: ../demo.php:405
-msgid "Support:"
-msgstr ""
-
-#: ../demo.php:407
-msgid "Skype: access-keys"
-msgstr ""
-
-#: ../footer.php:53
-msgid "AccessPress Parallax by"
-msgstr "AccessPress Parallax oleh"
-
-#: ../functions.php:63
-msgid "Primary Menu"
-msgstr "Menu Utama"
-
-#: ../functions.php:98
-msgid "Sidebar"
-msgstr ""
-
-#: ../functions.php:108
-msgid "Footer One"
-msgstr "Footer Satu"
-
-#: ../functions.php:118
-msgid "Footer Two"
-msgstr "Footer Dua"
-
-#: ../functions.php:128
-msgid "Footer Three"
-msgstr "Footer Tiga"
-
-#: ../functions.php:138
-msgid "Footer Four"
-msgstr "Footer Empat"
-
-#: ../header.php:41
-msgid "Menu"
-msgstr ""
-
-#. Name of the template
-msgid "Home Page"
-msgstr "Laman Utama"
-
-#: ../search.php:16
-#, php-format
-msgid "Search Results for: %s"
-msgstr "Hasil Pencarian untuk: %s"
-
-#: ../inc/accesspress-functions.php:64
-#, php-format
-msgid "Page %s"
-msgstr "Laman %s"
-
-#: ../inc/accesspress-functions.php:374
-msgid "AccessPress Social Icons"
-msgstr "AccessPress Sosial Ikon"
-
-#: ../inc/accesspress-functions.php:381
-msgid "AccessPress Social Counter"
-msgstr "AccessPress Sosial Counter"
-
-#: ../inc/accesspress-functions.php:388
-msgid "AccessPress Social Share"
-msgstr "AccessPress Sosial Share"
-
-#: ../inc/accesspress-functions.php:419
-#: ../inc/accesspress-plugin-activation.php:333
-msgid "Install Required Plugins"
-msgstr "Instal Plugin yang Diperlukan"
-
-#: ../inc/accesspress-functions.php:420
-#: ../inc/accesspress-plugin-activation.php:334
-msgid "Install Plugins"
-msgstr "Instal Plugin"
-
-#: ../inc/accesspress-functions.php:421
-#: ../inc/accesspress-plugin-activation.php:335
-#, php-format
-msgid "Installing Plugin: %s"
-msgstr "Menginstal Plugin: %s"
-
-#: ../inc/accesspress-functions.php:422
-#: ../inc/accesspress-plugin-activation.php:336
-msgid "Something went wrong with the plugin API."
-msgstr "Ada yang salah dengan plugin API."
-
-#: ../inc/accesspress-functions.php:423
-#: ../inc/accesspress-plugin-activation.php:337
-#, php-format
-msgid "This theme requires the following plugin: %1$s."
-msgid_plural "This theme requires the following plugins: %1$s."
-msgstr[0] ""
-"Tema ini membutuhkan plugin berikut: %1$s.\n"
-"Tema ini membutuhkan plugin berikut: %1$s."
-
-#: ../inc/accesspress-functions.php:424
-#: ../inc/accesspress-plugin-activation.php:342
-#, php-format
-msgid "This theme recommends the following plugin: %1$s."
-msgid_plural "This theme recommends the following plugins: %1$s."
-msgstr[0] ""
-"Tema ini merekomendasikan plugin berikut: %1$s.\n"
-"Tema ini merekomendasikan plugin berikut: %1$s."
-
-#: ../inc/accesspress-functions.php:425
-#, php-format
-msgid ""
-"Sorry, but you do not have the correct permissions to install the %s plugin. "
-"Contact the administrator of this site for help on getting the plugin "
-"installed."
-msgid_plural ""
-"Sorry, but you do not have the correct permissions to install the %s "
-"plugins. Contact the administrator of this site for help on getting the "
-"plugins installed."
-msgstr[0] ""
-"Maaf, tapi Anda tidak memiliki izin yang benar untuk menginstal plugin %s. "
-"Hubungi administrator situs ini untuk bantuan untuk mendapatkan plugin "
-"diinstal."
-
-#: ../inc/accesspress-functions.php:426
-#: ../inc/accesspress-plugin-activation.php:367
-#, php-format
-msgid "The following required plugin is currently inactive: %1$s."
-msgid_plural "The following required plugins are currently inactive: %1$s."
-msgstr[0] ""
-"Berikut adalah plugin yang diperlukan baru saja tidak diaktifkan %1$s."
-
-#: ../inc/accesspress-functions.php:427
-#: ../inc/accesspress-plugin-activation.php:372
-#, php-format
-msgid "The following recommended plugin is currently inactive: %1$s."
-msgid_plural "The following recommended plugins are currently inactive: %1$s."
-msgstr[0] ""
-"Berikut adalah plugin yang direkomendasikan yang baru saja tidak aktif %1$s."
-
-#: ../inc/accesspress-functions.php:428
-#, php-format
-msgid ""
-"Sorry, but you do not have the correct permissions to activate the %s "
-"plugin. Contact the administrator of this site for help on getting the "
-"plugin activated."
-msgid_plural ""
-"Sorry, but you do not have the correct permissions to activate the %s "
-"plugins. Contact the administrator of this site for help on getting the "
-"plugins activated."
-msgstr[0] ""
-"Maaf, tapi Anda tidak memiliki izin yang tepat untuk mengaktifkan plugin %s. "
-"Hubungi administrator web ini untuk mendapatkan bantuan mengaktifkan plugin."
-
-#: ../inc/accesspress-functions.php:429
-#: ../inc/accesspress-plugin-activation.php:352
-#, php-format
-msgid ""
-"The following plugin needs to be updated to its latest version to ensure "
-"maximum compatibility with this theme: %1$s."
-msgid_plural ""
-"The following plugins need to be updated to their latest version to ensure "
-"maximum compatibility with this theme: %1$s."
-msgstr[0] ""
-"Plugin berikut ini butuh di update versi yang terbaru untuk memastikan "
-"kompatibilitas yang maksimal dengan tema ini : %1$s."
-
-#: ../inc/accesspress-functions.php:430
-#, php-format
-msgid ""
-"Sorry, but you do not have the correct permissions to update the %s plugin. "
-"Contact the administrator of this site for help on getting the plugin "
-"updated."
-msgid_plural ""
-"Sorry, but you do not have the correct permissions to update the %s plugins. "
-"Contact the administrator of this site for help on getting the plugins "
-"updated."
-msgstr[0] ""
-"Maaf, tapi Anda tidak memiliki izin yang benar untuk memperbarui plugin%s. "
-"Hubungi administrator situs ini untuk bantuan untuk mendapatkan plugin "
-"diperbarui."
-
-#: ../inc/accesspress-functions.php:431
-#: ../inc/accesspress-plugin-activation.php:382
-msgid "Begin installing plugin"
-msgid_plural "Begin installing plugins"
-msgstr[0] "Mulai menginstal plugin"
-
-#: ../inc/accesspress-functions.php:432
-#: ../inc/accesspress-plugin-activation.php:392
-msgid "Begin activating plugin"
-msgid_plural "Begin activating plugins"
-msgstr[0] "Mulai mengaktifkan plugin"
-
-#: ../inc/accesspress-functions.php:433
-#: ../inc/accesspress-plugin-activation.php:397
-msgid "Return to Required Plugins Installer"
-msgstr "Kembali ke Installer Plugin yang Diperlukan"
-
-#: ../inc/accesspress-functions.php:434
-#: ../inc/accesspress-plugin-activation.php:399
-#: ../inc/accesspress-plugin-activation.php:3033
-msgid "Plugin activated successfully."
-msgstr "Plugin berhasil diaktifkan."
-
-#: ../inc/accesspress-functions.php:435
-#, php-format
-msgid "All plugins installed and activated successfully. %s"
-msgstr "Semua plugin berhasil dipasang dan diaktifkan. %s"
-
-#: ../inc/accesspress-options.php:15
-msgid "Fade"
-msgstr "Memudar"
-
-#: ../inc/accesspress-options.php:16
-msgid "Slide Horizontal"
-msgstr ""
-
-#: ../inc/accesspress-options.php:17
-msgid "Slide Vertical"
-msgstr ""
-
-#: ../inc/accesspress-options.php:21 ../inc/ajax.php:111 ../inc/options-
-#: framework/includes/class-options-sanitization.php:498
-msgid "No Overlay"
-msgstr "Tidak ada Overlay"
-
-#: ../inc/accesspress-options.php:22 ../inc/ajax.php:112 ../inc/options-
-#: framework/includes/class-options-sanitization.php:499
-msgid "Small Dotted"
-msgstr "Titik-titik kecil"
-
-#: ../inc/accesspress-options.php:23 ../inc/ajax.php:113 ../inc/options-
-#: framework/includes/class-options-sanitization.php:500
-msgid "Large Dotted"
-msgstr "Titik-titik besar"
-
-#: ../inc/accesspress-options.php:24 ../inc/ajax.php:114 ../inc/options-
-#: framework/includes/class-options-sanitization.php:501
-msgid "Light Black"
-msgstr "Cahaya Hitam"
-
-#: ../inc/accesspress-options.php:25 ../inc/ajax.php:115 ../inc/options-
-#: framework/includes/class-options-sanitization.php:502
-msgid "Black Dotted"
-msgstr "Titik-titik Hitam"
-
-#: ../inc/accesspress-options.php:29 ../inc/ajax.php:41 ../inc/options-
-#: framework/includes/class-options-sanitization.php:478
-msgid "Default Section"
-msgstr "Bagian Default"
-
-#: ../inc/accesspress-options.php:30 ../inc/ajax.php:42 ../inc/options-
-#: framework/includes/class-options-sanitization.php:479
-msgid "Service Section"
-msgstr "Bagian Layanan"
-
-#: ../inc/accesspress-options.php:31 ../inc/ajax.php:43 ../inc/options-
-#: framework/includes/class-options-sanitization.php:480
-msgid "Team Section"
-msgstr "Bagian Tim"
-
-#: ../inc/accesspress-options.php:32 ../inc/ajax.php:44 ../inc/options-
-#: framework/includes/class-options-sanitization.php:481
-msgid "Portfolio Section"
-msgstr "Bagian Portofolio"
-
-#: ../inc/accesspress-options.php:33 ../inc/ajax.php:45 ../inc/options-
-#: framework/includes/class-options-sanitization.php:482
-msgid "Testimonial Section"
-msgstr "Bagian Testimonial"
-
-#: ../inc/accesspress-options.php:34 ../inc/ajax.php:46 ../inc/options-
-#: framework/includes/class-options-sanitization.php:483
-msgid "Blog Section"
-msgstr "Bagian Blog"
-
-#: ../inc/accesspress-options.php:35 ../inc/ajax.php:47 ../inc/options-
-#: framework/includes/class-options-sanitization.php:484
-msgid "Call to Action Section"
-msgstr "Bagian Panggil untuk Tindakan"
-
-#: ../inc/accesspress-options.php:36 ../inc/ajax.php:48 ../inc/options-
-#: framework/includes/class-options-sanitization.php:485
-msgid "Google Map Section"
-msgstr "Bagian Peta Google"
-
-#: ../inc/accesspress-options.php:37 ../inc/ajax.php:49 ../inc/options-
-#: framework/includes/class-options-sanitization.php:486
-msgid "Blank Section"
-msgstr "Bagian Kosong"
-
-#: ../inc/accesspress-options.php:41
-msgid "Yes"
-msgstr "Ya"
-
-#: ../inc/accesspress-options.php:42
-msgid "No"
-msgstr "Tidak"
-
-#: ../inc/accesspress-options.php:58
-msgid ""
-"AccessPress Parallax is a beautiful WordPress theme with Parallax design. "
-"Parallax design has become popular and is being adopted because 3D effects "
-"are possible with it, you can add some sphere to your product, it is the "
-"best way of storytelling, you can draw your visitors in, it is interactive, "
-"engaging, makes your visitors curious, fun, surprise, effective to trigger "
-"action, invite your visitors in great Call to Action, great conversion rates "
-"and many more. This is probably the most beautiful, feature rich and "
-"complete free WordPress parallax theme with features like: fully responsive, "
-"advance theme option panel, featured slider, advance post settings, services/"
-"team/blog/portfolio/testimonial layout, Google map integration, custom logo/"
-"fav icon, call to action, CSS animation, SEO friendly, translation ready, "
-"RTL support, custom CSS/JS and more! "
-msgstr ""
-
-#: ../inc/accesspress-options.php:59
-msgid "- A WordPress Division of Access Keys."
-msgstr ""
-
-#: ../inc/accesspress-options.php:62
-msgid "Demo:"
-msgstr ""
-
-#: ../inc/accesspress-options.php:63
-msgid "Documentation:"
-msgstr "Dokumentasi:"
-
-#: ../inc/accesspress-options.php:66
-msgid "Other products by AccessPressThemes"
-msgstr "Produk lainnya oleh AccessPressThemes"
-
-#: ../inc/accesspress-options.php:67
-msgid "Our Themes - "
-msgstr "Tema Kita -"
-
-#: ../inc/accesspress-options.php:68
-msgid "Our Plugins - "
-msgstr "Plugin Kita -"
-
-#: ../inc/accesspress-options.php:72
-msgid "Get in touch"
-msgstr "Berhubungan"
-
-#: ../inc/accesspress-options.php:73
-msgid ""
-"If you have any question/feedback regarding theme, please post in our forum"
-msgstr ""
-"Jika Anda memiliki pertanyaan/umpan balik tentang tema, silahkan posting di "
-"forum kami"
-
-#: ../inc/accesspress-options.php:74
-msgid "Forum:"
-msgstr ""
-
-#: ../inc/accesspress-options.php:75
-msgid "Live Chat Support:"
-msgstr ""
-
-#: ../inc/accesspress-options.php:77
-msgid "For Queries Regading Pro Themes:"
-msgstr "Untuk pertanyaan Regading Pro tema:"
-
-#: ../inc/accesspress-options.php:110
-msgid "General Settings"
-msgstr "Pengaturan Umum"
-
-#: ../inc/accesspress-options.php:114
-msgid ""
-"Enable Single Page Parallax Home Page - if disabled, will show Blog-roll/"
-"Static-page"
-msgstr ""
-"Mengadakan Laman Tunggal Parallax Laman Utama - jika ditiadakan, akan "
-"menampilkan tampilan Blog/Laman statis"
-
-#: ../inc/accesspress-options.php:115 ../inc/accesspress-options.php:122 ..
-#: /inc/accesspress-options.php:136 ../inc/accesspress-options.php:143
-#: /inc/accesspress-options.php:205 ../inc/accesspress-options.php:212
-#: /inc/accesspress-options.php:219 ../inc/accesspress-options.php:226
-#: /inc/accesspress-options.php:318
-msgid "Check To enable"
-msgstr "Centang untuk mengadakan"
-
-#: ../inc/accesspress-options.php:121
-msgid "Enable Single Page Nav(Menu) - if disabled, will show primary menu"
-msgstr ""
-"Mengadakan Nav Laman Tunggal (Menu) - jika ditiadakan, akan memunculkan menu "
-"utama"
-
-#: ../inc/accesspress-options.php:128
-msgid "Home Menu Text - Single Page Nav(Menu)"
-msgstr "Teks Menu Laman Utama - Nav Laman Tunggal (Menu)"
-
-#: ../inc/accesspress-options.php:130
-msgid "Leave blank if you do not want to show"
-msgstr "Biarkan kosong jika Anda tidak ingin menampilkan"
-
-#: ../inc/accesspress-options.php:135
-msgid ""
-"Enable Animation on scroll - Page Elements will show with some animation "
-"only in home page."
-msgstr ""
-"Adakan Animasi saat skrol - Elemen Laman akan menampilkan dengan beberapa "
-"animasi hanya di laman utama."
-
-#: ../inc/accesspress-options.php:142
-msgid "Enable Responsive"
-msgstr "Adakan Responsiv"
-
-#: ../inc/accesspress-options.php:150
-msgid "Upload Logo"
-msgstr "Unggah Logo"
-
-#: ../inc/accesspress-options.php:151 ../inc/ajax.php:66 ../inc/options-
-#: framework/includes/class-options-media-uploader.php:64
-#: framework/includes/class-options-media-uploader.php:117
-msgid "Upload"
-msgstr "Unggah"
-
-#: ../inc/accesspress-options.php:155
-msgid "Upload Fav Icon"
-msgstr "Unggah Favicon"
-
-#: ../inc/accesspress-options.php:161
-msgid "Select Header Layout"
-msgstr "Pilih Layout Header"
-
-#: ../inc/accesspress-options.php:171
-msgid "Parallax Sections"
-msgstr "Bagian Parallax"
-
-#: ../inc/accesspress-options.php:175
-msgid ""
-"<strong>Note: Please make a new page before you create a section. Each "
-"Section should have unique Page.</strong>"
-msgstr ""
-"<strong>Catatan: Silahkan pilih laman baru sebelum Anda membuat sebuah "
-"bagian. Setiap bagian harus memiliki laman yang unik.</strong>"
-
-#: ../inc/accesspress-options.php:200
-msgid "Post Settings"
-msgstr "Pengaturan Post"
-
-#: ../inc/accesspress-options.php:204
-msgid "Show Posted Date"
-msgstr "Tampilkan Tanggal Post"
-
-#: ../inc/accesspress-options.php:211
-msgid "Show Post Author"
-msgstr "Tampilkan Author Post"
-
-#: ../inc/accesspress-options.php:218
-msgid "Show Post Footer text"
-msgstr "Tampilkan Teks Post Footer"
-
-#: ../inc/accesspress-options.php:225
-msgid "Show Prev Next Pagination"
-msgstr "Tampilkan Paginasi Sebelumnya Selanjutnya"
-
-#: ../inc/accesspress-options.php:233
-msgid "Slider Settings"
-msgstr "Pengaturan Slider"
-
-#: ../inc/accesspress-options.php:237
-msgid "Show Slider"
-msgstr "Tampilkan Slider"
-
-#: ../inc/accesspress-options.php:245
-msgid "Select a Category"
-msgstr "Pilih Sebuah Kategori"
-
-#: ../inc/accesspress-options.php:252
-msgid "Show full window"
-msgstr "Tampilkan windows penuh"
-
-#: ../inc/accesspress-options.php:259
-msgid "Remove Slider overlay - Black Dots"
-msgstr "Tampilkan overlay slider - Titik-titik Hitam"
-
-#: ../inc/accesspress-options.php:266
-msgid "Show Pager"
-msgstr "Tampilkan Pager"
-
-#: ../inc/accesspress-options.php:273
-msgid "Show Controls"
-msgstr "Tampilkan Kontrol"
-
-#: ../inc/accesspress-options.php:280
-msgid "Auto Transition"
-msgstr "Transisi Otomatis"
-
-#: ../inc/accesspress-options.php:287
-msgid "Slider Transition"
-msgstr "Transisi Slider"
-
-#: ../inc/accesspress-options.php:294
-msgid "Slider Transition Speed"
-msgstr "Kecepatan Transisi Slider"
-
-#: ../inc/accesspress-options.php:300
-msgid "Slider Pause Duration"
-msgstr "Durasi Jeda SLider"
-
-#: ../inc/accesspress-options.php:306
-msgid "Show Caption"
-msgstr "Tampilkan Keterangan"
-
-#: ../inc/accesspress-options.php:313
-msgid "Social Links"
-msgstr "Link Media Sosial"
-
-#: ../inc/accesspress-options.php:317
-msgid "Show Social Icon"
-msgstr "Tampilkan Ikon Medsos"
-
-#: ../inc/accesspress-options.php:324
-msgid "Facebook"
-msgstr ""
-
-#: ../inc/accesspress-options.php:329
-msgid "Twitter"
-msgstr ""
-
-#: ../inc/accesspress-options.php:334
-msgid "Google Plus"
-msgstr ""
-
-#: ../inc/accesspress-options.php:339
-msgid "Youtube"
-msgstr ""
-
-#: ../inc/accesspress-options.php:344
-msgid "Pinterest"
-msgstr ""
-
-#: ../inc/accesspress-options.php:349
-msgid "Linkedin"
-msgstr ""
-
-#: ../inc/accesspress-options.php:354
-msgid "Fickr"
-msgstr ""
-
-#: ../inc/accesspress-options.php:359
-msgid "Vimeo"
-msgstr ""
-
-#: ../inc/accesspress-options.php:364
-msgid "Instagram"
-msgstr ""
-
-#: ../inc/accesspress-options.php:369
-msgid "Skype"
-msgstr ""
-
-#: ../inc/accesspress-options.php:374
-msgid "Tools"
-msgstr "Perkakas"
-
-#: ../inc/accesspress-options.php:378
-msgid "Custom CSS"
-msgstr "CSS Kustom"
-
-#: ../inc/accesspress-options.php:381
-msgid "Put your custom CSS here"
-msgstr "Simpan CSS kustom Anda disini"
-
-#: ../inc/accesspress-options.php:384
-msgid "About"
-msgstr "Tentang"
-
-#: ../inc/accesspress-options.php:388
-msgid "About AccessPress Themes"
-msgstr "Tentang tema AccessPress"
-
-#: ../inc/accesspress-plugin-activation.php:347
-#, php-format
-msgid ""
-"Sorry, but you do not have the correct permissions to install the %1$s "
-"plugin."
-msgid_plural ""
-"Sorry, but you do not have the correct permissions to install the %1$s "
-"plugins."
-msgstr[0] ""
-"Maaf, tapi Anda tidak memiliki izin yang benar untuk menginstal plugin %1$s."
-
-#: ../inc/accesspress-plugin-activation.php:357
-#, php-format
-msgid "There is an update available for: %1$s."
-msgid_plural "There are updates available for the following plugins: %1$s."
-msgstr[0] "Ada update yang tersedia untuk: %1$s."
-
-#: ../inc/accesspress-plugin-activation.php:362
-#, php-format
-msgid ""
-"Sorry, but you do not have the correct permissions to update the %1$s plugin."
-msgid_plural ""
-"Sorry, but you do not have the correct permissions to update the %1$s "
-"plugins."
-msgstr[0] ""
-"Maaf, tapi Anda tidak memiliki izin yang tepat untuk memperbarui plugin %1$s."
-
-#: ../inc/accesspress-plugin-activation.php:377
-#, php-format
-msgid ""
-"Sorry, but you do not have the correct permissions to activate the %1$s "
-"plugin."
-msgid_plural ""
-"Sorry, but you do not have the correct permissions to activate the %1$s "
-"plugins."
-msgstr[0] ""
-"Maaf, tapi Anda tidak memiliki izin yang tepat untuk mengaktifkan plugin "
-"%1$s."
-
-#: ../inc/accesspress-plugin-activation.php:387
-msgid "Begin updating plugin"
-msgid_plural "Begin updating plugins"
-msgstr[0] "Mulai memperbarui plugin"
-
-#: ../inc/accesspress-plugin-activation.php:398
-msgid "Return to the dashboard"
-msgstr "Kembali ke dasbor"
-
-#: ../inc/accesspress-plugin-activation.php:400 ../inc/accesspress-plugin-
-#: activation.php:2836
-msgid "The following plugin was activated successfully:"
-msgid_plural "The following plugins were activated successfully:"
-msgstr[0] "Plugin berikut ini berhasil diaktifkan:"
-
-#: ../inc/accesspress-plugin-activation.php:401
-#, php-format
-msgid "No action taken. Plugin %1$s was already active."
-msgstr "Tidak ada tindakan yang diambil. Plugin %1$s sudah aktif."
-
-#: ../inc/accesspress-plugin-activation.php:402
-#, php-format
-msgid ""
-"Plugin not activated. A higher version of %s is needed for this theme. "
-"Please update the plugin."
-msgstr ""
-"Plugin tidak diaktifkan. Sebuah versi yang lebih tinggi dari %s diperlukan "
-"untuk tema ini. Silakan update plugin."
-
-#: ../inc/accesspress-plugin-activation.php:403
-#, php-format
-msgid "All plugins installed and activated successfully. %1$s"
-msgstr "Semua plugin berhasil dipasang dan diaktifkan. %1$s"
-
-#: ../inc/accesspress-plugin-activation.php:404
-msgid "Dismiss this notice"
-msgstr "Tutup pemberitahuan"
-
-#: ../inc/accesspress-plugin-activation.php:405
-msgid "Please contact the administrator of this site for help."
-msgstr "Silahkan hubungi administrator situs ini untuk bantuan."
-
-#: ../inc/accesspress-plugin-activation.php:524
-msgid "This plugin needs to be updated to be compatible with your theme."
-msgstr "Plugin ini perlu diperbarui agar kompatibel dengan tema Anda."
-
-#: ../inc/accesspress-plugin-activation.php:525
-msgid "Update Required"
-msgstr "Diperlukan Pembaruan"
-
-#: ../inc/accesspress-plugin-activation.php:639
-msgid "Set the parent_slug config variable instead."
-msgstr "Atur variabel konfigurasi parent_slug."
-
-#: ../inc/accesspress-plugin-activation.php:832 ../inc/accesspress-plugin-
-#: activation.php:3442
-msgid "Return to the Dashboard"
-msgstr "Kembali ke Dasbor"
-
-#: ../inc/accesspress-plugin-activation.php:939
-msgid ""
-"The remote plugin package does not contain a folder with the desired slug "
-"and renaming did not work."
-msgstr ""
-"Paket plugin remote tidak berisi folder dengan slug yang diinginkan dan "
-"penggantian nama tidak bekerja."
-
-#: ../inc/accesspress-plugin-activation.php:939 ../inc/accesspress-plugin-
-#: activation.php:942
-msgid ""
-"Please contact the plugin provider and ask them to package their plugin "
-"according to the WordPress guidelines."
-msgstr ""
-"Silakan hubungi penyedia Plugin dan meminta mereka untuk paket Plugin mereka "
-"sesuai dengan pedoman WordPress."
-
-#: ../inc/accesspress-plugin-activation.php:942
-msgid ""
-"The remote plugin package consists of more than one file, but the files are "
-"not packaged in a folder."
-msgstr ""
-"Paket plugin remote terdiri dari lebih dari satu file, tetapi file tidak "
-"dikemas dalam sebuah folder."
-
-#: ../inc/accesspress-plugin-activation.php:1120 ../inc/accesspress-plugin-
-#: activation.php:2832
-msgctxt "plugin A *and* plugin B"
-msgid "and"
-msgstr "dan"
-
-#: ../inc/accesspress-plugin-activation.php:1885
-#, php-format
-msgctxt "%s = version number"
-msgid "TGMPA v%s"
-msgstr ""
-
-#: ../inc/accesspress-plugin-activation.php:2171
-msgid "Required"
-msgstr "Diperlukan"
-
-#: ../inc/accesspress-plugin-activation.php:2174
-msgid "Recommended"
-msgstr "Direkomendasikan"
-
-#: ../inc/accesspress-plugin-activation.php:2190
-msgid "WordPress Repository"
-msgstr "Repositori WordPress"
-
-#: ../inc/accesspress-plugin-activation.php:2193
-msgid "External Source"
-msgstr "Sumber Eksternal"
-
-#: ../inc/accesspress-plugin-activation.php:2196
-msgid "Pre-Packaged"
-msgstr "Pra-Kemas"
-
-#: ../inc/accesspress-plugin-activation.php:2213
-msgid "Not Installed"
-msgstr "Tidak Terinstall"
-
-#: ../inc/accesspress-plugin-activation.php:2217
-msgid "Installed But Not Activated"
-msgstr "Terpasang Tapi Tidak Aktif"
-
-#: ../inc/accesspress-plugin-activation.php:2219
-msgid "Active"
-msgstr "Aktif"
-
-#: ../inc/accesspress-plugin-activation.php:2225
-msgid "Required Update not Available"
-msgstr "Update yang Diperlukan tidak tersedia"
-
-#: ../inc/accesspress-plugin-activation.php:2228
-msgid "Requires Update"
-msgstr "Membutuhkan Pembaruan"
-
-#: ../inc/accesspress-plugin-activation.php:2231
-msgid "Update recommended"
-msgstr "Direkomendasikan update"
-
-#: ../inc/accesspress-plugin-activation.php:2239
-#, php-format
-msgctxt "%1$s = install status, %2$s = update status"
-msgid "%1$s, %2$s"
-msgstr ""
-
-#: ../inc/accesspress-plugin-activation.php:2284
-#, php-format
-msgctxt "plugins"
-msgid "All <span class=\"count\">(%s)</span>"
-msgid_plural "All <span class=\"count\">(%s)</span>"
-msgstr[0] "Semua <span class=\"count\">(%s)</span>"
-
-#: ../inc/accesspress-plugin-activation.php:2287
-#, php-format
-msgid "To Install <span class=\"count\">(%s)</span>"
-msgid_plural "To Install <span class=\"count\">(%s)</span>"
-msgstr[0] "Untuk Menginstal <span class=\"count\">(%s)</span>"
-
-#: ../inc/accesspress-plugin-activation.php:2290
-#, php-format
-msgid "Update Available <span class=\"count\">(%s)</span>"
-msgid_plural "Update Available <span class=\"count\">(%s)</span>"
-msgstr[0] "Tersedia Pembaruan <span class=\"count\">(%s)</span>"
-
-#: ../inc/accesspress-plugin-activation.php:2293
-#, php-format
-msgid "To Activate <span class=\"count\">(%s)</span>"
-msgid_plural "To Activate <span class=\"count\">(%s)</span>"
-msgstr[0] "Untuk Mengaktifkan <span class=\"count\">(%s)</span>"
-
-#: ../inc/accesspress-plugin-activation.php:2375
-msgctxt "as in: \"version nr unknown\""
-msgid "unknown"
-msgstr "Tidak diketahui"
-
-#: ../inc/accesspress-plugin-activation.php:2383
-msgid "Installed version:"
-msgstr "Versi terpasang:"
-
-#: ../inc/accesspress-plugin-activation.php:2391
-msgid "Minimum required version:"
-msgstr "Minimum versi yang diperlukan:"
-
-#: ../inc/accesspress-plugin-activation.php:2403
-msgid "Available version:"
-msgstr "Versi tersedia:"
-
-#: ../inc/accesspress-plugin-activation.php:2426
-#, php-format
-msgid ""
-"No plugins to install, update or activate. <a href=\"%1$s\">Return to the "
-"Dashboard</a>"
-msgstr ""
-"Tidak ada plugin untuk menginstal, update atau mengaktifkan. <a href=\"%1$s"
-"\">Kembali ke Dashboard</a>"
-
-#: ../inc/accesspress-plugin-activation.php:2440
-msgid "Plugin"
-msgstr ""
-
-#: ../inc/accesspress-plugin-activation.php:2441
-msgid "Source"
-msgstr "Sumber"
-
-#: ../inc/accesspress-plugin-activation.php:2442
-msgid "Type"
-msgstr "Tipe"
-
-#: ../inc/accesspress-plugin-activation.php:2446
-msgid "Version"
-msgstr "Versi"
-
-#: ../inc/accesspress-plugin-activation.php:2447
-msgid "Status"
-msgstr ""
-
-#: ../inc/accesspress-plugin-activation.php:2495
-#, php-format
-msgctxt "%2$s = plugin name in screen reader markup"
-msgid "Install %2$s"
-msgstr "Instal %2$s"
-
-#: ../inc/accesspress-plugin-activation.php:2499
-#, php-format
-msgctxt "%2$s = plugin name in screen reader markup"
-msgid "Update %2$s"
-msgstr "Perbarui %2$s"
-
-#: ../inc/accesspress-plugin-activation.php:2504
-#, php-format
-msgctxt "%2$s = plugin name in screen reader markup"
-msgid "Activate %2$s"
-msgstr "Aktifkan %2$s"
-
-#: ../inc/accesspress-plugin-activation.php:2574
-msgid "Upgrade message from the plugin author:"
-msgstr "Upgrade pesan dari penulis Plugin:"
-
-#: ../inc/accesspress-plugin-activation.php:2607
-msgid "Install"
-msgstr "Instal"
-
-#: ../inc/accesspress-plugin-activation.php:2613
-msgid "Update"
-msgstr ""
-
-#: ../inc/accesspress-plugin-activation.php:2616
-msgid "Activate"
-msgstr "Aktifkan"
-
-#: ../inc/accesspress-plugin-activation.php:2647
-msgid "No plugins were selected to be installed. No action taken."
-msgstr ""
-"Tidak ada plugin yang dipilih untuk diinstal. Tidak ada tindakan yang "
-"diambil."
-
-#: ../inc/accesspress-plugin-activation.php:2649
-msgid "No plugins were selected to be updated. No action taken."
-msgstr ""
-"Tidak ada plugin dipilih untuk diperbarui. Tidak ada tindakan yang diambil."
-
-#: ../inc/accesspress-plugin-activation.php:2685
-msgid "No plugins are available to be installed at this time."
-msgstr "Tidak ada plugin yang tersedia untuk di-instal saat ini."
-
-#: ../inc/accesspress-plugin-activation.php:2687
-msgid "No plugins are available to be updated at this time."
-msgstr "Tidak ada plugin tersedia untuk diperbarui saat ini."
-
-#: ../inc/accesspress-plugin-activation.php:2792
-msgid "No plugins were selected to be activated. No action taken."
-msgstr ""
-"Tidak ada plugin dipilih untuk diaktifkan. Tidak ada tindakan yang diambil."
-
-#: ../inc/accesspress-plugin-activation.php:2818
-msgid "No plugins are available to be activated at this time."
-msgstr "Tidak ada plugin yang tersedia untuk di-aktifkan saat ini."
-
-#: ../inc/accesspress-plugin-activation.php:3032
-msgid "Plugin activation failed."
-msgstr "Aktivasi plugin gagal."
-
-#: ../inc/accesspress-plugin-activation.php:3366
-#, php-format
-msgid "Updating Plugin %1$s (%2$d/%3$d)"
-msgstr "Mengupdate Plugin %1$s (%2$d/%3$d)"
-
-#: ../inc/accesspress-plugin-activation.php:3368
-#, php-format
-msgid "An error occurred while installing %1$s: <strong>%2$s</strong>."
-msgstr "Terjadi kesalahan saat memasang %1$s: <strong>%2$s</strong>."
-
-#: ../inc/accesspress-plugin-activation.php:3369
-#, php-format
-msgid "The installation of %1$s failed."
-msgstr "Instalasi %1$s gagal."
-
-#: ../inc/accesspress-plugin-activation.php:3373
-msgid ""
-"The installation and activation process is starting. This process may take a "
-"while on some hosts, so please be patient."
-msgstr ""
-"Proses penginstalan dan pengaktifan dimulai. Proses ini mungkin memakan "
-"waktu beberapa lama pada beberapa hosting, harap sabar."
-
-#: ../inc/accesspress-plugin-activation.php:3374
-#, php-format
-msgid "%1$s installed and activated successfully."
-msgstr "%1$s terpasang dan telah berhasil diaktifkan."
-
-#: ../inc/accesspress-plugin-activation.php:3374 ../inc/accesspress-plugin-
-#: activation.php:3380
-msgid "Show Details"
-msgstr "Tampilkan Rincian"
-
-#: ../inc/accesspress-plugin-activation.php:3374 ../inc/accesspress-plugin-
-#: activation.php:3380
-msgid "Hide Details"
-msgstr "Sembunyikan Rincian"
-
-#: ../inc/accesspress-plugin-activation.php:3375
-msgid "All installations and activations have been completed."
-msgstr "Semua pemasangan dan aktivasi telah selesai."
-
-#: ../inc/accesspress-plugin-activation.php:3376
-#, php-format
-msgid "Installing and Activating Plugin %1$s (%2$d/%3$d)"
-msgstr "Memasang dan Mengaktifkan Plugin %1$s (%2$d/%3$d)"
-
-#: ../inc/accesspress-plugin-activation.php:3379
-msgid ""
-"The installation process is starting. This process may take a while on some "
-"hosts, so please be patient."
-msgstr ""
-"Proses pemasangan sedang berlangsung. Pada beberapa host proses ini mungkin "
-"memakan waktu yang cukup lama, harap sabar."
-
-#: ../inc/accesspress-plugin-activation.php:3380
-#, php-format
-msgid "%1$s installed successfully."
-msgstr "%1$s behasil dipasang."
-
-#: ../inc/accesspress-plugin-activation.php:3381
-msgid "All installations have been completed."
-msgstr "Semua pemasangan telah selesai."
-
-#: ../inc/accesspress-plugin-activation.php:3382
-#, php-format
-msgid "Installing Plugin %1$s (%2$d/%3$d)"
-msgstr "Memasang Plugin %1$s (%2$d/%3$d)"
-
-#: ../inc/ajax.php:15
-msgid "Page Title:"
-msgstr "Judul Halaman:"
-
-#: ../inc/ajax.php:19
-#: ../inc/options-framework/includes/class-options-interface. php:426
-msgid "Page"
-msgstr "Laman"
-
-#: ../inc/ajax.php:21
-msgid "Select a page:"
-msgstr "Pilih Halaman:"
-
-#: ../inc/ajax.php:29
-#: ../inc/options-framework/includes/class-options-interface. php:442
-msgid "Font Color"
-msgstr "Warna huruf"
-
-#: ../inc/ajax.php:34
-#: ../inc/options-framework/includes/class-options-interface. php:453
-msgid "Background Color"
-msgstr "Warna Background"
-
-#: ../inc/ajax.php:39
-#: ../inc/options-framework/includes/class-options-interface. php:459
-msgid "Layout"
-msgstr ""
-
-#: ../inc/ajax.php:54
-#: ../inc/options-framework/includes/class-options-interface. php:471
-msgid "Category"
-msgstr "Kategori"
-
-#: ../inc/ajax.php:56
-msgid "Select a Category:"
-msgstr "Pilih Kategori:"
-
-#: ../inc/ajax.php:64
-#: ../inc/options-framework/includes/class-options-interface. php:486
-msgid "Background Image"
-msgstr "Gambar Latar Belakang"
-
-#: ../inc/ajax.php:72
-#: ../inc/options-framework/includes/class-options-interface. php:495
-msgid "Background Settings"
-msgstr "Pengaturan latar belakang"
-
-#: ../inc/ajax.php:77 ../inc/options-framework/includes/class-options-
-#: sanitization.php:415
-msgid "No Repeat"
-msgstr "Tidak Ulangi"
-
-#: ../inc/ajax.php:78 ../inc/options-framework/includes/class-options-
-#: sanitization.php:416
-msgid "Repeat Horizontally"
-msgstr "Ulangi Horizontal"
-
-#: ../inc/ajax.php:79 ../inc/options-framework/includes/class-options-
-#: sanitization.php:417
-msgid "Repeat Vertically"
-msgstr "Ulangi Vertikal"
-
-#: ../inc/ajax.php:80 ../inc/options-framework/includes/class-options-
-#: sanitization.php:418
-msgid "Repeat All"
-msgstr "Ulangi semua"
-
-#: ../inc/ajax.php:84 ../inc/options-framework/includes/class-options-
-#: sanitization.php:430
-msgid "Top Left"
-msgstr "Kiri Atas"
-
-#: ../inc/ajax.php:85 ../inc/options-framework/includes/class-options-
-#: sanitization.php:431
-msgid "Top Center"
-msgstr "Tengah Atas"
-
-#: ../inc/ajax.php:86 ../inc/options-framework/includes/class-options-
-#: sanitization.php:432
-msgid "Top Right"
-msgstr "Kanan Atas"
-
-#: ../inc/ajax.php:87 ../inc/options-framework/includes/class-options-
-#: sanitization.php:433
-msgid "Middle Left"
-msgstr "Kiri Tengah"
-
-#: ../inc/ajax.php:88 ../inc/options-framework/includes/class-options-
-#: sanitization.php:434
-msgid "Middle Center"
-msgstr "Tengan Tengah"
-
-#: ../inc/ajax.php:89 ../inc/options-framework/includes/class-options-
-#: sanitization.php:435
-msgid "Middle Right"
-msgstr "Kanan Tengah"
-
-#: ../inc/ajax.php:90 ../inc/options-framework/includes/class-options-
-#: sanitization.php:436
-msgid "Bottom Left"
-msgstr "Kiri Bawah"
-
-#: ../inc/ajax.php:91 ../inc/options-framework/includes/class-options-
-#: sanitization.php:437
-msgid "Bottom Center"
-msgstr "Tengah Bawah"
-
-#: ../inc/ajax.php:92 ../inc/options-framework/includes/class-options-
-#: sanitization.php:438
-msgid "Bottom Right"
-msgstr "Kanan Bawah"
-
-#: ../inc/ajax.php:96 ../inc/options-framework/includes/class-options-
-#: sanitization.php:450
-msgid "Scroll Normally"
-msgstr "Gulir Normal"
-
-#: ../inc/ajax.php:97 ../inc/options-framework/includes/class-options-
-#: sanitization.php:451
-msgid "Fixed in Place"
-msgstr "Tetap di tempat"
-
-#: ../inc/ajax.php:101 ../inc/options-framework/includes/class-options-
-#: sanitization.php:463
-msgid "Auto"
-msgstr "Otomatis"
-
-#: ../inc/ajax.php:102 ../inc/options-framework/includes/class-options-
-#: sanitization.php:464
-msgid "Cover"
-msgstr ""
-
-#: ../inc/ajax.php:103 ../inc/options-framework/includes/class-options-
-#: sanitization.php:465
-msgid "Contain"
-msgstr "Berisi"
-
-#: ../inc/ajax.php:109
-#: ../inc/options-framework/includes/class-options-interface. php:538
-msgid "Overlay"
-msgstr ""
-
-#: ../inc/ajax.php:119
-#: ../inc/options-framework/includes/class-options-interface. php:549
-#: ../inc/options-framework/includes/class-options-media-uploader.php:66 .
-#: inc/options-framework/includes/class-options-media-uploader.php:118
-msgid "Remove"
-msgstr "Singkirkan"
-
-#: ../inc/template-tags.php:21
-msgid "Posts navigation"
-msgstr "Navigasi Post"
-
-#: ../inc/template-tags.php:25
-msgid "<i class=\"fa fa-hand-o-left\"></i> Older Posts"
-msgstr "<i class=\"fa fa-hand-o-left\"></i> Post Jadul"
-
-#: ../inc/template-tags.php:29
-msgid "Newer Posts <i class=\"fa fa-hand-o-right\"></i>"
-msgstr "Post Baru <i class=\"fa fa-hand-o-right\"></i>"
-
-#: ../inc/template-tags.php:52
-msgid "Post navigation"
-msgstr "Navigasi post"
-
-#: ../inc/template-tags.php:55
-msgctxt "Previous post link"
-msgid "<i class=\"fa fa-hand-o-left\"></i>%title"
-msgstr ""
-
-#: ../inc/template-tags.php:56
-msgctxt "Next post link"
-msgid "%title<i class=\"fa fa-hand-o-right\"></i>"
-msgstr ""
-
-#: ../inc/template-tags.php:85
-#, php-format
-msgctxt "post author"
-msgid "By %s"
-msgstr "Oleh %s"
-
-#: ../inc/options-framework/includes/class-options-framework-admin.php:78
-msgid "Theme Options"
-msgstr "Pengaturan Tema"
-
-#: ../inc/options-framework/includes/class-options-framework-admin.php:173
-msgid "AccessPress Lite"
-msgstr ""
-
-#: ../inc/options-framework/includes/class-options-framework-admin.php:177
-msgid "Demo"
-msgstr ""
-
-#: ../inc/options-framework/includes/class-options-framework-admin.php:178
-msgid "Documentation/Video Tutorial"
-msgstr "Dokumentasi/Video Tutorial"
-
-#: ../inc/options-framework/includes/class-options-framework-admin.php:195
-msgid "Save Options"
-msgstr "Simpan Pengaturan"
-
-#: ../inc/options-framework/includes/class-options-framework-admin.php:196
-msgid "Restore Defaults"
-msgstr "Pulihkan Default"
-
-#: ../inc/options-framework/includes/class-options-framework-admin.php:196
-msgid "Click OK to reset. Any theme settings will be lost!"
-msgstr "Klik OK untuk me-reset. Pengaturan tema akan hilang!"
-
-#: ../inc/options-framework/includes/class-options-framework-admin.php:203
-msgid "Upgrade to Parallax Pro"
-msgstr "Upgrade ke Parallax Pro"
-
-#: ../inc/options-framework/includes/class-options-framework-admin.php:210
-#, php-format
-msgid ""
-"Any question!! Click <a href=\"%s\" target=\"_blank\">here</a> for Live Chat."
-msgstr ""
-"Pertanyaan!! Klik <a href=\"%s\" target=\"_blank\">here</a> untuk Live Chat"
-
-#: ../inc/options-framework/includes/class-options-framework-admin.php:212
-msgid "Pro Features"
-msgstr "Fitur Pro"
-
-#: ../inc/options-framework/includes/class-options-framework-admin.php:247
-msgid "Default options restored."
-msgstr "Pilihan default dipulihkan."
-
-#: ../inc/options-framework/includes/class-options-framework-admin.php:301
-msgid "Options saved."
-msgstr "Pengaturan berhasil di save."
-
-#: ../inc/options-framework/includes/class-options-interface.php:422
-msgid "Page Title: "
-msgstr "Judul Halaman:"
-
-#: ../inc/options-framework/includes/class-options-interface.php:558
-msgid "Add New Section"
-msgstr "Tambah Bagian Baru"
-
-#: ../inc/options-framework/includes/class-options-media-uploader.php:61
-msgid "No file chosen"
-msgstr "Tidak ada berkas dipilih"
-
-#: ../inc/options-framework/includes/class-options-media-uploader.php:69
-msgid "Upgrade your version of WordPress for full media support."
-msgstr "Perbarui versi Wordpress Anda untuk support media penuh."
-
-#: ../inc/options-framework/includes/class-options-media-uploader.php:93
-msgid "View File"
-msgstr "Lihat file"
-
-#: ../inc/options-framework/includes/class-options-sanitization.php:574
-msgid "Normal"
-msgstr ""
-
-#: ../inc/options-framework/includes/class-options-sanitization.php:575
-msgid "Italic"
-msgstr ""
-
-#: ../inc/options-framework/includes/class-options-sanitization.php:576
-msgid "Bold"
-msgstr ""
-
-#: ../inc/options-framework/includes/class-options-sanitization.php:577
-msgid "Bold Italic"
-msgstr ""
-
-#: ../layouts/googlemap-section.php:10
-msgid "Map"
-msgstr "Peta"
-
-#. Name of the theme
-msgid "AccessPress Parallax"
-msgstr ""
-
-#. Theme URI of the theme
-msgid "https://accesspressthemes.com/wordpress-themes/accesspress-parallax/"
-msgstr ""
-
-#. Description of the theme
-msgid ""
-"AccessPress Parallax is a beautiful WordPress theme with Parallax design. "
-"Parallax design has become popular and is being adopted because 3D effects "
-"are possible with it, you can add some sphere to your product, it is the "
-"best way of storytelling, you can draw your visitors in, it is interactive, "
-"engaging, makes your visitors curious, fun, surprise, effective to trigger "
-"action, invite your visitors in great Call to Action, great conversion rates "
-"and many more. This is probably the most beautiful, feature rich and "
-"complete free WordPress parallax theme with features like: fully responsive, "
-"advance theme option panel, featured slider, advance post settings, services/"
-"team/blog/portfolio/testimonial layout, Google map integration, custom logo/"
-"fav icon, call to action, CSS animation, SEO friendly, translation ready, "
-"RTL support, custom CSS/JS and more! Demo: http://accesspressthemes.com/"
-"accesspress-parallax/ Support forum:https://accesspressthemes.com/support/ "
-"Pro version:https://accesspressthemes.com/wordpress-themes/accesspress-"
-"parallax-pro/"
-msgstr ""
-
-#. Author URI of the theme
-msgid "https://accesspressthemes.com/"
-msgstr ""
diff --git a/languages/readme.txt b/languages/readme.txt
deleted file mode 100644 (file)
index 8f7ca6b..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-Place your theme language files in this directory.
-
-Please visit the following links to learn more about translating WordPress themes:
-
-https://make.wordpress.org/polyglots/handbook/
-http://codex.wordpress.org/Function_Reference/load_theme_textdomain
\ No newline at end of file
diff --git a/languages/ru_RU.mo b/languages/ru_RU.mo
deleted file mode 100644 (file)
index f24835f..0000000
Binary files a/languages/ru_RU.mo and /dev/null differ
diff --git a/languages/ru_RU.po b/languages/ru_RU.po
deleted file mode 100644 (file)
index 34d1e60..0000000
+++ /dev/null
@@ -1,1279 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: AccessPress Parallax\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-12-30 16:28+0545\n"
-"PO-Revision-Date: Mon Apr 06 2015 12:22:50 GMT+0545 (Nepal Standard Time)\n"
-"Last-Translator: admin <pra@gmail.com>\n"
-"Language-Team: AccessPress Themes <info@accesspressthemes.com>\n"
-"Language: Russian\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10 >= 2 && "
-"n%10<=4 &&(n%100<10||n%100 >= 20)? 1 : 2)\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Poedit-SourceCharset: utf-8\n"
-"X-Generator: Loco - https://localise.biz/\n"
-"X-Poedit-Language: Russian\n"
-"X-Poedit-Country: RUSSIA\n"
-"X-Poedit-KeywordsList: _:1;gettext:1;dgettext:2;ngettext:1,2;dngettext:2,3;"
-"__:1;_e:1;_c:1;_n:1,2;_n_noop:1,2;_nc:1,2;__ngettext:1,2;__ngettext_noop:1,2;"
-"_x:1,2c;_ex:1,2c;_nx:1,2,4c;_nx_noop:1,2,3c;_n_js:1,2;_nx_js:1,2,3c;"
-"esc_attr__:1;esc_html__:1;esc_attr_e:1;esc_html_e:1;esc_attr_x:1,2c;"
-"esc_html_x:1,2c;comments_number_link:2,3;t:1;st:1;trans:1;transChoice:1,2\n"
-"X-Poedit-Basepath: ../\n"
-"X-Poedit-Bookmarks: \n"
-"X-Poedit-SearchPath-0: .\n"
-"X-Textdomain-Support: yes\n"
-"X-Loco-Target-Locale: ru_RU"
-
-#: ../404.php:15
-msgid "Oops! That page can&rsquo;t be found."
-msgstr "Ой! Не могу найти такой страницы. Странно..."
-
-#: ../archive.php:27
-#, php-format
-msgid "Author: %s"
-msgstr "Редактор: %s"
-
-#: ../archive.php:30
-#, php-format
-msgid "Day: %s"
-msgstr "День: %s"
-
-#: ../archive.php:33
-#, php-format
-msgid "Month: %s"
-msgstr "Месяц: %s"
-
-#: ../archive.php:33
-msgctxt "monthly archives date format"
-msgid "F Y"
-msgstr "F Y"
-
-#: ../archive.php:36
-#, php-format
-msgid "Year: %s"
-msgstr "Год: %s"
-
-#: ../archive.php:36
-msgctxt "yearly archives date format"
-msgid "Y"
-msgstr "Y"
-
-#: ../archive.php:39
-msgid "Asides"
-msgstr "Резервы"
-
-#: ../archive.php:42
-msgid "Galleries"
-msgstr "Галереи"
-
-#: ../archive.php:45
-msgid "Images"
-msgstr "Изображения"
-
-#: ../archive.php:48
-msgid "Videos"
-msgstr "Видео"
-
-#: ../archive.php:51
-msgid "Quotes"
-msgstr "Цитаты"
-
-#: ../archive.php:54
-msgid "Links"
-msgstr "Ссылки"
-
-#: ../archive.php:57
-msgid "Statuses"
-msgstr "Состояния"
-
-#: ../archive.php:60
-msgid "Audios"
-msgstr "Аудио"
-
-#: ../archive.php:63
-msgid "Chats"
-msgstr "Чаты"
-
-#: ../archive.php:66
-msgid "Archives"
-msgstr "Архивы"
-
-#: ../comments.php:28
-#, php-format
-msgid "One thought on &ldquo;%2$s&rdquo;"
-msgid_plural "%1$s thoughts on &ldquo;%2$s&rdquo;"
-msgstr[0] ""
-msgstr[1] ""
-
-#: ../comments.php:35 ../comments.php:52
-msgid "Comment navigation"
-msgstr "Навигация по комментариям"
-
-#: ../comments.php:36 ../comments.php:53
-msgid "&larr; Older Comments"
-msgstr "&larr; Предыдущий комментарий"
-
-#: ../comments.php:37 ../comments.php:54
-msgid "Newer Comments &rarr;"
-msgstr "Следующий комментарий &rarr;"
-
-#: ../comments.php:64
-msgid "Comments are closed."
-msgstr "Комментарии не доступны."
-
-#: ../content-none.php:13
-msgid "Nothing Found"
-msgstr "Ничего не найдено"
-
-#: ../content-none.php:19
-#, php-format
-msgid "Ready to publish your first post? <a href=\"%1$s\">Get started here</a>."
-msgstr "Готовы опубликовать свой первый пост? <a href=\"%1$s\">Начни отсюда</a>."
-
-#: ../content-none.php:23
-msgid ""
-"Sorry, but nothing matched your search terms. Please try again with some "
-"different keywords."
-msgstr ""
-"Извините, но ничего не найдено по вашему запросу. Пожалуйста, попробуйте еще "
-"раз с другими ключевыми словами."
-
-#: ../content-none.php:28
-msgid ""
-"It seems we can&rsquo;t find what you&rsquo;re looking for. Perhaps "
-"searching can help."
-msgstr "По все видимости мы не можем найти то, то вы ищите. Постарайтесь еще. "
-
-#: ../content-page.php:18 ../content-single.php:31 ../content.php:35
-msgid "Pages:"
-msgstr "Страницы:"
-
-#: ../content-page.php:24 ../content-search.php:53 ../content-single.php:73
-msgid "Edit"
-msgstr "Редактировать"
-
-#. translators: used between list items, there is a space after the comma
-#: ../content-search.php:30 ../content-search.php:40 ../content-single.php:41 ..
-#: content-single.php:44 ../content.php:45 ../content.php:55
-msgid ", "
-msgstr ""
-
-#: ../content-search.php:34
-#, php-format
-msgid "Posted in %1$s"
-msgstr "Опубликованно в %1$s"
-
-#: ../content-search.php:44
-#, php-format
-msgid "Tagged %1$s"
-msgstr "Те: %1$s"
-
-#: ../content-search.php:50
-msgid "Leave a comment"
-msgstr "Комментировать"
-
-#: ../content-search.php:50
-msgid "1 Comment"
-msgstr "1 Комментарий"
-
-#: ../content-search.php:50
-msgid "% Comments"
-msgstr "% Комментария"
-
-#: ../content-single.php:49
-#, php-format
-msgid ""
-"This entry was tagged %2$s. Bookmark the <a href=\"%3$s\" "
-"rel=\"bookmark\">permalink</a>."
-msgstr ""
-"Эта запись была отмечена тегом %2$s. Закладка <a href=\"%3$s\" "
-"rel=\"bookmark\">ссылка</a>."
-
-#: ../content-single.php:51
-#, php-format
-msgid "Bookmark the <a href=\"%3$s\" rel=\"bookmark\">permalink</a>."
-msgstr "Закладка <a href=\"%3$s\" rel=\"bookmark\">ссылка</a>."
-
-#: ../content-single.php:57
-#, php-format
-msgid ""
-"This entry was posted in %1$s and tagged %2$s. Bookmark the <a href=\"%3$s\" "
-"rel=\"bookmark\">permalink</a>."
-msgstr ""
-"Эта запись была опубликована в %1$s и отмечена тегом %2$s. Закладка <a "
-"href=\"%3$s\" rel=\"bookmark\">ссылка</a>."
-
-#: ../content-single.php:59
-#, php-format
-msgid ""
-"This entry was posted in %1$s. Bookmark the <a href=\"%3$s\" "
-"rel=\"bookmark\">permalink</a>."
-msgstr ""
-"Запись опубликована в %1$s. Закладка <a href=\"%3$s\" "
-"rel=\"bookmark\">ссылка</a>."
-
-#: ../content.php:32
-msgid "Continue reading <span class=\"meta-nav\">&rarr;</span>"
-msgstr "Читать дальше <span class=\"meta-nav\">&rarr;</span>"
-
-#: ../content.php:49
-#, php-format
-msgid "<i class=\"fa fa-folder-open\"></i>Posted in %1$s"
-msgstr "<i class=\"fa fa-folder-open\"></i>Опубликованно в %1$s"
-
-#: ../content.php:59
-#, php-format
-msgid "<i class=\"fa fa-tags\"></i>Tagged %1$s"
-msgstr "<i class=\"fa fa-tags\"></i>Тег: %1$s"
-
-#: ../content.php:65
-msgid "<i class=\"fa fa-comments\"></i>Leave a comment"
-msgstr "<i class=\"fa fa-comments\"></i>Оставить комментарий"
-
-#: ../content.php:65
-msgid "<i class=\"fa fa-comments\"></i>1 Comment"
-msgstr "<i class=\"fa fa-comments\"></i>1 Комментарий"
-
-#: ../content.php:65
-msgid "<i class=\"fa fa-comments\"></i>% Comments"
-msgstr "<i class=\"fa fa-comments\"></i>% Комментария"
-
-#: ../content.php:68
-msgid "<i class=\"fa fa-pencil-square-o\"></i>Edit"
-msgstr "<i class=\"fa fa-pencil-square-o\"></i>Редактировать"
-
-#: ../demo.php:6
-msgid ""
-"Curabitur eget interdum risus. Curabitur dictum, libero ut mattis consequat, "
-"lectus mauris congue risus, et volutpat nulla eros vel arcu."
-msgstr ""
-
-#: ../demo.php:16 ../demo.php:28 ../demo.php:40 ../demo.php:52 ../demo.php:64 ..
-#: demo.php:76 ../demo.php:89
-msgid ""
-"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec iaculis metus "
-"vitae ligula elementum ut luctus lorem facilisis."
-msgstr ""
-
-#: ../demo.php:98
-msgid "Product 11"
-msgstr "Продукт 11"
-
-#: ../demo.php:105
-msgid "Product 10"
-msgstr "Продукт 10"
-
-#: ../demo.php:112
-msgid "Product 9"
-msgstr "Продукт 9"
-
-#: ../demo.php:119
-msgid "Product 8"
-msgstr "Продукт 8"
-
-#: ../demo.php:126
-msgid "Product 7"
-msgstr "Продукт 7"
-
-#: ../demo.php:133
-msgid "Product 6"
-msgstr "Продукт 6"
-
-#: ../demo.php:140
-msgid "Product 5"
-msgstr "Продукт 5"
-
-#: ../demo.php:147
-msgid "Product 4"
-msgstr "Продукт 4"
-
-#: ../demo.php:191
-msgid "Russel Clinton"
-msgstr "Рассел Клинтон"
-
-#: ../demo.php:192
-msgid "Interior Head"
-msgstr ""
-
-#: ../demo.php:193
-msgid ""
-"Duis luctus nisl vel rhoncus rhoncus. Nam vehicula maximus sagittis. Proin "
-"quis lobortis nisi. Etiam luctus auctor urna, a luctus metus blandit in. Nam "
-"quis facilisis nunc, nec scelerisque ligula. Aenean quis lacus bibendum, "
-"lobortis dolor sed, facilisis ipsum. Nunc feugiat augue ac ligula blandit, "
-"id maximus purus molestie.<br /><br />\n"
-"                                Duis luctus nisl vel rhoncus rhoncus. Nam "
-"vehicula maximus sagittis. Proin quis lobortis nisi. Etiam luctus auctor "
-"urna, a luctus metus blandit in. Nam quis facilisis nunc, nec scelerisque "
-"ligula. Aenean quis lacus bibendum, lobortis dolor sed, facilisis ipsum. "
-"Nunc feugiat augue ac ligula blandit, id maximus purus molestie."
-msgstr ""
-
-#: ../demo.php:202
-msgid "Bibo Aurther"
-msgstr ""
-
-#: ../demo.php:203
-msgid "CEO"
-msgstr ""
-
-#: ../demo.php:204
-msgid ""
-"Proin libero odio, ultrices et tincidunt vitae, consequat et sapien. Duis "
-"luctus nisl vel rhoncus rhoncus. Nam vehicula maximus sagittis. Proin quis "
-"lobortis nisi. Etiam luctus auctor urna, a luctus metus blandit in. Nam quis "
-"facilisis nunc, nec scelerisque ligula. Aenean quis lacus bibendum, lobortis "
-"dolor sed, facilisis ipsum. Nunc feugiat augue ac ligula blandit, id maximus "
-"purus molestie.<br /><br />\n"
-"                                Proin libero odio, ultrices et tincidunt "
-"vitae, consequat et sapien. Duis luctus nisl vel rhoncus rhoncus. Nam "
-"vehicula maximus sagittis. Proin quis lobortis nisi. Etiam luctus auctor "
-"urna, a luctus metus blandit in. Nam quis facilisis nunc, nec scelerisque "
-"ligula. Aenean quis lacus bibendum, lobortis dolor sed, facilisis ipsum. "
-"Nunc feugiat augue ac ligula blandit, id maximus purus molestie."
-msgstr ""
-
-#: ../demo.php:213
-msgid "Rusel Misil"
-msgstr ""
-
-#: ../demo.php:214
-msgid "Technician"
-msgstr ""
-
-#: ../demo.php:215
-msgid ""
-"Etiam vestibulum pellentesque nisi, ac scelerisque metus aliquam non. Proin "
-"tincidunt tortor auctor, accumsan arcu id, congue felis. Curabitur vitae "
-"lorem at purus imperdiet commodo quis non sem. Donec magna odio, commodo "
-"eget rhoncus quis, facilisis et dolor.<br /><br />\n"
-"                                Proin libero odio, ultrices et tincidunt "
-"vitae, consequat et sapien. Duis luctus nisl vel rhoncus rhoncus. Nam "
-"vehicula maximus sagittis. Proin quis lobortis nisi. Etiam luctus auctor "
-"urna, a luctus metus blandit in. Nam quis facilisis nunc, nec scelerisque "
-"ligula. Aenean quis lacus bibendum, lobortis dolor sed, facilisis ipsum. "
-"Nunc feugiat augue ac ligula blandit, id maximus purus molestie."
-msgstr ""
-
-#: ../demo.php:224
-msgid "Linda Harley"
-msgstr ""
-
-#: ../demo.php:225 ../demo.php:236
-msgid "Staff"
-msgstr ""
-
-#: ../demo.php:226
-msgid ""
-"Nulla facilisis sapien dui, vel faucibus risus consequat sit amet. Phasellus "
-"vestibulum vestibulum mi quis posuere. Aenean pretium purus ut purus "
-"vehicula dictum. Morbi elementum dignissim aliquet. Nullam et purus et mi "
-"finibus laoreet. Aliquam posuere erat eu lobortis vulputate. Phasellus "
-"pulvinar fringilla turpis in congue. Integer et felis fringilla, elementum "
-"lacus eu, tincidunt purus.<br/><br />\n"
-"                            Nulla facilisis sapien dui, vel faucibus risus "
-"consequat sit amet. Phasellus vestibulum vestibulum mi quis posuere. Aenean "
-"pretium purus ut purus vehicula dictum. Morbi elementum dignissim aliquet. "
-"Nullam et purus et mi finibus laoreet. Aliquam posuere erat eu lobortis "
-"vulputate. Phasellus pulvinar fringilla turpis in congue. Integer et felis "
-"fringilla, elementum lacus eu, tincidunt purus."
-msgstr ""
-
-#: ../demo.php:235
-msgid "John Doe"
-msgstr ""
-
-#: ../demo.php:237
-msgid ""
-"Donec ut neque placerat, euismod enim et, sodales magna. Sed sit amet nunc "
-"ullamcorper, semper nunc mattis, scelerisque urna. Donec dictum mattis "
-"malesuada. Suspendisse vestibulum enim eu nisi auctor, a mollis odio posuere."
-" Ut scelerisque luctus arcu id tempus.<br/><br />\n"
-"                            Nulla facilisis sapien dui, vel faucibus risus "
-"consequat sit amet. Phasellus vestibulum vestibulum mi quis posuere. Aenean "
-"pretium purus ut purus vehicula dictum. Morbi elementum dignissim aliquet. "
-"Nullam et purus et mi finibus laoreet. Aliquam posuere erat eu lobortis "
-"vulputate. Phasellus pulvinar fringilla turpis in congue. Integer et felis "
-"fringilla, elementum lacus eu, tincidunt purus."
-msgstr ""
-
-#: ../demo.php:246
-msgid "Jakson Biber"
-msgstr ""
-
-#: ../demo.php:247
-msgid "Marketing Executive"
-msgstr ""
-
-#: ../demo.php:248
-msgid ""
-"Fusce imperdiet enim eget neque auctor, venenatis feugiat neque dapibus. "
-"Nulla consequat, nunc sed vestibulum semper, nibh velit pellentesque lectus, "
-"ac lobortis elit massa hendrerit lacus. Nulla facilisis sapien dui, vel "
-"faucibus risus consequat sit amet. Phasellus vestibulum vestibulum mi quis "
-"posuere.<br/><br />\n"
-"                            Fusce imperdiet enim eget neque auctor, "
-"venenatis feugiat neque dapibus. Nulla consequat, nunc sed vestibulum semper,"
-" nibh velit pellentesque lectus, ac lobortis elit massa hendrerit lacus. "
-"Nulla facilisis sapien dui, vel faucibus risus consequat sit amet. Phasellus "
-"vestibulum vestibulum mi quis posuere."
-msgstr ""
-
-#: ../demo.php:257
-msgid "Jack Peterson"
-msgstr ""
-
-#: ../demo.php:258
-msgid "Sales Executive"
-msgstr ""
-
-#: ../demo.php:259
-msgid ""
-"Donec ut neque placerat, euismod enim et, sodales magna. Sed sit amet nunc "
-"ullamcorper, semper nunc mattis, scelerisque urna. Donec dictum mattis "
-"malesuada. Suspendisse vestibulum enim eu nisi auctor, a mollis odio posuere."
-" Ut scelerisque luctus arcu id tempus.<br/><br />\n"
-"                            Donec ut neque placerat, euismod enim et, "
-"sodales magna. Sed sit amet nunc ullamcorper, semper nunc mattis, "
-"scelerisque urna. Donec dictum mattis malesuada. Suspendisse vestibulum enim "
-"eu nisi auctor, a mollis odio posuere. Ut scelerisque luctus arcu id tempus."
-msgstr ""
-
-#: ../demo.php:275
-msgid "Testimonials"
-msgstr "Цитаты"
-
-#: ../demo.php:281
-msgid ""
-"Thanks for delivering top quality services to your clients. It just takes a "
-"minute to get an answer from you when in difficulties. I use the chat "
-"service and I can say that the AccessPress Themes staff knows how to shorten "
-"the physical distance to its clients.<br />Thanks again for making our "
-"experience with AccessPress Themes the best one online!"
-msgstr ""
-
-#: ../demo.php:283
-msgid "Yanetxys Torreblanca"
-msgstr ""
-
-#: ../demo.php:289
-msgid ""
-"Thank you very much the support team accesspress lite for service, are "
-"really wonderful in their care and in the resolution of the problem. "
-"Congratulations to facebook chat and Junu team."
-msgstr ""
-
-#: ../demo.php:291
-msgid "David Soriano"
-msgstr ""
-
-#: ../demo.php:297
-msgid ""
-"Great Customer service and technical assistance!!!<br />\n"
-"                                The template is really good and nice, "
-"definitely worth going PRO"
-msgstr ""
-
-#: ../demo.php:300
-msgid "Stefano Roganti"
-msgstr ""
-
-#: ../demo.php:315
-msgid "Read our latest blog"
-msgstr ""
-
-#: ../demo.php:324
-msgid "Nulla pretium leo ac congue"
-msgstr ""
-
-#: ../demo.php:325
-msgid "December 26, 2014"
-msgstr ""
-
-#: ../demo.php:326
-msgid ""
-"Nulla pretium leo ac congue molestie. Aliquam ac velit laoreet, consectetur "
-"elit pulvinar, elementum lorem. Duis sed venenatis eros. Vestibulum ante "
-"ipsum primis in faucibus orci luctus et ultrices po... "
-msgstr ""
-
-#: ../demo.php:327 ../demo.php:338 ../demo.php:349
-msgid "Read More"
-msgstr "Читать далее"
-
-#: ../demo.php:335
-msgid "Pellentesque cursus dolor quis"
-msgstr ""
-
-#: ../demo.php:336 ../demo.php:347
-msgid "September 9, 2014"
-msgstr ""
-
-#: ../demo.php:337
-msgid ""
-"Nullam faucibus mi at quam mattis egestas. Ut dapibus lectus at risus "
-"rhoncus finibus. Pellentesque sem risus, suscipit iaculis ex in, rutrum "
-"sodales enim. Vivamus non mauris tortor. Maecenas tellus n... "
-msgstr ""
-
-#: ../demo.php:346
-msgid "Lorem ipsum dolor"
-msgstr ""
-
-#: ../demo.php:348
-msgid ""
-"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod "
-"tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, "
-"quis nostrud exercitation ullamco laboris nisi ut ... "
-msgstr ""
-
-#: ../demo.php:354
-msgid "Read All"
-msgstr "Читать все"
-
-#: ../demo.php:362
-msgid "For News and Updates Subscribe us"
-msgstr "Оформите подписку на новости и обновления "
-
-#: ../demo.php:365
-msgid "Here can be some text as well"
-msgstr "Здесь может быть также немного текста"
-
-#: ../demo.php:366
-msgid "Subscribe Us"
-msgstr "Подпишитесь на нас"
-
-#: ../demo.php:400
-msgid "AccessPress Themes"
-msgstr "Тема AccessPress"
-
-#: ../demo.php:401
-msgid "5th Floor, Mathuri Sadan"
-msgstr ""
-
-#: ../demo.php:402
-msgid "Rabi Bhawan, Kathmandu - Nepal"
-msgstr ""
-
-#: ../demo.php:404
-msgid "General enquiries:"
-msgstr "Общие вопросы:"
-
-#: ../demo.php:405
-msgid "Support:"
-msgstr "Поддержка:"
-
-#: ../demo.php:407
-msgid "Skype: access-keys"
-msgstr ""
-
-#: ../footer.php:53
-msgid "AccessPress Parallax by"
-msgstr ""
-
-#: ../functions.php:63
-msgid "Primary Menu"
-msgstr "Основное меню"
-
-#: ../functions.php:98
-msgid "Sidebar"
-msgstr "Боковая панель"
-
-#: ../functions.php:108
-msgid "Footer One"
-msgstr "Подвал один"
-
-#: ../functions.php:118
-msgid "Footer Two"
-msgstr "Подвал два"
-
-#: ../functions.php:128
-msgid "Footer Three"
-msgstr "Подвал три"
-
-#: ../functions.php:138
-msgid "Footer Four"
-msgstr "Подвал четыри"
-
-#: ../header.php:41
-msgid "Menu"
-msgstr "Меню "
-
-#: ../search.php:16
-#, php-format
-msgid "Search Results for: %s"
-msgstr "Результаты поиска для: %s"
-
-#: ../inc/accesspress-functions.php:64
-#, php-format
-msgid "Page %s"
-msgstr "Страница %s "
-
-#: ../inc/accesspress-options.php:32
-msgid "Fade"
-msgstr "Угасание"
-
-#: ../inc/accesspress-options.php:33
-msgid "Slide Horizontal"
-msgstr "Горизонтальное перекрытие"
-
-#: ../inc/accesspress-options.php:34
-msgid "Slide Vertical"
-msgstr "Вертикальное перекрытие"
-
-#: ../inc/accesspress-options.php:38 ../inc/ajax.php:116 ../inc/options-
-#: framework/includes/class-options-sanitization.php:492
-msgid "Overlay 1"
-msgstr "Наложение 1"
-
-#: ../inc/accesspress-options.php:39 ../inc/ajax.php:117 ../inc/options-
-#: framework/includes/class-options-sanitization.php:493
-msgid "Overlay 2"
-msgstr "Наложение 2"
-
-#: ../inc/accesspress-options.php:40 ../inc/ajax.php:118 ../inc/options-
-#: framework/includes/class-options-sanitization.php:494
-msgid "Overlay 3"
-msgstr "Наложение 3"
-
-#: ../inc/accesspress-options.php:41 ../inc/ajax.php:119 ../inc/options-
-#: framework/includes/class-options-sanitization.php:495
-msgid "Overlay 4"
-msgstr ""
-
-#: ../inc/accesspress-options.php:45 ../inc/ajax.php:45 ../inc/options-
-#: framework/includes/class-options-sanitization.php:471
-msgid "Default Section"
-msgstr "Раздел по умолчанию"
-
-#: ../inc/accesspress-options.php:46 ../inc/ajax.php:46 ../inc/options-
-#: framework/includes/class-options-sanitization.php:472
-msgid "Service Section"
-msgstr "Раздел Услуги"
-
-#: ../inc/accesspress-options.php:47 ../inc/ajax.php:47 ../inc/options-
-#: framework/includes/class-options-sanitization.php:473
-msgid "Team Section"
-msgstr "Раздел Команда"
-
-#: ../inc/accesspress-options.php:48 ../inc/ajax.php:48 ../inc/options-
-#: framework/includes/class-options-sanitization.php:474
-msgid "Portfolio Section"
-msgstr "Раздел Портфолио"
-
-#: ../inc/accesspress-options.php:49 ../inc/ajax.php:49 ../inc/options-
-#: framework/includes/class-options-sanitization.php:475
-msgid "Testimonial Section"
-msgstr "Раздел Отзывы"
-
-#: ../inc/accesspress-options.php:50 ../inc/ajax.php:50 ../inc/options-
-#: framework/includes/class-options-sanitization.php:476
-msgid "Blog Section"
-msgstr "Раздел Блог"
-
-#: ../inc/accesspress-options.php:51 ../inc/ajax.php:51 ../inc/options-
-#: framework/includes/class-options-sanitization.php:477
-msgid "Call to Action Section"
-msgstr "Раздел Сделай Звонок"
-
-#: ../inc/accesspress-options.php:52 ../inc/ajax.php:52 ../inc/options-
-#: framework/includes/class-options-sanitization.php:478
-msgid "Google Map Section"
-msgstr "Раздел Карты Google"
-
-#: ../inc/accesspress-options.php:53 ../inc/ajax.php:53 ../inc/options-
-#: framework/includes/class-options-sanitization.php:479
-msgid "Blank Section"
-msgstr "Раздел Пустой"
-
-#: ../inc/accesspress-options.php:57
-msgid "Yes"
-msgstr "Да"
-
-#: ../inc/accesspress-options.php:58
-msgid "No"
-msgstr "Нет"
-
-#: ../inc/accesspress-options.php:62
-msgid "One"
-msgstr "Один"
-
-#: ../inc/accesspress-options.php:63
-msgid "Two"
-msgstr "Два"
-
-#: ../inc/accesspress-options.php:64
-msgid "Three"
-msgstr "Три"
-
-#: ../inc/accesspress-options.php:65
-msgid "Four"
-msgstr "Четыри"
-
-#: ../inc/accesspress-options.php:66
-msgid "Five"
-msgstr "Пять"
-
-#: ../inc/accesspress-options.php:71
-msgid "French Toast"
-msgstr "Французский тост"
-
-#: ../inc/accesspress-options.php:72
-msgid "Pancake"
-msgstr "Оладь"
-
-#: ../inc/accesspress-options.php:73
-msgid "Omelette"
-msgstr "Омлет"
-
-#: ../inc/accesspress-options.php:74
-msgid "Crepe"
-msgstr "Креп"
-
-#: ../inc/accesspress-options.php:75
-msgid "Waffle"
-msgstr "Вафля"
-
-#: ../inc/accesspress-options.php:97
-msgid ""
-"AccessPress Parallax is a beautiful WordPress theme with Parallax design. "
-"Parallax design has become popular and is being adopted because 3D effects "
-"are possible with it, you can add some sphere to your product, it is the "
-"best way of storytelling, you can draw your visitors in, it is interactive, "
-"engaging, makes your visitors curious, fun, surprise, effective to trigger "
-"action, invite your visitors in great Call to Action, great conversion rates "
-"and many more. This is probably the most beautiful, feature rich and "
-"complete free WordPress parallax theme with features like: fully responsive, "
-"advance theme option panel, featured slider, advance post settings, "
-"services/team/blog/portfolio/testimonial layout, Google map integration, "
-"custom logo/fav icon, call to action, CSS animation, SEO friendly, "
-"translation ready, RTL support, custom CSS/JS and more! "
-msgstr ""
-
-#: ../inc/accesspress-options.php:98
-msgid "- A WordPress Division of Access Keys."
-msgstr "Узнайте подробней"
-
-#: ../inc/accesspress-options.php:102
-msgid "Other products by AccessPressThemes"
-msgstr "Дпугие продукты от AccessPressThemes"
-
-#: ../inc/accesspress-options.php:103
-msgid "Our Themes - "
-msgstr ""
-
-#: ../inc/accesspress-options.php:104
-msgid "Our Plugins - "
-msgstr ""
-
-#: ../inc/accesspress-options.php:108
-msgid "Get in touch"
-msgstr "Оставаться на связи"
-
-#: ../inc/accesspress-options.php:109
-msgid "If you have any question/feedback regarding theme, please post in our forum"
-msgstr ""
-
-#: ../inc/accesspress-options.php:110
-msgid "Forum:"
-msgstr ""
-
-#: ../inc/accesspress-options.php:111
-msgid "For Queries Regading Pro Themes:"
-msgstr ""
-
-#: ../inc/accesspress-options.php:116
-msgid "Get social"
-msgstr "Социальные кнопки"
-
-#: ../inc/accesspress-options.php:118
-msgid ""
-"Get connected with us on social media. Facebook is the best place to find "
-"updates on our themes/plugins:"
-msgstr ""
-"Подключайтесь к нам в социальных сетях. Facebook является лучшим местом для "
-"поиска новостей о наших темах и  плагинах:"
-
-#: ../inc/accesspress-options.php:120
-msgid "Like us on facebook:"
-msgstr "Лайкните нас на Facebooke:"
-
-#: ../inc/accesspress-options.php:154
-msgid "General Settings"
-msgstr "Основные настройки"
-
-#: ../inc/accesspress-options.php:158
-msgid ""
-"Enable Single Page Parallax Home Page - if disabled, will show Blog-"
-"roll/Static-page"
-msgstr ""
-
-#: ../inc/accesspress-options.php:159 ../inc/accesspress-options.php:166 ..
-#: inc/accesspress-options.php:180 ../inc/accesspress-options.php:187 ..
-#: inc/accesspress-options.php:264 ../inc/accesspress-options.php:271 ..
-#: inc/accesspress-options.php:278 ../inc/accesspress-options.php:285 ..
-#: inc/accesspress-options.php:377
-msgid "Check To enable"
-msgstr "Отметить чтобы включить"
-
-#: ../inc/accesspress-options.php:165
-msgid "Enable Single Page Nav(Menu) - if disabled, will show primary menu"
-msgstr ""
-
-#: ../inc/accesspress-options.php:172
-msgid "Home Menu Text - Single Page Nav(Menu)"
-msgstr ""
-
-#: ../inc/accesspress-options.php:179
-msgid ""
-"Enable Animation on scroll - Page Elements will show with some animation "
-"only in home page."
-msgstr ""
-
-#: ../inc/accesspress-options.php:186
-msgid "Enable Responsive"
-msgstr "Включить адаптивность"
-
-#: ../inc/accesspress-options.php:194
-msgid "Upload Logo"
-msgstr "Загрузить Логотип"
-
-#: ../inc/accesspress-options.php:195 ../inc/ajax.php:70 ../inc/options-
-#: framework/includes/class-options-media-uploader.php:66 ../inc/options-
-#: framework/includes/class-options-media-uploader.php:119
-msgid "Upload"
-msgstr "Загрузить"
-
-#: ../inc/accesspress-options.php:199
-msgid "Upload Fav Icon"
-msgstr "Загрузить Favicon"
-
-#: ../inc/accesspress-options.php:205
-msgid "Select Header Layout"
-msgstr ""
-
-#: ../inc/accesspress-options.php:215
-msgid "Google Map"
-msgstr "Карты Goolge"
-
-#: ../inc/accesspress-options.php:216
-#, php-format
-msgid ""
-"To get Values of Latitude and Longitude by Location name, click on <a "
-"href=\"%s\">http://www.latlong.net</a>"
-msgstr ""
-"Чтобы получить значения широты и долготы по названию места, нажмите на <a "
-"href=\"%s\">http://www.latlong.net</a>"
-
-#: ../inc/accesspress-options.php:221
-msgid "Enter the latitude"
-msgstr "Введите широту"
-
-#: ../inc/accesspress-options.php:228
-msgid "Enter the longitude"
-msgstr "Введите долготу"
-
-#: ../inc/accesspress-options.php:235
-msgid "Parallax Sections"
-msgstr ""
-
-#: ../inc/accesspress-options.php:239
-msgid ""
-"<strong>Note: Please make a new page before you create a section. Each "
-"Section should have unique Page.</strong>"
-msgstr ""
-
-#: ../inc/accesspress-options.php:259
-msgid "Post Settings"
-msgstr "Настройки записей"
-
-#: ../inc/accesspress-options.php:263
-msgid "Show Posted Date"
-msgstr "Показывать дату публикации"
-
-#: ../inc/accesspress-options.php:270
-msgid "Show Post Author"
-msgstr "Показывать автора записи"
-
-#: ../inc/accesspress-options.php:277
-msgid "Show Post Footer text"
-msgstr "Показывать текст под записью"
-
-#: ../inc/accesspress-options.php:284
-msgid "Show Prev Next Pagination"
-msgstr "Показывать \\\"Вперед\\\" \\\"Назад\\\" под постом"
-
-#: ../inc/accesspress-options.php:292
-msgid "Slider Settings"
-msgstr "Настройки Слайдера"
-
-#: ../inc/accesspress-options.php:296
-msgid "Show Slider"
-msgstr "Показывать слайдер"
-
-#: ../inc/accesspress-options.php:304
-msgid "Select a Category"
-msgstr "Выбрать Категорию"
-
-#: ../inc/accesspress-options.php:311
-msgid "Show full window"
-msgstr "Показывать во все окно"
-
-#: ../inc/accesspress-options.php:318
-msgid "Remove Slider overlay - Black Dots"
-msgstr ""
-
-#: ../inc/accesspress-options.php:325
-msgid "Show Pager"
-msgstr "Показывать Пейджер"
-
-#: ../inc/accesspress-options.php:332
-msgid "Show Controls"
-msgstr "Показывать Управление"
-
-#: ../inc/accesspress-options.php:339
-msgid "Auto Transition"
-msgstr "Авто Переход"
-
-#: ../inc/accesspress-options.php:346
-msgid "Slider Transition"
-msgstr "Смена Слайдов"
-
-#: ../inc/accesspress-options.php:353
-msgid "Slider Transition Speed"
-msgstr "Скорость Смены Слайдов"
-
-#: ../inc/accesspress-options.php:359
-msgid "Slider Pause Duration"
-msgstr "Пауза между слайдами"
-
-#: ../inc/accesspress-options.php:365
-msgid "Show Caption"
-msgstr "Показывать подпись"
-
-#: ../inc/accesspress-options.php:372
-msgid "Social Links"
-msgstr "Социальные кнопки"
-
-#: ../inc/accesspress-options.php:376
-msgid "Show Social Icon"
-msgstr "Показывать социальные кнопки"
-
-#: ../inc/accesspress-options.php:383
-msgid "Facebook"
-msgstr ""
-
-#: ../inc/accesspress-options.php:388
-msgid "Twitter"
-msgstr ""
-
-#: ../inc/accesspress-options.php:393
-msgid "Google Plus"
-msgstr ""
-
-#: ../inc/accesspress-options.php:398
-msgid "Youtube"
-msgstr ""
-
-#: ../inc/accesspress-options.php:403
-msgid "Pinterest"
-msgstr ""
-
-#: ../inc/accesspress-options.php:408
-msgid "Linkedin"
-msgstr ""
-
-#: ../inc/accesspress-options.php:413
-msgid "Fickr"
-msgstr ""
-
-#: ../inc/accesspress-options.php:418
-msgid "Vimeo"
-msgstr ""
-
-#: ../inc/accesspress-options.php:423
-msgid "Instagram"
-msgstr ""
-
-#: ../inc/accesspress-options.php:428
-msgid "Skype"
-msgstr ""
-
-#: ../inc/accesspress-options.php:433
-msgid "Tools"
-msgstr "Инструменты"
-
-#: ../inc/accesspress-options.php:437
-msgid "Custom CSS"
-msgstr "Свой CSS"
-
-#: ../inc/accesspress-options.php:443
-msgid "Custom JS"
-msgstr "Свой JS"
-
-#: ../inc/accesspress-options.php:449
-msgid "About"
-msgstr "О нас"
-
-#: ../inc/accesspress-options.php:453
-msgid "About AccessPress Themes"
-msgstr "Подробнее об AccessPress Themes"
-
-#: ../inc/ajax.php:19
-msgid "Page Title:"
-msgstr ""
-
-#: ../inc/ajax.php:23 ../inc/options-framework/includes/class-options-interface.
-#: php:430
-msgid "Page"
-msgstr ""
-
-#: ../inc/ajax.php:25
-msgid "Select a page:"
-msgstr ""
-
-#: ../inc/ajax.php:33 ../inc/options-framework/includes/class-options-interface.
-#: php:446
-msgid "Font Color"
-msgstr ""
-
-#: ../inc/ajax.php:38 ../inc/options-framework/includes/class-options-interface.
-#: php:457
-msgid "Background Color"
-msgstr ""
-
-#: ../inc/ajax.php:43 ../inc/options-framework/includes/class-options-interface.
-#: php:463
-msgid "Layout"
-msgstr ""
-
-#: ../inc/ajax.php:58 ../inc/options-framework/includes/class-options-interface.
-#: php:475
-msgid "Category"
-msgstr ""
-
-#: ../inc/ajax.php:60
-msgid "Select a Category:"
-msgstr ""
-
-#: ../inc/ajax.php:68
-msgid "Background Image"
-msgstr ""
-
-#: ../inc/ajax.php:76 ../inc/options-framework/includes/class-options-interface.
-#: php:499
-msgid "Background Settings"
-msgstr ""
-
-#: ../inc/ajax.php:81 ../inc/options-framework/includes/class-options-
-#: sanitization.php:408
-msgid "No Repeat"
-msgstr ""
-
-#: ../inc/ajax.php:82 ../inc/options-framework/includes/class-options-
-#: sanitization.php:409
-msgid "Repeat Horizontally"
-msgstr ""
-
-#: ../inc/ajax.php:83 ../inc/options-framework/includes/class-options-
-#: sanitization.php:410
-msgid "Repeat Vertically"
-msgstr ""
-
-#: ../inc/ajax.php:84 ../inc/options-framework/includes/class-options-
-#: sanitization.php:411
-msgid "Repeat All"
-msgstr ""
-
-#: ../inc/ajax.php:88 ../inc/options-framework/includes/class-options-
-#: sanitization.php:423
-msgid "Top Left"
-msgstr ""
-
-#: ../inc/ajax.php:89 ../inc/options-framework/includes/class-options-
-#: sanitization.php:424
-msgid "Top Center"
-msgstr ""
-
-#: ../inc/ajax.php:90 ../inc/options-framework/includes/class-options-
-#: sanitization.php:425
-msgid "Top Right"
-msgstr ""
-
-#: ../inc/ajax.php:91 ../inc/options-framework/includes/class-options-
-#: sanitization.php:426
-msgid "Middle Left"
-msgstr ""
-
-#: ../inc/ajax.php:92 ../inc/options-framework/includes/class-options-
-#: sanitization.php:427
-msgid "Middle Center"
-msgstr ""
-
-#: ../inc/ajax.php:93 ../inc/options-framework/includes/class-options-
-#: sanitization.php:428
-msgid "Middle Right"
-msgstr ""
-
-#: ../inc/ajax.php:94 ../inc/options-framework/includes/class-options-
-#: sanitization.php:429
-msgid "Bottom Left"
-msgstr ""
-
-#: ../inc/ajax.php:95 ../inc/options-framework/includes/class-options-
-#: sanitization.php:430
-msgid "Bottom Center"
-msgstr ""
-
-#: ../inc/ajax.php:96 ../inc/options-framework/includes/class-options-
-#: sanitization.php:431
-msgid "Bottom Right"
-msgstr ""
-
-#: ../inc/ajax.php:100 ../inc/options-framework/includes/class-options-
-#: sanitization.php:443
-msgid "Scroll Normally"
-msgstr ""
-
-#: ../inc/ajax.php:101 ../inc/options-framework/includes/class-options-
-#: sanitization.php:444
-msgid "Fixed in Place"
-msgstr ""
-
-#: ../inc/ajax.php:105 ../inc/options-framework/includes/class-options-
-#: sanitization.php:456
-msgid "Auto"
-msgstr ""
-
-#: ../inc/ajax.php:106 ../inc/options-framework/includes/class-options-
-#: sanitization.php:457
-msgid "Cover"
-msgstr ""
-
-#: ../inc/ajax.php:107 ../inc/options-framework/includes/class-options-
-#: sanitization.php:458
-msgid "Contain"
-msgstr ""
-
-#: ../inc/ajax.php:113 ../inc/options-framework/includes/class-options-interface.
-#: php:542
-msgid "Overlay"
-msgstr ""
-
-#: ../inc/ajax.php:115 ../inc/options-framework/includes/class-options-
-#: sanitization.php:491
-msgid "No Overlay"
-msgstr ""
-
-#: ../inc/ajax.php:123 ../inc/options-framework/includes/class-options-interface.
-#: php:553 ../inc/options-framework/includes/class-options-media-uploader.php:68 .
-#: ./inc/options-framework/includes/class-options-media-uploader.php:120
-msgid "Remove"
-msgstr ""
-
-#: ../inc/template-tags.php:21
-msgid "Posts navigation"
-msgstr "Навигация по Постам"
-
-#: ../inc/template-tags.php:25
-msgid "<i class=\"fa fa-hand-o-left\"></i> Older Posts"
-msgstr "<i class=\"fa fa-hand-o-left\"></i> Пост Назад"
-
-#: ../inc/template-tags.php:29
-msgid "Newer Posts <i class=\"fa fa-hand-o-right\"></i>"
-msgstr "Пост Вперед <i class=\"fa fa-hand-o-right\"></i>"
-
-#: ../inc/template-tags.php:52
-msgid "Post navigation"
-msgstr "Навигация по Постам"
-
-#: ../inc/template-tags.php:55
-msgctxt "Previous post link"
-msgid "<i class=\"fa fa-hand-o-left\"></i>%title"
-msgstr ""
-
-#: ../inc/template-tags.php:56
-msgctxt "Next post link"
-msgid "%title<i class=\"fa fa-hand-o-right\"></i>"
-msgstr ""
-
-#: ../inc/template-tags.php:85
-#, php-format
-msgctxt "post author"
-msgid "By %s"
-msgstr "От %s"
-
-#: ../inc/options-framework/includes/class-options-framework-admin.php:77
-msgid "Theme Options"
-msgstr "Настройки Темы"
-
-#: ../inc/options-framework/includes/class-options-framework-admin.php:172
-msgid "AccessPress Lite"
-msgstr ""
-
-#: ../inc/options-framework/includes/class-options-framework-admin.php:176
-msgid "Follow us for new updates"
-msgstr "Следите за новыми обновлениями"
-
-#: ../inc/options-framework/includes/class-options-framework-admin.php:200
-msgid "Save Options"
-msgstr "Сохранить Настройки"
-
-#: ../inc/options-framework/includes/class-options-framework-admin.php:201
-msgid "Restore Defaults"
-msgstr "Восстановить по умолчанию"
-
-#: ../inc/options-framework/includes/class-options-framework-admin.php:201
-msgid "Click OK to reset. Any theme settings will be lost!"
-msgstr "Нажмите кнопку OK, чтобы сбросить. Все настройки темы будут потеряны!"
-
-#: ../inc/options-framework/includes/class-options-framework-admin.php:233
-msgid "Like our Facebook page and don't miss any updates!"
-msgstr "Лайкните нашу страницу Facebook и не упустите ни одной новости!"
-
-#: ../inc/options-framework/includes/class-options-framework-admin.php:261
-msgid "Default options restored."
-msgstr "Настройки по умолчанию восстановлены. "
-
-#: ../inc/options-framework/includes/class-options-framework-admin.php:315
-msgid "Options saved."
-msgstr "Настройки Сохранены."
-
-#: ../inc/options-framework/includes/class-options-interface.php:426
-msgid "Page Title: "
-msgstr ""
-
-#: ../inc/options-framework/includes/class-options-interface.php:563
-msgid "Add New Section"
-msgstr ""
-
-#: ../inc/options-framework/includes/class-options-media-uploader.php:63
-msgid "No file chosen"
-msgstr ""
-
-#: ../inc/options-framework/includes/class-options-media-uploader.php:71
-msgid "Upgrade your version of WordPress for full media support."
-msgstr ""
-
-#: ../inc/options-framework/includes/class-options-media-uploader.php:95
-msgid "View File"
-msgstr ""
-
-#: ../inc/options-framework/includes/class-options-sanitization.php:567
-msgid "Normal"
-msgstr ""
-
-#: ../inc/options-framework/includes/class-options-sanitization.php:568
-msgid "Italic"
-msgstr ""
-
-#: ../inc/options-framework/includes/class-options-sanitization.php:569
-msgid "Bold"
-msgstr ""
-
-#: ../inc/options-framework/includes/class-options-sanitization.php:570
-msgid "Bold Italic"
-msgstr ""
diff --git a/layouts/action-section.php b/layouts/action-section.php
deleted file mode 100644 (file)
index 1df9d4c..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-/**
- * The template for displaying all Parallax Templates.
- *
- * @package accesspress_parallax
- */
-?>
-
-       <div class="call-to-action">
-               <?php  
-            $query = new WP_Query( 'page_id='.$section['page'] );
-            while ( $query->have_posts() ) : $query->the_post();
-        ?>
-               <h2><?php the_title(); ?></h2>
-
-               <div class="parallax-content">
-                       <?php if(get_the_content() != "") : ?>
-                       <div class="page-content">
-                               <?php the_content(); ?>
-                       </div>
-                       <?php endif; ?>
-               </div>
-               <?php 
-               endwhile;    
-               wp_reset_postdata();
-        ?>
-       </div>
\ No newline at end of file
diff --git a/layouts/blank-section.php b/layouts/blank-section.php
deleted file mode 100644 (file)
index 14f954b..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-<?php
-/**
- * The template for displaying all Parallax Templates.
- *
- * @package accesspress_parallax
- */
-?>
-
-<div class="content-area blank-section"></div>
\ No newline at end of file
diff --git a/layouts/blog-section.php b/layouts/blog-section.php
deleted file mode 100644 (file)
index 3b7cc68..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-<?php
-/**
- * The template for displaying all Parallax Templates.
- *
- * @package accesspress_parallax
- */
-?>
-
-       <div class="blog-listing clearfix">
-       <?php 
-               $args = array(
-                       'cat' => $category,
-                       'posts_per_page' => 3
-                       );
-               
-               $query = new WP_Query($args);
-               if($query->have_posts()):
-                       $i = 0;
-                       while($query->have_posts()): $query->the_post();
-                               $i = $i + 0.25;
-               ?>
-
-               <a href="<?php the_permalink(); ?>" class="blog-list wow fadeInDown" data-wow-delay="<?php echo $i; ?>s">
-                       <div class="blog-image">
-                       <?php if(has_post_thumbnail()) : 
-                       $image = wp_get_attachment_image_src(get_post_thumbnail_id(get_the_ID()),'blog-thumbnail'); ?>
-                               <img src="<?php echo esc_url( $image[0] ); ?>" alt="<?php echo esc_attr(get_the_title()); ?>">
-                       <?php else: ?>
-                               <img src="<?php echo get_template_directory_uri(); ?>/images/no-image.jpg" alt="<?php echo esc_attr(get_the_title()); ?>">
-                       <?php endif; ?>
-                       </div>
-
-                       <div class="blog-excerpt">
-                       <h3><?php the_title(); ?></h3>
-                       <h4 class="posted-date"><i class="fa fa-calendar"></i><?php echo get_the_date(); ?></h4>
-                               <?php echo accesspress_letter_count( get_the_excerpt(), 200 ); ?> <br />
-                       <span><?php _e('Read More','accesspress-parallax') ?>&nbsp;&nbsp;<i class="fa fa-angle-right"></i></span>
-                       </div>
-               </a>
-
-               <?php
-                       endwhile;
-                       wp_reset_postdata();
-               endif;
-       ?>
-       </div>
-       
-       <div class="clearfix btn-wrap">
-       <a class="btn" href="<?php echo get_category_link($category)?>"><?php _e('Read All','accesspress-parallax'); ?></a>
-       </div>
\ No newline at end of file
diff --git a/layouts/default-section.php b/layouts/default-section.php
deleted file mode 100644 (file)
index a626c0d..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-<?php
-/**
- * The template for displaying all Parallax Templates.
- *
- * @package accesspress_parallax
- */
-?>
-<div class="content-area"></div>
\ No newline at end of file
diff --git a/layouts/googlemap-section.php b/layouts/googlemap-section.php
deleted file mode 100644 (file)
index 01dff4b..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-<?php
-/**
- * The template for displaying all Parallax Templates.
- *
- * @package accesspress_parallax
- */
-?>
-
-       <div class="content-area googlemap-section">
-       <div class="googlemap-toggle"><?php _e('Map','accesspress-parallax'); ?></div>
-
-               <?php  
-            $query = new WP_Query( 'page_id='.$section['page'] );
-            while ( $query->have_posts() ) : $query->the_post();
-        ?>
-               
-               <div class="googlemap-content">
-                       <?php the_content(); ?>
-               </div>
-
-               <?php 
-               endwhile;    
-               wp_reset_postdata();
-        ?>
-       </div>
\ No newline at end of file
diff --git a/layouts/portfolio-section.php b/layouts/portfolio-section.php
deleted file mode 100644 (file)
index 77f81fa..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-<?php
-/**
- * The template for displaying all Parallax Templates.
- *
- * @package accesspress_parallax
- */
-?>
-
-       <div class="portfolio-listing clearfix">
-       <?php 
-               $args = array(
-                       'cat' => $category,
-                       'posts_per_page' => -1
-                       );
-               
-               $query = new WP_Query($args);
-               if($query->have_posts()):
-                       $i = 0;
-                       while($query->have_posts()): $query->the_post();
-                       $i = $i + 0.15;
-               ?>
-
-               <a href="<?php the_permalink(); ?>" class="portfolio-list wow fadeInUp" data-wow-delay="<?php echo $i; ?>s">
-               <div class="portfolio-wrap">
-        <div class="portfolio-overlay"><span>+</span></div>
-                       <div class="portfolio-image">
-                       <?php if(has_post_thumbnail()) : 
-                       $image = wp_get_attachment_image_src(get_post_thumbnail_id(get_the_ID()),'portfolio-thumbnail'); ?>
-                               <img src="<?php echo esc_url($image[0]); ?>" alt="<?php echo esc_attr(get_the_title()); ?>">
-                       <?php else: ?>
-                               <img src="<?php echo get_template_directory_uri(); ?>/images/no-image.jpg" alt="<?php echo esc_attr(get_the_title()); ?>">
-                       <?php endif; ?>
-                       </div>
-                       <h3><?php the_title(); ?></h3>
-        </div>
-               </a>
-
-               <?php
-                       endwhile;
-                       wp_reset_postdata();
-               endif;
-       ?>
-       </div>
\ No newline at end of file
diff --git a/layouts/service-section.php b/layouts/service-section.php
deleted file mode 100644 (file)
index 850545a..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-<?php
-/**
- * The template for displaying all Parallax Templates.
- *
- * @package accesspress_parallax
- */
-?>
-
-       <div class="service-listing clearfix">
-       <?php 
-               $args = array(
-                       'cat' => $category,
-                       'posts_per_page' => -1
-                       );
-               $count_service = 0;
-               $query = new WP_Query($args);
-               if($query->have_posts()):
-                       $i = 0;
-            while ($query->have_posts()): $query->the_post();
-            $i = $i + 0.25;
-                       $count_service++;
-                       $service_class = ($count_service % 2 == 0) ? "even wow fadeInRight" : "odd wow fadeInLeft";
-               ?>
-
-               <div class="clearfix service-list <?php echo esc_attr($service_class); ?>" data-wow-delay="<?php echo $i; ?>s">
-                       <div class="service-image">
-                               <?php if(has_post_thumbnail()) : 
-                               $image = wp_get_attachment_image_src(get_post_thumbnail_id(get_the_ID()),'thumbnail'); ?>
-                                       <img src="<?php echo esc_url($image[0]); ?>" alt="<?php the_title(); ?>">
-                               <?php else: ?>
-                                       <img src="<?php echo get_template_directory_uri(); ?>/images/no-image.jpg" alt="<?php the_title(); ?>">
-                               <?php endif; ?>
-                       </div>
-
-                       <div class="service-detail">
-                               <h3><?php the_title(); ?></h3>
-                               <div class="service-content"><?php the_content(); ?></div>
-                       </div>
-               </div>
-
-               <?php 
-               if($count_service % 2 == 0): ?>
-                       <div class="clearfix"></div>
-               <?php endif;
-               ?>
-
-               <?php
-                       endwhile;
-                       wp_reset_postdata();
-               endif;
-       ?>
-       </div>
\ No newline at end of file
diff --git a/layouts/team-section.php b/layouts/team-section.php
deleted file mode 100644 (file)
index c7ff0d0..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-<?php
-/**
- * The template for displaying all Parallax Templates.
- *
- * @package accesspress_parallax
- */
-?>
-
-       <div class="team-listing clearfix">
-       <?php 
-               $args = array(
-                       'cat' => $category,
-                       'posts_per_page' => -1
-                       );
-               $query = new WP_Query($args);
-               if($query->have_posts()): ?>
-               <div class="team-tab">
-                       <div class="team-slider">
-                       <?php 
-                               $i = 0;
-                    while ($query->have_posts()): $query->the_post();
-                        $i = $i + 0.25;
-                        ?>
-
-                       <div class="clearfix team-image wow fadeInLeft" data-wow-delay="<?php echo $i; ?>s">
-                               <?php if(has_post_thumbnail()) : 
-                               $image = wp_get_attachment_image_src(get_post_thumbnail_id(get_the_ID()),'thumbnail');
-                               ?>
-                               <img src="<?php echo esc_url($image[0]); ?>" alt="<?php the_title(); ?>">
-                               <?php else: ?>
-                               <img src="<?php echo get_template_directory_uri(); ?>/images/dummy.png" alt="<?php the_title(); ?>">
-                               <?php endif; ?>
-                       </div>
-
-                       <?php
-                               endwhile;
-                               wp_reset_postdata(); ?>
-                       </div>
-               </div>
-               <?php
-               endif;
-               ?>
-
-               <?php 
-               $args = array(
-                       'cat' => $category,
-                       'posts_per_page' => -1
-                       );
-               $query = new WP_Query($args);
-               if($query->have_posts()): ?>
-               <div class="team-content wow fadeIn" data-wow-delay="1.5s">
-               <?php 
-                       while($query->have_posts()): $query->the_post();
-               ?>
-
-               <div class="clearfix team-list team-<?php echo get_the_ID(); ?>">
-                       <?php if(has_post_thumbnail()) : 
-                       $image = wp_get_attachment_image_src(get_post_thumbnail_id(get_the_ID()),'team-thumbnail');
-                       ?>
-                       <div class="team-big-image">
-                       <img src="<?php echo esc_url($image[0]); ?>" alt="<?php the_title(); ?>">
-                       </div>
-                       <?php endif; ?>
-
-                       <div class="team-detail">
-                               <h3><?php the_title(); ?></h3>
-                               <?php the_content(); ?>
-                       </div>
-               </div>
-
-               <?php
-                       endwhile;
-                       wp_reset_postdata(); ?>
-               </div>
-               <?php
-               endif;
-               ?>
-       </div>
\ No newline at end of file
diff --git a/layouts/testimonial-section.php b/layouts/testimonial-section.php
deleted file mode 100644 (file)
index 6f1f3c4..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-<?php
-/**
- * The template for displaying all Parallax Templates.
- *
- * @package accesspress_parallax
- */
-?>
-
-       <div class="testimonial-listing clearfix wow fadeInUp">
-       <?php 
-               $args = array(
-                       'cat' => $category,
-                       'posts_per_page' => -1
-                       );
-               $query = new WP_Query($args);
-               if($query->have_posts()): ?>
-               <div class="testimonial-slider">
-               <?php
-                       while($query->have_posts()): $query->the_post();
-               ?>
-
-               <div class="testimonial-list">
-                       
-                       <div class="testimonial-content"><?php the_content(); ?></div>
-                       <h3><?php the_title(); ?></h3>
-                       <?php if(has_post_thumbnail()) : 
-                       $image = wp_get_attachment_image_src(get_post_thumbnail_id(get_the_ID()),'thumbnail');
-                       ?>
-                       <div class="testimonial-image">
-                               <img src="<?php echo esc_url($image[0]); ?>" alt="<?php the_title(); ?>">
-                       </div>
-                       <?php endif; ?>
-
-               </div>
-
-               <?php
-                       endwhile;
-                       wp_reset_postdata();
-               ?>
-               </div>
-               <?php
-               endif;
-       ?>
-       </div>
\ No newline at end of file
diff --git a/lib/defines.php b/lib/defines.php
new file mode 100644 (file)
index 0000000..7b417f0
--- /dev/null
@@ -0,0 +1,3 @@
+<?php
+
+define( 'MEMBERS_ONLY_ID', get_option( GLM_MEMBERS_PLUGIN_OPTION_MEMBERS_ONLY_ID ) );
\ No newline at end of file
diff --git a/lib/menu-walker.php b/lib/menu-walker.php
new file mode 100644 (file)
index 0000000..b2153ac
--- /dev/null
@@ -0,0 +1,81 @@
+<?php
+/**
+ * Customize the output of menus for Foundation top bar
+ */
+if ( ! class_exists( 'Glm_Theme_Top_Bar_Walker' ) ) :
+class Glm_Theme_Top_Bar_Walker extends Walker_Nav_Menu {
+    function display_element( $element, &$children_elements, $max_depth, $depth = 0, $args, &$output ) {
+        static $mainLevelCounter;
+        if ($depth == 0) {
+            ++$mainLevelCounter;
+        }
+        $element->has_children = ! empty( $children_elements[ $element->ID ] );
+        $element->classes[] = ( $element->current || $element->current_item_ancestor ) ? 'active' : '';
+        $element->classes[] = ( $element->has_children && 1 !== $max_depth ) ? 'has-dropdown' : '';
+        $element->classes[] = ( $element->post_parent == 0 && $mainLevelCounter < 4 ) ? '' : 'drop-left';
+        parent::display_element( $element, $children_elements, $max_depth, $depth, $args, $output );
+    }
+
+    function start_el( &$output, $object, $depth = 0, $args = array(), $current_object_id = 0 ) {
+        $item_html = '';
+        parent::start_el( $item_html, $object, $depth, $args );
+
+        // Insert style to display page's thumbnail
+        $item_style = '';
+        if ($depth == 0 && has_post_thumbnail((int)$object->object_id)) {
+            $thumbnail = wp_get_attachment_image_src(get_post_thumbnail_id((int)$object->object_id), 'large');
+            $item_style .= "<style>#menu-item-".$object->ID." > .dropdown:before { background-image: url('".$thumbnail[0]."');</style>";
+        }
+        //$output .= ( 0 == $depth ) ? '<li class="divider"></li>' : '';
+        $classes = empty( $object->classes ) ? array() : (array) $object->classes;
+        if ( in_array( 'label', $classes ) ) {
+            //$output .= '<li class="divider"></li>';
+            $item_html = preg_replace( '/<a[^>]*>(.*)<\/a>/iU', '<label>$1</label>', $item_html );
+        }
+        if ( in_array( 'divider', $classes ) ) {
+            $item_html = preg_replace( '/<a[^>]*>( .* )<\/a>/iU', '', $item_html );
+        }
+        if ($item_style)
+            $output .= $item_style;
+        $output .= $item_html;
+    }
+
+    function start_lvl( &$output, $depth = 0, $args = array() ) {
+        $output .= "\n<ul class=\"sub-menu dropdown\">\n";
+    }
+}
+endif;
+if ( ! class_exists( 'Glm_Theme_Off_Canvas_Walker' ) ) :
+class Glm_Theme_Off_Canvas_Walker extends Walker_Nav_Menu {
+    function display_element( $element, &$children_elements, $max_depth, $depth = 0, $args, &$output ) {
+        $element->has_children = ! empty( $children_elements[ $element->ID ] );
+        $element->classes[] = ( $element->current || $element->current_item_ancestor ) ? 'active' : '';
+        $element->classes[] = ( $element->has_children && 1 !== $max_depth ) ? 'page_item_has_children' : '';
+        $element->classes[] = 'page_item';
+
+        parent::display_element( $element, $children_elements, $max_depth, $depth, $args, $output );
+    }
+
+    function start_el( &$output, $object, $depth = 0, $args = array(), $current_object_id = 0 ) {
+        $item_html = '';
+        parent::start_el( $item_html, $object, $depth, $args );
+
+        $classes = empty( $object->classes ) ? array() : (array) $object->classes;
+
+        if ( in_array( 'label', $classes ) ) {
+            $item_html = preg_replace( '/<a[^>]*>(.*)<\/a>/iU', '<label>$1</label>', $item_html );
+        }
+
+        $output .= $item_html;
+    }
+
+    function start_lvl( &$output, $depth = 0, $args = array() ) {
+        $output .= "\n<ul class=\"children\">\n";
+    }
+
+    function end_lvl(&$output, $depth = 0, $args = array()){
+        $output .= '</ul>';
+    }
+}
+endif;
+?>
diff --git a/lib/navigation.php b/lib/navigation.php
new file mode 100644 (file)
index 0000000..b7376bd
--- /dev/null
@@ -0,0 +1,166 @@
+<?php
+
+register_nav_menus(array(
+  'top-bar' => 'Site Navigation'
+));
+
+/**
+ * Top Bar
+ */
+if ( ! function_exists( 'glm_theme_top_bar' ) ) {
+  function glm_theme_top_bar() {
+      wp_nav_menu(array(
+          'container' => false,                           // remove nav container
+          'container_class' => '',                        // class of container
+          'menu' => '',                                   // menu name
+          'menu_class' => '',                             // adding custom nav class
+          'theme_location' => 'top-bar',                  // where it's located in the theme
+          'before' => '',                                 // before each link <a>
+          'after' => '',                                  // after each link </a>
+          'link_before' => '',                            // before each link text
+          'link_after' => '',                             // after each link text
+          'depth' => 3,                                   // limit the depth of the nav
+          'fallback_cb' => false,                         // fallback function (see below)
+          'walker' => new Glm_Theme_Top_Bar_Walker()
+      ));
+  }
+}
+
+/**
+ * Mobile off-canvas
+ */
+if ( ! function_exists( 'glm_theme_mobile_off_canvas' ) ) {
+    function glm_theme_mobile_off_canvas() {
+        echo '<div class="left-off-canvas-list">';
+        echo '<ul><li class="page_item"><a href="' . get_bloginfo('url') . '">Home</a></li>';
+        echo glm_get_mobile_nav_menu( 'top-bar' );
+        echo '<li class="page_item"><a href="' . get_permalink( get_page_by_path( 'members-only' ) ) . '">Members Only</a></li>';
+        echo '</ul></div>';
+    }
+}
+
+function glm_get_mobile_nav_menu( $theme_location )
+{
+    $menu = wp_nav_menu(array(
+        'echo'            => false,             // don't echo
+        'container'       => false,             // remove nav container
+        'container_class' => '',                // class of container
+        'menu'            => '',                // menu name
+        'menu_class'      => 'off-canvas-list', // adding custom nav class
+        'theme_location'  => $theme_location,       // where it's located in the theme
+        'before'          => '',                // before each link <a>
+        'after'           => '',                // after each link </a>
+        'link_before'     => '',                // before each link text
+        'link_after'      => '',                // after each link text
+        'depth'           => 5,                 // limit the depth of the nav
+        'fallback_cb'     => false,             // fallback function (see below)
+        'walker'          => new Glm_Theme_Off_Canvas_Walker()
+    ));
+    return preg_replace( array( '%^<ul[^>]*>%', '%</ul>$%' ), '', $menu );
+}
+
+/**
+ * Footer
+ */
+if ( ! function_exists( 'glm_theme_footer' ) ) {
+  function glm_theme_footer() {
+      wp_nav_menu(array(
+          'container' => false,                           // remove nav container
+          'container_class' => '',                        // class of container
+          'menu' => '',                                   // menu name
+          'menu_class' => '',                             // adding custom nav class
+          'theme_location' => 'footer',                   // where it's located in the theme
+          'before' => '',                                 // before each link <a>
+          'after' => '',                                  // after each link </a>
+          'link_before' => '',                            // before each link text
+          'link_after' => '',                             // after each link text
+          'depth' => 1,                                   // limit the depth of the nav
+          'fallback_cb' => false,                         // fallback function (see below)
+      ));
+  }
+}
+
+/**
+ * glm_page_menu
+ *
+ * Grab the top level pages and their sub pages as the main navigation
+ */
+function glm_page_menu($parent = 0, $class = '')
+{
+    $menuConfig   = glm_get_menu_options();
+    $frontPageId  = get_option('page_on_front');
+    $parents      = array();
+    $args         = array(
+        'post_type'   => 'page',
+        'parent'      => $parent,
+        'number'      => '',
+        'exclude'     => $frontPageId,
+        'post_status' => 'publish',
+        'sort_order'  => 'asc',
+        'sort_column' => 'menu_order'
+    );
+    if ($parent == 0 && $menuConfig['menu_options']['main_level_pages']) {
+        $args['include'] = $menuConfig['menu_options']['main_level_pages'];
+    }
+    $pages = get_pages($args);
+    echo '<ul'.(($class)?' class="'.$class.'"':'').'><!-- begin -->'."\n";
+    foreach ($pages as $page) {
+        $childs = get_pages('child_of=' . $page->ID);
+        if (count($childs) > 0) {
+            echo '<li class="has-dropdown">'."\n";
+            echo '<a href="'.get_permalink($page->ID).'">'.$page->post_title.'</a>'."\n";
+            echo glm_page_menu($page->ID, 'sub-menu dropdown');
+            echo '</li>'."\n";
+        } else {
+            echo '<li><a href="'.get_permalink($page->ID).'">'.$page->post_title.'</a></li>'."\n";
+        }
+    }
+    echo '</ul><!-- end -->'."\n";
+}
+
+/**
+ * glm_offcanvas_menu
+ *
+ * Generate the list of pages as nested ul li list
+ */
+function glm_offcanvas_menu()
+{
+    wp_page_menu(array(
+        'depth' => 0,
+        'sort_column' => 'menu_order',
+        'menu_class' => 'left-off-canvas-list'
+    ));
+}
+
+/**
+ * get_menu_options
+ *
+ * Grab the menu options from the theme.ini file
+ */
+function glm_get_menu_options()
+{
+    static $menu_options;
+    $themeConfig = get_template_directory() . '/theme.ini';
+
+    if (!$menu_options && is_file($themeConfig)) {
+        $menu_options = parse_ini_file($themeConfig, true);
+    }
+    return $menu_options;
+}
+
+function glm_side_menu() {
+    global $post;
+    $parents = get_post_ancestors($post->ID);
+    $id = ($parents) ? $parents[count($parents)-1]: $post->ID;
+    $parent = get_page( $id );
+    if ($id == 0) {
+        $ID = $post->ID;
+    } else {
+        $ID = $parent->ID;
+    }
+    echo '<h1>'.get_the_title($ID).'</h1>';
+    echo '<ul class="sidebar"><!-- begin -->'."\n";
+    echo wp_list_pages( 'child_of='.$ID.'&title_li=&depth=1&echo=0');
+    echo '</ul><!-- end -->'."\n";
+}
+
diff --git a/lib/plugins.php b/lib/plugins.php
new file mode 100644 (file)
index 0000000..dad6988
--- /dev/null
@@ -0,0 +1,3 @@
+<?php
+
+include_once 'plugins/member-db.php';
\ No newline at end of file
diff --git a/lib/plugins/member-db.php b/lib/plugins/member-db.php
new file mode 100644 (file)
index 0000000..67f33fa
--- /dev/null
@@ -0,0 +1,57 @@
+<?php
+
+if ( ! class_exists( 'GLM_Members_Only_Walker' ) ) :
+class GLM_Members_Only_Walker extends Walker_Nav_Menu {
+
+    function display_element( $element, &$children_elements, $max_depth, $depth = 0, $args, &$output ) {
+        $element->has_children = ! empty( $children_elements[ $element->ID ] );
+        $element->classes[] = ( $element->current || $element->current_item_ancestor ) ? 'active' : '';
+        $element->classes[] = ( $element->has_children && 1 !== $max_depth ) ? 'page_item_has_children' : '';
+        $element->classes[] = 'page_item';
+
+        parent::display_element( $element, $children_elements, $max_depth, $depth, $args, $output );
+    }
+
+    function start_el( &$output, $object, $depth = 0, $args = array(), $current_object_id = 0 ) {
+        $item_html = '';
+        parent::start_el( $item_html, $object, $depth, $args );
+
+        $classes = empty( $object->classes ) ? array() : (array) $object->classes;
+
+        if ( in_array( 'label', $classes ) ) {
+            $item_html = preg_replace( '/<a[^>]*>(.*)<\/a>/iU', '<label>$1</label>', $item_html );
+        }
+
+        $output .= $item_html;
+    }
+
+    function start_lvl( &$output, $depth = 0, $args = array() ) {
+        $output .= "\n<ul class=\"children\">\n";
+    }
+
+    function end_lvl(&$output, $depth = 0, $args = array()){
+        $output .= '</ul>';
+    }
+
+}
+endif;
+
+if ( ! function_exists( 'glm_members_only_menu')) {
+    function glm_members_only_menu() {
+        wp_nav_menu(array(
+            'container' => false,                           // remove nav container
+            'container_class' => 'members-only-menu',       // class of container
+            'menu' => '',                                   // menu name
+            'menu_class' => 'members-only-menu',            // adding custom nav class
+            'theme_location' => 'members-only-menu',        // where it's located in the theme
+            'before' => '',                                 // before each link <a>
+            'after' => '',                                  // after each link </a>
+            'link_before' => '',                            // before each link text
+            'link_after' => '',                             // after each link text
+            'depth' => 2,                                   // limit the depth of the nav
+            'fallback_cb' => false,                         // fallback function (see below)
+            'items_wrap' => '%3$s',
+            'walker' => new GLM_Members_Only_Walker()
+        ));
+    }
+}
\ No newline at end of file
diff --git a/license.txt b/license.txt
deleted file mode 100644 (file)
index 20d40b6..0000000
+++ /dev/null
@@ -1,674 +0,0 @@
-                    GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
\ No newline at end of file
diff --git a/nggallery/album-glmalbums.php b/nggallery/album-glmalbums.php
new file mode 100644 (file)
index 0000000..9ebf91f
--- /dev/null
@@ -0,0 +1,60 @@
+<?php
+/**
+Template Page for the album overview
+
+Follow variables are useable :
+
+    $album       : Contain information about the first album
+    $albums      : Contain information about all albums
+    $galleries   : Contain all galleries inside this album
+    $pagination  : Contain the pagination content
+
+ You can check the content when you insert the tag <?php var_dump($variable) ?>
+ If you would like to show the timestamp of the image ,you can use <?php echo $exif['created_timestamp'] ?>
+**/
+?>
+<?php if (!defined ('ABSPATH')) die ('No direct access allowed'); ?><?php if (!empty ($galleries)) : ?>
+
+<div class="ngg-albumoverview">
+
+    <!-- List of galleries -->
+    <?php foreach ($galleries as $gallery) : ?>
+
+    <div class="ngg-glmalbums ngg-album-compact small-6 medium-4 large-3">
+        <div class="ngg-album-compactbox">
+            <div class="ngg-album-link">
+                <a class="Link" href="<?php echo nextgen_esc_url($gallery->pagelink) ?>">
+                    <img class="Thumb" alt="<?php echo esc_attr($gallery->title) ?>" src="<?php echo nextgen_esc_url($gallery->previewurl) ?>"/>
+                </a>
+            </div>
+        </div>
+        <?php if (!empty($image_gen_params)) {
+            $max_width = 'style="max-width: ' . ($image_gen_params['width'] + 20) . 'px"';
+        } else {
+            $max_width = '';
+        } ?>
+        <section class="album-meta-wrapper">
+            <h4>
+                <a class="ngg-album-desc"
+                   title="<?php echo esc_attr($gallery->title); ?>"
+                   href="<?php echo nextgen_esc_url($gallery->pagelink); ?>"
+                   <?php echo $max_width; ?>>
+                   <?php echo_safe_html($gallery->title); ?>
+                </a>
+            </h4>
+            <p class="ngg-album-gallery-image-counter">
+                <?php if ($gallery->counter > 0) { ?>
+                    <strong><?php echo $gallery->counter; ?></strong>&nbsp;<?php _e('Photos', 'nggallery'); ?>
+                <?php } else { ?>
+                    &nbsp;
+                <?php } ?>
+            </p>
+        </section>
+    </div>
+    <?php endforeach; ?>
+    <!-- Pagination -->
+    <br class="ngg-clear"/>
+    <?php echo $pagination ?>
+</div>
+
+<?php endif; ?>
diff --git a/nggallery/gallery-glmphotos-8.php b/nggallery/gallery-glmphotos-8.php
new file mode 100644 (file)
index 0000000..28bb6c9
--- /dev/null
@@ -0,0 +1,55 @@
+<?php 
+/**
+Template Page for the gallery overview
+
+Follow variables are useable :
+
+       $gallery     : Contain all about the gallery
+       $images      : Contain all images, path, title
+       $pagination  : Contain the pagination content
+
+ You can check the content when you insert the tag <?php var_dump($variable) ?>
+ If you would like to show the timestamp of the image ,you can use <?php echo $exif['created_timestamp'] ?>
+**/
+?>
+<?php if (!defined ('ABSPATH')) die ('No direct access allowed'); ?><?php if (!empty ($gallery)) : ?>
+
+       <!-- Thumbnails -->
+    <?php $i = 0; ?>
+        <ul class="gallery row small-block-grid-3 medium-block-grid-6 large-block-grid-8">
+       <?php foreach ( $images as $image ) : ?>
+        <li>
+            <div id="ngg-image-<?php echo $image->pid ?>" class="ngg-gallery-thumbnail-box imgBorderMe" <?php echo $image->style ?> >
+
+                <div class="ngg-gallery-thumbnail" >
+                    <a href="<?php echo nextgen_esc_url($image->imageURL) ?>"
+                title="<?php echo esc_attr($image->description) ?>"
+                data-src="<?php echo nextgen_esc_url($image->imageURL) ?>"
+                data-thumbnail="<?php echo nextgen_esc_url($image->thumbnailURL); ?>"
+                data-image-id="<?php echo esc_attr($image->pid); ?>"
+                data-title="<?php echo esc_attr($image->alttext); ?>"
+                data-description="<?php echo esc_attr($image->description); ?>"
+                <?php echo $image->thumbcode ?> >
+                            <?php if ( !$image->hidden ) { ?>
+                        
+                        <div class="image_overlay">
+                            <img title="<?php echo esc_attr($image->alttext) ?>" alt="<?php echo esc_attr($image->alttext) ?>" src="<?php echo nextgen_esc_url($image->thumbnailURL) ?>" <?php echo $image->size ?> />
+                        </div>
+                    <span class="photoTitle" title="<?php echo esc_attr($image->alttext) ?>"><?php if (!$image->hidden) { echo esc_attr($image->alttext); }?></span>
+                            <?php } ?>
+                    </a>
+                </div>
+                
+            </div>
+        </li>
+       <?php if ( $image->hidden ) continue; ?>
+       <?php if ( $gallery->columns > 0 && ++$i % $gallery->columns == 0 ) { ?>
+       <br style="clear: both" />
+       <?php } ?>
+       <?php endforeach; ?>
+        </ul>
+       <!-- Pagination -->
+       <?php echo $pagination ?>
+</ul>
+
+<?php endif; ?>
diff --git a/nggallery/gallery-glmphotos-narrow.php b/nggallery/gallery-glmphotos-narrow.php
new file mode 100644 (file)
index 0000000..bc07527
--- /dev/null
@@ -0,0 +1,55 @@
+<?php 
+/**
+Template Page for the gallery overview
+
+Follow variables are useable :
+
+       $gallery     : Contain all about the gallery
+       $images      : Contain all images, path, title
+       $pagination  : Contain the pagination content
+
+ You can check the content when you insert the tag <?php var_dump($variable) ?>
+ If you would like to show the timestamp of the image ,you can use <?php echo $exif['created_timestamp'] ?>
+**/
+?>
+<?php if (!defined ('ABSPATH')) die ('No direct access allowed'); ?><?php if (!empty ($gallery)) : ?>
+
+       <!-- Thumbnails -->
+    <?php $i = 0; ?>
+        <ul class="gallery row small-block-grid-1 medium-block-grid-2 large-block-grid-3">
+       <?php foreach ( $images as $image ) : ?>
+        <li>
+            <div id="ngg-image-<?php echo $image->pid ?>" class="ngg-gallery-thumbnail-box imgBorderMe" <?php echo $image->style ?> >
+
+                <div class="ngg-gallery-thumbnail" >
+                    <a href="<?php echo nextgen_esc_url($image->imageURL) ?>"
+                title="<?php echo esc_attr($image->description) ?>"
+                data-src="<?php echo nextgen_esc_url($image->imageURL) ?>"
+                data-thumbnail="<?php echo nextgen_esc_url($image->thumbnailURL); ?>"
+                data-image-id="<?php echo esc_attr($image->pid); ?>"
+                data-title="<?php echo esc_attr($image->alttext); ?>"
+                data-description="<?php echo esc_attr($image->description); ?>"
+                <?php echo $image->thumbcode ?> >
+                            <?php if ( !$image->hidden ) { ?>
+                        
+                        <div class="image_overlay">
+                            <img title="<?php echo esc_attr($image->alttext) ?>" alt="<?php echo esc_attr($image->alttext) ?>" src="<?php echo nextgen_esc_url($image->thumbnailURL) ?>" <?php echo $image->size ?> />
+                        </div>
+                    <span class="photoTitle" title="<?php echo esc_attr($image->alttext) ?>"><?php if (!$image->hidden) { echo esc_attr($image->alttext); }?></span>
+                            <?php } ?>
+                    </a>
+                </div>
+                
+            </div>
+        </li>
+       <?php if ( $image->hidden ) continue; ?>
+       <?php if ( $gallery->columns > 0 && ++$i % $gallery->columns == 0 ) { ?>
+       <br style="clear: both" />
+       <?php } ?>
+       <?php endforeach; ?>
+        </ul>
+       <!-- Pagination -->
+       <?php echo $pagination ?>
+</ul>
+
+<?php endif; ?>
diff --git a/nggallery/gallery-glmphotos.php b/nggallery/gallery-glmphotos.php
new file mode 100644 (file)
index 0000000..c5329e2
--- /dev/null
@@ -0,0 +1,66 @@
+<?php
+/**
+Template Page for the gallery overview
+
+Follow variables are useable :
+
+       $gallery     : Contain all about the gallery
+       $images      : Contain all images, path, title
+       $pagination  : Contain the pagination content
+
+ You can check the content when you insert the tag <?php var_dump($variable) ?>
+ If you would like to show the timestamp of the image ,you can use <?php echo $exif['created_timestamp'] ?>
+**/
+?>
+<?php if (!defined ('ABSPATH')) die ('No direct access allowed'); ?><?php if (!empty ($gallery)) : ?>
+
+<div class="ngg-galleryoverview" id="<?php echo $gallery->anchor ?>">
+       <!-- Thumbnails -->
+    <?php $i = 0; ?>
+        <ul class="gallery row small-block-grid-2 medium-block-grid-3 large-block-grid-4">
+       <?php foreach ( $images as $image ) : ?>
+        <li>
+            <div id="ngg-image-<?php echo $image->pid ?>" class="ngg-gallery-thumbnail-box imgBorderMe" <?php echo $image->style ?> >
+
+                <div class="ngg-gallery-thumbnail" >
+                    <a href="<?php echo nextgen_esc_url($image->imageURL) ?>"
+                title="<?php echo esc_attr($image->description) ?>"
+                data-src="<?php echo nextgen_esc_url($image->imageURL) ?>"
+                data-thumbnail="<?php echo nextgen_esc_url($image->thumbnailURL); ?>"
+                data-image-id="<?php echo esc_attr($image->pid); ?>"
+                data-title="<?php echo esc_attr($image->alttext); ?>"
+                data-description="<?php echo esc_attr($image->description); ?>"
+                <?php echo $image->thumbcode ?> >
+                            <?php if ( !$image->hidden ) { ?>
+
+                        <div class="image_overlay">
+                            <img
+                            title="<?php echo esc_attr($image->alttext) ?>"
+                            alt="<?php echo esc_attr($image->alttext) ?>"
+                            src="<?php echo nextgen_esc_url($image->thumbnailURL) ?>"
+                            <?php echo $image->size ?> />
+                        </div>
+                    <?php
+                    $imageTitle = !preg_match(';is\d{2,}-\d{10,}-\d{5,}$;', $image->alttext) ? $image->alttext: '';
+                    ?>
+                    <span class="photoTitle" title="<?php echo esc_attr($imageTitle) ?>">
+                        <?php if (!$image->hidden) { echo esc_attr($imageTitle); }?>
+                    </span>
+                            <?php } ?>
+                    </a>
+                </div>
+
+            </div>
+        </li>
+       <?php if ( $image->hidden ) continue; ?>
+       <?php if ( $gallery->columns > 0 && ++$i % $gallery->columns == 0 ) { ?>
+       <br style="clear: both" />
+       <?php } ?>
+       <?php endforeach; ?>
+        </ul>
+       <!-- Pagination -->
+       <?php echo $pagination ?>
+</ul>
+</div>
+
+<?php endif; ?>
diff --git a/nggallery/gallery-glmvideos.php b/nggallery/gallery-glmvideos.php
new file mode 100644 (file)
index 0000000..367627d
--- /dev/null
@@ -0,0 +1,72 @@
+<?php 
+/**
+Template Page for the gallery overview
+
+Follow variables are useable :
+
+       $gallery     : Contain all about the gallery
+       $images      : Contain all images, path, title
+       $pagination  : Contain the pagination content
+
+ You can check the content when you insert the tag <?php var_dump($variable) ?>
+ If you would like to show the timestamp of the image ,you can use <?php echo $exif['created_timestamp'] ?>
+**/
+?>
+<?php if (!defined ('ABSPATH')) die ('No direct access allowed'); ?><?php if (!empty ($gallery)) : ?>
+
+<ul id='gallery' class='gallery row small-block-grid-2 medium-block-grid-3 large-block-grid-4'>
+<?php if ($gallery->show_slideshow) { ?>
+       <!-- Slideshow link -->
+       <div class="slideshowlink">
+               <a class="slideshowlink" href="<?php echo nextgen_esc_url($gallery->slideshow_link) ?>">
+                       <?php echo $gallery->slideshow_link_text ?>
+               </a>
+       </div>
+<?php } ?>
+       <!-- Thumbnails -->
+    <?php $i = 0; ?>
+       <?php foreach ( $images as $image ) : ?>
+       <li>
+            <div id="ngg-image-<?php echo $image->pid ?>" class="ngg-gallery-thumbnail-box imgBorderMe" <?php echo $image->style ?> >
+
+                <div class="ngg-gallery-thumbnail" >
+                    <a href="<?php echo nggcf_get_field($image->pid, "video_url"); ?>"
+                    title="<?php echo esc_attr($image->description); ?>"
+                    data-src="<?php echo nextgen_esc_url($image->imageURL); ?>"
+                    data-thumbnail="<?php echo nextgen_esc_url($image->thumbnailURL); ?>"
+                    data-image-id="<?php echo esc_attr($image->pid); ?>"
+                    data-title="<?php echo esc_attr($image->alttext); ?>"
+                    data-description="<?php echo esc_attr($image->description); ?>"
+                    data-url="<?php echo nggcf_get_field($image->pid, "video_url"); ?>"
+                    <?php echo $image->thumbcode ?> >
+                        <?php if ( !$image->hidden ) { ?>
+                        
+                        <div class="image_overlay">
+                            <img title="<?php echo esc_attr($image->alttext) ?>" alt="<?php echo esc_attr($image->alttext) ?>" src="<?php echo nextgen_esc_url($image->thumbnailURL) ?>" <?php echo $image->size ?> />
+                        </div>
+                    <span class="photoTitle"><?php if (!$image->hidden) { echo esc_attr($image->alttext); }?></span>
+                    
+                            <?php } ?>
+                    </a>
+                </div>
+                
+            </div>
+        </li>
+       <?php if ( $image->hidden ) continue; ?>
+       <?php if ( $gallery->columns > 0 && ++$i % $gallery->columns == 0 ) { ?>
+       <br style="clear: both" />
+       <?php } ?>
+       <?php endforeach; ?>
+       
+       <!-- Pagination -->
+       <?php echo $pagination ?>
+</ul>
+<script>
+    jQuery(document).ready(function(){
+        jQuery(".ngg-fancybox").each(function (){
+            jQuery(this).addClass("various iframe");
+            jQuery(this).attr("href",jQuery(this).children("img").attr("title"));
+        });
+    });
+</script>
+<?php endif; ?>
diff --git a/package-lock.json b/package-lock.json
deleted file mode 100644 (file)
index 75e99d4..0000000
+++ /dev/null
@@ -1,6331 +0,0 @@
-{
-  "name": "coldwater",
-  "version": "0.0.1",
-  "lockfileVersion": 1,
-  "requires": true,
-  "dependencies": {
-    "@gulp-sourcemaps/map-sources": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/@gulp-sourcemaps/map-sources/-/map-sources-1.0.0.tgz",
-      "integrity": "sha1-iQrnxdjId/bThIYCFazp1+yUW9o=",
-      "dev": true,
-      "requires": {
-        "normalize-path": "2.1.1",
-        "through2": "2.0.3"
-      },
-      "dependencies": {
-        "isarray": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
-          "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
-          "dev": true
-        },
-        "readable-stream": {
-          "version": "2.3.6",
-          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
-          "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
-          "dev": true,
-          "requires": {
-            "core-util-is": "1.0.2",
-            "inherits": "2.0.3",
-            "isarray": "1.0.0",
-            "process-nextick-args": "2.0.0",
-            "safe-buffer": "5.1.1",
-            "string_decoder": "1.1.1",
-            "util-deprecate": "1.0.2"
-          }
-        },
-        "string_decoder": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
-          "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
-          "dev": true,
-          "requires": {
-            "safe-buffer": "5.1.1"
-          }
-        },
-        "through2": {
-          "version": "2.0.3",
-          "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
-          "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
-          "dev": true,
-          "requires": {
-            "readable-stream": "2.3.6",
-            "xtend": "4.0.1"
-          }
-        }
-      }
-    },
-    "abbrev": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
-      "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
-      "dev": true
-    },
-    "acorn": {
-      "version": "2.7.0",
-      "resolved": "https://registry.npmjs.org/acorn/-/acorn-2.7.0.tgz",
-      "integrity": "sha1-q259nYhqrKiwhbwzEreaGYQz8Oc="
-    },
-    "acorn-globals": {
-      "version": "1.0.9",
-      "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-1.0.9.tgz",
-      "integrity": "sha1-VbtemGkVB7dFedBRNBMhfDgMVM8=",
-      "requires": {
-        "acorn": "2.7.0"
-      }
-    },
-    "ajv": {
-      "version": "5.5.2",
-      "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
-      "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
-      "dev": true,
-      "requires": {
-        "co": "4.6.0",
-        "fast-deep-equal": "1.1.0",
-        "fast-json-stable-stringify": "2.0.0",
-        "json-schema-traverse": "0.3.1"
-      }
-    },
-    "align-text": {
-      "version": "0.1.4",
-      "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz",
-      "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=",
-      "requires": {
-        "kind-of": "3.2.2",
-        "longest": "1.0.1",
-        "repeat-string": "1.6.1"
-      }
-    },
-    "amdefine": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
-      "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU="
-    },
-    "ansi-colors": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz",
-      "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==",
-      "dev": true,
-      "requires": {
-        "ansi-wrap": "0.1.0"
-      }
-    },
-    "ansi-cyan": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/ansi-cyan/-/ansi-cyan-0.1.1.tgz",
-      "integrity": "sha1-U4rlKK+JgvKK4w2G8vF0VtJgmHM=",
-      "dev": true,
-      "requires": {
-        "ansi-wrap": "0.1.0"
-      }
-    },
-    "ansi-gray": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz",
-      "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=",
-      "requires": {
-        "ansi-wrap": "0.1.0"
-      }
-    },
-    "ansi-red": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/ansi-red/-/ansi-red-0.1.1.tgz",
-      "integrity": "sha1-jGOPnRCAgAo1PJwoyKgcpHBdlGw=",
-      "dev": true,
-      "requires": {
-        "ansi-wrap": "0.1.0"
-      }
-    },
-    "ansi-regex": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
-      "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
-    },
-    "ansi-styles": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
-      "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
-    },
-    "ansi-wrap": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz",
-      "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768="
-    },
-    "aproba": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
-      "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
-      "dev": true
-    },
-    "archy": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz",
-      "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=",
-      "dev": true
-    },
-    "are-we-there-yet": {
-      "version": "1.1.4",
-      "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz",
-      "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=",
-      "dev": true,
-      "requires": {
-        "delegates": "1.0.0",
-        "readable-stream": "2.3.6"
-      },
-      "dependencies": {
-        "isarray": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
-          "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
-          "dev": true
-        },
-        "readable-stream": {
-          "version": "2.3.6",
-          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
-          "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
-          "dev": true,
-          "requires": {
-            "core-util-is": "1.0.2",
-            "inherits": "2.0.3",
-            "isarray": "1.0.0",
-            "process-nextick-args": "2.0.0",
-            "safe-buffer": "5.1.1",
-            "string_decoder": "1.1.1",
-            "util-deprecate": "1.0.2"
-          }
-        },
-        "string_decoder": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
-          "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
-          "dev": true,
-          "requires": {
-            "safe-buffer": "5.1.1"
-          }
-        }
-      }
-    },
-    "arr-diff": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
-      "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
-      "dev": true
-    },
-    "arr-flatten": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
-      "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
-      "dev": true
-    },
-    "arr-union": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
-      "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
-      "dev": true
-    },
-    "array-differ": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz",
-      "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE="
-    },
-    "array-each": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz",
-      "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=",
-      "dev": true
-    },
-    "array-find-index": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
-      "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=",
-      "dev": true
-    },
-    "array-slice": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz",
-      "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==",
-      "dev": true
-    },
-    "array-uniq": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
-      "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY="
-    },
-    "array-unique": {
-      "version": "0.3.2",
-      "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
-      "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
-      "dev": true
-    },
-    "asap": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/asap/-/asap-1.0.0.tgz",
-      "integrity": "sha1-sqRdpf36ILBJb8N2jMJ8EvqRan0="
-    },
-    "asn1": {
-      "version": "0.2.3",
-      "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz",
-      "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=",
-      "dev": true
-    },
-    "assert-plus": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
-      "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
-      "dev": true
-    },
-    "assign-symbols": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
-      "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
-      "dev": true
-    },
-    "async-foreach": {
-      "version": "0.1.3",
-      "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz",
-      "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=",
-      "dev": true
-    },
-    "asynckit": {
-      "version": "0.4.0",
-      "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
-      "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
-      "dev": true
-    },
-    "atob": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.0.tgz",
-      "integrity": "sha512-SuiKH8vbsOyCALjA/+EINmt/Kdl+TQPrtFgW7XZZcwtryFu9e5kQoX3bjCW6mIvGH1fbeAZZuvwGR5IlBRznGw==",
-      "dev": true
-    },
-    "autoprefixer": {
-      "version": "6.7.7",
-      "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-6.7.7.tgz",
-      "integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=",
-      "dev": true,
-      "requires": {
-        "browserslist": "1.7.7",
-        "caniuse-db": "1.0.30000828",
-        "normalize-range": "0.1.2",
-        "num2fraction": "1.2.2",
-        "postcss": "5.2.18",
-        "postcss-value-parser": "3.3.0"
-      }
-    },
-    "aws-sign2": {
-      "version": "0.7.0",
-      "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
-      "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
-      "dev": true
-    },
-    "aws4": {
-      "version": "1.7.0",
-      "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz",
-      "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w==",
-      "dev": true
-    },
-    "babel-code-frame": {
-      "version": "6.26.0",
-      "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
-      "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
-      "dev": true,
-      "requires": {
-        "chalk": "1.1.3",
-        "esutils": "2.0.2",
-        "js-tokens": "3.0.2"
-      }
-    },
-    "babel-core": {
-      "version": "6.26.0",
-      "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.0.tgz",
-      "integrity": "sha1-rzL3izGm/O8RnIew/Y2XU/A6C7g=",
-      "dev": true,
-      "requires": {
-        "babel-code-frame": "6.26.0",
-        "babel-generator": "6.26.1",
-        "babel-helpers": "6.24.1",
-        "babel-messages": "6.23.0",
-        "babel-register": "6.26.0",
-        "babel-runtime": "6.26.0",
-        "babel-template": "6.26.0",
-        "babel-traverse": "6.26.0",
-        "babel-types": "6.26.0",
-        "babylon": "6.18.0",
-        "convert-source-map": "1.5.1",
-        "debug": "2.6.9",
-        "json5": "0.5.1",
-        "lodash": "4.17.5",
-        "minimatch": "3.0.4",
-        "path-is-absolute": "1.0.1",
-        "private": "0.1.8",
-        "slash": "1.0.0",
-        "source-map": "0.5.7"
-      },
-      "dependencies": {
-        "minimatch": {
-          "version": "3.0.4",
-          "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
-          "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
-          "dev": true,
-          "requires": {
-            "brace-expansion": "1.1.11"
-          }
-        },
-        "source-map": {
-          "version": "0.5.7",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
-          "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-          "dev": true
-        }
-      }
-    },
-    "babel-generator": {
-      "version": "6.26.1",
-      "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz",
-      "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==",
-      "dev": true,
-      "requires": {
-        "babel-messages": "6.23.0",
-        "babel-runtime": "6.26.0",
-        "babel-types": "6.26.0",
-        "detect-indent": "4.0.0",
-        "jsesc": "1.3.0",
-        "lodash": "4.17.5",
-        "source-map": "0.5.7",
-        "trim-right": "1.0.1"
-      },
-      "dependencies": {
-        "jsesc": {
-          "version": "1.3.0",
-          "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
-          "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=",
-          "dev": true
-        },
-        "source-map": {
-          "version": "0.5.7",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
-          "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-          "dev": true
-        }
-      }
-    },
-    "babel-helper-call-delegate": {
-      "version": "6.24.1",
-      "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz",
-      "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=",
-      "dev": true,
-      "requires": {
-        "babel-helper-hoist-variables": "6.24.1",
-        "babel-runtime": "6.26.0",
-        "babel-traverse": "6.26.0",
-        "babel-types": "6.26.0"
-      }
-    },
-    "babel-helper-define-map": {
-      "version": "6.26.0",
-      "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz",
-      "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=",
-      "dev": true,
-      "requires": {
-        "babel-helper-function-name": "6.24.1",
-        "babel-runtime": "6.26.0",
-        "babel-types": "6.26.0",
-        "lodash": "4.17.5"
-      }
-    },
-    "babel-helper-function-name": {
-      "version": "6.24.1",
-      "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz",
-      "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=",
-      "dev": true,
-      "requires": {
-        "babel-helper-get-function-arity": "6.24.1",
-        "babel-runtime": "6.26.0",
-        "babel-template": "6.26.0",
-        "babel-traverse": "6.26.0",
-        "babel-types": "6.26.0"
-      }
-    },
-    "babel-helper-get-function-arity": {
-      "version": "6.24.1",
-      "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz",
-      "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=",
-      "dev": true,
-      "requires": {
-        "babel-runtime": "6.26.0",
-        "babel-types": "6.26.0"
-      }
-    },
-    "babel-helper-hoist-variables": {
-      "version": "6.24.1",
-      "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz",
-      "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=",
-      "dev": true,
-      "requires": {
-        "babel-runtime": "6.26.0",
-        "babel-types": "6.26.0"
-      }
-    },
-    "babel-helper-optimise-call-expression": {
-      "version": "6.24.1",
-      "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz",
-      "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=",
-      "dev": true,
-      "requires": {
-        "babel-runtime": "6.26.0",
-        "babel-types": "6.26.0"
-      }
-    },
-    "babel-helper-regex": {
-      "version": "6.26.0",
-      "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz",
-      "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=",
-      "dev": true,
-      "requires": {
-        "babel-runtime": "6.26.0",
-        "babel-types": "6.26.0",
-        "lodash": "4.17.5"
-      }
-    },
-    "babel-helper-replace-supers": {
-      "version": "6.24.1",
-      "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz",
-      "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=",
-      "dev": true,
-      "requires": {
-        "babel-helper-optimise-call-expression": "6.24.1",
-        "babel-messages": "6.23.0",
-        "babel-runtime": "6.26.0",
-        "babel-template": "6.26.0",
-        "babel-traverse": "6.26.0",
-        "babel-types": "6.26.0"
-      }
-    },
-    "babel-helpers": {
-      "version": "6.24.1",
-      "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz",
-      "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=",
-      "dev": true,
-      "requires": {
-        "babel-runtime": "6.26.0",
-        "babel-template": "6.26.0"
-      }
-    },
-    "babel-messages": {
-      "version": "6.23.0",
-      "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
-      "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
-      "dev": true,
-      "requires": {
-        "babel-runtime": "6.26.0"
-      }
-    },
-    "babel-plugin-check-es2015-constants": {
-      "version": "6.22.0",
-      "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz",
-      "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=",
-      "dev": true,
-      "requires": {
-        "babel-runtime": "6.26.0"
-      }
-    },
-    "babel-plugin-transform-es2015-arrow-functions": {
-      "version": "6.22.0",
-      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz",
-      "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=",
-      "dev": true,
-      "requires": {
-        "babel-runtime": "6.26.0"
-      }
-    },
-    "babel-plugin-transform-es2015-block-scoped-functions": {
-      "version": "6.22.0",
-      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz",
-      "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=",
-      "dev": true,
-      "requires": {
-        "babel-runtime": "6.26.0"
-      }
-    },
-    "babel-plugin-transform-es2015-block-scoping": {
-      "version": "6.26.0",
-      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz",
-      "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=",
-      "dev": true,
-      "requires": {
-        "babel-runtime": "6.26.0",
-        "babel-template": "6.26.0",
-        "babel-traverse": "6.26.0",
-        "babel-types": "6.26.0",
-        "lodash": "4.17.5"
-      }
-    },
-    "babel-plugin-transform-es2015-classes": {
-      "version": "6.24.1",
-      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz",
-      "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=",
-      "dev": true,
-      "requires": {
-        "babel-helper-define-map": "6.26.0",
-        "babel-helper-function-name": "6.24.1",
-        "babel-helper-optimise-call-expression": "6.24.1",
-        "babel-helper-replace-supers": "6.24.1",
-        "babel-messages": "6.23.0",
-        "babel-runtime": "6.26.0",
-        "babel-template": "6.26.0",
-        "babel-traverse": "6.26.0",
-        "babel-types": "6.26.0"
-      }
-    },
-    "babel-plugin-transform-es2015-computed-properties": {
-      "version": "6.24.1",
-      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz",
-      "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=",
-      "dev": true,
-      "requires": {
-        "babel-runtime": "6.26.0",
-        "babel-template": "6.26.0"
-      }
-    },
-    "babel-plugin-transform-es2015-destructuring": {
-      "version": "6.23.0",
-      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz",
-      "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=",
-      "dev": true,
-      "requires": {
-        "babel-runtime": "6.26.0"
-      }
-    },
-    "babel-plugin-transform-es2015-duplicate-keys": {
-      "version": "6.24.1",
-      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz",
-      "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=",
-      "dev": true,
-      "requires": {
-        "babel-runtime": "6.26.0",
-        "babel-types": "6.26.0"
-      }
-    },
-    "babel-plugin-transform-es2015-for-of": {
-      "version": "6.23.0",
-      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz",
-      "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=",
-      "dev": true,
-      "requires": {
-        "babel-runtime": "6.26.0"
-      }
-    },
-    "babel-plugin-transform-es2015-function-name": {
-      "version": "6.24.1",
-      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz",
-      "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=",
-      "dev": true,
-      "requires": {
-        "babel-helper-function-name": "6.24.1",
-        "babel-runtime": "6.26.0",
-        "babel-types": "6.26.0"
-      }
-    },
-    "babel-plugin-transform-es2015-literals": {
-      "version": "6.22.0",
-      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz",
-      "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=",
-      "dev": true,
-      "requires": {
-        "babel-runtime": "6.26.0"
-      }
-    },
-    "babel-plugin-transform-es2015-modules-amd": {
-      "version": "6.24.1",
-      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz",
-      "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=",
-      "dev": true,
-      "requires": {
-        "babel-plugin-transform-es2015-modules-commonjs": "6.26.0",
-        "babel-runtime": "6.26.0",
-        "babel-template": "6.26.0"
-      }
-    },
-    "babel-plugin-transform-es2015-modules-commonjs": {
-      "version": "6.26.0",
-      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz",
-      "integrity": "sha1-DYOUApt9xqvhqX7xgeAHWN0uXYo=",
-      "dev": true,
-      "requires": {
-        "babel-plugin-transform-strict-mode": "6.24.1",
-        "babel-runtime": "6.26.0",
-        "babel-template": "6.26.0",
-        "babel-types": "6.26.0"
-      }
-    },
-    "babel-plugin-transform-es2015-modules-systemjs": {
-      "version": "6.24.1",
-      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz",
-      "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=",
-      "dev": true,
-      "requires": {
-        "babel-helper-hoist-variables": "6.24.1",
-        "babel-runtime": "6.26.0",
-        "babel-template": "6.26.0"
-      }
-    },
-    "babel-plugin-transform-es2015-modules-umd": {
-      "version": "6.24.1",
-      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz",
-      "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=",
-      "dev": true,
-      "requires": {
-        "babel-plugin-transform-es2015-modules-amd": "6.24.1",
-        "babel-runtime": "6.26.0",
-        "babel-template": "6.26.0"
-      }
-    },
-    "babel-plugin-transform-es2015-object-super": {
-      "version": "6.24.1",
-      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz",
-      "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=",
-      "dev": true,
-      "requires": {
-        "babel-helper-replace-supers": "6.24.1",
-        "babel-runtime": "6.26.0"
-      }
-    },
-    "babel-plugin-transform-es2015-parameters": {
-      "version": "6.24.1",
-      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz",
-      "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=",
-      "dev": true,
-      "requires": {
-        "babel-helper-call-delegate": "6.24.1",
-        "babel-helper-get-function-arity": "6.24.1",
-        "babel-runtime": "6.26.0",
-        "babel-template": "6.26.0",
-        "babel-traverse": "6.26.0",
-        "babel-types": "6.26.0"
-      }
-    },
-    "babel-plugin-transform-es2015-shorthand-properties": {
-      "version": "6.24.1",
-      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz",
-      "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=",
-      "dev": true,
-      "requires": {
-        "babel-runtime": "6.26.0",
-        "babel-types": "6.26.0"
-      }
-    },
-    "babel-plugin-transform-es2015-spread": {
-      "version": "6.22.0",
-      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz",
-      "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=",
-      "dev": true,
-      "requires": {
-        "babel-runtime": "6.26.0"
-      }
-    },
-    "babel-plugin-transform-es2015-sticky-regex": {
-      "version": "6.24.1",
-      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz",
-      "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=",
-      "dev": true,
-      "requires": {
-        "babel-helper-regex": "6.26.0",
-        "babel-runtime": "6.26.0",
-        "babel-types": "6.26.0"
-      }
-    },
-    "babel-plugin-transform-es2015-template-literals": {
-      "version": "6.22.0",
-      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz",
-      "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=",
-      "dev": true,
-      "requires": {
-        "babel-runtime": "6.26.0"
-      }
-    },
-    "babel-plugin-transform-es2015-typeof-symbol": {
-      "version": "6.23.0",
-      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz",
-      "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=",
-      "dev": true,
-      "requires": {
-        "babel-runtime": "6.26.0"
-      }
-    },
-    "babel-plugin-transform-es2015-unicode-regex": {
-      "version": "6.24.1",
-      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz",
-      "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=",
-      "dev": true,
-      "requires": {
-        "babel-helper-regex": "6.26.0",
-        "babel-runtime": "6.26.0",
-        "regexpu-core": "2.0.0"
-      }
-    },
-    "babel-plugin-transform-regenerator": {
-      "version": "6.26.0",
-      "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz",
-      "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=",
-      "dev": true,
-      "requires": {
-        "regenerator-transform": "0.10.1"
-      }
-    },
-    "babel-plugin-transform-strict-mode": {
-      "version": "6.24.1",
-      "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz",
-      "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=",
-      "dev": true,
-      "requires": {
-        "babel-runtime": "6.26.0",
-        "babel-types": "6.26.0"
-      }
-    },
-    "babel-preset-es2015": {
-      "version": "6.13.2",
-      "resolved": "https://registry.npmjs.org/babel-preset-es2015/-/babel-preset-es2015-6.13.2.tgz",
-      "integrity": "sha1-AGxGmnUovQZvKRfItJVTCdzVPPs=",
-      "dev": true,
-      "requires": {
-        "babel-plugin-check-es2015-constants": "6.22.0",
-        "babel-plugin-transform-es2015-arrow-functions": "6.22.0",
-        "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0",
-        "babel-plugin-transform-es2015-block-scoping": "6.26.0",
-        "babel-plugin-transform-es2015-classes": "6.24.1",
-        "babel-plugin-transform-es2015-computed-properties": "6.24.1",
-        "babel-plugin-transform-es2015-destructuring": "6.23.0",
-        "babel-plugin-transform-es2015-duplicate-keys": "6.24.1",
-        "babel-plugin-transform-es2015-for-of": "6.23.0",
-        "babel-plugin-transform-es2015-function-name": "6.24.1",
-        "babel-plugin-transform-es2015-literals": "6.22.0",
-        "babel-plugin-transform-es2015-modules-amd": "6.24.1",
-        "babel-plugin-transform-es2015-modules-commonjs": "6.26.0",
-        "babel-plugin-transform-es2015-modules-systemjs": "6.24.1",
-        "babel-plugin-transform-es2015-modules-umd": "6.24.1",
-        "babel-plugin-transform-es2015-object-super": "6.24.1",
-        "babel-plugin-transform-es2015-parameters": "6.24.1",
-        "babel-plugin-transform-es2015-shorthand-properties": "6.24.1",
-        "babel-plugin-transform-es2015-spread": "6.22.0",
-        "babel-plugin-transform-es2015-sticky-regex": "6.24.1",
-        "babel-plugin-transform-es2015-template-literals": "6.22.0",
-        "babel-plugin-transform-es2015-typeof-symbol": "6.23.0",
-        "babel-plugin-transform-es2015-unicode-regex": "6.24.1",
-        "babel-plugin-transform-regenerator": "6.26.0"
-      }
-    },
-    "babel-register": {
-      "version": "6.26.0",
-      "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz",
-      "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=",
-      "dev": true,
-      "requires": {
-        "babel-core": "6.26.0",
-        "babel-runtime": "6.26.0",
-        "core-js": "2.5.5",
-        "home-or-tmp": "2.0.0",
-        "lodash": "4.17.5",
-        "mkdirp": "0.5.1",
-        "source-map-support": "0.4.18"
-      }
-    },
-    "babel-runtime": {
-      "version": "6.26.0",
-      "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
-      "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
-      "dev": true,
-      "requires": {
-        "core-js": "2.5.5",
-        "regenerator-runtime": "0.11.1"
-      }
-    },
-    "babel-template": {
-      "version": "6.26.0",
-      "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz",
-      "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=",
-      "dev": true,
-      "requires": {
-        "babel-runtime": "6.26.0",
-        "babel-traverse": "6.26.0",
-        "babel-types": "6.26.0",
-        "babylon": "6.18.0",
-        "lodash": "4.17.5"
-      }
-    },
-    "babel-traverse": {
-      "version": "6.26.0",
-      "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
-      "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
-      "dev": true,
-      "requires": {
-        "babel-code-frame": "6.26.0",
-        "babel-messages": "6.23.0",
-        "babel-runtime": "6.26.0",
-        "babel-types": "6.26.0",
-        "babylon": "6.18.0",
-        "debug": "2.6.9",
-        "globals": "9.18.0",
-        "invariant": "2.2.4",
-        "lodash": "4.17.5"
-      }
-    },
-    "babel-types": {
-      "version": "6.26.0",
-      "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
-      "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
-      "dev": true,
-      "requires": {
-        "babel-runtime": "6.26.0",
-        "esutils": "2.0.2",
-        "lodash": "4.17.5",
-        "to-fast-properties": "1.0.3"
-      }
-    },
-    "babylon": {
-      "version": "6.18.0",
-      "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
-      "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
-      "dev": true
-    },
-    "balanced-match": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
-      "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
-      "dev": true
-    },
-    "base": {
-      "version": "0.11.2",
-      "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
-      "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
-      "dev": true,
-      "requires": {
-        "cache-base": "1.0.1",
-        "class-utils": "0.3.6",
-        "component-emitter": "1.2.1",
-        "define-property": "1.0.0",
-        "isobject": "3.0.1",
-        "mixin-deep": "1.3.1",
-        "pascalcase": "0.1.1"
-      },
-      "dependencies": {
-        "define-property": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
-          "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
-          "dev": true,
-          "requires": {
-            "is-descriptor": "1.0.2"
-          }
-        },
-        "is-accessor-descriptor": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
-          "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
-          "dev": true,
-          "requires": {
-            "kind-of": "6.0.2"
-          }
-        },
-        "is-data-descriptor": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
-          "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
-          "dev": true,
-          "requires": {
-            "kind-of": "6.0.2"
-          }
-        },
-        "is-descriptor": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
-          "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
-          "dev": true,
-          "requires": {
-            "is-accessor-descriptor": "1.0.0",
-            "is-data-descriptor": "1.0.0",
-            "kind-of": "6.0.2"
-          }
-        },
-        "kind-of": {
-          "version": "6.0.2",
-          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
-          "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
-          "dev": true
-        }
-      }
-    },
-    "bcrypt-pbkdf": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz",
-      "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=",
-      "dev": true,
-      "optional": true,
-      "requires": {
-        "tweetnacl": "0.14.5"
-      }
-    },
-    "beeper": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/beeper/-/beeper-1.1.1.tgz",
-      "integrity": "sha1-5tXqjF2tABMEpwsiY4RH9pyy+Ak="
-    },
-    "block-stream": {
-      "version": "0.0.9",
-      "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz",
-      "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=",
-      "dev": true,
-      "requires": {
-        "inherits": "2.0.3"
-      }
-    },
-    "boom": {
-      "version": "4.3.1",
-      "resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz",
-      "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=",
-      "dev": true,
-      "requires": {
-        "hoek": "4.2.1"
-      }
-    },
-    "bower": {
-      "version": "1.8.4",
-      "resolved": "https://registry.npmjs.org/bower/-/bower-1.8.4.tgz",
-      "integrity": "sha1-54dqB23rgTf30GUl3F6MZtuC8oo=",
-      "dev": true
-    },
-    "brace-expansion": {
-      "version": "1.1.11",
-      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
-      "dev": true,
-      "requires": {
-        "balanced-match": "1.0.0",
-        "concat-map": "0.0.1"
-      }
-    },
-    "braces": {
-      "version": "2.3.2",
-      "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
-      "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
-      "dev": true,
-      "requires": {
-        "arr-flatten": "1.1.0",
-        "array-unique": "0.3.2",
-        "extend-shallow": "2.0.1",
-        "fill-range": "4.0.0",
-        "isobject": "3.0.1",
-        "repeat-element": "1.1.2",
-        "snapdragon": "0.8.2",
-        "snapdragon-node": "2.1.1",
-        "split-string": "3.1.0",
-        "to-regex": "3.0.2"
-      },
-      "dependencies": {
-        "extend-shallow": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
-          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
-          "dev": true,
-          "requires": {
-            "is-extendable": "0.1.1"
-          }
-        }
-      }
-    },
-    "browserslist": {
-      "version": "1.7.7",
-      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz",
-      "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=",
-      "dev": true,
-      "requires": {
-        "caniuse-db": "1.0.30000828",
-        "electron-to-chromium": "1.3.42"
-      }
-    },
-    "builtin-modules": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
-      "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=",
-      "dev": true
-    },
-    "cache-base": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
-      "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
-      "dev": true,
-      "requires": {
-        "collection-visit": "1.0.0",
-        "component-emitter": "1.2.1",
-        "get-value": "2.0.6",
-        "has-value": "1.0.0",
-        "isobject": "3.0.1",
-        "set-value": "2.0.0",
-        "to-object-path": "0.3.0",
-        "union-value": "1.0.0",
-        "unset-value": "1.0.0"
-      }
-    },
-    "camelcase": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz",
-      "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk="
-    },
-    "camelcase-keys": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
-      "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
-      "dev": true,
-      "requires": {
-        "camelcase": "2.1.1",
-        "map-obj": "1.0.1"
-      },
-      "dependencies": {
-        "camelcase": {
-          "version": "2.1.1",
-          "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
-          "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
-          "dev": true
-        }
-      }
-    },
-    "caniuse-db": {
-      "version": "1.0.30000828",
-      "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000828.tgz",
-      "integrity": "sha1-7W1vA7WoH7KRw8DgiIKLEacJSL8=",
-      "dev": true
-    },
-    "caseless": {
-      "version": "0.12.0",
-      "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
-      "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
-      "dev": true
-    },
-    "center-align": {
-      "version": "0.1.3",
-      "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz",
-      "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=",
-      "requires": {
-        "align-text": "0.1.4",
-        "lazy-cache": "1.0.4"
-      }
-    },
-    "chalk": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
-      "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
-      "requires": {
-        "ansi-styles": "2.2.1",
-        "escape-string-regexp": "1.0.5",
-        "has-ansi": "2.0.0",
-        "strip-ansi": "3.0.1",
-        "supports-color": "2.0.0"
-      }
-    },
-    "character-parser": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-1.2.1.tgz",
-      "integrity": "sha1-wN3kqxgnE7kZuXCVmhI+zBow/NY="
-    },
-    "class-utils": {
-      "version": "0.3.6",
-      "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
-      "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
-      "dev": true,
-      "requires": {
-        "arr-union": "3.1.0",
-        "define-property": "0.2.5",
-        "isobject": "3.0.1",
-        "static-extend": "0.1.2"
-      },
-      "dependencies": {
-        "define-property": {
-          "version": "0.2.5",
-          "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
-          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
-          "dev": true,
-          "requires": {
-            "is-descriptor": "0.1.6"
-          }
-        }
-      }
-    },
-    "clean-css": {
-      "version": "3.4.28",
-      "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-3.4.28.tgz",
-      "integrity": "sha1-vxlF6C/ICPVWlebd6uwBQA79A/8=",
-      "requires": {
-        "commander": "2.8.1",
-        "source-map": "0.4.4"
-      },
-      "dependencies": {
-        "commander": {
-          "version": "2.8.1",
-          "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz",
-          "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=",
-          "requires": {
-            "graceful-readlink": "1.0.1"
-          }
-        }
-      }
-    },
-    "cli": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/cli/-/cli-1.0.1.tgz",
-      "integrity": "sha1-IoF1NPJL+klQw01TLUjsvGIbjBQ=",
-      "dev": true,
-      "requires": {
-        "exit": "0.1.2",
-        "glob": "7.1.2"
-      },
-      "dependencies": {
-        "glob": {
-          "version": "7.1.2",
-          "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
-          "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
-          "dev": true,
-          "requires": {
-            "fs.realpath": "1.0.0",
-            "inflight": "1.0.6",
-            "inherits": "2.0.3",
-            "minimatch": "3.0.4",
-            "once": "1.3.3",
-            "path-is-absolute": "1.0.1"
-          }
-        },
-        "minimatch": {
-          "version": "3.0.4",
-          "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
-          "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
-          "dev": true,
-          "requires": {
-            "brace-expansion": "1.1.11"
-          }
-        }
-      }
-    },
-    "cliui": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz",
-      "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=",
-      "requires": {
-        "center-align": "0.1.3",
-        "right-align": "0.1.3",
-        "wordwrap": "0.0.2"
-      },
-      "dependencies": {
-        "wordwrap": {
-          "version": "0.0.2",
-          "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz",
-          "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8="
-        }
-      }
-    },
-    "clone": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
-      "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4="
-    },
-    "clone-buffer": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz",
-      "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=",
-      "dev": true
-    },
-    "clone-stats": {
-      "version": "0.0.1",
-      "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz",
-      "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE="
-    },
-    "cloneable-readable": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.2.tgz",
-      "integrity": "sha512-Bq6+4t+lbM8vhTs/Bef5c5AdEMtapp/iFb6+s4/Hh9MVTt8OLKH7ZOOZSCT+Ys7hsHvqv0GuMPJ1lnQJVHvxpg==",
-      "dev": true,
-      "requires": {
-        "inherits": "2.0.3",
-        "process-nextick-args": "2.0.0",
-        "readable-stream": "2.3.6"
-      },
-      "dependencies": {
-        "isarray": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
-          "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
-          "dev": true
-        },
-        "readable-stream": {
-          "version": "2.3.6",
-          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
-          "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
-          "dev": true,
-          "requires": {
-            "core-util-is": "1.0.2",
-            "inherits": "2.0.3",
-            "isarray": "1.0.0",
-            "process-nextick-args": "2.0.0",
-            "safe-buffer": "5.1.1",
-            "string_decoder": "1.1.1",
-            "util-deprecate": "1.0.2"
-          }
-        },
-        "string_decoder": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
-          "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
-          "dev": true,
-          "requires": {
-            "safe-buffer": "5.1.1"
-          }
-        }
-      }
-    },
-    "co": {
-      "version": "4.6.0",
-      "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
-      "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
-      "dev": true
-    },
-    "code-point-at": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
-      "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
-      "dev": true
-    },
-    "collection-visit": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
-      "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
-      "dev": true,
-      "requires": {
-        "map-visit": "1.0.0",
-        "object-visit": "1.0.1"
-      }
-    },
-    "color-support": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
-      "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg=="
-    },
-    "combined-stream": {
-      "version": "1.0.6",
-      "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz",
-      "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=",
-      "dev": true,
-      "requires": {
-        "delayed-stream": "1.0.0"
-      }
-    },
-    "commander": {
-      "version": "2.6.0",
-      "resolved": "https://registry.npmjs.org/commander/-/commander-2.6.0.tgz",
-      "integrity": "sha1-nfflL7Kgyw+4kFjugMMQQiXzfh0="
-    },
-    "component-emitter": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
-      "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
-      "dev": true
-    },
-    "concat-map": {
-      "version": "0.0.1",
-      "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
-      "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
-      "dev": true
-    },
-    "concat-with-sourcemaps": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/concat-with-sourcemaps/-/concat-with-sourcemaps-1.0.5.tgz",
-      "integrity": "sha512-YtnS0VEY+e2Khzsey/6mra9EoM6h/5gxaC0e3mcHpA5yfDxafhygytNmcJWodvUgyXzSiL5MSkPO6bQGgfliHw==",
-      "dev": true,
-      "requires": {
-        "source-map": "0.6.1"
-      },
-      "dependencies": {
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
-          "dev": true
-        }
-      }
-    },
-    "console-browserify": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz",
-      "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=",
-      "dev": true,
-      "requires": {
-        "date-now": "0.1.4"
-      }
-    },
-    "console-control-strings": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
-      "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
-      "dev": true
-    },
-    "constantinople": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-3.0.2.tgz",
-      "integrity": "sha1-S5RdmTeQe82Y7ldRIsOBdRZUQUE=",
-      "requires": {
-        "acorn": "2.7.0"
-      }
-    },
-    "convert-source-map": {
-      "version": "1.5.1",
-      "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz",
-      "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=",
-      "dev": true
-    },
-    "copy-descriptor": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
-      "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
-      "dev": true
-    },
-    "core-js": {
-      "version": "2.5.5",
-      "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.5.tgz",
-      "integrity": "sha1-sU3ek2xkDAV5prUMq8wTLdYSfjs=",
-      "dev": true
-    },
-    "core-util-is": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
-      "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
-    },
-    "cross-spawn": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz",
-      "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=",
-      "dev": true,
-      "requires": {
-        "lru-cache": "4.1.2",
-        "which": "1.3.0"
-      },
-      "dependencies": {
-        "lru-cache": {
-          "version": "4.1.2",
-          "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.2.tgz",
-          "integrity": "sha512-wgeVXhrDwAWnIF/yZARsFnMBtdFXOg1b8RIrhilp+0iDYN4mdQcNZElDZ0e4B64BhaxeQ5zN7PMyvu7we1kPeQ==",
-          "dev": true,
-          "requires": {
-            "pseudomap": "1.0.2",
-            "yallist": "2.1.2"
-          }
-        }
-      }
-    },
-    "cryptiles": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz",
-      "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=",
-      "dev": true,
-      "requires": {
-        "boom": "5.2.0"
-      },
-      "dependencies": {
-        "boom": {
-          "version": "5.2.0",
-          "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz",
-          "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==",
-          "dev": true,
-          "requires": {
-            "hoek": "4.2.1"
-          }
-        }
-      }
-    },
-    "css": {
-      "version": "1.0.8",
-      "resolved": "https://registry.npmjs.org/css/-/css-1.0.8.tgz",
-      "integrity": "sha1-k4aBHKgrzMnuf7WnMrHioxfIo+c=",
-      "requires": {
-        "css-parse": "1.0.4",
-        "css-stringify": "1.0.5"
-      }
-    },
-    "css-parse": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/css-parse/-/css-parse-1.0.4.tgz",
-      "integrity": "sha1-OLBQP7+dqfVOnB29pg4UXHcRe90="
-    },
-    "css-stringify": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/css-stringify/-/css-stringify-1.0.5.tgz",
-      "integrity": "sha1-sNBClG2ylTu50pKQCmy19tASIDE="
-    },
-    "currently-unhandled": {
-      "version": "0.4.1",
-      "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
-      "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
-      "dev": true,
-      "requires": {
-        "array-find-index": "1.0.2"
-      }
-    },
-    "dashdash": {
-      "version": "1.14.1",
-      "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
-      "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
-      "dev": true,
-      "requires": {
-        "assert-plus": "1.0.0"
-      }
-    },
-    "date-now": {
-      "version": "0.1.4",
-      "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz",
-      "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=",
-      "dev": true
-    },
-    "dateformat": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-2.2.0.tgz",
-      "integrity": "sha1-QGXiATz5+5Ft39gu+1Bq1MZ2kGI="
-    },
-    "debug": {
-      "version": "2.6.9",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
-      "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
-      "dev": true,
-      "requires": {
-        "ms": "2.0.0"
-      }
-    },
-    "debug-fabulous": {
-      "version": "0.0.4",
-      "resolved": "https://registry.npmjs.org/debug-fabulous/-/debug-fabulous-0.0.4.tgz",
-      "integrity": "sha1-+gccXYdIRoVCSAdCHKSxawsaB2M=",
-      "dev": true,
-      "requires": {
-        "debug": "2.6.9",
-        "lazy-debug-legacy": "0.0.1",
-        "object-assign": "4.1.0"
-      },
-      "dependencies": {
-        "object-assign": {
-          "version": "4.1.0",
-          "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz",
-          "integrity": "sha1-ejs9DpgGPUP0wD8uiubNUahog6A=",
-          "dev": true
-        }
-      }
-    },
-    "decamelize": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
-      "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
-    },
-    "decode-uri-component": {
-      "version": "0.2.0",
-      "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
-      "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
-      "dev": true
-    },
-    "defaults": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz",
-      "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=",
-      "dev": true,
-      "requires": {
-        "clone": "1.0.4"
-      }
-    },
-    "define-property": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
-      "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
-      "dev": true,
-      "requires": {
-        "is-descriptor": "1.0.2",
-        "isobject": "3.0.1"
-      },
-      "dependencies": {
-        "is-accessor-descriptor": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
-          "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
-          "dev": true,
-          "requires": {
-            "kind-of": "6.0.2"
-          }
-        },
-        "is-data-descriptor": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
-          "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
-          "dev": true,
-          "requires": {
-            "kind-of": "6.0.2"
-          }
-        },
-        "is-descriptor": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
-          "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
-          "dev": true,
-          "requires": {
-            "is-accessor-descriptor": "1.0.0",
-            "is-data-descriptor": "1.0.0",
-            "kind-of": "6.0.2"
-          }
-        },
-        "kind-of": {
-          "version": "6.0.2",
-          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
-          "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
-          "dev": true
-        }
-      }
-    },
-    "delayed-stream": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
-      "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
-      "dev": true
-    },
-    "delegates": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
-      "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
-      "dev": true
-    },
-    "deprecated": {
-      "version": "0.0.1",
-      "resolved": "https://registry.npmjs.org/deprecated/-/deprecated-0.0.1.tgz",
-      "integrity": "sha1-+cmvVGSvoeepcUWKi97yqpTVuxk=",
-      "dev": true
-    },
-    "detect-file": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz",
-      "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=",
-      "dev": true
-    },
-    "detect-indent": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
-      "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
-      "dev": true,
-      "requires": {
-        "repeating": "2.0.1"
-      }
-    },
-    "detect-newline": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz",
-      "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=",
-      "dev": true
-    },
-    "dom-serializer": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz",
-      "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=",
-      "dev": true,
-      "requires": {
-        "domelementtype": "1.1.3",
-        "entities": "1.1.1"
-      },
-      "dependencies": {
-        "domelementtype": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz",
-          "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=",
-          "dev": true
-        },
-        "entities": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz",
-          "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=",
-          "dev": true
-        }
-      }
-    },
-    "domelementtype": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz",
-      "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=",
-      "dev": true
-    },
-    "domhandler": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz",
-      "integrity": "sha1-LeWaCCLVAn+r/28DLCsloqir5zg=",
-      "dev": true,
-      "requires": {
-        "domelementtype": "1.3.0"
-      }
-    },
-    "domutils": {
-      "version": "1.5.1",
-      "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz",
-      "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=",
-      "dev": true,
-      "requires": {
-        "dom-serializer": "0.1.0",
-        "domelementtype": "1.3.0"
-      }
-    },
-    "duplexer2": {
-      "version": "0.0.2",
-      "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz",
-      "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=",
-      "requires": {
-        "readable-stream": "1.1.14"
-      }
-    },
-    "ecc-jsbn": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz",
-      "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=",
-      "dev": true,
-      "optional": true,
-      "requires": {
-        "jsbn": "0.1.1"
-      }
-    },
-    "electron-to-chromium": {
-      "version": "1.3.42",
-      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.42.tgz",
-      "integrity": "sha1-lcM78B0MxAVVauyJn+Yf1NduoPk=",
-      "dev": true
-    },
-    "end-of-stream": {
-      "version": "0.1.5",
-      "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-0.1.5.tgz",
-      "integrity": "sha1-jhdyBsPICDfYVjLouTWd/osvbq8=",
-      "dev": true,
-      "requires": {
-        "once": "1.3.3"
-      }
-    },
-    "entities": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz",
-      "integrity": "sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY=",
-      "dev": true
-    },
-    "error-ex": {
-      "version": "1.3.1",
-      "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz",
-      "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=",
-      "dev": true,
-      "requires": {
-        "is-arrayish": "0.2.1"
-      }
-    },
-    "escape-string-regexp": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
-      "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
-    },
-    "esutils": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
-      "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
-      "dev": true
-    },
-    "exit": {
-      "version": "0.1.2",
-      "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
-      "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=",
-      "dev": true
-    },
-    "expand-brackets": {
-      "version": "2.1.4",
-      "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
-      "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
-      "dev": true,
-      "requires": {
-        "debug": "2.6.9",
-        "define-property": "0.2.5",
-        "extend-shallow": "2.0.1",
-        "posix-character-classes": "0.1.1",
-        "regex-not": "1.0.2",
-        "snapdragon": "0.8.2",
-        "to-regex": "3.0.2"
-      },
-      "dependencies": {
-        "define-property": {
-          "version": "0.2.5",
-          "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
-          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
-          "dev": true,
-          "requires": {
-            "is-descriptor": "0.1.6"
-          }
-        },
-        "extend-shallow": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
-          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
-          "dev": true,
-          "requires": {
-            "is-extendable": "0.1.1"
-          }
-        }
-      }
-    },
-    "expand-tilde": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz",
-      "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=",
-      "dev": true,
-      "requires": {
-        "homedir-polyfill": "1.0.1"
-      }
-    },
-    "extend": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz",
-      "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=",
-      "dev": true
-    },
-    "extend-shallow": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
-      "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
-      "dev": true,
-      "requires": {
-        "assign-symbols": "1.0.0",
-        "is-extendable": "1.0.1"
-      },
-      "dependencies": {
-        "is-extendable": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
-          "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
-          "dev": true,
-          "requires": {
-            "is-plain-object": "2.0.4"
-          }
-        }
-      }
-    },
-    "extglob": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
-      "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
-      "dev": true,
-      "requires": {
-        "array-unique": "0.3.2",
-        "define-property": "1.0.0",
-        "expand-brackets": "2.1.4",
-        "extend-shallow": "2.0.1",
-        "fragment-cache": "0.2.1",
-        "regex-not": "1.0.2",
-        "snapdragon": "0.8.2",
-        "to-regex": "3.0.2"
-      },
-      "dependencies": {
-        "define-property": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
-          "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
-          "dev": true,
-          "requires": {
-            "is-descriptor": "1.0.2"
-          }
-        },
-        "extend-shallow": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
-          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
-          "dev": true,
-          "requires": {
-            "is-extendable": "0.1.1"
-          }
-        },
-        "is-accessor-descriptor": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
-          "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
-          "dev": true,
-          "requires": {
-            "kind-of": "6.0.2"
-          }
-        },
-        "is-data-descriptor": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
-          "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
-          "dev": true,
-          "requires": {
-            "kind-of": "6.0.2"
-          }
-        },
-        "is-descriptor": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
-          "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
-          "dev": true,
-          "requires": {
-            "is-accessor-descriptor": "1.0.0",
-            "is-data-descriptor": "1.0.0",
-            "kind-of": "6.0.2"
-          }
-        },
-        "kind-of": {
-          "version": "6.0.2",
-          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
-          "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
-          "dev": true
-        }
-      }
-    },
-    "extsprintf": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
-      "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
-      "dev": true
-    },
-    "fancy-log": {
-      "version": "1.3.2",
-      "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.2.tgz",
-      "integrity": "sha1-9BEl49hPLn2JpD0G2VjI94vha+E=",
-      "requires": {
-        "ansi-gray": "0.1.1",
-        "color-support": "1.1.3",
-        "time-stamp": "1.1.0"
-      }
-    },
-    "fast-deep-equal": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz",
-      "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=",
-      "dev": true
-    },
-    "fast-json-stable-stringify": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
-      "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=",
-      "dev": true
-    },
-    "fill-range": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
-      "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
-      "dev": true,
-      "requires": {
-        "extend-shallow": "2.0.1",
-        "is-number": "3.0.0",
-        "repeat-string": "1.6.1",
-        "to-regex-range": "2.1.1"
-      },
-      "dependencies": {
-        "extend-shallow": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
-          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
-          "dev": true,
-          "requires": {
-            "is-extendable": "0.1.1"
-          }
-        }
-      }
-    },
-    "find-index": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/find-index/-/find-index-0.1.1.tgz",
-      "integrity": "sha1-Z101iyyjiS15Whq0cjL4tuLg3eQ=",
-      "dev": true
-    },
-    "find-up": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
-      "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
-      "dev": true,
-      "requires": {
-        "path-exists": "2.1.0",
-        "pinkie-promise": "2.0.1"
-      }
-    },
-    "findup-sync": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz",
-      "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=",
-      "dev": true,
-      "requires": {
-        "detect-file": "1.0.0",
-        "is-glob": "3.1.0",
-        "micromatch": "3.1.10",
-        "resolve-dir": "1.0.1"
-      }
-    },
-    "fined": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/fined/-/fined-1.1.0.tgz",
-      "integrity": "sha1-s33IRLdqL15wgeiE98CuNE8VNHY=",
-      "dev": true,
-      "requires": {
-        "expand-tilde": "2.0.2",
-        "is-plain-object": "2.0.4",
-        "object.defaults": "1.1.0",
-        "object.pick": "1.3.0",
-        "parse-filepath": "1.0.2"
-      }
-    },
-    "first-chunk-stream": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz",
-      "integrity": "sha1-Wb+1DNkF9g18OUzT2ayqtOatk04=",
-      "dev": true
-    },
-    "flagged-respawn": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.0.tgz",
-      "integrity": "sha1-Tnmumy6zi/hrO7Vr8+ClaqX8q9c=",
-      "dev": true
-    },
-    "for-in": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
-      "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
-      "dev": true
-    },
-    "for-own": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz",
-      "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=",
-      "dev": true,
-      "requires": {
-        "for-in": "1.0.2"
-      }
-    },
-    "forever-agent": {
-      "version": "0.6.1",
-      "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
-      "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
-      "dev": true
-    },
-    "form-data": {
-      "version": "2.3.2",
-      "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz",
-      "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=",
-      "dev": true,
-      "requires": {
-        "asynckit": "0.4.0",
-        "combined-stream": "1.0.6",
-        "mime-types": "2.1.18"
-      }
-    },
-    "fragment-cache": {
-      "version": "0.2.1",
-      "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
-      "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
-      "dev": true,
-      "requires": {
-        "map-cache": "0.2.2"
-      }
-    },
-    "fs.realpath": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
-      "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
-      "dev": true
-    },
-    "fstream": {
-      "version": "1.0.11",
-      "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz",
-      "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=",
-      "dev": true,
-      "requires": {
-        "graceful-fs": "4.1.11",
-        "inherits": "2.0.3",
-        "mkdirp": "0.5.1",
-        "rimraf": "2.6.2"
-      },
-      "dependencies": {
-        "graceful-fs": {
-          "version": "4.1.11",
-          "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
-          "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
-          "dev": true
-        }
-      }
-    },
-    "gauge": {
-      "version": "2.7.4",
-      "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
-      "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
-      "dev": true,
-      "requires": {
-        "aproba": "1.2.0",
-        "console-control-strings": "1.1.0",
-        "has-unicode": "2.0.1",
-        "object-assign": "4.1.1",
-        "signal-exit": "3.0.2",
-        "string-width": "1.0.2",
-        "strip-ansi": "3.0.1",
-        "wide-align": "1.1.2"
-      },
-      "dependencies": {
-        "object-assign": {
-          "version": "4.1.1",
-          "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
-          "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
-          "dev": true
-        }
-      }
-    },
-    "gaze": {
-      "version": "0.5.2",
-      "resolved": "https://registry.npmjs.org/gaze/-/gaze-0.5.2.tgz",
-      "integrity": "sha1-QLcJU30k0dRXZ9takIaJ3+aaxE8=",
-      "dev": true,
-      "requires": {
-        "globule": "0.1.0"
-      }
-    },
-    "get-caller-file": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz",
-      "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=",
-      "dev": true
-    },
-    "get-stdin": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
-      "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
-      "dev": true
-    },
-    "get-value": {
-      "version": "2.0.6",
-      "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
-      "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
-      "dev": true
-    },
-    "getpass": {
-      "version": "0.1.7",
-      "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
-      "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
-      "dev": true,
-      "requires": {
-        "assert-plus": "1.0.0"
-      }
-    },
-    "glob": {
-      "version": "4.5.3",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-4.5.3.tgz",
-      "integrity": "sha1-xstz0yJsHv7wTePFbQEvAzd+4V8=",
-      "dev": true,
-      "requires": {
-        "inflight": "1.0.6",
-        "inherits": "2.0.3",
-        "minimatch": "2.0.10",
-        "once": "1.3.3"
-      }
-    },
-    "glob-stream": {
-      "version": "3.1.18",
-      "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-3.1.18.tgz",
-      "integrity": "sha1-kXCl8St5Awb9/lmPMT+PeVT9FDs=",
-      "dev": true,
-      "requires": {
-        "glob": "4.5.3",
-        "glob2base": "0.0.12",
-        "minimatch": "2.0.10",
-        "ordered-read-streams": "0.1.0",
-        "through2": "0.6.5",
-        "unique-stream": "1.0.0"
-      },
-      "dependencies": {
-        "readable-stream": {
-          "version": "1.0.34",
-          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
-          "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
-          "dev": true,
-          "requires": {
-            "core-util-is": "1.0.2",
-            "inherits": "2.0.3",
-            "isarray": "0.0.1",
-            "string_decoder": "0.10.31"
-          }
-        },
-        "through2": {
-          "version": "0.6.5",
-          "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz",
-          "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=",
-          "dev": true,
-          "requires": {
-            "readable-stream": "1.0.34",
-            "xtend": "4.0.1"
-          }
-        }
-      }
-    },
-    "glob-watcher": {
-      "version": "0.0.6",
-      "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-0.0.6.tgz",
-      "integrity": "sha1-uVtKjfdLOcgymLDAXJeLTZo7cQs=",
-      "dev": true,
-      "requires": {
-        "gaze": "0.5.2"
-      }
-    },
-    "glob2base": {
-      "version": "0.0.12",
-      "resolved": "https://registry.npmjs.org/glob2base/-/glob2base-0.0.12.tgz",
-      "integrity": "sha1-nUGbPijxLoOjYhZKJ3BVkiycDVY=",
-      "dev": true,
-      "requires": {
-        "find-index": "0.1.1"
-      }
-    },
-    "global-modules": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz",
-      "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==",
-      "dev": true,
-      "requires": {
-        "global-prefix": "1.0.2",
-        "is-windows": "1.0.2",
-        "resolve-dir": "1.0.1"
-      }
-    },
-    "global-prefix": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz",
-      "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=",
-      "dev": true,
-      "requires": {
-        "expand-tilde": "2.0.2",
-        "homedir-polyfill": "1.0.1",
-        "ini": "1.3.5",
-        "is-windows": "1.0.2",
-        "which": "1.3.0"
-      }
-    },
-    "globals": {
-      "version": "9.18.0",
-      "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
-      "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
-      "dev": true
-    },
-    "globule": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npmjs.org/globule/-/globule-0.1.0.tgz",
-      "integrity": "sha1-2cjt3h2nnRJaFRt5UzuXhnY0auU=",
-      "dev": true,
-      "requires": {
-        "glob": "3.1.21",
-        "lodash": "1.0.2",
-        "minimatch": "0.2.14"
-      },
-      "dependencies": {
-        "glob": {
-          "version": "3.1.21",
-          "resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz",
-          "integrity": "sha1-0p4KBV3qUTj00H7UDomC6DwgZs0=",
-          "dev": true,
-          "requires": {
-            "graceful-fs": "1.2.3",
-            "inherits": "1.0.2",
-            "minimatch": "0.2.14"
-          }
-        },
-        "graceful-fs": {
-          "version": "1.2.3",
-          "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz",
-          "integrity": "sha1-FaSAaldUfLLS2/J/QuiajDRRs2Q=",
-          "dev": true
-        },
-        "inherits": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz",
-          "integrity": "sha1-ykMJ2t7mtUzAuNJH6NfHoJdb3Js=",
-          "dev": true
-        },
-        "lodash": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npmjs.org/lodash/-/lodash-1.0.2.tgz",
-          "integrity": "sha1-j1dWDIO1n8JwvT1WG2kAQ0MOJVE=",
-          "dev": true
-        },
-        "minimatch": {
-          "version": "0.2.14",
-          "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz",
-          "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=",
-          "dev": true,
-          "requires": {
-            "lru-cache": "2.7.3",
-            "sigmund": "1.0.1"
-          }
-        }
-      }
-    },
-    "glogg": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.1.tgz",
-      "integrity": "sha512-ynYqXLoluBKf9XGR1gA59yEJisIL7YHEH4xr3ZziHB5/yl4qWfaK8Js9jGe6gBGCSCKVqiyO30WnRZADvemUNw==",
-      "requires": {
-        "sparkles": "1.0.0"
-      }
-    },
-    "graceful-fs": {
-      "version": "3.0.11",
-      "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.11.tgz",
-      "integrity": "sha1-dhPHeKGv6mLyXGMKCG1/Osu92Bg=",
-      "dev": true,
-      "requires": {
-        "natives": "1.1.3"
-      }
-    },
-    "graceful-readlink": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz",
-      "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU="
-    },
-    "gulp": {
-      "version": "3.9.1",
-      "resolved": "https://registry.npmjs.org/gulp/-/gulp-3.9.1.tgz",
-      "integrity": "sha1-VxzkWSjdQK9lFPxAEYZgFsE4RbQ=",
-      "dev": true,
-      "requires": {
-        "archy": "1.0.0",
-        "chalk": "1.1.3",
-        "deprecated": "0.0.1",
-        "gulp-util": "3.0.8",
-        "interpret": "1.1.0",
-        "liftoff": "2.5.0",
-        "minimist": "1.2.0",
-        "orchestrator": "0.3.8",
-        "pretty-hrtime": "1.0.3",
-        "semver": "4.3.6",
-        "tildify": "1.2.0",
-        "v8flags": "2.1.1",
-        "vinyl-fs": "0.3.14"
-      },
-      "dependencies": {
-        "semver": {
-          "version": "4.3.6",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz",
-          "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=",
-          "dev": true
-        }
-      }
-    },
-    "gulp-autoprefixer": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/gulp-autoprefixer/-/gulp-autoprefixer-3.1.1.tgz",
-      "integrity": "sha1-dSMAUc0NFxND14O36bXREg7u+bA=",
-      "dev": true,
-      "requires": {
-        "autoprefixer": "6.7.7",
-        "gulp-util": "3.0.8",
-        "postcss": "5.2.18",
-        "through2": "2.0.3",
-        "vinyl-sourcemaps-apply": "0.2.1"
-      },
-      "dependencies": {
-        "isarray": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
-          "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
-          "dev": true
-        },
-        "readable-stream": {
-          "version": "2.3.6",
-          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
-          "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
-          "dev": true,
-          "requires": {
-            "core-util-is": "1.0.2",
-            "inherits": "2.0.3",
-            "isarray": "1.0.0",
-            "process-nextick-args": "2.0.0",
-            "safe-buffer": "5.1.1",
-            "string_decoder": "1.1.1",
-            "util-deprecate": "1.0.2"
-          }
-        },
-        "string_decoder": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
-          "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
-          "dev": true,
-          "requires": {
-            "safe-buffer": "5.1.1"
-          }
-        },
-        "through2": {
-          "version": "2.0.3",
-          "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
-          "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
-          "dev": true,
-          "requires": {
-            "readable-stream": "2.3.6",
-            "xtend": "4.0.1"
-          }
-        }
-      }
-    },
-    "gulp-babel": {
-      "version": "6.1.3",
-      "resolved": "https://registry.npmjs.org/gulp-babel/-/gulp-babel-6.1.3.tgz",
-      "integrity": "sha512-tm15R3rt4gO59WXCuqrwf4QXJM9VIJC+0J2NPYSC6xZn+cZRD5y5RPGAiHaDxCJq7Rz5BDljlrk3cEjWADF+wQ==",
-      "dev": true,
-      "requires": {
-        "babel-core": "6.26.0",
-        "object-assign": "4.1.1",
-        "plugin-error": "1.0.1",
-        "replace-ext": "0.0.1",
-        "through2": "2.0.3",
-        "vinyl-sourcemaps-apply": "0.2.1"
-      },
-      "dependencies": {
-        "isarray": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
-          "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
-          "dev": true
-        },
-        "object-assign": {
-          "version": "4.1.1",
-          "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
-          "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
-          "dev": true
-        },
-        "readable-stream": {
-          "version": "2.3.6",
-          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
-          "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
-          "dev": true,
-          "requires": {
-            "core-util-is": "1.0.2",
-            "inherits": "2.0.3",
-            "isarray": "1.0.0",
-            "process-nextick-args": "2.0.0",
-            "safe-buffer": "5.1.1",
-            "string_decoder": "1.1.1",
-            "util-deprecate": "1.0.2"
-          }
-        },
-        "string_decoder": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
-          "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
-          "dev": true,
-          "requires": {
-            "safe-buffer": "5.1.1"
-          }
-        },
-        "through2": {
-          "version": "2.0.3",
-          "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
-          "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
-          "dev": true,
-          "requires": {
-            "readable-stream": "2.3.6",
-            "xtend": "4.0.1"
-          }
-        }
-      }
-    },
-    "gulp-clean": {
-      "version": "0.3.2",
-      "resolved": "https://registry.npmjs.org/gulp-clean/-/gulp-clean-0.3.2.tgz",
-      "integrity": "sha1-o0fUc6zqQBgvk1WHpFGUFnGSgQI=",
-      "dev": true,
-      "requires": {
-        "gulp-util": "2.2.20",
-        "rimraf": "2.6.2",
-        "through2": "0.4.2"
-      },
-      "dependencies": {
-        "ansi-regex": {
-          "version": "0.2.1",
-          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz",
-          "integrity": "sha1-DY6UaWej2BQ/k+JOKYUl/BsiNfk=",
-          "dev": true
-        },
-        "ansi-styles": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.1.0.tgz",
-          "integrity": "sha1-6uy/Zs1waIJ2Cy9GkVgrj1XXp94=",
-          "dev": true
-        },
-        "chalk": {
-          "version": "0.5.1",
-          "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz",
-          "integrity": "sha1-Zjs6ZItotV0EaQ1JFnqoN4WPIXQ=",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "1.1.0",
-            "escape-string-regexp": "1.0.5",
-            "has-ansi": "0.1.0",
-            "strip-ansi": "0.3.0",
-            "supports-color": "0.2.0"
-          }
-        },
-        "dateformat": {
-          "version": "1.0.12",
-          "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz",
-          "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=",
-          "dev": true,
-          "requires": {
-            "get-stdin": "4.0.1",
-            "meow": "3.7.0"
-          }
-        },
-        "gulp-util": {
-          "version": "2.2.20",
-          "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-2.2.20.tgz",
-          "integrity": "sha1-1xRuVyiRC9jwR6awseVJvCLb1kw=",
-          "dev": true,
-          "requires": {
-            "chalk": "0.5.1",
-            "dateformat": "1.0.12",
-            "lodash._reinterpolate": "2.4.1",
-            "lodash.template": "2.4.1",
-            "minimist": "0.2.0",
-            "multipipe": "0.1.2",
-            "through2": "0.5.1",
-            "vinyl": "0.2.3"
-          },
-          "dependencies": {
-            "through2": {
-              "version": "0.5.1",
-              "resolved": "https://registry.npmjs.org/through2/-/through2-0.5.1.tgz",
-              "integrity": "sha1-390BLrnHAOIyP9M084rGIqs3Lac=",
-              "dev": true,
-              "requires": {
-                "readable-stream": "1.0.34",
-                "xtend": "3.0.0"
-              }
-            }
-          }
-        },
-        "has-ansi": {
-          "version": "0.1.0",
-          "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-0.1.0.tgz",
-          "integrity": "sha1-hPJlqujA5qiKEtcCKJS3VoiUxi4=",
-          "dev": true,
-          "requires": {
-            "ansi-regex": "0.2.1"
-          }
-        },
-        "lodash._reinterpolate": {
-          "version": "2.4.1",
-          "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-2.4.1.tgz",
-          "integrity": "sha1-TxInqlqHEfxjL1sHofRgequLMiI=",
-          "dev": true
-        },
-        "lodash.escape": {
-          "version": "2.4.1",
-          "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-2.4.1.tgz",
-          "integrity": "sha1-LOEsXghNsKV92l5dHu659dF1o7Q=",
-          "dev": true,
-          "requires": {
-            "lodash._escapehtmlchar": "2.4.1",
-            "lodash._reunescapedhtml": "2.4.1",
-            "lodash.keys": "2.4.1"
-          }
-        },
-        "lodash.keys": {
-          "version": "2.4.1",
-          "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-2.4.1.tgz",
-          "integrity": "sha1-SN6kbfj/djKxDXBrissmWR4rNyc=",
-          "dev": true,
-          "requires": {
-            "lodash._isnative": "2.4.1",
-            "lodash._shimkeys": "2.4.1",
-            "lodash.isobject": "2.4.1"
-          }
-        },
-        "lodash.template": {
-          "version": "2.4.1",
-          "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-2.4.1.tgz",
-          "integrity": "sha1-nmEQB+32KRKal0qzxIuBez4c8g0=",
-          "dev": true,
-          "requires": {
-            "lodash._escapestringchar": "2.4.1",
-            "lodash._reinterpolate": "2.4.1",
-            "lodash.defaults": "2.4.1",
-            "lodash.escape": "2.4.1",
-            "lodash.keys": "2.4.1",
-            "lodash.templatesettings": "2.4.1",
-            "lodash.values": "2.4.1"
-          }
-        },
-        "lodash.templatesettings": {
-          "version": "2.4.1",
-          "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-2.4.1.tgz",
-          "integrity": "sha1-6nbHXRHrhtTb6JqDiTu4YZKaxpk=",
-          "dev": true,
-          "requires": {
-            "lodash._reinterpolate": "2.4.1",
-            "lodash.escape": "2.4.1"
-          }
-        },
-        "minimist": {
-          "version": "0.2.0",
-          "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.2.0.tgz",
-          "integrity": "sha1-Tf/lJdriuGTGbC4jxicdev3s784=",
-          "dev": true
-        },
-        "readable-stream": {
-          "version": "1.0.34",
-          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
-          "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
-          "dev": true,
-          "requires": {
-            "core-util-is": "1.0.2",
-            "inherits": "2.0.3",
-            "isarray": "0.0.1",
-            "string_decoder": "0.10.31"
-          }
-        },
-        "strip-ansi": {
-          "version": "0.3.0",
-          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz",
-          "integrity": "sha1-JfSOoiynkYfzF0pNuHWTR7sSYiA=",
-          "dev": true,
-          "requires": {
-            "ansi-regex": "0.2.1"
-          }
-        },
-        "supports-color": {
-          "version": "0.2.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-0.2.0.tgz",
-          "integrity": "sha1-2S3iaU6z9nMjlz1649i1W0wiGQo=",
-          "dev": true
-        },
-        "through2": {
-          "version": "0.4.2",
-          "resolved": "https://registry.npmjs.org/through2/-/through2-0.4.2.tgz",
-          "integrity": "sha1-2/WGYDEVHsg1K7bE22SiKSqEC5s=",
-          "dev": true,
-          "requires": {
-            "readable-stream": "1.0.34",
-            "xtend": "2.1.2"
-          },
-          "dependencies": {
-            "xtend": {
-              "version": "2.1.2",
-              "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz",
-              "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=",
-              "dev": true,
-              "requires": {
-                "object-keys": "0.4.0"
-              }
-            }
-          }
-        },
-        "vinyl": {
-          "version": "0.2.3",
-          "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.2.3.tgz",
-          "integrity": "sha1-vKk4IJWC7FpJrVOKAPofEl5RMlI=",
-          "dev": true,
-          "requires": {
-            "clone-stats": "0.0.1"
-          }
-        },
-        "xtend": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz",
-          "integrity": "sha1-XM50B7r2Qsunvs2laBEcST9ZZlo=",
-          "dev": true
-        }
-      }
-    },
-    "gulp-concat": {
-      "version": "2.6.1",
-      "resolved": "https://registry.npmjs.org/gulp-concat/-/gulp-concat-2.6.1.tgz",
-      "integrity": "sha1-Yz0WyV2IUEYorQJmVmPO5aR5M1M=",
-      "dev": true,
-      "requires": {
-        "concat-with-sourcemaps": "1.0.5",
-        "through2": "2.0.3",
-        "vinyl": "2.1.0"
-      },
-      "dependencies": {
-        "clone": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
-          "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=",
-          "dev": true
-        },
-        "clone-stats": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz",
-          "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=",
-          "dev": true
-        },
-        "isarray": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
-          "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
-          "dev": true
-        },
-        "readable-stream": {
-          "version": "2.3.6",
-          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
-          "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
-          "dev": true,
-          "requires": {
-            "core-util-is": "1.0.2",
-            "inherits": "2.0.3",
-            "isarray": "1.0.0",
-            "process-nextick-args": "2.0.0",
-            "safe-buffer": "5.1.1",
-            "string_decoder": "1.1.1",
-            "util-deprecate": "1.0.2"
-          }
-        },
-        "replace-ext": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz",
-          "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=",
-          "dev": true
-        },
-        "string_decoder": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
-          "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
-          "dev": true,
-          "requires": {
-            "safe-buffer": "5.1.1"
-          }
-        },
-        "through2": {
-          "version": "2.0.3",
-          "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
-          "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
-          "dev": true,
-          "requires": {
-            "readable-stream": "2.3.6",
-            "xtend": "4.0.1"
-          }
-        },
-        "vinyl": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.1.0.tgz",
-          "integrity": "sha1-Ah+cLPlR1rk5lDyJ617lrdT9kkw=",
-          "dev": true,
-          "requires": {
-            "clone": "2.1.2",
-            "clone-buffer": "1.0.0",
-            "clone-stats": "1.0.0",
-            "cloneable-readable": "1.1.2",
-            "remove-trailing-separator": "1.1.0",
-            "replace-ext": "1.0.0"
-          }
-        }
-      }
-    },
-    "gulp-copy": {
-      "version": "0.0.2",
-      "resolved": "https://registry.npmjs.org/gulp-copy/-/gulp-copy-0.0.2.tgz",
-      "integrity": "sha1-PcyMQmepweDKC4P6unDOir8lqIY=",
-      "dev": true,
-      "requires": {
-        "gulp-util": "2.2.20",
-        "through": "2.3.4"
-      },
-      "dependencies": {
-        "ansi-regex": {
-          "version": "0.2.1",
-          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz",
-          "integrity": "sha1-DY6UaWej2BQ/k+JOKYUl/BsiNfk=",
-          "dev": true
-        },
-        "ansi-styles": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.1.0.tgz",
-          "integrity": "sha1-6uy/Zs1waIJ2Cy9GkVgrj1XXp94=",
-          "dev": true
-        },
-        "chalk": {
-          "version": "0.5.1",
-          "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz",
-          "integrity": "sha1-Zjs6ZItotV0EaQ1JFnqoN4WPIXQ=",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "1.1.0",
-            "escape-string-regexp": "1.0.5",
-            "has-ansi": "0.1.0",
-            "strip-ansi": "0.3.0",
-            "supports-color": "0.2.0"
-          }
-        },
-        "dateformat": {
-          "version": "1.0.12",
-          "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz",
-          "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=",
-          "dev": true,
-          "requires": {
-            "get-stdin": "4.0.1",
-            "meow": "3.7.0"
-          }
-        },
-        "gulp-util": {
-          "version": "2.2.20",
-          "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-2.2.20.tgz",
-          "integrity": "sha1-1xRuVyiRC9jwR6awseVJvCLb1kw=",
-          "dev": true,
-          "requires": {
-            "chalk": "0.5.1",
-            "dateformat": "1.0.12",
-            "lodash._reinterpolate": "2.4.1",
-            "lodash.template": "2.4.1",
-            "minimist": "0.2.0",
-            "multipipe": "0.1.2",
-            "through2": "0.5.1",
-            "vinyl": "0.2.3"
-          }
-        },
-        "has-ansi": {
-          "version": "0.1.0",
-          "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-0.1.0.tgz",
-          "integrity": "sha1-hPJlqujA5qiKEtcCKJS3VoiUxi4=",
-          "dev": true,
-          "requires": {
-            "ansi-regex": "0.2.1"
-          }
-        },
-        "lodash._reinterpolate": {
-          "version": "2.4.1",
-          "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-2.4.1.tgz",
-          "integrity": "sha1-TxInqlqHEfxjL1sHofRgequLMiI=",
-          "dev": true
-        },
-        "lodash.escape": {
-          "version": "2.4.1",
-          "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-2.4.1.tgz",
-          "integrity": "sha1-LOEsXghNsKV92l5dHu659dF1o7Q=",
-          "dev": true,
-          "requires": {
-            "lodash._escapehtmlchar": "2.4.1",
-            "lodash._reunescapedhtml": "2.4.1",
-            "lodash.keys": "2.4.1"
-          }
-        },
-        "lodash.keys": {
-          "version": "2.4.1",
-          "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-2.4.1.tgz",
-          "integrity": "sha1-SN6kbfj/djKxDXBrissmWR4rNyc=",
-          "dev": true,
-          "requires": {
-            "lodash._isnative": "2.4.1",
-            "lodash._shimkeys": "2.4.1",
-            "lodash.isobject": "2.4.1"
-          }
-        },
-        "lodash.template": {
-          "version": "2.4.1",
-          "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-2.4.1.tgz",
-          "integrity": "sha1-nmEQB+32KRKal0qzxIuBez4c8g0=",
-          "dev": true,
-          "requires": {
-            "lodash._escapestringchar": "2.4.1",
-            "lodash._reinterpolate": "2.4.1",
-            "lodash.defaults": "2.4.1",
-            "lodash.escape": "2.4.1",
-            "lodash.keys": "2.4.1",
-            "lodash.templatesettings": "2.4.1",
-            "lodash.values": "2.4.1"
-          }
-        },
-        "lodash.templatesettings": {
-          "version": "2.4.1",
-          "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-2.4.1.tgz",
-          "integrity": "sha1-6nbHXRHrhtTb6JqDiTu4YZKaxpk=",
-          "dev": true,
-          "requires": {
-            "lodash._reinterpolate": "2.4.1",
-            "lodash.escape": "2.4.1"
-          }
-        },
-        "minimist": {
-          "version": "0.2.0",
-          "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.2.0.tgz",
-          "integrity": "sha1-Tf/lJdriuGTGbC4jxicdev3s784=",
-          "dev": true
-        },
-        "strip-ansi": {
-          "version": "0.3.0",
-          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz",
-          "integrity": "sha1-JfSOoiynkYfzF0pNuHWTR7sSYiA=",
-          "dev": true,
-          "requires": {
-            "ansi-regex": "0.2.1"
-          }
-        },
-        "supports-color": {
-          "version": "0.2.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-0.2.0.tgz",
-          "integrity": "sha1-2S3iaU6z9nMjlz1649i1W0wiGQo=",
-          "dev": true
-        },
-        "vinyl": {
-          "version": "0.2.3",
-          "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.2.3.tgz",
-          "integrity": "sha1-vKk4IJWC7FpJrVOKAPofEl5RMlI=",
-          "dev": true,
-          "requires": {
-            "clone-stats": "0.0.1"
-          }
-        }
-      }
-    },
-    "gulp-jade-php": {
-      "version": "2.0.0-0",
-      "resolved": "https://registry.npmjs.org/gulp-jade-php/-/gulp-jade-php-2.0.0-0.tgz",
-      "integrity": "sha1-tYGa1FQ8NU5TLkxh0T2i8TrF61Q=",
-      "requires": {
-        "gulp-util": "3.0.8",
-        "jade": "1.11.0",
-        "phpjade": "1.4.2",
-        "through2": "0.5.1"
-      }
-    },
-    "gulp-jshint": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/gulp-jshint/-/gulp-jshint-2.1.0.tgz",
-      "integrity": "sha512-sP3NK8Y/1e58O0PH9t6s7DAr/lKDSUbIY207oWSeufM6/VclB7jJrIBcPCsyhrFTCDUl9DauePbt6VqP2vPM5w==",
-      "dev": true,
-      "requires": {
-        "lodash": "4.17.5",
-        "minimatch": "3.0.4",
-        "plugin-error": "0.1.2",
-        "rcloader": "0.2.2",
-        "through2": "2.0.3"
-      },
-      "dependencies": {
-        "arr-diff": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-1.1.0.tgz",
-          "integrity": "sha1-aHwydYFjWI/vfeezb6vklesaOZo=",
-          "dev": true,
-          "requires": {
-            "arr-flatten": "1.1.0",
-            "array-slice": "0.2.3"
-          }
-        },
-        "arr-union": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-2.1.0.tgz",
-          "integrity": "sha1-IPnqtexw9cfSFbEHexw5Fh0pLH0=",
-          "dev": true
-        },
-        "array-slice": {
-          "version": "0.2.3",
-          "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz",
-          "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=",
-          "dev": true
-        },
-        "extend-shallow": {
-          "version": "1.1.4",
-          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-1.1.4.tgz",
-          "integrity": "sha1-Gda/lN/AnXa6cR85uHLSH/TdkHE=",
-          "dev": true,
-          "requires": {
-            "kind-of": "1.1.0"
-          }
-        },
-        "isarray": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
-          "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
-          "dev": true
-        },
-        "kind-of": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz",
-          "integrity": "sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ=",
-          "dev": true
-        },
-        "minimatch": {
-          "version": "3.0.4",
-          "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
-          "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
-          "dev": true,
-          "requires": {
-            "brace-expansion": "1.1.11"
-          }
-        },
-        "plugin-error": {
-          "version": "0.1.2",
-          "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-0.1.2.tgz",
-          "integrity": "sha1-O5uzM1zPAPQl4HQ34ZJ2ln2kes4=",
-          "dev": true,
-          "requires": {
-            "ansi-cyan": "0.1.1",
-            "ansi-red": "0.1.1",
-            "arr-diff": "1.1.0",
-            "arr-union": "2.1.0",
-            "extend-shallow": "1.1.4"
-          }
-        },
-        "readable-stream": {
-          "version": "2.3.6",
-          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
-          "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
-          "dev": true,
-          "requires": {
-            "core-util-is": "1.0.2",
-            "inherits": "2.0.3",
-            "isarray": "1.0.0",
-            "process-nextick-args": "2.0.0",
-            "safe-buffer": "5.1.1",
-            "string_decoder": "1.1.1",
-            "util-deprecate": "1.0.2"
-          }
-        },
-        "string_decoder": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
-          "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
-          "dev": true,
-          "requires": {
-            "safe-buffer": "5.1.1"
-          }
-        },
-        "through2": {
-          "version": "2.0.3",
-          "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
-          "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
-          "dev": true,
-          "requires": {
-            "readable-stream": "2.3.6",
-            "xtend": "4.0.1"
-          }
-        }
-      }
-    },
-    "gulp-rename": {
-      "version": "1.2.2",
-      "resolved": "https://registry.npmjs.org/gulp-rename/-/gulp-rename-1.2.2.tgz",
-      "integrity": "sha1-OtRCh2PwXidk3sHGfYaNsnVoeBc=",
-      "dev": true
-    },
-    "gulp-sass": {
-      "version": "2.3.2",
-      "resolved": "https://registry.npmjs.org/gulp-sass/-/gulp-sass-2.3.2.tgz",
-      "integrity": "sha1-grerkP6QLNw0wE8YDZLyw0kC3VI=",
-      "dev": true,
-      "requires": {
-        "gulp-util": "3.0.8",
-        "lodash.clonedeep": "4.5.0",
-        "node-sass": "3.13.1",
-        "through2": "2.0.3",
-        "vinyl-sourcemaps-apply": "0.2.1"
-      },
-      "dependencies": {
-        "isarray": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
-          "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
-          "dev": true
-        },
-        "readable-stream": {
-          "version": "2.3.6",
-          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
-          "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
-          "dev": true,
-          "requires": {
-            "core-util-is": "1.0.2",
-            "inherits": "2.0.3",
-            "isarray": "1.0.0",
-            "process-nextick-args": "2.0.0",
-            "safe-buffer": "5.1.1",
-            "string_decoder": "1.1.1",
-            "util-deprecate": "1.0.2"
-          }
-        },
-        "string_decoder": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
-          "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
-          "dev": true,
-          "requires": {
-            "safe-buffer": "5.1.1"
-          }
-        },
-        "through2": {
-          "version": "2.0.3",
-          "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
-          "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
-          "dev": true,
-          "requires": {
-            "readable-stream": "2.3.6",
-            "xtend": "4.0.1"
-          }
-        }
-      }
-    },
-    "gulp-sourcemaps": {
-      "version": "1.12.1",
-      "resolved": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-1.12.1.tgz",
-      "integrity": "sha1-tDfR89mAzyboEYSCNxjOFa5ll7Y=",
-      "dev": true,
-      "requires": {
-        "@gulp-sourcemaps/map-sources": "1.0.0",
-        "acorn": "4.0.13",
-        "convert-source-map": "1.5.1",
-        "css": "2.2.1",
-        "debug-fabulous": "0.0.4",
-        "detect-newline": "2.1.0",
-        "graceful-fs": "4.1.11",
-        "source-map": "0.6.1",
-        "strip-bom": "2.0.0",
-        "through2": "2.0.3",
-        "vinyl": "1.2.0"
-      },
-      "dependencies": {
-        "acorn": {
-          "version": "4.0.13",
-          "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz",
-          "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=",
-          "dev": true
-        },
-        "atob": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npmjs.org/atob/-/atob-1.1.3.tgz",
-          "integrity": "sha1-lfE2KbEsOlGl0hWr3OKqnzL4B3M=",
-          "dev": true
-        },
-        "css": {
-          "version": "2.2.1",
-          "resolved": "https://registry.npmjs.org/css/-/css-2.2.1.tgz",
-          "integrity": "sha1-c6TIHehdtmTU7mdPfUcIXjstVdw=",
-          "dev": true,
-          "requires": {
-            "inherits": "2.0.3",
-            "source-map": "0.1.43",
-            "source-map-resolve": "0.3.1",
-            "urix": "0.1.0"
-          },
-          "dependencies": {
-            "source-map": {
-              "version": "0.1.43",
-              "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz",
-              "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=",
-              "dev": true,
-              "requires": {
-                "amdefine": "1.0.1"
-              }
-            }
-          }
-        },
-        "graceful-fs": {
-          "version": "4.1.11",
-          "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
-          "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
-          "dev": true
-        },
-        "isarray": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
-          "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
-          "dev": true
-        },
-        "readable-stream": {
-          "version": "2.3.6",
-          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
-          "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
-          "dev": true,
-          "requires": {
-            "core-util-is": "1.0.2",
-            "inherits": "2.0.3",
-            "isarray": "1.0.0",
-            "process-nextick-args": "2.0.0",
-            "safe-buffer": "5.1.1",
-            "string_decoder": "1.1.1",
-            "util-deprecate": "1.0.2"
-          }
-        },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
-          "dev": true
-        },
-        "source-map-resolve": {
-          "version": "0.3.1",
-          "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.3.1.tgz",
-          "integrity": "sha1-YQ9hIqRFuN1RU1oqcbeD38Ekh2E=",
-          "dev": true,
-          "requires": {
-            "atob": "1.1.3",
-            "resolve-url": "0.2.1",
-            "source-map-url": "0.3.0",
-            "urix": "0.1.0"
-          }
-        },
-        "source-map-url": {
-          "version": "0.3.0",
-          "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.3.0.tgz",
-          "integrity": "sha1-fsrxO1e80J2opAxdJp2zN5nUqvk=",
-          "dev": true
-        },
-        "string_decoder": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
-          "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
-          "dev": true,
-          "requires": {
-            "safe-buffer": "5.1.1"
-          }
-        },
-        "strip-bom": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
-          "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
-          "dev": true,
-          "requires": {
-            "is-utf8": "0.2.1"
-          }
-        },
-        "through2": {
-          "version": "2.0.3",
-          "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
-          "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
-          "dev": true,
-          "requires": {
-            "readable-stream": "2.3.6",
-            "xtend": "4.0.1"
-          }
-        },
-        "vinyl": {
-          "version": "1.2.0",
-          "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz",
-          "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=",
-          "dev": true,
-          "requires": {
-            "clone": "1.0.4",
-            "clone-stats": "0.0.1",
-            "replace-ext": "0.0.1"
-          }
-        }
-      }
-    },
-    "gulp-uglify": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/gulp-uglify/-/gulp-uglify-2.1.2.tgz",
-      "integrity": "sha1-bbhbHQ7mPRgFhZK2WGSdZcLsRUE=",
-      "dev": true,
-      "requires": {
-        "gulplog": "1.0.0",
-        "has-gulplog": "0.1.0",
-        "lodash": "4.17.5",
-        "make-error-cause": "1.2.2",
-        "through2": "2.0.3",
-        "uglify-js": "2.8.29",
-        "uglify-save-license": "0.4.1",
-        "vinyl-sourcemaps-apply": "0.2.1"
-      },
-      "dependencies": {
-        "isarray": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
-          "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
-          "dev": true
-        },
-        "readable-stream": {
-          "version": "2.3.6",
-          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
-          "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
-          "dev": true,
-          "requires": {
-            "core-util-is": "1.0.2",
-            "inherits": "2.0.3",
-            "isarray": "1.0.0",
-            "process-nextick-args": "2.0.0",
-            "safe-buffer": "5.1.1",
-            "string_decoder": "1.1.1",
-            "util-deprecate": "1.0.2"
-          }
-        },
-        "string_decoder": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
-          "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
-          "dev": true,
-          "requires": {
-            "safe-buffer": "5.1.1"
-          }
-        },
-        "through2": {
-          "version": "2.0.3",
-          "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
-          "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
-          "dev": true,
-          "requires": {
-            "readable-stream": "2.3.6",
-            "xtend": "4.0.1"
-          }
-        }
-      }
-    },
-    "gulp-util": {
-      "version": "3.0.8",
-      "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz",
-      "integrity": "sha1-AFTh50RQLifATBh8PsxQXdVLu08=",
-      "requires": {
-        "array-differ": "1.0.0",
-        "array-uniq": "1.0.3",
-        "beeper": "1.1.1",
-        "chalk": "1.1.3",
-        "dateformat": "2.2.0",
-        "fancy-log": "1.3.2",
-        "gulplog": "1.0.0",
-        "has-gulplog": "0.1.0",
-        "lodash._reescape": "3.0.0",
-        "lodash._reevaluate": "3.0.0",
-        "lodash._reinterpolate": "3.0.0",
-        "lodash.template": "3.6.2",
-        "minimist": "1.2.0",
-        "multipipe": "0.1.2",
-        "object-assign": "3.0.0",
-        "replace-ext": "0.0.1",
-        "through2": "2.0.3",
-        "vinyl": "0.5.3"
-      },
-      "dependencies": {
-        "isarray": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
-          "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
-        },
-        "readable-stream": {
-          "version": "2.3.6",
-          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
-          "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
-          "requires": {
-            "core-util-is": "1.0.2",
-            "inherits": "2.0.3",
-            "isarray": "1.0.0",
-            "process-nextick-args": "2.0.0",
-            "safe-buffer": "5.1.1",
-            "string_decoder": "1.1.1",
-            "util-deprecate": "1.0.2"
-          }
-        },
-        "string_decoder": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
-          "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
-          "requires": {
-            "safe-buffer": "5.1.1"
-          }
-        },
-        "through2": {
-          "version": "2.0.3",
-          "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
-          "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
-          "requires": {
-            "readable-stream": "2.3.6",
-            "xtend": "4.0.1"
-          }
-        }
-      }
-    },
-    "gulplog": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz",
-      "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=",
-      "requires": {
-        "glogg": "1.0.1"
-      }
-    },
-    "har-schema": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
-      "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
-      "dev": true
-    },
-    "har-validator": {
-      "version": "5.0.3",
-      "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz",
-      "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=",
-      "dev": true,
-      "requires": {
-        "ajv": "5.5.2",
-        "har-schema": "2.0.0"
-      }
-    },
-    "has-ansi": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
-      "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
-      "requires": {
-        "ansi-regex": "2.1.1"
-      }
-    },
-    "has-flag": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
-      "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
-      "dev": true
-    },
-    "has-gulplog": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz",
-      "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=",
-      "requires": {
-        "sparkles": "1.0.0"
-      }
-    },
-    "has-unicode": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
-      "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
-      "dev": true
-    },
-    "has-value": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
-      "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
-      "dev": true,
-      "requires": {
-        "get-value": "2.0.6",
-        "has-values": "1.0.0",
-        "isobject": "3.0.1"
-      }
-    },
-    "has-values": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
-      "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
-      "dev": true,
-      "requires": {
-        "is-number": "3.0.0",
-        "kind-of": "4.0.0"
-      },
-      "dependencies": {
-        "kind-of": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
-          "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
-          "dev": true,
-          "requires": {
-            "is-buffer": "1.1.6"
-          }
-        }
-      }
-    },
-    "hawk": {
-      "version": "6.0.2",
-      "resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz",
-      "integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==",
-      "dev": true,
-      "requires": {
-        "boom": "4.3.1",
-        "cryptiles": "3.1.2",
-        "hoek": "4.2.1",
-        "sntp": "2.1.0"
-      }
-    },
-    "hoek": {
-      "version": "4.2.1",
-      "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz",
-      "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==",
-      "dev": true
-    },
-    "home-or-tmp": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz",
-      "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=",
-      "dev": true,
-      "requires": {
-        "os-homedir": "1.0.2",
-        "os-tmpdir": "1.0.2"
-      }
-    },
-    "homedir-polyfill": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz",
-      "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=",
-      "dev": true,
-      "requires": {
-        "parse-passwd": "1.0.0"
-      }
-    },
-    "hosted-git-info": {
-      "version": "2.6.0",
-      "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.6.0.tgz",
-      "integrity": "sha512-lIbgIIQA3lz5XaB6vxakj6sDHADJiZadYEJB+FgA+C4nubM1NwcuvUr9EJPmnH1skZqpqUzWborWo8EIUi0Sdw==",
-      "dev": true
-    },
-    "htmlparser2": {
-      "version": "3.8.3",
-      "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz",
-      "integrity": "sha1-mWwosZFRaovoZQGn15dX5ccMEGg=",
-      "dev": true,
-      "requires": {
-        "domelementtype": "1.3.0",
-        "domhandler": "2.3.0",
-        "domutils": "1.5.1",
-        "entities": "1.0.0",
-        "readable-stream": "1.1.14"
-      }
-    },
-    "http-signature": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
-      "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
-      "dev": true,
-      "requires": {
-        "assert-plus": "1.0.0",
-        "jsprim": "1.4.1",
-        "sshpk": "1.14.1"
-      }
-    },
-    "in-publish": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz",
-      "integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E=",
-      "dev": true
-    },
-    "indent-string": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
-      "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
-      "dev": true,
-      "requires": {
-        "repeating": "2.0.1"
-      }
-    },
-    "inflight": {
-      "version": "1.0.6",
-      "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
-      "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
-      "dev": true,
-      "requires": {
-        "once": "1.3.3",
-        "wrappy": "1.0.2"
-      }
-    },
-    "inherits": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
-      "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
-    },
-    "ini": {
-      "version": "1.3.5",
-      "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
-      "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
-      "dev": true
-    },
-    "interpret": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz",
-      "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=",
-      "dev": true
-    },
-    "invariant": {
-      "version": "2.2.4",
-      "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
-      "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
-      "dev": true,
-      "requires": {
-        "loose-envify": "1.3.1"
-      }
-    },
-    "invert-kv": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
-      "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=",
-      "dev": true
-    },
-    "is-absolute": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz",
-      "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==",
-      "dev": true,
-      "requires": {
-        "is-relative": "1.0.0",
-        "is-windows": "1.0.2"
-      }
-    },
-    "is-accessor-descriptor": {
-      "version": "0.1.6",
-      "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
-      "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
-      "dev": true,
-      "requires": {
-        "kind-of": "3.2.2"
-      }
-    },
-    "is-arrayish": {
-      "version": "0.2.1",
-      "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
-      "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
-      "dev": true
-    },
-    "is-buffer": {
-      "version": "1.1.6",
-      "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
-      "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
-    },
-    "is-builtin-module": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz",
-      "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=",
-      "dev": true,
-      "requires": {
-        "builtin-modules": "1.1.1"
-      }
-    },
-    "is-data-descriptor": {
-      "version": "0.1.4",
-      "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
-      "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
-      "dev": true,
-      "requires": {
-        "kind-of": "3.2.2"
-      }
-    },
-    "is-descriptor": {
-      "version": "0.1.6",
-      "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
-      "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
-      "dev": true,
-      "requires": {
-        "is-accessor-descriptor": "0.1.6",
-        "is-data-descriptor": "0.1.4",
-        "kind-of": "5.1.0"
-      },
-      "dependencies": {
-        "kind-of": {
-          "version": "5.1.0",
-          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
-          "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
-          "dev": true
-        }
-      }
-    },
-    "is-extendable": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
-      "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
-      "dev": true
-    },
-    "is-extglob": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
-      "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
-      "dev": true
-    },
-    "is-finite": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
-      "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
-      "dev": true,
-      "requires": {
-        "number-is-nan": "1.0.1"
-      }
-    },
-    "is-fullwidth-code-point": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
-      "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
-      "dev": true,
-      "requires": {
-        "number-is-nan": "1.0.1"
-      }
-    },
-    "is-glob": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
-      "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
-      "dev": true,
-      "requires": {
-        "is-extglob": "2.1.1"
-      }
-    },
-    "is-number": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
-      "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
-      "dev": true,
-      "requires": {
-        "kind-of": "3.2.2"
-      }
-    },
-    "is-odd": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-2.0.0.tgz",
-      "integrity": "sha512-OTiixgpZAT1M4NHgS5IguFp/Vz2VI3U7Goh4/HA1adtwyLtSBrxYlcSYkhpAE07s4fKEcjrFxyvtQBND4vFQyQ==",
-      "dev": true,
-      "requires": {
-        "is-number": "4.0.0"
-      },
-      "dependencies": {
-        "is-number": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
-          "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==",
-          "dev": true
-        }
-      }
-    },
-    "is-plain-object": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
-      "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
-      "dev": true,
-      "requires": {
-        "isobject": "3.0.1"
-      }
-    },
-    "is-promise": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
-      "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o="
-    },
-    "is-relative": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz",
-      "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==",
-      "dev": true,
-      "requires": {
-        "is-unc-path": "1.0.0"
-      }
-    },
-    "is-typedarray": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
-      "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
-      "dev": true
-    },
-    "is-unc-path": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz",
-      "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==",
-      "dev": true,
-      "requires": {
-        "unc-path-regex": "0.1.2"
-      }
-    },
-    "is-utf8": {
-      "version": "0.2.1",
-      "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
-      "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
-      "dev": true
-    },
-    "is-windows": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
-      "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
-      "dev": true
-    },
-    "isarray": {
-      "version": "0.0.1",
-      "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
-      "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
-    },
-    "isexe": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
-      "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
-      "dev": true
-    },
-    "isobject": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
-      "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
-      "dev": true
-    },
-    "isstream": {
-      "version": "0.1.2",
-      "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
-      "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
-      "dev": true
-    },
-    "jade": {
-      "version": "1.11.0",
-      "resolved": "https://registry.npmjs.org/jade/-/jade-1.11.0.tgz",
-      "integrity": "sha1-nIDlOMEtP7lcjZu5VZ+gzAQEBf0=",
-      "requires": {
-        "character-parser": "1.2.1",
-        "clean-css": "3.4.28",
-        "commander": "2.6.0",
-        "constantinople": "3.0.2",
-        "jstransformer": "0.0.2",
-        "mkdirp": "0.5.1",
-        "transformers": "2.1.0",
-        "uglify-js": "2.8.29",
-        "void-elements": "2.0.1",
-        "with": "4.0.3"
-      }
-    },
-    "js-base64": {
-      "version": "2.4.3",
-      "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.3.tgz",
-      "integrity": "sha512-H7ErYLM34CvDMto3GbD6xD0JLUGYXR3QTcH6B/tr4Hi/QpSThnCsIp+Sy5FRTw3B0d6py4HcNkW7nO/wdtGWEw==",
-      "dev": true
-    },
-    "js-tokens": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
-      "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
-      "dev": true
-    },
-    "jsbn": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
-      "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
-      "dev": true,
-      "optional": true
-    },
-    "jsesc": {
-      "version": "0.5.0",
-      "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
-      "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=",
-      "dev": true
-    },
-    "jshint": {
-      "version": "2.9.5",
-      "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.9.5.tgz",
-      "integrity": "sha1-HnJSkVzmgbQIJ+4UJIxG006apiw=",
-      "dev": true,
-      "requires": {
-        "cli": "1.0.1",
-        "console-browserify": "1.1.0",
-        "exit": "0.1.2",
-        "htmlparser2": "3.8.3",
-        "lodash": "3.7.0",
-        "minimatch": "3.0.4",
-        "shelljs": "0.3.0",
-        "strip-json-comments": "1.0.4"
-      },
-      "dependencies": {
-        "lodash": {
-          "version": "3.7.0",
-          "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.7.0.tgz",
-          "integrity": "sha1-Nni9irmVBXwHreg27S7wh9qBHUU=",
-          "dev": true
-        },
-        "minimatch": {
-          "version": "3.0.4",
-          "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
-          "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
-          "dev": true,
-          "requires": {
-            "brace-expansion": "1.1.11"
-          }
-        }
-      }
-    },
-    "json-schema": {
-      "version": "0.2.3",
-      "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
-      "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
-      "dev": true
-    },
-    "json-schema-traverse": {
-      "version": "0.3.1",
-      "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",
-      "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=",
-      "dev": true
-    },
-    "json-stringify-safe": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
-      "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
-      "dev": true
-    },
-    "json5": {
-      "version": "0.5.1",
-      "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
-      "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=",
-      "dev": true
-    },
-    "jsprim": {
-      "version": "1.4.1",
-      "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
-      "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
-      "dev": true,
-      "requires": {
-        "assert-plus": "1.0.0",
-        "extsprintf": "1.3.0",
-        "json-schema": "0.2.3",
-        "verror": "1.10.0"
-      }
-    },
-    "jstransformer": {
-      "version": "0.0.2",
-      "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-0.0.2.tgz",
-      "integrity": "sha1-eq4pqQPRls+glz2IXT5HlH7Ndqs=",
-      "requires": {
-        "is-promise": "2.1.0",
-        "promise": "6.1.0"
-      }
-    },
-    "kind-of": {
-      "version": "3.2.2",
-      "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
-      "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
-      "requires": {
-        "is-buffer": "1.1.6"
-      }
-    },
-    "lazy-cache": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz",
-      "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4="
-    },
-    "lazy-debug-legacy": {
-      "version": "0.0.1",
-      "resolved": "https://registry.npmjs.org/lazy-debug-legacy/-/lazy-debug-legacy-0.0.1.tgz",
-      "integrity": "sha1-U3cWwHduTPeePtG2IfdljCkRsbE=",
-      "dev": true
-    },
-    "lcid": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
-      "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
-      "dev": true,
-      "requires": {
-        "invert-kv": "1.0.0"
-      }
-    },
-    "liftoff": {
-      "version": "2.5.0",
-      "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-2.5.0.tgz",
-      "integrity": "sha1-IAkpG7Mc6oYbvxCnwVooyvdcMew=",
-      "dev": true,
-      "requires": {
-        "extend": "3.0.1",
-        "findup-sync": "2.0.0",
-        "fined": "1.1.0",
-        "flagged-respawn": "1.0.0",
-        "is-plain-object": "2.0.4",
-        "object.map": "1.0.1",
-        "rechoir": "0.6.2",
-        "resolve": "1.7.1"
-      }
-    },
-    "load-json-file": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
-      "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
-      "dev": true,
-      "requires": {
-        "graceful-fs": "4.1.11",
-        "parse-json": "2.2.0",
-        "pify": "2.3.0",
-        "pinkie-promise": "2.0.1",
-        "strip-bom": "2.0.0"
-      },
-      "dependencies": {
-        "graceful-fs": {
-          "version": "4.1.11",
-          "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
-          "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
-          "dev": true
-        },
-        "strip-bom": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
-          "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
-          "dev": true,
-          "requires": {
-            "is-utf8": "0.2.1"
-          }
-        }
-      }
-    },
-    "lodash": {
-      "version": "4.17.5",
-      "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz",
-      "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==",
-      "dev": true
-    },
-    "lodash._basecopy": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz",
-      "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY="
-    },
-    "lodash._basetostring": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz",
-      "integrity": "sha1-0YYdh3+CSlL2aYMtyvPuFVZqB9U="
-    },
-    "lodash._basevalues": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz",
-      "integrity": "sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc="
-    },
-    "lodash._escapehtmlchar": {
-      "version": "2.4.1",
-      "resolved": "https://registry.npmjs.org/lodash._escapehtmlchar/-/lodash._escapehtmlchar-2.4.1.tgz",
-      "integrity": "sha1-32fDu2t+jh6DGrSL+geVuSr+iZ0=",
-      "dev": true,
-      "requires": {
-        "lodash._htmlescapes": "2.4.1"
-      }
-    },
-    "lodash._escapestringchar": {
-      "version": "2.4.1",
-      "resolved": "https://registry.npmjs.org/lodash._escapestringchar/-/lodash._escapestringchar-2.4.1.tgz",
-      "integrity": "sha1-7P4iYYoq3lC/7qQ5N+Ud9m8O23I=",
-      "dev": true
-    },
-    "lodash._getnative": {
-      "version": "3.9.1",
-      "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz",
-      "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U="
-    },
-    "lodash._htmlescapes": {
-      "version": "2.4.1",
-      "resolved": "https://registry.npmjs.org/lodash._htmlescapes/-/lodash._htmlescapes-2.4.1.tgz",
-      "integrity": "sha1-MtFL8IRLbeb4tioFG09nwii2JMs=",
-      "dev": true
-    },
-    "lodash._isiterateecall": {
-      "version": "3.0.9",
-      "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz",
-      "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw="
-    },
-    "lodash._isnative": {
-      "version": "2.4.1",
-      "resolved": "https://registry.npmjs.org/lodash._isnative/-/lodash._isnative-2.4.1.tgz",
-      "integrity": "sha1-PqZAS3hKe+g2x7V1gOHN95sUgyw=",
-      "dev": true
-    },
-    "lodash._objecttypes": {
-      "version": "2.4.1",
-      "resolved": "https://registry.npmjs.org/lodash._objecttypes/-/lodash._objecttypes-2.4.1.tgz",
-      "integrity": "sha1-fAt/admKH3ZSn4kLDNsbTf7BHBE=",
-      "dev": true
-    },
-    "lodash._reescape": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz",
-      "integrity": "sha1-Kx1vXf4HyKNVdT5fJ/rH8c3hYWo="
-    },
-    "lodash._reevaluate": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz",
-      "integrity": "sha1-WLx0xAZklTrgsSTYBpltrKQx4u0="
-    },
-    "lodash._reinterpolate": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz",
-      "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0="
-    },
-    "lodash._reunescapedhtml": {
-      "version": "2.4.1",
-      "resolved": "https://registry.npmjs.org/lodash._reunescapedhtml/-/lodash._reunescapedhtml-2.4.1.tgz",
-      "integrity": "sha1-dHxPxAED6zu4oJduVx96JlnpO6c=",
-      "dev": true,
-      "requires": {
-        "lodash._htmlescapes": "2.4.1",
-        "lodash.keys": "2.4.1"
-      },
-      "dependencies": {
-        "lodash.keys": {
-          "version": "2.4.1",
-          "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-2.4.1.tgz",
-          "integrity": "sha1-SN6kbfj/djKxDXBrissmWR4rNyc=",
-          "dev": true,
-          "requires": {
-            "lodash._isnative": "2.4.1",
-            "lodash._shimkeys": "2.4.1",
-            "lodash.isobject": "2.4.1"
-          }
-        }
-      }
-    },
-    "lodash._root": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz",
-      "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI="
-    },
-    "lodash._shimkeys": {
-      "version": "2.4.1",
-      "resolved": "https://registry.npmjs.org/lodash._shimkeys/-/lodash._shimkeys-2.4.1.tgz",
-      "integrity": "sha1-bpzJZm/wgfC1psl4uD4kLmlJ0gM=",
-      "dev": true,
-      "requires": {
-        "lodash._objecttypes": "2.4.1"
-      }
-    },
-    "lodash.assign": {
-      "version": "4.2.0",
-      "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz",
-      "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=",
-      "dev": true
-    },
-    "lodash.clonedeep": {
-      "version": "4.5.0",
-      "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
-      "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=",
-      "dev": true
-    },
-    "lodash.defaults": {
-      "version": "2.4.1",
-      "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-2.4.1.tgz",
-      "integrity": "sha1-p+iIXwXmiFEUS24SqPNngCa8TFQ=",
-      "dev": true,
-      "requires": {
-        "lodash._objecttypes": "2.4.1",
-        "lodash.keys": "2.4.1"
-      },
-      "dependencies": {
-        "lodash.keys": {
-          "version": "2.4.1",
-          "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-2.4.1.tgz",
-          "integrity": "sha1-SN6kbfj/djKxDXBrissmWR4rNyc=",
-          "dev": true,
-          "requires": {
-            "lodash._isnative": "2.4.1",
-            "lodash._shimkeys": "2.4.1",
-            "lodash.isobject": "2.4.1"
-          }
-        }
-      }
-    },
-    "lodash.escape": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz",
-      "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=",
-      "requires": {
-        "lodash._root": "3.0.1"
-      }
-    },
-    "lodash.isarguments": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz",
-      "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo="
-    },
-    "lodash.isarray": {
-      "version": "3.0.4",
-      "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz",
-      "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U="
-    },
-    "lodash.isobject": {
-      "version": "2.4.1",
-      "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-2.4.1.tgz",
-      "integrity": "sha1-Wi5H/mmVPx7mMafrof5k0tBlWPU=",
-      "dev": true,
-      "requires": {
-        "lodash._objecttypes": "2.4.1"
-      }
-    },
-    "lodash.keys": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz",
-      "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=",
-      "requires": {
-        "lodash._getnative": "3.9.1",
-        "lodash.isarguments": "3.1.0",
-        "lodash.isarray": "3.0.4"
-      }
-    },
-    "lodash.merge": {
-      "version": "4.6.1",
-      "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.1.tgz",
-      "integrity": "sha512-AOYza4+Hf5z1/0Hztxpm2/xiPZgi/cjMqdnKTUWTBSKchJlxXXuUSxCCl8rJlf4g6yww/j6mA8nC8Hw/EZWxKQ==",
-      "dev": true
-    },
-    "lodash.restparam": {
-      "version": "3.6.1",
-      "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz",
-      "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU="
-    },
-    "lodash.template": {
-      "version": "3.6.2",
-      "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz",
-      "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=",
-      "requires": {
-        "lodash._basecopy": "3.0.1",
-        "lodash._basetostring": "3.0.1",
-        "lodash._basevalues": "3.0.0",
-        "lodash._isiterateecall": "3.0.9",
-        "lodash._reinterpolate": "3.0.0",
-        "lodash.escape": "3.2.0",
-        "lodash.keys": "3.1.2",
-        "lodash.restparam": "3.6.1",
-        "lodash.templatesettings": "3.1.1"
-      }
-    },
-    "lodash.templatesettings": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz",
-      "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=",
-      "requires": {
-        "lodash._reinterpolate": "3.0.0",
-        "lodash.escape": "3.2.0"
-      }
-    },
-    "lodash.values": {
-      "version": "2.4.1",
-      "resolved": "https://registry.npmjs.org/lodash.values/-/lodash.values-2.4.1.tgz",
-      "integrity": "sha1-q/UUQ2s8twUAFieXjLzzCxKA7qQ=",
-      "dev": true,
-      "requires": {
-        "lodash.keys": "2.4.1"
-      },
-      "dependencies": {
-        "lodash.keys": {
-          "version": "2.4.1",
-          "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-2.4.1.tgz",
-          "integrity": "sha1-SN6kbfj/djKxDXBrissmWR4rNyc=",
-          "dev": true,
-          "requires": {
-            "lodash._isnative": "2.4.1",
-            "lodash._shimkeys": "2.4.1",
-            "lodash.isobject": "2.4.1"
-          }
-        }
-      }
-    },
-    "longest": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
-      "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc="
-    },
-    "loose-envify": {
-      "version": "1.3.1",
-      "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz",
-      "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=",
-      "dev": true,
-      "requires": {
-        "js-tokens": "3.0.2"
-      }
-    },
-    "loud-rejection": {
-      "version": "1.6.0",
-      "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz",
-      "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
-      "dev": true,
-      "requires": {
-        "currently-unhandled": "0.4.1",
-        "signal-exit": "3.0.2"
-      }
-    },
-    "lru-cache": {
-      "version": "2.7.3",
-      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz",
-      "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=",
-      "dev": true
-    },
-    "make-error": {
-      "version": "1.3.4",
-      "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.4.tgz",
-      "integrity": "sha512-0Dab5btKVPhibSalc9QGXb559ED7G7iLjFXBaj9Wq8O3vorueR5K5jaE3hkG6ZQINyhA/JgG6Qk4qdFQjsYV6g==",
-      "dev": true
-    },
-    "make-error-cause": {
-      "version": "1.2.2",
-      "resolved": "https://registry.npmjs.org/make-error-cause/-/make-error-cause-1.2.2.tgz",
-      "integrity": "sha1-3wOI/NCzeBbf8KX7gQiTl3fcvJ0=",
-      "dev": true,
-      "requires": {
-        "make-error": "1.3.4"
-      }
-    },
-    "make-iterator": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz",
-      "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==",
-      "dev": true,
-      "requires": {
-        "kind-of": "6.0.2"
-      },
-      "dependencies": {
-        "kind-of": {
-          "version": "6.0.2",
-          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
-          "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
-          "dev": true
-        }
-      }
-    },
-    "map-cache": {
-      "version": "0.2.2",
-      "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
-      "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
-      "dev": true
-    },
-    "map-obj": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
-      "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
-      "dev": true
-    },
-    "map-visit": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
-      "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
-      "dev": true,
-      "requires": {
-        "object-visit": "1.0.1"
-      }
-    },
-    "meow": {
-      "version": "3.7.0",
-      "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
-      "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
-      "dev": true,
-      "requires": {
-        "camelcase-keys": "2.1.0",
-        "decamelize": "1.2.0",
-        "loud-rejection": "1.6.0",
-        "map-obj": "1.0.1",
-        "minimist": "1.2.0",
-        "normalize-package-data": "2.4.0",
-        "object-assign": "4.1.1",
-        "read-pkg-up": "1.0.1",
-        "redent": "1.0.0",
-        "trim-newlines": "1.0.0"
-      },
-      "dependencies": {
-        "object-assign": {
-          "version": "4.1.1",
-          "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
-          "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
-          "dev": true
-        }
-      }
-    },
-    "micromatch": {
-      "version": "3.1.10",
-      "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
-      "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
-      "dev": true,
-      "requires": {
-        "arr-diff": "4.0.0",
-        "array-unique": "0.3.2",
-        "braces": "2.3.2",
-        "define-property": "2.0.2",
-        "extend-shallow": "3.0.2",
-        "extglob": "2.0.4",
-        "fragment-cache": "0.2.1",
-        "kind-of": "6.0.2",
-        "nanomatch": "1.2.9",
-        "object.pick": "1.3.0",
-        "regex-not": "1.0.2",
-        "snapdragon": "0.8.2",
-        "to-regex": "3.0.2"
-      },
-      "dependencies": {
-        "kind-of": {
-          "version": "6.0.2",
-          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
-          "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
-          "dev": true
-        }
-      }
-    },
-    "mime-db": {
-      "version": "1.33.0",
-      "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz",
-      "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==",
-      "dev": true
-    },
-    "mime-types": {
-      "version": "2.1.18",
-      "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz",
-      "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==",
-      "dev": true,
-      "requires": {
-        "mime-db": "1.33.0"
-      }
-    },
-    "minimatch": {
-      "version": "2.0.10",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz",
-      "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=",
-      "dev": true,
-      "requires": {
-        "brace-expansion": "1.1.11"
-      }
-    },
-    "minimist": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
-      "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
-    },
-    "mixin-deep": {
-      "version": "1.3.1",
-      "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz",
-      "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==",
-      "dev": true,
-      "requires": {
-        "for-in": "1.0.2",
-        "is-extendable": "1.0.1"
-      },
-      "dependencies": {
-        "is-extendable": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
-          "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
-          "dev": true,
-          "requires": {
-            "is-plain-object": "2.0.4"
-          }
-        }
-      }
-    },
-    "mkdirp": {
-      "version": "0.5.1",
-      "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
-      "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
-      "requires": {
-        "minimist": "0.0.8"
-      },
-      "dependencies": {
-        "minimist": {
-          "version": "0.0.8",
-          "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
-          "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
-        }
-      }
-    },
-    "moduleinfo": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/moduleinfo/-/moduleinfo-1.0.1.tgz",
-      "integrity": "sha1-tieQdByYWJJcXiG5uz4ONk02k6w="
-    },
-    "ms": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-      "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
-      "dev": true
-    },
-    "multipipe": {
-      "version": "0.1.2",
-      "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz",
-      "integrity": "sha1-Ko8t33Du1WTf8tV/HhoTfZ8FB4s=",
-      "requires": {
-        "duplexer2": "0.0.2"
-      }
-    },
-    "nan": {
-      "version": "2.10.0",
-      "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz",
-      "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==",
-      "dev": true
-    },
-    "nanomatch": {
-      "version": "1.2.9",
-      "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.9.tgz",
-      "integrity": "sha512-n8R9bS8yQ6eSXaV6jHUpKzD8gLsin02w1HSFiegwrs9E098Ylhw5jdyKPaYqvHknHaSCKTPp7C8dGCQ0q9koXA==",
-      "dev": true,
-      "requires": {
-        "arr-diff": "4.0.0",
-        "array-unique": "0.3.2",
-        "define-property": "2.0.2",
-        "extend-shallow": "3.0.2",
-        "fragment-cache": "0.2.1",
-        "is-odd": "2.0.0",
-        "is-windows": "1.0.2",
-        "kind-of": "6.0.2",
-        "object.pick": "1.3.0",
-        "regex-not": "1.0.2",
-        "snapdragon": "0.8.2",
-        "to-regex": "3.0.2"
-      },
-      "dependencies": {
-        "kind-of": {
-          "version": "6.0.2",
-          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
-          "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
-          "dev": true
-        }
-      }
-    },
-    "natives": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/natives/-/natives-1.1.3.tgz",
-      "integrity": "sha512-BZGSYV4YOLxzoTK73l0/s/0sH9l8SHs2ocReMH1f8JYSh5FUWu4ZrKCpJdRkWXV6HFR/pZDz7bwWOVAY07q77g==",
-      "dev": true
-    },
-    "node-gyp": {
-      "version": "3.6.2",
-      "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.6.2.tgz",
-      "integrity": "sha1-m/vlRWIoYoSDjnUOrAUpWFP6HGA=",
-      "dev": true,
-      "requires": {
-        "fstream": "1.0.11",
-        "glob": "7.1.2",
-        "graceful-fs": "4.1.11",
-        "minimatch": "3.0.4",
-        "mkdirp": "0.5.1",
-        "nopt": "3.0.6",
-        "npmlog": "4.1.2",
-        "osenv": "0.1.5",
-        "request": "2.85.0",
-        "rimraf": "2.6.2",
-        "semver": "5.3.0",
-        "tar": "2.2.1",
-        "which": "1.3.0"
-      },
-      "dependencies": {
-        "glob": {
-          "version": "7.1.2",
-          "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
-          "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
-          "dev": true,
-          "requires": {
-            "fs.realpath": "1.0.0",
-            "inflight": "1.0.6",
-            "inherits": "2.0.3",
-            "minimatch": "3.0.4",
-            "once": "1.3.3",
-            "path-is-absolute": "1.0.1"
-          }
-        },
-        "graceful-fs": {
-          "version": "4.1.11",
-          "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
-          "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
-          "dev": true
-        },
-        "minimatch": {
-          "version": "3.0.4",
-          "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
-          "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
-          "dev": true,
-          "requires": {
-            "brace-expansion": "1.1.11"
-          }
-        },
-        "semver": {
-          "version": "5.3.0",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz",
-          "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=",
-          "dev": true
-        }
-      }
-    },
-    "node-sass": {
-      "version": "3.13.1",
-      "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-3.13.1.tgz",
-      "integrity": "sha1-ckD7v/I5YwS0IjUn7TAgWJwAT8I=",
-      "dev": true,
-      "requires": {
-        "async-foreach": "0.1.3",
-        "chalk": "1.1.3",
-        "cross-spawn": "3.0.1",
-        "gaze": "1.1.2",
-        "get-stdin": "4.0.1",
-        "glob": "7.1.2",
-        "in-publish": "2.0.0",
-        "lodash.assign": "4.2.0",
-        "lodash.clonedeep": "4.5.0",
-        "meow": "3.7.0",
-        "mkdirp": "0.5.1",
-        "nan": "2.10.0",
-        "node-gyp": "3.6.2",
-        "npmlog": "4.1.2",
-        "request": "2.85.0",
-        "sass-graph": "2.2.4"
-      },
-      "dependencies": {
-        "gaze": {
-          "version": "1.1.2",
-          "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.2.tgz",
-          "integrity": "sha1-hHIkZ3rbiHDWeSV+0ziP22HkAQU=",
-          "dev": true,
-          "requires": {
-            "globule": "1.2.0"
-          }
-        },
-        "glob": {
-          "version": "7.1.2",
-          "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
-          "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
-          "dev": true,
-          "requires": {
-            "fs.realpath": "1.0.0",
-            "inflight": "1.0.6",
-            "inherits": "2.0.3",
-            "minimatch": "3.0.4",
-            "once": "1.3.3",
-            "path-is-absolute": "1.0.1"
-          }
-        },
-        "globule": {
-          "version": "1.2.0",
-          "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.0.tgz",
-          "integrity": "sha1-HcScaCLdnoovoAuiopUAboZkvQk=",
-          "dev": true,
-          "requires": {
-            "glob": "7.1.2",
-            "lodash": "4.17.5",
-            "minimatch": "3.0.4"
-          }
-        },
-        "minimatch": {
-          "version": "3.0.4",
-          "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
-          "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
-          "dev": true,
-          "requires": {
-            "brace-expansion": "1.1.11"
-          }
-        }
-      }
-    },
-    "nopt": {
-      "version": "3.0.6",
-      "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
-      "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
-      "dev": true,
-      "requires": {
-        "abbrev": "1.1.1"
-      }
-    },
-    "normalize-package-data": {
-      "version": "2.4.0",
-      "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
-      "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==",
-      "dev": true,
-      "requires": {
-        "hosted-git-info": "2.6.0",
-        "is-builtin-module": "1.0.0",
-        "semver": "5.5.0",
-        "validate-npm-package-license": "3.0.3"
-      }
-    },
-    "normalize-path": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
-      "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
-      "dev": true,
-      "requires": {
-        "remove-trailing-separator": "1.1.0"
-      }
-    },
-    "normalize-range": {
-      "version": "0.1.2",
-      "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
-      "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=",
-      "dev": true
-    },
-    "npmlog": {
-      "version": "4.1.2",
-      "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
-      "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
-      "dev": true,
-      "requires": {
-        "are-we-there-yet": "1.1.4",
-        "console-control-strings": "1.1.0",
-        "gauge": "2.7.4",
-        "set-blocking": "2.0.0"
-      }
-    },
-    "num2fraction": {
-      "version": "1.2.2",
-      "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz",
-      "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=",
-      "dev": true
-    },
-    "number-is-nan": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
-      "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
-      "dev": true
-    },
-    "oauth-sign": {
-      "version": "0.8.2",
-      "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz",
-      "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=",
-      "dev": true
-    },
-    "object-assign": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz",
-      "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I="
-    },
-    "object-copy": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
-      "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
-      "dev": true,
-      "requires": {
-        "copy-descriptor": "0.1.1",
-        "define-property": "0.2.5",
-        "kind-of": "3.2.2"
-      },
-      "dependencies": {
-        "define-property": {
-          "version": "0.2.5",
-          "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
-          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
-          "dev": true,
-          "requires": {
-            "is-descriptor": "0.1.6"
-          }
-        }
-      }
-    },
-    "object-keys": {
-      "version": "0.4.0",
-      "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz",
-      "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=",
-      "dev": true
-    },
-    "object-visit": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
-      "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
-      "dev": true,
-      "requires": {
-        "isobject": "3.0.1"
-      }
-    },
-    "object.defaults": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz",
-      "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=",
-      "dev": true,
-      "requires": {
-        "array-each": "1.0.1",
-        "array-slice": "1.1.0",
-        "for-own": "1.0.0",
-        "isobject": "3.0.1"
-      }
-    },
-    "object.map": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz",
-      "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=",
-      "dev": true,
-      "requires": {
-        "for-own": "1.0.0",
-        "make-iterator": "1.0.1"
-      }
-    },
-    "object.pick": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
-      "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
-      "dev": true,
-      "requires": {
-        "isobject": "3.0.1"
-      }
-    },
-    "once": {
-      "version": "1.3.3",
-      "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz",
-      "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=",
-      "dev": true,
-      "requires": {
-        "wrappy": "1.0.2"
-      }
-    },
-    "optimist": {
-      "version": "0.3.7",
-      "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz",
-      "integrity": "sha1-yQlBrVnkJzMokjB00s8ufLxuwNk=",
-      "requires": {
-        "wordwrap": "0.0.3"
-      }
-    },
-    "orchestrator": {
-      "version": "0.3.8",
-      "resolved": "https://registry.npmjs.org/orchestrator/-/orchestrator-0.3.8.tgz",
-      "integrity": "sha1-FOfp4nZPcxX7rBhOUGx6pt+UrX4=",
-      "dev": true,
-      "requires": {
-        "end-of-stream": "0.1.5",
-        "sequencify": "0.0.7",
-        "stream-consume": "0.1.1"
-      }
-    },
-    "ordered-read-streams": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.1.0.tgz",
-      "integrity": "sha1-/VZamvjrRHO6abbtijQ1LLVS8SY=",
-      "dev": true
-    },
-    "os-homedir": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
-      "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
-      "dev": true
-    },
-    "os-locale": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz",
-      "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=",
-      "dev": true,
-      "requires": {
-        "lcid": "1.0.0"
-      }
-    },
-    "os-tmpdir": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
-      "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
-      "dev": true
-    },
-    "osenv": {
-      "version": "0.1.5",
-      "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz",
-      "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==",
-      "dev": true,
-      "requires": {
-        "os-homedir": "1.0.2",
-        "os-tmpdir": "1.0.2"
-      }
-    },
-    "parse-filepath": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz",
-      "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=",
-      "dev": true,
-      "requires": {
-        "is-absolute": "1.0.0",
-        "map-cache": "0.2.2",
-        "path-root": "0.1.1"
-      }
-    },
-    "parse-json": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
-      "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
-      "dev": true,
-      "requires": {
-        "error-ex": "1.3.1"
-      }
-    },
-    "parse-passwd": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz",
-      "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=",
-      "dev": true
-    },
-    "pascalcase": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
-      "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
-      "dev": true
-    },
-    "path-exists": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
-      "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
-      "dev": true,
-      "requires": {
-        "pinkie-promise": "2.0.1"
-      }
-    },
-    "path-is-absolute": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
-      "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
-      "dev": true
-    },
-    "path-parse": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz",
-      "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=",
-      "dev": true
-    },
-    "path-root": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz",
-      "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=",
-      "dev": true,
-      "requires": {
-        "path-root-regex": "0.1.2"
-      }
-    },
-    "path-root-regex": {
-      "version": "0.1.2",
-      "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz",
-      "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=",
-      "dev": true
-    },
-    "path-type": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
-      "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
-      "dev": true,
-      "requires": {
-        "graceful-fs": "4.1.11",
-        "pify": "2.3.0",
-        "pinkie-promise": "2.0.1"
-      },
-      "dependencies": {
-        "graceful-fs": {
-          "version": "4.1.11",
-          "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
-          "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
-          "dev": true
-        }
-      }
-    },
-    "performance-now": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
-      "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
-      "dev": true
-    },
-    "phpjade": {
-      "version": "1.4.2",
-      "resolved": "https://registry.npmjs.org/phpjade/-/phpjade-1.4.2.tgz",
-      "integrity": "sha1-Q4kFPjooKjTMXV3GNcezVJrCR1U=",
-      "requires": {
-        "acorn": "1.2.2",
-        "moduleinfo": "1.0.1",
-        "semver": "5.5.0",
-        "stack-trace": "0.0.9"
-      },
-      "dependencies": {
-        "acorn": {
-          "version": "1.2.2",
-          "resolved": "https://registry.npmjs.org/acorn/-/acorn-1.2.2.tgz",
-          "integrity": "sha1-yM4n3grMdtiW0rH6099YjZ6C8BQ="
-        }
-      }
-    },
-    "pify": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
-      "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
-      "dev": true
-    },
-    "pinkie": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
-      "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
-      "dev": true
-    },
-    "pinkie-promise": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
-      "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
-      "dev": true,
-      "requires": {
-        "pinkie": "2.0.4"
-      }
-    },
-    "plugin-error": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz",
-      "integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==",
-      "dev": true,
-      "requires": {
-        "ansi-colors": "1.1.0",
-        "arr-diff": "4.0.0",
-        "arr-union": "3.1.0",
-        "extend-shallow": "3.0.2"
-      }
-    },
-    "posix-character-classes": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
-      "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
-      "dev": true
-    },
-    "postcss": {
-      "version": "5.2.18",
-      "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
-      "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
-      "dev": true,
-      "requires": {
-        "chalk": "1.1.3",
-        "js-base64": "2.4.3",
-        "source-map": "0.5.7",
-        "supports-color": "3.2.3"
-      },
-      "dependencies": {
-        "source-map": {
-          "version": "0.5.7",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
-          "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-          "dev": true
-        },
-        "supports-color": {
-          "version": "3.2.3",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
-          "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
-          "dev": true,
-          "requires": {
-            "has-flag": "1.0.0"
-          }
-        }
-      }
-    },
-    "postcss-value-parser": {
-      "version": "3.3.0",
-      "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz",
-      "integrity": "sha1-h/OPnxj3dKSrTIojL1xc6IcqnRU=",
-      "dev": true
-    },
-    "pretty-hrtime": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz",
-      "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=",
-      "dev": true
-    },
-    "private": {
-      "version": "0.1.8",
-      "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
-      "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==",
-      "dev": true
-    },
-    "process-nextick-args": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
-      "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw=="
-    },
-    "promise": {
-      "version": "6.1.0",
-      "resolved": "https://registry.npmjs.org/promise/-/promise-6.1.0.tgz",
-      "integrity": "sha1-LOcp9rlLRcJoka0GAsXJDgTG7vY=",
-      "requires": {
-        "asap": "1.0.0"
-      }
-    },
-    "pseudomap": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
-      "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
-      "dev": true
-    },
-    "punycode": {
-      "version": "1.4.1",
-      "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
-      "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
-      "dev": true
-    },
-    "qs": {
-      "version": "6.5.1",
-      "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz",
-      "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==",
-      "dev": true
-    },
-    "rcfinder": {
-      "version": "0.1.9",
-      "resolved": "https://registry.npmjs.org/rcfinder/-/rcfinder-0.1.9.tgz",
-      "integrity": "sha1-8+gPOH3fmugK4wpBADKWQuroERU=",
-      "dev": true,
-      "requires": {
-        "lodash.clonedeep": "4.5.0"
-      }
-    },
-    "rcloader": {
-      "version": "0.2.2",
-      "resolved": "https://registry.npmjs.org/rcloader/-/rcloader-0.2.2.tgz",
-      "integrity": "sha1-WNIpi0YtC5v9ITPSoex0+9cFxxc=",
-      "dev": true,
-      "requires": {
-        "lodash.assign": "4.2.0",
-        "lodash.isobject": "3.0.2",
-        "lodash.merge": "4.6.1",
-        "rcfinder": "0.1.9"
-      },
-      "dependencies": {
-        "lodash.isobject": {
-          "version": "3.0.2",
-          "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-3.0.2.tgz",
-          "integrity": "sha1-PI+41bW/S/kK4G4U8qUwpO2TXh0=",
-          "dev": true
-        }
-      }
-    },
-    "read-pkg": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
-      "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
-      "dev": true,
-      "requires": {
-        "load-json-file": "1.1.0",
-        "normalize-package-data": "2.4.0",
-        "path-type": "1.1.0"
-      }
-    },
-    "read-pkg-up": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
-      "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
-      "dev": true,
-      "requires": {
-        "find-up": "1.1.2",
-        "read-pkg": "1.1.0"
-      }
-    },
-    "readable-stream": {
-      "version": "1.1.14",
-      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
-      "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
-      "requires": {
-        "core-util-is": "1.0.2",
-        "inherits": "2.0.3",
-        "isarray": "0.0.1",
-        "string_decoder": "0.10.31"
-      }
-    },
-    "rechoir": {
-      "version": "0.6.2",
-      "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
-      "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=",
-      "dev": true,
-      "requires": {
-        "resolve": "1.7.1"
-      }
-    },
-    "redent": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
-      "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
-      "dev": true,
-      "requires": {
-        "indent-string": "2.1.0",
-        "strip-indent": "1.0.1"
-      }
-    },
-    "regenerate": {
-      "version": "1.3.3",
-      "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.3.tgz",
-      "integrity": "sha512-jVpo1GadrDAK59t/0jRx5VxYWQEDkkEKi6+HjE3joFVLfDOh9Xrdh0dF1eSq+BI/SwvTQ44gSscJ8N5zYL61sg==",
-      "dev": true
-    },
-    "regenerator-runtime": {
-      "version": "0.11.1",
-      "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
-      "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
-      "dev": true
-    },
-    "regenerator-transform": {
-      "version": "0.10.1",
-      "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz",
-      "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==",
-      "dev": true,
-      "requires": {
-        "babel-runtime": "6.26.0",
-        "babel-types": "6.26.0",
-        "private": "0.1.8"
-      }
-    },
-    "regex-not": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
-      "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
-      "dev": true,
-      "requires": {
-        "extend-shallow": "3.0.2",
-        "safe-regex": "1.1.0"
-      }
-    },
-    "regexpu-core": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz",
-      "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=",
-      "dev": true,
-      "requires": {
-        "regenerate": "1.3.3",
-        "regjsgen": "0.2.0",
-        "regjsparser": "0.1.5"
-      }
-    },
-    "regjsgen": {
-      "version": "0.2.0",
-      "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz",
-      "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=",
-      "dev": true
-    },
-    "regjsparser": {
-      "version": "0.1.5",
-      "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz",
-      "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=",
-      "dev": true,
-      "requires": {
-        "jsesc": "0.5.0"
-      }
-    },
-    "remove-trailing-separator": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
-      "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
-      "dev": true
-    },
-    "repeat-element": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz",
-      "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=",
-      "dev": true
-    },
-    "repeat-string": {
-      "version": "1.6.1",
-      "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
-      "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc="
-    },
-    "repeating": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
-      "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
-      "dev": true,
-      "requires": {
-        "is-finite": "1.0.2"
-      }
-    },
-    "replace-ext": {
-      "version": "0.0.1",
-      "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz",
-      "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ="
-    },
-    "request": {
-      "version": "2.85.0",
-      "resolved": "https://registry.npmjs.org/request/-/request-2.85.0.tgz",
-      "integrity": "sha512-8H7Ehijd4js+s6wuVPLjwORxD4zeuyjYugprdOXlPSqaApmL/QOy+EB/beICHVCHkGMKNh5rvihb5ov+IDw4mg==",
-      "dev": true,
-      "requires": {
-        "aws-sign2": "0.7.0",
-        "aws4": "1.7.0",
-        "caseless": "0.12.0",
-        "combined-stream": "1.0.6",
-        "extend": "3.0.1",
-        "forever-agent": "0.6.1",
-        "form-data": "2.3.2",
-        "har-validator": "5.0.3",
-        "hawk": "6.0.2",
-        "http-signature": "1.2.0",
-        "is-typedarray": "1.0.0",
-        "isstream": "0.1.2",
-        "json-stringify-safe": "5.0.1",
-        "mime-types": "2.1.18",
-        "oauth-sign": "0.8.2",
-        "performance-now": "2.1.0",
-        "qs": "6.5.1",
-        "safe-buffer": "5.1.1",
-        "stringstream": "0.0.5",
-        "tough-cookie": "2.3.4",
-        "tunnel-agent": "0.6.0",
-        "uuid": "3.2.1"
-      }
-    },
-    "require-directory": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
-      "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
-      "dev": true
-    },
-    "require-main-filename": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
-      "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=",
-      "dev": true
-    },
-    "resolve": {
-      "version": "1.7.1",
-      "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz",
-      "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==",
-      "dev": true,
-      "requires": {
-        "path-parse": "1.0.5"
-      }
-    },
-    "resolve-dir": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz",
-      "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=",
-      "dev": true,
-      "requires": {
-        "expand-tilde": "2.0.2",
-        "global-modules": "1.0.0"
-      }
-    },
-    "resolve-url": {
-      "version": "0.2.1",
-      "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
-      "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
-      "dev": true
-    },
-    "ret": {
-      "version": "0.1.15",
-      "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
-      "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
-      "dev": true
-    },
-    "right-align": {
-      "version": "0.1.3",
-      "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz",
-      "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=",
-      "requires": {
-        "align-text": "0.1.4"
-      }
-    },
-    "rimraf": {
-      "version": "2.6.2",
-      "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
-      "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
-      "dev": true,
-      "requires": {
-        "glob": "7.1.2"
-      },
-      "dependencies": {
-        "glob": {
-          "version": "7.1.2",
-          "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
-          "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
-          "dev": true,
-          "requires": {
-            "fs.realpath": "1.0.0",
-            "inflight": "1.0.6",
-            "inherits": "2.0.3",
-            "minimatch": "3.0.4",
-            "once": "1.3.3",
-            "path-is-absolute": "1.0.1"
-          }
-        },
-        "minimatch": {
-          "version": "3.0.4",
-          "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
-          "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
-          "dev": true,
-          "requires": {
-            "brace-expansion": "1.1.11"
-          }
-        }
-      }
-    },
-    "safe-buffer": {
-      "version": "5.1.1",
-      "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
-      "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg=="
-    },
-    "safe-regex": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
-      "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
-      "dev": true,
-      "requires": {
-        "ret": "0.1.15"
-      }
-    },
-    "sass-graph": {
-      "version": "2.2.4",
-      "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz",
-      "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=",
-      "dev": true,
-      "requires": {
-        "glob": "7.1.2",
-        "lodash": "4.17.5",
-        "scss-tokenizer": "0.2.3",
-        "yargs": "7.1.0"
-      },
-      "dependencies": {
-        "camelcase": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz",
-          "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=",
-          "dev": true
-        },
-        "cliui": {
-          "version": "3.2.0",
-          "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
-          "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
-          "dev": true,
-          "requires": {
-            "string-width": "1.0.2",
-            "strip-ansi": "3.0.1",
-            "wrap-ansi": "2.1.0"
-          }
-        },
-        "glob": {
-          "version": "7.1.2",
-          "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
-          "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
-          "dev": true,
-          "requires": {
-            "fs.realpath": "1.0.0",
-            "inflight": "1.0.6",
-            "inherits": "2.0.3",
-            "minimatch": "3.0.4",
-            "once": "1.3.3",
-            "path-is-absolute": "1.0.1"
-          }
-        },
-        "minimatch": {
-          "version": "3.0.4",
-          "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
-          "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
-          "dev": true,
-          "requires": {
-            "brace-expansion": "1.1.11"
-          }
-        },
-        "yargs": {
-          "version": "7.1.0",
-          "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz",
-          "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=",
-          "dev": true,
-          "requires": {
-            "camelcase": "3.0.0",
-            "cliui": "3.2.0",
-            "decamelize": "1.2.0",
-            "get-caller-file": "1.0.2",
-            "os-locale": "1.4.0",
-            "read-pkg-up": "1.0.1",
-            "require-directory": "2.1.1",
-            "require-main-filename": "1.0.1",
-            "set-blocking": "2.0.0",
-            "string-width": "1.0.2",
-            "which-module": "1.0.0",
-            "y18n": "3.2.1",
-            "yargs-parser": "5.0.0"
-          }
-        }
-      }
-    },
-    "scss-tokenizer": {
-      "version": "0.2.3",
-      "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz",
-      "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=",
-      "dev": true,
-      "requires": {
-        "js-base64": "2.4.3",
-        "source-map": "0.4.4"
-      }
-    },
-    "semver": {
-      "version": "5.5.0",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz",
-      "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA=="
-    },
-    "sequencify": {
-      "version": "0.0.7",
-      "resolved": "https://registry.npmjs.org/sequencify/-/sequencify-0.0.7.tgz",
-      "integrity": "sha1-kM/xnQLgcCf9dn9erT57ldHnOAw=",
-      "dev": true
-    },
-    "set-blocking": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
-      "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
-      "dev": true
-    },
-    "set-value": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz",
-      "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==",
-      "dev": true,
-      "requires": {
-        "extend-shallow": "2.0.1",
-        "is-extendable": "0.1.1",
-        "is-plain-object": "2.0.4",
-        "split-string": "3.1.0"
-      },
-      "dependencies": {
-        "extend-shallow": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
-          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
-          "dev": true,
-          "requires": {
-            "is-extendable": "0.1.1"
-          }
-        }
-      }
-    },
-    "shelljs": {
-      "version": "0.3.0",
-      "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.3.0.tgz",
-      "integrity": "sha1-NZbmMHp4FUT1kfN9phg2DzHbV7E=",
-      "dev": true
-    },
-    "sigmund": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz",
-      "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=",
-      "dev": true
-    },
-    "signal-exit": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
-      "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
-      "dev": true
-    },
-    "slash": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
-      "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=",
-      "dev": true
-    },
-    "snapdragon": {
-      "version": "0.8.2",
-      "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
-      "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
-      "dev": true,
-      "requires": {
-        "base": "0.11.2",
-        "debug": "2.6.9",
-        "define-property": "0.2.5",
-        "extend-shallow": "2.0.1",
-        "map-cache": "0.2.2",
-        "source-map": "0.5.7",
-        "source-map-resolve": "0.5.1",
-        "use": "3.1.0"
-      },
-      "dependencies": {
-        "define-property": {
-          "version": "0.2.5",
-          "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
-          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
-          "dev": true,
-          "requires": {
-            "is-descriptor": "0.1.6"
-          }
-        },
-        "extend-shallow": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
-          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
-          "dev": true,
-          "requires": {
-            "is-extendable": "0.1.1"
-          }
-        },
-        "source-map": {
-          "version": "0.5.7",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
-          "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-          "dev": true
-        }
-      }
-    },
-    "snapdragon-node": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
-      "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
-      "dev": true,
-      "requires": {
-        "define-property": "1.0.0",
-        "isobject": "3.0.1",
-        "snapdragon-util": "3.0.1"
-      },
-      "dependencies": {
-        "define-property": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
-          "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
-          "dev": true,
-          "requires": {
-            "is-descriptor": "1.0.2"
-          }
-        },
-        "is-accessor-descriptor": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
-          "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
-          "dev": true,
-          "requires": {
-            "kind-of": "6.0.2"
-          }
-        },
-        "is-data-descriptor": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
-          "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
-          "dev": true,
-          "requires": {
-            "kind-of": "6.0.2"
-          }
-        },
-        "is-descriptor": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
-          "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
-          "dev": true,
-          "requires": {
-            "is-accessor-descriptor": "1.0.0",
-            "is-data-descriptor": "1.0.0",
-            "kind-of": "6.0.2"
-          }
-        },
-        "kind-of": {
-          "version": "6.0.2",
-          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
-          "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
-          "dev": true
-        }
-      }
-    },
-    "snapdragon-util": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
-      "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
-      "dev": true,
-      "requires": {
-        "kind-of": "3.2.2"
-      }
-    },
-    "sntp": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz",
-      "integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==",
-      "dev": true,
-      "requires": {
-        "hoek": "4.2.1"
-      }
-    },
-    "source-map": {
-      "version": "0.4.4",
-      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
-      "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
-      "requires": {
-        "amdefine": "1.0.1"
-      }
-    },
-    "source-map-resolve": {
-      "version": "0.5.1",
-      "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.1.tgz",
-      "integrity": "sha512-0KW2wvzfxm8NCTb30z0LMNyPqWCdDGE2viwzUaucqJdkTRXtZiSY3I+2A6nVAjmdOy0I4gU8DwnVVGsk9jvP2A==",
-      "dev": true,
-      "requires": {
-        "atob": "2.1.0",
-        "decode-uri-component": "0.2.0",
-        "resolve-url": "0.2.1",
-        "source-map-url": "0.4.0",
-        "urix": "0.1.0"
-      }
-    },
-    "source-map-support": {
-      "version": "0.4.18",
-      "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz",
-      "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==",
-      "dev": true,
-      "requires": {
-        "source-map": "0.5.7"
-      },
-      "dependencies": {
-        "source-map": {
-          "version": "0.5.7",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
-          "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-          "dev": true
-        }
-      }
-    },
-    "source-map-url": {
-      "version": "0.4.0",
-      "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
-      "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
-      "dev": true
-    },
-    "sparkles": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.0.tgz",
-      "integrity": "sha1-Gsu/tZJDbRC76PeFt8xvgoFQEsM="
-    },
-    "spdx-correct": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz",
-      "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==",
-      "dev": true,
-      "requires": {
-        "spdx-expression-parse": "3.0.0",
-        "spdx-license-ids": "3.0.0"
-      }
-    },
-    "spdx-exceptions": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz",
-      "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==",
-      "dev": true
-    },
-    "spdx-expression-parse": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
-      "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
-      "dev": true,
-      "requires": {
-        "spdx-exceptions": "2.1.0",
-        "spdx-license-ids": "3.0.0"
-      }
-    },
-    "spdx-license-ids": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz",
-      "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==",
-      "dev": true
-    },
-    "split-string": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
-      "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
-      "dev": true,
-      "requires": {
-        "extend-shallow": "3.0.2"
-      }
-    },
-    "sshpk": {
-      "version": "1.14.1",
-      "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.1.tgz",
-      "integrity": "sha1-Ew9Zde3a2WPx1W+SuaxsUfqfg+s=",
-      "dev": true,
-      "requires": {
-        "asn1": "0.2.3",
-        "assert-plus": "1.0.0",
-        "bcrypt-pbkdf": "1.0.1",
-        "dashdash": "1.14.1",
-        "ecc-jsbn": "0.1.1",
-        "getpass": "0.1.7",
-        "jsbn": "0.1.1",
-        "tweetnacl": "0.14.5"
-      }
-    },
-    "stack-trace": {
-      "version": "0.0.9",
-      "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.9.tgz",
-      "integrity": "sha1-qPbq7KkGdMMz58Q5U/J1tFFRBpU="
-    },
-    "static-extend": {
-      "version": "0.1.2",
-      "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
-      "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
-      "dev": true,
-      "requires": {
-        "define-property": "0.2.5",
-        "object-copy": "0.1.0"
-      },
-      "dependencies": {
-        "define-property": {
-          "version": "0.2.5",
-          "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
-          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
-          "dev": true,
-          "requires": {
-            "is-descriptor": "0.1.6"
-          }
-        }
-      }
-    },
-    "stream-consume": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/stream-consume/-/stream-consume-0.1.1.tgz",
-      "integrity": "sha512-tNa3hzgkjEP7XbCkbRXe1jpg+ievoa0O4SCFlMOYEscGSS4JJsckGL8swUyAa/ApGU3Ae4t6Honor4HhL+tRyg==",
-      "dev": true
-    },
-    "string-width": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
-      "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
-      "dev": true,
-      "requires": {
-        "code-point-at": "1.1.0",
-        "is-fullwidth-code-point": "1.0.0",
-        "strip-ansi": "3.0.1"
-      }
-    },
-    "string_decoder": {
-      "version": "0.10.31",
-      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
-      "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
-    },
-    "stringstream": {
-      "version": "0.0.5",
-      "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz",
-      "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=",
-      "dev": true
-    },
-    "strip-ansi": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
-      "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
-      "requires": {
-        "ansi-regex": "2.1.1"
-      }
-    },
-    "strip-bom": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-1.0.0.tgz",
-      "integrity": "sha1-hbiGLzhEtabV7IRnqTWYFzo295Q=",
-      "dev": true,
-      "requires": {
-        "first-chunk-stream": "1.0.0",
-        "is-utf8": "0.2.1"
-      }
-    },
-    "strip-indent": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
-      "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
-      "dev": true,
-      "requires": {
-        "get-stdin": "4.0.1"
-      }
-    },
-    "strip-json-comments": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz",
-      "integrity": "sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=",
-      "dev": true
-    },
-    "supports-color": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
-      "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
-    },
-    "tar": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz",
-      "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=",
-      "dev": true,
-      "requires": {
-        "block-stream": "0.0.9",
-        "fstream": "1.0.11",
-        "inherits": "2.0.3"
-      }
-    },
-    "through": {
-      "version": "2.3.4",
-      "resolved": "https://registry.npmjs.org/through/-/through-2.3.4.tgz",
-      "integrity": "sha1-SV5A6Nio6uvHwnXqiMK4/BTFZFU=",
-      "dev": true
-    },
-    "through2": {
-      "version": "0.5.1",
-      "resolved": "https://registry.npmjs.org/through2/-/through2-0.5.1.tgz",
-      "integrity": "sha1-390BLrnHAOIyP9M084rGIqs3Lac=",
-      "requires": {
-        "readable-stream": "1.0.34",
-        "xtend": "3.0.0"
-      },
-      "dependencies": {
-        "readable-stream": {
-          "version": "1.0.34",
-          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
-          "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
-          "requires": {
-            "core-util-is": "1.0.2",
-            "inherits": "2.0.3",
-            "isarray": "0.0.1",
-            "string_decoder": "0.10.31"
-          }
-        },
-        "xtend": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz",
-          "integrity": "sha1-XM50B7r2Qsunvs2laBEcST9ZZlo="
-        }
-      }
-    },
-    "tildify": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/tildify/-/tildify-1.2.0.tgz",
-      "integrity": "sha1-3OwD9V3Km3qj5bBPIYF+tW5jWIo=",
-      "dev": true,
-      "requires": {
-        "os-homedir": "1.0.2"
-      }
-    },
-    "time-stamp": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz",
-      "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM="
-    },
-    "to-fast-properties": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
-      "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=",
-      "dev": true
-    },
-    "to-object-path": {
-      "version": "0.3.0",
-      "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
-      "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
-      "dev": true,
-      "requires": {
-        "kind-of": "3.2.2"
-      }
-    },
-    "to-regex": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
-      "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
-      "dev": true,
-      "requires": {
-        "define-property": "2.0.2",
-        "extend-shallow": "3.0.2",
-        "regex-not": "1.0.2",
-        "safe-regex": "1.1.0"
-      }
-    },
-    "to-regex-range": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
-      "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
-      "dev": true,
-      "requires": {
-        "is-number": "3.0.0",
-        "repeat-string": "1.6.1"
-      }
-    },
-    "tough-cookie": {
-      "version": "2.3.4",
-      "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz",
-      "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==",
-      "dev": true,
-      "requires": {
-        "punycode": "1.4.1"
-      }
-    },
-    "transformers": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/transformers/-/transformers-2.1.0.tgz",
-      "integrity": "sha1-XSPLNVYd2F3Gf7hIIwm0fVPM6ac=",
-      "requires": {
-        "css": "1.0.8",
-        "promise": "2.0.0",
-        "uglify-js": "2.2.5"
-      },
-      "dependencies": {
-        "is-promise": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-1.0.1.tgz",
-          "integrity": "sha1-MVc3YcBX4zwukaq56W2gjO++duU="
-        },
-        "promise": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/promise/-/promise-2.0.0.tgz",
-          "integrity": "sha1-RmSKqdYFr10ucMMCS/WUNtoCuA4=",
-          "requires": {
-            "is-promise": "1.0.1"
-          }
-        },
-        "source-map": {
-          "version": "0.1.43",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz",
-          "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=",
-          "requires": {
-            "amdefine": "1.0.1"
-          }
-        },
-        "uglify-js": {
-          "version": "2.2.5",
-          "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.2.5.tgz",
-          "integrity": "sha1-puAqcNg5eSuXgEiLe4sYTAlcmcc=",
-          "requires": {
-            "optimist": "0.3.7",
-            "source-map": "0.1.43"
-          }
-        }
-      }
-    },
-    "trim-newlines": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
-      "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=",
-      "dev": true
-    },
-    "trim-right": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
-      "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
-      "dev": true
-    },
-    "tunnel-agent": {
-      "version": "0.6.0",
-      "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
-      "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
-      "dev": true,
-      "requires": {
-        "safe-buffer": "5.1.1"
-      }
-    },
-    "tweetnacl": {
-      "version": "0.14.5",
-      "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
-      "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
-      "dev": true,
-      "optional": true
-    },
-    "uglify-js": {
-      "version": "2.8.29",
-      "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz",
-      "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=",
-      "requires": {
-        "source-map": "0.5.7",
-        "uglify-to-browserify": "1.0.2",
-        "yargs": "3.10.0"
-      },
-      "dependencies": {
-        "source-map": {
-          "version": "0.5.7",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
-          "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
-        }
-      }
-    },
-    "uglify-save-license": {
-      "version": "0.4.1",
-      "resolved": "https://registry.npmjs.org/uglify-save-license/-/uglify-save-license-0.4.1.tgz",
-      "integrity": "sha1-lXJsF8xv0XHDYX479NjYKqjEzOE=",
-      "dev": true
-    },
-    "uglify-to-browserify": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz",
-      "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=",
-      "optional": true
-    },
-    "unc-path-regex": {
-      "version": "0.1.2",
-      "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz",
-      "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=",
-      "dev": true
-    },
-    "union-value": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz",
-      "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=",
-      "dev": true,
-      "requires": {
-        "arr-union": "3.1.0",
-        "get-value": "2.0.6",
-        "is-extendable": "0.1.1",
-        "set-value": "0.4.3"
-      },
-      "dependencies": {
-        "extend-shallow": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
-          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
-          "dev": true,
-          "requires": {
-            "is-extendable": "0.1.1"
-          }
-        },
-        "set-value": {
-          "version": "0.4.3",
-          "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz",
-          "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=",
-          "dev": true,
-          "requires": {
-            "extend-shallow": "2.0.1",
-            "is-extendable": "0.1.1",
-            "is-plain-object": "2.0.4",
-            "to-object-path": "0.3.0"
-          }
-        }
-      }
-    },
-    "unique-stream": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-1.0.0.tgz",
-      "integrity": "sha1-1ZpKdUJ0R9mqbJHnAmP40mpLEEs=",
-      "dev": true
-    },
-    "unset-value": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
-      "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
-      "dev": true,
-      "requires": {
-        "has-value": "0.3.1",
-        "isobject": "3.0.1"
-      },
-      "dependencies": {
-        "has-value": {
-          "version": "0.3.1",
-          "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
-          "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
-          "dev": true,
-          "requires": {
-            "get-value": "2.0.6",
-            "has-values": "0.1.4",
-            "isobject": "2.1.0"
-          },
-          "dependencies": {
-            "isobject": {
-              "version": "2.1.0",
-              "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
-              "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
-              "dev": true,
-              "requires": {
-                "isarray": "1.0.0"
-              }
-            }
-          }
-        },
-        "has-values": {
-          "version": "0.1.4",
-          "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
-          "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
-          "dev": true
-        },
-        "isarray": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
-          "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
-          "dev": true
-        }
-      }
-    },
-    "urix": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
-      "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
-      "dev": true
-    },
-    "use": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/use/-/use-3.1.0.tgz",
-      "integrity": "sha512-6UJEQM/L+mzC3ZJNM56Q4DFGLX/evKGRg15UJHGB9X5j5Z3AFbgZvjUh2yq/UJUY4U5dh7Fal++XbNg1uzpRAw==",
-      "dev": true,
-      "requires": {
-        "kind-of": "6.0.2"
-      },
-      "dependencies": {
-        "kind-of": {
-          "version": "6.0.2",
-          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
-          "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
-          "dev": true
-        }
-      }
-    },
-    "user-home": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz",
-      "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=",
-      "dev": true
-    },
-    "util-deprecate": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
-      "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
-    },
-    "uuid": {
-      "version": "3.2.1",
-      "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz",
-      "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==",
-      "dev": true
-    },
-    "v8flags": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz",
-      "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=",
-      "dev": true,
-      "requires": {
-        "user-home": "1.1.1"
-      }
-    },
-    "validate-npm-package-license": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz",
-      "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==",
-      "dev": true,
-      "requires": {
-        "spdx-correct": "3.0.0",
-        "spdx-expression-parse": "3.0.0"
-      }
-    },
-    "verror": {
-      "version": "1.10.0",
-      "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
-      "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
-      "dev": true,
-      "requires": {
-        "assert-plus": "1.0.0",
-        "core-util-is": "1.0.2",
-        "extsprintf": "1.3.0"
-      }
-    },
-    "vinyl": {
-      "version": "0.5.3",
-      "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz",
-      "integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=",
-      "requires": {
-        "clone": "1.0.4",
-        "clone-stats": "0.0.1",
-        "replace-ext": "0.0.1"
-      }
-    },
-    "vinyl-fs": {
-      "version": "0.3.14",
-      "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-0.3.14.tgz",
-      "integrity": "sha1-mmhRzhysHBzqX+hsCTHWIMLPqeY=",
-      "dev": true,
-      "requires": {
-        "defaults": "1.0.3",
-        "glob-stream": "3.1.18",
-        "glob-watcher": "0.0.6",
-        "graceful-fs": "3.0.11",
-        "mkdirp": "0.5.1",
-        "strip-bom": "1.0.0",
-        "through2": "0.6.5",
-        "vinyl": "0.4.6"
-      },
-      "dependencies": {
-        "clone": {
-          "version": "0.2.0",
-          "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz",
-          "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=",
-          "dev": true
-        },
-        "readable-stream": {
-          "version": "1.0.34",
-          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
-          "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
-          "dev": true,
-          "requires": {
-            "core-util-is": "1.0.2",
-            "inherits": "2.0.3",
-            "isarray": "0.0.1",
-            "string_decoder": "0.10.31"
-          }
-        },
-        "through2": {
-          "version": "0.6.5",
-          "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz",
-          "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=",
-          "dev": true,
-          "requires": {
-            "readable-stream": "1.0.34",
-            "xtend": "4.0.1"
-          }
-        },
-        "vinyl": {
-          "version": "0.4.6",
-          "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz",
-          "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=",
-          "dev": true,
-          "requires": {
-            "clone": "0.2.0",
-            "clone-stats": "0.0.1"
-          }
-        }
-      }
-    },
-    "vinyl-sourcemaps-apply": {
-      "version": "0.2.1",
-      "resolved": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz",
-      "integrity": "sha1-q2VJ1h0XLCsbh75cUI0jnI74dwU=",
-      "dev": true,
-      "requires": {
-        "source-map": "0.5.7"
-      },
-      "dependencies": {
-        "source-map": {
-          "version": "0.5.7",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
-          "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-          "dev": true
-        }
-      }
-    },
-    "void-elements": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz",
-      "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w="
-    },
-    "which": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz",
-      "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==",
-      "dev": true,
-      "requires": {
-        "isexe": "2.0.0"
-      }
-    },
-    "which-module": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz",
-      "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=",
-      "dev": true
-    },
-    "wide-align": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz",
-      "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==",
-      "dev": true,
-      "requires": {
-        "string-width": "1.0.2"
-      }
-    },
-    "window-size": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz",
-      "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0="
-    },
-    "with": {
-      "version": "4.0.3",
-      "resolved": "https://registry.npmjs.org/with/-/with-4.0.3.tgz",
-      "integrity": "sha1-7v0VTp550sjTQXtkeo8U2f7M4U4=",
-      "requires": {
-        "acorn": "1.2.2",
-        "acorn-globals": "1.0.9"
-      },
-      "dependencies": {
-        "acorn": {
-          "version": "1.2.2",
-          "resolved": "https://registry.npmjs.org/acorn/-/acorn-1.2.2.tgz",
-          "integrity": "sha1-yM4n3grMdtiW0rH6099YjZ6C8BQ="
-        }
-      }
-    },
-    "wordwrap": {
-      "version": "0.0.3",
-      "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
-      "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc="
-    },
-    "wrap-ansi": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
-      "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
-      "dev": true,
-      "requires": {
-        "string-width": "1.0.2",
-        "strip-ansi": "3.0.1"
-      }
-    },
-    "wrappy": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
-      "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
-      "dev": true
-    },
-    "xtend": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
-      "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68="
-    },
-    "y18n": {
-      "version": "3.2.1",
-      "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
-      "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=",
-      "dev": true
-    },
-    "yallist": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
-      "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
-      "dev": true
-    },
-    "yargs": {
-      "version": "3.10.0",
-      "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz",
-      "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=",
-      "requires": {
-        "camelcase": "1.2.1",
-        "cliui": "2.1.0",
-        "decamelize": "1.2.0",
-        "window-size": "0.1.0"
-      }
-    },
-    "yargs-parser": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz",
-      "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=",
-      "dev": true,
-      "requires": {
-        "camelcase": "3.0.0"
-      },
-      "dependencies": {
-        "camelcase": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz",
-          "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=",
-          "dev": true
-        }
-      }
-    }
-  }
-}
index 8be7cc6..05964e9 100644 (file)
@@ -1,25 +1,18 @@
 {
-  "name": "coldwater",
+  "name": "keweenaw",
   "description": "Gaslight Media",
   "version": "0.0.1",
   "devDependencies": {
-    "babel-preset-es2015": "~6.13.2",
-    "bower": "^1.8.2",
-    "gulp": "^3.9.0",
-    "gulp-autoprefixer": "^3.1.0",
-    "gulp-babel": "^6.1.2",
-    "gulp-clean": "^0.3.2",
-    "gulp-concat": "^2.6.0",
-    "gulp-copy": "0.0.2",
-    "gulp-jshint": "^2.0.1",
-    "gulp-rename": "^1.2.2",
-    "gulp-sass": "^2.3.2",
-    "gulp-sourcemaps": "^1.6.0",
-    "gulp-uglify": "^2.0.0",
-    "jshint": "^2.9.2",
-    "node-sass": "^3.8.0"
+    "node-sass": "~2.0.1",
+    "grunt": "~0.4.5",
+    "grunt-contrib-watch": "~0.6.1",
+    "grunt-sass": "~0.18.0",
+    "grunt-contrib-uglify": "~0.7.0",
+    "grunt-contrib-concat": "~0.5.0",
+    "grunt-contrib-copy": "~0.7.0"
   },
   "dependencies": {
-    "gulp-jade-php": "^2.0.0-0"
+    "request": "~2.81.0",
+    "node-sass": "~4.5.3"
   }
 }
diff --git a/page.php b/page.php
deleted file mode 100644 (file)
index 5c88fea..0000000
--- a/page.php
+++ /dev/null
@@ -1,50 +0,0 @@
-<?php
-/**
- * The template for displaying all pages.
- *
- * This is the template that displays all pages by default.
- * Please note that this is the WordPress construct of pages
- * and that other 'pages' on your WordPress site will use a
- * different template.
- *
- * @package accesspress_parallax
- */
-
-
-get_header(); ?>
-
-<?php 
-if(of_get_option('enable_parallax') == 1 && is_front_page() && get_option( 'show_on_front' ) == 'page'){
-       get_template_part('index','parallax');
-}else{
-?>
-
-<div class="mid-content clearfix">
-    
-       <div id="primary" class="content-area">
-        <?php glm_get_header(); ?>
-               <main id="main" class="site-main" role="main">
-
-                       <?php 
-       
-                               while ( have_posts() ) : the_post(); ?>
-
-                               <?php get_template_part( 'content', 'page' ); ?>
-
-                               <?php
-                                       // If comments are open or we have at least one comment, load up the comment template
-                                       if ( comments_open() || '0' != get_comments_number() ) :
-                                               comments_template();
-                                       endif;
-                               ?>
-
-                       <?php endwhile; // end of the loop. ?>
-
-               </main><!-- #main -->
-       </div><!-- #primary -->
-
-
-</div>
-<?php } ?>
-
-<?php get_footer();
diff --git a/parts/blog-content-area.php b/parts/blog-content-area.php
new file mode 100644 (file)
index 0000000..66c0dd3
--- /dev/null
@@ -0,0 +1,28 @@
+        <div id="blog-posts-over" class="small-12 medium-9 columns">
+            <?php if(have_posts()) : while(have_posts()): the_post();?>
+            <div class="row content blog-posts-container">
+              <!--  <div class="small-11 small-centered columns"> -->
+                <?php $thumbnail = get_the_post_thumbnail($post->ID, 'blog-feed-front'); ?>
+                <?php if ($thumbnail) { ?>
+                <div class="small-12 medium-4 columns text-center blog-feed-imgs">
+                    <?php echo $thumbnail; ?>
+                </div>
+                <div class="small-12 medium-8 columns blog-feed-contents">
+                    <?php } else { ?>
+                    <div class="small-12 columns blog-feed-content">
+                        <?php } ?>
+
+                        <?php get_template_part('parts/blog-text'); ?>
+                </div>
+            </div>
+            <?php endwhile; ?>
+            <div class="navigation">
+                <span class="newer"><?php previous_posts_link(__('« Newer','example')) ?></span>
+                <span class="older"><?php next_posts_link(__('Older »','example')) ?></span>
+            </div><!-- /.navigation -->
+            <?php else: ?>
+            <div id="post-404" class="noposts">
+                <p><?php _e('Sorry, no results were found.');?></p>
+            </div><!-- /#post-404 -->
+            <?php endif;?>
+        </div>
\ No newline at end of file
diff --git a/parts/blog-feed-front.php b/parts/blog-feed-front.php
new file mode 100644 (file)
index 0000000..ba35dbb
--- /dev/null
@@ -0,0 +1,27 @@
+<?php $args = array( 'numberposts' => 4);?>
+<div id="home-feed-posts">
+<?php
+$lastposts = get_posts( $args );
+    $count = 0;
+foreach($lastposts as $post) : setup_postdata($post); ?>
+    <div class="home-feed-post">
+        <div class="row">
+            <?php if (has_post_thumbnail( $post->ID )) { ?>
+            <div class="small-11 small-centered columns text-center home-feed-post-image">
+                <?php echo get_the_post_thumbnail($post->ID, array(190, 190), array('class' => 'blog-excerpt-img-wrap')); ?>
+                </div>
+                <div class="small-12 medium-12 columns home-feed-post-content">
+                 <?php } else { ?>
+                <div class="small-12 columns home-feed-post-content">
+                <?php } ?>
+                <span class="meta date"><?php the_time('F j, Y') ?></span>
+                <h2 class="title-posts" href="<?php the_permalink(); ?>"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
+                
+                <div class="excerpt<?php echo $count ?>"><?php echo the_advanced_excerpt('length=265&length_type=characters&no_custom=1&ellipsis=%26hellip;&exclude_tags=a,img,p,strong,h1,h2,h3,hr,div'); ?></div>
+            </div>
+        </div>
+    </div>
+    <hr>
+        <?php $count++; ?>
+<?php endforeach; ?>
+</div>
\ No newline at end of file
diff --git a/parts/blog-sidebar-r.php b/parts/blog-sidebar-r.php
new file mode 100644 (file)
index 0000000..75fe9b0
--- /dev/null
@@ -0,0 +1,33 @@
+        <div id="blog-side-info-wrapper" class="small-11 small-only-text-center medium-3 columns">
+            <div id="blog-side-info">
+                <form id="searchform" action="<?php echo esc_url( home_url() ); ?>" method="get">
+                    <div><input id="s" class="text" type="text" name="s" value="" />
+                    <input class="submit blogbutton" type="submit" name="submit" value="Search" />
+                    <input type="hidden" name="searchType" value="blog" /> </div>
+                </form>
+                <p>Recent Posts</p>
+                <ul>
+                <?php
+                        $args = array( 'numberposts' => '5','post_status'=>'publish' );
+                        $recent_posts = wp_get_recent_posts( $args );
+                        foreach( $recent_posts as $recent ){
+                                echo '<li><a href="' . get_permalink($recent["ID"]) . '">' .   $recent["post_title"].'</a> </li> ';
+                        }
+                ?>
+                </ul>
+                <p>Categories</p>
+                <ul>
+                    <?php
+                    $args = array(
+                    'orderby' => 'name',
+                    'order' => 'ASC'
+                    );
+                  $categories = get_categories($args);
+                    foreach($categories as $category) {
+                      echo '<li><a href="' . get_category_link( $category->term_id ) . '" title="' . sprintf( __( "View all posts in %s" ), $category->name ) . '" ' . '>' . $category->name.'</a> </li> ';  }
+                    ?>
+                </ul>
+                <p>Archive</p>
+                <ul><?php wp_get_archives( array( 'type' => 'monthly', 'limit' => 12 ) ); ?></ul>
+            </div>
+        </div>
\ No newline at end of file
diff --git a/parts/blog-text-single.php b/parts/blog-text-single.php
new file mode 100644 (file)
index 0000000..8cc5d1f
--- /dev/null
@@ -0,0 +1,13 @@
+<article id="<?php the_ID()?>" <?php post_class()?>>
+    <header class="entry-header">
+        <h1 class="entry-title"><a href="<?php the_permalink(); ?>"><?php the_title();?></a></h1>
+        <?php if ( has_post_thumbnail() ):?>
+                 <?php if (get_post_type( $post ) != "ai1ec_event") { ?>
+        <div class="featured-image-wrap"><?php the_post_thumbnail("large"); ?></div>
+        <?php } ?>
+        <?php endif; ?>
+        <span class="meta date">Posted on <?php the_time('F jS, Y') ?></span>
+        <?php get_template_part('parts/share-this'); ?>
+    </header>
+    <?php the_content(); ?>
+</article>
\ No newline at end of file
diff --git a/parts/blog-text.php b/parts/blog-text.php
new file mode 100644 (file)
index 0000000..ba93736
--- /dev/null
@@ -0,0 +1,12 @@
+                                                <article id="<?php the_ID()?>" <?php post_class()?>>
+                                                    <header class="entry-header">
+                                                        <h1 class="entry-title"><a href="<?php the_permalink(); ?>"><?php the_title();?></a></h1>
+                                                        <?php if ( has_post_thumbnail() ):?>
+                                                                 <?php if (get_post_type( $post ) != "ai1ec_event") { ?>
+
+                                                        <?php } ?>
+                                                        <?php endif; ?>
+                                                        <span class="meta date">Posted on <?php the_time('F jS, Y') ?></span>
+                                                    </header>
+                                                    <?php the_advanced_excerpt('length=250&length_type=characters&no_custom=1&ellipsis=%26hellip;&exclude_tags=a,img,p,div,h1,h2,h3,h4,h5,h6'); ?>
+                                                </article>
\ No newline at end of file
diff --git a/parts/city-map.php b/parts/city-map.php
new file mode 100644 (file)
index 0000000..745d18c
--- /dev/null
@@ -0,0 +1,1570 @@
+<!-- Generator: Adobe Illustrator 21.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<svg id="city-map" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+        viewBox="0 0 645 400" style="enable-background:new 0 0 645 400;" xml:space="preserve" preserveAspectRatio="xMinYMin" width="645">
+<style type="text/css">
+       .st0{fill:#BCD5E9;}
+       .st1{fill:#CCE7D3;}
+       .st2{fill:#496B71;}
+       .st3{fill:#81B9D9;}
+       .st4{fill:none;stroke:#007BB2;stroke-width:0.8763;}
+       .st5{fill:#FFFFFF;}
+       .st6{fill:none;stroke:#496B71;stroke-width:0.9816;}
+       .st7{fill:#F0ECE9;}
+       .st8{fill:#F17225;}
+       .st9{fill:none;stroke:#496B71;stroke-width:2.134;}
+       .st10{fill:none;stroke:#496B71;stroke-width:1.7546;}
+       .st11{opacity:0.7;}
+       .st12{fill-rule:evenodd;clip-rule:evenodd;fill:#FFFFFF;}
+       .st13{opacity:0.7;fill-rule:evenodd;clip-rule:evenodd;fill:#FFFFFF;}
+       .st14{fill-rule:evenodd;clip-rule:evenodd;fill:#F17225;}
+/*     .st15{display:none;}*/
+       .st16{display:inline;}
+       .st17{clip-path:url(#SVGID_2_);fill:#F27327;}
+       .st18{clip-path:url(#SVGID_2_);fill:none;stroke:#FFFFFF;}
+       .st19{clip-path:url(#SVGID_4_);fill:#F27327;}
+       .st20{clip-path:url(#SVGID_4_);fill:none;stroke:#FFFFFF;}
+       .st21{clip-path:url(#SVGID_6_);fill:#F27327;}
+       .st22{clip-path:url(#SVGID_6_);fill:none;stroke:#FFFFFF;}
+       .st23{clip-path:url(#SVGID_8_);fill:#F27327;}
+       .st24{clip-path:url(#SVGID_8_);fill:none;stroke:#FFFFFF;}
+       .st25{clip-path:url(#SVGID_10_);fill:#F27327;}
+       .st26{clip-path:url(#SVGID_10_);fill:none;stroke:#FFFFFF;}
+       .st27{clip-path:url(#SVGID_12_);fill:#F27327;}
+       .st28{clip-path:url(#SVGID_12_);fill:none;stroke:#FFFFFF;}
+       .st29{clip-path:url(#SVGID_14_);fill:#F27327;}
+       .st30{clip-path:url(#SVGID_14_);fill:none;stroke:#FFFFFF;}
+       .st31{clip-path:url(#SVGID_16_);fill:#F27327;}
+       .st32{clip-path:url(#SVGID_16_);fill:none;stroke:#FFFFFF;}
+       .st33{clip-path:url(#SVGID_18_);fill:#F27327;}
+       .st34{clip-path:url(#SVGID_18_);fill:none;stroke:#FFFFFF;}
+       .st35{clip-path:url(#SVGID_20_);fill:#F27327;}
+       .st36{clip-path:url(#SVGID_20_);fill:none;stroke:#FFFFFF;}
+       .st37{clip-path:url(#SVGID_22_);fill:#F27327;}
+       .st38{clip-path:url(#SVGID_22_);fill:none;stroke:#FFFFFF;}
+       .st39{fill:transparent;}
+</style>
+<g id="water">
+       <rect class="st0" width="645" height="400"/>
+</g>
+<g id="Land">
+       <g>
+               <path class="st1" d="M643.4,400l-25.7-21.2c-8-13.2-35.1-23.6-35.1-23.6c-5.9,0.3-24-7-24-7c-18.9-23.5-38.3-23.6-38.3-23.6
+                       c-11.5,0.3-11.1-10.4-11.1-10.4c-9.4-14-29.9-1-29.9-1c-15,3.8-20.9-2.1-20.9-2.1c-5.9-11.1-27.5,1.7-27.5,1.7
+                       c-17-3.1-28.2,10.1-28.2,10.1c-15.3,30.3-15,21.6-15,21.6c3.2-20.7,19.8-31.6,19.8-31.6s51.5-39.3,14.6-27.1
+                       c-36.9,12.2-65,51.5-65,51.5s-5.4,5.9-2.3,0.6c3.1-5.2-1.3-5.2-1.3-5.2s-19.5,15.1-7.8,12.3c8-1.9,1,3.1,1,3.1
+                       c-12.6,8.7-19.6,26.7-19.6,26.7c-4.2,17.7-11.5,13.2-11.5,13.2c-7-6.6,3.1-14.3,3.1-14.3c6.9-3,3.5-9.9-0.6-15.1
+                       c0-0.6,0-1.3,0-1.9c0-1.3,0.2-2,0.7-3.1c0.8-2,0.9-4.3,0.3-6.4c-0.5-1.7-1-3.7-0.4-5.5c0.5-1.6,1.7-3,2.1-4.7
+                       c0.3-1.2,0.2-2.4,0.6-3.6c0.3-1.1,1.4-1.9,2-2.9c0.8-1.2,1.1-2.5,1.8-3.7c1.5-2.5,2.7-4.8,3.8-7.4c0.1-0.3,0.2-0.6,0.3-0.9
+                       c1.8-3.4,2.2-9.5,1.3-12.6l0,0l0.1-1v-4.9l0.5-2.4l-0.1-2.8l0.6-2.3l1.1-1.9l1.8-2.3l0.4-3.3l-1.1-3.4l-2.5-2.7l-2-1.6l-2.3-3
+                       l-1.8-1.9l-1.9-1.6h-1.1l-1.4-0.1l-0.6-0.4l-0.8,0.3l-0.5,0.8l-1.4-0.4l-1.7-1.3l2.4-0.3l0.7-0.4l0.7-0.6l0.5-1.3l-0.6-1.1
+                       l-1.2-1.1l-1.7-1.3l-0.2-1.5l-1.1-0.4l-1-0.4l-0.9-1.1l-1-1l-0.5-0.5l-0.6,0.3l-0.7,0.9l-0.8,0.6l-0.9,0.6l0.2,0.4l0.9,0.4
+                       l0.8,0.9l0.2,1.2l-1.3,2.1l-1,1.6l-1.7,0.2l-1.3-0.5c0,0-0.9-0.6-1.1-0.7c-0.1-0.1-0.1-2-0.1-2l0.6-1.4l0.8-1.8l0.8-2.6l0.5-6.7
+                       l0.3-3.9l-0.4-3.3v-3.2l0.8-15.1l-0.4-0.4c0,0-0.7-0.3-0.8-0.5c0-0.2-0.4-0.8-0.1-1c0.3-0.2,1.4-0.5,1.4-0.5l0-0.5l-1.2-0.3
+                       l-2.5-1.1l-2.4-0.8c0,0-2-1.4-2.2-1.5c-0.2-0.1-1.7-1.3-1.7-1.3l-2.2-1.1l-3.5-0.8l-2.1-0.4l-2.4-0.3l-2.9,0.1l-3.2,0.1l-6.1-0.1
+                       l-2.5-1l-1.8-1l-1.1-1l-1-1.4l-1-2.5l-0.9-2.2l-0.6-1.4l-0.3-1.4l-0.1-1.9l-0.2-1.4l-0.7-1.7l-1.7-1.9l-0.3-1.5l-0.2-1.4l0.2-2.4
+                       l0.3-1.7l1.2-0.8l1.6-1.4l1.1-1.1l0.3-1.7l0.5-2.1l0.8-1.2l1-1.3l0.6-1.1l0.2-1.7l-0.1-4.7l-0.2-3.2l-0.7-2.9l-1-2l-0.8-0.9
+                       l-0.7-0.6l-0.5-0.3l-0.9,0.2l-0.7,0.5l-2,0.3l-1.8,0.2l-1.4,0.3l-1.2,0.6l-1.7,1.4l-2.5,1.3l-1.4,0.7l-3.1,2.7l-3.7,3.2l-4,2.6
+                       l-1.8,1.6l-1.8,1.6l-2.4,2.4l-1.8,1.1l-1.6,1.3l-2.9,3.7l-1.8,2.6l-2.4,2.9l-2.9,2.9l-0.7,0.6c-0.4,0.1-1,0.3-1.7,0.7
+                       c-2.7,1.3-4.8,4-7.2,5.8c-3.9,2.9-8.6,3.5-12.5,6.4c-4,3-5.3,7.6-7.4,11.8c-2.4,4.8-6.6,5.1-11.1,6.5c-8.4,2.7-9.6,8.8-12.1,16.3
+                       c-1.4,4.2-5,6.8-5.5,11.4c-0.3,2.8,0,3.8-1.6,6.1c-1,1.5-2.6,3-3.8,4.4l-11.6,3.4c-9-4.9-14.6,1.4-14.6,1.4
+                       c-7.3,6.6-18.1,3.1-18.1,3.1l-13.2,3.1l-7,4.2c0,0-0.7-0.4-10.1,16.3C73.8,319,0.8,343.3,0.8,343.3L1.1,400"/>
+               <path class="st2" d="M641.8,400l-24.9-20.6l-0.1-0.1c-7.4-12.2-32-22.2-34.4-23.2c-6.3,0.1-23.5-6.7-24.2-7l-0.2-0.1l-0.2-0.2
+                       c-14.7-18.3-30.9-23.2-37.5-23.3c-3.8,0.1-6.8-0.9-8.9-3c-2.9-2.9-3.2-6.9-3.2-8.1c-8.8-12.7-28.2-0.6-28.4-0.5l-0.3,0.1
+                       c-15.3,3.9-21.6-2.1-21.8-2.3l-0.2-0.2c-1-1.8-2.5-3-4.5-3.6c-8-2.2-21.4,5.7-21.5,5.7l-0.3,0.2l-0.4-0.1
+                       c-15.6-2.9-26.2,8.6-27.2,9.7c-12.1,24-14.3,23.4-15.5,23.1c-1-0.3-1.3-1.3-1.2-2.1l0-0.1c3.2-20.9,19.6-31.9,20.3-32.3
+                       c14.3-10.9,28.8-24.4,27.4-27.2c-0.1-0.2-1.3-1.7-11.9,1.8c-36.1,11.9-64.2,50.7-64.5,51.1l-0.1,0.1c-3.2,3.5-3.9,3.4-4.5,2.9
+                       c-1-0.7-0.2-2,0.7-3.5c1.2-2,1-2.9,0.9-3.1c-0.2-0.3-0.7-0.5-1-0.5c-5.7,4.5-10.5,9.1-10.9,10.6c0.3,0.1,0.9,0.1,2.5-0.3
+                       c2.6-0.6,4.4-0.7,4.9,0.5c0.2,0.4,0.7,1.6-3.1,4.3c-11.8,8.1-18.7,25.1-19.2,26.2c-1.8,7.8-4.6,12.5-8.1,14
+                       c-2.7,1.1-4.8-0.2-4.9-0.2l-0.2-0.1c-1.9-1.9-2.9-4-2.7-6.3c0.3-5.1,5.7-9.3,6-9.5l0.2-0.1c1.8-0.8,2.9-1.9,3.2-3.3
+                       c0.6-2.4-0.8-6-4.2-10.2l-0.2-0.3l0-1c0-0.4,0-0.8,0-1.2c0-1.4,0.2-2.2,0.7-3.5c0.7-1.8,0.8-3.9,0.2-5.7c-0.8-2.5-0.9-4.5-0.4-6.1
+                       c0.3-0.8,0.7-1.6,1.1-2.3c0.4-0.8,0.8-1.5,1-2.3c0.1-0.5,0.2-0.9,0.2-1.5c0.1-0.7,0.2-1.4,0.4-2.2c0.3-0.9,0.9-1.6,1.4-2.3
+                       c0.3-0.3,0.5-0.6,0.7-0.9c0.4-0.5,0.6-1.2,0.9-1.8c0.2-0.6,0.5-1.2,0.9-1.9c1.6-2.6,2.7-4.8,3.7-7.3c0.1-0.3,0.2-0.5,0.3-0.8
+                       l0.1-0.1c1.7-3.3,2.1-9.1,1.3-11.9l0-0.2l0.1-1.2l0-5l0.5-2.4l-0.1-2.8l0.8-2.7l1.2-2l1.6-2.1l0.3-2.8l-1-3l-2.3-2.5l-2.1-1.8
+                       l-2.2-3l-1.7-1.8l-1.6-1.4h-0.8l-1.7-0.2l-0.4-0.3l0,0l-0.7,1.1l-2.3-0.6l-3.8-2.9l4.5-0.6l0.4-0.3l0.4-0.4l0.2-0.6l-0.3-0.6
+                       l-1.1-1l-2-1.5l-0.2-1.3l-1.8-0.7l-1.1-1.3l-0.9-0.8l-0.6,0.7l-0.5,0.4l0,0l1.2,1.2l0.3,1.9l-2.7,4.4l-2.4,0.3l-1.7-0.6
+                       c-1-0.6-1.2-0.8-1.2-0.8c-0.3-0.3-0.4-0.4-0.4-2.7v-0.2l0.6-1.6l0.8-1.8l0.7-2.4l0.8-10.3l-0.4-3.4v-3.2l0.8-14.6
+                       c-0.8-0.4-1-0.7-1.1-1c-0.1-0.4-0.5-1.3,0.1-1.9l-1.8-0.8l-2.6-0.9c0,0-2-1.4-2.2-1.5c-0.2-0.1-1.4-1-1.7-1.2l-2-1.1l-3.4-0.8
+                       l-2-0.4l-2.2-0.3l-2.9,0.1l-3.2,0.1l-6.4-0.1l-2.8-1.2l-2-1.2l-1.2-1.2l-1.2-1.6l-2.6-6.2l-0.4-1.6l-0.1-1.8l-0.2-1.3l-0.6-1.5
+                       l-1.8-2l-0.4-1.7l-0.3-1.6l0.2-2.5l0.4-2.2l1.5-1l1.6-1.3l0.8-0.8l0.2-1.4l0.5-2.4l0.9-1.4l1-1.3l0.5-0.9l0.1-1.4l-0.1-4.6l-0.2-3
+                       l-0.6-2.7l-0.9-1.7l-0.7-0.8l-0.7-0.5l-0.3,0.1l-0.8,0.5l-4,0.5l-1.2,0.3l-1,0.5l-1.8,1.5l-3.8,2l-3,2.6l-3.8,3.2l-3.9,2.6
+                       l-3.6,3.1l-2.5,2.5l-1.8,1l-1.4,1.2l-2.8,3.6l-1.8,2.6l-2.4,3l-3,3l-0.9,0.8l-0.3,0.1c-0.4,0.1-0.9,0.3-1.5,0.6
+                       c-1.6,0.8-3,2.1-4.4,3.4c-0.8,0.8-1.7,1.6-2.6,2.3c-2.1,1.5-4.3,2.5-6.5,3.3c-2.1,0.9-4.2,1.7-6,3.1c-2.9,2.2-4.3,5.3-5.8,8.6
+                       c-0.4,1-0.9,1.9-1.4,2.9c-2.2,4.3-5.7,5.3-9.3,6.3c-0.8,0.2-1.5,0.4-2.3,0.7c-7.2,2.3-8.7,7.1-10.8,13.7c-0.2,0.6-0.4,1.3-0.6,2
+                       c-0.6,1.9-1.7,3.5-2.7,5c-1.3,2-2.5,3.8-2.8,6.2c0,0.5-0.1,0.9-0.1,1.3c-0.1,1.9-0.2,3.1-1.7,5.2c-0.7,1.1-1.7,2.1-2.6,3.1
+                       c-0.4,0.5-0.9,0.9-1.2,1.3l-0.2,0.2l-12.3,3.6l-0.4-0.2c-8.3-4.4-13.3,1.1-13.4,1.2l-0.1,0.1c-7.1,6.4-17,3.9-18.8,3.4l-12.8,3
+                       l-6.9,4.1c-0.3,0.4-2.2,2.6-9.7,16c-10.7,19.1-76.1,41.7-84,44.4l0.3,56l-2,0v-57.4l0.3-0.2c0.7-0.2,72.8-24.4,83.6-43.7
+                       c8.5-15.1,10-16.5,10.5-16.8l7.1-4.2l13.5-3.2l0.3,0.1c0.1,0,10.3,3.2,17.1-2.9c0.6-0.6,6.4-6.3,15.4-1.7l10.9-3.2
+                       c0.3-0.4,0.7-0.8,1.1-1.2c0.9-0.9,1.8-1.9,2.4-2.9c1.1-1.7,1.2-2.5,1.3-4.3c0-0.4,0.1-0.9,0.1-1.4c0.3-2.9,1.7-5,3.1-7.1
+                       c1-1.5,1.9-2.9,2.4-4.5c0.2-0.7,0.4-1.3,0.6-2c2.1-6.6,3.9-12.4,12.1-15c0.8-0.3,1.6-0.5,2.4-0.7c3.5-1,6.3-1.8,8.1-5.3
+                       c0.5-0.9,0.9-1.9,1.3-2.8c1.5-3.4,3.1-6.9,6.4-9.3c2.1-1.5,4.3-2.4,6.5-3.3c2.1-0.9,4.2-1.7,6-3.1c0.8-0.6,1.6-1.4,2.5-2.2
+                       c1.5-1.4,3-2.8,4.9-3.7c0.7-0.3,1.2-0.5,1.7-0.7l0.5-0.4l2.9-2.9l2.3-2.8l1.8-2.6l3.1-3.9l1.7-1.4l1.7-1l2.3-2.3l3.8-3.3l3.9-2.6
+                       l3.6-3.1l3.3-2.8l1.4-0.7l2.4-1.3l1.8-1.5l1.4-0.6l1.5-0.4l3.5-0.5l0.7-0.5l1.5-0.3l0.9,0.6l0.8,0.7l0.9,1.1l1.1,2.2l0.7,3
+                       l0.2,3.2l0.1,4.8l-0.2,1.9l-0.8,1.4l-1,1.3l-0.7,1l-0.4,1.9l-0.3,1.9l-1.3,1.3l-1.8,1.5l-0.9,0.6l-0.2,1.3l-0.2,2.2l0.2,1.3
+                       l0.3,1.2l1.7,1.8l0.9,2.1l0.2,1.6l0.1,1.8l0.3,1.2l2.5,5.9l0.9,1.2l0.9,0.9l1.7,0.9l2.3,0.9l5.9,0.1l3.2-0.1l3-0.1l2.5,0.3
+                       l2.1,0.4l3.8,0.9l2.3,1.2c0,0,1.6,1.2,1.8,1.3c0.2,0.1,1.6,1.1,2,1.4l2.4,0.8l2.5,1.1l1.9,0.5l-0.2,2l-0.7,0.2
+                       c-0.1,0-0.2,0-0.3,0.1l0.1,0l0.8,0.8l-0.9,15.5l0,3.1l0.4,3.4l-0.8,10.8l-0.8,2.7l-0.8,1.8l-0.5,1.1c0,0.5,0,0.9,0,1.2
+                       c0.2,0.1,0.4,0.2,0.6,0.4l1,0.4l0.9-0.1l1.8-3l-0.1-0.6l-0.5-0.5l-1-0.5l-0.8-1.5l2.3-1.6l0.7-1l1.5-0.7l0.9,1.1l1.1,1l0.7,0.9
+                       l2.5,0.9l0.2,1.7l1.4,1.1l1.4,1.3l0.8,1.6l-0.7,1.9l-0.7,0.6l0.6-0.2l0.8,0.5l1.2,0.1l1.4,0l2.3,2l1.8,2l2.2,2.9l2,1.7l2.7,2.8
+                       l1.3,3.8l-0.4,3.8l-1.9,2.4l-1,1.7l-0.6,2l0.1,2.8l-0.5,2.4v4.8l-0.1,1c0.9,3.2,0.4,9.4-1.4,13.1c-0.1,0.3-0.2,0.6-0.3,0.8
+                       c-1.1,2.6-2.3,4.8-3.9,7.6c-0.3,0.5-0.5,1-0.7,1.6c-0.3,0.7-0.6,1.4-1,2.1c-0.3,0.4-0.6,0.8-0.9,1.1c-0.5,0.5-0.9,1-1,1.5
+                       c-0.2,0.5-0.2,1.1-0.3,1.8c-0.1,0.6-0.1,1.1-0.2,1.7c-0.2,1-0.7,1.9-1.2,2.8c-0.4,0.7-0.7,1.3-0.9,1.9c-0.4,1.2-0.2,2.8,0.4,4.9
+                       c0.7,2.3,0.6,4.8-0.3,7.1c-0.4,1.1-0.6,1.6-0.6,2.7c0,0.4,0,0.8,0,1.2l0,0.3c3.6,4.7,5.1,8.6,4.3,11.7c-0.5,2-1.9,3.5-4.2,4.6
+                       c-0.7,0.5-4.9,4.1-5.1,8c-0.1,1.7,0.6,3.2,2,4.6c0.3,0.2,1.5,0.7,3,0c2-0.8,4.8-3.7,6.9-12.6l0-0.1c0.3-0.8,7.3-18.5,19.9-27.2
+                       c0.7-0.5,1.5-1.2,2-1.7c-0.4,0-1.1,0.1-2.2,0.4c-1.9,0.4-4.1,0.8-4.8-0.7c-1.2-2.6,5.7-8.7,11.8-13.3l0.3-0.2l0.3,0
+                       c0.2,0,2.1,0,3,1.6c0.4,0.8,0.5,1.7,0.2,2.8c3.7-4.9,30.8-39.9,65.1-51.3c8.7-2.9,13.1-3.1,14.3-0.8c2.9,5.5-20.7,24.1-28,29.7
+                       c-0.2,0.1-16.3,10.9-19.4,30.7c1.1-0.9,4.5-4.9,13-21.9l0.1-0.2c0.1-0.1,11.5-13.4,28.7-10.5c2.2-1.3,14.6-8,22.8-5.8
+                       c2.5,0.7,4.4,2.2,5.7,4.4c0.8,0.7,6.6,5.1,19.7,1.8c1.9-1.1,21.7-12.6,31.1,1.4l0.2,0.3l0,0.3c0,0-0.1,4.2,2.7,7
+                       c1.7,1.7,4.2,2.5,7.4,2.4c0.8,0,20,0.4,38.9,23.8c2.1,0.9,18.1,7.1,23.3,6.8l0.2,0l0.2,0.1c1.1,0.4,27.3,10.6,35.5,23.9l26.5,21.9
+                       H641.8z"/>
+       </g>
+       <path class="st1" d="M342.4,289.4l1.8-1.1l2.4-1.8l1.6-2.2l0.9-1.9l1.3-2.2l1.6-2.2l1.6-2.6l0.8-0.9l0.9-0.2l1.6-1.5l1.4-2.3
+               l0.8-0.9l0.6-1.5l0.1-1.9l0.2-2.2l1.3-3l1.7-4.5l0.7-2.2l0.9-1.9l-0.2-3.3v-3.3l0.2-2.5l1.4-2.3l2.2-1.7l2.2-1.6l1.9-0.8l2.3-0.9
+               l2.2-1.3l1.8-1.3l1.5-0.7l2.1-1.6l1.7-2.1l2.6-6.1l0.7-2.4l-0.3-2.9l0.5-3.3l1.3-2.6l2.4-2.6l1.6-0.8l3-0.5h1.6l1.3,0.8l1.4,1.4
+               l1,1.4l0.6,0.5l0.9-0.6l0.8-1l1.6-1l1.5-1.1c0,0,0.7-0.8,0.9-1.1c0.2-0.3,0.6-2.3,0.6-2.3l0.2-1.5l-0.9-0.6l-0.6,0.2l-0.5,0.9
+               l-1.3,0.1l-0.7-0.8l-0.7-2.7l0.2-6.3l1.3-5l1.8-3.7l2.2-3.3l2.7-3.2l2.4-2.5l1.8-1.5l1.6-0.5l0.9,0.7l0.9,0.5l2.1,0.3l1.4-0.5
+               l2.3-1.4l1.5-0.6l1-0.1l1-0.6l1.7-1.7l1.9-0.7l1-0.7l1.3-2.4l1.6-2.3l1.6-0.8l1.9-1.1l1.9-1.9l1.6-3.5l1.6-2.7l1-2.1l1.6-1.4
+               l1.8-0.7l2.1-0.5h1.8l0.8-1.3l1.7-2.5l1.4-1.7l1.3-1.5l1.3-1l1-2.1l1.7-2.4l2.3-2.1l1.6-1.6c0,0,0.7-0.8,0.9-1.1
+               c0.2-0.3,0.8-2.1,0.8-2.1l2.2-0.7l3.4-0.5l2.5-0.7l3.8-1.6l3.1-1.6l2.4-2.5l1.9-1.6l1.5-1l1.4-1.5l1.8-0.9l1.8-0.6l2.1-1.9
+               c0,0,1.8-2.2,2.2-2.3c0.3-0.1,1.9-0.7,1.9-0.7l2.4-0.3l1.6,0.1l1.8-0.9l2.3-2.7l0.9-2.7l-0.9-2.1l-1.6-1.8l-4-2.6l-2.3-2.2
+               l-1.4-2.6l0.7-3l0.5-1.6l0.3-1.6c0,0,0.6-1.4,0.7-1.7c0.1-0.3,0.7-1.5,0.7-1.5l2.2-0.9l3.4-0.6l4-0.9l3.3-0.2l2.9-1l2.1-0.3
+               l1.5,0.6l1,0.5l1.1-0.3l1.6-0.9l2.1-1.1h2.4l1.7,0.1l1.6,1l2.1,0.5l2.7-0.2h1.6l1.8,0.7l0.2,0.8l1.1,0.3h1.3l1.6,0.3l1.6,1
+               c0,0,0.6,0.8,0.9,0.9c0.3,0.1,1.8,0.7,1.8,0.7h1.8l1.6-1.1c0,0,1.3-1.5,1.6-1.6c0.3-0.1,2.2-1.1,2.2-1.1L558,82l1.9-0.5l1.5,0.6
+               l1.1,0.6l1.7,0.1l1.5-0.6l1.3-1.7l1.3-2.2l1.3-1.4l1.6-0.7l1.4-0.2h1.7l0.7-0.2l1.3-0.2l2.2,0.8l2.2,0.7l1.6,0.9h4.8l0.8-0.6
+               L588,76l-0.2-1.9l-0.8-1.7l-1.8-1.6l-0.7-2.4l0.3-3.3l0.5-1.8l-0.6-3.7l-0.2-3.3l-1.5-1.7l-8.5-5.6l-1.1-0.7l-1.4-0.1l-1.8-1.4
+               l-0.7-0.9l-1.5-0.1l-1.5-0.6l-3-1.9l-1.8-0.1l-1.5-1l-1.3-1l-1.5-0.6h-1.9l-2.5-0.3h-1.1l-1.1,0.2l-1.9-0.1l-1.4-0.3h-2.9l-2.4-0.2
+               l-2.5-0.2l-2.4-0.7l-2.4-0.2l-2.3,1l-1.4,0.7l6.1,0.7l0.8,0.7l-0.1,0.8l-1,0.5l-1.4-0.9l-1.1-0.6l-0.7,0.2l-0.3,0.7l-1.1-0.5
+               l-1.4-0.5l-5.3,0.7l-2.1-0.8l-3,0.2l-1.4-0.6l0.6-0.5l-0.6-2.3l-3.5-0.3l-3.5,0.6L510,38l-3.2-1.3c0,0-4.5,1.4-5,1.4
+               c-0.6,0-2.2-0.5-2.2-0.5l-4.5-0.5l-1.1,0.5l-4.7,0.9l-4.5-0.5l-2.6,0.5l-3.8,0.8l-5.7-0.1l-2.1,1.4l5.5,0.6l-6.4,0.7l6.1,0.6
+               l-8.2,0.7l-5.6,0.1l-3.2,0.2l-4.7,0.5l-0.9,0.6l-5.3-0.2l0.3,1.4c0,0-0.3,0.8-0.7,0.8h-1.8l-1.1-0.2l-0.9-0.8l0.6-0.8l0.8-0.5
+               l-6.9,0.2l-0.9,1L437,47l-4.3,0.9V47l-5.4,1.9h-3.2l-3.2,2.6l-0.1-0.5l-4.5,1.1c0,0-0.9,0.8-1.3,0.9c-0.3,0.1-1.9,0.9-1.9,0.9
+               l-2.5,1.3l0.6,0.7l0.9,0.5l0.3,0.6l-0.6,2.5l-4,3.8l-1.3,0.8l-3.1,1l-3.3,0.5l-2.5,0.2l-2.3,0.7c0,0-1.7,0.1-2.1,0.2
+               c-0.3,0.1-2.5,0.3-2.5,0.3l-1.7,1l-3,1.8l-2.6,1.8l-2.4,1.4l-0.6,1c0,0-0.3,0.6-0.9,0.7c-0.6,0.1-4.2,1.5-4.2,1.5l-1.6,0.9
+               l-3.3,2.3l-3.3,1.3l-3,0.7h-2.2l-3.5,1.8c0,0-1.3,1.1-1.6,1.3c-0.3,0.1-2.5,1.9-2.5,1.9l-1.6,0.7l-2.5,1.3l-0.7,0.9l-1.9,1.7
+               c0,0-1.5,1.1-2.3,1.3c-0.8,0.1-3,0.7-3,0.7l-3.2,1.9l-3,4.5l-1.5,2.3l-1.9,2.5l-2.9,2.1l-1.6,1.1l-2.2,2.4l-1.8,2.5l-1.5,2.9
+               l-0.9,3.4l-0.7,2.4l-3.2,2.6l-1.3,3l-2.2,2.9l-1.9,1.7l-3.1,2.6l-1.8,1.7l-1.8,1.6l-2.3,3l-2.2,1.9l-3.3,2.6c0,0-1.7-0.1-1.9,0.2
+               c-0.2,0.3-2.5,2.5-2.9,2.9c-0.3,0.3-3.8,4.1-3.8,4.1l-2.9,1.9l-3,2.3l-4.2,0.6l-3.5,1.4l-3.2,2.1l-1.8,2.4l0,1.6l1.3,2.9l0.7,2.4
+               v4.7l-0.2,8.3l-1,2.1l-1.3,2.3l-1.5,1.7c0,0-1.6,1.6-1.9,1.8c-0.3,0.2-1.5,2.1-1.5,2.1l0.1,2.3l1,1.7l1.6,1.7l0.5,3.2l1,4.9
+               l1.4,3.4l1.3,2.5l2.1,2.2c0,0,1.7,0.6,2.1,0.7c0.3,0.1,3,0.2,3,0.2l13.8-0.3l2.7,1.3l3.3,0.6l4.5,1.4l3.3,1.3l3.1,0.9l1.5,0.5
+               l0.9,0.3l0.5-0.7l0.8-1.1h1v1.3l-0.1,1l-0.5,1.1l-0.6,0.7l0.6,1.4l-0.5,1.6l-0.1,1.6l0.5,0.9l1.3,1.5l0.1,1.9c0,0,0.7,1.3,0.8,1.6
+               c0.1,0.3,1.5,1.3,1.5,1.3l0.8,0.3l0.6-0.5h2.9l0.7-1.3l1.1-0.5l1-0.5l0.3-0.6h1h1c0,0,0.7-0.3,1-0.3c0.3,0,1.1-1,1.1-1l4.7-0.1
+               l1.7-0.3l1.6-0.5l0.2-1V228l0.6-0.3l1.1-0.2l0.7-0.6l0.6-1.1l3.2-10.4l0.3-4.2l-0.6-3.5l-0.6-2.6l-0.7-2.6l-3.3-1.3h-2.3l-1.6,0.6
+               l-1.5,1.7l-1.6,2.9l-0.8,2.3l-2.1,3.7l-1.8,1.6l-1.4,0.2l-0.3,1.3l-1.7,0.2l-1.5-0.7l-0.8-1.5l0.1-1.3l1.1-2.1l1.7-1.5l1.4-0.8
+               l1.8-0.8v-1.6l1.4-0.6l0.3-2.1l1.8-3.7l1.8-1.7l1.9-1l0.8-0.8h2.2l0.8-0.5l-0.8-1.6l2.1-3.9l1.3-2.2l1.5-1.6l1.4-0.3l1.6,1.4l1,1
+               l0.8-0.9l0.6-0.1l0.5,1.1l-0.1,1.3l-0.5,1.1l-1.3,2.2l-0.1,1.3l0.6,1.5l-0.3,2.4l-1.4,1.8l-1.1,1.3l-0.1,2.3l0.6,3.2l0.8,2.4
+               l0.3,2.6v4.6l-0.3,4.8l-0.8,2.7l-1.1,2.3l-1.1,1.9l-1.4,1.6l-0.9,0.7l0.1,1.9l-3.1,3.4l-2.6,1.9l-3.7,1.5l-4.1,2.3l-1.7,2.4
+               l-1.9,3.2l-0.9,2.6l-0.6,3.2l-0.2,3.5v3.7l0.2,2.2l0.8,2.6l1,2.6l1.3,1.6l1.6,0.8l2.2,0.6l1.4,0.5l1.1,0.5v0.7l-0.1,1.1l1.3,3.1
+               l1.9,2.3l1.5,2.2l1.1,2.1l0.1,1.5l1.3-1.6l0.1,5.1c0,0-0.3,1.1-0.7,1.3c-0.3,0.1-0.9,1.6-0.9,1.6l0.7,0.8l1.7-0.2l1.1-0.3
+               L342.4,289.4z"/>
+       <path class="st3" d="M280.2,165.1c-0.1,0.5-0.6,0.9-1,1.1c0-1.3-0.5-4.6,1.2-5.2c0.8-0.3,1.5,0.2,1.5,1.2c0,0.9-1.3,2.5-1.9,3.1"/>
+       <path class="st4" d="M280.2,165.1c-0.1,0.5-0.6,0.9-1,1.1c0-1.3-0.5-4.6,1.2-5.2c0.8-0.3,1.5,0.2,1.5,1.2c0,0.9-1.3,2.5-1.9,3.1"/>
+       <path class="st3" d="M390.3,198.3c-0.4-0.4-0.9-0.3-1.2-0.7c-0.5-0.5-0.4-0.9,0.1-1.4c0.4-0.5,1-0.8,1.5-1.3
+               c0.5-0.5,0.5-1.1,0.3-1.8c-0.3-1-1.2-1.5-2.2-1.6c-0.7,0-1.1,0.1-1.6,0.5c-0.5,0.5-0.7,1.1-1.2,1.6c-0.2,0.2-0.5,0.5-0.7,0.7
+               c-0.3,0.2-0.6,0.3-0.9,0.6c-0.5,0.5-0.6,1.2-0.6,1.9c-0.1,1.2,0.4,2.3,0.3,3.5c-0.1,1.1-0.4,2.5,0.5,3.3c0.8,0.7,2.2,0.5,2.9-0.4
+               c0.3-0.4,0.5-1,0.6-1.5c0.2-0.6,0.5-1,1-1.4c0.4-0.3,0.9-0.5,1.2-0.9c0.3-0.5,0.3-1-0.3-1.3"/>
+       <path class="st4" d="M390.3,198.3c-0.4-0.4-0.9-0.3-1.2-0.7c-0.5-0.5-0.4-0.9,0.1-1.4c0.4-0.5,1-0.8,1.5-1.3
+               c0.5-0.5,0.5-1.1,0.3-1.8c-0.3-1-1.2-1.5-2.2-1.6c-0.7,0-1.1,0.1-1.6,0.5c-0.5,0.5-0.7,1.1-1.2,1.6c-0.2,0.2-0.5,0.5-0.7,0.7
+               c-0.3,0.2-0.6,0.3-0.9,0.6c-0.5,0.5-0.6,1.2-0.6,1.9c-0.1,1.2,0.4,2.3,0.3,3.5c-0.1,1.1-0.4,2.5,0.5,3.3c0.8,0.7,2.2,0.5,2.9-0.4
+               c0.3-0.4,0.5-1,0.6-1.5c0.2-0.6,0.5-1,1-1.4c0.4-0.3,0.9-0.5,1.2-0.9c0.3-0.5,0.3-1-0.3-1.3"/>
+       <path class="st3" d="M377.9,212.1c-0.4,0-1-0.1-1.4,0c-0.2,0.1-0.3,0.3-0.5,0.3c-0.2,0.1-0.4,0.1-0.7,0.2c-0.4,0.2-0.8,0.4-1.1,0.7
+               c-0.4,0.3-0.9,0.6-1.2,1c-0.3,0.3-0.6,0.7-0.7,1.1c-0.1,0.3-0.2,1,0.1,1.2c0.3,0.2,1,0.1,1.3,0c0.3-0.1,0.6-0.4,1-0.5
+               c0.5-0.1,0.7-0.2,1.1-0.5c0.3-0.2,0.6-0.4,1-0.7c0.4-0.3,0.8-0.5,1.2-0.7c0.4-0.3,0.8-0.4,0.9-0.9
+               C378.8,212.5,378.4,212.1,377.9,212.1"/>
+       <path class="st4" d="M377.9,212.1c-0.4,0-1-0.1-1.4,0c-0.2,0.1-0.3,0.3-0.5,0.3c-0.2,0.1-0.4,0.1-0.7,0.2c-0.4,0.2-0.8,0.4-1.1,0.7
+               c-0.4,0.3-0.9,0.6-1.2,1c-0.3,0.3-0.6,0.7-0.7,1.1c-0.1,0.3-0.2,1,0.1,1.2c0.3,0.2,1,0.1,1.3,0c0.3-0.1,0.6-0.4,1-0.5
+               c0.5-0.1,0.7-0.2,1.1-0.5c0.3-0.2,0.6-0.4,1-0.7c0.4-0.3,0.8-0.5,1.2-0.7c0.4-0.3,0.8-0.4,0.9-0.9
+               C378.8,212.5,378.4,212.1,377.9,212.1"/>
+       <path class="st3" d="M399.5,134.9c0,1.2-0.4,1.6-1.6,1.7c-0.5,0-0.8,0.1-1.2,0.4c-0.4,0.3-0.5,0.4-0.8,0.1
+               c-0.3-0.3-0.3-0.6-0.6-0.9c-0.2-0.3-0.6-0.4-0.8-0.7c-0.7-1.1,0.9-1.4,1.6-1.5c0.5-0.1,0.4-0.1,0.8,0.2c0.3,0.2,0.4,0.4,0.9,0.4
+               c0.8,0,1.7-0.5,1.7,0.7"/>
+       <path class="st4" d="M399.5,134.9c0,1.2-0.4,1.6-1.6,1.7c-0.5,0-0.8,0.1-1.2,0.4c-0.4,0.3-0.5,0.4-0.8,0.1
+               c-0.3-0.3-0.3-0.6-0.6-0.9c-0.2-0.3-0.6-0.4-0.8-0.7c-0.7-1.1,0.9-1.4,1.6-1.5c0.5-0.1,0.4-0.1,0.8,0.2c0.3,0.2,0.4,0.4,0.9,0.4
+               c0.8,0,1.7-0.5,1.7,0.7"/>
+       <path class="st3" d="M451.3,48.1c-0.7,0-1.1,0.3-1.7,0.5c-0.5,0.1-1.4-0.2-1.8,0.3c-0.8,1.2,1.4,1.6,2.1,1.7
+               c1.3,0.3,2.4-0.4,3.7-0.5c1.5-0.1,2.6,0.3,2.4-1.6c-1.1-0.7-3.5-0.3-4.8-0.5"/>
+       <path class="st4" d="M451.3,48.1c-0.7,0-1.1,0.3-1.7,0.5c-0.5,0.1-1.4-0.2-1.8,0.3c-0.8,1.2,1.4,1.6,2.1,1.7
+               c1.3,0.3,2.4-0.4,3.7-0.5c1.5-0.1,2.6,0.3,2.4-1.6c-1.1-0.7-3.5-0.3-4.8-0.5"/>
+       <path class="st3" d="M497.1,58.5c-1.2,0.3-0.9-0.9-0.8-1.5c-0.8-0.4-1.7-0.8-2.5-1.2c0.1-1.2-1.1-3.2-2.5-3.1
+               c-0.9,0-0.6,1.1-1.2,1.6c-0.7,0.6-1.6,0.3-2.4,0.4c-1.9,0.3-1.3,2.1-0.1,2.9c0.3,0.2,1.5,0.7,1.6,1c0.4,1-1.2,0.7-1.8,1.1
+               c-1.6,1.1,0.8,1.6,1.6,1.9c1.2,0.4,2.1,1.2,3.6,0.7c0.8-0.3,1-1,1.6-1.4c0.6-0.3,1.5-0.2,2.2-0.2c1.6,0,3.2-0.1,2.8-2.2
+               c-0.8-0.5-2.5,0.4-3-0.2"/>
+       <path class="st4" d="M497.1,58.5c-1.2,0.3-0.9-0.9-0.8-1.5c-0.8-0.4-1.7-0.8-2.5-1.2c0.1-1.2-1.1-3.2-2.5-3.1
+               c-0.9,0-0.6,1.1-1.2,1.6c-0.7,0.6-1.6,0.3-2.4,0.4c-1.9,0.3-1.3,2.1-0.1,2.9c0.3,0.2,1.5,0.7,1.6,1c0.4,1-1.2,0.7-1.8,1.1
+               c-1.6,1.1,0.8,1.6,1.6,1.9c1.2,0.4,2.1,1.2,3.6,0.7c0.8-0.3,1-1,1.6-1.4c0.6-0.3,1.5-0.2,2.2-0.2c1.6,0,3.2-0.1,2.8-2.2
+               c-0.8-0.5-2.5,0.4-3-0.2"/>
+       <path class="st3" d="M470,46.9c-0.4-0.1-0.9-0.5-1.4-0.2c-0.6,0.4-0.2,1,0,1.4c0.2,0.2,1,0.7,1.2,0.7c0.8,0,0.7-0.6,0.6-1.3
+               C470.1,47.2,470,46.9,470,46.9"/>
+       <path class="st4" d="M470,46.9c-0.4-0.1-0.9-0.5-1.4-0.2c-0.6,0.4-0.2,1,0,1.4c0.2,0.2,1,0.7,1.2,0.7c0.8,0,0.7-0.6,0.6-1.3
+               C470.1,47.2,470,46.9,470,46.9"/>
+       <path class="st3" d="M575.3,64.5c0.1-0.3,0.2-0.6-0.1-0.7c-0.2-0.1-0.6,0-0.9-0.1c-0.5-0.1-1-0.4-1.2-0.9c-0.1-0.6,0-1.4,0-2
+               c0.1-0.7,0.2-1.3,1-1.4c0.6-0.1,1.2-0.1,1.6,0.4c0.3,0.5,0.5,0.7,1.1,0.9c0.5,0.2,1.1,0.5,1.6,0.8c0.7,0.5,0.2,0.9-0.1,1.5
+               c-0.3,0.6,0.1,1.4-0.2,1.9c-0.2,0.3-0.5,0.3-0.7,0.5c-0.2,0.2-0.5,0.5-0.7,0.7c-0.2,0.3-0.2,0.5-0.3,0.8c-0.1,0.3,0,0.7-0.2,0.9
+               c-0.5,0.4-1-0.3-1.1-0.7c-0.1-0.5-0.1-1.1,0-1.6c0.1-0.6,0.3-1,0.5-1.6"/>
+       <path class="st4" d="M575.3,64.5c0.1-0.3,0.2-0.6-0.1-0.7c-0.2-0.1-0.6,0-0.9-0.1c-0.5-0.1-1-0.4-1.2-0.9c-0.1-0.6,0-1.4,0-2
+               c0.1-0.7,0.2-1.3,1-1.4c0.6-0.1,1.2-0.1,1.6,0.4c0.3,0.5,0.5,0.7,1.1,0.9c0.5,0.2,1.1,0.5,1.6,0.8c0.7,0.5,0.2,0.9-0.1,1.5
+               c-0.3,0.6,0.1,1.4-0.2,1.9c-0.2,0.3-0.5,0.3-0.7,0.5c-0.2,0.2-0.5,0.5-0.7,0.7c-0.2,0.3-0.2,0.5-0.3,0.8c-0.1,0.3,0,0.7-0.2,0.9
+               c-0.5,0.4-1-0.3-1.1-0.7c-0.1-0.5-0.1-1.1,0-1.6c0.1-0.6,0.3-1,0.5-1.6"/>
+       <path class="st3" d="M551.1,73.3c-0.1,0.3,0,0.6-0.2,0.9c-0.3,0.3-0.5,0.1-0.8,0.1c-0.8,0-0.4,0.8,0,1.1c0.8,0.5,1.2,1.7,2.2,1.7
+               c0.4,0,0.6,0,0.8-0.3c0.2-0.3,0.2-0.5,0.4-0.7c0.5-0.6,0.3-0.9-0.2-1.4c-0.4-0.3-0.8-0.7-1.1-1.1c-0.2-0.3-1-1.1-1.3-0.3
+               c0,0.1,0,0.2,0,0.3"/>
+       <path class="st4" d="M551.1,73.3c-0.1,0.3,0,0.6-0.2,0.9c-0.3,0.3-0.5,0.1-0.8,0.1c-0.8,0-0.4,0.8,0,1.1c0.8,0.5,1.2,1.7,2.2,1.7
+               c0.4,0,0.6,0,0.8-0.3c0.2-0.3,0.2-0.5,0.4-0.7c0.5-0.6,0.3-0.9-0.2-1.4c-0.4-0.3-0.8-0.7-1.1-1.1c-0.2-0.3-1-1.1-1.3-0.3
+               c0,0.1,0,0.2,0,0.3"/>
+       <path class="st3" d="M566.5,76.2c0.1,0.1,0.3,0.2,0.5,0.2c0.6,0,1.3-0.7,1.3-1.3c0-0.2,0.1-0.6-0.4-0.6c-1-0.1-1.4,0.8-1.5,1
+               C566.2,75.9,566.4,76.2,566.5,76.2"/>
+       <path class="st4" d="M566.5,76.2c0.1,0.1,0.3,0.2,0.5,0.2c0.6,0,1.3-0.7,1.3-1.3c0-0.2,0.1-0.6-0.4-0.6c-1-0.1-1.4,0.8-1.5,1
+               C566.2,75.9,566.4,76.2,566.5,76.2z"/>
+       <path class="st3" d="M517.8,70.4c-0.5-0.1-0.8-0.7-1.3-0.7c-0.5-0.1-1,0.5-1.4,0.7c-0.6,0.3-1.1,0.9-0.7,1.6
+               c0.1,0.2,0.4,0.4,0.6,0.4c0.4,0.1,0.5-0.1,0.8-0.3c0.2-0.2,0.4-0.4,0.6-0.5c0.3-0.1,0.7,0,1.1-0.1c0.8-0.3,0.1-0.8-0.2-1.2"/>
+       <path class="st4" d="M517.8,70.4c-0.5-0.1-0.8-0.7-1.3-0.7c-0.5-0.1-1,0.5-1.4,0.7c-0.6,0.3-1.1,0.9-0.7,1.6
+               c0.1,0.2,0.4,0.4,0.6,0.4c0.4,0.1,0.5-0.1,0.8-0.3c0.2-0.2,0.4-0.4,0.6-0.5c0.3-0.1,0.7,0,1.1-0.1c0.8-0.3,0.1-0.8-0.2-1.2"/>
+       <path class="st3" d="M525.9,68c-0.7,0-1.2,0-1.7-0.2c-0.5-0.2-1.1-0.2-1.6-0.4c-0.5-0.2-0.9-0.7-0.8-1.3c0.1-0.8,0.7-1,1.4-1
+               c0.6,0,1.2,0.3,1.7,0.6c0.6,0.3,1.1,0.5,1.8,0.5c0.7,0,1.4-0.1,2.1-0.2c0.6-0.1,1.6-0.4,1.9,0.2c0.3,0.6,0.1,1.3-0.6,1.4
+               c-0.6,0.1-1.2,0-1.8-0.1c-0.6-0.1-1.2,0-1.8,0.1c-0.4,0-0.5,0.2-0.8,0.3c-0.2,0.1-0.7,0.1-1,0c-0.2,0-0.3,0-0.4-0.1"/>
+       <path class="st4" d="M525.9,68c-0.7,0-1.2,0-1.7-0.2c-0.5-0.2-1.1-0.2-1.6-0.4c-0.5-0.2-0.9-0.7-0.8-1.3c0.1-0.8,0.7-1,1.4-1
+               c0.6,0,1.2,0.3,1.7,0.6c0.6,0.3,1.1,0.5,1.8,0.5c0.7,0,1.4-0.1,2.1-0.2c0.6-0.1,1.6-0.4,1.9,0.2c0.3,0.6,0.1,1.3-0.6,1.4
+               c-0.6,0.1-1.2,0-1.8-0.1c-0.6-0.1-1.2,0-1.8,0.1c-0.4,0-0.5,0.2-0.8,0.3c-0.2,0.1-0.7,0.1-1,0c-0.2,0-0.3,0-0.4-0.1"/>
+       <path class="st3" d="M441.5,96.2c-0.5,0.1-1.2,0-1.6,0.1c-0.6,0.2-1,0.7-1.1,1.2c-0.1,0.6-0.3,1.2-0.5,1.7
+               c-0.1,0.3-0.2,0.6-0.4,0.8c-0.2,0.3-0.5,0.4-0.7,0.6c-0.4,0.4-0.9,0.7-1.2,1.2c-0.2,0.3-0.2,0.5-0.3,0.9c0,0.2-0.2,0.6-0.3,0.7
+               c-0.3,0.2-0.5,0-0.7,0.4c-0.1,0.2,0,0.6,0,0.8c0.1,0.5,0.3,1,0.6,1.5c0.3,0.5,0.8,0.9,1.3,1.2c0.5,0.3,1.1,0.4,1.7,0.5
+               c0.6,0.1,1.3,0.1,1.7-0.2c0.5-0.4,0.5-1.2,1.1-1.4c0.6-0.2,1.3,0.2,1.8,0.1c0.3-0.1,0.4-0.5,0.6-0.7c0.2-0.3,0.3-0.4,0.6-0.6
+               c0.6-0.3,1.3-0.3,1.8-0.6c0.7-0.4,1-0.9,1.2-1.6c0.2-0.6,0.4-1.1,0.5-1.7c0.1-0.6,0.2-1.2,0.6-1.6c0.5-0.6,1.2-0.9,1.7-1.4
+               c0.4-0.4,0.5-1,0.4-1.6c-0.1-0.6-0.7-0.9-1.1-1.3c-0.5-0.4-0.7-0.8-1.2-1.2c-1.1-0.9-2.3-0.3-3.3,0.5c-0.6,0.5-1,1.1-1.7,1.4
+               c-0.3,0.1-0.7,0.2-1,0.2c-0.3,0.1-0.7,0.2-0.9,0.2"/>
+       <path class="st4" d="M441.5,96.2c-0.5,0.1-1.2,0-1.6,0.1c-0.6,0.2-1,0.7-1.1,1.2c-0.1,0.6-0.3,1.2-0.5,1.7
+               c-0.1,0.3-0.2,0.6-0.4,0.8c-0.2,0.3-0.5,0.4-0.7,0.6c-0.4,0.4-0.9,0.7-1.2,1.2c-0.2,0.3-0.2,0.5-0.3,0.9c0,0.2-0.2,0.6-0.3,0.7
+               c-0.3,0.2-0.5,0-0.7,0.4c-0.1,0.2,0,0.6,0,0.8c0.1,0.5,0.3,1,0.6,1.5c0.3,0.5,0.8,0.9,1.3,1.2c0.5,0.3,1.1,0.4,1.7,0.5
+               c0.6,0.1,1.3,0.1,1.7-0.2c0.5-0.4,0.5-1.2,1.1-1.4c0.6-0.2,1.3,0.2,1.8,0.1c0.3-0.1,0.4-0.5,0.6-0.7c0.2-0.3,0.3-0.4,0.6-0.6
+               c0.6-0.3,1.3-0.3,1.8-0.6c0.7-0.4,1-0.9,1.2-1.6c0.2-0.6,0.4-1.1,0.5-1.7c0.1-0.6,0.2-1.2,0.6-1.6c0.5-0.6,1.2-0.9,1.7-1.4
+               c0.4-0.4,0.5-1,0.4-1.6c-0.1-0.6-0.7-0.9-1.1-1.3c-0.5-0.4-0.7-0.8-1.2-1.2c-1.1-0.9-2.3-0.3-3.3,0.5c-0.6,0.5-1,1.1-1.7,1.4
+               c-0.3,0.1-0.7,0.2-1,0.2c-0.3,0.1-0.7,0.2-0.9,0.2"/>
+       <path class="st3" d="M472.3,96.9c-0.1,1,0,2.7,0.3,3.6"/>
+       <path class="st3" d="M475.6,100.8c-0.9-0.2-1.6-1.1-2.4-1.5c-1.6-0.8-1.4,1.3-1.4,2.4c0,0.7,0,1.3-0.1,1.9
+               c-0.1,0.7-0.4,1.1-0.5,1.7c-0.3,1.2,1.5,1.6,2.4,1.5c0.9-0.1,1.3-0.6,2-1.1c0.8-0.5,1.5-0.8,1.8-1.9c0.5-2.1-1.2-2.2-2.4-3.4"/>
+       <path class="st4" d="M475.6,100.8c-0.9-0.2-1.6-1.1-2.4-1.5c-1.6-0.8-1.4,1.3-1.4,2.4c0,0.7,0,1.3-0.1,1.9
+               c-0.1,0.7-0.4,1.1-0.5,1.7c-0.3,1.2,1.5,1.6,2.4,1.5c0.9-0.1,1.3-0.6,2-1.1c0.8-0.5,1.5-0.8,1.8-1.9c0.5-2.1-1.2-2.2-2.4-3.4"/>
+       <path class="st3" d="M480.3,88.5c-1.2,0.3-1.3,0.4-2.6,0.4c-1.3,0-1.9,1.3-2.4,2.3c-0.6,1.2-0.5,2.3-0.2,3.4
+               c0.3,0.9,0.4,2.1,1.5,2.3c1.6,0.3,1.7-1.7,2.8-2.2c1.1-0.5,2.6-0.1,3.7-0.1c0.6,0,1.3,0.1,1.9,0c0.9-0.1,1-0.5,1.6-1.1
+               c0.4-0.4,1.1-0.9,1.7-0.7c0.4,0.1,0.7,0.7,1.1,0.9c1,0.6,2.3,0,3.4,0.3c0.6,0.2,0.8,0.5,1.5,0.5c0.5,0,1-0.2,1.4-0.6
+               c0.6-0.6,1.5-2.2,1.6-3c0.1-1.4-1.9-1.4-2.7-0.9c-0.5,0.3-0.7,0.6-1.3,0.7c-0.4,0.1-0.9,0-1.3-0.2c-0.8-0.3-2-0.5-2.3-1.4
+               c-0.1-0.5,0.1-0.8-0.4-1.1c-0.3-0.2-0.9-0.2-1.3-0.1c-0.9,0.1-1.7,0.9-2.6,0.8c-1-1.4-4.5-0.8-6.1-0.3"/>
+       <path class="st4" d="M480.3,88.5c-1.2,0.3-1.3,0.4-2.6,0.4c-1.3,0-1.9,1.3-2.4,2.3c-0.6,1.2-0.5,2.3-0.2,3.4
+               c0.3,0.9,0.4,2.1,1.5,2.3c1.6,0.3,1.7-1.7,2.8-2.2c1.1-0.5,2.6-0.1,3.7-0.1c0.6,0,1.3,0.1,1.9,0c0.9-0.1,1-0.5,1.6-1.1
+               c0.4-0.4,1.1-0.9,1.7-0.7c0.4,0.1,0.7,0.7,1.1,0.9c1,0.6,2.3,0,3.4,0.3c0.6,0.2,0.8,0.5,1.5,0.5c0.5,0,1-0.2,1.4-0.6
+               c0.6-0.6,1.5-2.2,1.6-3c0.1-1.4-1.9-1.4-2.7-0.9c-0.5,0.3-0.7,0.6-1.3,0.7c-0.4,0.1-0.9,0-1.3-0.2c-0.8-0.3-2-0.5-2.3-1.4
+               c-0.1-0.5,0.1-0.8-0.4-1.1c-0.3-0.2-0.9-0.2-1.3-0.1c-0.9,0.1-1.7,0.9-2.6,0.8c-1-1.4-4.5-0.8-6.1-0.3"/>
+       <path class="st3" d="M526.3,49.4c-0.4-0.2-0.6,0-0.9,0c-0.4,0-0.5-0.2-0.7,0.3c-0.2,0.6,0.4,1.1,0.8,1.5c1.3,1.1,2.8-1.1,1.6-1.7
+               C526.9,49.2,526.5,49,526.3,49.4c0,0-0.1,0-0.2,0"/>
+       <path class="st4" d="M526.3,49.4c-0.4-0.2-0.6,0-0.9,0c-0.4,0-0.5-0.2-0.7,0.3c-0.2,0.6,0.4,1.1,0.8,1.5c1.3,1.1,2.8-1.1,1.6-1.7
+               C526.9,49.2,526.5,49,526.3,49.4c0,0-0.1,0-0.2,0"/>
+       <path class="st3" d="M542.5,46.2c-0.1-0.4-0.3-1.4-1-1.3c-0.6,0.1-0.7,1.5-0.4,1.9c0.3,0.5,1.1,0.3,1.5,0.9c0.4,0.5,0.2,1.4,0.2,2
+               c0,0.1,0.1,0.3,0.1,0.5c0.1-0.4-0.1-0.8-0.1-1.2c-0.1-0.4-0.1-0.9-0.1-1.3c0-0.5,0.1-0.9,0-1.4c0-0.4-0.1-0.6-0.3-0.9"/>
+       <path class="st4" d="M542.5,46.2c-0.1-0.4-0.3-1.4-1-1.3c-0.6,0.1-0.7,1.5-0.4,1.9c0.3,0.5,1.1,0.3,1.5,0.9c0.4,0.5,0.2,1.4,0.2,2
+               c0,0.1,0.1,0.3,0.1,0.5c0.1-0.4-0.1-0.8-0.1-1.2c-0.1-0.4-0.1-0.9-0.1-1.3c0-0.5,0.1-0.9,0-1.4c0-0.4-0.1-0.6-0.3-0.9"/>
+       <path class="st3" d="M538,41.9c0.3,0,0.6,0,0.9,0c0.4,0,0.5-0.1,0.9-0.3c0.3-0.1,0.6-0.2,0.9-0.1c0.4,0.1,0.4,0.1,0.5,0.4
+               c0.3,0.6,0,1.1-0.8,1c-0.5-0.1-0.8-0.6-1-1"/>
+       <path class="st4" d="M538,41.9c0.3,0,0.6,0,0.9,0c0.4,0,0.5-0.1,0.9-0.3c0.3-0.1,0.6-0.2,0.9-0.1c0.4,0.1,0.4,0.1,0.5,0.4
+               c0.3,0.6,0,1.1-0.8,1c-0.5-0.1-0.8-0.6-1-1"/>
+       <path class="st3" d="M525.2,43.5c-0.7,0.1-1.2-0.5-1.8,0.1c-0.8,0.8,0.2,1.2,0.8,1.4c1.4,0.6,2.6,0.9,4.1,0.7
+               c0.9-0.1,1.6-0.2,2.5-0.2c1,0,1.7,0.4,2.7,0.6c1,0.3,1.9,0.4,2.9,0.3c0.5,0,0.8-0.2,1.3-0.3c0.3-0.1,0.8,0,1.1-0.2
+               c0.8-0.3,0.4-1.3-0.1-1.7c-0.7-0.6-1.5-0.7-2.5-0.7c-0.8,0-1.4,0.4-2.2,0.3c-0.7-0.1-1.5-0.3-2.1-0.4c-0.7-0.1-1,0.1-1.7,0.3
+               c-0.6,0.2-1.2,0.1-1.8,0.1c-0.7,0-1.2-0.3-1.9-0.4c-0.4-0.1-1.1,0-1.4-0.2"/>
+       <path class="st4" d="M525.2,43.5c-0.7,0.1-1.2-0.5-1.8,0.1c-0.8,0.8,0.2,1.2,0.8,1.4c1.4,0.6,2.6,0.9,4.1,0.7
+               c0.9-0.1,1.6-0.2,2.5-0.2c1,0,1.7,0.4,2.7,0.6c1,0.3,1.9,0.4,2.9,0.3c0.5,0,0.8-0.2,1.3-0.3c0.3-0.1,0.8,0,1.1-0.2
+               c0.8-0.3,0.4-1.3-0.1-1.7c-0.7-0.6-1.5-0.7-2.5-0.7c-0.8,0-1.4,0.4-2.2,0.3c-0.7-0.1-1.5-0.3-2.1-0.4c-0.7-0.1-1,0.1-1.7,0.3
+               c-0.6,0.2-1.2,0.1-1.8,0.1c-0.7,0-1.2-0.3-1.9-0.4c-0.4-0.1-1.1,0-1.4-0.2"/>
+       <path class="st3" d="M288.2,329.1c-2.2,0.1-5.4,5.4-5.2,7.4c0.5-0.1,1.2,0.2,1.7,0.1c-0.1,0.2,0,0.7,0,0.9c-0.2,0.1-0.4,0-0.7,0.1
+               c-0.1,1.1-0.4,1.8-0.5,2.9c2.2,0.6,2.4-2,3-3.4c0.8-1.9,1.1-2.5,3.1-3.5c0.3-1-0.4-2-0.9-2.6c0.9-0.2,1.2-0.7,1.4-1.5
+               C289.5,329.1,288.8,329,288.2,329.1"/>
+       <path class="st4" d="M288.2,329.1c-2.2,0.1-5.4,5.4-5.2,7.4c0.5-0.1,1.2,0.2,1.7,0.1c-0.1,0.2,0,0.7,0,0.9c-0.2,0.1-0.4,0-0.7,0.1
+               c-0.1,1.1-0.4,1.8-0.5,2.9c2.2,0.6,2.4-2,3-3.4c0.8-1.9,1.1-2.5,3.1-3.5c0.3-1-0.4-2-0.9-2.6c0.9-0.2,1.2-0.7,1.4-1.5
+               C289.5,329.1,288.8,329,288.2,329.1"/>
+       <g>
+               <g>
+                       <g>
+                               <path class="st5" d="M478.7,258.3L470,248l2.1-1.7l7.1,8.5l4-3.3l1.5,1.8L478.7,258.3z"/>
+                               <path class="st5" d="M490.9,248l-1.3-0.7l-0.1,0c0,0.7,0,1.4-0.3,1.8c-0.2,0.5-0.6,1-1.2,1.5c-0.7,0.6-1.5,0.9-2.2,0.8
+                                       c-0.8-0.1-1.5-0.5-2.2-1.3c-0.7-0.8-0.9-1.7-0.7-2.6c0.2-0.9,0.9-1.8,2-2.8l1.3-1.1l-0.3-0.3c-0.7-0.8-1.4-0.9-2.2-0.2
+                                       c-0.6,0.5-1.1,1.3-1.6,2.3l-1.9-0.9c0.5-1.2,1.2-2.2,2.3-3.1c1-0.8,2-1.3,2.9-1.2c0.9,0,1.8,0.5,2.6,1.4l4.4,5.3L490.9,248z
+                                        M487.2,244.9l-0.8,0.7c-0.6,0.5-0.9,1-1,1.5c-0.1,0.5,0,0.9,0.4,1.3c0.5,0.6,1.1,0.6,1.8,0.1c0.5-0.4,0.7-0.9,0.8-1.4
+                                       c0-0.5-0.1-1-0.5-1.5L487.2,244.9z"/>
+                               <path class="st5" d="M492.8,239.1l-0.1-1.9l0.1-4.2l2.3-1.9L495,237l6.9,1.8l-2.4,2l-4.8-1.4l-0.3,1.5l2.1,2.5l-2,1.7l-9.2-11
+                                       l2-1.7l4.1,4.9L492.8,239.1L492.8,239.1z"/>
+                               <path class="st5" d="M506.2,235.4c-1.2,1-2.4,1.5-3.7,1.3c-1.3-0.1-2.4-0.8-3.5-2.1c-1.1-1.3-1.7-2.6-1.6-3.9
+                                       c0-1.2,0.6-2.3,1.7-3.3c1.1-0.9,2.2-1.3,3.3-1.1c1.1,0.1,2.2,0.8,3.1,1.9l0.9,1l-4.8,4.1c0.5,0.6,1.1,0.9,1.7,1
+                                       c0.6,0.1,1.2-0.1,1.8-0.6c0.5-0.4,0.8-0.8,1.2-1.2c0.3-0.4,0.6-0.9,0.9-1.5l1.4,1.7c-0.2,0.5-0.5,0.9-0.8,1.4
+                                       C507.3,234.4,506.8,234.9,506.2,235.4z M500.4,229c-0.4,0.4-0.7,0.8-0.7,1.3c0,0.5,0.2,1,0.6,1.6l2.9-2.4
+                                       c-0.5-0.5-0.9-0.8-1.4-0.9C501.3,228.5,500.8,228.6,500.4,229z"/>
+                               <path class="st5" d="M517.9,220.4c0.8,0.9,1.1,1.9,0.9,3c-0.2,1.1-0.8,2.1-2,3c-1,0.9-2.1,1.4-3.3,1.7l-1.7-2
+                                       c0.9-0.2,1.7-0.5,2.2-0.8c0.6-0.3,1-0.5,1.4-0.9c0.5-0.4,0.7-0.8,0.8-1.2c0.1-0.4,0-0.8-0.3-1.1c-0.2-0.2-0.4-0.3-0.6-0.4
+                                       c-0.2-0.1-0.5-0.1-0.9-0.1c-0.3,0-0.9,0.2-1.9,0.4c-0.8,0.2-1.5,0.3-2.1,0.3c-0.5,0-1-0.1-1.5-0.4c-0.5-0.2-0.9-0.6-1.3-1
+                                       c-0.8-0.9-1.1-1.9-0.9-2.9c0.2-1,0.7-2,1.8-2.8c0.5-0.4,1-0.8,1.6-1c0.6-0.3,1.2-0.5,1.9-0.7l0.8,2.3c-0.7,0.2-1.3,0.4-1.7,0.6
+                                       c-0.4,0.2-0.8,0.4-1.1,0.7c-0.4,0.3-0.6,0.7-0.7,1c0,0.4,0.1,0.7,0.3,1c0.2,0.2,0.3,0.3,0.6,0.4c0.2,0.1,0.5,0.1,0.8,0.1
+                                       c0.3,0,0.9-0.2,1.9-0.4c1.3-0.3,2.3-0.4,3-0.2C516.7,219.3,517.4,219.8,517.9,220.4z"/>
+                               <path class="st5" d="M527.2,217.6l-1.1-0.8l-0.1,0.1c0.1,0.6,0,1.1-0.2,1.6c-0.2,0.5-0.6,1-1.1,1.5c-0.9,0.7-1.8,1-2.6,0.9
+                                       c-0.9-0.1-1.7-0.6-2.5-1.6l-4.3-5.1l2-1.7l3.9,4.6c0.5,0.6,0.9,0.9,1.4,1c0.4,0.1,0.9,0,1.3-0.3c0.6-0.5,0.8-1,0.7-1.6
+                                       c-0.1-0.6-0.5-1.4-1.3-2.3l-3.1-3.7l2-1.7l6.6,7.9L527.2,217.6z"/>
+                               <path class="st5" d="M535.1,211.2c-0.9,0.7-1.9,1-2.9,0.7l-0.1,0.1c0.6,0.6,1,0.9,1.1,1.1l2.7,3.2l-2,1.7l-9.5-11.4l1.7-1.4
+                                       l1.1,0.8l0.1-0.1c-0.2-1.2,0.2-2.2,1.1-3c0.9-0.7,1.9-1,3-0.7c1.1,0.3,2.2,1.1,3.3,2.4c0.7,0.8,1.2,1.7,1.5,2.5
+                                       c0.3,0.8,0.3,1.6,0.2,2.3C536.1,210.1,535.7,210.7,535.1,211.2z M529.1,205.2c-0.5,0.4-0.7,0.9-0.7,1.4c0,0.5,0.4,1.2,1,1.9
+                                       l0.2,0.2c0.7,0.8,1.3,1.4,1.9,1.5c0.5,0.2,1.1,0,1.6-0.4c0.9-0.8,0.7-1.9-0.6-3.5c-0.7-0.8-1.3-1.3-1.8-1.5
+                                       C530.1,204.7,529.6,204.8,529.1,205.2z"/>
+                               <path class="st5" d="M543,204.5c-1.2,1-2.4,1.5-3.7,1.3c-1.3-0.1-2.4-0.8-3.5-2.1c-1.1-1.3-1.7-2.6-1.6-3.9
+                                       c0-1.2,0.6-2.3,1.7-3.3c1.1-0.9,2.2-1.3,3.3-1.1c1.1,0.1,2.2,0.8,3.1,1.9l0.9,1l-4.8,4.1c0.5,0.6,1.1,0.9,1.7,1
+                                       c0.6,0.1,1.2-0.1,1.8-0.6c0.5-0.4,0.8-0.8,1.2-1.2s0.6-0.9,0.9-1.5l1.4,1.7c-0.2,0.5-0.5,0.9-0.8,1.4
+                                       C544.1,203.6,543.6,204,543,204.5z M537.2,198.1c-0.4,0.4-0.7,0.8-0.7,1.3c0,0.5,0.2,1,0.6,1.6l2.9-2.4
+                                       c-0.5-0.5-0.9-0.8-1.4-0.9C538.1,197.6,537.6,197.7,537.2,198.1z"/>
+                               <path class="st5" d="M545.1,188.9c0.3-0.2,0.5-0.4,0.7-0.5l1.5,2.1c-0.2,0.1-0.4,0.2-0.7,0.4c-0.7,0.5-1,1.2-1.1,1.8
+                                       c-0.1,0.7,0.2,1.3,0.7,1.9l3.4,4l-2,1.7l-6.6-7.9l1.5-1.3l1.4,1.1l0.1-0.1c-0.1-0.6-0.1-1.3,0-1.9
+                                       C544.3,189.7,544.6,189.3,545.1,188.9z"/>
+                               <path class="st5" d="M545.3,185.5c-0.6-0.7-0.5-1.4,0.2-2c0.7-0.6,1.4-0.6,2,0.1c0.3,0.3,0.4,0.7,0.4,1s-0.2,0.7-0.6,1
+                                       C546.5,186.2,545.9,186.2,545.3,185.5z M555.7,193.6l-2,1.7l-6.6-7.9l2-1.7L555.7,193.6z"/>
+                               <path class="st5" d="M561.3,182.2c1.1,1.3,1.6,2.6,1.6,3.8c0,1.3-0.6,2.4-1.8,3.3c-0.7,0.6-1.5,1-2.3,1.1
+                                       c-0.8,0.1-1.7,0-2.5-0.4c-0.8-0.4-1.6-1-2.3-1.8c-1.1-1.3-1.6-2.6-1.6-3.8c0-1.3,0.6-2.4,1.8-3.3c0.7-0.6,1.5-1,2.3-1.1
+                                       c0.8-0.1,1.6,0,2.5,0.4C559.8,180.8,560.6,181.4,561.3,182.2z M556.1,186.6c0.7,0.8,1.3,1.3,1.9,1.5c0.6,0.2,1.1,0.1,1.7-0.4
+                                       c0.5-0.5,0.8-1,0.7-1.6c-0.1-0.6-0.5-1.3-1.1-2.1c-0.7-0.8-1.3-1.3-1.8-1.5c-0.6-0.2-1.1-0.1-1.7,0.4c-0.5,0.5-0.8,1-0.7,1.6
+                                       C555,185.1,555.4,185.8,556.1,186.6z"/>
+                               <path class="st5" d="M563.7,173.3c0.3-0.2,0.5-0.4,0.7-0.5l1.5,2.2c-0.2,0.1-0.4,0.2-0.7,0.4c-0.7,0.5-1,1.2-1.1,1.8
+                                       c-0.1,0.7,0.2,1.3,0.7,1.9l3.4,4l-2,1.7l-6.6-7.9l1.5-1.3l1.4,1.1l0.1-0.1c-0.1-0.6-0.1-1.3,0-1.9
+                                       C562.9,174.2,563.2,173.7,563.7,173.3z"/>
+                       </g>
+               </g>
+       </g>
+       <g>
+               <path class="st1" d="M300.1,42.9c-0.7,0.1-1,0.4-1.6,0.8c-1.3,0.9-2.3,2.3-3.8,3c-1,0.5-1.9,0.6-2.8,1.1c-0.9,0.5-1.4,0.8-2.1,1.6
+                       c0.4-1.3,2.4-2.5,3.5-3c1.7-0.6,1.8-1.4,3-2.6c-1.4,0.3-2.6,0.8-3.7,1.7c-0.6,0.5-1,1.3-1.6,1.7c-0.3,0.2-1.5,0.3-1.6,0.4
+                       c0.1-0.1,0.6-1,0.8-1c-0.9,0.1-1.9,0.8-2.7,1.2c-1,0.5-2.1,0.7-3.1,1.1c-1.1,0.4-1.8,1.3-2.9,1.7c-0.8,0.3-4.7,1.9-4.8,1
+                       c-0.1-1.1,2.8-2.9,3.5-3.3c2.2-1.2,3.6-2.2,3.6-2.2l-2.3-0.2c-1.3,0.9-2.5,1.9-3.8,2.8c-0.4,0.3-0.9,0.7-1.3,1
+                       c-1,0.7-2.5,0.9-3.4,1.7c0.2,0,2.1,0.7,2,0.8c-0.9,0.3-2.3,0.4-3.1,0.9c-0.9,0.6-1.1,1.6-2,2.2c-2.2,1.4-5.1,1.4-7.5,2.6
+                       c-0.9,0.4-1.3,0.7-1.8,1.6c-0.3,0.5-0.1,1-0.7,1.4c-1,0.6-1.6,3-5,4c-3.4,1-1.7-1.8-5.7,0.6c-4.1,2.3-10.2,3.2-17.5,7.5
+                       c-3,1.8-6.3,3-9.6,4.1c-1.4,0.5-2.8,1-4.2,1.6c-0.5,0.2-1.2,0.3-1.6,0.7c-0.1,0.1-0.6,1.1-0.5,1.1c-0.9,0.3-1.7,0.4-2.4,1
+                       c-0.5,0.4-0.8,1.1-1.3,1.6c-0.6,0.6-1.7,0.9-2.2,1.6c-0.7,1,0.5,1.5-0.4,2.6c0.2-0.2,2.9-0.8,3.4-1.1c0.6-0.3,1.3-0.7,1.8-1.2
+                       c0.3-0.3,0.7-1.1,1-1.3c1.1-0.4,1.4,0.5,1.1,1.4c-0.3,0.8-1.2,1.1-1.9,1.4c-1.4,0.4-3.7-0.1-4.6,1.5c-0.4,0.6,0.3,1,0.2,1.5
+                       c-0.1,0.6-0.7,1.6-1.1,2.2c-0.5,0.7-1.6,1.2-1.5,2.2c0.1,2,2.9,0.3,3.8-0.2c2.6,0.1,0.5,0.1,0.6,1.5c0.1,1.4-0.1,1.7-0.1,1.7
+                       s2.2,1.6,5.2,2.4c3,0.8,3.5-1.6,6.8-2.6c3.4-1,3.9-1.2,8.5-2.6c4.6-1.4,7.1-3.5,11.4-5.1c4.3-1.6,2.4-2.4,2.4-2.4
+                       s-1.7,0.8-4.6,1.6c-2.8,0.9-2.7,0.3-2.7,0.3s-2.4-0.4-3.7,0s-2.1-0.5-2.3-1.3c-0.2-0.8,3.2-2.6,6.9-4.3c3.7-1.7,3.6-3,5.9-3.7
+                       c2.3-0.7,3-1.2,4.7-2.2c1.7-1.1,1-0.7,3.3-1.4c2.3-0.7,4.7-0.1,6.5-0.7c1.8-0.5,6.9-2.3,11-3.6c4.1-1.2,4.5-3.6,6-4.3
+                       c1.7-0.8,3.8-1.6,5-3.1c0.4-0.5,1.1-1.9,0.8-2.6c-0.2-0.6-2.2-0.8-2.1-0.8c-0.1-1.1,1.5-0.7,1.6-1.2c0.3-1.8-2.9,0.1-3.5,0.6
+                       c-0.8,0.8-1.3,2.1-2.2,2.7c-0.9,0.6-2.3,0.6-1.4-0.7c1-1.5,2.9-2.7,4.5-3.6c1.8-1,3.7-1,5.5-2.3c2.8-2,6.3-7.2,9.1-8.9
+                       c2.9-1.7,6.4-3.9,6.4-3.9C301.3,43.3,300.3,42.9,300.1,42.9 M262.6,71.5c-0.5,0.2-1,0.6-1.5,0.9c-1.3,0.7-2.8,1.5-4.3,1.5
+                       c-0.8,0-1.2-0.2-2-0.1c-0.7,0.1-1.5,0.4-2.2,0.7c-0.6,0.2-1.9,1-2.6,1.3c0,0,0,0,0,0c0,0,0,0,0,0c-0.2,0.1-0.4,0.2-0.4,0.1
+                       c0,0,0.2,0,0.4-0.1c-0.7-1.2,1.5-1.6,2.1-2.2c1.8-2,4.8-3.4,7.3-4.4c1.6-0.6,3.1,0.4,4.5-0.2c0.4,0.7,0.7,1.7,0.9,2.5
+                       C264.1,71.7,263.4,71.3,262.6,71.5"/>
+               <path class="st6" d="M300.1,42.9c-0.7,0.1-1,0.4-1.6,0.8c-1.3,0.9-2.3,2.3-3.8,3c-1,0.5-1.9,0.6-2.8,1.1c-0.9,0.5-1.4,0.8-2.1,1.6
+                       c0.4-1.3,2.4-2.5,3.5-3c1.7-0.6,1.8-1.4,3-2.6c-1.4,0.3-2.6,0.8-3.7,1.7c-0.6,0.5-1,1.3-1.6,1.7c-0.3,0.2-1.5,0.3-1.6,0.4
+                       c0.1-0.1,0.6-1,0.8-1c-0.9,0.1-1.9,0.8-2.7,1.2c-1,0.5-2.1,0.7-3.1,1.1c-1.1,0.4-1.8,1.3-2.9,1.7c-0.8,0.3-4.7,1.9-4.8,1
+                       c-0.1-1.1,2.8-2.9,3.5-3.3c2.2-1.2,3.6-2.2,3.6-2.2l-2.3-0.2c-1.3,0.9-2.5,1.9-3.8,2.8c-0.4,0.3-0.9,0.7-1.3,1
+                       c-1,0.7-2.5,0.9-3.4,1.7c0.2,0,2.1,0.7,2,0.8c-0.9,0.3-2.3,0.4-3.1,0.9c-0.9,0.6-1.1,1.6-2,2.2c-2.2,1.4-5.1,1.4-7.5,2.6
+                       c-0.9,0.4-1.3,0.7-1.8,1.6c-0.3,0.5-0.1,1-0.7,1.4c-1,0.6-1.6,3-5,4c-3.4,1-1.7-1.8-5.7,0.6c-4.1,2.3-10.2,3.2-17.5,7.5
+                       c-3,1.8-6.3,3-9.6,4.1c-1.4,0.5-2.8,1-4.2,1.6c-0.5,0.2-1.2,0.3-1.6,0.7c-0.1,0.1-0.6,1.1-0.5,1.1c-0.9,0.3-1.7,0.4-2.4,1
+                       c-0.5,0.4-0.8,1.1-1.3,1.6c-0.6,0.6-1.7,0.9-2.2,1.6c-0.7,1,0.5,1.5-0.4,2.6c0.2-0.2,2.9-0.8,3.4-1.1c0.6-0.3,1.3-0.7,1.8-1.2
+                       c0.3-0.3,0.7-1.1,1-1.3c1.1-0.4,1.4,0.5,1.1,1.4c-0.3,0.8-1.2,1.1-1.9,1.4c-1.4,0.4-3.7-0.1-4.6,1.5c-0.4,0.6,0.3,1,0.2,1.5
+                       c-0.1,0.6-0.7,1.6-1.1,2.2c-0.5,0.7-1.6,1.2-1.5,2.2c0.1,2,2.9,0.3,3.8-0.2c2.6,0.1,0.5,0.1,0.6,1.5c0.1,1.4-0.1,1.7-0.1,1.7
+                       s2.2,1.6,5.2,2.4c3,0.8,3.5-1.6,6.8-2.6c3.4-1,3.9-1.2,8.5-2.6c4.6-1.4,7.1-3.5,11.4-5.1c4.3-1.6,2.4-2.4,2.4-2.4
+                       s-1.7,0.8-4.6,1.6c-2.8,0.9-2.7,0.3-2.7,0.3s-2.4-0.4-3.7,0s-2.1-0.5-2.3-1.3c-0.2-0.8,3.2-2.6,6.9-4.3c3.7-1.7,3.6-3,5.9-3.7
+                       c2.3-0.7,3-1.2,4.7-2.2c1.7-1.1,1-0.7,3.3-1.4c2.3-0.7,4.7-0.1,6.5-0.7c1.8-0.5,6.9-2.3,11-3.6c4.1-1.2,4.5-3.6,6-4.3
+                       c1.7-0.8,3.8-1.6,5-3.1c0.4-0.5,1.1-1.9,0.8-2.6c-0.2-0.6-2.2-0.8-2.1-0.8c-0.1-1.1,1.5-0.7,1.6-1.2c0.3-1.8-2.9,0.1-3.5,0.6
+                       c-0.8,0.8-1.3,2.1-2.2,2.7c-0.9,0.6-2.3,0.6-1.4-0.7c1-1.5,2.9-2.7,4.5-3.6c1.8-1,3.7-1,5.5-2.3c2.8-2,6.3-7.2,9.1-8.9
+                       c2.9-1.7,6.4-3.9,6.4-3.9C301.3,43.3,300.3,42.9,300.1,42.9z M262.6,71.5c-0.5,0.2-1,0.6-1.5,0.9c-1.3,0.7-2.8,1.5-4.3,1.5
+                       c-0.8,0-1.2-0.2-2-0.1c-0.7,0.1-1.5,0.4-2.2,0.7c-0.6,0.2-1.9,1-2.6,1.3c0,0,0,0,0,0c0,0,0,0,0,0c-0.2,0.1-0.4,0.2-0.4,0.1
+                       c0,0,0.2,0,0.4-0.1c-0.7-1.2,1.5-1.6,2.1-2.2c1.8-2,4.8-3.4,7.3-4.4c1.6-0.6,3.1,0.4,4.5-0.2c0.4,0.7,0.7,1.7,0.9,2.5
+                       C264.1,71.7,263.4,71.3,262.6,71.5z"/>
+               <path class="st7" d="M208.3,89.8c-0.2,0-0.3,0-0.5,0c-0.3,0-0.6-0.3-0.9-0.3c-0.3,0-0.9,0-1.2,0.2c-0.2,0.2-0.5,1-0.5,1.2
+                       c0.2,0.9,1.5,0.5,2,0.3c0.2-0.1,0.4-0.1,0.5-0.2c0.1-0.1,0.1-0.4,0.1-0.5c0.3-0.3,0.9-0.5,1.3-0.7C209,89.7,208.6,89.8,208.3,89.8
+                       "/>
+               <path class="st6" d="M208.3,89.8c-0.2,0-0.3,0-0.5,0c-0.3,0-0.6-0.3-0.9-0.3c-0.3,0-0.9,0-1.2,0.2c-0.2,0.2-0.5,1-0.5,1.2
+                       c0.2,0.9,1.5,0.5,2,0.3c0.2-0.1,0.4-0.1,0.5-0.2c0.1-0.1,0.1-0.4,0.1-0.5c0.3-0.3,0.9-0.5,1.3-0.7C209,89.7,208.6,89.8,208.3,89.8
+                       z"/>
+       </g>
+       <g>
+               <path class="st2" d="M131.8,48.2c-0.1-0.1-0.3-0.2-0.5-0.2c-0.7,0-1.5,0.7-2.5,2c-0.8,1.1-1.7,2.6-2.7,4.6c0-0.2,0.1-0.5,0.1-0.5
+                       l0.1-1.9l0-1.6c0-0.7,0.1-1.4,0.3-1.9l0.1-0.3l-0.1-0.3l-0.2,0c-0.2,0-0.3,0.1-0.7,0.8l-1.6,2.9c-0.9,1.6-1.8,2.9-2.7,3.7
+                       c-0.9,0.8-1.9,1.2-3,1.2c-0.8,0-1.4-0.2-1.9-0.5c-0.5-0.3-0.7-0.8-0.7-1.3c0-0.7,0.3-1.2,0.8-1.7c0.6-0.5,1.2-0.7,2.1-0.7
+                       c0.5,0,1,0.1,1.3,0.4c0.3,0.2,0.4,0.5,0.4,0.9c0,0.4-0.2,0.8-0.6,1.1c-0.4,0.3-0.9,0.5-1.6,0.5l-0.6-0.1l-0.5-0.1l-0.1,0.1
+                       c-0.1,0.1-0.1,0.1-0.1,0.2c0,0.2,0.2,0.3,0.5,0.4l0.8,0.1c0.8,0,1.4-0.2,1.9-0.7c0.5-0.5,0.8-1,0.8-1.6c0-0.6-0.2-1.1-0.7-1.5
+                       c-0.4-0.4-1-0.5-1.8-0.5c-1,0-1.8,0.3-2.5,0.9c-0.6,0.6-1,1.3-1,2.2c0,0.8,0.3,1.5,0.9,2c0.6,0.5,1.4,0.7,2.3,0.7
+                       c1,0,1.9-0.3,2.8-0.9c0.9-0.6,1.7-1.5,2.5-2.7l1.1-2.1c0,0,0.2-0.3,0.4-0.7c0,0.2-0.1,0.4-0.1,0.4l-0.1,1.5l0.1,1.3l0.1,1.3
+                       c0,0.5-0.1,1-0.2,1.3c0,0,0,0.1,0,0.1l0,0.2c0,0.1,0.1,0.1,0.2,0.1c0.1,0,0.2,0,1-1.7l1.6-3c0.7-1.1,1.3-2.1,1.8-2.7
+                       c0.7-0.9,1-0.9,1-0.9c0,0,0,0,0,0c0,0,0.1,0.1,0.1,0.1c0.1,0.2,0.3,0.4,0.5,0.4c0.2,0,0.3-0.1,0.5-0.2c0.1-0.1,0.2-0.3,0.2-0.5
+                       C132,48.5,132,48.4,131.8,48.2"/>
+               <g>
+                       <polygon class="st5" points="118.2,43.1 122.1,41.7 125.8,42.5 129.2,43.4 123.8,24.3                     "/>
+                       <polygon class="st8" points="123.8,24.3 118.2,43.1 122.1,41.7 123.5,42                  "/>
+                       <polygon class="st9" points="118.2,43.1 123.6,41.7 129.2,43.4 123.8,24.3                        "/>
+               </g>
+       </g>
+       <path class="st3" d="M188,327.7c0,0-0.5-0.8,1.3-2c1.8-1.3,2-1.3,2.5-2.3c0.5-1,2.8-1.3,2.8-1.3s2.5-3,3.5-1.8c1,1.3,0.5,1.8,0.3,3
+               c-0.3,1.3-0.5,2.3-2.3,2.5c-1.8,0.3-2,1-2.8,0.3l-0.8-0.8c0,0,0.3-0.5-0.8,0C190.8,326,188.7,328.2,188,327.7"/>
+       <path class="st3" d="M186.7,327.2c0,0-1.8-0.5-2,0.8c-0.3,1.3-0.5,2.5-0.5,2.5s-2,0.8-1.5,1.5c0.5,0.8,2.5-0.8,2.8,0.8
+               c0.3,1.5,1,1.5,1.5,0.3c0.5-1.3,0.5-3.3,0.5-3.3L186.7,327.2z"/>
+       <g>
+               <path class="st2" d="M395.8,218.6v-4.2h0.9v3.5h2.1v0.7H395.8z"/>
+               <path class="st2" d="M399.3,218.6v-4.3h0.9v4.3H399.3z"/>
+               <path class="st2" d="M402,218.6v-3.5h-1.3v-0.7h3.4v0.7h-1.3v3.5H402z"/>
+               <path class="st2" d="M405.6,218.6v-3.5h-1.3v-0.7h3.4v0.7h-1.3v3.5H405.6z"/>
+               <path class="st2" d="M408.3,218.6v-4.2h0.9v3.5h2.1v0.7H408.3z"/>
+               <path class="st2" d="M411.9,218.6v-4.3h3.2v0.7h-2.3v0.9h2.1v0.7h-2.1v1.2h2.4v0.7H411.9z"/>
+       </g>
+       <g>
+               <path class="st2" d="M390.8,224.3v-3.5h-1.3V220h3.4v0.7h-1.3v3.5H390.8z"/>
+               <path class="st2" d="M393.5,224.3V220h1.8c0.5,0,0.8,0,1,0.1c0.2,0.1,0.4,0.2,0.5,0.4c0.1,0.2,0.2,0.4,0.2,0.7
+                       c0,0.3-0.1,0.6-0.3,0.8c-0.2,0.2-0.5,0.3-0.8,0.4c0.2,0.1,0.3,0.2,0.5,0.4s0.3,0.4,0.5,0.7l0.5,0.8h-1l-0.6-0.9
+                       c-0.2-0.3-0.4-0.5-0.5-0.6c-0.1-0.1-0.2-0.1-0.3-0.2c-0.1,0-0.2,0-0.4,0h-0.2v1.8H393.5z M394.3,221.8h0.6c0.4,0,0.7,0,0.8-0.1
+                       s0.2-0.1,0.2-0.2c0.1-0.1,0.1-0.2,0.1-0.3c0-0.1,0-0.3-0.1-0.3c-0.1-0.1-0.2-0.1-0.3-0.2c-0.1,0-0.3,0-0.6,0h-0.7V221.8z"/>
+               <path class="st2" d="M401.6,224.3h-0.9l-0.4-1h-1.7l-0.4,1h-0.9l1.7-4.3h0.9L401.6,224.3z M400,222.6l-0.6-1.6l-0.6,1.6H400z"/>
+               <path class="st2" d="M402.7,224.3l-1.5-4.3h0.9l1.1,3.2l1-3.2h0.9l-1.5,4.3H402.7z"/>
+               <path class="st2" d="M405.6,224.3V220h3.2v0.7h-2.3v0.9h2.1v0.7h-2.1v1.2h2.4v0.7H405.6z"/>
+               <path class="st2" d="M409.6,224.3V220h1.8c0.5,0,0.8,0,1,0.1c0.2,0.1,0.4,0.2,0.5,0.4c0.1,0.2,0.2,0.4,0.2,0.7
+                       c0,0.3-0.1,0.6-0.3,0.8c-0.2,0.2-0.5,0.3-0.8,0.4c0.2,0.1,0.3,0.2,0.5,0.4c0.1,0.1,0.3,0.4,0.5,0.7l0.5,0.8h-1l-0.6-0.9
+                       c-0.2-0.3-0.4-0.5-0.5-0.6c-0.1-0.1-0.2-0.1-0.3-0.2c-0.1,0-0.2,0-0.4,0h-0.2v1.8H409.6z M410.4,221.8h0.6c0.4,0,0.7,0,0.8-0.1
+                       s0.2-0.1,0.2-0.2c0.1-0.1,0.1-0.2,0.1-0.3c0-0.1,0-0.3-0.1-0.3c-0.1-0.1-0.2-0.1-0.3-0.2c-0.1,0-0.3,0-0.6,0h-0.7V221.8z"/>
+               <path class="st2" d="M413.7,222.9l0.8-0.1c0.1,0.3,0.2,0.5,0.3,0.6c0.2,0.1,0.4,0.2,0.6,0.2c0.3,0,0.5-0.1,0.6-0.2
+                       c0.1-0.1,0.2-0.3,0.2-0.4c0-0.1,0-0.2-0.1-0.3c-0.1-0.1-0.2-0.1-0.3-0.2c-0.1,0-0.3-0.1-0.7-0.2c-0.5-0.1-0.8-0.3-1-0.4
+                       c-0.3-0.2-0.4-0.5-0.4-0.9c0-0.2,0.1-0.4,0.2-0.6c0.1-0.2,0.3-0.3,0.5-0.4c0.2-0.1,0.5-0.1,0.8-0.1c0.5,0,0.9,0.1,1.2,0.4
+                       c0.3,0.2,0.4,0.5,0.4,0.9l-0.9,0c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.1-0.5-0.1c-0.3,0-0.4,0.1-0.6,0.2
+                       c-0.1,0.1-0.1,0.2-0.1,0.3c0,0.1,0,0.2,0.1,0.3c0.1,0.1,0.4,0.2,0.8,0.3c0.4,0.1,0.7,0.2,0.9,0.3c0.2,0.1,0.4,0.3,0.5,0.4
+                       c0.1,0.2,0.2,0.4,0.2,0.7c0,0.2-0.1,0.5-0.2,0.7c-0.1,0.2-0.3,0.4-0.6,0.5c-0.2,0.1-0.6,0.2-0.9,0.2c-0.5,0-1-0.1-1.2-0.4
+                       C413.9,223.8,413.7,223.4,413.7,222.9z"/>
+               <path class="st2" d="M417.9,224.3V220h3.2v0.7h-2.3v0.9h2.1v0.7h-2.1v1.2h2.4v0.7H417.9z"/>
+       </g>
+       <g>
+               <path class="st2" d="M399.8,225.7h1.7c0.3,0,0.6,0,0.8,0c0.2,0,0.3,0.1,0.4,0.2s0.2,0.2,0.3,0.4c0.1,0.1,0.1,0.3,0.1,0.5
+                       c0,0.2-0.1,0.4-0.2,0.6s-0.3,0.3-0.4,0.4c0.3,0.1,0.5,0.2,0.6,0.4s0.2,0.4,0.2,0.6c0,0.2,0,0.4-0.1,0.6c-0.1,0.2-0.2,0.3-0.4,0.4
+                       s-0.3,0.2-0.6,0.2c-0.1,0-0.5,0-1,0h-1.5V225.7z M400.7,226.4v1h0.6c0.3,0,0.5,0,0.6,0c0.1,0,0.3-0.1,0.3-0.2
+                       c0.1-0.1,0.1-0.2,0.1-0.3c0-0.1,0-0.2-0.1-0.3c-0.1-0.1-0.2-0.1-0.3-0.2c-0.1,0-0.3,0-0.7,0H400.7z M400.7,228.1v1.1h0.8
+                       c0.3,0,0.5,0,0.6,0c0.1,0,0.2-0.1,0.3-0.2c0.1-0.1,0.1-0.2,0.1-0.4c0-0.1,0-0.2-0.1-0.3c-0.1-0.1-0.2-0.2-0.3-0.2
+                       s-0.4-0.1-0.8-0.1H400.7z"/>
+               <path class="st2" d="M408,230H407l-0.4-1h-1.7l-0.4,1h-0.9l1.7-4.3h0.9L408,230z M406.4,228.3l-0.6-1.6l-0.6,1.6H406.4z"/>
+               <path class="st2" d="M409,230v-1.8l-1.6-2.5h1l1,1.7l1-1.7h1l-1.6,2.5v1.8H409z"/>
+       </g>
+       <g>
+               <path class="st2" d="M419.5,182.2h1.7c0.3,0,0.6,0,0.8,0c0.2,0,0.3,0.1,0.4,0.2c0.1,0.1,0.2,0.2,0.3,0.4c0.1,0.1,0.1,0.3,0.1,0.5
+                       c0,0.2-0.1,0.4-0.2,0.6c-0.1,0.2-0.3,0.3-0.4,0.4c0.3,0.1,0.5,0.2,0.6,0.4s0.2,0.4,0.2,0.6c0,0.2,0,0.4-0.1,0.6
+                       c-0.1,0.2-0.2,0.3-0.4,0.4c-0.2,0.1-0.3,0.2-0.6,0.2c-0.1,0-0.5,0-1,0h-1.5V182.2z M420.4,182.9v1h0.6c0.3,0,0.5,0,0.6,0
+                       c0.1,0,0.3-0.1,0.3-0.2c0.1-0.1,0.1-0.2,0.1-0.3c0-0.1,0-0.2-0.1-0.3c-0.1-0.1-0.2-0.1-0.3-0.2c-0.1,0-0.3,0-0.7,0H420.4z
+                        M420.4,184.6v1.1h0.8c0.3,0,0.5,0,0.6,0c0.1,0,0.2-0.1,0.3-0.2c0.1-0.1,0.1-0.2,0.1-0.4c0-0.1,0-0.2-0.1-0.3
+                       c-0.1-0.1-0.2-0.2-0.3-0.2s-0.4-0.1-0.8-0.1H420.4z"/>
+               <path class="st2" d="M423.8,186.4v-4.3h0.9v4.3H423.8z"/>
+               <path class="st2" d="M427.5,184.8v-0.7h1.9v1.7c-0.2,0.2-0.4,0.3-0.8,0.5c-0.3,0.1-0.7,0.2-1,0.2c-0.4,0-0.8-0.1-1.2-0.3
+                       s-0.6-0.5-0.7-0.8s-0.3-0.7-0.3-1.1c0-0.4,0.1-0.8,0.3-1.2s0.5-0.6,0.8-0.8c0.3-0.1,0.6-0.2,1-0.2c0.5,0,0.9,0.1,1.2,0.3
+                       c0.3,0.2,0.5,0.5,0.6,0.9l-0.9,0.2c-0.1-0.2-0.2-0.4-0.3-0.5c-0.2-0.1-0.4-0.2-0.6-0.2c-0.4,0-0.7,0.1-0.9,0.4
+                       c-0.2,0.2-0.3,0.6-0.3,1.1c0,0.5,0.1,0.9,0.3,1.1c0.2,0.3,0.5,0.4,0.9,0.4c0.2,0,0.4,0,0.5-0.1c0.2-0.1,0.3-0.2,0.5-0.3v-0.5
+                       H427.5z"/>
+       </g>
+       <g>
+               <path class="st2" d="M409.8,192.1v-3.5h-1.3v-0.7h3.4v0.7h-1.3v3.5H409.8z"/>
+               <path class="st2" d="M412.4,192.1v-4.3h1.8c0.5,0,0.8,0,1,0.1c0.2,0.1,0.4,0.2,0.5,0.4c0.1,0.2,0.2,0.4,0.2,0.7
+                       c0,0.3-0.1,0.6-0.3,0.8c-0.2,0.2-0.5,0.3-0.8,0.4c0.2,0.1,0.3,0.2,0.5,0.4c0.1,0.1,0.3,0.4,0.5,0.7l0.5,0.8h-1l-0.6-0.9
+                       c-0.2-0.3-0.4-0.5-0.5-0.6c-0.1-0.1-0.2-0.1-0.3-0.2c-0.1,0-0.2,0-0.4,0h-0.2v1.8H412.4z M413.3,189.7h0.6c0.4,0,0.7,0,0.8-0.1
+                       s0.2-0.1,0.2-0.2c0.1-0.1,0.1-0.2,0.1-0.3c0-0.1,0-0.3-0.1-0.3c-0.1-0.1-0.2-0.1-0.3-0.2c-0.1,0-0.3,0-0.6,0h-0.7V189.7z"/>
+               <path class="st2" d="M420.6,192.1h-0.9l-0.4-1h-1.7l-0.4,1h-0.9l1.7-4.3h0.9L420.6,192.1z M419,190.4l-0.6-1.6l-0.6,1.6H419z"/>
+               <path class="st2" d="M421.7,192.1l-1.5-4.3h0.9l1.1,3.2l1-3.2h0.9l-1.5,4.3H421.7z"/>
+               <path class="st2" d="M424.6,192.1v-4.3h3.2v0.7h-2.3v0.9h2.1v0.7h-2.1v1.2h2.4v0.7H424.6z"/>
+               <path class="st2" d="M428.6,192.1v-4.3h1.8c0.5,0,0.8,0,1,0.1c0.2,0.1,0.4,0.2,0.5,0.4c0.1,0.2,0.2,0.4,0.2,0.7
+                       c0,0.3-0.1,0.6-0.3,0.8c-0.2,0.2-0.5,0.3-0.8,0.4c0.2,0.1,0.3,0.2,0.5,0.4c0.1,0.1,0.3,0.4,0.5,0.7l0.5,0.8h-1l-0.6-0.9
+                       c-0.2-0.3-0.4-0.5-0.5-0.6c-0.1-0.1-0.2-0.1-0.3-0.2c-0.1,0-0.2,0-0.4,0h-0.2v1.8H428.6z M429.4,189.7h0.6c0.4,0,0.7,0,0.8-0.1
+                       s0.2-0.1,0.2-0.2c0.1-0.1,0.1-0.2,0.1-0.3c0-0.1,0-0.3-0.1-0.3c-0.1-0.1-0.2-0.1-0.3-0.2c-0.1,0-0.3,0-0.6,0h-0.7V189.7z"/>
+               <path class="st2" d="M432.6,190.7l0.8-0.1c0.1,0.3,0.2,0.5,0.3,0.6c0.2,0.1,0.4,0.2,0.6,0.2c0.3,0,0.5-0.1,0.6-0.2
+                       c0.1-0.1,0.2-0.3,0.2-0.4c0-0.1,0-0.2-0.1-0.3c-0.1-0.1-0.2-0.1-0.3-0.2c-0.1,0-0.3-0.1-0.7-0.2c-0.5-0.1-0.8-0.3-1-0.4
+                       c-0.3-0.2-0.4-0.5-0.4-0.9c0-0.2,0.1-0.4,0.2-0.6c0.1-0.2,0.3-0.3,0.5-0.4c0.2-0.1,0.5-0.1,0.8-0.1c0.5,0,0.9,0.1,1.2,0.4
+                       c0.3,0.2,0.4,0.5,0.4,0.9l-0.9,0c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.1-0.5-0.1c-0.3,0-0.4,0.1-0.6,0.2
+                       c-0.1,0.1-0.1,0.2-0.1,0.3c0,0.1,0,0.2,0.1,0.3c0.1,0.1,0.4,0.2,0.8,0.3c0.4,0.1,0.7,0.2,0.9,0.3c0.2,0.1,0.4,0.3,0.5,0.4
+                       c0.1,0.2,0.2,0.4,0.2,0.7c0,0.2-0.1,0.5-0.2,0.7s-0.3,0.4-0.6,0.5c-0.2,0.1-0.6,0.2-0.9,0.2c-0.5,0-1-0.1-1.2-0.4
+                       C432.9,191.6,432.7,191.2,432.6,190.7z"/>
+               <path class="st2" d="M436.8,192.1v-4.3h3.2v0.7h-2.3v0.9h2.1v0.7h-2.1v1.2h2.4v0.7H436.8z"/>
+       </g>
+       <g>
+               <path class="st2" d="M418.8,193.5h1.7c0.3,0,0.6,0,0.8,0c0.2,0,0.3,0.1,0.4,0.2c0.1,0.1,0.2,0.2,0.3,0.4c0.1,0.1,0.1,0.3,0.1,0.5
+                       c0,0.2-0.1,0.4-0.2,0.6c-0.1,0.2-0.3,0.3-0.4,0.4c0.3,0.1,0.5,0.2,0.6,0.4s0.2,0.4,0.2,0.6c0,0.2,0,0.4-0.1,0.6
+                       c-0.1,0.2-0.2,0.3-0.4,0.4c-0.2,0.1-0.3,0.2-0.6,0.2c-0.1,0-0.5,0-1,0h-1.5V193.5z M419.6,194.3v1h0.6c0.3,0,0.5,0,0.6,0
+                       c0.1,0,0.3-0.1,0.3-0.2c0.1-0.1,0.1-0.2,0.1-0.3c0-0.1,0-0.2-0.1-0.3c-0.1-0.1-0.2-0.1-0.3-0.2c-0.1,0-0.3,0-0.7,0H419.6z
+                        M419.6,195.9v1.1h0.8c0.3,0,0.5,0,0.6,0c0.1,0,0.2-0.1,0.3-0.2c0.1-0.1,0.1-0.2,0.1-0.4c0-0.1,0-0.2-0.1-0.3
+                       c-0.1-0.1-0.2-0.2-0.3-0.2c-0.1,0-0.4-0.1-0.8-0.1H419.6z"/>
+               <path class="st2" d="M426.9,197.8H426l-0.4-1h-1.7l-0.4,1h-0.9l1.7-4.3h0.9L426.9,197.8z M425.3,196.1l-0.6-1.6l-0.6,1.6H425.3z"
+                       />
+               <path class="st2" d="M428,197.8V196l-1.6-2.5h1l1,1.7l1-1.7h1l-1.6,2.5v1.8H428z"/>
+       </g>
+       <g>
+               <path class="st2" d="M335.7,315.6v-4.3h0.9v1.9l1.7-1.9h1.2l-1.6,1.7l1.7,2.6h-1.1l-1.2-2l-0.7,0.7v1.3H335.7z"/>
+               <path class="st2" d="M340,315.6v-4.3h3.2v0.7h-2.3v0.9h2.1v0.7h-2.1v1.2h2.4v0.7H340z"/>
+               <path class="st2" d="M344.6,315.6l-1-4.3h0.9l0.6,2.9l0.8-2.9h1l0.7,3l0.7-3h0.9l-1,4.3h-0.9l-0.8-3.2l-0.8,3.2H344.6z"/>
+               <path class="st2" d="M349.6,315.6v-4.3h3.2v0.7h-2.3v0.9h2.1v0.7h-2.1v1.2h2.4v0.7H349.6z"/>
+               <path class="st2" d="M353.6,315.6v-4.3h3.2v0.7h-2.3v0.9h2.1v0.7h-2.1v1.2h2.4v0.7H353.6z"/>
+               <path class="st2" d="M357.6,315.6v-4.3h0.8l1.7,2.8v-2.8h0.8v4.3h-0.9l-1.7-2.8v2.8H357.6z"/>
+               <path class="st2" d="M365.7,315.6h-0.9l-0.4-1h-1.7l-0.4,1h-0.9l1.7-4.3h0.9L365.7,315.6z M364.2,313.9l-0.6-1.6l-0.6,1.6H364.2z"
+                       />
+               <path class="st2" d="M366.8,315.6l-1-4.3h0.9l0.6,2.9l0.8-2.9h1l0.7,3l0.7-3h0.9l-1,4.3h-0.9l-0.8-3.2l-0.8,3.2H366.8z"/>
+       </g>
+       <g>
+               <path class="st2" d="M347.5,317.1h1.7c0.3,0,0.6,0,0.8,0c0.2,0,0.3,0.1,0.4,0.2c0.1,0.1,0.2,0.2,0.3,0.4c0.1,0.1,0.1,0.3,0.1,0.5
+                       c0,0.2-0.1,0.4-0.2,0.6s-0.3,0.3-0.4,0.4c0.3,0.1,0.5,0.2,0.6,0.4s0.2,0.4,0.2,0.6c0,0.2,0,0.4-0.1,0.6c-0.1,0.2-0.2,0.3-0.4,0.4
+                       c-0.2,0.1-0.3,0.2-0.6,0.2c-0.1,0-0.5,0-1,0h-1.5V317.1z M348.4,317.8v1h0.6c0.3,0,0.5,0,0.6,0c0.1,0,0.3-0.1,0.3-0.2
+                       c0.1-0.1,0.1-0.2,0.1-0.3c0-0.1,0-0.2-0.1-0.3c-0.1-0.1-0.2-0.1-0.3-0.2c-0.1,0-0.3,0-0.7,0H348.4z M348.4,319.5v1.1h0.8
+                       c0.3,0,0.5,0,0.6,0c0.1,0,0.2-0.1,0.3-0.2c0.1-0.1,0.1-0.2,0.1-0.4c0-0.1,0-0.2-0.1-0.3c-0.1-0.1-0.2-0.2-0.3-0.2
+                       c-0.1,0-0.4-0.1-0.8-0.1H348.4z"/>
+               <path class="st2" d="M355.6,321.3h-0.9l-0.4-1h-1.7l-0.4,1h-0.9l1.7-4.3h0.9L355.6,321.3z M354.1,319.6l-0.6-1.6l-0.6,1.6H354.1z"
+                       />
+               <path class="st2" d="M357.2,321.3v-1.8l-1.6-2.5h1l1,1.7l1-1.7h1l-1.6,2.5v1.8H357.2z"/>
+       </g>
+       <g>
+               <path class="st2" d="M510,112.8v-4.3h1.4c0.5,0,0.9,0,1,0.1c0.2,0.1,0.4,0.2,0.6,0.4c0.2,0.2,0.2,0.5,0.2,0.8c0,0.3,0,0.5-0.1,0.7
+                       c-0.1,0.2-0.2,0.3-0.4,0.4c-0.1,0.1-0.3,0.2-0.4,0.2c-0.2,0-0.5,0.1-0.9,0.1h-0.6v1.6H510z M510.9,109.2v1.2h0.5
+                       c0.3,0,0.6,0,0.7-0.1c0.1,0,0.2-0.1,0.3-0.2c0.1-0.1,0.1-0.2,0.1-0.3c0-0.2,0-0.3-0.1-0.4c-0.1-0.1-0.2-0.2-0.3-0.2
+                       c-0.1,0-0.3,0-0.6,0H510.9z"/>
+               <path class="st2" d="M513.8,110.7c0-0.4,0.1-0.8,0.2-1.1c0.1-0.2,0.2-0.4,0.4-0.6c0.2-0.2,0.4-0.3,0.6-0.4
+                       c0.3-0.1,0.6-0.2,0.9-0.2c0.6,0,1.1,0.2,1.5,0.6c0.4,0.4,0.6,0.9,0.6,1.6c0,0.7-0.2,1.2-0.6,1.6c-0.4,0.4-0.9,0.6-1.5,0.6
+                       c-0.6,0-1.1-0.2-1.5-0.6S513.8,111.4,513.8,110.7z M514.7,110.7c0,0.5,0.1,0.8,0.3,1.1s0.5,0.4,0.8,0.4s0.6-0.1,0.8-0.4
+                       c0.2-0.2,0.3-0.6,0.3-1.1c0-0.5-0.1-0.9-0.3-1.1c-0.2-0.2-0.5-0.4-0.9-0.4s-0.6,0.1-0.9,0.4C514.8,109.8,514.7,110.2,514.7,110.7z
+                       "/>
+               <path class="st2" d="M518.6,112.8v-4.3h0.9v4.3H518.6z"/>
+               <path class="st2" d="M520.3,112.8v-4.3h0.8l1.7,2.8v-2.8h0.8v4.3h-0.9l-1.7-2.8v2.8H520.3z"/>
+               <path class="st2" d="M525.6,112.8v-3.5h-1.3v-0.7h3.4v0.7h-1.3v3.5H525.6z"/>
+               <path class="st2" d="M529.8,112.8v-4.3h0.9v4.3H529.8z"/>
+               <path class="st2" d="M531.2,111.4l0.8-0.1c0.1,0.3,0.2,0.5,0.3,0.6c0.2,0.1,0.4,0.2,0.6,0.2c0.3,0,0.5-0.1,0.6-0.2
+                       s0.2-0.3,0.2-0.4c0-0.1,0-0.2-0.1-0.3c-0.1-0.1-0.2-0.1-0.3-0.2c-0.1,0-0.3-0.1-0.7-0.2c-0.5-0.1-0.8-0.3-1-0.4
+                       c-0.3-0.2-0.4-0.5-0.4-0.9c0-0.2,0.1-0.4,0.2-0.6c0.1-0.2,0.3-0.3,0.5-0.4c0.2-0.1,0.5-0.1,0.8-0.1c0.5,0,0.9,0.1,1.2,0.4
+                       c0.3,0.2,0.4,0.5,0.4,0.9l-0.9,0c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.1-0.5-0.1c-0.3,0-0.4,0.1-0.6,0.2
+                       c-0.1,0.1-0.1,0.2-0.1,0.3c0,0.1,0,0.2,0.1,0.3c0.1,0.1,0.4,0.2,0.8,0.3c0.4,0.1,0.7,0.2,0.9,0.3c0.2,0.1,0.4,0.3,0.5,0.4
+                       c0.1,0.2,0.2,0.4,0.2,0.7c0,0.2-0.1,0.5-0.2,0.7c-0.1,0.2-0.3,0.4-0.6,0.5c-0.2,0.1-0.6,0.2-0.9,0.2c-0.5,0-1-0.1-1.2-0.4
+                       S531.3,111.9,531.2,111.4z"/>
+               <path class="st2" d="M539.3,112.8h-0.9l-0.4-1h-1.7l-0.4,1H535l1.7-4.3h0.9L539.3,112.8z M537.7,111.1l-0.6-1.6l-0.6,1.6H537.7z"
+                       />
+               <path class="st2" d="M539.7,108.5h1.7c0.3,0,0.6,0,0.8,0c0.2,0,0.3,0.1,0.4,0.2c0.1,0.1,0.2,0.2,0.3,0.4c0.1,0.1,0.1,0.3,0.1,0.5
+                       c0,0.2-0.1,0.4-0.2,0.6c-0.1,0.2-0.3,0.3-0.4,0.4c0.3,0.1,0.5,0.2,0.6,0.4s0.2,0.4,0.2,0.6c0,0.2,0,0.4-0.1,0.6
+                       c-0.1,0.2-0.2,0.3-0.4,0.4c-0.2,0.1-0.3,0.2-0.6,0.2c-0.1,0-0.5,0-1,0h-1.5V108.5z M540.6,109.2v1h0.6c0.3,0,0.5,0,0.6,0
+                       c0.1,0,0.3-0.1,0.3-0.2c0.1-0.1,0.1-0.2,0.1-0.3c0-0.1,0-0.2-0.1-0.3c-0.1-0.1-0.2-0.1-0.3-0.1c-0.1,0-0.3,0-0.7,0H540.6z
+                        M540.6,110.9v1.1h0.8c0.3,0,0.5,0,0.6,0c0.1,0,0.2-0.1,0.3-0.2c0.1-0.1,0.1-0.2,0.1-0.4c0-0.1,0-0.2-0.1-0.3
+                       c-0.1-0.1-0.2-0.2-0.3-0.2c-0.1,0-0.4-0.1-0.8-0.1H540.6z"/>
+               <path class="st2" d="M544,112.8v-4.3h3.2v0.7h-2.3v0.9h2.1v0.7h-2.1v1.2h2.4v0.7H544z"/>
+               <path class="st2" d="M548,112.8v-4.2h0.9v3.5h2.1v0.7H548z"/>
+               <path class="st2" d="M551.7,112.8v-4.2h0.9v3.5h2.1v0.7H551.7z"/>
+               <path class="st2" d="M555.3,112.8v-4.3h3.2v0.7h-2.3v0.9h2.1v0.7h-2.1v1.2h2.4v0.7H555.3z"/>
+       </g>
+       <g>
+               <path class="st2" d="M571,85.5v-4.4h0.9v2l1.7-2h1.2l-1.6,1.7l1.7,2.7h-1.1l-1.2-2.1l-0.7,0.7v1.3H571z"/>
+               <path class="st2" d="M575.2,85.5v-4.4h3.2v0.7h-2.3v1h2.1v0.7h-2.1v1.2h2.4v0.7H575.2z"/>
+               <path class="st2" d="M579.8,85.5l-1-4.4h0.9l0.6,3l0.8-3h1l0.7,3.1l0.7-3.1h0.9l-1,4.4h-0.9l-0.8-3.3l-0.8,3.3H579.8z"/>
+               <path class="st2" d="M584.7,85.5v-4.4h3.2v0.7h-2.3v1h2.1v0.7h-2.1v1.2h2.4v0.7H584.7z"/>
+               <path class="st2" d="M588.7,85.5v-4.4h3.2v0.7h-2.3v1h2.1v0.7h-2.1v1.2h2.4v0.7H588.7z"/>
+               <path class="st2" d="M592.6,85.5v-4.4h0.8l1.7,2.9v-2.9h0.8v4.4h-0.9l-1.7-2.9v2.9H592.6z"/>
+               <path class="st2" d="M600.7,85.5h-0.9l-0.4-1h-1.7l-0.4,1h-0.9l1.7-4.4h0.9L600.7,85.5z M599.1,83.8l-0.6-1.6l-0.6,1.6H599.1z"/>
+               <path class="st2" d="M601.5,85.5l-1-4.4h0.9l0.6,3l0.8-3h1l0.7,3.1l0.7-3.1h0.9l-1,4.4h-0.9l-0.8-3.3l-0.8,3.3H601.5z"/>
+               <path class="st2" d="M608,85.5v-4.4h1.4c0.5,0,0.9,0,1,0.1c0.2,0.1,0.4,0.2,0.6,0.4c0.2,0.2,0.2,0.5,0.2,0.9c0,0.3,0,0.5-0.1,0.7
+                       c-0.1,0.2-0.2,0.3-0.4,0.4c-0.1,0.1-0.3,0.2-0.4,0.2c-0.2,0-0.5,0.1-0.9,0.1h-0.6v1.7H608z M608.9,81.9v1.2h0.5
+                       c0.3,0,0.6,0,0.7-0.1c0.1,0,0.2-0.1,0.3-0.2c0.1-0.1,0.1-0.2,0.1-0.3c0-0.2,0-0.3-0.1-0.4c-0.1-0.1-0.2-0.2-0.3-0.2
+                       c-0.1,0-0.3,0-0.6,0H608.9z"/>
+               <path class="st2" d="M611.8,83.4c0-0.4,0.1-0.8,0.2-1.1c0.1-0.2,0.2-0.4,0.4-0.6c0.2-0.2,0.4-0.3,0.6-0.4c0.3-0.1,0.6-0.2,0.9-0.2
+                       c0.6,0,1.1,0.2,1.5,0.6c0.4,0.4,0.6,1,0.6,1.7c0,0.7-0.2,1.3-0.6,1.7c-0.4,0.4-0.9,0.6-1.5,0.6c-0.6,0-1.1-0.2-1.5-0.6
+                       C612,84.6,611.8,84.1,611.8,83.4z M612.7,83.3c0,0.5,0.1,0.9,0.3,1.1c0.2,0.3,0.5,0.4,0.8,0.4c0.3,0,0.6-0.1,0.8-0.4
+                       s0.3-0.6,0.3-1.1c0-0.5-0.1-0.9-0.3-1.1c-0.2-0.2-0.5-0.4-0.9-0.4s-0.6,0.1-0.9,0.4C612.8,82.4,612.7,82.8,612.7,83.3z"/>
+               <path class="st2" d="M616.5,85.5v-4.4h0.9v4.4H616.5z"/>
+               <path class="st2" d="M618.1,85.5v-4.4h0.8l1.7,2.9v-2.9h0.8v4.4h-0.9l-1.7-2.9v2.9H618.1z"/>
+               <path class="st2" d="M623.3,85.5v-3.7h-1.3v-0.7h3.4v0.7h-1.3v3.7H623.3z"/>
+       </g>
+       <g>
+               <g>
+                       <path class="st2" d="M446.8,32.9h-0.9l-0.4-1h-1.7l-0.4,1h-0.9l1.7-4.3h0.9L446.8,32.9z M445.2,31.2l-0.6-1.6l-0.6,1.6H445.2z"/>
+                       <path class="st2" d="M449.3,31.3v-0.7h1.9v1.7c-0.2,0.2-0.4,0.3-0.8,0.5s-0.7,0.2-1,0.2c-0.4,0-0.8-0.1-1.2-0.3
+                               c-0.3-0.2-0.6-0.5-0.7-0.8s-0.3-0.7-0.3-1.1c0-0.4,0.1-0.8,0.3-1.2c0.2-0.3,0.5-0.6,0.8-0.8c0.3-0.1,0.6-0.2,1-0.2
+                               c0.5,0,0.9,0.1,1.2,0.3c0.3,0.2,0.5,0.5,0.6,0.9l-0.9,0.2c-0.1-0.2-0.2-0.4-0.3-0.5c-0.2-0.1-0.4-0.2-0.6-0.2
+                               c-0.4,0-0.7,0.1-0.9,0.4c-0.2,0.2-0.3,0.6-0.3,1.1c0,0.5,0.1,0.9,0.3,1.1c0.2,0.3,0.5,0.4,0.9,0.4c0.2,0,0.4,0,0.5-0.1
+                               c0.2-0.1,0.3-0.2,0.5-0.3v-0.5H449.3z"/>
+                       <path class="st2" d="M455.8,32.9h-0.9l-0.4-1h-1.7l-0.4,1h-0.9l1.7-4.3h0.9L455.8,32.9z M454.2,31.2l-0.6-1.6l-0.6,1.6H454.2z"/>
+                       <path class="st2" d="M456.8,32.9v-3.5h-1.3v-0.7h3.4v0.7h-1.3v3.5H456.8z"/>
+                       <path class="st2" d="M459.4,32.9v-4.3h3.2v0.7h-2.3v0.9h2.1V31h-2.1v1.2h2.4v0.7H459.4z"/>
+                       <path class="st2" d="M440.9,40v-4.3h0.9v1.7h1.7v-1.7h0.9V40h-0.9v-1.9h-1.7V40H440.9z"/>
+                       <path class="st2" d="M449.1,40h-0.9l-0.4-1h-1.7l-0.4,1h-0.9l1.7-4.3h0.9L449.1,40z M447.5,38.3l-0.6-1.6l-0.6,1.6H447.5z"/>
+                       <path class="st2" d="M449.6,40v-4.3h1.8c0.5,0,0.8,0,1,0.1c0.2,0.1,0.4,0.2,0.5,0.4c0.1,0.2,0.2,0.4,0.2,0.7
+                               c0,0.3-0.1,0.6-0.3,0.8c-0.2,0.2-0.5,0.3-0.8,0.4c0.2,0.1,0.3,0.2,0.5,0.4c0.1,0.1,0.3,0.4,0.5,0.7l0.5,0.8h-1l-0.6-0.9
+                               c-0.2-0.3-0.4-0.5-0.5-0.6c-0.1-0.1-0.2-0.1-0.3-0.2c-0.1,0-0.2,0-0.4,0h-0.2V40H449.6z M450.4,37.6h0.6c0.4,0,0.7,0,0.8-0.1
+                               s0.2-0.1,0.2-0.2c0.1-0.1,0.1-0.2,0.1-0.3c0-0.1,0-0.3-0.1-0.3c-0.1-0.1-0.2-0.1-0.3-0.2c-0.1,0-0.3,0-0.6,0h-0.7V37.6z"/>
+                       <path class="st2" d="M453.9,35.8h1.7c0.3,0,0.6,0,0.8,0c0.2,0,0.3,0.1,0.4,0.2c0.1,0.1,0.2,0.2,0.3,0.4c0.1,0.1,0.1,0.3,0.1,0.5
+                               c0,0.2-0.1,0.4-0.2,0.6c-0.1,0.2-0.3,0.3-0.4,0.4c0.3,0.1,0.5,0.2,0.6,0.4c0.1,0.2,0.2,0.4,0.2,0.6c0,0.2,0,0.4-0.1,0.6
+                               c-0.1,0.2-0.2,0.3-0.4,0.4c-0.2,0.1-0.3,0.2-0.6,0.2c-0.1,0-0.5,0-1,0h-1.5V35.8z M454.7,36.5v1h0.6c0.3,0,0.5,0,0.6,0
+                               c0.1,0,0.3-0.1,0.3-0.2c0.1-0.1,0.1-0.2,0.1-0.3c0-0.1,0-0.2-0.1-0.3c-0.1-0.1-0.2-0.1-0.3-0.1c-0.1,0-0.3,0-0.7,0H454.7z
+                                M454.7,38.2v1.1h0.8c0.3,0,0.5,0,0.6,0c0.1,0,0.2-0.1,0.3-0.2c0.1-0.1,0.1-0.2,0.1-0.4c0-0.1,0-0.2-0.1-0.3s-0.2-0.2-0.3-0.2
+                               c-0.1,0-0.4-0.1-0.8-0.1H454.7z"/>
+                       <path class="st2" d="M458,37.9c0-0.4,0.1-0.8,0.2-1.1c0.1-0.2,0.2-0.4,0.4-0.6c0.2-0.2,0.4-0.3,0.6-0.4c0.3-0.1,0.6-0.2,0.9-0.2
+                               c0.6,0,1.1,0.2,1.5,0.6c0.4,0.4,0.6,0.9,0.6,1.6c0,0.7-0.2,1.2-0.6,1.6c-0.4,0.4-0.9,0.6-1.5,0.6c-0.6,0-1.1-0.2-1.5-0.6
+                               C458.2,39.1,458,38.6,458,37.9z M458.9,37.9c0,0.5,0.1,0.8,0.3,1.1c0.2,0.2,0.5,0.4,0.8,0.4c0.3,0,0.6-0.1,0.8-0.4
+                               s0.3-0.6,0.3-1.1c0-0.5-0.1-0.9-0.3-1.1c-0.2-0.2-0.5-0.4-0.9-0.4c-0.4,0-0.6,0.1-0.9,0.4C459,37,458.9,37.4,458.9,37.9z"/>
+                       <path class="st2" d="M462.8,40v-4.3h1.8c0.5,0,0.8,0,1,0.1c0.2,0.1,0.4,0.2,0.5,0.4c0.1,0.2,0.2,0.4,0.2,0.7
+                               c0,0.3-0.1,0.6-0.3,0.8s-0.5,0.3-0.8,0.4c0.2,0.1,0.3,0.2,0.5,0.4c0.1,0.1,0.3,0.4,0.5,0.7l0.5,0.8h-1l-0.6-0.9
+                               c-0.2-0.3-0.4-0.5-0.5-0.6c-0.1-0.1-0.2-0.1-0.3-0.2c-0.1,0-0.2,0-0.4,0h-0.2V40H462.8z M463.7,37.6h0.6c0.4,0,0.7,0,0.8-0.1
+                               c0.1,0,0.2-0.1,0.2-0.2c0.1-0.1,0.1-0.2,0.1-0.3c0-0.1,0-0.3-0.1-0.3c-0.1-0.1-0.2-0.1-0.3-0.2c-0.1,0-0.3,0-0.6,0h-0.7V37.6z"/>
+               </g>
+       </g>
+       <g>
+               <path class="st2" d="M306.7,83.4v-4.3h2.9v0.7h-2.1v1h1.8v0.7h-1.8v1.8H306.7z"/>
+               <path class="st2" d="M310.3,83.4v-4.3h0.9v4.3H310.3z"/>
+               <path class="st2" d="M313.1,83.4l-1.5-4.3h0.9l1.1,3.2l1-3.2h0.9l-1.5,4.3H313.1z"/>
+               <path class="st2" d="M315.9,83.4v-4.3h3.2v0.7h-2.3v0.9h2.1v0.7h-2.1v1.2h2.4v0.7H315.9z"/>
+               <path class="st2" d="M321.6,83.4v-4.3h1.3l0.8,2.9l0.8-2.9h1.3v4.3h-0.8v-3.4l-0.8,3.4h-0.8l-0.8-3.4v3.4H321.6z"/>
+               <path class="st2" d="M326.5,83.4v-4.3h0.9v4.3H326.5z"/>
+               <path class="st2" d="M328.2,83.4v-4.2h0.9v3.5h2.1v0.7H328.2z"/>
+               <path class="st2" d="M331.8,83.4v-4.3h3.2v0.7h-2.3v0.9h2.1v0.7h-2.1v1.2h2.4v0.7H331.8z"/>
+               <path class="st2" d="M337.5,83.4v-4.3h1.4c0.5,0,0.9,0,1,0.1c0.2,0.1,0.4,0.2,0.6,0.4c0.2,0.2,0.2,0.5,0.2,0.8
+                       c0,0.3,0,0.5-0.1,0.7c-0.1,0.2-0.2,0.3-0.4,0.4c-0.1,0.1-0.3,0.2-0.4,0.2c-0.2,0-0.5,0.1-0.9,0.1h-0.6v1.6H337.5z M338.3,79.9v1.2
+                       h0.5c0.3,0,0.6,0,0.7-0.1c0.1,0,0.2-0.1,0.3-0.2c0.1-0.1,0.1-0.2,0.1-0.3c0-0.2,0-0.3-0.1-0.4c-0.1-0.1-0.2-0.2-0.3-0.2
+                       c-0.1,0-0.3,0-0.6,0H338.3z"/>
+               <path class="st2" d="M341.3,81.3c0-0.4,0.1-0.8,0.2-1.1c0.1-0.2,0.2-0.4,0.4-0.6c0.2-0.2,0.4-0.3,0.6-0.4c0.3-0.1,0.6-0.2,0.9-0.2
+                       c0.6,0,1.1,0.2,1.5,0.6c0.4,0.4,0.6,0.9,0.6,1.6c0,0.7-0.2,1.2-0.6,1.6c-0.4,0.4-0.9,0.6-1.5,0.6c-0.6,0-1.1-0.2-1.5-0.6
+                       S341.3,82,341.3,81.3z M342.2,81.3c0,0.5,0.1,0.8,0.3,1.1c0.2,0.2,0.5,0.4,0.8,0.4c0.3,0,0.6-0.1,0.8-0.4c0.2-0.2,0.3-0.6,0.3-1.1
+                       c0-0.5-0.1-0.9-0.3-1.1c-0.2-0.2-0.5-0.4-0.9-0.4s-0.6,0.1-0.9,0.4C342.3,80.4,342.2,80.8,342.2,81.3z"/>
+               <path class="st2" d="M346.1,83.4v-4.3h0.9v4.3H346.1z"/>
+               <path class="st2" d="M347.7,83.4v-4.3h0.8l1.7,2.8v-2.8h0.8v4.3h-0.9l-1.7-2.8v2.8H347.7z"/>
+               <path class="st2" d="M353,83.4v-3.5h-1.3v-0.7h3.4v0.7h-1.3v3.5H353z"/>
+       </g>
+       <g>
+               <g>
+                       <path class="st2" d="M215.3,74.3l-2.5-5.1l1-0.5l2.5,5.1L215.3,74.3z"/>
+                       <path class="st2" d="M216.3,71.8l1-0.6c0.2,0.3,0.5,0.5,0.7,0.6s0.6,0,0.9-0.1c0.3-0.2,0.5-0.4,0.6-0.6c0.1-0.2,0.1-0.4,0-0.6
+                               c-0.1-0.1-0.1-0.2-0.3-0.3c-0.1,0-0.3-0.1-0.5,0c-0.1,0-0.5,0.1-0.9,0.2c-0.6,0.1-1.1,0.2-1.4,0.1c-0.5-0.1-0.8-0.4-1-0.8
+                               c-0.1-0.3-0.2-0.5-0.1-0.8c0-0.3,0.2-0.6,0.4-0.8c0.2-0.3,0.5-0.5,0.9-0.7c0.6-0.3,1.2-0.4,1.7-0.3s0.8,0.4,1.1,0.9l-1,0.6
+                               c-0.2-0.2-0.4-0.4-0.6-0.4c-0.2,0-0.4,0-0.7,0.2c-0.3,0.1-0.5,0.3-0.6,0.5c-0.1,0.1-0.1,0.3,0,0.4c0.1,0.1,0.2,0.2,0.3,0.2
+                               c0.2,0,0.6,0,1.1-0.1c0.6-0.1,1-0.2,1.3-0.2c0.3,0,0.6,0.1,0.8,0.2c0.2,0.2,0.4,0.4,0.6,0.7c0.1,0.3,0.2,0.6,0.2,0.9
+                               c0,0.3-0.2,0.6-0.4,0.9c-0.2,0.3-0.6,0.5-1,0.7c-0.6,0.3-1.2,0.4-1.7,0.3C217,72.6,216.6,72.3,216.3,71.8z"/>
+                       <path class="st2" d="M222.1,70.9l-2.5-5.1l1-0.5l2.1,4.2l2.6-1.3l0.4,0.9L222.1,70.9z"/>
+                       <path class="st2" d="M226.4,68.7l-2.5-5.1l3.8-1.9l0.4,0.9l-2.7,1.4l0.6,1.1l2.6-1.3l0.4,0.9l-2.6,1.3l0.7,1.4l2.8-1.4l0.4,0.9
+                               L226.4,68.7z"/>
+                       <path class="st2" d="M233.2,65.4l-2.5-5.1l2.2-1.1c0.5-0.3,1-0.4,1.3-0.5c0.3,0,0.6,0,0.8,0.2c0.3,0.2,0.5,0.4,0.6,0.7
+                               c0.2,0.4,0.2,0.8,0.1,1.1c-0.1,0.4-0.4,0.7-0.8,1c0.3,0,0.5,0.1,0.8,0.2c0.2,0.1,0.6,0.3,1,0.5l1.1,0.7l-1.2,0.6l-1.3-0.7
+                               c-0.5-0.3-0.8-0.4-0.9-0.5c-0.1-0.1-0.3-0.1-0.4-0.1c-0.1,0-0.3,0.1-0.5,0.2l-0.2,0.1l1.1,2.1L233.2,65.4z M232.7,61.9l0.8-0.4
+                               c0.5-0.2,0.8-0.4,0.9-0.5c0.1-0.1,0.2-0.2,0.2-0.4c0-0.1,0-0.3-0.1-0.4c-0.1-0.2-0.2-0.3-0.3-0.3c-0.1-0.1-0.3-0.1-0.5,0
+                               c-0.1,0-0.3,0.1-0.8,0.4l-0.8,0.4L232.7,61.9z"/>
+                       <path class="st2" d="M236.8,60.4c-0.3-0.5-0.4-1-0.4-1.4c0-0.3,0-0.6,0.1-0.9c0.1-0.3,0.2-0.6,0.4-0.8c0.3-0.3,0.6-0.5,1-0.7
+                               c0.8-0.4,1.5-0.4,2.1-0.2c0.7,0.2,1.2,0.8,1.6,1.6c0.4,0.8,0.5,1.6,0.3,2.3c-0.2,0.7-0.7,1.2-1.4,1.6c-0.8,0.4-1.5,0.4-2.2,0.2
+                               C237.8,61.8,237.2,61.2,236.8,60.4z M237.9,59.9c0.3,0.6,0.6,0.9,1.1,1.1c0.4,0.2,0.8,0.1,1.2-0.1c0.4-0.2,0.7-0.5,0.8-0.9
+                               c0.1-0.4,0-0.9-0.3-1.5c-0.3-0.6-0.6-1-1-1.1c-0.4-0.2-0.8-0.1-1.2,0.1c-0.4,0.2-0.7,0.5-0.8,0.9
+                               C237.5,58.8,237.6,59.3,237.9,59.9z"/>
+                       <path class="st2" d="M245.2,59.4l-1.1-2.1l-3.3-2l1.2-0.6l2.2,1.4l0.2-2.6l1.2-0.6l-0.4,3.9l1.1,2.1L245.2,59.4z"/>
+                       <path class="st2" d="M252.5,55.7l-1.1,0.6l-1-0.9l-2,1l0.2,1.4l-1.1,0.5l-0.6-6.1l1.1-0.5L252.5,55.7z M249.6,54.7l-1.6-1.5
+                               l0.3,2.2L249.6,54.7z"/>
+                       <path class="st2" d="M253.1,55.5l-2.5-5.1l1-0.5l2.1,4.2l2.6-1.3l0.4,0.9L253.1,55.5z"/>
+                       <path class="st2" d="M257.4,53.3l-2.5-5.1l3.8-1.9l0.4,0.9l-2.7,1.4l0.6,1.1l2.6-1.3l0.4,0.9l-2.6,1.3l0.7,1.4l2.8-1.4l0.4,0.9
+                               L257.4,53.3z"/>
+               </g>
+       </g>
+       <g>
+               <path class="st2" d="M292.9,54.9v-4.3h1.8c0.5,0,0.8,0,1,0.1s0.4,0.2,0.5,0.4c0.1,0.2,0.2,0.4,0.2,0.7c0,0.3-0.1,0.6-0.3,0.8
+                       c-0.2,0.2-0.5,0.3-0.8,0.4c0.2,0.1,0.3,0.2,0.5,0.4c0.1,0.1,0.3,0.4,0.5,0.7l0.5,0.8h-1l-0.6-0.9c-0.2-0.3-0.4-0.5-0.5-0.6
+                       c-0.1-0.1-0.2-0.1-0.3-0.2c-0.1,0-0.2,0-0.4,0h-0.2v1.8H292.9z M293.8,52.4h0.6c0.4,0,0.7,0,0.8-0.1s0.2-0.1,0.2-0.2
+                       c0.1-0.1,0.1-0.2,0.1-0.3c0-0.1,0-0.3-0.1-0.3c-0.1-0.1-0.2-0.1-0.3-0.2c-0.1,0-0.3,0-0.6,0h-0.7V52.4z"/>
+               <path class="st2" d="M297,52.8c0-0.4,0.1-0.8,0.2-1.1c0.1-0.2,0.2-0.4,0.4-0.6s0.4-0.3,0.6-0.4c0.3-0.1,0.6-0.2,0.9-0.2
+                       c0.6,0,1.1,0.2,1.5,0.6s0.6,0.9,0.6,1.6c0,0.7-0.2,1.2-0.6,1.6c-0.4,0.4-0.9,0.6-1.5,0.6c-0.6,0-1.1-0.2-1.5-0.6
+                       S297,53.5,297,52.8z M297.9,52.8c0,0.5,0.1,0.8,0.3,1.1c0.2,0.2,0.5,0.4,0.8,0.4c0.3,0,0.6-0.1,0.8-0.4s0.3-0.6,0.3-1.1
+                       c0-0.5-0.1-0.9-0.3-1.1c-0.2-0.2-0.5-0.4-0.9-0.4s-0.6,0.1-0.9,0.4C298,51.9,297.9,52.3,297.9,52.8z"/>
+               <path class="st2" d="M304.6,53.3l0.8,0.3c-0.1,0.5-0.3,0.8-0.6,1c-0.3,0.2-0.7,0.3-1.1,0.3c-0.6,0-1-0.2-1.4-0.6s-0.5-0.9-0.5-1.6
+                       c0-0.7,0.2-1.3,0.6-1.7s0.8-0.6,1.4-0.6c0.5,0,0.9,0.2,1.3,0.5c0.2,0.2,0.3,0.4,0.4,0.8l-0.9,0.2c-0.1-0.2-0.2-0.4-0.3-0.5
+                       c-0.2-0.1-0.4-0.2-0.6-0.2c-0.3,0-0.6,0.1-0.8,0.3s-0.3,0.6-0.3,1.1c0,0.5,0.1,0.9,0.3,1.2c0.2,0.2,0.4,0.3,0.8,0.3
+                       c0.2,0,0.4-0.1,0.6-0.2C304.4,53.9,304.5,53.7,304.6,53.3z"/>
+               <path class="st2" d="M306.2,54.9v-4.3h0.9v1.9l1.7-1.9h1.2l-1.6,1.7l1.7,2.6h-1.1l-1.2-2l-0.7,0.7v1.3H306.2z"/>
+               <path class="st2" d="M312.1,54.9v-4.3h0.9v1.7h1.7v-1.7h0.9v4.3h-0.9V53H313v1.9H312.1z"/>
+               <path class="st2" d="M320.3,54.9h-0.9l-0.4-1h-1.7l-0.4,1H316l1.7-4.3h0.9L320.3,54.9z M318.7,53.2l-0.6-1.6l-0.6,1.6H318.7z"/>
+               <path class="st2" d="M320.7,54.9v-4.3h1.8c0.5,0,0.8,0,1,0.1c0.2,0.1,0.4,0.2,0.5,0.4c0.1,0.2,0.2,0.4,0.2,0.7
+                       c0,0.3-0.1,0.6-0.3,0.8s-0.5,0.3-0.8,0.4c0.2,0.1,0.3,0.2,0.5,0.4c0.1,0.1,0.3,0.4,0.5,0.7l0.5,0.8h-1l-0.6-0.9
+                       c-0.2-0.3-0.4-0.5-0.5-0.6c-0.1-0.1-0.2-0.1-0.3-0.2c-0.1,0-0.2,0-0.4,0h-0.2v1.8H320.7z M321.6,52.4h0.6c0.4,0,0.7,0,0.8-0.1
+                       s0.2-0.1,0.2-0.2c0.1-0.1,0.1-0.2,0.1-0.3c0-0.1,0-0.3-0.1-0.3s-0.2-0.1-0.3-0.2c-0.1,0-0.3,0-0.6,0h-0.7V52.4z"/>
+               <path class="st2" d="M325,50.6h1.7c0.3,0,0.6,0,0.8,0c0.2,0,0.3,0.1,0.4,0.2c0.1,0.1,0.2,0.2,0.3,0.4c0.1,0.1,0.1,0.3,0.1,0.5
+                       c0,0.2-0.1,0.4-0.2,0.6c-0.1,0.2-0.3,0.3-0.4,0.4c0.3,0.1,0.5,0.2,0.6,0.4s0.2,0.4,0.2,0.6c0,0.2,0,0.4-0.1,0.6
+                       c-0.1,0.2-0.2,0.3-0.4,0.4c-0.2,0.1-0.3,0.2-0.6,0.2c-0.1,0-0.5,0-1,0H325V50.6z M325.9,51.4v1h0.6c0.3,0,0.5,0,0.6,0
+                       c0.1,0,0.3-0.1,0.3-0.2c0.1-0.1,0.1-0.2,0.1-0.3c0-0.1,0-0.2-0.1-0.3c-0.1-0.1-0.2-0.1-0.3-0.1c-0.1,0-0.3,0-0.7,0H325.9z
+                        M325.9,53.1v1.1h0.8c0.3,0,0.5,0,0.6,0c0.1,0,0.2-0.1,0.3-0.2c0.1-0.1,0.1-0.2,0.1-0.4c0-0.1,0-0.2-0.1-0.3
+                       c-0.1-0.1-0.2-0.2-0.3-0.2c-0.1,0-0.4-0.1-0.8-0.1H325.9z"/>
+               <path class="st2" d="M329.1,52.8c0-0.4,0.1-0.8,0.2-1.1c0.1-0.2,0.2-0.4,0.4-0.6c0.2-0.2,0.4-0.3,0.6-0.4c0.3-0.1,0.6-0.2,0.9-0.2
+                       c0.6,0,1.1,0.2,1.5,0.6c0.4,0.4,0.6,0.9,0.6,1.6c0,0.7-0.2,1.2-0.6,1.6c-0.4,0.4-0.9,0.6-1.5,0.6c-0.6,0-1.1-0.2-1.5-0.6
+                       S329.1,53.5,329.1,52.8z M330,52.8c0,0.5,0.1,0.8,0.3,1.1c0.2,0.2,0.5,0.4,0.8,0.4c0.3,0,0.6-0.1,0.8-0.4s0.3-0.6,0.3-1.1
+                       c0-0.5-0.1-0.9-0.3-1.1c-0.2-0.2-0.5-0.4-0.9-0.4s-0.6,0.1-0.9,0.4C330.1,51.9,330,52.3,330,52.8z"/>
+               <path class="st2" d="M334,54.9v-4.3h1.8c0.5,0,0.8,0,1,0.1s0.4,0.2,0.5,0.4c0.1,0.2,0.2,0.4,0.2,0.7c0,0.3-0.1,0.6-0.3,0.8
+                       c-0.2,0.2-0.5,0.3-0.8,0.4c0.2,0.1,0.3,0.2,0.5,0.4c0.1,0.1,0.3,0.4,0.5,0.7l0.5,0.8h-1l-0.6-0.9c-0.2-0.3-0.4-0.5-0.5-0.6
+                       c-0.1-0.1-0.2-0.1-0.3-0.2c-0.1,0-0.2,0-0.4,0h-0.2v1.8H334z M334.8,52.4h0.6c0.4,0,0.7,0,0.8-0.1s0.2-0.1,0.2-0.2
+                       c0.1-0.1,0.1-0.2,0.1-0.3c0-0.1,0-0.3-0.1-0.3c-0.1-0.1-0.2-0.1-0.3-0.2c-0.1,0-0.3,0-0.6,0h-0.7V52.4z"/>
+       </g>
+       <path class="st4" d="M188,327.7c0,0-0.5-0.8,1.3-2c1.8-1.3,2-1.3,2.5-2.3c0.5-1,2.8-1.3,2.8-1.3s2.5-3,3.5-1.8c1,1.3,0.5,1.8,0.3,3
+               c-0.3,1.3-0.5,2.3-2.3,2.5c-1.8,0.3-2,1-2.8,0.3l-0.8-0.8c0,0,0.3-0.5-0.8,0C190.8,326,188.7,328.2,188,327.7z"/>
+       <path class="st4" d="M186.7,327.2c0,0-1.8-0.5-2,0.8c-0.3,1.3-0.5,2.5-0.5,2.5s-2,0.8-1.5,1.5c0.5,0.8,2.5-0.8,2.8,0.8
+               c0.3,1.5,1,1.5,1.5,0.3c0.5-1.3,0.5-3.3,0.5-3.3L186.7,327.2z"/>
+       <path class="st10" d="M342.4,289.4l1.8-1.1l2.4-1.8l1.6-2.2l0.9-1.9l1.3-2.2l1.6-2.2l1.6-2.6l0.8-0.9l0.9-0.2l1.6-1.5l1.4-2.3
+               l0.8-0.9l0.6-1.5l0.1-1.9l0.2-2.2l1.3-3l1.7-4.5l0.7-2.2l0.9-1.9l-0.2-3.3v-3.3l0.2-2.5l1.4-2.3l2.2-1.7l2.2-1.6l1.9-0.8l2.3-0.9
+               l2.2-1.3l1.8-1.3l1.5-0.7l2.1-1.6l1.7-2.1l2.6-6.1l0.7-2.4l-0.3-2.9l0.5-3.3l1.3-2.6l2.4-2.6l1.6-0.8l3-0.5h1.6l1.3,0.8l1.4,1.4
+               l1,1.4l0.6,0.5l0.9-0.6l0.8-1l1.6-1l1.5-1.1c0,0,0.7-0.8,0.9-1.1c0.2-0.3,0.6-2.3,0.6-2.3l0.2-1.5l-0.9-0.6l-0.6,0.2l-0.5,0.9
+               l-1.3,0.1l-0.7-0.8l-0.7-2.7l0.2-6.3l1.3-5l1.8-3.7l2.2-3.3l2.7-3.2l2.4-2.5l1.8-1.5l1.6-0.5l0.9,0.7l0.9,0.5l2.1,0.3l1.4-0.5
+               l2.3-1.4l1.5-0.6l1-0.1l1-0.6l1.7-1.7l1.9-0.7l1-0.7l1.3-2.4l1.6-2.3l1.6-0.8l1.9-1.1l1.9-1.9l1.6-3.5l1.6-2.7l1-2.1l1.6-1.4
+               l1.8-0.7l2.1-0.5h1.8l0.8-1.3l1.7-2.5l1.4-1.7l1.3-1.5l1.3-1l1-2.1l1.7-2.4l2.3-2.1l1.6-1.6c0,0,0.7-0.8,0.9-1.1
+               c0.2-0.3,0.8-2.1,0.8-2.1l2.2-0.7l3.4-0.5l2.5-0.7l3.8-1.6l3.1-1.6l2.4-2.5l1.9-1.6l1.5-1l1.4-1.5l1.8-0.9l1.8-0.6l2.1-1.9
+               c0,0,1.8-2.2,2.2-2.3c0.3-0.1,1.9-0.7,1.9-0.7l2.4-0.3l1.6,0.1l1.8-0.9l2.3-2.7l0.9-2.7l-0.9-2.1l-1.6-1.8l-4-2.6l-2.3-2.2
+               l-1.4-2.6l0.7-3l0.5-1.6l0.3-1.6c0,0,0.6-1.4,0.7-1.7c0.1-0.3,0.7-1.5,0.7-1.5l2.2-0.9l3.4-0.6l4-0.9l3.3-0.2l2.9-1l2.1-0.3
+               l1.5,0.6l1,0.5l1.1-0.3l1.6-0.9l2.1-1.1h2.4l1.7,0.1l1.6,1l2.1,0.5l2.7-0.2h1.6l1.8,0.7l0.2,0.8l1.1,0.3h1.3l1.6,0.3l1.6,1
+               c0,0,0.6,0.8,0.9,0.9c0.3,0.1,1.8,0.7,1.8,0.7h1.8l1.6-1.1c0,0,1.3-1.5,1.6-1.6c0.3-0.1,2.2-1.1,2.2-1.1L558,82l1.9-0.5l1.5,0.6
+               l1.1,0.6l1.7,0.1l1.5-0.6l1.3-1.7l1.3-2.2l1.3-1.4l1.6-0.7l1.4-0.2h1.7l0.7-0.2l1.3-0.2l2.2,0.8l2.2,0.7l1.6,0.9h4.8l0.8-0.6
+               L588,76l-0.2-1.9l-0.8-1.7l-1.8-1.6l-0.7-2.4l0.3-3.3l0.5-1.8l-0.6-3.7l-0.2-3.3l-1.5-1.7l-8.5-5.6l-1.1-0.7l-1.4-0.1l-1.8-1.4
+               l-0.7-0.9l-1.5-0.1l-1.5-0.6l-3-1.9l-1.8-0.1l-1.5-1l-1.3-1l-1.5-0.6h-1.9l-2.5-0.3h-1.1l-1.1,0.2l-1.9-0.1l-1.4-0.3h-2.9l-2.4-0.2
+               l-2.5-0.2l-2.4-0.7l-2.4-0.2l-2.3,1l-1.4,0.7l6.1,0.7l0.8,0.7l-0.1,0.8l-1,0.5l-1.4-0.9l-1.1-0.6l-0.7,0.2l-0.3,0.7l-1.1-0.5
+               l-1.4-0.5l-5.3,0.7l-2.1-0.8l-3,0.2l-1.4-0.6l0.6-0.5l-0.6-2.3l-3.5-0.3l-3.5,0.6L510,38l-3.2-1.3c0,0-4.5,1.4-5,1.4
+               c-0.6,0-2.2-0.5-2.2-0.5l-4.5-0.5l-1.1,0.5l-4.7,0.9l-4.5-0.5l-2.6,0.5l-3.8,0.8l-5.7-0.1l-2.1,1.4l5.1,1.8l-8.2,0.7l-5.6,0.1
+               l-3.2,0.2l-4.7,0.5l-0.9,0.6l-5.3-0.2l0.3,1.4c0,0-0.3,0.8-0.7,0.8h-1.8l-1.1-0.2l-0.9-0.8l0.6-0.8l0.8-0.5l-6.9,0.2l-0.9,1L437,47
+               l-4.3,0.9V47l-5.4,1.9h-3.2l-3.2,2.6l-0.1-0.5l-4.5,1.1c0,0-0.9,0.8-1.3,0.9c-0.3,0.1-1.9,0.9-1.9,0.9l-2.5,1.3l0.6,0.7l0.9,0.5
+               l0.3,0.6l-0.6,2.5l-4,3.8l-1.3,0.8l-3.1,1l-3.3,0.5l-2.5,0.2l-2.3,0.7c0,0-1.7,0.1-2.1,0.2c-0.3,0.1-2.5,0.3-2.5,0.3l-1.7,1l-3,1.8
+               l-2.6,1.8l-2.4,1.4l-0.6,1c0,0-0.3,0.6-0.9,0.7c-0.6,0.1-4.2,1.5-4.2,1.5l-1.6,0.9l-3.3,2.3l-3.3,1.3l-3,0.7h-2.2l-3.5,1.8
+               c0,0-1.3,1.1-1.6,1.3c-0.3,0.1-2.5,1.9-2.5,1.9l-1.6,0.7l-2.5,1.3l-0.7,0.9l-1.9,1.7c0,0-1.5,1.1-2.3,1.3c-0.8,0.1-3,0.7-3,0.7
+               l-3.2,1.9l-3,4.5l-1.5,2.3l-1.9,2.5l-2.9,2.1l-1.6,1.1l-2.2,2.4l-1.8,2.5l-1.5,2.9l-0.9,3.4l-0.7,2.4l-3.2,2.6l-1.3,3l-2.2,2.9
+               l-1.9,1.7l-3.1,2.6l-1.8,1.7l-1.8,1.6l-2.3,3l-2.2,1.9l-3.3,2.6c0,0-1.7-0.1-1.9,0.2c-0.2,0.3-2.5,2.5-2.9,2.9
+               c-0.3,0.3-3.8,4.1-3.8,4.1l-2.9,1.9l-3,2.3l-4.2,0.6l-3.5,1.4l-3.2,2.1l-1.8,2.4l0,1.6l1.3,2.9l0.7,2.4v4.7l-0.2,8.3l-1,2.1
+               l-1.3,2.3l-1.5,1.7c0,0-1.6,1.6-1.9,1.8c-0.3,0.2-1.5,2.1-1.5,2.1l0.1,2.3l1,1.7l1.6,1.7l0.5,3.2l1,4.9l1.4,3.4l1.3,2.5l2.1,2.2
+               c0,0,1.7,0.6,2.1,0.7c0.3,0.1,3,0.2,3,0.2l13.8-0.3l2.7,1.3l3.3,0.6l4.5,1.4l3.3,1.3l3.1,0.9l1.5,0.5l0.9,0.3l0.5-0.7l0.8-1.1h1
+               v1.3l-0.1,1l-0.5,1.1l-0.6,0.7l0.6,1.4l-0.5,1.6l-0.1,1.6l0.5,0.9l1.3,1.5l0.1,1.9c0,0,0.7,1.3,0.8,1.6c0.1,0.3,1.5,1.3,1.5,1.3
+               l0.8,0.3l0.6-0.5h2.9l0.7-1.3l1.1-0.5l1-0.5l0.3-0.6h1h1c0,0,0.7-0.3,1-0.3c0.3,0,1.1-1,1.1-1l4.7-0.1l1.7-0.3l1.6-0.5l0.2-1V228
+               l0.6-0.3l1.1-0.2l0.7-0.6l0.6-1.1l3.2-10.4l0.3-4.2l-0.6-3.5l-0.6-2.6l-0.7-2.6l-3.3-1.3h-2.3l-1.6,0.6l-1.5,1.7l-1.6,2.9l-0.8,2.3
+               l-2.1,3.7l-1.8,1.6l-1.4,0.2l-0.3,1.3l-1.7,0.2l-1.5-0.7l-0.8-1.5l0.1-1.3l1.1-2.1l1.7-1.5l1.4-0.8l1.8-0.8v-1.6l1.4-0.6l0.3-2.1
+               l1.8-3.7l1.8-1.7l1.9-1l0.8-0.8h2.2l0.8-0.5l-0.8-1.6l2.1-3.9l1.3-2.2l1.5-1.6l1.4-0.3l1.6,1.4l1,1l0.8-0.9l0.6-0.1l0.5,1.1
+               l-0.1,1.3l-0.5,1.1l-1.3,2.2l-0.1,1.3l0.6,1.5l-0.3,2.4l-1.4,1.8l-1.1,1.3l-0.1,2.3l0.6,3.2l0.8,2.4l0.3,2.6v4.6l-0.3,4.8l-0.8,2.7
+               l-1.1,2.3l-1.1,1.9l-1.4,1.6l-0.9,0.7l0.1,1.9l-3.1,3.4l-2.6,1.9l-3.7,1.5l-4.1,2.3l-1.7,2.4l-1.9,3.2l-0.9,2.6l-0.6,3.2l-0.2,3.5
+               v3.7l0.2,2.2l0.8,2.6l1,2.6l1.3,1.6l1.6,0.8l2.2,0.6l1.4,0.5l1.1,0.5v0.7l-0.1,1.1l1.3,3.1l1.9,2.3l1.5,2.2l1.1,2.1l0.1,1.5
+               l1.3-1.6l0.1,5.1c0,0-0.3,1.1-0.7,1.3c-0.3,0.1-0.9,1.6-0.9,1.6l0.7,0.8l1.7-0.2l1.1-0.3L342.4,289.4z"/>
+       <g>
+               <path class="st2" d="M276.8,246v-4.3h1.4c0.5,0,0.9,0,1,0.1c0.2,0.1,0.4,0.2,0.6,0.4c0.2,0.2,0.2,0.5,0.2,0.8c0,0.3,0,0.5-0.1,0.7
+                       c-0.1,0.2-0.2,0.3-0.4,0.4c-0.1,0.1-0.3,0.2-0.4,0.2c-0.2,0-0.5,0.1-0.9,0.1h-0.6v1.6H276.8z M277.6,242.5v1.2h0.5
+                       c0.3,0,0.6,0,0.7-0.1c0.1,0,0.2-0.1,0.3-0.2c0.1-0.1,0.1-0.2,0.1-0.3c0-0.2,0-0.3-0.1-0.4c-0.1-0.1-0.2-0.2-0.3-0.2
+                       c-0.1,0-0.3,0-0.6,0H277.6z"/>
+               <path class="st2" d="M280.6,243.9c0-0.4,0.1-0.8,0.2-1.1c0.1-0.2,0.2-0.4,0.4-0.6c0.2-0.2,0.4-0.3,0.6-0.4
+                       c0.3-0.1,0.6-0.2,0.9-0.2c0.6,0,1.1,0.2,1.5,0.6c0.4,0.4,0.6,0.9,0.6,1.6c0,0.7-0.2,1.2-0.6,1.6c-0.4,0.4-0.9,0.6-1.5,0.6
+                       c-0.6,0-1.1-0.2-1.5-0.6C280.8,245.1,280.6,244.6,280.6,243.9z M281.5,243.9c0,0.5,0.1,0.8,0.3,1.1c0.2,0.3,0.5,0.4,0.8,0.4
+                       c0.3,0,0.6-0.1,0.8-0.4c0.2-0.2,0.3-0.6,0.3-1.1c0-0.5-0.1-0.9-0.3-1.1s-0.5-0.4-0.9-0.4s-0.6,0.1-0.9,0.4
+                       C281.6,243,281.5,243.4,281.5,243.9z"/>
+               <path class="st2" d="M285.4,246v-4.3h1.8c0.5,0,0.8,0,1,0.1c0.2,0.1,0.4,0.2,0.5,0.4c0.1,0.2,0.2,0.4,0.2,0.7
+                       c0,0.3-0.1,0.6-0.3,0.8c-0.2,0.2-0.5,0.3-0.8,0.4c0.2,0.1,0.3,0.2,0.5,0.4c0.1,0.1,0.3,0.4,0.5,0.7l0.5,0.8h-1l-0.6-0.9
+                       c-0.2-0.3-0.4-0.5-0.5-0.6c-0.1-0.1-0.2-0.1-0.3-0.2c-0.1,0-0.2,0-0.4,0h-0.2v1.8H285.4z M286.2,243.5h0.6c0.4,0,0.7,0,0.8-0.1
+                       c0.1,0,0.2-0.1,0.2-0.2c0.1-0.1,0.1-0.2,0.1-0.3c0-0.1,0-0.3-0.1-0.3c-0.1-0.1-0.2-0.1-0.3-0.2c-0.1,0-0.3,0-0.6,0h-0.7V243.5z"/>
+               <path class="st2" d="M290.5,246v-3.5h-1.3v-0.7h3.4v0.7h-1.3v3.5H290.5z"/>
+               <path class="st2" d="M296.6,246h-0.9l-0.4-1h-1.7l-0.4,1h-0.9l1.7-4.3h0.9L296.6,246z M295,244.3l-0.6-1.6l-0.6,1.6H295z"/>
+               <path class="st2" d="M299.1,244.4v-0.7h1.9v1.7c-0.2,0.2-0.4,0.3-0.8,0.5c-0.3,0.1-0.7,0.2-1,0.2c-0.4,0-0.8-0.1-1.2-0.3
+                       c-0.3-0.2-0.6-0.5-0.7-0.8c-0.2-0.3-0.3-0.7-0.3-1.1c0-0.4,0.1-0.8,0.3-1.2c0.2-0.3,0.5-0.6,0.8-0.8c0.3-0.1,0.6-0.2,1-0.2
+                       c0.5,0,0.9,0.1,1.2,0.3c0.3,0.2,0.5,0.5,0.6,0.9l-0.9,0.2c-0.1-0.2-0.2-0.4-0.3-0.5c-0.2-0.1-0.4-0.2-0.6-0.2
+                       c-0.4,0-0.7,0.1-0.9,0.4c-0.2,0.2-0.3,0.6-0.3,1.1c0,0.5,0.1,0.9,0.3,1.1c0.2,0.3,0.5,0.4,0.9,0.4c0.2,0,0.4,0,0.5-0.1
+                       c0.2-0.1,0.3-0.2,0.5-0.3v-0.5H299.1z"/>
+               <path class="st2" d="M301.7,246v-4.3h3.2v0.7h-2.3v0.9h2.1v0.7h-2.1v1.2h2.4v0.7H301.7z"/>
+       </g>
+       <g>
+               <path class="st2" d="M289.5,252.2V248h0.9v3.5h2.1v0.7H289.5z"/>
+               <path class="st2" d="M297,252.2H296l-0.4-1h-1.7l-0.4,1h-0.9l1.7-4.3h0.9L297,252.2z M295.4,250.6l-0.6-1.6l-0.6,1.6H295.4z"/>
+               <path class="st2" d="M297.4,252.2V248h0.9v1.9l1.7-1.9h1.2l-1.6,1.7l1.7,2.6h-1.1l-1.2-2l-0.7,0.7v1.3H297.4z"/>
+               <path class="st2" d="M301.7,252.2V248h3.2v0.7h-2.3v0.9h2.1v0.7h-2.1v1.2h2.4v0.7H301.7z"/>
+       </g>
+       <g>
+               <g class="st11">
+                       <path class="st12" d="M107.1,142.3c0.1,0.1,0,0.3,0.1,0.4c0.1,0.1,0.3,0.1,0.4,0.1c0.5,0.5,0.6,1.5,1,2.2
+                               c2.3-0.3,3.6,0.3,4.5,1.5c0.4,0.1,0.8,0.2,1.4,0.1c0.5,0.8,1.6,1,3,0.9c0.5,0.5,1.2,0.9,1.7,1.4c-0.4,0.5,0,1.3,0.4,2
+                               c0.2,0.5,1.1,1,1,1.5c-0.1,0.7-1.6,0.6-1.9,1.2c0.2,0.6-0.5,0.9-0.4,1.4c0,0.2,0.3,0.2,0.3,0.4c0.1,0.4,0,0.6,0.3,0.8
+                               c0.1,0.1,0.4,0.1,0.5,0.2c0.1,0.1,0.1,0.3,0.3,0.4c0.3,0.3,0.7,0.2,0.9,0.5c0.4,0.5,0.4,1.8,0.5,2.5c0.1,0.8,0.5,2.2-0.3,2.9
+                               c0,0.8,0.2,1.6-0.3,2c0.1,0.7,0.1,2.8-0.3,3.7c-0.3,0.6-1.2,0.7-1.6,1c-0.1-0.2-0.2-0.1-0.2,0.1c-0.7,0.3-1.1,1-1.3,1.8
+                               c-0.3,1-0.2,2.1-0.6,2.9c-0.2,0.4-0.7,0.6-1,0.9c-0.5,0.4-0.9,1-1.8,1.1c-0.3,0-0.5-0.1-0.8,0c-1.9,0.6-1,2.8-1.5,4.5
+                               c-0.1,0.5-0.4,1.1,0,1.8c0.2,0.3,0.5,0.5,0.9,0.7c0.1,0.3,0.2,0.4,0.4,0.5c0.2,0,0.3-0.1,0.5-0.1c0.1,0.1,0,0.3,0.1,0.3
+                               c1.1-0.3,1.6,0.4,2,0.9c1-0.5,1.4-1.7,2.2-2.5c0.7,0,1.4-0.4,1.2-1.3c0.5-0.2,0.5-1,1.1-1.1c0.1-1.1,1-1.3,1.2-2.4
+                               c0.5-0.2,0.8-0.6,0.9-1.2c0.5-0.1,0.9-0.5,1.4-0.2c0.7-0.7,2.4-0.3,2.5-1.6c0.6-0.1,0.9-0.7,1.8-0.5c0.1,0.5,1.1,0.2,1.1,0.8
+                               c0.3-0.7,0.7-0.1,0.9,0.4c0.1,0.1,0.3,0,0.4,0.1c0.7,0.5,1,1.4,1.3,2.3c1,1.4,1.4,3.5,1.5,5.4c0.1,2.3,0.8,4.7,1.1,6.9
+                               c0.1,0.9,0.3,1.8,0.4,2.7c0.1,0.4,0.4,0.8,0.4,1.2c0,0.2-0.1,0.5,0,0.7c0.1,0.2,0.3,0.2,0.4,0.4c0.2,0.4,0.6,1.3,0.5,1.7
+                               c0,0.5-0.6,1.1-0.8,1.7c-0.1,0.4,0,0.8,0,1.2c0,0.4-0.1,0.6,0,1.1c0.2,1.2-0.6,2.1-0.8,3.3c-0.2,0-0.8,0.3-1.2,0.1
+                               c-0.2-0.1-0.2-0.3-0.4-0.5c-0.7-0.7-1.8-0.4-2.4,0c-0.1,0.1-0.6,0.3-0.7,0.5c0,0.1,0.1,0.4,0.1,0.5c0,1-1.1,1.6-1.2,2.5
+                               c0,0.4,0.1,0.7,0.1,1c0,0.5-0.3,1.3-0.7,1.8c-0.6,0.8-2.1,0.8-2.8,1.7c-0.2,0.3-0.4,1-0.5,1.5c-0.2,0.7-0.6,1.8-0.6,2.4
+                               c0,0.6,0.2,1.1,0.1,1.5c-0.1,0.6-0.6,1.1-1.1,1.5c-0.1,1-1,1.2-1.5,1.8c0.3,0.5-0.2,1-0.7,1.2c0,0.1,0.1,0.2,0,0.3
+                               c-0.5,0.5-0.5,1.5-1.1,2c-6.3,0.2-13.3,0.4-19.7,0.4c-0.3-0.3,0-0.9-0.2-1.2c-10-0.4-20.9,0-30.9-0.4c0.6-0.8,1.8-1.1,2.2-2.2
+                               c0.1-0.1,0.3-0.2,0.5-0.3c0.5-1.2,0.9-2.6,1.5-3.8c-0.2-1,1.2-1.1,1.1-2.2c0.9-0.5,1.5-2.3,1.8-3.6c0.1-0.4,0.4-0.6,0.1-1.1
+                               c0.6-0.5,0.8-1.8,0.6-2.9c0.5-0.5,0.1-1.1,0.1-1.7c0-0.8,0.6-1.7,0.3-2.8c0.2-0.1,0.6-0.1,0.6-0.4c-0.1-0.1-0.3-0.1-0.5-0.1
+                               c-0.3-0.8-0.1-1.6-0.2-2.5c-0.1-1.5-0.7-3.4-1.2-4.8c-0.3-0.8-1-1.5,0-2.1c-0.1-0.3-0.6,0-0.9-0.1c-0.3-0.9-1.4-2.3-0.4-3
+                               c-0.2-0.3-0.4,0.1-0.8,0c-0.4-0.6-0.5-1.2-0.7-2.1c-0.2-1.2-1.4-2.2-1.1-3.5c0.2-0.9,1-1.7,1.6-2.5c-0.3-0.4-0.1-0.7,0.2-1
+                               c0-0.2-0.3-0.2-0.3-0.4c0.1-1.6-0.4-3-0.9-4.2c0.3-0.1,0.6-0.2,0.5-0.5c-0.2-0.1-0.4,0.2-0.6,0c-0.2-0.6,0.3-0.6,0.7-0.8
+                               c0.8-0.6,1.3-2,1.7-3c0.1-0.4,0.6-0.6,0.7-1.1c0.1-0.5,0.3-0.8,0.5-1.2c0.2-0.1,0.7,0.1,0.8-0.1c0-0.3-0.4-0.1-0.5-0.3
+                               c0.1-0.7,0-1.2,0-1.8c0-0.7,0.5-1.4,0.5-2.1c0.1-0.8-0.7-1.5-0.4-2.3c0.5,0,0.6,0.4,0.9,0.7c0.3,0.2,0.8,0.1,0.9-0.1
+                               c0.2-0.7-1.4-1-1.9-1.1c0.4,0,0.7-0.6,1.5-0.7c0.6-0.1,1.1-0.2,1.2-0.8c0-0.2-0.1-0.4-0.1-0.6c0-0.2,0.2-0.3,0.2-0.5
+                               c0-0.4-0.2-1-0.2-1.4c0.1-0.2,0.2-0.4,0.4-0.5c1.2,0.9,1.1-1.2,2-1.1c0.3,0,0.4,0.4,0.8,0.5c1,0,0.9-1.1,1.8-1.3
+                               c0-0.3,0.1-0.7,0.1-0.9c0.9-0.7,1-2.2,1.7-3.1c0.2,0,0.5,0,0.5,0.2c0,0.4-0.4,0.7-0.5,1.1c0.4,0.9-0.6,2-0.7,3.3c0,1,0,2.2,0,3
+                               c0,0.5,0.4,1.3,1.1,1c0.2,0.6,0.9,0.5,1.2,0c0-0.6,0.4-0.8,0.7-1.1c0.1-0.8,0.5-1.1,0.8-1.7c0.4-1,0.3-2.5,0.7-3.5
+                               c0.8,1.2,0.3,3,0.7,4.3c0.5,0,0.3-0.5,0.3-0.9c0-0.4,0.2-1,0.2-1.4c0-0.2-0.3-0.4-0.3-0.7c0-0.2,0.1-0.4,0.1-0.5
+                               c0-0.2-0.3-0.2-0.4-0.3c-0.2-0.3,0-0.7-0.2-0.9c-0.1-0.1-0.3,0-0.4-0.1c-0.3-1.8-0.7-4.7,1.6-4.8c0.2-0.1,0.1-0.4,0.2-0.6
+                               c0.8-0.2,1.2-0.9,2-0.9c0.2,0,0.7,0.2,0.9,0.1c0.7,0,1.3-0.3,1.9-0.4c0-0.3-0.1-0.5-0.2-0.7c-0.7-0.3-2.1-0.4-2.4-1.1
+                               c-0.7-1.5-0.3-3.3,1.3-3.6c0-0.7,0.5-0.8,0.9-1.1c0.2-0.6-0.3-0.7-0.4-0.9c1,1,2.4,0.6,3-0.5c0.1-0.2,0.7,0.1,0.8,0.3
+                               c0.9,0.7,2.1,0.7,2.9,1.5c0.2,0.2,0.7,0.8,1.1,0.8c0.2,0,0.3-0.3,0.5-0.3C105.1,141.4,106,142.1,107.1,142.3z"/>
+               </g>
+               <g>
+                       <path class="st13" d="M113.1,134.7C112.7,134.7,113.2,135.1,113.1,134.7c0.2,0.1,0.3,0.3,0.3,0.4c0,0.2-0.3,0.3-0.1,0.5
+                               c0.2,0.1,0.7,0.1,0.8,0.4c-0.1,0.3-0.1,0.6-0.3,0.7c-0.3-0.1-0.5,0.2-0.7,0.1c-0.2,0-0.4-0.4-0.6-0.5c-0.8-0.2-2.2,0.6-2.5-0.4
+                               c0.2,0,0.2,0.1,0.4,0.1c0.3-0.4,0.8-0.9,1.4-0.9c0.5-0.1,0-0.9-0.2-1.1C112.3,134,113.1,134,113.1,134.7z"/>
+                       <path class="st13" d="M64.4,111.7c-0.4,0.1-0.7,0.4-1.1,0.5c-0.5-0.4-2.3-0.1-1.6,0.6c-1.1,1.1-2.6,1.7-3.6,2.9
+                               c-0.1,0.1-0.1-0.2-0.3-0.1c0.1,0.7-0.4,1.2-0.8,1.8c-0.2,0.3-0.5,1.3-0.8,1.2c-0.3,0-0.6-1.4,0-1.4c-0.1-0.1-0.3-0.1-0.5-0.1
+                               c-0.2-0.5-0.9-0.6-1.5-0.6c0,0.3,0.4,0.2,0.6,0.3c0.4,0.3,0.1,0.9,0.3,1.4c0.4,0.2,0.6,0.5,0.8,0.9c0,0.5-0.3,1.1-0.4,1.6
+                               c0,0.2,0,0.5,0,0.8c0,0.2-0.2,0.3-0.1,0.5c0,0.2,0.3,0.3,0.3,0.4c0,0.2-0.3,0.4-0.3,0.6c0.6,0.4,1-1,1.4-1.4
+                               c0.7-0.6,1.5-1.2,2.2-1.5c-0.1,0.6-0.9,0.5-0.8,1.3c-0.1,0.2-0.5,0.3-0.4,0.6c0.1,0.1,0.3-0.1,0.4-0.1c0.2-0.4,0.2-0.8,0.6-1
+                               c0.4-0.3,1,0,1.4-0.4c0.8,0.2,1.5,0.3,2.3,0.3c0,0.1,0.1,0.1,0.1,0.3c0.4-0.1,0.4,0.1,0.6,0.3c0.4-0.4,0.5-0.1,0.7,0.3
+                               c0.2,0.3,0.6,0.4,0.4,0.8c0.2,0.1,0.3,0.3,0.5,0.4c0.2,0,0.1-0.3,0.1-0.4c0.8,0.2,0.9,1.2,1.2,1.9c0.1,0.1,0.3,0.1,0.4,0.2
+                               c0,0.7,0.7,0.7,0.7,1.4c0.3,0.3,0.6,0.6,0.8,1.1c0.1,0.2,0,0.3,0.1,0.5c0.4,0.6,1.6,0.3,2.2,0.8c0.2-0.1,0.3-0.4,0.6-0.3
+                               c0.1,0.1,0,0.3,0.1,0.4c0.3-0.7,1.7-1.4,2.1-0.4c-0.1,0.1-0.3,0.1-0.3,0.3c0.2,0.3,0.5,0.2,0.8,0.3c0.3,0.1,0.4,0.5,0.8,0.5
+                               c0.3,0,0.4-0.5,0.6-0.6c0.4-0.2,0.6,0.3,0.9,0.6c0.1,0,0.2,0,0.4,0c0.2,0.1,0.1,0.3,0.3,0.3c0.4,0,0.7-0.7,0.9-1.1
+                               c0.1-0.2,0.6-0.5,0.9-0.7c0.2-0.1,0.3-0.3,0.4-0.4c0.3-0.1,0.8-0.1,1.1-0.2c0.2-0.1,0.3-0.3,0.5-0.5c0.6-0.6,1.6-0.8,2.1-1.4
+                               c1,0.8,2.6-0.7,3.7-0.1c0.8,0.1,1.7-0.2,2.2,0.2c0.4-0.2,1,0,1.4-0.1c0.1,0.3,0.2,0.5,0.1,0.8c0.2-0.1,0.7-0.1,1.1-0.1
+                               c0.4-0.2,0-1,0.5-1.2c0.2,0,0.3,0,0.2-0.1c0.4-0.8,1.6-0.7,2.4-0.9c-0.3,0.3-0.2,0.9-0.4,1.2c0.3,0.2,0.5-0.1,0.6-0.3
+                               c0.3,0,0.6,0.1,0.6,0.4c-0.3,0.1-0.7,0.4-0.4,0.9c0.2,0.1,0.5-0.1,0.7,0c0.2,0.4,0.3,1.1-0.1,1.3c-0.1,1.3,1,1.6,2.2,1.5
+                               c0.7,0.9,1.8-0.1,2.5-0.4c0.1,0.1,0,0.2,0,0.4c0.1,0.2,0.8,0.8,0.9,0.9c0.4,0.1,0.6-0.3,1-0.4c0.6,0,0.5,0.1,0.7-0.4
+                               c0.2-0.5,0.9-0.9,1.6-0.7c-0.2,0.6,0.5,0.7,0.6,1.3c0,0.1-0.1,0.2-0.1,0.4c0,0.2,0.2,0.3,0.4,0.4c0.2,0.4,0.2,1,0.1,1.4
+                               c0.1,0.2,0.4,0.2,0.4,0.6c-0.3,0.4-0.8,0.4-0.9,0.9c0.2,0.2,0.4,0.5,0.5,0.8c0.2-0.3,0.7-0.4,1.2-0.5c0.2,0.4,0.7,0.5,1.1,0.8
+                               c-0.2,0.3-0.5,0.6,0,0.8c0,0.2,0,0.4,0.1,0.6c0.3,0.1,0.6,0.2,0.7,0.5c0.3-0.2,0.7,0,0.9,0.1c0,0.2,0.1,0.3,0,0.4
+                               c-0.2,0.2-0.7,0.2-0.9,0c0-0.2,0-0.4-0.1-0.5c-0.2,0-0.3,0-0.4,0.1c0,0.2,0.2,0.2,0.1,0.4c-1.2,0.2-2.8-0.4-4.2-0.3
+                               c-0.3,0-0.5,0.2-0.7,0.1c-0.2,0-0.3-0.2-0.6-0.2c-0.1,0-0.2,0.2-0.3,0.2c-0.4,0.2-0.5-0.2-0.7-0.5c-0.6,0.1-0.9-0.4-1.4-0.4
+                               c-0.5,0.1-0.3,0.8-0.5,1.2c-0.1,0.3-0.7,0.6-0.2,1c0,0.1-0.1,0.1-0.1,0.3c0.1,0.1,0.2,0.4,0,0.6c-0.8-0.1-1.5-0.4-1.8-1
+                               c-0.3-0.1-0.6-0.3-0.6-0.6c0.1-0.1,0.4,0,0.5-0.1c0,0.2,0.2,0.6,0.5,0.4c0.1-0.2-0.2-0.2-0.3-0.4c0.1-0.3-0.1-0.5-0.2-0.6
+                               c-0.1-0.1-0.2,0-0.3,0.1c-0.2-0.2-0.6-0.3-0.9-0.2c-0.1,0-0.1-0.2-0.2-0.2c-1.2-0.1-3-1.2-4.3-1.4c-0.5-0.1-1-0.2-1.5-0.1
+                               c-0.6,0.1-0.7,1.1-1.3,1.3c0,1.6-2.6,0.5-3.5,1.1c-0.1,0.1-0.2,0.4-0.4,0.5c-0.6,0.1-1.1-0.5-1.6-0.6c-1.1-0.1-2.6,0.2-2.9,1.1
+                               c-0.1,0.3-0.1,0.5-0.2,1c-0.1,0.3-1,1.2-1.4,1.4c-0.4,0.2-0.9,0.1-0.9,0.7c-0.7,0.2-0.7,1.1-1.1,1.6c-0.5-0.1-0.9-0.8-0.3-1
+                               c0-0.2-0.1-0.2-0.1-0.4c0.7,0,0.4-1.4,1.2-0.9c0.1-0.5,0.4-1,0.6-1.5c-0.1-0.7-0.8-0.6-1.2-0.2c0,0.2-0.1,0.3-0.2,0.5
+                               c-0.2,0.1-0.6,0-0.9,0c-0.2-0.1-0.2-0.3-0.3-0.4c-0.2,0-0.4,0.1-0.6,0.1c0.1,0.8-0.8,1.9-1.4,2.3c-0.2,0.1-0.6,0.1-0.8,0.1
+                               c-0.3-0.4,0.1-1.3-0.3-1.8c0.1-0.5,1-1,0.4-1.5c-0.4,0.1-0.7,0.5-0.6,1c-0.2,0.4-0.8,0.6-0.8,1.1c0,0.5,0.4,1.1-0.2,1.4
+                               c-0.1,0.1-0.3,0-0.4,0.1c-0.8,0.4-0.8,1.6-1.6,2c-0.8,3.2-2.9,5.2-4.4,7.8c-0.6-0.4-1.4-0.6-1.4-1.3c0-0.3,0.3-0.7,0.4-1
+                               c0.2-0.5,0.7-1.3,0.7-1.7c0-0.2-0.3-0.5-0.5-0.5c-0.3,0-0.5,0.5-0.9,0.6c-0.4,0.1-1.3,0-1.3-0.4c0-0.2,0.2-0.4,0.3-0.6
+                               c0-0.2-0.1-0.4-0.1-0.5c0.1-0.4,0.7-0.5,0.8-0.9c0.1-0.5-0.2-0.7-0.3-1.2c1.1-0.2,0-1.2,0-1.6c0.1-0.3,0.7-0.4,0.1-0.9
+                               c-0.1-0.1-0.3-0.1-0.4-0.2c-0.2-0.2-0.3-0.5-0.5-0.6c-0.5-0.2-1.1-0.1-1.3-0.7c-0.7,0.2-1.6,0-1.6-0.6c0-0.3,0.6-0.5,0.6-0.7
+                               c0,0-0.2-0.6-0.3-0.8c-0.1-0.3-0.9-0.5-1.4-0.6c-0.2,0-0.4-0.3-0.6-0.3c-0.2,0-0.4,0.1-0.5,0c-0.3-0.1-0.4-0.4-0.7-0.5
+                               c-0.1,0-0.3,0.1-0.4,0.1c-0.9-0.1-1.3-0.8-2.1-0.5c-0.1,0-0.3,0.3-0.4,0.3c-0.4,0.1-0.7-0.6-1.2-0.6c-0.4,0-0.6,0-1-0.1
+                               c-1.2-0.5-2.2-1.6-3.4-2.1c-0.9-0.4-2.1-0.4-2.8-1c-0.2,0.1-0.4,0.1-0.6,0c-0.1,0-0.1-0.2-0.1-0.3c-0.8,0.3-2.3-0.4-3.1-0.6
+                               c-1-0.3-2-0.5-2.8-0.8c-0.1-0.1-0.1-0.2-0.1-0.3c-0.9,0.3-1.7-0.3-2.5-0.5c-0.5-1.3-0.7-2.9-2.2-3.2c-0.1-0.1-0.1-0.3-0.2-0.4
+                               c-1.5,0.3-0.9-0.6,0.2-0.7c0.6-0.1,1.4-0.5,1.7-0.8c2.1-0.1,2.9-1.5,4-2.6c1.2-0.8,2.5,0,3.8-0.5c0.6,0.1,1.7,0,2.2-0.3
+                               c0.7-0.5,1.6-0.9,2.1-1.4c0.1-1.1,1.6-0.6,2.5-0.9c0.4-0.1,0.6-0.7,0.7-1.1c0.5-0.7,1.3-1.3,2.1-1.7c0.1-0.5,0.6-0.9,1.1-0.9
+                               c0.2,0.4-0.2,1.2,0.4,1.4c0.2-0.4,0-1.2,0.1-1.6c1.2-0.4,1.4-2,2.6-2.5c1-0.4,1.8-1,2.9-1.2c0.7,0.2,1.4-0.2,2.2-0.1
+                               c0.4,0.1,0.8,0.3,1.2,0.1c0.4,0.1,0.9,0.1,1.1,0.3C64.1,111.4,64.3,111.4,64.4,111.7z"/>
+               </g>
+               <g>
+                       <path class="st14" d="M64.1,111.1c-0.3-0.3-0.7-0.3-1.1-0.3c-0.4,0.3-0.8,0-1.2-0.1c-0.8-0.1-1.5,0.3-2.2,0.1
+                               c-1,0.2-1.9,0.8-2.9,1.2c-1.2,0.5-1.4,2.1-2.6,2.5c-0.2,0.4,0,1.2-0.1,1.6c-0.6-0.1-0.1-1-0.4-1.4c-0.6,0-1,0.3-1.1,0.9
+                               c-0.9,0.4-1.6,0.9-2.1,1.7c-0.1,0.5-0.2,1-0.7,1.1c-0.9,0.2-2.4-0.2-2.5,0.9c-0.3,0.3-0.8,0.6-1.3,0.9c0.7,1.1,5.4,0.9,6.4,1.7
+                               c0.1,0,1.4,0.5,2.2,0.6c0.1-0.1,0.7,0.2,0.8,0.1c0,0,0,0,0,0c0-0.2,0.3-0.3,0.3-0.6c0-0.1-0.3-0.3-0.3-0.4c0-0.1,0.1-0.3,0.1-0.5
+                               c0-0.3,0-0.6,0-0.8c0.1-0.6,0.4-1.1,0.4-1.6c-0.2-0.3-0.5-0.7-0.8-0.9c-0.1-0.5,0.2-1.1-0.3-1.4c-0.2-0.1-0.6,0-0.6-0.3
+                               c0.6,0,1.4,0.1,1.5,0.6c0.1,0.1,0.4,0,0.5,0.1c-0.6,0-0.2,1.4,0,1.4c0.3,0,0.6-0.9,0.8-1.2c0.3-0.6,0.9-1,0.8-1.8
+                               c0.2-0.1,0.2,0.2,0.3,0.1c0.9-1.2,2.5-1.8,3.6-2.9c-0.7-0.7,1.1-0.9,1.6-0.6c0.4-0.1,0.7-0.4,1.1-0.5
+                               C64.3,111.4,64.1,111.4,64.1,111.1z"/>
+               </g>
+       </g>
+       <g>
+               <path class="st2" d="M483.7,41.5h1.4c0.3,0,0.5,0,0.6,0c0.1,0,0.3,0.1,0.4,0.1c0.1,0.1,0.2,0.2,0.3,0.3c0.1,0.1,0.1,0.3,0.1,0.4
+                       c0,0.2,0,0.3-0.1,0.4c-0.1,0.1-0.2,0.2-0.4,0.3c0.2,0.1,0.4,0.2,0.5,0.3c0.1,0.1,0.2,0.3,0.2,0.5c0,0.2,0,0.3-0.1,0.5
+                       c-0.1,0.1-0.2,0.3-0.3,0.4c-0.1,0.1-0.3,0.1-0.5,0.2c-0.1,0-0.4,0-0.8,0h-1.2V41.5z M484.4,42.1v0.8h0.5c0.3,0,0.4,0,0.5,0
+                       c0.1,0,0.2-0.1,0.3-0.1c0.1-0.1,0.1-0.2,0.1-0.3c0-0.1,0-0.2-0.1-0.3c-0.1-0.1-0.1-0.1-0.3-0.1c-0.1,0-0.3,0-0.6,0H484.4z
+                        M484.4,43.5v0.9h0.6c0.3,0,0.4,0,0.5,0c0.1,0,0.2-0.1,0.3-0.1c0.1-0.1,0.1-0.2,0.1-0.3c0-0.1,0-0.2-0.1-0.3
+                       c-0.1-0.1-0.1-0.1-0.2-0.2c-0.1,0-0.3,0-0.6,0H484.4z"/>
+               <path class="st2" d="M487.2,45v-3.5h1.5c0.4,0,0.6,0,0.8,0.1c0.2,0.1,0.3,0.2,0.4,0.3c0.1,0.2,0.2,0.3,0.2,0.5
+                       c0,0.3-0.1,0.5-0.2,0.6c-0.2,0.2-0.4,0.3-0.7,0.3c0.2,0.1,0.3,0.2,0.4,0.3c0.1,0.1,0.2,0.3,0.4,0.6l0.4,0.7h-0.8l-0.5-0.8
+                       c-0.2-0.3-0.3-0.4-0.4-0.5c-0.1-0.1-0.1-0.1-0.2-0.1c-0.1,0-0.2,0-0.4,0h-0.1V45H487.2z M487.9,43h0.5c0.3,0,0.5,0,0.6,0
+                       c0.1,0,0.1-0.1,0.2-0.1c0-0.1,0.1-0.2,0.1-0.3c0-0.1,0-0.2-0.1-0.3c-0.1-0.1-0.2-0.1-0.3-0.1c-0.1,0-0.2,0-0.5,0h-0.5V43z"/>
+               <path class="st2" d="M490.5,43.3c0-0.4,0.1-0.6,0.2-0.9c0.1-0.2,0.2-0.3,0.3-0.5c0.1-0.1,0.3-0.2,0.4-0.3c0.2-0.1,0.5-0.1,0.7-0.1
+                       c0.5,0,0.9,0.2,1.2,0.5c0.3,0.3,0.5,0.8,0.5,1.3c0,0.6-0.2,1-0.5,1.3c-0.3,0.3-0.7,0.5-1.2,0.5c-0.5,0-0.9-0.2-1.2-0.5
+                       C490.7,44.3,490.5,43.8,490.5,43.3z M491.3,43.3c0,0.4,0.1,0.7,0.3,0.9c0.2,0.2,0.4,0.3,0.7,0.3c0.3,0,0.5-0.1,0.7-0.3
+                       s0.3-0.5,0.3-0.9c0-0.4-0.1-0.7-0.3-0.9c-0.2-0.2-0.4-0.3-0.7-0.3c-0.3,0-0.5,0.1-0.7,0.3C491.4,42.6,491.3,42.9,491.3,43.3z"/>
+               <path class="st2" d="M496.7,43.7l0.7,0.2c-0.1,0.4-0.3,0.7-0.5,0.8c-0.2,0.2-0.5,0.3-0.9,0.3c-0.5,0-0.8-0.2-1.1-0.5
+                       c-0.3-0.3-0.4-0.7-0.4-1.3c0-0.6,0.1-1,0.4-1.3c0.3-0.3,0.7-0.5,1.2-0.5c0.4,0,0.8,0.1,1,0.4c0.2,0.1,0.3,0.4,0.4,0.6l-0.7,0.2
+                       c0-0.2-0.1-0.3-0.3-0.4c-0.1-0.1-0.3-0.2-0.5-0.2c-0.3,0-0.5,0.1-0.6,0.3c-0.2,0.2-0.2,0.5-0.2,0.9c0,0.4,0.1,0.7,0.2,0.9
+                       c0.2,0.2,0.4,0.3,0.6,0.3c0.2,0,0.3-0.1,0.5-0.2C496.5,44.2,496.6,44,496.7,43.7z"/>
+               <path class="st2" d="M497.9,45v-3.5h0.7v1.5l1.4-1.5h0.9l-1.3,1.3l1.4,2.1h-0.9l-1-1.6l-0.6,0.6v1H497.9z"/>
+               <path class="st2" d="M501.9,45l-0.8-3.5h0.7l0.5,2.4l0.6-2.4h0.8l0.6,2.4l0.5-2.4h0.7l-0.8,3.5h-0.7l-0.7-2.6l-0.7,2.6H501.9z"/>
+               <path class="st2" d="M508.9,45h-0.8l-0.3-0.8h-1.4l-0.3,0.8h-0.7l1.3-3.5h0.7L508.9,45z M507.6,43.6l-0.5-1.3l-0.5,1.3H507.6z"/>
+               <path class="st2" d="M509.8,45v-1.5l-1.3-2h0.8l0.8,1.4l0.8-1.4h0.8l-1.3,2V45H509.8z"/>
+               <path class="st2" d="M484.6,50.8v-3.5h1l0.6,2.4l0.6-2.4h1v3.5h-0.6v-2.7l-0.7,2.7h-0.7l-0.7-2.7v2.7H484.6z"/>
+               <path class="st2" d="M489.4,50.8v-2.9h-1v-0.6h2.7v0.6h-1v2.9H489.4z"/>
+               <path class="st2" d="M491.6,50.8v-3.5h0.7l1.4,2.3v-2.3h0.6v3.5h-0.7l-1.4-2.3v2.3H491.6z"/>
+               <path class="st2" d="M495.1,50.8v-0.7h0.7v0.7H495.1z"/>
+               <path class="st2" d="M497.8,47.3h1.3c0.3,0,0.5,0,0.7,0.1c0.2,0.1,0.4,0.2,0.5,0.3c0.1,0.2,0.3,0.3,0.3,0.6
+                       c0.1,0.2,0.1,0.5,0.1,0.8c0,0.3,0,0.5-0.1,0.7c-0.1,0.3-0.2,0.5-0.4,0.6c-0.1,0.1-0.3,0.2-0.5,0.3c-0.2,0-0.4,0.1-0.6,0.1h-1.3
+                       V47.3z M498.5,47.9v2.3h0.5c0.2,0,0.3,0,0.4,0c0.1,0,0.2-0.1,0.3-0.1c0.1-0.1,0.1-0.2,0.2-0.3c0-0.2,0.1-0.4,0.1-0.6
+                       c0-0.3,0-0.5-0.1-0.6c0-0.1-0.1-0.3-0.2-0.3c-0.1-0.1-0.2-0.1-0.3-0.2c-0.1,0-0.3,0-0.6,0H498.5z"/>
+               <path class="st2" d="M501.3,50.8v-3.5h1.5c0.4,0,0.6,0,0.8,0.1s0.3,0.2,0.4,0.3c0.1,0.2,0.2,0.3,0.2,0.5c0,0.3-0.1,0.5-0.2,0.6
+                       c-0.2,0.2-0.4,0.3-0.7,0.3c0.2,0.1,0.3,0.2,0.4,0.3c0.1,0.1,0.2,0.3,0.4,0.6l0.4,0.7h-0.8l-0.5-0.8c-0.2-0.3-0.3-0.4-0.4-0.5
+                       c-0.1-0.1-0.1-0.1-0.2-0.1c-0.1,0-0.2,0-0.4,0H502v1.4H501.3z M502,48.8h0.5c0.3,0,0.5,0,0.6,0c0.1,0,0.1-0.1,0.2-0.1
+                       c0-0.1,0.1-0.2,0.1-0.3c0-0.1,0-0.2-0.1-0.3c-0.1-0.1-0.2-0.1-0.3-0.1c-0.1,0-0.2,0-0.5,0H502V48.8z"/>
+               <path class="st2" d="M504.7,50.8v-3.5h0.7v3.5H504.7z"/>
+               <path class="st2" d="M507,50.8l-1.2-3.5h0.8l0.9,2.6l0.8-2.6h0.7l-1.2,3.5H507z"/>
+               <path class="st2" d="M509.3,50.8v-3.5h2.6v0.6H510v0.8h1.7v0.6H510v0.9h1.9v0.6H509.3z"/>
+       </g>
+</g>
+<g id="Main_Towns">
+       <g>
+               <path d="M504.3,88.8h2.6c0.5,0,0.9,0,1.1,0.1c0.2,0,0.5,0.1,0.7,0.3c0.2,0.1,0.4,0.3,0.5,0.5c0.1,0.2,0.2,0.5,0.2,0.7
+                       c0,0.3-0.1,0.6-0.2,0.8c-0.2,0.3-0.4,0.4-0.7,0.6c0.4,0.1,0.7,0.3,0.9,0.6s0.3,0.6,0.3,1c0,0.3-0.1,0.6-0.2,0.8
+                       c-0.1,0.3-0.3,0.5-0.6,0.7c-0.2,0.2-0.5,0.3-0.9,0.3c-0.2,0-0.7,0-1.6,0h-2.2V88.8z M505.6,89.9v1.5h0.8c0.5,0,0.8,0,0.9,0
+                       c0.2,0,0.4-0.1,0.5-0.2c0.1-0.1,0.2-0.3,0.2-0.5c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.5-0.2c-0.1,0-0.5,0-1.1,0H505.6z
+                        M505.6,92.4v1.7h1.2c0.5,0,0.8,0,0.9,0c0.2,0,0.3-0.1,0.5-0.3c0.1-0.1,0.2-0.3,0.2-0.5c0-0.2,0-0.4-0.1-0.5
+                       c-0.1-0.1-0.2-0.2-0.4-0.3c-0.2-0.1-0.6-0.1-1.1-0.1H505.6z"/>
+               <path d="M510.7,95.2v-6.4h4.7v1.1H512v1.4h3.2v1.1H512v1.7h3.6v1.1H510.7z"/>
+               <path d="M518.1,95.2v-5.3h-1.9v-1.1h5.1v1.1h-1.9v5.3H518.1z"/>
+               <path d="M522.2,95.2v-6.4h4.7v1.1h-3.5v1.4h3.2v1.1h-3.2v1.7h3.6v1.1H522.2z"/>
+               <path d="M533.6,92.9v-1.1h2.8v2.5c-0.3,0.3-0.7,0.5-1.2,0.7c-0.5,0.2-1,0.3-1.6,0.3c-0.7,0-1.3-0.1-1.8-0.4
+                       c-0.5-0.3-0.9-0.7-1.1-1.2c-0.3-0.5-0.4-1.1-0.4-1.7c0-0.7,0.1-1.3,0.4-1.8c0.3-0.5,0.7-0.9,1.2-1.2c0.4-0.2,0.9-0.3,1.5-0.3
+                       c0.8,0,1.4,0.2,1.9,0.5c0.4,0.3,0.7,0.8,0.9,1.4l-1.3,0.2c-0.1-0.3-0.3-0.6-0.5-0.7c-0.2-0.2-0.6-0.3-0.9-0.3
+                       c-0.6,0-1,0.2-1.3,0.5c-0.3,0.4-0.5,0.9-0.5,1.6c0,0.8,0.2,1.3,0.5,1.7c0.3,0.4,0.8,0.6,1.3,0.6c0.3,0,0.5-0.1,0.8-0.2
+                       c0.3-0.1,0.5-0.2,0.7-0.4v-0.8H533.6z"/>
+               <path d="M537.6,95.2v-6.4h2.7c0.7,0,1.2,0.1,1.5,0.2c0.3,0.1,0.6,0.3,0.7,0.6c0.2,0.3,0.3,0.6,0.3,1c0,0.5-0.1,0.9-0.4,1.2
+                       c-0.3,0.3-0.7,0.5-1.3,0.6c0.3,0.2,0.5,0.3,0.7,0.5c0.2,0.2,0.4,0.5,0.7,1l0.8,1.2h-1.5l-0.9-1.4c-0.3-0.5-0.6-0.8-0.7-0.9
+                       c-0.1-0.1-0.3-0.2-0.4-0.3c-0.1,0-0.4-0.1-0.7-0.1h-0.3v2.7H537.6z M538.9,91.5h1c0.6,0,1,0,1.2-0.1c0.2-0.1,0.3-0.1,0.4-0.3
+                       c0.1-0.1,0.1-0.3,0.1-0.5c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.5-0.3c-0.1,0-0.4,0-0.9,0h-1V91.5z"/>
+               <path d="M544,95.2v-6.4h1.3v6.4H544z"/>
+               <path d="M546.2,93.1l1.3-0.1c0.1,0.4,0.2,0.7,0.5,0.9c0.2,0.2,0.5,0.3,0.9,0.3c0.4,0,0.7-0.1,0.9-0.3c0.2-0.2,0.3-0.4,0.3-0.6
+                       c0-0.2,0-0.3-0.1-0.4c-0.1-0.1-0.2-0.2-0.5-0.3c-0.2-0.1-0.5-0.1-1-0.3c-0.7-0.2-1.2-0.4-1.5-0.6c-0.4-0.4-0.6-0.8-0.6-1.3
+                       c0-0.3,0.1-0.6,0.3-0.9c0.2-0.3,0.5-0.5,0.8-0.6c0.3-0.1,0.8-0.2,1.3-0.2c0.8,0,1.4,0.2,1.8,0.5c0.4,0.4,0.6,0.8,0.6,1.4l-1.3,0.1
+                       c-0.1-0.3-0.2-0.6-0.4-0.7c-0.2-0.1-0.5-0.2-0.8-0.2c-0.4,0-0.7,0.1-0.9,0.2c-0.1,0.1-0.2,0.2-0.2,0.4c0,0.2,0.1,0.3,0.2,0.4
+                       c0.2,0.1,0.6,0.3,1.2,0.4c0.6,0.1,1.1,0.3,1.4,0.5c0.3,0.2,0.5,0.4,0.7,0.7c0.2,0.3,0.3,0.6,0.3,1c0,0.4-0.1,0.7-0.3,1
+                       c-0.2,0.3-0.5,0.6-0.9,0.7c-0.4,0.2-0.8,0.2-1.4,0.2c-0.8,0-1.4-0.2-1.9-0.6C546.5,94.4,546.3,93.8,546.2,93.1z"/>
+               <path d="M552.5,95.2v-6.4h4.7v1.1h-3.5v1.4h3.2v1.1h-3.2v1.7h3.6v1.1H552.5z"/>
+       </g>
+       <g>
+               <path d="M413.1,86v-6.3h1.3v5.3h3.2V86H413.1z"/>
+               <path d="M424.3,86h-1.4l-0.6-1.5h-2.6l-0.5,1.5h-1.4l2.5-6.4h1.4L424.3,86z M421.9,83.5l-0.9-2.4l-0.9,2.4H421.9z"/>
+               <path d="M429.1,83.7l1.3,0.4c-0.2,0.7-0.5,1.2-1,1.6c-0.4,0.3-1,0.5-1.7,0.5c-0.8,0-1.5-0.3-2.1-0.9c-0.5-0.6-0.8-1.4-0.8-2.4
+                       c0-1.1,0.3-1.9,0.8-2.5c0.6-0.6,1.3-0.9,2.2-0.9c0.8,0,1.4,0.2,1.9,0.7c0.3,0.3,0.5,0.7,0.7,1.2l-1.3,0.3
+                       c-0.1-0.3-0.2-0.6-0.5-0.8c-0.2-0.2-0.5-0.3-0.9-0.3c-0.5,0-0.9,0.2-1.2,0.5c-0.3,0.3-0.4,0.9-0.4,1.7c0,0.8,0.1,1.4,0.4,1.7
+                       s0.7,0.5,1.1,0.5c0.3,0,0.6-0.1,0.9-0.3C428.8,84.5,429,84.1,429.1,83.7z"/>
+               <path d="M434,86v-6.3h1.3v5.3h3.2V86H434z"/>
+               <path d="M445.2,86h-1.4l-0.6-1.5h-2.6l-0.5,1.5h-1.4l2.5-6.4h1.4L445.2,86z M442.8,83.5l-0.9-2.4l-0.9,2.4H442.8z"/>
+               <path d="M448,79.6h2.6c0.5,0,0.9,0,1.1,0.1c0.2,0,0.5,0.1,0.7,0.3c0.2,0.1,0.4,0.3,0.5,0.5c0.1,0.2,0.2,0.5,0.2,0.7
+                       c0,0.3-0.1,0.6-0.2,0.8c-0.2,0.3-0.4,0.4-0.7,0.6c0.4,0.1,0.7,0.3,0.9,0.6s0.3,0.6,0.3,1c0,0.3-0.1,0.6-0.2,0.8
+                       c-0.1,0.3-0.3,0.5-0.6,0.7c-0.2,0.2-0.5,0.3-0.9,0.3c-0.2,0-0.7,0-1.6,0H448V79.6z M449.3,80.7v1.5h0.8c0.5,0,0.8,0,0.9,0
+                       c0.2,0,0.4-0.1,0.5-0.2c0.1-0.1,0.2-0.3,0.2-0.5c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.5-0.2c-0.1,0-0.5,0-1.1,0H449.3z
+                        M449.3,83.2v1.7h1.2c0.5,0,0.8,0,0.9,0c0.2,0,0.3-0.1,0.5-0.3c0.1-0.1,0.2-0.3,0.2-0.5c0-0.2,0-0.4-0.1-0.5
+                       c-0.1-0.1-0.2-0.2-0.4-0.3c-0.2-0.1-0.6-0.1-1.1-0.1H449.3z"/>
+               <path d="M454.5,86v-6.4h4.7v1.1h-3.5v1.4h3.2v1.1h-3.2v1.7h3.6V86H454.5z"/>
+               <path d="M460.5,86v-6.3h1.3v5.3h3.2V86H460.5z"/>
+               <path d="M465.9,86v-6.3h1.3v5.3h3.2V86H465.9z"/>
+               <path d="M471.3,86v-6.4h4.7v1.1h-3.5v1.4h3.2v1.1h-3.2v1.7h3.6V86H471.3z"/>
+       </g>
+       <g id="chassell">
+               <path d="M254.6,265l1.3,0.4c-0.2,0.7-0.5,1.2-1,1.6c-0.4,0.3-1,0.5-1.7,0.5c-0.8,0-1.5-0.3-2.1-0.9c-0.5-0.6-0.8-1.4-0.8-2.4
+                       c0-1.1,0.3-1.9,0.8-2.5c0.6-0.6,1.3-0.9,2.2-0.9c0.8,0,1.4,0.2,1.9,0.7c0.3,0.3,0.5,0.7,0.7,1.2l-1.3,0.3
+                       c-0.1-0.3-0.2-0.6-0.5-0.8c-0.2-0.2-0.5-0.3-0.9-0.3c-0.5,0-0.9,0.2-1.2,0.5c-0.3,0.3-0.4,0.9-0.4,1.7c0,0.8,0.1,1.4,0.4,1.7
+                       c0.3,0.3,0.7,0.5,1.1,0.5c0.3,0,0.6-0.1,0.9-0.3C254.3,265.8,254.5,265.5,254.6,265z"/>
+               <path d="M257,267.4V261h1.3v2.5h2.5V261h1.3v6.4h-1.3v-2.8h-2.5v2.8H257z"/>
+               <path d="M269.2,267.4h-1.4l-0.6-1.5h-2.6l-0.5,1.5h-1.4l2.5-6.4h1.4L269.2,267.4z M266.8,264.8l-0.9-2.4l-0.9,2.4H266.8z"/>
+               <path d="M269.6,265.3l1.3-0.1c0.1,0.4,0.2,0.7,0.5,0.9c0.2,0.2,0.5,0.3,0.9,0.3c0.4,0,0.7-0.1,0.9-0.3c0.2-0.2,0.3-0.4,0.3-0.6
+                       c0-0.2,0-0.3-0.1-0.4c-0.1-0.1-0.2-0.2-0.5-0.3c-0.2-0.1-0.5-0.1-1-0.3c-0.7-0.2-1.2-0.4-1.5-0.6c-0.4-0.4-0.6-0.8-0.6-1.3
+                       c0-0.3,0.1-0.6,0.3-0.9c0.2-0.3,0.5-0.5,0.8-0.6c0.3-0.1,0.8-0.2,1.3-0.2c0.8,0,1.4,0.2,1.8,0.5c0.4,0.4,0.6,0.8,0.6,1.4l-1.3,0.1
+                       c-0.1-0.3-0.2-0.6-0.4-0.7c-0.2-0.1-0.5-0.2-0.8-0.2c-0.4,0-0.7,0.1-0.9,0.2c-0.1,0.1-0.2,0.2-0.2,0.4c0,0.2,0.1,0.3,0.2,0.4
+                       c0.2,0.1,0.6,0.3,1.2,0.4c0.6,0.1,1.1,0.3,1.4,0.5c0.3,0.2,0.5,0.4,0.7,0.7c0.2,0.3,0.3,0.6,0.3,1c0,0.4-0.1,0.7-0.3,1
+                       c-0.2,0.3-0.5,0.6-0.9,0.7c-0.4,0.2-0.8,0.2-1.4,0.2c-0.8,0-1.4-0.2-1.9-0.6C269.9,266.5,269.7,266,269.6,265.3z"/>
+               <path d="M275.5,265.3l1.3-0.1c0.1,0.4,0.2,0.7,0.5,0.9c0.2,0.2,0.5,0.3,0.9,0.3c0.4,0,0.7-0.1,0.9-0.3c0.2-0.2,0.3-0.4,0.3-0.6
+                       c0-0.2,0-0.3-0.1-0.4c-0.1-0.1-0.2-0.2-0.5-0.3c-0.2-0.1-0.5-0.1-1-0.3c-0.7-0.2-1.2-0.4-1.5-0.6c-0.4-0.4-0.6-0.8-0.6-1.3
+                       c0-0.3,0.1-0.6,0.3-0.9c0.2-0.3,0.5-0.5,0.8-0.6c0.3-0.1,0.8-0.2,1.3-0.2c0.8,0,1.4,0.2,1.8,0.5c0.4,0.4,0.6,0.8,0.6,1.4l-1.3,0.1
+                       c-0.1-0.3-0.2-0.6-0.4-0.7c-0.2-0.1-0.5-0.2-0.8-0.2c-0.4,0-0.7,0.1-0.9,0.2c-0.1,0.1-0.2,0.2-0.2,0.4c0,0.2,0.1,0.3,0.2,0.4
+                       c0.2,0.1,0.6,0.3,1.2,0.4c0.6,0.1,1.1,0.3,1.4,0.5c0.3,0.2,0.5,0.4,0.7,0.7c0.2,0.3,0.3,0.6,0.3,1c0,0.4-0.1,0.7-0.3,1
+                       c-0.2,0.3-0.5,0.6-0.9,0.7c-0.4,0.2-0.8,0.2-1.4,0.2c-0.8,0-1.4-0.2-1.9-0.6C275.9,266.5,275.6,266,275.5,265.3z"/>
+               <path d="M281.8,267.4V261h4.7v1.1h-3.5v1.4h3.2v1.1h-3.2v1.7h3.6v1.1H281.8z"/>
+               <path d="M287.8,267.4V261h1.3v5.3h3.2v1.1H287.8z"/>
+               <path d="M293.3,267.4V261h1.3v5.3h3.2v1.1H293.3z"/>
+       </g>
+       <g>
+               <path d="M194,291.1v-5.3h-1.9v-1.1h5.1v1.1h-1.9v5.3H194z"/>
+               <path d="M197.6,287.9c0-0.7,0.1-1.2,0.3-1.6c0.1-0.3,0.3-0.6,0.6-0.9c0.3-0.3,0.5-0.5,0.8-0.6c0.4-0.2,0.9-0.3,1.4-0.3
+                       c0.9,0,1.7,0.3,2.3,0.9s0.8,1.4,0.8,2.4c0,1-0.3,1.8-0.8,2.4c-0.6,0.6-1.3,0.9-2.3,0.9c-1,0-1.7-0.3-2.3-0.9
+                       C197.8,289.7,197.6,288.9,197.6,287.9z M198.9,287.9c0,0.7,0.2,1.3,0.5,1.6c0.3,0.4,0.8,0.6,1.3,0.6c0.5,0,0.9-0.2,1.3-0.6
+                       c0.3-0.4,0.5-0.9,0.5-1.7c0-0.7-0.2-1.3-0.5-1.6c-0.3-0.4-0.7-0.5-1.3-0.5c-0.5,0-1,0.2-1.3,0.5
+                       C199,286.6,198.9,287.1,198.9,287.9z"/>
+               <path d="M204.7,291.1v-6.4h1.3v6.4H204.7z"/>
+               <path d="M208.9,291.1l-2.3-6.4h1.4l1.6,4.7l1.6-4.7h1.4l-2.3,6.4H208.9z"/>
+               <path d="M213,287.9c0-0.7,0.1-1.2,0.3-1.6c0.1-0.3,0.3-0.6,0.6-0.9c0.3-0.3,0.5-0.5,0.8-0.6c0.4-0.2,0.9-0.3,1.4-0.3
+                       c0.9,0,1.7,0.3,2.3,0.9s0.8,1.4,0.8,2.4c0,1-0.3,1.8-0.8,2.4c-0.6,0.6-1.3,0.9-2.3,0.9c-1,0-1.7-0.3-2.3-0.9
+                       C213.2,289.7,213,288.9,213,287.9z M214.3,287.9c0,0.7,0.2,1.3,0.5,1.6c0.3,0.4,0.8,0.6,1.3,0.6c0.5,0,0.9-0.2,1.3-0.6
+                       c0.3-0.4,0.5-0.9,0.5-1.7c0-0.7-0.2-1.3-0.5-1.6c-0.3-0.4-0.7-0.5-1.3-0.5c-0.5,0-1,0.2-1.3,0.5
+                       C214.4,286.6,214.3,287.1,214.3,287.9z"/>
+               <path d="M220.2,291.1v-6.3h1.3v5.3h3.2v1.1H220.2z"/>
+               <path d="M231.4,291.1H230l-0.6-1.5h-2.6l-0.5,1.5H225l2.5-6.4h1.4L231.4,291.1z M229,288.6l-0.9-2.4l-0.9,2.4H229z"/>
+       </g>
+       <g>
+               <path d="M323.2,69.7v-6.4h4.7v1.1h-3.5v1.4h3.2v1.1h-3.2v1.7h3.6v1.1H323.2z"/>
+               <path d="M334.9,69.7h-1.4l-0.6-1.5h-2.6l-0.5,1.5h-1.4l2.5-6.4h1.4L334.9,69.7z M332.5,67.2l-0.9-2.4l-0.9,2.4H332.5z"/>
+               <path d="M338.6,67.4v-1.1h2.8v2.5c-0.3,0.3-0.7,0.5-1.2,0.7c-0.5,0.2-1,0.3-1.6,0.3c-0.7,0-1.3-0.1-1.8-0.4
+                       c-0.5-0.3-0.9-0.7-1.1-1.2c-0.3-0.5-0.4-1.1-0.4-1.7c0-0.7,0.1-1.3,0.4-1.8s0.7-0.9,1.2-1.2c0.4-0.2,0.9-0.3,1.5-0.3
+                       c0.8,0,1.4,0.2,1.9,0.5c0.4,0.3,0.7,0.8,0.9,1.4l-1.3,0.2c-0.1-0.3-0.3-0.6-0.5-0.7c-0.2-0.2-0.6-0.3-0.9-0.3
+                       c-0.6,0-1,0.2-1.3,0.5c-0.3,0.4-0.5,0.9-0.5,1.6c0,0.8,0.2,1.3,0.5,1.7c0.3,0.4,0.8,0.6,1.3,0.6c0.3,0,0.5-0.1,0.8-0.2
+                       c0.3-0.1,0.5-0.2,0.7-0.4v-0.8H338.6z"/>
+               <path d="M342.6,69.7v-6.3h1.3v5.3h3.2v1.1H342.6z"/>
+               <path d="M348,69.7v-6.4h4.7v1.1h-3.5v1.4h3.2v1.1h-3.2v1.7h3.6v1.1H348z"/>
+               <path d="M356.5,69.7v-6.4h2.7c0.7,0,1.2,0.1,1.5,0.2c0.3,0.1,0.6,0.3,0.7,0.6c0.2,0.3,0.3,0.6,0.3,1c0,0.5-0.1,0.9-0.4,1.2
+                       c-0.3,0.3-0.7,0.5-1.3,0.6c0.3,0.2,0.5,0.3,0.7,0.5s0.4,0.5,0.7,1l0.8,1.2h-1.5l-0.9-1.4c-0.3-0.5-0.6-0.8-0.7-0.9
+                       c-0.1-0.1-0.3-0.2-0.4-0.3c-0.1,0-0.4-0.1-0.7-0.1h-0.3v2.7H356.5z M357.8,66h1c0.6,0,1,0,1.2-0.1s0.3-0.1,0.4-0.3
+                       c0.1-0.1,0.1-0.3,0.1-0.5c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.5-0.3c-0.1,0-0.4,0-0.9,0h-1V66z"/>
+               <path d="M362.9,69.7v-6.4h1.3v6.4H362.9z"/>
+               <path d="M367.1,69.7l-2.3-6.4h1.4l1.6,4.7l1.6-4.7h1.4l-2.3,6.4H367.1z"/>
+               <path d="M371.4,69.7v-6.4h4.7v1.1h-3.5v1.4h3.2v1.1h-3.2v1.7h3.6v1.1H371.4z"/>
+               <path d="M377.3,69.7v-6.4h2.7c0.7,0,1.2,0.1,1.5,0.2c0.3,0.1,0.6,0.3,0.7,0.6c0.2,0.3,0.3,0.6,0.3,1c0,0.5-0.1,0.9-0.4,1.2
+                       c-0.3,0.3-0.7,0.5-1.3,0.6c0.3,0.2,0.5,0.3,0.7,0.5c0.2,0.2,0.4,0.5,0.7,1l0.8,1.2h-1.5l-0.9-1.4c-0.3-0.5-0.6-0.8-0.7-0.9
+                       s-0.3-0.2-0.4-0.3c-0.1,0-0.4-0.1-0.7-0.1h-0.3v2.7H377.3z M378.6,66h1c0.6,0,1,0,1.2-0.1c0.2-0.1,0.3-0.1,0.4-0.3
+                       c0.1-0.1,0.1-0.3,0.1-0.5c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.5-0.3c-0.1,0-0.4,0-0.9,0h-1V66z"/>
+       </g>
+       <g>
+               <path d="M359,45.5v-6.4h4.7v1.1h-3.5v1.4h3.2v1.1h-3.2v1.7h3.6v1.1H359z"/>
+               <path d="M370.7,45.5h-1.4l-0.6-1.5h-2.6l-0.5,1.5h-1.4l2.5-6.4h1.4L370.7,45.5z M368.3,43l-0.9-2.4l-0.9,2.4H368.3z"/>
+               <path d="M374.4,43.2v-1.1h2.8v2.5c-0.3,0.3-0.7,0.5-1.2,0.7c-0.5,0.2-1,0.3-1.6,0.3c-0.7,0-1.3-0.1-1.8-0.4
+                       c-0.5-0.3-0.9-0.7-1.1-1.2c-0.3-0.5-0.4-1.1-0.4-1.7c0-0.7,0.1-1.3,0.4-1.8c0.3-0.5,0.7-0.9,1.2-1.2c0.4-0.2,0.9-0.3,1.5-0.3
+                       c0.8,0,1.4,0.2,1.9,0.5c0.4,0.3,0.7,0.8,0.9,1.4l-1.3,0.2c-0.1-0.3-0.3-0.6-0.5-0.7c-0.3-0.2-0.6-0.3-0.9-0.3
+                       c-0.6,0-1,0.2-1.3,0.5c-0.3,0.4-0.5,0.9-0.5,1.6c0,0.8,0.2,1.3,0.5,1.7c0.3,0.4,0.8,0.6,1.3,0.6c0.3,0,0.5-0.1,0.8-0.2
+                       c0.3-0.1,0.5-0.2,0.7-0.4v-0.8H374.4z"/>
+               <path d="M378.4,45.5v-6.3h1.3v5.3h3.2v1.1H378.4z"/>
+               <path d="M383.8,45.5v-6.4h4.7v1.1h-3.5v1.4h3.2v1.1h-3.2v1.7h3.6v1.1H383.8z"/>
+               <path d="M392.3,45.5v-6.4h1.3v2.5h2.5v-2.5h1.3v6.4h-1.3v-2.8h-2.5v2.8H392.3z"/>
+               <path d="M404.5,45.5h-1.4l-0.6-1.5H400l-0.5,1.5h-1.4l2.5-6.4h1.4L404.5,45.5z M402.1,43l-0.9-2.4l-0.9,2.4H402.1z"/>
+               <path d="M405.2,45.5v-6.4h2.7c0.7,0,1.2,0.1,1.5,0.2c0.3,0.1,0.6,0.3,0.7,0.6s0.3,0.6,0.3,1c0,0.5-0.1,0.9-0.4,1.2
+                       c-0.3,0.3-0.7,0.5-1.3,0.6c0.3,0.2,0.5,0.3,0.7,0.5c0.2,0.2,0.4,0.5,0.7,1l0.8,1.2h-1.5l-0.9-1.4c-0.3-0.5-0.6-0.8-0.7-0.9
+                       c-0.1-0.1-0.3-0.2-0.4-0.3c-0.1,0-0.4-0.1-0.7-0.1h-0.3v2.7H405.2z M406.5,41.8h1c0.6,0,1,0,1.2-0.1c0.2-0.1,0.3-0.1,0.4-0.3
+                       c0.1-0.1,0.1-0.3,0.1-0.5c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.5-0.3c-0.1,0-0.4,0-0.9,0h-1V41.8z"/>
+               <path d="M411.6,39.1h2.6c0.5,0,0.9,0,1.1,0.1c0.2,0,0.5,0.1,0.7,0.3c0.2,0.1,0.4,0.3,0.5,0.5c0.1,0.2,0.2,0.5,0.2,0.7
+                       c0,0.3-0.1,0.6-0.2,0.8c-0.2,0.3-0.4,0.4-0.7,0.6c0.4,0.1,0.7,0.3,0.9,0.6s0.3,0.6,0.3,1c0,0.3-0.1,0.6-0.2,0.8
+                       c-0.1,0.3-0.3,0.5-0.6,0.7c-0.2,0.2-0.5,0.3-0.9,0.3c-0.2,0-0.7,0-1.6,0h-2.2V39.1z M412.9,40.2v1.5h0.8c0.5,0,0.8,0,0.9,0
+                       c0.2,0,0.4-0.1,0.5-0.2c0.1-0.1,0.2-0.3,0.2-0.5c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.5-0.2c-0.1,0-0.5,0-1.1,0H412.9z
+                        M412.9,42.7v1.7h1.2c0.5,0,0.8,0,0.9,0c0.2,0,0.3-0.1,0.5-0.3c0.1-0.1,0.2-0.3,0.2-0.5c0-0.2,0-0.4-0.1-0.5s-0.2-0.2-0.4-0.3
+                       c-0.2-0.1-0.6-0.1-1.1-0.1H412.9z"/>
+               <path d="M417.8,42.4c0-0.7,0.1-1.2,0.3-1.6c0.1-0.3,0.3-0.6,0.6-0.9c0.3-0.3,0.5-0.5,0.8-0.6c0.4-0.2,0.9-0.3,1.4-0.3
+                       c0.9,0,1.7,0.3,2.3,0.9c0.6,0.6,0.8,1.4,0.8,2.4c0,1-0.3,1.8-0.8,2.4c-0.6,0.6-1.3,0.9-2.3,0.9c-1,0-1.7-0.3-2.3-0.9
+                       C418.1,44.2,417.8,43.4,417.8,42.4z M419.1,42.3c0,0.7,0.2,1.3,0.5,1.6c0.3,0.4,0.8,0.6,1.3,0.6c0.5,0,0.9-0.2,1.3-0.6
+                       c0.3-0.4,0.5-0.9,0.5-1.7c0-0.7-0.2-1.3-0.5-1.6c-0.3-0.4-0.7-0.5-1.3-0.5c-0.5,0-1,0.2-1.3,0.5C419.3,41,419.1,41.6,419.1,42.3z"
+                       />
+               <path d="M425,45.5v-6.4h2.7c0.7,0,1.2,0.1,1.5,0.2c0.3,0.1,0.6,0.3,0.7,0.6c0.2,0.3,0.3,0.6,0.3,1c0,0.5-0.1,0.9-0.4,1.2
+                       c-0.3,0.3-0.7,0.5-1.3,0.6c0.3,0.2,0.5,0.3,0.7,0.5c0.2,0.2,0.4,0.5,0.7,1l0.8,1.2h-1.5l-0.9-1.4c-0.3-0.5-0.6-0.8-0.7-0.9
+                       c-0.1-0.1-0.3-0.2-0.4-0.3c-0.1,0-0.4-0.1-0.7-0.1h-0.3v2.7H425z M426.3,41.8h1c0.6,0,1,0,1.2-0.1c0.2-0.1,0.3-0.1,0.4-0.3
+                       c0.1-0.1,0.1-0.3,0.1-0.5c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.5-0.3c-0.1,0-0.4,0-0.9,0h-1V41.8z"/>
+       </g>
+       <g>
+               <g>
+                       <path d="M526.9,34.5l1.3,0.4c-0.2,0.7-0.5,1.2-1,1.6c-0.4,0.3-1,0.5-1.7,0.5c-0.8,0-1.5-0.3-2.1-0.9c-0.5-0.6-0.8-1.4-0.8-2.4
+                               c0-1.1,0.3-1.9,0.8-2.5c0.6-0.6,1.3-0.9,2.2-0.9c0.8,0,1.4,0.2,1.9,0.7c0.3,0.3,0.5,0.7,0.7,1.2l-1.3,0.3
+                               c-0.1-0.3-0.2-0.6-0.5-0.8c-0.2-0.2-0.5-0.3-0.9-0.3c-0.5,0-0.9,0.2-1.2,0.5c-0.3,0.3-0.4,0.9-0.4,1.7c0,0.8,0.1,1.4,0.4,1.7
+                               c0.3,0.3,0.7,0.5,1.1,0.5c0.3,0,0.6-0.1,0.9-0.3C526.6,35.3,526.8,35,526.9,34.5z"/>
+                       <path d="M529,33.7c0-0.7,0.1-1.2,0.3-1.6c0.1-0.3,0.3-0.6,0.6-0.9c0.3-0.3,0.5-0.5,0.8-0.6c0.4-0.2,0.9-0.3,1.4-0.3
+                               c0.9,0,1.7,0.3,2.3,0.9c0.6,0.6,0.8,1.4,0.8,2.4c0,1-0.3,1.8-0.8,2.4c-0.6,0.6-1.3,0.9-2.3,0.9c-1,0-1.7-0.3-2.3-0.9
+                               C529.3,35.5,529,34.7,529,33.7z M530.4,33.7c0,0.7,0.2,1.3,0.5,1.6c0.3,0.4,0.8,0.6,1.3,0.6c0.5,0,0.9-0.2,1.3-0.6
+                               c0.3-0.4,0.5-0.9,0.5-1.7c0-0.7-0.2-1.3-0.5-1.6c-0.3-0.4-0.7-0.5-1.3-0.5c-0.5,0-1,0.2-1.3,0.5
+                               C530.5,32.4,530.4,32.9,530.4,33.7z"/>
+                       <path d="M536.2,36.9v-6.4h2.1c0.8,0,1.3,0,1.5,0.1c0.4,0.1,0.7,0.3,0.9,0.6c0.2,0.3,0.4,0.7,0.4,1.2c0,0.4-0.1,0.7-0.2,1
+                               c-0.1,0.3-0.3,0.5-0.5,0.6c-0.2,0.2-0.4,0.3-0.7,0.3c-0.3,0.1-0.8,0.1-1.3,0.1h-0.8v2.4H536.2z M537.5,31.5v1.8h0.7
+                               c0.5,0,0.8,0,1-0.1c0.2-0.1,0.3-0.2,0.4-0.3c0.1-0.1,0.1-0.3,0.1-0.5c0-0.2-0.1-0.4-0.2-0.6c-0.1-0.2-0.3-0.2-0.5-0.3
+                               c-0.2,0-0.5,0-0.9,0H537.5z"/>
+                       <path d="M542.2,36.9v-6.4h2.1c0.8,0,1.3,0,1.5,0.1c0.4,0.1,0.7,0.3,0.9,0.6c0.2,0.3,0.4,0.7,0.4,1.2c0,0.4-0.1,0.7-0.2,1
+                               c-0.1,0.3-0.3,0.5-0.5,0.6c-0.2,0.2-0.4,0.3-0.7,0.3c-0.3,0.1-0.8,0.1-1.3,0.1h-0.8v2.4H542.2z M543.5,31.5v1.8h0.7
+                               c0.5,0,0.8,0,1-0.1c0.2-0.1,0.3-0.2,0.4-0.3c0.1-0.1,0.1-0.3,0.1-0.5c0-0.2-0.1-0.4-0.2-0.6c-0.1-0.2-0.3-0.2-0.5-0.3
+                               c-0.2,0-0.5,0-0.9,0H543.5z"/>
+                       <path d="M548.2,36.9v-6.4h4.7v1.1h-3.5V33h3.2V34h-3.2v1.7h3.6v1.1H548.2z"/>
+                       <path d="M554.1,36.9v-6.4h2.7c0.7,0,1.2,0.1,1.5,0.2c0.3,0.1,0.6,0.3,0.7,0.6c0.2,0.3,0.3,0.6,0.3,1c0,0.5-0.1,0.9-0.4,1.2
+                               c-0.3,0.3-0.7,0.5-1.3,0.6c0.3,0.2,0.5,0.3,0.7,0.5c0.2,0.2,0.4,0.5,0.7,1l0.8,1.2h-1.5l-0.9-1.4c-0.3-0.5-0.6-0.8-0.7-0.9
+                               c-0.1-0.1-0.3-0.2-0.4-0.3c-0.1,0-0.4-0.1-0.7-0.1h-0.3v2.7H554.1z M555.4,33.2h1c0.6,0,1,0,1.2-0.1c0.2-0.1,0.3-0.1,0.4-0.3
+                               c0.1-0.1,0.1-0.3,0.1-0.5c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.5-0.3c-0.1,0-0.4,0-0.9,0h-1V33.2z"/>
+                       <path d="M563.1,36.9v-6.4h1.3V33h2.5v-2.5h1.3v6.4h-1.3v-2.8h-2.5v2.8H563.1z"/>
+                       <path d="M575.3,36.9h-1.4l-0.6-1.5h-2.6l-0.5,1.5h-1.4l2.5-6.4h1.4L575.3,36.9z M572.9,34.3L572,32l-0.9,2.4H572.9z"/>
+                       <path d="M576,36.9v-6.4h2.7c0.7,0,1.2,0.1,1.5,0.2c0.3,0.1,0.6,0.3,0.7,0.6c0.2,0.3,0.3,0.6,0.3,1c0,0.5-0.1,0.9-0.4,1.2
+                               c-0.3,0.3-0.7,0.5-1.3,0.6c0.3,0.2,0.5,0.3,0.7,0.5c0.2,0.2,0.4,0.5,0.7,1l0.8,1.2h-1.5l-0.9-1.4c-0.3-0.5-0.6-0.8-0.7-0.9
+                               c-0.1-0.1-0.3-0.2-0.4-0.3c-0.1,0-0.4-0.1-0.7-0.1h-0.3v2.7H576z M577.3,33.2h1c0.6,0,1,0,1.2-0.1c0.2-0.1,0.3-0.1,0.4-0.3
+                               c0.1-0.1,0.1-0.3,0.1-0.5c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.5-0.3c-0.1,0-0.4,0-0.9,0h-1V33.2z"/>
+                       <path d="M582.4,30.5h2.6c0.5,0,0.9,0,1.1,0.1c0.2,0,0.5,0.1,0.7,0.3c0.2,0.1,0.4,0.3,0.5,0.5c0.1,0.2,0.2,0.5,0.2,0.7
+                               c0,0.3-0.1,0.6-0.2,0.8c-0.2,0.3-0.4,0.4-0.7,0.6c0.4,0.1,0.7,0.3,0.9,0.6c0.2,0.3,0.3,0.6,0.3,1c0,0.3-0.1,0.6-0.2,0.8
+                               c-0.1,0.3-0.3,0.5-0.6,0.7c-0.2,0.2-0.5,0.3-0.9,0.3c-0.2,0-0.7,0-1.6,0h-2.2V30.5z M583.7,31.5V33h0.8c0.5,0,0.8,0,0.9,0
+                               c0.2,0,0.4-0.1,0.5-0.2c0.1-0.1,0.2-0.3,0.2-0.5c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.5-0.2c-0.1,0-0.5,0-1.1,0H583.7z
+                                M583.7,34.1v1.7h1.2c0.5,0,0.8,0,0.9,0c0.2,0,0.3-0.1,0.5-0.3c0.1-0.1,0.2-0.3,0.2-0.5c0-0.2,0-0.4-0.1-0.5s-0.2-0.2-0.4-0.3
+                               c-0.2-0.1-0.6-0.1-1.1-0.1H583.7z"/>
+                       <path d="M588.6,33.7c0-0.7,0.1-1.2,0.3-1.6c0.1-0.3,0.3-0.6,0.6-0.9c0.3-0.3,0.5-0.5,0.8-0.6c0.4-0.2,0.9-0.3,1.4-0.3
+                               c0.9,0,1.7,0.3,2.3,0.9c0.6,0.6,0.8,1.4,0.8,2.4c0,1-0.3,1.8-0.8,2.4c-0.6,0.6-1.3,0.9-2.3,0.9c-1,0-1.7-0.3-2.3-0.9
+                               C588.9,35.5,588.6,34.7,588.6,33.7z M590,33.7c0,0.7,0.2,1.3,0.5,1.6c0.3,0.4,0.8,0.6,1.3,0.6c0.5,0,0.9-0.2,1.3-0.6
+                               c0.3-0.4,0.5-0.9,0.5-1.7c0-0.7-0.2-1.3-0.5-1.6c-0.3-0.4-0.7-0.5-1.3-0.5c-0.5,0-1,0.2-1.3,0.5C590.1,32.4,590,32.9,590,33.7z"
+                               />
+                       <path d="M595.9,36.9v-6.4h2.7c0.7,0,1.2,0.1,1.5,0.2c0.3,0.1,0.6,0.3,0.7,0.6c0.2,0.3,0.3,0.6,0.3,1c0,0.5-0.1,0.9-0.4,1.2
+                               S600,34,599.4,34c0.3,0.2,0.5,0.3,0.7,0.5c0.2,0.2,0.4,0.5,0.7,1l0.8,1.2h-1.5l-0.9-1.4c-0.3-0.5-0.6-0.8-0.7-0.9
+                               c-0.1-0.1-0.3-0.2-0.4-0.3c-0.1,0-0.4-0.1-0.7-0.1h-0.3v2.7H595.9z M597.2,33.2h1c0.6,0,1,0,1.2-0.1c0.2-0.1,0.3-0.1,0.4-0.3
+                               c0.1-0.1,0.1-0.3,0.1-0.5c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.5-0.3c-0.1,0-0.4,0-0.9,0h-1V33.2z"/>
+               </g>
+       </g>
+       <g>
+               <path d="M274.7,207.7v-6.4h1.3v2.5h2.5v-2.5h1.3v6.4h-1.3v-2.8H276v2.8H274.7z"/>
+               <path d="M286.9,207.7h-1.4l-0.6-1.5h-2.6l-0.5,1.5h-1.4l2.5-6.4h1.4L286.9,207.7z M284.6,205.1l-0.9-2.4l-0.9,2.4H284.6z"/>
+               <path d="M287.6,207.7v-6.4h1.3l2.6,4.3v-4.3h1.2v6.4h-1.3l-2.6-4.2v4.2H287.6z"/>
+               <path d="M298.2,205.3l1.3,0.4c-0.2,0.7-0.5,1.2-1,1.6c-0.4,0.3-1,0.5-1.7,0.5c-0.8,0-1.5-0.3-2.1-0.9c-0.5-0.6-0.8-1.4-0.8-2.4
+                       c0-1.1,0.3-1.9,0.8-2.5c0.6-0.6,1.3-0.9,2.2-0.9c0.8,0,1.4,0.2,1.9,0.7c0.3,0.3,0.5,0.7,0.7,1.2l-1.3,0.3
+                       c-0.1-0.3-0.2-0.6-0.5-0.8c-0.2-0.2-0.5-0.3-0.9-0.3c-0.5,0-0.9,0.2-1.2,0.5c-0.3,0.3-0.4,0.9-0.4,1.7c0,0.8,0.1,1.4,0.4,1.7
+                       c0.3,0.3,0.7,0.5,1.1,0.5c0.3,0,0.6-0.1,0.9-0.3C297.9,206.1,298.1,205.8,298.2,205.3z"/>
+               <path d="M300.3,204.5c0-0.7,0.1-1.2,0.3-1.6c0.1-0.3,0.3-0.6,0.6-0.9s0.5-0.5,0.8-0.6c0.4-0.2,0.9-0.3,1.4-0.3
+                       c0.9,0,1.7,0.3,2.3,0.9c0.6,0.6,0.8,1.4,0.8,2.4c0,1-0.3,1.8-0.8,2.4c-0.6,0.6-1.3,0.9-2.3,0.9c-1,0-1.7-0.3-2.3-0.9
+                       C300.6,206.3,300.3,205.5,300.3,204.5z M301.6,204.5c0,0.7,0.2,1.3,0.5,1.6c0.3,0.4,0.8,0.6,1.3,0.6c0.5,0,0.9-0.2,1.3-0.6
+                       c0.3-0.4,0.5-0.9,0.5-1.7c0-0.7-0.2-1.3-0.5-1.6c-0.3-0.4-0.7-0.5-1.3-0.5c-0.5,0-1,0.2-1.3,0.5
+                       C301.8,203.2,301.6,203.7,301.6,204.5z"/>
+               <path d="M311.6,205.3l1.3,0.4c-0.2,0.7-0.5,1.2-1,1.6c-0.4,0.3-1,0.5-1.7,0.5c-0.8,0-1.5-0.3-2.1-0.9c-0.5-0.6-0.8-1.4-0.8-2.4
+                       c0-1.1,0.3-1.9,0.8-2.5c0.6-0.6,1.3-0.9,2.2-0.9c0.8,0,1.4,0.2,1.9,0.7c0.3,0.3,0.5,0.7,0.7,1.2l-1.3,0.3
+                       c-0.1-0.3-0.2-0.6-0.5-0.8c-0.2-0.2-0.5-0.3-0.9-0.3c-0.5,0-0.9,0.2-1.2,0.5c-0.3,0.3-0.4,0.9-0.4,1.7c0,0.8,0.1,1.4,0.4,1.7
+                       c0.3,0.3,0.7,0.5,1.1,0.5c0.3,0,0.6-0.1,0.9-0.3C311.3,206.1,311.5,205.8,311.6,205.3z"/>
+               <path d="M314,207.7v-6.4h1.3v2.8l2.6-2.8h1.7l-2.4,2.5l2.5,3.9h-1.7l-1.8-3l-1,1.1v1.9H314z"/>
+       </g>
+       <g>
+               <path d="M247.1,230.2v-6.4h1.3v2.5h2.5v-2.5h1.3v6.4h-1.3v-2.8h-2.5v2.8H247.1z"/>
+               <path d="M253.3,227.1c0-0.7,0.1-1.2,0.3-1.6c0.1-0.3,0.3-0.6,0.6-0.9c0.3-0.3,0.5-0.5,0.8-0.6c0.4-0.2,0.9-0.3,1.4-0.3
+                       c0.9,0,1.7,0.3,2.3,0.9s0.8,1.4,0.8,2.4c0,1-0.3,1.8-0.8,2.4c-0.6,0.6-1.3,0.9-2.3,0.9c-1,0-1.7-0.3-2.3-0.9
+                       C253.5,228.9,253.3,228.1,253.3,227.1z M254.6,227c0,0.7,0.2,1.3,0.5,1.6c0.3,0.4,0.8,0.6,1.3,0.6s0.9-0.2,1.3-0.6
+                       c0.3-0.4,0.5-0.9,0.5-1.7c0-0.7-0.2-1.3-0.5-1.6c-0.3-0.4-0.7-0.5-1.3-0.5c-0.5,0-1,0.2-1.3,0.5
+                       C254.8,225.7,254.6,226.3,254.6,227z"/>
+               <path d="M260.5,223.8h1.3v3.5c0,0.6,0,0.9,0,1.1c0.1,0.3,0.2,0.5,0.4,0.6c0.2,0.2,0.5,0.2,0.9,0.2c0.4,0,0.6-0.1,0.8-0.2
+                       c0.2-0.1,0.3-0.3,0.3-0.6c0-0.2,0.1-0.6,0.1-1.1v-3.5h1.3v3.4c0,0.8,0,1.3-0.1,1.6c-0.1,0.3-0.2,0.6-0.4,0.8
+                       c-0.2,0.2-0.4,0.4-0.8,0.5c-0.3,0.1-0.7,0.2-1.2,0.2c-0.6,0-1.1-0.1-1.4-0.2c-0.3-0.1-0.6-0.3-0.7-0.6c-0.2-0.2-0.3-0.5-0.4-0.7
+                       c-0.1-0.4-0.1-0.9-0.1-1.6V223.8z"/>
+               <path d="M269.9,227.9v-1.1h2.8v2.5c-0.3,0.3-0.7,0.5-1.2,0.7c-0.5,0.2-1,0.3-1.6,0.3c-0.7,0-1.3-0.1-1.8-0.4
+                       c-0.5-0.3-0.9-0.7-1.1-1.2c-0.3-0.5-0.4-1.1-0.4-1.7c0-0.7,0.1-1.3,0.4-1.8c0.3-0.5,0.7-0.9,1.2-1.2c0.4-0.2,0.9-0.3,1.5-0.3
+                       c0.8,0,1.4,0.2,1.9,0.5c0.4,0.3,0.7,0.8,0.9,1.4l-1.3,0.2c-0.1-0.3-0.3-0.6-0.5-0.7c-0.2-0.2-0.6-0.3-0.9-0.3
+                       c-0.6,0-1,0.2-1.3,0.5c-0.3,0.4-0.5,0.9-0.5,1.6c0,0.8,0.2,1.3,0.5,1.7c0.3,0.4,0.8,0.6,1.3,0.6c0.3,0,0.5-0.1,0.8-0.2
+                       c0.3-0.1,0.5-0.2,0.7-0.4v-0.8H269.9z"/>
+               <path d="M273.9,230.2v-6.4h1.3v2.5h2.5v-2.5h1.3v6.4h-1.3v-2.8h-2.5v2.8H273.9z"/>
+               <path d="M281.8,230.2v-5.3h-1.9v-1.1h5.1v1.1h-1.9v5.3H281.8z"/>
+               <path d="M285.5,227.1c0-0.7,0.1-1.2,0.3-1.6c0.1-0.3,0.3-0.6,0.6-0.9c0.3-0.3,0.5-0.5,0.8-0.6c0.4-0.2,0.9-0.3,1.4-0.3
+                       c0.9,0,1.7,0.3,2.3,0.9s0.8,1.4,0.8,2.4c0,1-0.3,1.8-0.8,2.4c-0.6,0.6-1.3,0.9-2.3,0.9c-1,0-1.7-0.3-2.3-0.9
+                       C285.8,228.9,285.5,228.1,285.5,227.1z M286.9,227c0,0.7,0.2,1.3,0.5,1.6c0.3,0.4,0.8,0.6,1.3,0.6s0.9-0.2,1.3-0.6
+                       c0.3-0.4,0.5-0.9,0.5-1.7c0-0.7-0.2-1.3-0.5-1.6c-0.3-0.4-0.7-0.5-1.3-0.5s-1,0.2-1.3,0.5C287,225.7,286.9,226.3,286.9,227z"/>
+               <path d="M292.8,230.2v-6.4h1.3l2.6,4.3v-4.3h1.2v6.4h-1.3l-2.6-4.2v4.2H292.8z"/>
+       </g>
+       <path d="M383.5,71.8c-1,0-1.9,0.8-1.9,1.9c0,1,0.8,1.9,1.9,1.9c1,0,1.9-0.8,1.9-1.9C385.4,72.6,384.5,71.8,383.5,71.8"/>
+       <path d="M479.9,84c-1,0-1.9,0.8-1.9,1.9c0,1,0.8,1.9,1.9,1.9c1,0,1.9-0.8,1.9-1.9C481.8,84.8,480.9,84,479.9,84"/>
+       <path d="M502.8,83.3c-1,0-1.9,0.8-1.9,1.9c0,1,0.8,1.9,1.9,1.9s1.9-0.8,1.9-1.9C504.7,84.2,503.8,83.3,502.8,83.3"/>
+       <path d="M331.2,151.6c0-1.4-1.4-2.4-2.9-1.7c-0.3,0.2-0.6,0.5-0.8,0.8c-0.7,1.4,0.4,2.9,1.7,2.9
+               C330.3,153.5,331.2,152.7,331.2,151.6"/>
+       <path d="M287.4,211.6c0-1.4-1.4-2.4-2.9-1.7c-0.3,0.2-0.6,0.4-0.8,0.8c-0.7,1.4,0.4,2.9,1.7,2.9
+               C286.5,213.6,287.4,212.7,287.4,211.6"/>
+       <path d="M341.3,166.5c0-1.1-0.9-1.9-1.9-1.9c-1.1,0-1.9,0.9-1.9,1.9c0,1.1,0.9,1.9,1.9,1.9C340.5,168.5,341.3,167.6,341.3,166.5"/>
+       <path d="M300.9,262.6c-1.4,0-2.5,1.5-1.8,3c0.2,0.4,0.5,0.6,0.8,0.8c1.5,0.7,3-0.4,3-1.8C302.9,263.5,302,262.6,300.9,262.6"/>
+       <path d="M287,217.6c-1.4,0-2.5,1.5-1.8,3c0.2,0.4,0.5,0.7,0.8,0.8c1.5,0.7,3-0.4,3-1.8C289,218.5,288.1,217.6,287,217.6"/>
+       <path d="M524.9,39.4c-1,0-1.9,0.8-1.9,1.9s0.8,1.9,1.9,1.9c1,0,1.9-0.8,1.9-1.9S525.9,39.4,524.9,39.4"/>
+       <path d="M212.5,278.1c-1.4,0-2.5,1.5-1.8,3c0.2,0.4,0.5,0.7,0.8,0.8c1.5,0.7,3-0.4,3-1.8C214.5,279,213.6,278.1,212.5,278.1"/>
+       <path d="M430.7,47.6c-1,0-1.9,0.8-1.9,1.9c0,1,0.8,1.9,1.9,1.9c1,0,1.9-0.8,1.9-1.9C432.6,48.5,431.7,47.6,430.7,47.6"/>
+       <g>
+               <path d="M343.3,169.6v-6.3h1.3v5.3h3.2v1.1H343.3z"/>
+               <path d="M354.5,169.6h-1.4l-0.6-1.5H350l-0.5,1.5h-1.4l2.5-6.4h1.4L354.5,169.6z M352.1,167.1l-0.9-2.4l-0.9,2.4H352.1z"/>
+               <path d="M355.2,163.2h1.3v3.5c0,0.6,0,0.9,0,1.1c0.1,0.3,0.2,0.5,0.4,0.6c0.2,0.2,0.5,0.2,0.9,0.2c0.4,0,0.6-0.1,0.8-0.2
+                       c0.2-0.1,0.3-0.3,0.3-0.6s0.1-0.6,0.1-1.1v-3.5h1.3v3.4c0,0.8,0,1.3-0.1,1.6c-0.1,0.3-0.2,0.6-0.4,0.8c-0.2,0.2-0.4,0.4-0.8,0.5
+                       c-0.3,0.1-0.7,0.2-1.2,0.2c-0.6,0-1.1-0.1-1.4-0.2c-0.3-0.1-0.6-0.3-0.7-0.6c-0.2-0.2-0.3-0.5-0.4-0.7c-0.1-0.4-0.1-0.9-0.1-1.6
+                       V163.2z"/>
+               <path d="M361.7,169.6v-6.4h2.7c0.7,0,1.2,0.1,1.5,0.2c0.3,0.1,0.6,0.3,0.7,0.6c0.2,0.3,0.3,0.6,0.3,1c0,0.5-0.1,0.9-0.4,1.2
+                       s-0.7,0.5-1.3,0.6c0.3,0.2,0.5,0.3,0.7,0.5c0.2,0.2,0.4,0.5,0.7,1l0.8,1.2h-1.5l-0.9-1.4c-0.3-0.5-0.6-0.8-0.7-0.9
+                       c-0.1-0.1-0.3-0.2-0.4-0.3c-0.1,0-0.4-0.1-0.7-0.1H363v2.7H361.7z M363,165.9h1c0.6,0,1,0,1.2-0.1c0.2-0.1,0.3-0.1,0.4-0.3
+                       c0.1-0.1,0.1-0.3,0.1-0.5c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.5-0.3c-0.1,0-0.4,0-0.9,0h-1V165.9z"/>
+               <path d="M368.1,169.6v-6.4h1.3v6.4H368.1z"/>
+               <path d="M370.6,163.2h1.3v3.5c0,0.6,0,0.9,0,1.1c0.1,0.3,0.2,0.5,0.4,0.6c0.2,0.2,0.5,0.2,0.9,0.2c0.4,0,0.6-0.1,0.8-0.2
+                       c0.2-0.1,0.3-0.3,0.3-0.6s0.1-0.6,0.1-1.1v-3.5h1.3v3.4c0,0.8,0,1.3-0.1,1.6c-0.1,0.3-0.2,0.6-0.4,0.8c-0.2,0.2-0.4,0.4-0.8,0.5
+                       c-0.3,0.1-0.7,0.2-1.2,0.2c-0.6,0-1.1-0.1-1.4-0.2c-0.3-0.1-0.6-0.3-0.7-0.6c-0.2-0.2-0.3-0.5-0.4-0.7c-0.1-0.4-0.1-0.9-0.1-1.6
+                       V163.2z"/>
+               <path d="M377,169.6v-6.4h1.9l1.2,4.4l1.1-4.4h1.9v6.4H382v-5l-1.3,5h-1.2l-1.3-5v5H377z"/>
+       </g>
+       <g>
+               <path d="M306.5,145.5l1.3,0.4c-0.2,0.7-0.5,1.2-1,1.6c-0.4,0.3-1,0.5-1.7,0.5c-0.8,0-1.5-0.3-2.1-0.9c-0.5-0.6-0.8-1.4-0.8-2.4
+                       c0-1.1,0.3-1.9,0.8-2.5c0.6-0.6,1.3-0.9,2.2-0.9c0.8,0,1.4,0.2,1.9,0.7c0.3,0.3,0.5,0.7,0.7,1.2l-1.3,0.3
+                       c-0.1-0.3-0.2-0.6-0.5-0.8c-0.2-0.2-0.5-0.3-0.9-0.3c-0.5,0-0.9,0.2-1.2,0.5c-0.3,0.3-0.4,0.9-0.4,1.7c0,0.8,0.1,1.4,0.4,1.7
+                       s0.7,0.5,1.1,0.5c0.3,0,0.6-0.1,0.9-0.3C306.2,146.3,306.4,146,306.5,145.5z"/>
+               <path d="M314.6,147.9h-1.4l-0.6-1.5h-2.6l-0.5,1.5h-1.4l2.5-6.4h1.4L314.6,147.9z M312.3,145.3l-0.9-2.4l-0.9,2.4H312.3z"/>
+               <path d="M315.4,147.9v-6.3h1.3v5.3h3.2v1.1H315.4z"/>
+               <path d="M320.8,141.5h1.3v3.5c0,0.6,0,0.9,0,1.1c0.1,0.3,0.2,0.5,0.4,0.6c0.2,0.2,0.5,0.2,0.9,0.2c0.4,0,0.6-0.1,0.8-0.2
+                       c0.2-0.1,0.3-0.3,0.3-0.6c0-0.2,0.1-0.6,0.1-1.1v-3.5h1.3v3.4c0,0.8,0,1.3-0.1,1.6c-0.1,0.3-0.2,0.6-0.4,0.8
+                       c-0.2,0.2-0.4,0.4-0.8,0.5c-0.3,0.1-0.7,0.2-1.2,0.2c-0.6,0-1.1-0.1-1.4-0.2c-0.3-0.1-0.6-0.3-0.7-0.6c-0.2-0.2-0.3-0.5-0.4-0.7
+                       c-0.1-0.4-0.1-0.9-0.1-1.6V141.5z"/>
+               <path d="M327.2,147.9v-6.4h1.9l1.2,4.4l1.1-4.4h1.9v6.4h-1.2v-5l-1.3,5h-1.2l-1.3-5v5H327.2z"/>
+               <path d="M334.7,147.9v-6.4h4.7v1.1H336v1.4h3.2v1.1H336v1.7h3.6v1.1H334.7z"/>
+               <path d="M342.1,147.9v-5.3h-1.9v-1.1h5.1v1.1h-1.9v5.3H342.1z"/>
+       </g>
+</g>
+<g id="Main_Towns_-_hover" class="st15">
+       <g id="toivola-city-hover" class="toivola st16">
+               <defs>
+                    <rect id="SVGID_1_" x="185.2" y="277.7" width="53" height="20"/>
+               </defs>
+               <clipPath id="SVGID_2_">
+                    <use xlink:href="#SVGID_1_"  style="overflow:visible;"/>
+               </clipPath>
+               <path class="st17" d="M191.7,278.2c0,0-6,0-6,6v7c0,0,0,6,6,6h40c0,0,6,0,6-6v-7c0,0,0-6-6-6H191.7z"/>
+               <path class="st18" d="M191.7,278.2c0,0-6,0-6,6v7c0,0,0,6,6,6h40c0,0,6,0,6-6v-7c0,0,0-6-6-6H191.7z"/>
+       </g>
+       <g id="chassell-city-hover" class="chassell st16">
+               <defs>
+                    <polygon id="SVGID_3_" points="243.6,274 304.4,273.8 304.4,253.8 243.6,254                         "/>
+               </defs>
+               <clipPath id="SVGID_4_">
+                    <use xlink:href="#SVGID_3_"  style="overflow:visible;"/>
+               </clipPath>
+               <path class="st19" d="M250.1,254.5c0,0-6,0-6,6v7c0,0,0,6,6,6l47.9-0.2c0,0,6,0,6-6v-7c0,0,0-6-6-6L250.1,254.5z"/>
+               <path class="st20" d="M250.1,254.5c0,0-6,0-6,6v7c0,0,0,6,6,6l47.9-0.2c0,0,6,0,6-6v-7c0,0,0-6-6-6L250.1,254.5z"/>
+       </g>
+       <g id="houghton-city-hover" class="houghton st16">
+               <defs>
+                    <polygon id="SVGID_5_" points="240.3,237.1 304.5,236.9 304.5,216.9 240.3,217.1                     "/>
+               </defs>
+               <clipPath id="SVGID_6_">
+                    <use xlink:href="#SVGID_5_"  style="overflow:visible;"/>
+               </clipPath>
+               <path class="st21" d="M246.8,217.6c0,0-6,0-6,6v7c0,0,0,6,6,6l51.2-0.2c0,0,6,0,6-6v-7c0,0,0-6-6-6L246.8,217.6z"/>
+               <path class="st22" d="M246.8,217.6c0,0-6,0-6,6v7c0,0,0,6,6,6l51.2-0.2c0,0,6,0,6-6v-7c0,0,0-6-6-6L246.8,217.6z"/>
+       </g>
+       <g id="hancock-city-hover" class="hancock st16">
+               <defs>
+                    <polygon id="SVGID_7_" points="268,214.6 326.1,214.5 326.1,194.5 268,194.6                         "/>
+               </defs>
+               <clipPath id="SVGID_8_">
+                    <use xlink:href="#SVGID_7_"  style="overflow:visible;"/>
+               </clipPath>
+               <path class="st23" d="M274.5,195.1c0,0-6,0-6,6v7c0,0,0,6,6,6l45.1-0.2c0,0,6,0,6-6v-7c0,0,0-6-6-6L274.5,195.1z"/>
+               <path class="st24" d="M274.5,195.1c0,0-6,0-6,6v7c0,0,0,6,6,6l45.1-0.2c0,0,6,0,6-6v-7c0,0,0-6-6-6L274.5,195.1z"/>
+       </g>
+       <g id="laurium-city-hover" class="laurium st16">
+               <defs>
+                    <polygon id="SVGID_9_" points="336.7,176.8 389.9,176.6 389.9,156.6 336.7,156.8                     "/>
+               </defs>
+               <clipPath id="SVGID_10_">
+                    <use xlink:href="#SVGID_9_"  style="overflow:visible;"/>
+               </clipPath>
+               <path class="st25" d="M343.2,157.3c0,0-6,0-6,6v7c0,0,0,6,6,6l40.3-0.2c0,0,6,0,6-6v-7c0,0,0-6-6-6L343.2,157.3z"/>
+               <path class="st26" d="M343.2,157.3c0,0-6,0-6,6v7c0,0,0,6,6,6l40.3-0.2c0,0,6,0,6-6v-7c0,0,0-6-6-6L343.2,157.3z"/>
+       </g>
+       <g id="calumet-city-hover" class="calumet st16">
+               <defs>
+                    <polygon id="SVGID_11_" points="295.7,154.5 351.9,154.3 351.9,134.3 295.7,134.5                    "/>
+               </defs>
+               <clipPath id="SVGID_12_">
+                    <use xlink:href="#SVGID_11_"  style="overflow:visible;"/>
+               </clipPath>
+               <path class="st27" d="M302.2,135c0,0-6,0-6,6v7c0,0,0,6,6,6l43.2-0.2c0,0,6,0,6-6v-7c0,0,0-6-6-6L302.2,135z"/>
+               <path class="st28" d="M302.2,135c0,0-6,0-6,6v7c0,0,0,6,6,6l43.2-0.2c0,0,6,0,6-6v-7c0,0,0-6-6-6L302.2,135z"/>
+       </g>
+       <g id="eagle-river-city-hover" class="eagle-river st16">
+               <defs>
+                    <polygon id="SVGID_13_" points="316.5,76.2 389.8,76.1 389.8,56.1 316.5,56.2                        "/>
+               </defs>
+               <clipPath id="SVGID_14_">
+                    <use xlink:href="#SVGID_13_"  style="overflow:visible;"/>
+               </clipPath>
+               <path class="st29" d="M323,56.7c0,0-6,0-6,6v7c0,0,0,6,6,6l60.3-0.2c0,0,6,0,6-6v-7c0,0,0-6-6-6L323,56.7z"/>
+               <path class="st30" d="M323,56.7c0,0-6,0-6,6v7c0,0,0,6,6,6l60.3-0.2c0,0,6,0,6-6v-7c0,0,0-6-6-6L323,56.7z"/>
+       </g>
+       <g id="eagle-harbor-city-hover" class="eagle-harbor st16">
+               <defs>
+                    <polygon id="SVGID_15_" points="352.4,52.2 437.1,52.1 437.1,32.1 352.4,32.2                        "/>
+               </defs>
+               <clipPath id="SVGID_16_">
+                    <use xlink:href="#SVGID_15_"  style="overflow:visible;"/>
+               </clipPath>
+               <path class="st31" d="M358.9,32.7c0,0-6,0-6,6v7c0,0,0,6,6,6l71.8-0.2c0,0,6,0,6-6v-7c0,0,0-6-6-6L358.9,32.7z"/>
+               <path class="st32" d="M358.9,32.7c0,0-6,0-6,6v7c0,0,0,6,6,6l71.8-0.2c0,0,6,0,6-6v-7c0,0,0-6-6-6L358.9,32.7z"/>
+       </g>
+       <g id="lac-la-belle-city-hover" class="lac-la-belle st16">
+               <defs>
+                    <polygon id="SVGID_17_" points="406.6,93.2 482.6,93.1 482.6,73.1 406.6,73.2                        "/>
+               </defs>
+               <clipPath id="SVGID_18_">
+                    <use xlink:href="#SVGID_17_"  style="overflow:visible;"/>
+               </clipPath>
+               <path class="st33" d="M413.1,73.7c0,0-6,0-6,6v7c0,0,0,6,6,6l63-0.2c0,0,6,0,6-6v-7c0,0,0-6-6-6L413.1,73.7z"/>
+               <path class="st34" d="M413.1,73.7c0,0-6,0-6,6v7c0,0,0,6,6,6l63-0.2c0,0,6,0,6-6v-7c0,0,0-6-6-6L413.1,73.7z"/>
+       </g>
+       <g id="beter-grise-city-hover" class="bete-grise st16">
+               <defs>
+                    <polygon id="SVGID_19_" points="497.7,102.5 563.8,102.3 563.8,82.3 497.7,82.5                      "/>
+               </defs>
+               <clipPath id="SVGID_20_">
+                    <use xlink:href="#SVGID_19_"  style="overflow:visible;"/>
+               </clipPath>
+               <path class="st35" d="M504.2,83c0,0-6,0-6,6v7c0,0,0,6,6,6l53.1-0.2c0,0,6,0,6-6v-7c0,0,0-6-6-6L504.2,83z"/>
+               <path class="st36" d="M504.2,83c0,0-6,0-6,6v7c0,0,0,6,6,6l53.1-0.2c0,0,6,0,6-6v-7c0,0,0-6-6-6L504.2,83z"/>
+       </g>
+       <g id="copper-harbor-city-hover" class="copper-harbor st16">
+               <defs>
+                    <polygon id="SVGID_21_" points="516,43.8 608,43.7 608,23.7 516,23.8                        "/>
+               </defs>
+               <clipPath id="SVGID_22_">
+                    <use xlink:href="#SVGID_21_"  style="overflow:visible;"/>
+               </clipPath>
+               <path class="st37" d="M522.5,24.3c0,0-6,0-6,6v7c0,0,0,6,6,6l79.1-0.2c0,0,6,0,6-6v-7c0,0,0-6-6-6L522.5,24.3z"/>
+               <path class="st38" d="M522.5,24.3c0,0-6,0-6,6v7c0,0,0,6,6,6l79.1-0.2c0,0,6,0,6-6v-7c0,0,0-6-6-6L522.5,24.3z"/>
+       </g>
+       <g id="laurium-text-hover" class="laurium st16">
+               <path class="st5" d="M343.3,169.6v-6.3h1.3v5.3h3.2v1.1H343.3z"/>
+               <path class="st5" d="M354.5,169.6h-1.4l-0.6-1.5H350l-0.5,1.5h-1.4l2.5-6.4h1.4L354.5,169.6z M352.1,167.1l-0.9-2.4l-0.9,2.4
+                       H352.1z"/>
+               <path class="st5" d="M355.2,163.2h1.3v3.5c0,0.6,0,0.9,0,1.1c0.1,0.3,0.2,0.5,0.4,0.6c0.2,0.2,0.5,0.2,0.9,0.2
+                       c0.4,0,0.6-0.1,0.8-0.2c0.2-0.1,0.3-0.3,0.3-0.6s0.1-0.6,0.1-1.1v-3.5h1.3v3.4c0,0.8,0,1.3-0.1,1.6c-0.1,0.3-0.2,0.6-0.4,0.8
+                       c-0.2,0.2-0.4,0.4-0.8,0.5c-0.3,0.1-0.7,0.2-1.2,0.2c-0.6,0-1.1-0.1-1.4-0.2c-0.3-0.1-0.6-0.3-0.7-0.6c-0.2-0.2-0.3-0.5-0.4-0.7
+                       c-0.1-0.4-0.1-0.9-0.1-1.6V163.2z"/>
+               <path class="st5" d="M361.7,169.6v-6.4h2.7c0.7,0,1.2,0.1,1.5,0.2c0.3,0.1,0.6,0.3,0.7,0.6c0.2,0.3,0.3,0.6,0.3,1
+                       c0,0.5-0.1,0.9-0.4,1.2s-0.7,0.5-1.3,0.6c0.3,0.2,0.5,0.3,0.7,0.5c0.2,0.2,0.4,0.5,0.7,1l0.8,1.2h-1.5l-0.9-1.4
+                       c-0.3-0.5-0.6-0.8-0.7-0.9c-0.1-0.1-0.3-0.2-0.4-0.3c-0.1,0-0.4-0.1-0.7-0.1H363v2.7H361.7z M363,165.9h1c0.6,0,1,0,1.2-0.1
+                       c0.2-0.1,0.3-0.1,0.4-0.3c0.1-0.1,0.1-0.3,0.1-0.5c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.5-0.3c-0.1,0-0.4,0-0.9,0h-1V165.9z"
+                       />
+               <path class="st5" d="M368.1,169.6v-6.4h1.3v6.4H368.1z"/>
+               <path class="st5" d="M370.6,163.2h1.3v3.5c0,0.6,0,0.9,0,1.1c0.1,0.3,0.2,0.5,0.4,0.6c0.2,0.2,0.5,0.2,0.9,0.2
+                       c0.4,0,0.6-0.1,0.8-0.2c0.2-0.1,0.3-0.3,0.3-0.6s0.1-0.6,0.1-1.1v-3.5h1.3v3.4c0,0.8,0,1.3-0.1,1.6c-0.1,0.3-0.2,0.6-0.4,0.8
+                       c-0.2,0.2-0.4,0.4-0.8,0.5c-0.3,0.1-0.7,0.2-1.2,0.2c-0.6,0-1.1-0.1-1.4-0.2c-0.3-0.1-0.6-0.3-0.7-0.6c-0.2-0.2-0.3-0.5-0.4-0.7
+                       c-0.1-0.4-0.1-0.9-0.1-1.6V163.2z"/>
+               <path class="st5" d="M377,169.6v-6.4h1.9l1.2,4.4l1.1-4.4h1.9v6.4H382v-5l-1.3,5h-1.2l-1.3-5v5H377z"/>
+       </g>
+       <g id="calumet-text-hover" class="calumet st16">
+               <path class="st5" d="M306.5,145.5l1.3,0.4c-0.2,0.7-0.5,1.2-1,1.6c-0.4,0.3-1,0.5-1.7,0.5c-0.8,0-1.5-0.3-2.1-0.9
+                       c-0.5-0.6-0.8-1.4-0.8-2.4c0-1.1,0.3-1.9,0.8-2.5c0.6-0.6,1.3-0.9,2.2-0.9c0.8,0,1.4,0.2,1.9,0.7c0.3,0.3,0.5,0.7,0.7,1.2
+                       l-1.3,0.3c-0.1-0.3-0.2-0.6-0.5-0.8c-0.2-0.2-0.5-0.3-0.9-0.3c-0.5,0-0.9,0.2-1.2,0.5c-0.3,0.3-0.4,0.9-0.4,1.7
+                       c0,0.8,0.1,1.4,0.4,1.7s0.7,0.5,1.1,0.5c0.3,0,0.6-0.1,0.9-0.3C306.2,146.3,306.4,146,306.5,145.5z"/>
+               <path class="st5" d="M314.6,147.9h-1.4l-0.6-1.5h-2.6l-0.5,1.5h-1.4l2.5-6.4h1.4L314.6,147.9z M312.3,145.3l-0.9-2.4l-0.9,2.4
+                       H312.3z"/>
+               <path class="st5" d="M315.4,147.9v-6.3h1.3v5.3h3.2v1.1H315.4z"/>
+               <path class="st5" d="M320.8,141.5h1.3v3.5c0,0.6,0,0.9,0,1.1c0.1,0.3,0.2,0.5,0.4,0.6c0.2,0.2,0.5,0.2,0.9,0.2
+                       c0.4,0,0.6-0.1,0.8-0.2c0.2-0.1,0.3-0.3,0.3-0.6c0-0.2,0.1-0.6,0.1-1.1v-3.5h1.3v3.4c0,0.8,0,1.3-0.1,1.6
+                       c-0.1,0.3-0.2,0.6-0.4,0.8c-0.2,0.2-0.4,0.4-0.8,0.5c-0.3,0.1-0.7,0.2-1.2,0.2c-0.6,0-1.1-0.1-1.4-0.2c-0.3-0.1-0.6-0.3-0.7-0.6
+                       c-0.2-0.2-0.3-0.5-0.4-0.7c-0.1-0.4-0.1-0.9-0.1-1.6V141.5z"/>
+               <path class="st5" d="M327.2,147.9v-6.4h1.9l1.2,4.4l1.1-4.4h1.9v6.4h-1.2v-5l-1.3,5h-1.2l-1.3-5v5H327.2z"/>
+               <path class="st5" d="M334.7,147.9v-6.4h4.7v1.1H336v1.4h3.2v1.1H336v1.7h3.6v1.1H334.7z"/>
+               <path class="st5" d="M342.1,147.9v-5.3h-1.9v-1.1h5.1v1.1h-1.9v5.3H342.1z"/>
+       </g>
+       <g id="bete-grise-text-hover" class="bete-grise st16">
+               <path class="st5" d="M504.3,88.8h2.6c0.5,0,0.9,0,1.1,0.1c0.2,0,0.5,0.1,0.7,0.3c0.2,0.1,0.4,0.3,0.5,0.5c0.1,0.2,0.2,0.5,0.2,0.7
+                       c0,0.3-0.1,0.6-0.2,0.8c-0.2,0.3-0.4,0.4-0.7,0.6c0.4,0.1,0.7,0.3,0.9,0.6s0.3,0.6,0.3,1c0,0.3-0.1,0.6-0.2,0.8
+                       c-0.1,0.3-0.3,0.5-0.6,0.7c-0.2,0.2-0.5,0.3-0.9,0.3c-0.2,0-0.7,0-1.6,0h-2.2V88.8z M505.6,89.9v1.5h0.8c0.5,0,0.8,0,0.9,0
+                       c0.2,0,0.4-0.1,0.5-0.2c0.1-0.1,0.2-0.3,0.2-0.5c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.5-0.2c-0.1,0-0.5,0-1.1,0H505.6z
+                        M505.6,92.4v1.7h1.2c0.5,0,0.8,0,0.9,0c0.2,0,0.3-0.1,0.5-0.3c0.1-0.1,0.2-0.3,0.2-0.5c0-0.2,0-0.4-0.1-0.5
+                       c-0.1-0.1-0.2-0.2-0.4-0.3c-0.2-0.1-0.6-0.1-1.1-0.1H505.6z"/>
+               <path class="st5" d="M510.7,95.2v-6.4h4.7v1.1H512v1.4h3.2v1.1H512v1.7h3.6v1.1H510.7z"/>
+               <path class="st5" d="M518.1,95.2v-5.3h-1.9v-1.1h5.1v1.1h-1.9v5.3H518.1z"/>
+               <path class="st5" d="M522.2,95.2v-6.4h4.7v1.1h-3.5v1.4h3.2v1.1h-3.2v1.7h3.6v1.1H522.2z"/>
+               <path class="st5" d="M533.6,92.9v-1.1h2.8v2.5c-0.3,0.3-0.7,0.5-1.2,0.7c-0.5,0.2-1,0.3-1.6,0.3c-0.7,0-1.3-0.1-1.8-0.4
+                       c-0.5-0.3-0.9-0.7-1.1-1.2c-0.3-0.5-0.4-1.1-0.4-1.7c0-0.7,0.1-1.3,0.4-1.8c0.3-0.5,0.7-0.9,1.2-1.2c0.4-0.2,0.9-0.3,1.5-0.3
+                       c0.8,0,1.4,0.2,1.9,0.5c0.4,0.3,0.7,0.8,0.9,1.4l-1.3,0.2c-0.1-0.3-0.3-0.6-0.5-0.7c-0.2-0.2-0.6-0.3-0.9-0.3
+                       c-0.6,0-1,0.2-1.3,0.5c-0.3,0.4-0.5,0.9-0.5,1.6c0,0.8,0.2,1.3,0.5,1.7c0.3,0.4,0.8,0.6,1.3,0.6c0.3,0,0.5-0.1,0.8-0.2
+                       c0.3-0.1,0.5-0.2,0.7-0.4v-0.8H533.6z"/>
+               <path class="st5" d="M537.6,95.2v-6.4h2.7c0.7,0,1.2,0.1,1.5,0.2c0.3,0.1,0.6,0.3,0.7,0.6c0.2,0.3,0.3,0.6,0.3,1
+                       c0,0.5-0.1,0.9-0.4,1.2c-0.3,0.3-0.7,0.5-1.3,0.6c0.3,0.2,0.5,0.3,0.7,0.5c0.2,0.2,0.4,0.5,0.7,1l0.8,1.2h-1.5l-0.9-1.4
+                       c-0.3-0.5-0.6-0.8-0.7-0.9c-0.1-0.1-0.3-0.2-0.4-0.3c-0.1,0-0.4-0.1-0.7-0.1h-0.3v2.7H537.6z M538.9,91.5h1c0.6,0,1,0,1.2-0.1
+                       c0.2-0.1,0.3-0.1,0.4-0.3c0.1-0.1,0.1-0.3,0.1-0.5c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.5-0.3c-0.1,0-0.4,0-0.9,0h-1V91.5z"
+                       />
+               <path class="st5" d="M544,95.2v-6.4h1.3v6.4H544z"/>
+               <path class="st5" d="M546.2,93.1l1.3-0.1c0.1,0.4,0.2,0.7,0.5,0.9c0.2,0.2,0.5,0.3,0.9,0.3c0.4,0,0.7-0.1,0.9-0.3
+                       c0.2-0.2,0.3-0.4,0.3-0.6c0-0.2,0-0.3-0.1-0.4c-0.1-0.1-0.2-0.2-0.5-0.3c-0.2-0.1-0.5-0.1-1-0.3c-0.7-0.2-1.2-0.4-1.5-0.6
+                       c-0.4-0.4-0.6-0.8-0.6-1.3c0-0.3,0.1-0.6,0.3-0.9c0.2-0.3,0.5-0.5,0.8-0.6c0.3-0.1,0.8-0.2,1.3-0.2c0.8,0,1.4,0.2,1.8,0.5
+                       c0.4,0.4,0.6,0.8,0.6,1.4l-1.3,0.1c-0.1-0.3-0.2-0.6-0.4-0.7c-0.2-0.1-0.5-0.2-0.8-0.2c-0.4,0-0.7,0.1-0.9,0.2
+                       c-0.1,0.1-0.2,0.2-0.2,0.4c0,0.2,0.1,0.3,0.2,0.4c0.2,0.1,0.6,0.3,1.2,0.4c0.6,0.1,1.1,0.3,1.4,0.5c0.3,0.2,0.5,0.4,0.7,0.7
+                       c0.2,0.3,0.3,0.6,0.3,1c0,0.4-0.1,0.7-0.3,1c-0.2,0.3-0.5,0.6-0.9,0.7c-0.4,0.2-0.8,0.2-1.4,0.2c-0.8,0-1.4-0.2-1.9-0.6
+                       C546.5,94.4,546.3,93.8,546.2,93.1z"/>
+               <path class="st5" d="M552.5,95.2v-6.4h4.7v1.1h-3.5v1.4h3.2v1.1h-3.2v1.7h3.6v1.1H552.5z"/>
+       </g>
+       <g id="lac-la-belle-text-hover" class="lac-la-belle st16">
+               <path class="st5" d="M413.1,86v-6.3h1.3v5.3h3.2V86H413.1z"/>
+               <path class="st5" d="M424.3,86h-1.4l-0.6-1.5h-2.6l-0.5,1.5h-1.4l2.5-6.4h1.4L424.3,86z M421.9,83.5l-0.9-2.4l-0.9,2.4H421.9z"/>
+               <path class="st5" d="M429.1,83.7l1.3,0.4c-0.2,0.7-0.5,1.2-1,1.6c-0.4,0.3-1,0.5-1.7,0.5c-0.8,0-1.5-0.3-2.1-0.9
+                       c-0.5-0.6-0.8-1.4-0.8-2.4c0-1.1,0.3-1.9,0.8-2.5c0.6-0.6,1.3-0.9,2.2-0.9c0.8,0,1.4,0.2,1.9,0.7c0.3,0.3,0.5,0.7,0.7,1.2
+                       l-1.3,0.3c-0.1-0.3-0.2-0.6-0.5-0.8c-0.2-0.2-0.5-0.3-0.9-0.3c-0.5,0-0.9,0.2-1.2,0.5c-0.3,0.3-0.4,0.9-0.4,1.7
+                       c0,0.8,0.1,1.4,0.4,1.7s0.7,0.5,1.1,0.5c0.3,0,0.6-0.1,0.9-0.3C428.8,84.5,429,84.1,429.1,83.7z"/>
+               <path class="st5" d="M434,86v-6.3h1.3v5.3h3.2V86H434z"/>
+               <path class="st5" d="M445.2,86h-1.4l-0.6-1.5h-2.6l-0.5,1.5h-1.4l2.5-6.4h1.4L445.2,86z M442.8,83.5l-0.9-2.4l-0.9,2.4H442.8z"/>
+               <path class="st5" d="M448,79.6h2.6c0.5,0,0.9,0,1.1,0.1c0.2,0,0.5,0.1,0.7,0.3c0.2,0.1,0.4,0.3,0.5,0.5c0.1,0.2,0.2,0.5,0.2,0.7
+                       c0,0.3-0.1,0.6-0.2,0.8c-0.2,0.3-0.4,0.4-0.7,0.6c0.4,0.1,0.7,0.3,0.9,0.6s0.3,0.6,0.3,1c0,0.3-0.1,0.6-0.2,0.8
+                       c-0.1,0.3-0.3,0.5-0.6,0.7c-0.2,0.2-0.5,0.3-0.9,0.3c-0.2,0-0.7,0-1.6,0H448V79.6z M449.3,80.7v1.5h0.8c0.5,0,0.8,0,0.9,0
+                       c0.2,0,0.4-0.1,0.5-0.2c0.1-0.1,0.2-0.3,0.2-0.5c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.5-0.2c-0.1,0-0.5,0-1.1,0H449.3z
+                        M449.3,83.2v1.7h1.2c0.5,0,0.8,0,0.9,0c0.2,0,0.3-0.1,0.5-0.3c0.1-0.1,0.2-0.3,0.2-0.5c0-0.2,0-0.4-0.1-0.5
+                       c-0.1-0.1-0.2-0.2-0.4-0.3c-0.2-0.1-0.6-0.1-1.1-0.1H449.3z"/>
+               <path class="st5" d="M454.5,86v-6.4h4.7v1.1h-3.5v1.4h3.2v1.1h-3.2v1.7h3.6V86H454.5z"/>
+               <path class="st5" d="M460.5,86v-6.3h1.3v5.3h3.2V86H460.5z"/>
+               <path class="st5" d="M465.9,86v-6.3h1.3v5.3h3.2V86H465.9z"/>
+               <path class="st5" d="M471.3,86v-6.4h4.7v1.1h-3.5v1.4h3.2v1.1h-3.2v1.7h3.6V86H471.3z"/>
+       </g>
+       <g id="chassell-text-hover" class="chassell st16">
+               <path class="st5" d="M254.6,265l1.3,0.4c-0.2,0.7-0.5,1.2-1,1.6c-0.4,0.3-1,0.5-1.7,0.5c-0.8,0-1.5-0.3-2.1-0.9
+                       c-0.5-0.6-0.8-1.4-0.8-2.4c0-1.1,0.3-1.9,0.8-2.5c0.6-0.6,1.3-0.9,2.2-0.9c0.8,0,1.4,0.2,1.9,0.7c0.3,0.3,0.5,0.7,0.7,1.2
+                       l-1.3,0.3c-0.1-0.3-0.2-0.6-0.5-0.8c-0.2-0.2-0.5-0.3-0.9-0.3c-0.5,0-0.9,0.2-1.2,0.5c-0.3,0.3-0.4,0.9-0.4,1.7
+                       c0,0.8,0.1,1.4,0.4,1.7c0.3,0.3,0.7,0.5,1.1,0.5c0.3,0,0.6-0.1,0.9-0.3C254.3,265.8,254.5,265.5,254.6,265z"/>
+               <path class="st5" d="M257,267.4V261h1.3v2.5h2.5V261h1.3v6.4h-1.3v-2.8h-2.5v2.8H257z"/>
+               <path class="st5" d="M269.2,267.4h-1.4l-0.6-1.5h-2.6l-0.5,1.5h-1.4l2.5-6.4h1.4L269.2,267.4z M266.8,264.8l-0.9-2.4l-0.9,2.4
+                       H266.8z"/>
+               <path class="st5" d="M269.6,265.3l1.3-0.1c0.1,0.4,0.2,0.7,0.5,0.9c0.2,0.2,0.5,0.3,0.9,0.3c0.4,0,0.7-0.1,0.9-0.3
+                       c0.2-0.2,0.3-0.4,0.3-0.6c0-0.2,0-0.3-0.1-0.4c-0.1-0.1-0.2-0.2-0.5-0.3c-0.2-0.1-0.5-0.1-1-0.3c-0.7-0.2-1.2-0.4-1.5-0.6
+                       c-0.4-0.4-0.6-0.8-0.6-1.3c0-0.3,0.1-0.6,0.3-0.9c0.2-0.3,0.5-0.5,0.8-0.6c0.3-0.1,0.8-0.2,1.3-0.2c0.8,0,1.4,0.2,1.8,0.5
+                       c0.4,0.4,0.6,0.8,0.6,1.4l-1.3,0.1c-0.1-0.3-0.2-0.6-0.4-0.7c-0.2-0.1-0.5-0.2-0.8-0.2c-0.4,0-0.7,0.1-0.9,0.2
+                       c-0.1,0.1-0.2,0.2-0.2,0.4c0,0.2,0.1,0.3,0.2,0.4c0.2,0.1,0.6,0.3,1.2,0.4c0.6,0.1,1.1,0.3,1.4,0.5c0.3,0.2,0.5,0.4,0.7,0.7
+                       c0.2,0.3,0.3,0.6,0.3,1c0,0.4-0.1,0.7-0.3,1c-0.2,0.3-0.5,0.6-0.9,0.7c-0.4,0.2-0.8,0.2-1.4,0.2c-0.8,0-1.4-0.2-1.9-0.6
+                       C269.9,266.5,269.7,266,269.6,265.3z"/>
+               <path class="st5" d="M275.5,265.3l1.3-0.1c0.1,0.4,0.2,0.7,0.5,0.9c0.2,0.2,0.5,0.3,0.9,0.3c0.4,0,0.7-0.1,0.9-0.3
+                       c0.2-0.2,0.3-0.4,0.3-0.6c0-0.2,0-0.3-0.1-0.4c-0.1-0.1-0.2-0.2-0.5-0.3c-0.2-0.1-0.5-0.1-1-0.3c-0.7-0.2-1.2-0.4-1.5-0.6
+                       c-0.4-0.4-0.6-0.8-0.6-1.3c0-0.3,0.1-0.6,0.3-0.9c0.2-0.3,0.5-0.5,0.8-0.6c0.3-0.1,0.8-0.2,1.3-0.2c0.8,0,1.4,0.2,1.8,0.5
+                       c0.4,0.4,0.6,0.8,0.6,1.4l-1.3,0.1c-0.1-0.3-0.2-0.6-0.4-0.7c-0.2-0.1-0.5-0.2-0.8-0.2c-0.4,0-0.7,0.1-0.9,0.2
+                       c-0.1,0.1-0.2,0.2-0.2,0.4c0,0.2,0.1,0.3,0.2,0.4c0.2,0.1,0.6,0.3,1.2,0.4c0.6,0.1,1.1,0.3,1.4,0.5c0.3,0.2,0.5,0.4,0.7,0.7
+                       c0.2,0.3,0.3,0.6,0.3,1c0,0.4-0.1,0.7-0.3,1c-0.2,0.3-0.5,0.6-0.9,0.7c-0.4,0.2-0.8,0.2-1.4,0.2c-0.8,0-1.4-0.2-1.9-0.6
+                       C275.9,266.5,275.6,266,275.5,265.3z"/>
+               <path class="st5" d="M281.8,267.4V261h4.7v1.1h-3.5v1.4h3.2v1.1h-3.2v1.7h3.6v1.1H281.8z"/>
+               <path class="st5" d="M287.8,267.4V261h1.3v5.3h3.2v1.1H287.8z"/>
+               <path class="st5" d="M293.3,267.4V261h1.3v5.3h3.2v1.1H293.3z"/>
+       </g>
+       <g id="toivola-text-hover" class="toivola st16">
+               <path class="st5" d="M194,291.1v-5.3h-1.9v-1.1h5.1v1.1h-1.9v5.3H194z"/>
+               <path class="st5" d="M197.6,287.9c0-0.7,0.1-1.2,0.3-1.6c0.1-0.3,0.3-0.6,0.6-0.9c0.3-0.3,0.5-0.5,0.8-0.6
+                       c0.4-0.2,0.9-0.3,1.4-0.3c0.9,0,1.7,0.3,2.3,0.9s0.8,1.4,0.8,2.4c0,1-0.3,1.8-0.8,2.4c-0.6,0.6-1.3,0.9-2.3,0.9
+                       c-1,0-1.7-0.3-2.3-0.9C197.8,289.7,197.6,288.9,197.6,287.9z M198.9,287.9c0,0.7,0.2,1.3,0.5,1.6c0.3,0.4,0.8,0.6,1.3,0.6
+                       c0.5,0,0.9-0.2,1.3-0.6c0.3-0.4,0.5-0.9,0.5-1.7c0-0.7-0.2-1.3-0.5-1.6c-0.3-0.4-0.7-0.5-1.3-0.5c-0.5,0-1,0.2-1.3,0.5
+                       C199,286.6,198.9,287.1,198.9,287.9z"/>
+               <path class="st5" d="M204.7,291.1v-6.4h1.3v6.4H204.7z"/>
+               <path class="st5" d="M208.9,291.1l-2.3-6.4h1.4l1.6,4.7l1.6-4.7h1.4l-2.3,6.4H208.9z"/>
+               <path class="st5" d="M213,287.9c0-0.7,0.1-1.2,0.3-1.6c0.1-0.3,0.3-0.6,0.6-0.9c0.3-0.3,0.5-0.5,0.8-0.6c0.4-0.2,0.9-0.3,1.4-0.3
+                       c0.9,0,1.7,0.3,2.3,0.9s0.8,1.4,0.8,2.4c0,1-0.3,1.8-0.8,2.4c-0.6,0.6-1.3,0.9-2.3,0.9c-1,0-1.7-0.3-2.3-0.9
+                       C213.2,289.7,213,288.9,213,287.9z M214.3,287.9c0,0.7,0.2,1.3,0.5,1.6c0.3,0.4,0.8,0.6,1.3,0.6c0.5,0,0.9-0.2,1.3-0.6
+                       c0.3-0.4,0.5-0.9,0.5-1.7c0-0.7-0.2-1.3-0.5-1.6c-0.3-0.4-0.7-0.5-1.3-0.5c-0.5,0-1,0.2-1.3,0.5
+                       C214.4,286.6,214.3,287.1,214.3,287.9z"/>
+               <path class="st5" d="M220.2,291.1v-6.3h1.3v5.3h3.2v1.1H220.2z"/>
+               <path class="st5" d="M231.4,291.1H230l-0.6-1.5h-2.6l-0.5,1.5H225l2.5-6.4h1.4L231.4,291.1z M229,288.6l-0.9-2.4l-0.9,2.4H229z"/>
+       </g>
+       <g id="eagle-river-text-hover" class="eagle-river st16">
+               <path class="st5" d="M323.2,69.7v-6.4h4.7v1.1h-3.5v1.4h3.2v1.1h-3.2v1.7h3.6v1.1H323.2z"/>
+               <path class="st5" d="M334.9,69.7h-1.4l-0.6-1.5h-2.6l-0.5,1.5h-1.4l2.5-6.4h1.4L334.9,69.7z M332.5,67.2l-0.9-2.4l-0.9,2.4H332.5z
+                       "/>
+               <path class="st5" d="M338.6,67.4v-1.1h2.8v2.5c-0.3,0.3-0.7,0.5-1.2,0.7c-0.5,0.2-1,0.3-1.6,0.3c-0.7,0-1.3-0.1-1.8-0.4
+                       c-0.5-0.3-0.9-0.7-1.1-1.2c-0.3-0.5-0.4-1.1-0.4-1.7c0-0.7,0.1-1.3,0.4-1.8s0.7-0.9,1.2-1.2c0.4-0.2,0.9-0.3,1.5-0.3
+                       c0.8,0,1.4,0.2,1.9,0.5c0.4,0.3,0.7,0.8,0.9,1.4l-1.3,0.2c-0.1-0.3-0.3-0.6-0.5-0.7c-0.2-0.2-0.6-0.3-0.9-0.3
+                       c-0.6,0-1,0.2-1.3,0.5c-0.3,0.4-0.5,0.9-0.5,1.6c0,0.8,0.2,1.3,0.5,1.7c0.3,0.4,0.8,0.6,1.3,0.6c0.3,0,0.5-0.1,0.8-0.2
+                       c0.3-0.1,0.5-0.2,0.7-0.4v-0.8H338.6z"/>
+               <path class="st5" d="M342.6,69.7v-6.3h1.3v5.3h3.2v1.1H342.6z"/>
+               <path class="st5" d="M348,69.7v-6.4h4.7v1.1h-3.5v1.4h3.2v1.1h-3.2v1.7h3.6v1.1H348z"/>
+               <path class="st5" d="M356.5,69.7v-6.4h2.7c0.7,0,1.2,0.1,1.5,0.2c0.3,0.1,0.6,0.3,0.7,0.6c0.2,0.3,0.3,0.6,0.3,1
+                       c0,0.5-0.1,0.9-0.4,1.2c-0.3,0.3-0.7,0.5-1.3,0.6c0.3,0.2,0.5,0.3,0.7,0.5s0.4,0.5,0.7,1l0.8,1.2h-1.5l-0.9-1.4
+                       c-0.3-0.5-0.6-0.8-0.7-0.9c-0.1-0.1-0.3-0.2-0.4-0.3c-0.1,0-0.4-0.1-0.7-0.1h-0.3v2.7H356.5z M357.8,66h1c0.6,0,1,0,1.2-0.1
+                       s0.3-0.1,0.4-0.3c0.1-0.1,0.1-0.3,0.1-0.5c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.5-0.3c-0.1,0-0.4,0-0.9,0h-1V66z"/>
+               <path class="st5" d="M362.9,69.7v-6.4h1.3v6.4H362.9z"/>
+               <path class="st5" d="M367.1,69.7l-2.3-6.4h1.4l1.6,4.7l1.6-4.7h1.4l-2.3,6.4H367.1z"/>
+               <path class="st5" d="M371.4,69.7v-6.4h4.7v1.1h-3.5v1.4h3.2v1.1h-3.2v1.7h3.6v1.1H371.4z"/>
+               <path class="st5" d="M377.3,69.7v-6.4h2.7c0.7,0,1.2,0.1,1.5,0.2c0.3,0.1,0.6,0.3,0.7,0.6c0.2,0.3,0.3,0.6,0.3,1
+                       c0,0.5-0.1,0.9-0.4,1.2c-0.3,0.3-0.7,0.5-1.3,0.6c0.3,0.2,0.5,0.3,0.7,0.5c0.2,0.2,0.4,0.5,0.7,1l0.8,1.2h-1.5l-0.9-1.4
+                       c-0.3-0.5-0.6-0.8-0.7-0.9s-0.3-0.2-0.4-0.3c-0.1,0-0.4-0.1-0.7-0.1h-0.3v2.7H377.3z M378.6,66h1c0.6,0,1,0,1.2-0.1
+                       c0.2-0.1,0.3-0.1,0.4-0.3c0.1-0.1,0.1-0.3,0.1-0.5c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.5-0.3c-0.1,0-0.4,0-0.9,0h-1V66z"/>
+       </g>
+       <g id="eagle-harbor-text-hover" class="eagle-harbor st16">
+               <path class="st5" d="M359,45.5v-6.4h4.7v1.1h-3.5v1.4h3.2v1.1h-3.2v1.7h3.6v1.1H359z"/>
+               <path class="st5" d="M370.7,45.5h-1.4l-0.6-1.5h-2.6l-0.5,1.5h-1.4l2.5-6.4h1.4L370.7,45.5z M368.3,43l-0.9-2.4l-0.9,2.4H368.3z"
+                       />
+               <path class="st5" d="M374.4,43.2v-1.1h2.8v2.5c-0.3,0.3-0.7,0.5-1.2,0.7c-0.5,0.2-1,0.3-1.6,0.3c-0.7,0-1.3-0.1-1.8-0.4
+                       c-0.5-0.3-0.9-0.7-1.1-1.2c-0.3-0.5-0.4-1.1-0.4-1.7c0-0.7,0.1-1.3,0.4-1.8c0.3-0.5,0.7-0.9,1.2-1.2c0.4-0.2,0.9-0.3,1.5-0.3
+                       c0.8,0,1.4,0.2,1.9,0.5c0.4,0.3,0.7,0.8,0.9,1.4l-1.3,0.2c-0.1-0.3-0.3-0.6-0.5-0.7c-0.3-0.2-0.6-0.3-0.9-0.3
+                       c-0.6,0-1,0.2-1.3,0.5c-0.3,0.4-0.5,0.9-0.5,1.6c0,0.8,0.2,1.3,0.5,1.7c0.3,0.4,0.8,0.6,1.3,0.6c0.3,0,0.5-0.1,0.8-0.2
+                       c0.3-0.1,0.5-0.2,0.7-0.4v-0.8H374.4z"/>
+               <path class="st5" d="M378.4,45.5v-6.3h1.3v5.3h3.2v1.1H378.4z"/>
+               <path class="st5" d="M383.8,45.5v-6.4h4.7v1.1h-3.5v1.4h3.2v1.1h-3.2v1.7h3.6v1.1H383.8z"/>
+               <path class="st5" d="M392.3,45.5v-6.4h1.3v2.5h2.5v-2.5h1.3v6.4h-1.3v-2.8h-2.5v2.8H392.3z"/>
+               <path class="st5" d="M404.5,45.5h-1.4l-0.6-1.5H400l-0.5,1.5h-1.4l2.5-6.4h1.4L404.5,45.5z M402.1,43l-0.9-2.4l-0.9,2.4H402.1z"/>
+               <path class="st5" d="M405.2,45.5v-6.4h2.7c0.7,0,1.2,0.1,1.5,0.2c0.3,0.1,0.6,0.3,0.7,0.6s0.3,0.6,0.3,1c0,0.5-0.1,0.9-0.4,1.2
+                       c-0.3,0.3-0.7,0.5-1.3,0.6c0.3,0.2,0.5,0.3,0.7,0.5c0.2,0.2,0.4,0.5,0.7,1l0.8,1.2h-1.5l-0.9-1.4c-0.3-0.5-0.6-0.8-0.7-0.9
+                       c-0.1-0.1-0.3-0.2-0.4-0.3c-0.1,0-0.4-0.1-0.7-0.1h-0.3v2.7H405.2z M406.5,41.8h1c0.6,0,1,0,1.2-0.1c0.2-0.1,0.3-0.1,0.4-0.3
+                       c0.1-0.1,0.1-0.3,0.1-0.5c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.5-0.3c-0.1,0-0.4,0-0.9,0h-1V41.8z"/>
+               <path class="st5" d="M411.6,39.1h2.6c0.5,0,0.9,0,1.1,0.1c0.2,0,0.5,0.1,0.7,0.3c0.2,0.1,0.4,0.3,0.5,0.5c0.1,0.2,0.2,0.5,0.2,0.7
+                       c0,0.3-0.1,0.6-0.2,0.8c-0.2,0.3-0.4,0.4-0.7,0.6c0.4,0.1,0.7,0.3,0.9,0.6s0.3,0.6,0.3,1c0,0.3-0.1,0.6-0.2,0.8
+                       c-0.1,0.3-0.3,0.5-0.6,0.7c-0.2,0.2-0.5,0.3-0.9,0.3c-0.2,0-0.7,0-1.6,0h-2.2V39.1z M412.9,40.2v1.5h0.8c0.5,0,0.8,0,0.9,0
+                       c0.2,0,0.4-0.1,0.5-0.2c0.1-0.1,0.2-0.3,0.2-0.5c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.5-0.2c-0.1,0-0.5,0-1.1,0H412.9z
+                        M412.9,42.7v1.7h1.2c0.5,0,0.8,0,0.9,0c0.2,0,0.3-0.1,0.5-0.3c0.1-0.1,0.2-0.3,0.2-0.5c0-0.2,0-0.4-0.1-0.5s-0.2-0.2-0.4-0.3
+                       c-0.2-0.1-0.6-0.1-1.1-0.1H412.9z"/>
+               <path class="st5" d="M417.8,42.4c0-0.7,0.1-1.2,0.3-1.6c0.1-0.3,0.3-0.6,0.6-0.9c0.3-0.3,0.5-0.5,0.8-0.6c0.4-0.2,0.9-0.3,1.4-0.3
+                       c0.9,0,1.7,0.3,2.3,0.9c0.6,0.6,0.8,1.4,0.8,2.4c0,1-0.3,1.8-0.8,2.4c-0.6,0.6-1.3,0.9-2.3,0.9c-1,0-1.7-0.3-2.3-0.9
+                       C418.1,44.2,417.8,43.4,417.8,42.4z M419.1,42.3c0,0.7,0.2,1.3,0.5,1.6c0.3,0.4,0.8,0.6,1.3,0.6c0.5,0,0.9-0.2,1.3-0.6
+                       c0.3-0.4,0.5-0.9,0.5-1.7c0-0.7-0.2-1.3-0.5-1.6c-0.3-0.4-0.7-0.5-1.3-0.5c-0.5,0-1,0.2-1.3,0.5C419.3,41,419.1,41.6,419.1,42.3z"
+                       />
+               <path class="st5" d="M425,45.5v-6.4h2.7c0.7,0,1.2,0.1,1.5,0.2c0.3,0.1,0.6,0.3,0.7,0.6c0.2,0.3,0.3,0.6,0.3,1
+                       c0,0.5-0.1,0.9-0.4,1.2c-0.3,0.3-0.7,0.5-1.3,0.6c0.3,0.2,0.5,0.3,0.7,0.5c0.2,0.2,0.4,0.5,0.7,1l0.8,1.2h-1.5l-0.9-1.4
+                       c-0.3-0.5-0.6-0.8-0.7-0.9c-0.1-0.1-0.3-0.2-0.4-0.3c-0.1,0-0.4-0.1-0.7-0.1h-0.3v2.7H425z M426.3,41.8h1c0.6,0,1,0,1.2-0.1
+                       c0.2-0.1,0.3-0.1,0.4-0.3c0.1-0.1,0.1-0.3,0.1-0.5c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.5-0.3c-0.1,0-0.4,0-0.9,0h-1V41.8z"
+                       />
+       </g>
+       <g id="copper-harbor-text-hover" class="copper-harbor st16">
+               <g>
+                       <path class="st5" d="M526.9,34.5l1.3,0.4c-0.2,0.7-0.5,1.2-1,1.6c-0.4,0.3-1,0.5-1.7,0.5c-0.8,0-1.5-0.3-2.1-0.9
+                               c-0.5-0.6-0.8-1.4-0.8-2.4c0-1.1,0.3-1.9,0.8-2.5c0.6-0.6,1.3-0.9,2.2-0.9c0.8,0,1.4,0.2,1.9,0.7c0.3,0.3,0.5,0.7,0.7,1.2
+                               l-1.3,0.3c-0.1-0.3-0.2-0.6-0.5-0.8c-0.2-0.2-0.5-0.3-0.9-0.3c-0.5,0-0.9,0.2-1.2,0.5c-0.3,0.3-0.4,0.9-0.4,1.7
+                               c0,0.8,0.1,1.4,0.4,1.7c0.3,0.3,0.7,0.5,1.1,0.5c0.3,0,0.6-0.1,0.9-0.3C526.6,35.3,526.8,35,526.9,34.5z"/>
+                       <path class="st5" d="M529,33.7c0-0.7,0.1-1.2,0.3-1.6c0.1-0.3,0.3-0.6,0.6-0.9c0.3-0.3,0.5-0.5,0.8-0.6c0.4-0.2,0.9-0.3,1.4-0.3
+                               c0.9,0,1.7,0.3,2.3,0.9c0.6,0.6,0.8,1.4,0.8,2.4c0,1-0.3,1.8-0.8,2.4c-0.6,0.6-1.3,0.9-2.3,0.9c-1,0-1.7-0.3-2.3-0.9
+                               C529.3,35.5,529,34.7,529,33.7z M530.4,33.7c0,0.7,0.2,1.3,0.5,1.6c0.3,0.4,0.8,0.6,1.3,0.6c0.5,0,0.9-0.2,1.3-0.6
+                               c0.3-0.4,0.5-0.9,0.5-1.7c0-0.7-0.2-1.3-0.5-1.6c-0.3-0.4-0.7-0.5-1.3-0.5c-0.5,0-1,0.2-1.3,0.5
+                               C530.5,32.4,530.4,32.9,530.4,33.7z"/>
+                       <path class="st5" d="M536.2,36.9v-6.4h2.1c0.8,0,1.3,0,1.5,0.1c0.4,0.1,0.7,0.3,0.9,0.6c0.2,0.3,0.4,0.7,0.4,1.2
+                               c0,0.4-0.1,0.7-0.2,1c-0.1,0.3-0.3,0.5-0.5,0.6c-0.2,0.2-0.4,0.3-0.7,0.3c-0.3,0.1-0.8,0.1-1.3,0.1h-0.8v2.4H536.2z M537.5,31.5
+                               v1.8h0.7c0.5,0,0.8,0,1-0.1c0.2-0.1,0.3-0.2,0.4-0.3c0.1-0.1,0.1-0.3,0.1-0.5c0-0.2-0.1-0.4-0.2-0.6c-0.1-0.2-0.3-0.2-0.5-0.3
+                               c-0.2,0-0.5,0-0.9,0H537.5z"/>
+                       <path class="st5" d="M542.2,36.9v-6.4h2.1c0.8,0,1.3,0,1.5,0.1c0.4,0.1,0.7,0.3,0.9,0.6c0.2,0.3,0.4,0.7,0.4,1.2
+                               c0,0.4-0.1,0.7-0.2,1c-0.1,0.3-0.3,0.5-0.5,0.6c-0.2,0.2-0.4,0.3-0.7,0.3c-0.3,0.1-0.8,0.1-1.3,0.1h-0.8v2.4H542.2z M543.5,31.5
+                               v1.8h0.7c0.5,0,0.8,0,1-0.1c0.2-0.1,0.3-0.2,0.4-0.3c0.1-0.1,0.1-0.3,0.1-0.5c0-0.2-0.1-0.4-0.2-0.6c-0.1-0.2-0.3-0.2-0.5-0.3
+                               c-0.2,0-0.5,0-0.9,0H543.5z"/>
+                       <path class="st5" d="M548.2,36.9v-6.4h4.7v1.1h-3.5V33h3.2V34h-3.2v1.7h3.6v1.1H548.2z"/>
+                       <path class="st5" d="M554.1,36.9v-6.4h2.7c0.7,0,1.2,0.1,1.5,0.2c0.3,0.1,0.6,0.3,0.7,0.6c0.2,0.3,0.3,0.6,0.3,1
+                               c0,0.5-0.1,0.9-0.4,1.2c-0.3,0.3-0.7,0.5-1.3,0.6c0.3,0.2,0.5,0.3,0.7,0.5c0.2,0.2,0.4,0.5,0.7,1l0.8,1.2h-1.5l-0.9-1.4
+                               c-0.3-0.5-0.6-0.8-0.7-0.9c-0.1-0.1-0.3-0.2-0.4-0.3c-0.1,0-0.4-0.1-0.7-0.1h-0.3v2.7H554.1z M555.4,33.2h1c0.6,0,1,0,1.2-0.1
+                               c0.2-0.1,0.3-0.1,0.4-0.3c0.1-0.1,0.1-0.3,0.1-0.5c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.5-0.3c-0.1,0-0.4,0-0.9,0h-1V33.2z"
+                               />
+                       <path class="st5" d="M563.1,36.9v-6.4h1.3V33h2.5v-2.5h1.3v6.4h-1.3v-2.8h-2.5v2.8H563.1z"/>
+                       <path class="st5" d="M575.3,36.9h-1.4l-0.6-1.5h-2.6l-0.5,1.5h-1.4l2.5-6.4h1.4L575.3,36.9z M572.9,34.3L572,32l-0.9,2.4H572.9z"
+                               />
+                       <path class="st5" d="M576,36.9v-6.4h2.7c0.7,0,1.2,0.1,1.5,0.2c0.3,0.1,0.6,0.3,0.7,0.6c0.2,0.3,0.3,0.6,0.3,1
+                               c0,0.5-0.1,0.9-0.4,1.2c-0.3,0.3-0.7,0.5-1.3,0.6c0.3,0.2,0.5,0.3,0.7,0.5c0.2,0.2,0.4,0.5,0.7,1l0.8,1.2h-1.5l-0.9-1.4
+                               c-0.3-0.5-0.6-0.8-0.7-0.9c-0.1-0.1-0.3-0.2-0.4-0.3c-0.1,0-0.4-0.1-0.7-0.1h-0.3v2.7H576z M577.3,33.2h1c0.6,0,1,0,1.2-0.1
+                               c0.2-0.1,0.3-0.1,0.4-0.3c0.1-0.1,0.1-0.3,0.1-0.5c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.5-0.3c-0.1,0-0.4,0-0.9,0h-1V33.2z"
+                               />
+                       <path class="st5" d="M582.4,30.5h2.6c0.5,0,0.9,0,1.1,0.1c0.2,0,0.5,0.1,0.7,0.3c0.2,0.1,0.4,0.3,0.5,0.5
+                               c0.1,0.2,0.2,0.5,0.2,0.7c0,0.3-0.1,0.6-0.2,0.8c-0.2,0.3-0.4,0.4-0.7,0.6c0.4,0.1,0.7,0.3,0.9,0.6c0.2,0.3,0.3,0.6,0.3,1
+                               c0,0.3-0.1,0.6-0.2,0.8c-0.1,0.3-0.3,0.5-0.6,0.7c-0.2,0.2-0.5,0.3-0.9,0.3c-0.2,0-0.7,0-1.6,0h-2.2V30.5z M583.7,31.5V33h0.8
+                               c0.5,0,0.8,0,0.9,0c0.2,0,0.4-0.1,0.5-0.2c0.1-0.1,0.2-0.3,0.2-0.5c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.5-0.2
+                               c-0.1,0-0.5,0-1.1,0H583.7z M583.7,34.1v1.7h1.2c0.5,0,0.8,0,0.9,0c0.2,0,0.3-0.1,0.5-0.3c0.1-0.1,0.2-0.3,0.2-0.5
+                               c0-0.2,0-0.4-0.1-0.5s-0.2-0.2-0.4-0.3c-0.2-0.1-0.6-0.1-1.1-0.1H583.7z"/>
+                       <path class="st5" d="M588.6,33.7c0-0.7,0.1-1.2,0.3-1.6c0.1-0.3,0.3-0.6,0.6-0.9c0.3-0.3,0.5-0.5,0.8-0.6
+                               c0.4-0.2,0.9-0.3,1.4-0.3c0.9,0,1.7,0.3,2.3,0.9c0.6,0.6,0.8,1.4,0.8,2.4c0,1-0.3,1.8-0.8,2.4c-0.6,0.6-1.3,0.9-2.3,0.9
+                               c-1,0-1.7-0.3-2.3-0.9C588.9,35.5,588.6,34.7,588.6,33.7z M590,33.7c0,0.7,0.2,1.3,0.5,1.6c0.3,0.4,0.8,0.6,1.3,0.6
+                               c0.5,0,0.9-0.2,1.3-0.6c0.3-0.4,0.5-0.9,0.5-1.7c0-0.7-0.2-1.3-0.5-1.6c-0.3-0.4-0.7-0.5-1.3-0.5c-0.5,0-1,0.2-1.3,0.5
+                               C590.1,32.4,590,32.9,590,33.7z"/>
+                       <path class="st5" d="M595.9,36.9v-6.4h2.7c0.7,0,1.2,0.1,1.5,0.2c0.3,0.1,0.6,0.3,0.7,0.6c0.2,0.3,0.3,0.6,0.3,1
+                               c0,0.5-0.1,0.9-0.4,1.2S600,34,599.4,34c0.3,0.2,0.5,0.3,0.7,0.5c0.2,0.2,0.4,0.5,0.7,1l0.8,1.2h-1.5l-0.9-1.4
+                               c-0.3-0.5-0.6-0.8-0.7-0.9c-0.1-0.1-0.3-0.2-0.4-0.3c-0.1,0-0.4-0.1-0.7-0.1h-0.3v2.7H595.9z M597.2,33.2h1c0.6,0,1,0,1.2-0.1
+                               c0.2-0.1,0.3-0.1,0.4-0.3c0.1-0.1,0.1-0.3,0.1-0.5c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.5-0.3c-0.1,0-0.4,0-0.9,0h-1V33.2z"
+                               />
+               </g>
+       </g>
+       <g id="hancock-text-hover" class="hancock st16">
+               <path class="st5" d="M274.7,207.7v-6.4h1.3v2.5h2.5v-2.5h1.3v6.4h-1.3v-2.8H276v2.8H274.7z"/>
+               <path class="st5" d="M286.9,207.7h-1.4l-0.6-1.5h-2.6l-0.5,1.5h-1.4l2.5-6.4h1.4L286.9,207.7z M284.6,205.1l-0.9-2.4l-0.9,2.4
+                       H284.6z"/>
+               <path class="st5" d="M287.6,207.7v-6.4h1.3l2.6,4.3v-4.3h1.2v6.4h-1.3l-2.6-4.2v4.2H287.6z"/>
+               <path class="st5" d="M298.2,205.3l1.3,0.4c-0.2,0.7-0.5,1.2-1,1.6c-0.4,0.3-1,0.5-1.7,0.5c-0.8,0-1.5-0.3-2.1-0.9
+                       c-0.5-0.6-0.8-1.4-0.8-2.4c0-1.1,0.3-1.9,0.8-2.5c0.6-0.6,1.3-0.9,2.2-0.9c0.8,0,1.4,0.2,1.9,0.7c0.3,0.3,0.5,0.7,0.7,1.2
+                       l-1.3,0.3c-0.1-0.3-0.2-0.6-0.5-0.8c-0.2-0.2-0.5-0.3-0.9-0.3c-0.5,0-0.9,0.2-1.2,0.5c-0.3,0.3-0.4,0.9-0.4,1.7
+                       c0,0.8,0.1,1.4,0.4,1.7c0.3,0.3,0.7,0.5,1.1,0.5c0.3,0,0.6-0.1,0.9-0.3C297.9,206.1,298.1,205.8,298.2,205.3z"/>
+               <path class="st5" d="M300.3,204.5c0-0.7,0.1-1.2,0.3-1.6c0.1-0.3,0.3-0.6,0.6-0.9s0.5-0.5,0.8-0.6c0.4-0.2,0.9-0.3,1.4-0.3
+                       c0.9,0,1.7,0.3,2.3,0.9c0.6,0.6,0.8,1.4,0.8,2.4c0,1-0.3,1.8-0.8,2.4c-0.6,0.6-1.3,0.9-2.3,0.9c-1,0-1.7-0.3-2.3-0.9
+                       C300.6,206.3,300.3,205.5,300.3,204.5z M301.6,204.5c0,0.7,0.2,1.3,0.5,1.6c0.3,0.4,0.8,0.6,1.3,0.6c0.5,0,0.9-0.2,1.3-0.6
+                       c0.3-0.4,0.5-0.9,0.5-1.7c0-0.7-0.2-1.3-0.5-1.6c-0.3-0.4-0.7-0.5-1.3-0.5c-0.5,0-1,0.2-1.3,0.5
+                       C301.8,203.2,301.6,203.7,301.6,204.5z"/>
+               <path class="st5" d="M311.6,205.3l1.3,0.4c-0.2,0.7-0.5,1.2-1,1.6c-0.4,0.3-1,0.5-1.7,0.5c-0.8,0-1.5-0.3-2.1-0.9
+                       c-0.5-0.6-0.8-1.4-0.8-2.4c0-1.1,0.3-1.9,0.8-2.5c0.6-0.6,1.3-0.9,2.2-0.9c0.8,0,1.4,0.2,1.9,0.7c0.3,0.3,0.5,0.7,0.7,1.2
+                       l-1.3,0.3c-0.1-0.3-0.2-0.6-0.5-0.8c-0.2-0.2-0.5-0.3-0.9-0.3c-0.5,0-0.9,0.2-1.2,0.5c-0.3,0.3-0.4,0.9-0.4,1.7
+                       c0,0.8,0.1,1.4,0.4,1.7c0.3,0.3,0.7,0.5,1.1,0.5c0.3,0,0.6-0.1,0.9-0.3C311.3,206.1,311.5,205.8,311.6,205.3z"/>
+               <path class="st5" d="M314,207.7v-6.4h1.3v2.8l2.6-2.8h1.7l-2.4,2.5l2.5,3.9h-1.7l-1.8-3l-1,1.1v1.9H314z"/>
+       </g>
+       <g id="houghton-text-hover" class="houghton st16">
+               <path class="st5" d="M247.1,230.2v-6.4h1.3v2.5h2.5v-2.5h1.3v6.4h-1.3v-2.8h-2.5v2.8H247.1z"/>
+               <path class="st5" d="M253.3,227.1c0-0.7,0.1-1.2,0.3-1.6c0.1-0.3,0.3-0.6,0.6-0.9c0.3-0.3,0.5-0.5,0.8-0.6
+                       c0.4-0.2,0.9-0.3,1.4-0.3c0.9,0,1.7,0.3,2.3,0.9s0.8,1.4,0.8,2.4c0,1-0.3,1.8-0.8,2.4c-0.6,0.6-1.3,0.9-2.3,0.9
+                       c-1,0-1.7-0.3-2.3-0.9C253.5,228.9,253.3,228.1,253.3,227.1z M254.6,227c0,0.7,0.2,1.3,0.5,1.6c0.3,0.4,0.8,0.6,1.3,0.6
+                       s0.9-0.2,1.3-0.6c0.3-0.4,0.5-0.9,0.5-1.7c0-0.7-0.2-1.3-0.5-1.6c-0.3-0.4-0.7-0.5-1.3-0.5c-0.5,0-1,0.2-1.3,0.5
+                       C254.8,225.7,254.6,226.3,254.6,227z"/>
+               <path class="st5" d="M260.5,223.8h1.3v3.5c0,0.6,0,0.9,0,1.1c0.1,0.3,0.2,0.5,0.4,0.6c0.2,0.2,0.5,0.2,0.9,0.2
+                       c0.4,0,0.6-0.1,0.8-0.2c0.2-0.1,0.3-0.3,0.3-0.6c0-0.2,0.1-0.6,0.1-1.1v-3.5h1.3v3.4c0,0.8,0,1.3-0.1,1.6
+                       c-0.1,0.3-0.2,0.6-0.4,0.8c-0.2,0.2-0.4,0.4-0.8,0.5c-0.3,0.1-0.7,0.2-1.2,0.2c-0.6,0-1.1-0.1-1.4-0.2c-0.3-0.1-0.6-0.3-0.7-0.6
+                       c-0.2-0.2-0.3-0.5-0.4-0.7c-0.1-0.4-0.1-0.9-0.1-1.6V223.8z"/>
+               <path class="st5" d="M269.9,227.9v-1.1h2.8v2.5c-0.3,0.3-0.7,0.5-1.2,0.7c-0.5,0.2-1,0.3-1.6,0.3c-0.7,0-1.3-0.1-1.8-0.4
+                       c-0.5-0.3-0.9-0.7-1.1-1.2c-0.3-0.5-0.4-1.1-0.4-1.7c0-0.7,0.1-1.3,0.4-1.8c0.3-0.5,0.7-0.9,1.2-1.2c0.4-0.2,0.9-0.3,1.5-0.3
+                       c0.8,0,1.4,0.2,1.9,0.5c0.4,0.3,0.7,0.8,0.9,1.4l-1.3,0.2c-0.1-0.3-0.3-0.6-0.5-0.7c-0.2-0.2-0.6-0.3-0.9-0.3
+                       c-0.6,0-1,0.2-1.3,0.5c-0.3,0.4-0.5,0.9-0.5,1.6c0,0.8,0.2,1.3,0.5,1.7c0.3,0.4,0.8,0.6,1.3,0.6c0.3,0,0.5-0.1,0.8-0.2
+                       c0.3-0.1,0.5-0.2,0.7-0.4v-0.8H269.9z"/>
+               <path class="st5" d="M273.9,230.2v-6.4h1.3v2.5h2.5v-2.5h1.3v6.4h-1.3v-2.8h-2.5v2.8H273.9z"/>
+               <path class="st5" d="M281.8,230.2v-5.3h-1.9v-1.1h5.1v1.1h-1.9v5.3H281.8z"/>
+               <path class="st5" d="M285.5,227.1c0-0.7,0.1-1.2,0.3-1.6c0.1-0.3,0.3-0.6,0.6-0.9c0.3-0.3,0.5-0.5,0.8-0.6
+                       c0.4-0.2,0.9-0.3,1.4-0.3c0.9,0,1.7,0.3,2.3,0.9s0.8,1.4,0.8,2.4c0,1-0.3,1.8-0.8,2.4c-0.6,0.6-1.3,0.9-2.3,0.9
+                       c-1,0-1.7-0.3-2.3-0.9C285.8,228.9,285.5,228.1,285.5,227.1z M286.9,227c0,0.7,0.2,1.3,0.5,1.6c0.3,0.4,0.8,0.6,1.3,0.6
+                       s0.9-0.2,1.3-0.6c0.3-0.4,0.5-0.9,0.5-1.7c0-0.7-0.2-1.3-0.5-1.6c-0.3-0.4-0.7-0.5-1.3-0.5s-1,0.2-1.3,0.5
+                       C287,225.7,286.9,226.3,286.9,227z"/>
+               <path class="st5" d="M292.8,230.2v-6.4h1.3l2.6,4.3v-4.3h1.2v6.4h-1.3l-2.6-4.2v4.2H292.8z"/>
+       </g>
+</g>
+<g id="Layer_5">
+       <rect id="toivola-rect" x="191.4" y="284.1" class="toivola city-region st39" width="40.4" height="7.6"/>
+       <rect id="chassell-rect" x="250.1" y="260.5" class="chassell city-region st39" width="48.2" height="7.6"/>
+       <rect id="houghton-rect" x="246.5" y="223.3" class="houghton city-region st39" width="52" height="7.6"/>
+       <rect id="hancock-rect" x="274.1" y="200.7" class="hancock city-region st39" width="46.2" height="7.6"/>
+       <rect id="laurium-rect" x="342.9" y="162.6" class="laurium city-region st39" width="40.9" height="7.6"/>
+       <rect id="calumet-rect" x="301.9" y="140.9" class="calumet city-region st39" width="44.2" height="7.6"/>
+       <rect id="lac-la-belle-rect" x="412.5" y="78.9" class="lac-la-belle city-region st39" width="64.1" height="7.6"/>
+       <rect id='eagle-river-rect' x="322.6" y="62.7" class="eagle-river city-region st39" width="61" height="7.6"/>
+       <rect id='eagle-harbor-rect' x="358.1" y="38.6" class="eagle-harbor city-region st39" width="73.2" height="7.6"/>
+       <rect id='bete-grise-rect' x="503.8" y="88.3" class="bete-grise city-region st39" width="54.3" height="7.6"/>
+       <rect id='copper-harbor-rect' x="522.4" y="29.9" class="copper-harbor city-region st39" width="79.8" height="7.6"/>
+</g>
+</svg>
diff --git a/parts/client-info-offcanvas.php b/parts/client-info-offcanvas.php
new file mode 100644 (file)
index 0000000..2faceb8
--- /dev/null
@@ -0,0 +1,30 @@
+                        <?php if (function_exists('glm_get_clientinfo_option')) :?>
+                            <ul id="left-off-canvas-client-info">
+                                <li><?php echo glm_get_clientinfo_option('businessName');?></li>
+                                <?php if (glm_get_clientinfo_option('address')):?>
+                                    <li><?php echo glm_get_clientinfo_option('address');?></li>
+                                    <li><?php echo glm_get_clientinfo_option('city');?>, <?php echo glm_get_clientinfo_option('state');?>
+                                        <?php echo glm_get_clientinfo_option('zip');?></li>
+                                <?php endif;?>
+                                <?php if (glm_get_clientinfo_option('address2')):?>
+                                    <li><?php echo glm_get_clientinfo_option('address2');?></li>
+                                    <li><?php echo glm_get_clientinfo_option('city2');?>, <?php echo glm_get_clientinfo_option('state2');?>
+                                        <?php echo glm_get_clientinfo_option('zip2');?></li>
+                                <?php endif;?>
+                                <?php if (glm_get_clientinfo_option('phone')) :?>
+                                    <li><?php echo glm_get_clientinfo_option('phone');?></li>
+                                <?php endif;?>
+                                <?php if (glm_get_clientinfo_option('phone2')) :?>
+                                    <li><?php echo glm_get_clientinfo_option('phone2');?></li>
+                                <?php endif;?>
+                                <?php if (glm_get_clientinfo_option('email')) :?>
+                                    <li><?php echo glm_get_clientinfo_option('email');?></li>
+                                <?php endif;?>
+                                <?php if (glm_get_clientinfo_option('fax')) :?>
+                                    <li><?php echo glm_get_clientinfo_option('fax');?></li>
+                                <?php endif;?>
+                                <?php if (glm_get_clientinfo_option('extra')) :?>
+                                    <li><?php echo glm_get_clientinfo_option('extra');?></li>
+                                <?php endif;?>
+                            </ul>
+                            <?php endif;?>
\ No newline at end of file
diff --git a/parts/event-feed.php b/parts/event-feed.php
new file mode 100644 (file)
index 0000000..f66e3a3
--- /dev/null
@@ -0,0 +1 @@
+<?php echo do_shortcode('[glm-members-event-list template="eventsFeed.html" featured="True" group_by_day="False"]');?>
diff --git a/parts/footer-svg-section.php b/parts/footer-svg-section.php
new file mode 100644 (file)
index 0000000..e6d7b50
--- /dev/null
@@ -0,0 +1,4 @@
+<div>
+    <?php // include 'city-map.php'; ?>
+    <img src="<?php echo get_template_directory_uri(); ?>/assets/Footer Graphic.svg">
+</div>
diff --git a/parts/glm-blocks.php b/parts/glm-blocks.php
new file mode 100644 (file)
index 0000000..a69e6ea
--- /dev/null
@@ -0,0 +1,58 @@
+<?php if(function_exists('fetch_all_glm_blocks')):?>
+<?php $blocks = fetch_all_glm_blocks();?>
+<div class="glm-blocks-container row">
+    <?php foreach ($blocks as $block):?>
+    <div class="text-center small-12 medium-4 columns large-text-left glm-block">
+        <?php if ($block->post_name == 'view-our-videos') { ?>
+
+        <?php // FOR VIDEO BLOCK ?>
+            <?php if($block->url) { ?>
+                <a class="glm-block-image various fancybox ngg-fancybox iframe" href=""<?php if($block->externalUrl){echo ' target="_blank"';}?>>
+            <?php } ?>
+
+            <?php if($block->url) { ?>
+                </a>
+                <a class="glm-block-image" data-fancybox data-type="iframe" data-src="<?php echo $block->url;?>" href="javascript:;">
+                    <?php echo get_the_post_thumbnail($block->ID, 'glm-block-image');?>
+                </a>
+                <!-- Arrow already supplied by image. Uncomment to get a css-arrow over the image-->
+<!--                <div class="glm-block-video-arrow"></div>-->
+            <?php } ?>
+            <?php if($block->url) { ?>
+                <a class="glm-block-title" href="<?php echo get_permalink(get_page_by_path("about-us/videos")); ?>">
+            <?php } ?>
+                    <h1><?php echo $block->post_title;?></h1>
+            <?php if($block->url) { ?>
+                </a>
+            <?php } ?>
+<!--            <p><?php // echo apply_filters('the_content', $block->post_content) . $block->post_excerpt;?></p>-->
+            <?php if($block->url) { ?>
+                <a class="glm-block-readmore" href="<?php echo $block->url;?>"></a>
+            <?php } ?>
+        <?php } else { ?>
+
+        <?php // FOR NON-VIDEO BLOCKS ?>
+            <?php if($block->url) { ?>
+                <a class="glm-block-image" href="<?php echo $block->url;?>"<?php if($block->externalUrl){echo ' target="_blank"';}?>>
+            <?php } ?>
+            <?php echo get_the_post_thumbnail($block->ID, 'glm-block-image');?>
+            <?php if($block->url) { ?>
+                </a>
+            <?php } ?>
+            <?php if($block->url) { ?>
+                <a class="glm-block-title" href="<?php echo $block->url;?>"<?php if($block->externalUrl){echo ' target="_blank"';}?>>
+            <?php } ?>
+                    <h1><?php echo $block->post_title;?></h1>
+            <?php if($block->url) { ?>
+                </a>
+            <?php } ?>
+<!--            <p><?php // echo apply_filters('the_content', $block->post_content) . $block->post_excerpt;?></p>-->
+            <?php if($block->url) { ?>
+                <a class="glm-block-readmore" href="<?php echo $block->url;?>"></a>
+            <?php } ?>
+        <?php } ?>
+    </div>
+    <?php endforeach;?>
+</div>
+<!--<div class="separator"><hr></div>-->
+<?php endif;?>
diff --git a/parts/glm-client-info.php b/parts/glm-client-info.php
deleted file mode 100644 (file)
index 8c03584..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-<div id="footer_address">
-    <?php if (function_exists('glm_get_clientinfo_option')) :?>
-        <div class="location_1 address-container medium-6 columns">
-        <?php if (glm_get_clientinfo_option('businessName')) :?>
-                <span class="businessName"><?php echo glm_get_clientinfo_option('businessName');?></span> <br>
-            <?php endif;?>
-            <?php if (glm_get_clientinfo_option('address')):?>
-                <span class="address_1_street"><?php echo glm_get_clientinfo_option('address');?></span>
-                <span class="pipe">&nbsp; | &nbsp;</span>
-                <span class="address_1_region"><?php echo glm_get_clientinfo_option('city');?>, <?php echo glm_get_clientinfo_option('state');?> <span class="pipe">&nbsp; | &nbsp;</span> <?php echo glm_get_clientinfo_option('zip');?></span> <br>
-            <?php endif;?>
-
-            <?php if (glm_get_clientinfo_option('phone')) :?>
-                <span class="phone"><?php echo glm_get_clientinfo_option('phone');?></span> <span class="pipe">&nbsp; | &nbsp;</span>
-            <?php endif;?>
-            <?php if (glm_get_clientinfo_option('fax')) :?>
-                <span><?php echo glm_get_clientinfo_option('fax');?></span> <span class="pipe">&nbsp; | &nbsp;</span>
-            <?php endif;?>
-            <?php if (glm_get_clientinfo_option('tollfree')) :?>
-                <span><?php echo glm_get_clientinfo_option('tollfree');?></span>
-            <?php endif;?>
-            <br>
-          
-                <a class="mail_1 location-mail" href="<?php echo get_permalink(); ?>">Contact Us</a>
-          
-        </div>
-        <div class="location_2 address-container">
-
-        </div>
-    <?php endif;?>
-</div>
\ No newline at end of file
diff --git a/parts/glm-members-only-login-form.php b/parts/glm-members-only-login-form.php
new file mode 100644 (file)
index 0000000..b337e36
--- /dev/null
@@ -0,0 +1,45 @@
+                        <div class="wp_login_error">
+                            <p id="glm-member-login-notification">
+                                <?php if( isset( $_GET['login'] ) && $_GET['login'] == 'failed' ) { ?>
+                                    The information you entered is incorrect. Please try again.
+                                <?php }
+                                    else if( isset( $_GET['login'] ) && $_GET['login'] == 'empty' ) { ?>
+                                    Please enter both username and password.
+                                <?php } else { ?>
+                                    <?php $glmAssociateConfig = apply_filters('glm_associate_config', null);
+                                        $supportEmail = $glmAssociateConfig['settings']['members_only_support_email'];
+                                        $supportPhone = $glmAssociateConfig['settings']['members_only_support_phone'];
+                                        $glmTerm = $glmAssociateConfig['terms']['term_member'];
+                                    ?>
+                                    Please log in with your <?php echo $glmTerm; ?> username and password.
+
+                                    <?php if ($supportEmail || $supportPhone) {
+                                        echo "<br>If you need assistance, ";
+                                        if ($supportEmail) {
+                                            echo "email (".$supportEmail.")";
+                                            if ($supportPhone) {
+                                                echo " or ";
+                                            }
+                                        }
+                                        if ($supportPhone) {
+                                            echo "call (".$supportPhone.")";
+                                        }
+                                    }
+                                    ?>
+                                <?php } ?>
+                            </p>
+                        </div>
+                        <div id='glm-member-login-form'>
+                        <?php
+                            update_option('glm_members_database_frontend_login_request', 'true');
+                            $args = array(
+                                'echo'    => false,
+                                'form_id' => 'glm_login_form'
+                            );
+                            $loginForm = wp_login_form($args);
+                            $captcha   = apply_filters('cptch_display', '', 'glm_login_form');
+                            $form      = str_replace( '<p class="login-remember">', $captcha . '<p class="login-remember">', $loginForm );
+                            echo $form;
+                        ?>
+                        </div>
+                        <?php get_template_part('parts/glm-members-only-lostpass-form'); ?>
diff --git a/parts/glm-members-only-lostpass-form.php b/parts/glm-members-only-lostpass-form.php
new file mode 100644 (file)
index 0000000..296b1dd
--- /dev/null
@@ -0,0 +1,25 @@
+
+                        <a id="glm-member-password-lost-link" title="Lost Password">Lost Password?</a>
+                        <div id="glm-member-password-lost-form">
+
+                            <p>
+                                <?php
+                                    _e(
+                                        "Enter your email address and we'll send you a link you can use to pick a new password.",
+                                        'personalize_login'
+                                    );
+                                ?>
+                            </p>
+
+                            <form id="lostpasswordform" action="<?php echo wp_lostpassword_url(); ?>" method="post">
+                                <p class="form-row">
+                                    <label for="user_login"><?php _e( 'Email', 'personalize-login' ); ?>
+                                    <input type="text" name="user_login" id="user_login">
+                                </p>
+
+                                <p class="lostpassword-submit">
+                                    <input type="submit" name="submit" class="lostpassword-button"
+                                           value="<?php _e( 'Reset Password', 'personalize-login' ); ?>"/>
+                                </p>
+                            </form>
+                        </div>
\ No newline at end of file
diff --git a/parts/glm-members-only-top-bar.php b/parts/glm-members-only-top-bar.php
new file mode 100644 (file)
index 0000000..dca1342
--- /dev/null
@@ -0,0 +1,8 @@
+<div id="glm-member-front-header" class="small-12 columns">
+<!--    <div class='glm-member-greeting'>Hello,     <?php // $current_user = wp_get_current_user();echo $current_user->user_login ?>.</div>-->
+    <a class='button glm-button' href="<?php echo wp_logout_url( home_url() ); ?>">Logout</a>
+    <?php if (current_user_can("glm_members_member")) { ?>
+        <?php $glmAssociateTerms = apply_filters('glm_associate_terms', "");?>
+        <a class='button glm-button' href='<?php echo get_admin_url(); ?>'>Enter <?php echo $glmAssociateTerms['term_member_cap']; ?> Admin Area</a>
+    <?php } ?>
+</div>
\ No newline at end of file
diff --git a/parts/header-meta.php b/parts/header-meta.php
new file mode 100644 (file)
index 0000000..47080bd
--- /dev/null
@@ -0,0 +1,35 @@
+<head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+    <title><?php wp_title(); ?></title>
+    <link rel="stylesheet" href="<?php echo get_stylesheet_directory_uri() ; ?>/css/app.css?v=1.0.0">
+    <link href='//fonts.googleapis.com/css?family=Open+Sans:400,400italic,700' rel='stylesheet' type='text/css'>
+    <link rel="shortcut icon" href="<?php echo bloginfo('template_url')?>/favicon.ico">
+    <?php wp_head(); ?>
+    <!-- Facebook Pixel Code -->
+    <script async>
+        !function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?
+            n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n;
+            n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0;
+            t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window,document,'script','https://connect.facebook.net/en_US/fbevents.js');
+        fbq('init', '989049894545336');
+        fbq('track', "PageView");</script>
+    <noscript><img height="1" width="1" style="display:none"
+        src="https://www.facebook.com/tr?id=989049894545336&ev=PageView&noscript=1"/>
+    </noscript>
+    <!-- End Facebook Pixel Code -->
+    <?php if ( in_array( $post->ID, array( 221, 228, 465 ) ) ) : ?>
+        <meta name="smartbanner:title" content="The Official Keweenaw App">
+        <meta name="smartbanner:author" content="VisitApps">
+        <meta name="smartbanner:price" content="FREE">
+        <meta name="smartbanner:price-suffix-apple" content=" - On the App Store">
+        <meta name="smartbanner:price-suffix-google" content=" - In Google Play">
+        <meta name="smartbanner:icon-apple" content="<?php echo get_stylesheet_directory_uri() ; ?>/assets/smartbanner/smartbanner.png">
+        <meta name="smartbanner:icon-google" content="<?php echo get_stylesheet_directory_uri() ; ?>/assets/smartbanner/smartbanner.png">
+        <link rel="stylesheet" href="<?php echo get_stylesheet_directory_uri() ; ?>/assets/smartbanner/smartbanner.css">
+        <meta name="smartbanner:button" content="View">
+        <meta name="smartbanner:button-url-apple" content="https://itunes.apple.com/us/app/michigans-keweenaw-peninsula/id1003861626?ls=1&mt=8">
+        <meta name="smartbanner:button-url-google" content="https://play.google.com/store/apps/details?id=com.visitapps.keweenawmi">
+        <meta name="smartbanner:enabled-platforms" content="android,ios">
+    <?php endif; ?>
+  </head>
diff --git a/parts/main-content.php b/parts/main-content.php
new file mode 100644 (file)
index 0000000..5a9ccd0
--- /dev/null
@@ -0,0 +1,7 @@
+            <div id="main-content" class="small-12 columns">
+                <?php if(have_posts()) : while(have_posts()): the_post();?>
+                <?php the_content();?>
+                <?php endwhile; else:?>
+                <p><?php _e('Sorry, no posts yet');?></p>
+                <?php endif;?>
+            </div>
\ No newline at end of file
diff --git a/parts/map-section.php b/parts/map-section.php
new file mode 100644 (file)
index 0000000..56d0823
--- /dev/null
@@ -0,0 +1,136 @@
+<!-- WP CITY PAGE DATA FOR JS PROCESSING -->
+<?php
+    $pages = ['keweenaw-peninsula','chassell','toivola','calumet','laurium','copper-harbor','eagle-harbor','eagle-river','houghton','hancock','lac-la-belle','bete-grise'];
+    foreach($pages as $page){
+        $args = array(
+            'name'        => $page,
+            'post_type'   => 'page',
+            'post_status' => 'publish',
+            'numberposts' => 1
+        );
+        $city_page = get_posts($args);
+        $content = get_excerpt_by_id($city_page[0]->ID, 50);
+        //echo $content;
+        $city_image_id = get_post_thumbnail_id($city_page[0]->ID);
+        $city_image    = wp_get_attachment_image_src( $city_image_id, 'glm-block-image', true);
+        $city_url = get_permalink($city_page[0]->ID);
+        //echo "1";
+        if($city_image_id){
+            $city_image    = wp_get_attachment_image_src( $city_image_id, 'glm-block-image', true);
+            $city_image = $city_image[0];
+        } else {
+            $city_image = get_template_directory_uri() .'/assets/default-map-image.jpg';
+        }
+        //echo $city_image;
+        $cities[$city_page[0]->post_name] = array(
+            'title'     => $city_page[0]->post_title,
+            'id'        => $city_page[0]->ID,
+            'content'   => $content,
+            'slug'      => $city_page[0]->post_name,
+            'image'     => $city_image,
+            'url'       => $city_url
+        );
+    }
+    $js_cities = json_encode($cities);
+?>
+
+<!-- SVG MAP SECTION -->
+<div class="small-12 large-8 columns area-map">
+    <?php include 'city-map.php'; ?>
+</div>
+ <!-- CITY INFO -->
+<div class="small-12 large-4 columns area-map-info">
+    <div class="city-info-wrapper">
+        <div class="city-info">
+            <div class="city-img" style="background-image: url(<?php echo $cities['keweenaw-peninsula']['image']; ?>);"></div>
+            <h2 class="city-title"> <?php echo $cities['keweenaw-peninsula']['title']; ?> </h2>
+            <div class="city-content"><?php echo $cities['keweenaw-peninsula']['content']; ?> </div>
+        </div>
+        <div class="city-info-button">
+            <a class="city-link" href="<?php echo $cities['keweenaw-peninsula']['url']; ?>">Find out more...</a>
+        </div>
+    </div>
+</div>
+
+<script>
+    jQuery(function($){
+        var cities    = <?php echo $js_cities ?>;
+        var map         = $("#city-map");
+        var city_region = $('.city-region');
+        var text_paths  = $(city_region).children('path');
+        var city_image  = $('.city-img');
+        var city_title  = $('.city-title');
+        var city_content  = $('.city-content');
+        var city_link     = $('.city-link');
+        var sibling_region,city_id,url;
+
+       // hover elements TODO::Create a function that removes the duplicate code for title,content and img in the hover callbacks
+//        text_paths.hover(function(){
+//            var _ = $(this);
+//            var parent = _.parent();
+//            var region = parent.attr("class").split(' ')[0];
+////            console.log(region);
+////            var parent = $(this).parent();
+////            var sibling = parent.prev();
+////            city_id = sibling_region = sibling.children('g').attr("class");
+////            sibling_region = sibling.children('g').find('rect');
+////            sibling_region.css({"fill" :red, 'cursor' : 'pointer'});
+////
+////            var img     = cities[city_id]['image'];
+////            var title   = cities[city_id]['title'];
+////            var content = cities[city_id]['content'];
+////            url     = cities[city_id]['url'];
+////
+////            city_image.css("background-image", 'url(' + img + ')');
+////            city_content.text(content);
+////            city_title.text(title);
+////            city_link.attr("href", url);
+//
+//        },function(){
+////             sibling_region.css("fill", blue);
+//        });
+        city_region.hover(function(){
+            var _ = $(this);
+            var region = _.attr("class").split(' ')[0];
+
+            if( $(this).children('path').length > 0 ){
+                city_id = $(this).prev().children('g').attr('id');
+                var img     = cities[region]['image'];
+                var title   = cities[region]['title'];
+                var content = cities[region]['content'];
+                url     = cities[region]['url'];
+                city_image.css("background-image", 'url(' + img + ')');
+                city_title.text(cities[region]['title']);
+                city_content.text(cities[region]['content']);
+                city_link.attr("href", url);
+            } else {
+                city_id = $(this).attr('id').slice(0,-5); // Remove the -rect
+
+                var img     = cities[region]['image'];
+                var title   = cities[region]['title'];
+                var content = cities[region]['content'];
+                url     = cities[region]['url'];
+                city_image.css("background-image", 'url(' + img + ')');
+                city_title.text(cities[region]['title']);
+                city_content.text(cities[region]['content']);
+                city_link.attr("href", url);
+            }
+            $(this).css({'cursor' : 'pointer'});
+            $("#Main_Towns_-_hover ." + region + " path").css("visibility", "visible");
+
+        },function(){
+
+            var _ = $(this);
+            var region = _.attr("class").split(' ')[0];
+            $("#Main_Towns_-_hover ." + region + " path").css("visibility", "hidden");
+        });
+
+       city_region.on("click", function(){
+            window.location.href = url;
+        });
+        text_paths.on("click", function(){
+            window.location.href = url;
+        });
+
+   });
+</script>
\ No newline at end of file
diff --git a/parts/members-sidebar.php b/parts/members-sidebar.php
new file mode 100644 (file)
index 0000000..9d9b648
--- /dev/null
@@ -0,0 +1,7 @@
+    <h4> Welcome Members </h4>
+    <?php // glm_side_menu(); ?>
+    <?php if (current_user_can("glm_members_member")) { ?>
+        <ul>
+        <?php glm_members_only_menu(); ?>
+        </ul>
+    <?php } ?>
diff --git a/parts/search-form.php b/parts/search-form.php
new file mode 100644 (file)
index 0000000..a8b83f3
--- /dev/null
@@ -0,0 +1,4 @@
+<form role="search" method="get" class="searchform" action="<?php echo home_url('/').'site-search/'; ?>">
+     <input class="search-input" type="text" placeholder="Search" value="" name="query">
+     <input class="search-button button" type="submit" value="Search" name="submit">
+</form>
\ No newline at end of file
diff --git a/parts/share-this.php b/parts/share-this.php
new file mode 100644 (file)
index 0000000..a46a27d
--- /dev/null
@@ -0,0 +1,10 @@
+<div class="addthis_wrapper">
+    <!-- AddThis Button BEGIN -->
+    <div class="addthis_toolbox addthis_default_style ">
+        <a class="addthis_counter addthis_pill_style"></a>
+    </div>
+    <script type="text/javascript">var addthis_config = {"data_track_addressbar":false};</script>
+    <script type="text/javascript" src="//s7.addthis.com/js/300/addthis_widget.js#pubid=ra-5135fe4558d287a9"></script>
+    <!--                                        <script type="text/javascript" src="http://s7.addthis.com/js/250/addthis_widget.js"></script>-->
+    <!-- AddThis Button END -->
+</div><!--/#addthis_wrapper-->
\ No newline at end of file
diff --git a/parts/slide-show.php b/parts/slide-show.php
new file mode 100644 (file)
index 0000000..94844b5
--- /dev/null
@@ -0,0 +1,7 @@
+<?php if (is_front_page()) : ?>
+       <div id="slideshow">
+         <?php if ( is_active_sidebar( 'slideshow' ) ) : ?>
+           <?php dynamic_sidebar( 'slideshow' ); ?>
+         <?php endif; ?>
+       </div>
+<?php endif; ?>
diff --git a/readme.txt b/readme.txt
deleted file mode 100644 (file)
index 6f44f90..0000000
+++ /dev/null
@@ -1,312 +0,0 @@
-License: GNU General Public License v3 or later
-License URI: http://www.gnu.org/licenses/gpl-3.0.html
-AccessPress Parallax WordPress Theme, Copyright 2014 AccessPress Themes
-AccessPress Parallax is distributed under the terms of the GNU GPL v3
-
-
-Install Steps:
---------------
-
-1. Activate the theme
-2. Go to the Theme Option page
-3. Setup theme options
-
-
-------------------------------------------
-
-JS Files
-    HTML5-Shiv: MIT and GPL licenses
-    https://code.google.com/p/html5shiv/
-    
-    bxSlider: WTFPL and MIT license
-    https://github.com/stevenwanderski/bxslider-4
-    
-    Nivo Lightbox: MIT licenses
-    http://dev7studios.com/plugins/nivo-lightbox/
-
-    jQuery Actual: MIT licenses
-    https://github.com/dreamerslab/jquery.actual/
-
-    jQuery Easing: Open source under the BSD License. 
-    https://github.com/gdsmith/jquery.easing
-
-    jQuery Easing: Released under the WTFPL license
-    https://github.com/davatron5000/FitVids.js
-
-    jQuery Easing: MIT Licenses
-    https://github.com/flesler/jquery.scrollTo
-
-    Parallax JS: MIT and GPL licenses
-    https://github.com/IanLunn/jQuery-Parallax/
-
-    WOw JS: MIT Licenses
-    https://github.com/matthieua/WOW
-    
-    Smooth Scroll JS: MIT Licenses
-    https://gist.github.com/galambalazs/6477177/
-
-
--------------------------------------------
-Fonts
-    Font Awesome: MIT and GPL licenses
-    http://fontawesome.io/license/
-    
-    Roboto
-    http://www.google.com/fonts/specimen/Roboto
-    Apache License, version 2.0
-    
-    Oxygen
-    http://www.google.com/fonts/specimen/Oxygen
-    License: SIL Open Font License, 1.1
-
--------------------------------------------
-Images
-    All the images used are from http://pixabay.com and are fully GPL compatible.
-    http://pixabay.com/en/sunset-afterglow-landscape-208771/
-    https://unsplash.com/photos/tAKXap853rY/
-
-    Slider Image
-    http://www.pexels.com/photo/154/
-    http://www.pexels.com/photo/2170/
-
-
-    Background Image
-    http://www.pexels.com/photo/1883/
-    http://www.pexels.com/photo/2255/
-    http://www.pexels.com/photo/3578/
-    http://www.pexels.com/photo/3545/
-
-    Portfolio Image
-    http://www.pexels.com/photo/2059/
-    http://www.pexels.com/photo/2818/
-    http://www.pexels.com/photo/232/
-    http://www.pexels.com/photo/2242/
-    http://www.pexels.com/photo/2170/
-    http://www.pexels.com/photo/2886/
-    http://www.pexels.com/photo/3510/
-    http://www.pexels.com/photo/3521/
-
----------------------------------------------
-== Changelog ==
-Version 1.60
- * Theme Option Panel error on PHP7 fixed
- * Styling Issue fixed
-
-== Changelog ==
-Version 1.59
- * Responsive issue in team section fixed
-
-Version 1.58
- * Minor CSS issue fixed
- * Recommended plugin activate and deactive button not working - Fixed
-
-Version 1.57
- * All Element using bx slider replaced by slick slider for better performance
-
-Version 1.56
- * Smooth Scrolling issue on back to top and slider down button fixed
-
-Version 1.55
- * Menu Scrolling issue fixed - jquery.nav.js updated 
-Version 1.54
- * Design issue of submenu in responsive fixed
-
-Version 1.53
- * Updated bxSlider Plugin
- * Update Fontawesome
-
-Version 1.52
- * Minor Bug Fixes
-
-Version 1.51
- * Alignment Issue with Center Header fixed
- * Unwanted text removed.
-
-Version 1.50
- * Minor Bug Fixes
-
-Version 1.40
- * Added Welcome Page with demo import functionality
- * Some Minor Design fixes
-
-Version 1.30
- * HTML validation
- * Optmization for Better SEO
-
-Version 1.26.2
- * Fixed some escapting value
- * Updated .pot file
-Version 1.26.1
-* Translation Bug fixed
-
-Version 1.26.0
-* Fixed escaping security error
-* Core WordPress Function used of pagination/navigaion for post and archive page
-
-Version 1.25.9
-* TGMPA Updated with the latest version
-
-Version 1.25.8
-* Logo alignment bug fixed for centered logo in Responsive Layout
-* Responsive bug fixed for the footer
-* Header Menu Bug fixed for home page template
-* PolyLang support for Theme Option Panel Text
-
-Version 1.25.7
-* Section Files Compatibility with Child Theme
-* CSS bug on bottom margin of the Google Map Section fixed
-
-Version 1.25.6
-* Woocommerce Compatible bug fixed
-
-Version 1.25.5
-* Woocommerce Compatible
-
-Version 1.25.4
-* Plugin Recommended via TGM
-* Screenshot changed
-
-Version 1.25.3
-* Indonesian Translation Added
-Contributer - Rio Bermano <riobermano92@gmail.com>
-
-Version 1.25.2
-* Added the theme support for title tag and removed the hardcoded title tag
-
-Version 1.25.1
-* Fixes for the compatibility with Polylang Plugin
-* Post Navigation in the single post shows the post with same term only
-
-Version 1.25.0
-* CSS fixes to make compaltible with the latest release of WordPress 4.4
-* Auto Transition Bug in main slider fixed
-
-Version 1.24.9
-* Minor bug on Slider fixed for RTL
-* Google Map Section content not displaying issue fixed
-
-Version 1.24.8
-* Additional CSS added for RTL Support
-
-Version 1.24.7
-* More Theme Page added
-
-Version 1.24.6
-* Menu Center alignment Bug fixed for the header 2 layout
-* New Plugin Suggested Via TGM Plugin Activation
-
-Version 1.24.5
-* Main navigation bug fixed
-* Missing Translation ready fixed
-* Minor bug in accesspress_letter_count function fixed
-
-Version 1.24.4
-* FontAwesome updated to latest version
-* Translation pot file updated 
-* Minor Bug fixed in Home Page
-
-Version 1.24.3
-* Polylang Plugin translation bug for Call to action section fixed
-* Minor CSS fix in the admin Panel
-
-Version 1.24.2
-* Option name mismatch for the child theme fixed
-* Issue of bxslider not working for RTL Website fixed
-
-Version 1.24.0
-* Theme Demo Url Changed
-* Changed Author url from http to https
-* Jquery bug in Team Section fixed
-* Text Domain Issue fixed
-
-Version 1.23.9
-* Demo Slider Content Removed
-* Demo and Documentation Link added in Theme Option Panel
-* Minor change in theme option panel
-
-Version 1.23.5
-* TGM Plugin Class Updated to latest version
-* Content bug for the parallax section fixed
-* Jquery bug fixed for multiple team section added
-* Slider caption overlapping the menu issue fixed
-
-Version 1.23.4
-* Loop Issue fixed in Parallax Section.
-* Missing Translation text fixed.
-* Plugins recomemded via TGM Plugin Activation
-
-Version 1.23.3
-* Compatibility issues with multilingual plugin (polylang) fixed.
-* Issue with Google Map Section fixed.
-* Removed the unused script from the demo content.
-
-Version 1.23
-* Main Navigation Bug fixed
-
-Version 1.22
-* Team section slides bug fixed
-* Background Image bug in Mobile device fixed
-
-Version 1.21
-* Main Navigation Bug fixed
-* Minor Changes in Theme Option Panel
-* New pot file generated for translation
-* Jquery bug fixed while adding multiple team section
-
-Version 1.20
-* Archive page Title link fixed
-* ScreenShot Changed
-* Few adjustment in Theme Option Panel
-* Added Theme support for title tag
-* Added callback for custom TinyMCE editor stylesheets
-
-Version 1.19
-* Navigation not clickalbe in innpages issue solved.
-* Minor CSS bugs fixed.
-* Text translation added.
-* New Options Added in Theme Options Panel
-* Option to change the home text added in menu
-
-Version 1.18
-* Nav unclickable issue solved.
-* Minor CSS bugs fixed.
-* Text translation added.
-* Remove emails from Theme Options due to spams. 
-
-Version 1.17
-* Fixed the link on the Scroll down arrow over the banner.
-* Added New Translation language (Russian).
-* Minor CSS bugs fixed.
-
-Version 1.16
-* Theme option value not saving bug fixed.
-
-Version 1.15 
-* Changed the Option name to theme text domain to prevent the lose of theme option data while making child theme.     
-
-Version 1.14
-* Section ID changed by page ID instead of Page name (Page name created problem with other language then english.)
-* Header spacing bug fixed when logged in.
-* Design bug on 2nd level menu fixed on responsive layout.
-
-Version 1.13
-* Div with clearfix class added in service section to prevent misalignment
-* Overlapping of Heading with date in the blog/archive page fixed
-
-Version 1.11
-* Smooth Scroll Js added for smooth scrolling in Chrome
-* ScreenShot Changed
-* Minor Changes in styles
-* Minor Bugs Fixed
-* Demo Content Added
-
-Version 1.1
-* Parallax background Effect added for blank Sections in Main page.
-* Wow animation effect added
-* Google JavaScript Maps API V3 added
-* Minor Changes in styles
-
-Version 1.0
-* Submitted theme for review in http://wordpress.org
\ No newline at end of file
diff --git a/robots.txt b/robots.txt
new file mode 100644 (file)
index 0000000..214e411
--- /dev/null
@@ -0,0 +1,4 @@
+# www.robotstxt.org/
+# www.google.com/support/webmasters/bin/answer.py?hl=en&answer=156449
+
+User-agent: *
index 6873f40..baf6f99 100644 (file)
Binary files a/screenshot.png and b/screenshot.png differ
diff --git a/scss/_blog.scss b/scss/_blog.scss
new file mode 100644 (file)
index 0000000..8c4c63e
--- /dev/null
@@ -0,0 +1,127 @@
+
+.home-feed-post {
+    padding-bottom: 25px;
+//    @media #{$small-only} {
+//        > * {
+//            text-align: center;
+//        }
+//    }
+}
+input[type="submit"].blogbutton {
+    border-radius: 3px;
+    color: $white;
+    border: 2px solid $white;
+    font-weight: bold;
+    font-size: 13px;
+    padding: 2px 5px;
+    margin-top: -10px;
+    text-transform: uppercase;
+    &:hover {
+        cursor: pointer;
+        background: $white;
+        border: 2px solid #035C84;
+        color:  white;
+    }
+}
+.addthis_wrapper {
+    float: right;
+    display: inline-block;
+    margin-top: 5px;
+}
+#blog-posts-over article {
+    padding-top: 10px;
+    margin-bottom: 15px;
+    display: inline-block;
+    width: 100%;
+    .entry-header {
+        background: transparent;
+    }
+    .addthis_wrapper {
+        //margin-top: -25px;
+        float: right;
+    }
+    h1 {
+        letter-spacing: 1px;
+        line-height: 1.2;
+    }
+    p {
+        padding-bottom: 15px;
+    }
+    a.read-more {
+        border: 2px solid $white;
+        font-weight: bold;
+        font-size: 13px;
+        padding: 0 3px;
+        text-transform: uppercase;
+        &:hover {
+            background: $white;
+            border: 2px solid #035C84;
+            color: #035C84;
+        }
+    }
+     .entry-header {
+        margin-bottom: 10px;
+        .entry-title {
+            margin-bottom: 0;
+        }
+        .meta.date {
+            font-size: 13px;
+            font-weight: bold;
+        }
+    }
+}
+/*#searchform div input &[type="text"] {
+    width: 95%;
+}*/
+#blog-posts-over .entry-meta {
+    text-align: center;
+    color: #757575;
+    font-size: 12px;
+}
+#blog-posts-over > div {
+    margin: 25px 0;
+}
+#blog-side-info {
+    ul li {
+        line-height: 1.2;
+        margin-bottom: 10px;
+    }
+    #searchform {
+        margin-bottom: 30px;
+    }
+    p {
+        margin-bottom: 0;
+    }
+}
+@media #{$small-only} {
+    #blog-side-info-wrapper {
+        float: none;
+        margin: 0 auto;
+        clear: both;
+    }
+    #blog-side-info {
+        padding-left: 0;
+        border-left: 0;
+        ul {
+            margin-left: 0;
+            margin-top:10px;
+        }
+        #searchform {
+            padding: 35px 0;
+            #s {
+                width: 100%;
+            }
+        }
+    }
+}
+#blog-side-info {
+    padding-right: 10px;
+    ul {
+        list-style-type: none;
+    }
+}
+.blog-archive, .blog-home {
+    .featured-image-wrap{
+        display: none;
+    }
+}
\ No newline at end of file
diff --git a/scss/_body.scss b/scss/_body.scss
new file mode 100644 (file)
index 0000000..3e942e8
--- /dev/null
@@ -0,0 +1,13 @@
+body {
+    .shadow-wrapper {
+        margin: 0 auto;
+        background: $white;
+        box-shadow: 0 0 15px -6px $black;
+        -ms-box-shadow: 0 0 15px -6px $black;
+        -moz-box-shadow: 0 0 15px -6px $black;
+        -webkit-box-shadow: 0 0 15px -6px $black;
+        
+        max-width: 1000px;
+        padding-top: rem-calc(20);
+    }
+}
diff --git a/scss/_content.scss b/scss/_content.scss
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/scss/_copyright.scss b/scss/_copyright.scss
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/scss/_defaults.scss b/scss/_defaults.scss
new file mode 100644 (file)
index 0000000..78383e3
--- /dev/null
@@ -0,0 +1,55 @@
+// This document will contain all the styles that we want to apply to every
+//  site. Make sure this is placed before _structures (if that is still the
+//  primary css file).
+
+h1,h2,h3,h4,h5,h6 {
+    clear: both;
+}
+
+/* PLUGINS */
+/* Nextgen */
+.gallery li a img { // without this images will overlap each other at certain widths
+    display: block;
+    width: 100%;
+}
+.ngg-gallery-thumbnail, .ngg-gallery-thumbnail-box {
+    float: none !important;
+}
+.ngg-album-compact h4 .ngg-album-desc {
+    height: auto !important;
+    font-family: $font-family-serif;
+    font-weight: 400;
+}
+.ngg-album-compact .album-meta-wrapper h4 a {
+    font-style: normal;
+}
+.album-meta-wrapper {
+    display: block;
+    height: 54px;
+    margin-bottom: 20px;
+}
+.ngg-glmalbums {
+    margin: 10px 0;
+    min-height: 260px;
+    @media #{$small-only} {
+        min-height: 180px;
+    }
+}
+.ngg-album-link {
+    text-align: center;
+}
+/* Ninja Forms */
+.ninja-forms-form-wrap {
+    max-width: 600px;
+    margin: 0 auto;
+    input[type=submit] {
+        @include button();
+        display: block;
+        margin: 0 auto;
+    }
+}
+/* For fixing cellphones not showing phone numbers because of /helpful/ auto-coloring */
+a[href^=tel]{
+    color:inherit;
+    text-decoration:none;
+}
\ No newline at end of file
diff --git a/scss/_left-off-canvas.scss b/scss/_left-off-canvas.scss
new file mode 100644 (file)
index 0000000..32aec19
--- /dev/null
@@ -0,0 +1,133 @@
+/* for the mobile menu */
+aside.left-off-canvas-menu {
+//  background-color: rgba(0, 0, 0, 0.7);
+//  color: white;
+    background-color: $slate-blue;
+    .search-button {
+        background-color: $orange;
+        margin: 0 auto;
+        display: block;
+    }
+}
+#left-off-canvas-client-info {
+    float: left;
+    li {
+        color: white;
+        line-height: 1.2;
+        margin-bottom: 5px;
+    }
+}
+#off-canvas-social {
+    padding: 15px 55px;
+
+    .footer-social-text {
+        color: $orange;
+        font-size: 24px;
+        line-height: 1.2;
+        margin-bottom: 15px;
+    }
+    .footer-social-icon {
+        background-image: url("../assets/social-icons.png");
+        height: 56px;
+        width: 56px;
+        display: block;
+        float: left;
+        margin-right: 6px;
+        margin-bottom: 15px;
+        margin-left: 6px;
+    }
+    #facebook {
+         background-position: 0 0;
+    }
+    #instagram {
+        background-position: -79px 0;
+    }
+    #travel-advisor {
+        background-position: -158px 0;
+    }
+    #blog {
+        background-position: -237px 0;
+    }
+}
+aside.left-off-canvas-menu li.page_item {
+  display: block;
+  overflow: hidden;
+  position: relative;
+  padding: 4px 8px;
+}
+aside.left-off-canvas-menu .left-off-canvas-list ul li a {
+  color: white;
+  &:hover {
+      color: $gold;
+  }
+}
+aside.left-off-canvas-menu li.page_item_has_children a.toggle {
+  position: absolute;
+  right: 10px;
+  top: 5px;
+  width: auto;
+    text-decoration: none;
+    &:before {
+        @include off-canvas-point(right, $white, 17px);
+    }
+    &:hover {
+        background: transparent;
+    }
+}
+aside.left-off-canvas-menu li.page_item_has_children a.toggle.open {
+    @include off-canvas-point(down, $white);
+}
+aside.left-off-canvas-menu ul.children {
+  display: none;
+}
+aside.left-off-canvas-menu .off-canvas-list ul li > ul li > a {
+  padding-left: 10px;
+  margin-left: 25px;
+  line-height: 18px;
+}
+aside.left-off-canvas-menu ul.open {
+  display: block;
+}
+.left-off-canvas-menu {
+        list-style: none;
+        li {
+            a {
+                color: $white;
+                font-size: rem-calc(16);
+                line-height: 1.2;
+                border-color: white;
+                margin-bottom: 5px;
+            }
+            a:hover {
+                color: black;
+            }
+            .dropdown {
+                list-style: none;
+            }
+        }
+        ul {
+            list-style: none;
+
+            padding: 10px 0;
+            li {
+                a {
+                    color: $white;
+                }
+                ul {
+                    list-style: none;
+                    li {
+                        a {
+                            width: 85%;
+                            display: block;
+                            white-space: pre-wrap;
+                        }
+                    }
+                }
+            }
+        }
+}
+.offcavas-social-list {
+    @include inline-list;
+    margin-left: auto;
+}
+/* End Mobile Menu */
diff --git a/scss/_main.scss b/scss/_main.scss
new file mode 100644 (file)
index 0000000..c0696c0
--- /dev/null
@@ -0,0 +1,168 @@
+main {
+    &.page-inside {
+        padding: 20px;
+    }
+}
+#content-wrapper .breadcrumbs {
+    margin-top: 10px;
+    margin-bottom: 15px;
+    background-color: white;
+    border: 0;
+    padding: 0;
+    > span {
+        color: $orange;
+        font-size: 14px;
+        text-transform: none;
+    }
+    a > span {
+        color: $orange;
+        font-size: 14px;
+        text-transform: none;
+        text-decoration: underline;
+    }
+}
+#content-bulk {
+    #con {
+        margin: 0;
+    }
+    h2 {
+        text-transform: uppercase;
+        font-size: 25px;
+    }
+    footer {
+        margin: 35px 0;
+        #address {
+            margin-top: 25px;
+            p {
+                font-size: 12px;
+                margin-top: 5px;
+            }
+            img {
+                margin: 0;
+                padding-right: 5px;
+            }
+            a {
+                font-size: 12px;
+            }
+        }
+        img {
+            box-shadow: none;
+        }
+    }
+}
+#main-content{
+    padding-top: 20px;
+}
+.st_sharethis {
+    float: right;
+    width: 58px;
+}
+body .stButton .sharethis  {
+  background-image: url("../assets/share-icon.png") !important;
+  width: 52px;
+  height: 22px;
+}
+.map-wrapper {
+    background-color: $map-blue;
+    border-bottom: 2px solid $slate-blue;
+    margin-bottom: 30px;
+    .area-map-info {
+        padding-top: 25px;
+        .city-img {
+            background-size: cover;
+            background-repeat: no-repeat;
+            border: 2px solid $slate-blue;
+            display: block;
+            height: 200px;
+            width: 300px;
+        }
+        .city-title {
+            color: $slate-blue;
+            font-size: 28px;
+            font-weight: bold;
+            letter-spacing: 0;
+            line-height: 1.0;
+            margin: 10px 0 5px;
+        }
+        .city-content {
+            max-height: 75px;
+            overflow: hidden;
+        }
+        .city-link {
+            background: $slate-blue;
+            border: 1px solid white;
+            border-radius: 7px;
+            color: white;
+            font-weight: bold;
+            margin-top: 15px;
+            padding: 4px 8px;
+        }
+    }
+    .city-info-button {
+        margin-top: 10px;
+        margin-bottom: 5px;
+    }
+    @media #{$medium-down} {
+        .city-info-wrapper {
+            margin: 0 auto 20px;
+            max-width: 300px;
+        }
+    }
+}
+#city-map{
+    display: block;
+    max-width: 630px;
+    margin: 0 auto;
+    width: 100%;
+
+    @media#{$small-only}{
+        height: auto;
+    }
+}
+-moz-document url-prefix() {
+  #city-map{
+     height: auto;
+  }
+}
+@media screen and (-webkit-min-device-pixel-ratio:0) {
+    #city-map{
+         height: auto;
+    }
+}
+/* iPhone / mobile webkit */
+@media screen and (max-device-width: 480px) {
+     #city-map{
+         height: auto;
+    }
+}
+@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {
+/* IE10+ CSS styles go here */
+    #city-map{
+         height: 400px;
+    }
+}
+/*
+*/#Main_Towns_-_hover path {
+    visibility: hidden;
+}/*
+#Main_Towns_-_hover .city-hover:hover,
+#Main_Towns_-_hover .city-hover.hover {
+    visibility: visible;
+    path {
+        visibility: visible;
+    }
+}
+#Main_Towns_-_hover g.hover,
+#Main_Towns_-_hover g:hover {
+    visibility: visible;
+    path {
+        visibility: visible;
+    }
+}
+#Main_Towns_-_hover .city-hover-text.hover,
+#Main_Towns_-_hover .city-hover-text:hover {
+    visibility: visible;
+    path {
+        visibility: visible;
+    }
+}*/
\ No newline at end of file
diff --git a/scss/_mixins.scss b/scss/_mixins.scss
new file mode 100644 (file)
index 0000000..cf454d0
--- /dev/null
@@ -0,0 +1,2 @@
+  @import "mixins/gradient";
+  @import "mixins/off-canvas-arrow";
\ No newline at end of file
diff --git a/scss/_page.footer.scss b/scss/_page.footer.scss
new file mode 100644 (file)
index 0000000..bf4492f
--- /dev/null
@@ -0,0 +1,272 @@
+footer.main {
+    //position: absolute;
+    // margin-top: 40px;
+    bottom: 0;
+    left: 0;
+    right: 0;
+    @media only screen and (max-width: 1024px) {
+        position: relative;
+        bottom: 0;
+    }
+}
+#footer-top {
+    #footer-guide {
+        p {
+            margin: 0;
+        }
+        .footer-guide-text-wrapper {
+            float: left;
+            padding: 20px 15px;
+            .footer-guide-text {
+                color: $orange;
+                font-size: 24px;
+                line-height: 1.2;
+                margin-bottom: 15px;
+            }
+            .footer-guide-links {
+                a {
+                    color: $bright-blue;
+                    font-size: 18px;
+                    text-transform: uppercase;
+                }
+                .separator {
+                    color: $bright-blue;
+                    font-size: 18px;
+                    padding: 4px;
+                }
+            }
+        }
+        .footer-guide-image-wrapper {
+            float: left;
+        }
+    }
+    
+}
+#footer-social {
+    padding: 15px;
+    .footer-social-text {
+        color: $logo-red;
+        font-size: 24px;
+        line-height: 1.2;
+        margin-bottom: 15px;
+    }
+    .footer-social-icon {
+        background-image: url("../assets/social-icons.png");
+        height: 32px;
+        width: 32px;
+        display: block;
+        float: left;
+        margin-right: 25px;
+        margin-bottom: 15px;
+        @media #{$medium-down} {
+            margin-right: 10px;
+        }
+    }
+    #facebook {
+         background-position: 0 0;
+    }
+    #instagram {
+        background-position: -79px 0;
+    }
+    #travel-advisor {
+        background-position: -259px 0;
+    }
+    #blog {
+        background-position: -304px 0;
+    }
+}
+#footer-newsletter-wrapper {
+    width: 100%;
+    height: auto;
+    background-color: $ship-blue;
+    position: relative;
+    .footer-newsletter-title {
+        width: 80%;
+        color: $ice;
+        float: left;
+        font-weight: bold;
+        letter-spacing: 1px;
+        line-height: 1;
+    }
+    .footer-newsletter-text {
+        width: 80%;
+        color: $white;
+        float: left;
+        font-size: 18px;
+        margin-bottom: 0;
+    }
+    .footer-newsletter-button {
+        position: absolute;
+        right: 5%;
+        top: 35px;
+        display: inline;
+        background-color: $ice;
+        color: $logo-red;
+        padding: 5px 18px;
+        text-transform: uppercase;
+        line-height: 1;
+        font-weight: bold;
+        letter-spacing: 1px;
+        transition: all 0.5s;
+        &:hover {
+            background-color: $white;
+            color: $ship-blue;
+            transition: all 0.5s;
+        }
+    }
+
+}
+#footer-newsletter {
+    padding: 15px;
+    position: relative;
+}
+#footer-weather-address-wrapper {
+    height: 200px;
+    position: relative;
+    background-color: $ghost;
+    border-top: 4px solid $ship-blue;
+    border-bottom: 4px solid $ship-blue;
+    background: url(../assets/footer.jpg) no-repeat center 85%;
+    background-size: cover;
+    #footer-overlay{
+        position: absolute;
+        height: 100%;
+        width: 100%;
+        background-color: rgba(255,255,255, .85);
+    }
+}
+#footer-weather-address-container {
+    background-color: transparent;
+    position: absolute;
+    top: 50%;
+    left: 50%;
+    transform: translate(-50%, -50%);
+}
+#footer-weather {
+    text-align: center;
+    .footer-weather-logo {
+        img {
+            text-align: center;
+            margin-bottom: 20px;
+        }
+    }
+    .footer-pure-michigan-logo {
+        float: right;
+        img {
+            max-width: 160px;
+            margin-top: 35px;
+            @media #{$medium-down} {
+                margin-top: 55px;
+            }
+        }
+    }
+    #weather-widget {
+        position: absolute;
+        display: none;
+        width: 264px;
+        height: 200px;
+        bottom: 210px;
+        left: 60% ;
+        transform: translateX(-50%);
+        @media #{$medium-down} {
+            // left: 13px;
+            bottom: 210px;
+        }
+        &:after {
+            content: url(../assets/weather-arrow-down.png);
+            position: absolute;
+            top: 245px;
+            left: 45%;
+            @media #{$medium-down} {
+                top: 245px;
+                left: 81px;
+            }
+        }
+        .wu-wrapper {
+            border: 3px solid $logo-red;
+            background: white;
+            width: 255px;
+            height: 255px;
+        }
+    }
+}
+#footer-address {
+
+    color: $ship-blue;
+    text-align: center;
+    @media #{$medium-only} {
+        line-height: 1.0;
+    }
+    a {
+        color: $logo-red;
+        text-decoration: underline;
+        &:hover {
+            color: $logo-red;
+        }
+    }
+    span{
+        color: $ship-blue;
+        white-space: nowrap;
+    }
+    h2 {
+        color: $logo-red;
+        font-size: 20px;
+        font-weight: bold;
+        letter-spacing: 0;
+        line-height: 1.0;
+    }
+}
+#footer-logo {
+    text-align: center;
+    padding-top: 35px;
+}
+#connect {
+    padding-top: 20px;
+    background: #4c4d4f;
+    ul{
+        margin: 0;
+        list-style: none;
+        li {
+            background: none;
+            padding: 0 5px;
+            display: inline-block;
+            & > a {
+                display: block;
+                font-family: Open Sans, sans-serif;
+                font-size: 12px;
+                color: #fff;
+                padding: 20px 18px;
+                line-height: 1.2;
+            }
+            a {
+                &#current {
+                    background: $l-blue;
+                }
+            }
+        }
+    }
+}
+#copyright {
+    padding-top: 10px;
+    @media #{$large-up} {
+        padding-top: 30px;
+    }
+    color: $ship-blue;
+    float: none;
+    line-height: 1.0;
+    margin: 0 auto;
+    span {
+        font-size: rem-calc(10);
+    }
+    a {
+        color: $ship-blue;
+        text-decoration: underline;
+    }
+}
+#footer_address span.bullet,
+#copyright span.bullet {
+    margin: 0 5px;
+    @media #{$small-only} {
+        display: none !important;
+    }
+}
diff --git a/scss/_page.header.scss b/scss/_page.header.scss
new file mode 100644 (file)
index 0000000..45ce9ea
--- /dev/null
@@ -0,0 +1,140 @@
+#header-separator {
+    height: auto;
+    background-color: $ship-black;
+    color: $ice;
+    width: 100%;
+    text-align: center;
+    padding: 5px 10px 20px;
+    @media #{$small-only} {
+        h1 {
+            font-size: 30px;
+            line-height: 1.2;
+        }
+    }
+    &.header-separator-interior {
+        padding: 5px 0;
+    }
+    > * {
+        max-width: 1024px;
+        margin: 0 auto;
+        float: none;
+    }
+    h1 {
+        color: $ice;
+        font-weight: bold;
+        text-transform: uppercase;
+        letter-spacing: 1px;
+        line-height: 1.8;
+    }
+    &.header-separator-interior h1 {
+        color: $gold;
+    }
+    p {
+        color: $white;
+        font-size: 18px;
+        line-height: 1.2;
+    }
+}
+header {
+    list-style: none;
+    max-height: 600px;
+    height: auto;
+    & #logo {
+        img {
+            margin-bottom: 15px;
+        }
+    }
+    & .search {
+        input {
+            height: 20px;
+            width: 167px;
+            padding: 0 8px;
+            margin: 13px 0px 0px 18px;
+            border-radius: 3px;
+            font-size: 10px;
+            color: $black;
+            display: inline-block;
+        }
+        a {
+            &.magnifying-glass {
+                font-size: 10em; /* This controls the size. */
+                display: inline-block;
+                width: rem-calc(10);
+                height: rem-calc(10);
+                border: rem-calc(2) solid $d-blue;
+                position: relative;
+                border-radius: 0.35em;
+                margin: 0 0 0 -25px;
+                &:before {
+                    content: "";
+                    display: inline-block;
+                    position: absolute;
+                    right: rem-calc(-7);
+                    bottom: rem-calc(-4);
+                    border-width: 0;
+                    background: $d-blue;
+                    width: rem-calc(8);
+                    height: rem-calc(2);
+                    -webkit-transform: rotate(45deg);
+                    -moz-transform: rotate(45deg);
+                    -ms-transform: rotate(45deg);
+                    transform: rotate(45deg);
+                }
+            }
+        }
+    }
+    #sec-nav {
+        position: relative;
+        text-align: left;
+        padding: 10px 0;
+        margin: 0 0 15px 45px;
+        ul {
+            margin: 0;
+            li {
+                display: inline;
+                a {
+                    font-size: 12px;
+                    color: $d-blue;
+                    padding: 0 5px;
+                    font-weight: bold;
+                }
+            }
+        }
+        & > ul > li {
+            position: relative;
+            &:before {
+                color: $aluminum;
+                content: "|";
+                position: absolute;
+                top: 2px;
+                left: -15px;
+                font-size: 14px;
+                font-weight: bold;
+                display:block;
+                padding: 0 10px;
+            }
+            &:first-child:before {
+                content: none;
+            }
+        }
+    }
+    img {
+        margin-left: 5px;
+    }
+    .social {
+        margin-top: -25px;
+        padding-right: 0;
+        a {
+            float: right;
+            margin: 0 5px;
+            img {
+                margin: 0;
+            }
+        }
+    }
+}
+#header-media{
+    @media #{$medium-down}{
+        margin-top: 45px;
+    }
+}
\ No newline at end of file
diff --git a/scss/_page.wrapper.scss b/scss/_page.wrapper.scss
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/scss/_plugins.scss b/scss/_plugins.scss
new file mode 100644 (file)
index 0000000..90e6e0c
--- /dev/null
@@ -0,0 +1,8 @@
+  @import "plugins/nextgen";
+  @import "plugins/gravityForms";
+  @import "plugins/glm-member-db";
+  @import "plugins/glm-member-db-events";
+  @import "plugins/glm-member-db-packaging";
+  @import "plugins/fullCalendar";
+  @import "plugins/glm-blocks";
+  @import "plugins/slick";
\ No newline at end of file
diff --git a/scss/_right-off-canvas.scss b/scss/_right-off-canvas.scss
new file mode 100644 (file)
index 0000000..cd2669d
--- /dev/null
@@ -0,0 +1,87 @@
+/* for the mobile menu */
+aside.right-off-canvas-menu {
+  background-color: $primary-color;
+  color: white;
+}
+aside.right-off-canvas-menu li.page_item {
+  display: block;
+  overflow: hidden;
+  position: relative;
+  padding: 4px 8px;
+}
+aside.right-off-canvas-menu .off-canvas-list ul li a {
+  line-height: 20px;
+  color: white;
+  border-bottom: 1px solid #b1b3b6;
+  background-repeat: no-repeat;
+  background-position: 3px 50%;
+}
+aside.right-off-canvas-menu li.page_item_has_children a.toggle {
+  position: absolute;
+  right: 10px;
+  top: 5px;
+    text-decoration: none;
+    &:before {
+        @include off-canvas-point(right, $white, 17px);
+    }
+    &:hover {
+        background: transparent;
+    }
+}
+aside.right-off-canvas-menu li.page_item_has_children a.toggle.open {
+    @include off-canvas-point(down, $white);
+}
+aside.right-off-canvas-menu ul.children {
+  display: none;
+}
+aside.right--menu .off-canvas-list ul li > ul li > a {
+  padding-left: 10px;
+  margin-left: 25px;
+  line-height: 18px;
+}
+aside.right-off-canvas-menu ul.open {
+  display: block;
+}
+.right-off-canvas-menu {
+        list-style: none;
+        li {
+            a {
+                color: $white;
+                font-size: rem-calc(16);
+                line-height: 1.2;
+                border-color: white;
+                margin-bottom: 5px;
+            }
+            a:hover {
+                color: black;
+            }
+            .dropdown {
+                list-style: none;
+            }
+        }
+        ul {
+            list-style: none;
+
+            padding: 10px 0;
+            li {
+                a {
+                    color: $white;
+                }
+                ul {
+                    list-style: none;
+                    li {
+                        a {
+                            width: 85%;
+                            display: block;
+                            white-space: pre-wrap;
+                        }
+                    }
+                }
+            }
+        }
+}
+.offcavas-social-list {
+    @include inline-list;
+    margin-right: auto;
+}
+/* End Mobile Menu */
diff --git a/scss/_search.scss b/scss/_search.scss
new file mode 100644 (file)
index 0000000..865708d
--- /dev/null
@@ -0,0 +1,133 @@
+.search-top {
+        #searchform {
+            text-align: left;
+            display: inline-block;
+            position: relative;
+            #search-button {
+                width: 22px;
+                right: 0px;
+                position: absolute;
+                padding: 0;
+                border: 1px solid lightgray;
+            }
+        }
+        input {
+            height: 20px;
+            width: 167px;
+            padding: 0 8px;
+            margin: 13px 0px 0px 18px;
+            border-radius: 3px;
+            font-size: 10px;
+            color: $black;
+            display: inline-block;
+        }
+        a {
+            &.magnifying-glass {
+                font-size: 10em; /* This controls the size. */
+                width: rem-calc(12);
+                height: rem-calc(12);
+                border: rem-calc(2) solid darkblue;
+                position: absolute;
+                top: 15px;
+                border-radius: 0.35em;
+                margin: 0 0 0 -20px;
+                &:before {
+                    content: "";
+                    display: inline-block;
+                    position: absolute;
+                    right: rem-calc(-7);
+                    bottom: rem-calc(-4);
+                    border-width: 0;
+                    background: darkblue;
+                    width: rem-calc(8);
+                    height: rem-calc(2);
+                    -webkit-transform: rotate(45deg);
+                    -moz-transform: rotate(45deg);
+                    -ms-transform: rotate(45deg);
+                    transform: rotate(45deg);
+                }
+            }
+        }
+}
+.search-results{
+    #blog-posts-over{
+        .search-result-container{
+            header.entry-header{
+                margin-bottom: 0px;
+            }
+            .search_result_context{
+                margin: 0;
+                padding: 0;
+                line-height: 1.3;
+            }
+            article{
+                p{
+                    margin: 0;
+                    padding: 0;
+                }
+            }
+        }
+    }
+}
+#searchWrapper {
+    position: relative;
+}
+#searchContainer {
+    position: absolute;
+    right: 10px;
+    top: 10px;
+    z-index: 2;
+    #headerSearch {
+        @media #{$medium-down}{
+            display: none;
+        }
+        border-radius: 3px;
+        height: 25px;
+        padding: 0 0 0 8px;
+        margin-bottom: 0px;
+    }
+}
+.searchformHeader {
+    height: 18px;
+}
+#magnifying-glass {
+    font-size: 10em;
+    display: inline-block;
+    height: 13px;
+    position: relative;
+    border-radius: 0.35em;
+    left: 10.5rem;
+    top: -22px;
+    margin-top: 1px;
+    padding: 0;
+    width: 13px;
+    bottom: -0.8125rem;
+    border: 0.125rem solid $logo-red;
+}
+.searchformHeader input[type="submit"] {
+    cursor: cursor;
+    cursor: hand;
+    position: absolute;
+    right: 5px;
+    width: 10px;
+    top: 29px;
+    background: transparent;
+    height: 20px;
+    color: transparent;
+    padding: 6px 10px;
+    border: medium none;
+    margin: 0px 0px 0px -25px;
+    display: none !important;
+}
+#magnifying-glass::before {
+    content: "";
+    display: inline-block;
+    position: absolute;
+    bottom: -0.25rem;
+    border-width: 0px;
+    background: $logo-red none repeat scroll 0% 0%;
+    transform: rotate(135deg);
+    height: 0.125rem;
+    width: 0.5rem;
+    left: -0.4375rem;
+}
\ No newline at end of file
diff --git a/scss/_settings.scss b/scss/_settings.scss
new file mode 100644 (file)
index 0000000..f086294
--- /dev/null
@@ -0,0 +1,1494 @@
+// Foundation by ZURB
+// foundation.zurb.com
+// Licensed under MIT Open Source
+
+//
+
+// Table of Contents
+// Foundation Settings
+//
+// a. Base
+// b. Grid
+// c. Global
+// d. Media Query Ranges
+// e. Typography
+// 01. Accordion
+// 02. Alert Boxes
+// 03. Block Grid
+// 04. Breadcrumbs
+// 05. Buttons
+// 06. Button Groups
+// 07. Clearing
+// 08. Dropdown
+// 09. Dropdown Buttons
+// 10. Flex Video
+// 11. Forms
+// 12. Icon Bar
+// 13. Inline Lists
+// 14. Joyride
+// 15. Keystrokes
+// 16. Labels
+// 17. Magellan
+// 18. Off-canvas
+// 19. Orbit
+// 20. Pagination
+// 21. Panels
+// 22. Pricing Tables
+// 23. Progress Bar
+// 24. Range Slider
+// 25. Reveal
+// 26. Side Nav
+// 27. Split Buttons
+// 28. Sub Nav
+// 29. Switch
+// 30. Tables
+// 31. Tabs
+// 32. Thumbnails
+// 33. Tooltips
+// 34. Top Bar
+// 36. Visibility Classes
+
+// a. Base
+// - - - - - - - - - - - - - - - - - - - - - - - - -
+
+// This is the default html and body font-size for the base rem value.
+$rem-base: 16px;
+
+// Allows the use of rem-calc() or lower-bound() in your settings
+@import "foundation/functions";
+
+// The default font-size is set to 100% of the browser style sheet (usually 16px)
+// for compatibility with browser-based text zoom or user-set defaults.
+
+// Since the typical default browser font-size is 16px, that makes the calculation for grid size.
+// If you want your base font-size to be different and not have it affect the grid breakpoints,
+// set $rem-base to $base-font-size and make sure $base-font-size is a px value.
+$base-font-size: 100%;
+
+// The $base-font-size is 100% while $base-line-height is 150%
+$base-line-height: 150%;
+
+// We use this to control whether or not CSS classes come through in the gem files.
+$include-html-classes: true;
+// $include-print-styles: true;
+$include-html-global-classes: $include-html-classes;
+
+// b. Grid
+// - - - - - - - - - - - - - - - - - - - - - - - - -
+
+// $include-html-grid-classes: $include-html-classes;
+// $include-xl-html-grid-classes: false;
+
+$row-width: rem-calc(1000);
+$total-columns: 12;
+$column-gutter: rem-calc(30);
+
+//$last-child-float: $opposite-direction;
+
+// c. Global
+// - - - - - - - - - - - - - - - - - - - - - - - - -
+
+// We use these to define default font stacks
+$font-family-sans-serif: "Open Sans", sans-serif;
+$font-family-serif: Georgia, Cambria, "Times New Roman", Times, serif;
+$font-family-monospace: Consolas, "Liberation Mono", Courier, monospace;
+
+// We use these to define default font weights
+$font-weight-normal: normal;
+$font-weight-bold: bold;
+
+$white       : #FFFFFF;
+$ghost       : #FAFAFA;
+$snow        : #F9F9F9;
+$vapor       : #F6F6F6;
+$white-smoke : #F5F5F5;
+$silver      : #EFEFEF;
+$smoke       : #EEEEEE;
+$gainsboro   : #DDDDDD;
+$iron        : #CCCCCC;
+$base        : #AAAAAA;
+$aluminum    : #999999;
+$jumbo       : #888888;
+$monsoon     : #777777;
+$steel       : #666666;
+$charcoal    : #555555;
+$tuatara     : #444444;
+$oil         : #333333;
+$jet         : #222222;
+$black       : #000000;
+$green       : #008752;
+$red         : #d2222a;
+$d-blue      : #131c5f;
+$l-blue      : #0093d1;
+$orange      : #f27225;
+$dark-orange : #d25205;
+$gold        : #f5ad1a;
+$tan         : #dfccae;
+$dark-blue   : #36555a;
+$slate-blue  : #486b71;
+$bright-blue : #00aeef;
+$light-blue  : #a2c7e3;
+$pale-blue   : #e4edf5;
+$map-blue    : #bcd5e9;
+$dark-green  : #2A3524;
+
+// Ice Breaker Colors
+$ice         : #EDF6F5;
+$banner-red  : #BA131F;
+$logo-red    : #85111A;
+$ice-purple  : #7B7495;
+$ship-black  : #333132;
+$ship-blue   : #17274B;
+
+// We use these as default colors throughout
+$primary-color: $slate-blue;
+$secondary-color: #e7e7e7;
+$alert-color: #f04124;
+$success-color: #43AC6A;
+$warning-color: #f08a24;
+$info-color: #a0d3e8;
+
+// We use these to control various global styles
+// $body-bg: $white;
+$body-font-color: $black;
+$body-font-family: $font-family-sans-serif;
+$body-font-weight: $font-weight-normal;
+$body-font-style: normal;
+
+// We use this to control font-smoothing
+// $font-smoothing: antialiased;
+
+// We use these to control text direction settings
+// $text-direction: ltr;
+// $opposite-direction: right;
+// $default-float: left;
+// $last-child-float: $opposite-direction;
+
+// We use these to make sure border radius matches unless we want it different.
+// $global-radius: 3px;
+// $global-rounded: 1000px;
+
+// We use these to control inset shadow shiny edges and depressions.
+// $shiny-edge-size: 0 1px 0;
+// $shiny-edge-color: rgba($white, .5);
+// $shiny-edge-active-color: rgba($black, .2);
+
+// d. Media Query Ranges
+// - - - - - - - - - - - - - - - - - - - - - - - - -
+
+$small-range: (0em, 40em);
+$medium-range: (40.063em, 64em);
+$large-range: (64.063em, 90em);
+$xlarge-range: (90.063em, 120em);
+$xxlarge-range: (120.063em, 99999999em);
+
+$screen: "only screen";
+
+$landscape: "#{$screen} and (orientation: landscape)";
+$portrait: "#{$screen} and (orientation: portrait)";
+
+$small-up: $screen;
+$small-only: "#{$screen} and (max-width: #{upper-bound($small-range)})";
+
+$medium-up: "#{$screen} and (min-width:#{lower-bound($medium-range)})";
+$medium-only: "#{$screen} and (min-width:#{lower-bound($medium-range)}) and (max-width:#{upper-bound($medium-range)})";
+
+$medium-down: "#{$screen} and (min-width:#{lower-bound($small-range)}) and (max-width:#{upper-bound($medium-range)})";
+
+$large-up: "#{$screen} and (min-width:#{lower-bound($large-range)})";
+$large-only: "#{$screen} and (min-width:#{lower-bound($large-range)}) and (max-width:#{upper-bound($large-range)})";
+
+$large-down: "#{$screen} and (min-width:#{lower-bound($small-range)}) and (max-width:#{upper-bound($large-range)})";
+
+$xlarge-up: "#{$screen} and (min-width:#{lower-bound($xlarge-range)})";
+$xlarge-only: "#{$screen} and (min-width:#{lower-bound($xlarge-range)}) and (max-width:#{upper-bound($xlarge-range)})";
+
+$xxlarge-up: "#{$screen} and (min-width:#{lower-bound($xxlarge-range)})";
+$xxlarge-only: "#{$screen} and (min-width:#{lower-bound($xxlarge-range)}) and (max-width:#{upper-bound($xxlarge-range)})";
+
+// Legacy
+$small: $medium-up;
+$medium: $medium-up;
+$large: $large-up;
+
+// We use this as cursors values for enabling the option of having custom cursors in the whole site's stylesheet
+$cursor-crosshair-value: crosshair;
+$cursor-default-value: default;
+$cursor-disabled-value: not-allowed;
+$cursor-pointer-value: pointer;
+$cursor-help-value: help;
+$cursor-text-value: text;
+
+// e. Typography
+// - - - - - - - - - - - - - - - - - - - - - - - - -
+
+// $include-html-type-classes: $include-html-classes;
+
+// We use these to control header font styles
+$header-font-family: $body-font-family;
+$header-font-weight: $font-weight-normal;
+$header-font-style: normal;
+$header-font-color: $jet;
+$header-line-height: 1.4;
+$header-top-margin: .2rem;
+$header-bottom-margin: .5rem;
+$header-text-rendering: optimizeLegibility;
+
+// We use these to control header font sizes
+$h1-font-size: rem-calc(36);
+$h2-font-size: rem-calc(36);
+$h3-font-size: rem-calc(30);
+$h4-font-size: rem-calc(24);
+$h5-font-size: rem-calc(18);
+// $h6-font-size: 1rem;
+
+// We use these to control header size reduction on small screens
+$h1-font-reduction: rem-calc(5);
+$h2-font-reduction: rem-calc(0);
+$h3-font-reduction: rem-calc(0);
+$h4-font-reduction: rem-calc(0);
+$h5-font-reduction: 0;
+$h6-font-reduction: 0;
+
+// These control how subheaders are styled.
+$subheader-line-height: 1.4;
+$subheader-font-color: scale-color($header-font-color, $lightness: 35%);
+$subheader-font-weight: $font-weight-normal;
+$subheader-top-margin: .2rem;
+$subheader-bottom-margin: .5rem;
+
+// A general <small> styling
+$small-font-size: 60%;
+$small-font-color: scale-color($header-font-color, $lightness: 35%);
+
+// We use these to style paragraphs
+// $paragraph-font-family: inherit;
+// $paragraph-font-weight: $font-weight-normal;
+ $paragraph-font-size: rem-calc(14);
+// $paragraph-line-height: 1.6;
+// $paragraph-margin-bottom: rem-calc(20);
+// $paragraph-aside-font-size: rem-calc(14);
+// $paragraph-aside-line-height: 1.35;
+// $paragraph-aside-font-style: italic;
+// $paragraph-text-rendering: optimizeLegibility;
+
+// We use these to style <code> tags
+// $code-color: $oil;
+// $code-font-family: $font-family-monospace;
+// $code-font-weight: $font-weight-normal;
+// $code-background-color: scale-color($secondary-color, $lightness: 70%);
+// $code-border-size: 1px;
+// $code-border-style: solid;
+// $code-border-color: scale-color($code-background-color, $lightness: -10%);
+// $code-padding: rem-calc(2) rem-calc(5) rem-calc(1);
+
+// We use these to style anchors
+// $anchor-text-decoration: none;
+// $anchor-text-decoration-hover: none;
+// $anchor-font-color: $primary-color;
+// $anchor-font-color-hover: scale-color($anchor-font-color, $lightness: -14%);
+
+// We use these to style the <hr> element
+// $hr-border-width: 1px;
+// $hr-border-style: solid;
+// $hr-border-color: $gainsboro;
+// $hr-margin: rem-calc(20);
+
+// We use these to style lists
+// $list-font-family: $paragraph-font-family;
+// $list-font-size: $paragraph-font-size;
+// $list-line-height: $paragraph-line-height;
+// $list-margin-bottom: $paragraph-margin-bottom;
+// $list-style-position: outside;
+// $list-side-margin: 1.1rem;
+// $list-ordered-side-margin: 1.4rem;
+// $list-side-margin-no-bullet: 0;
+// $list-nested-margin: rem-calc(20);
+// $definition-list-header-weight: $font-weight-bold;
+// $definition-list-header-margin-bottom: .3rem;
+// $definition-list-margin-bottom: rem-calc(12);
+
+// We use these to style blockquotes
+// $blockquote-font-color: scale-color($header-font-color, $lightness: 35%);
+// $blockquote-padding: rem-calc(9 20 0 19);
+// $blockquote-border: 1px solid $gainsboro;
+// $blockquote-cite-font-size: rem-calc(13);
+// $blockquote-cite-font-color: scale-color($header-font-color, $lightness: 23%);
+// $blockquote-cite-link-color: $blockquote-cite-font-color;
+
+// Acronym styles
+// $acronym-underline: 1px dotted $gainsboro;
+
+// We use these to control padding and margin
+// $microformat-padding: rem-calc(10 12);
+// $microformat-margin: rem-calc(0 0 20 0);
+
+// We use these to control the border styles
+// $microformat-border-width: 1px;
+// $microformat-border-style: solid;
+// $microformat-border-color: $gainsboro;
+
+// We use these to control full name font styles
+// $microformat-fullname-font-weight: $font-weight-bold;
+// $microformat-fullname-font-size: rem-calc(15);
+
+// We use this to control the summary font styles
+// $microformat-summary-font-weight: $font-weight-bold;
+
+// We use this to control abbr padding
+// $microformat-abbr-padding: rem-calc(0 1);
+
+// We use this to control abbr font styles
+// $microformat-abbr-font-weight: $font-weight-bold;
+// $microformat-abbr-font-decoration: none;
+
+// 01. Accordion
+// - - - - - - - - - - - - - - - - - - - - - - - - -
+
+// $include-html-accordion-classes: $include-html-classes;
+
+// $accordion-navigation-padding: rem-calc(16);
+// $accordion-navigation-bg-color: $silver;
+// $accordion-navigation-hover-bg-color: scale-color($accordion-navigation-bg-color, $lightness: -5%);
+// $accordion-navigation-active-bg-color: scale-color($accordion-navigation-bg-color, $lightness: -3%);
+// $accordion-navigation-font-color: $jet;
+// $accordion-navigation-font-size: rem-calc(16);
+// $accordion-navigation-font-family: $body-font-family;
+
+// $accordion-content-padding: ($column-gutter/2);
+// $accordion-content-active-bg-color: $white;
+
+// 02. Alert Boxes
+// - - - - - - - - - - - - - - - - - - - - - - - - -
+
+// $include-html-alert-classes: $include-html-classes;
+
+// We use this to control alert padding.
+// $alert-padding-top: rem-calc(14);
+// $alert-padding-default-float: $alert-padding-top;
+// $alert-padding-opposite-direction: $alert-padding-top + rem-calc(10);
+// $alert-padding-bottom: $alert-padding-top;
+
+// We use these to control text style.
+// $alert-font-weight: $font-weight-normal;
+// $alert-font-size: rem-calc(13);
+// $alert-font-color: $white;
+// $alert-font-color-alt: scale-color($secondary-color, $lightness: -66%);
+
+// We use this for close hover effect.
+// $alert-function-factor: -14%;
+
+// We use these to control border styles.
+// $alert-border-style: solid;
+// $alert-border-width: 1px;
+// $alert-border-color: scale-color($primary-color, $lightness: $alert-function-factor);
+// $alert-bottom-margin: rem-calc(20);
+
+// We use these to style the close buttons
+// $alert-close-color: $oil;
+// $alert-close-top: 50%;
+// $alert-close-position: rem-calc(4);
+// $alert-close-font-size: rem-calc(22);
+// $alert-close-opacity: 0.3;
+// $alert-close-opacity-hover: 0.5;
+// $alert-close-padding: 9px 6px 4px;
+// $alert-close-background: inherit;
+
+// We use this to control border radius
+// $alert-radius: $global-radius;
+
+// $alert-transition-speed: 300ms;
+// $alert-transition-ease: ease-out;
+
+// 03. Block Grid
+// - - - - - - - - - - - - - - - - - - - - - - - - -
+
+// $include-html-block-grid-classes: $include-html-classes;
+// $include-xl-html-block-grid-classes: false;
+
+// We use this to control the maximum number of block grid elements per row
+// $block-grid-elements: 12;
+// $block-grid-default-spacing: rem-calc(20);
+
+// $align-block-grid-to-grid: false;
+// @if $align-block-grid-to-grid {$block-grid-default-spacing: $column-gutter;}
+
+// Enables media queries for block-grid classes. Set to false if writing semantic HTML.
+// $block-grid-media-queries: true;
+
+// 04. Breadcrumbs
+// - - - - - - - - - - - - - - - - - - - - - - - - -
+
+// $include-html-nav-classes: $include-html-classes;
+
+// We use this to set the background color for the breadcrumb container.
+// $crumb-bg: scale-color($secondary-color, $lightness: 55%);
+
+// We use these to set the padding around the breadcrumbs.
+// $crumb-padding: rem-calc(9 14 9);
+// $crumb-side-padding: rem-calc(12);
+
+// We use these to control border styles.
+// $crumb-function-factor: -10%;
+// $crumb-border-size: 1px;
+// $crumb-border-style: solid;
+// $crumb-border-color: scale-color($crumb-bg, $lightness: $crumb-function-factor);
+// $crumb-radius: $global-radius;
+
+// We use these to set various text styles for breadcrumbs.
+// $crumb-font-size: rem-calc(11);
+// $crumb-font-color: $primary-color;
+// $crumb-font-color-current: $oil;
+// $crumb-font-color-unavailable: $aluminum;
+// $crumb-font-transform: uppercase;
+// $crumb-link-decor: underline;
+
+// We use these to control the slash between breadcrumbs
+// $crumb-slash-color: $base;
+// $crumb-slash: "/";
+
+// 05. Buttons
+// - - - - - - - - - - - - - - - - - - - - - - - - -
+
+// $include-html-button-classes: $include-html-classes;
+
+// We use these to build padding for buttons.
+// $button-tny: rem-calc(10);
+// $button-sml: rem-calc(14);
+// $button-med: rem-calc(16);
+// $button-lrg: rem-calc(18);
+
+// We use this to control the display property.
+// $button-display: inline-block;
+// $button-margin-bottom: rem-calc(20);
+
+// We use these to control button text styles.
+// $button-font-family: $body-font-family;
+// $button-font-color: $white;
+// $button-font-color-alt: $oil;
+// $button-font-tny: rem-calc(11);
+// $button-font-sml: rem-calc(13);
+// $button-font-med: rem-calc(16);
+// $button-font-lrg: rem-calc(20);
+// $button-font-weight: $font-weight-normal;
+// $button-font-align: center;
+
+// We use these to control various hover effects.
+// $button-function-factor: -20%;
+
+// We use these to control button border styles.
+// $button-border-width: 0;
+// $button-border-style: solid;
+// $button-bg-color: $primary-color;
+// $button-bg-hover: scale-color($button-bg-color, $lightness: $button-function-factor);
+// $button-border-color: $button-bg-hover;
+// $secondary-button-bg-hover: scale-color($secondary-color, $lightness: $button-function-factor);
+// $secondary-button-border-color: $secondary-button-bg-hover;
+// $success-button-bg-hover: scale-color($success-color, $lightness: $button-function-factor);
+// $success-button-border-color: $success-button-bg-hover;
+// $alert-button-bg-hover: scale-color($alert-color, $lightness: $button-function-factor);
+// $alert-button-border-color: $alert-button-bg-hover;
+// $warning-button-bg-hover: scale-color($warning-color, $lightness: $button-function-factor);
+// $warning-button-border-color: $warning-button-bg-hover;
+// $info-button-bg-hover: scale-color($info-color, $lightness: $button-function-factor);
+// $info-button-border-color: $info-button-bg-hover;
+
+// We use this to set the default radius used throughout the core.
+// $button-radius: $global-radius;
+// $button-round: $global-rounded;
+
+// We use this to set default opacity and cursor for disabled buttons.
+// $button-disabled-opacity: 0.7;
+// $button-disabled-cursor: $cursor-default-value;
+
+// 06. Button Groups
+// - - - - - - - - - - - - - - - - - - - - - - - - -
+
+// $include-html-button-classes: $include-html-classes;
+
+// Sets the margin for the right side by default, and the left margin if right-to-left direction is used
+// $button-bar-margin-opposite: rem-calc(10);
+// $button-group-border-width: 1px;
+
+// 07. Clearing
+// - - - - - - - - - - - - - - - - - - - - - - - - -
+
+// $include-html-clearing-classes: $include-html-classes;
+
+// We use these to set the background colors for parts of Clearing.
+// $clearing-bg: $oil;
+// $clearing-caption-bg: $clearing-bg;
+// $clearing-carousel-bg: rgba(51,51,51,0.8);
+// $clearing-img-bg: $clearing-bg;
+
+// We use these to style the close button
+// $clearing-close-color: $iron;
+// $clearing-close-size: 30px;
+
+// We use these to style the arrows
+// $clearing-arrow-size: 12px;
+// $clearing-arrow-color: $clearing-close-color;
+
+// We use these to style captions
+// $clearing-caption-font-color: $iron;
+// $clearing-caption-font-size: 0.875em;
+// $clearing-caption-padding: 10px 30px 20px;
+
+// We use these to make the image and carousel height and style
+// $clearing-active-img-height: 85%;
+// $clearing-carousel-height: 120px;
+// $clearing-carousel-thumb-width: 120px;
+// $clearing-carousel-thumb-active-border: 1px solid rgb(255,255,255);
+
+// 08. Dropdown
+// - - - - - - - - - - - - - - - - - - - - - - - - -
+
+// $include-html-dropdown-classes: $include-html-classes;
+
+// We use these to controls height and width styles.
+// $f-dropdown-max-width: 200px;
+// $f-dropdown-height: auto;
+// $f-dropdown-max-height: none;
+
+// Used for bottom position
+// $f-dropdown-margin-top: 2px;
+
+// Used for right position
+// $f-dropdown-margin-left: $f-dropdown-margin-top;
+
+// Used for left position
+// $f-dropdown-margin-right: $f-dropdown-margin-top;
+
+// Used for top position
+// $f-dropdown-margin-bottom: $f-dropdown-margin-top;
+
+// We use this to control the background color
+ $f-dropdown-bg: $white;
+
+// We use this to set the border styles for dropdowns.
+// $f-dropdown-border-style: solid;
+// $f-dropdown-border-width: 1px;
+// $f-dropdown-border-color: scale-color($white, $lightness: -20%);
+
+// We use these to style the triangle pip.
+// $f-dropdown-triangle-size: 6px;
+// $f-dropdown-triangle-color: $white;
+// $f-dropdown-triangle-side-offset: 10px;
+
+// We use these to control styles for the list elements.
+// $f-dropdown-list-style: none;
+// $f-dropdown-font-color: $charcoal;
+// $f-dropdown-font-size: rem-calc(13);
+// $f-dropdown-list-padding: rem-calc(5, 10);
+// $f-dropdown-line-height: rem-calc(18);
+// $f-dropdown-list-hover-bg: $smoke;
+// $dropdown-mobile-default-float: 0;
+
+// We use this to control the styles for when the dropdown has custom content.
+ $f-dropdown-content-padding: rem-calc(16);
+
+// Default radius for dropdown.
+// $f-dropdown-radius: $global-radius;
+
+
+// 09. Dropdown Buttons
+// - - - - - - - - - - - - - - - - - - - - - - - - -
+
+// $include-html-button-classes: $include-html-classes;
+
+// We use these to set the color of the pip in dropdown buttons
+// $dropdown-button-pip-color: $white;
+// $dropdown-button-pip-color-alt: $oil;
+
+// We use these to set the size of the pip in dropdown buttons
+// $button-pip-tny: rem-calc(6);
+// $button-pip-sml: rem-calc(7);
+// $button-pip-med: rem-calc(9);
+// $button-pip-lrg: rem-calc(11);
+
+// We use these to style tiny dropdown buttons
+// $dropdown-button-padding-tny: $button-pip-tny * 7;
+// $dropdown-button-pip-size-tny: $button-pip-tny;
+// $dropdown-button-pip-opposite-tny: $button-pip-tny * 3;
+// $dropdown-button-pip-top-tny: (-$button-pip-tny / 2) + rem-calc(1);
+
+// We use these to style small dropdown buttons
+// $dropdown-button-padding-sml: $button-pip-sml * 7;
+// $dropdown-button-pip-size-sml: $button-pip-sml;
+// $dropdown-button-pip-opposite-sml: $button-pip-sml * 3;
+// $dropdown-button-pip-top-sml: (-$button-pip-sml / 2) + rem-calc(1);
+
+// We use these to style medium dropdown buttons
+// $dropdown-button-padding-med: $button-pip-med * 6 + rem-calc(3);
+// $dropdown-button-pip-size-med: $button-pip-med - rem-calc(3);
+// $dropdown-button-pip-opposite-med: $button-pip-med * 2.5;
+// $dropdown-button-pip-top-med: (-$button-pip-med / 2) + rem-calc(2);
+
+// We use these to style large dropdown buttons
+// $dropdown-button-padding-lrg: $button-pip-lrg * 5 + rem-calc(3);
+// $dropdown-button-pip-size-lrg: $button-pip-lrg - rem-calc(6);
+// $dropdown-button-pip-opposite-lrg: $button-pip-lrg * 2.5;
+// $dropdown-button-pip-top-lrg: (-$button-pip-lrg / 2) + rem-calc(3);
+
+// 10. Flex Video
+// - - - - - - - - - - - - - - - - - - - - - - - - -
+
+// $include-html-media-classes: $include-html-classes;
+
+// We use these to control video container padding and margins
+// $flex-video-padding-top: rem-calc(25);
+// $flex-video-padding-bottom: 67.5%;
+// $flex-video-margin-bottom: rem-calc(16);
+
+// We use this to control widescreen bottom padding
+// $flex-video-widescreen-padding-bottom: 56.34%;
+
+// 11. Forms
+// - - - - - - - - - - - - - - - - - - - - - - - - -
+
+// $include-html-form-classes: $include-html-classes;
+
+// We use this to set the base for lots of form spacing and positioning styles
+// $form-spacing: rem-calc(16);
+
+// We use these to style the labels in different ways
+// $form-label-pointer: pointer;
+// $form-label-font-size: rem-calc(14);
+// $form-label-font-weight: $font-weight-normal;
+// $form-label-line-height: 1.5;
+// $form-label-font-color: scale-color($black, $lightness: 30%);
+// $form-label-small-transform: capitalize;
+// $form-label-bottom-margin: 0;
+// $input-font-family: inherit;
+// $input-font-color: rgba(0,0,0,0.75);
+// $input-font-size: rem-calc(14);
+// $input-bg-color: $white;
+// $input-focus-bg-color: scale-color($white, $lightness: -2%);
+// $input-border-color: scale-color($white, $lightness: -20%);
+// $input-focus-border-color: scale-color($white, $lightness: -40%);
+// $input-border-style: solid;
+// $input-border-width: 1px;
+// $input-border-radius: $global-radius;
+// $input-disabled-bg: $gainsboro;
+// $input-disabled-cursor: $cursor-default-value;
+// $input-box-shadow: inset 0 1px 2px rgba(0,0,0,0.1);
+// $input-include-glowing-effect: true;
+
+// We use these to style the fieldset border and spacing.
+// $fieldset-border-style: solid;
+// $fieldset-border-width: 1px;
+// $fieldset-border-color: $gainsboro;
+// $fieldset-padding: rem-calc(20);
+// $fieldset-margin: rem-calc(18 0);
+
+// We use these to style the legends when you use them
+// $legend-bg: $white;
+// $legend-font-weight: $font-weight-bold;
+// $legend-padding: rem-calc(0 3);
+
+// We use these to style the prefix and postfix input elements
+// $input-prefix-bg: scale-color($white, $lightness: -5%);
+// $input-prefix-border-color: scale-color($white, $lightness: -20%);
+// $input-prefix-border-size: 1px;
+// $input-prefix-border-type: solid;
+// $input-prefix-overflow: hidden;
+// $input-prefix-font-color: $oil;
+// $input-prefix-font-color-alt: $white;
+
+// We use this setting to turn on/off HTML5 number spinners (the up/down arrows)
+// $input-number-spinners: true;
+
+// We use these to style the error states for inputs and labels
+// $input-error-message-padding: rem-calc(6 9 9);
+// $input-error-message-top: -1px;
+// $input-error-message-font-size: rem-calc(12);
+// $input-error-message-font-weight: $font-weight-normal;
+// $input-error-message-font-style: italic;
+// $input-error-message-font-color: $white;
+// $input-error-message-bg-color: $alert-color;
+// $input-error-message-font-color-alt: $oil;
+
+// We use this to style the glowing effect of inputs when focused
+// $glowing-effect-fade-time: 0.45s;
+// $glowing-effect-color: $input-focus-border-color;
+
+// Select variables
+// $select-bg-color: $ghost;
+// $select-hover-bg-color: scale-color($select-bg-color, $lightness: -3%);
+
+
+// 12. Icon Bar
+// - - - - - - - - - - - - - - - - - - - - - - - - -
+
+// We use these to style the icon-bar and items
+// $icon-bar-bg: $oil;
+// $icon-bar-font-color: $white;
+// $icon-bar-font-color-hover: $icon-bar-font-color;
+// $icon-bar-font-size: 1rem;
+// $icon-bar-hover-color: $primary-color;
+// $icon-bar-icon-color: $white;
+// $icon-bar-icon-color-hover: $icon-bar-icon-color;
+// $icon-bar-icon-size: 1.875rem;
+// $icon-bar-image-width: 1.875rem;
+// $icon-bar-image-height: 1.875rem;
+// $icon-bar-active-color: $primary-color;
+// $icon-bar-item-padding: 1.25rem;
+
+// We use this to set default opacity and cursor for disabled icons.
+// $icon-bar-disabled-opacity: 0.7;
+
+// 13. Inline Lists
+// - - - - - - - - - - - - - - - - - - - - - - - - -
+
+// $include-html-inline-list-classes: $include-html-classes;
+
+// We use this to control the margins and padding of the inline list.
+// $inline-list-top-margin: 0;
+// $inline-list-opposite-margin: 0;
+// $inline-list-bottom-margin: rem-calc(17);
+// $inline-list-default-float-margin: rem-calc(-22);
+// $inline-list-default-float-list-margin: rem-calc(22);
+
+// $inline-list-padding: 0;
+
+// We use this to control the overflow of the inline list.
+// $inline-list-overflow: hidden;
+
+// We use this to control the list items
+// $inline-list-display: block;
+
+// We use this to control any elements within list items
+// $inline-list-children-display: block;
+
+// 14. Joyride
+// - - - - - - - - - - - - - - - - - - - - - - - - -
+
+// $include-html-joyride-classes: $include-html-classes;
+
+// Controlling default Joyride styles
+// $joyride-tip-bg: $oil;
+// $joyride-tip-default-width: 300px;
+// $joyride-tip-padding: rem-calc(18 20 24);
+// $joyride-tip-border: solid 1px $charcoal;
+// $joyride-tip-radius: 4px;
+// $joyride-tip-position-offset: 22px;
+
+// Here, we're setting the tip font styles
+// $joyride-tip-font-color: $white;
+// $joyride-tip-font-size: rem-calc(14);
+// $joyride-tip-header-weight: $font-weight-bold;
+
+// This changes the nub size
+// $joyride-tip-nub-size: 10px;
+
+// This adjusts the styles for the timer when its enabled
+// $joyride-tip-timer-width: 50px;
+// $joyride-tip-timer-height: 3px;
+// $joyride-tip-timer-color: $steel;
+
+// This changes up the styles for the close button
+// $joyride-tip-close-color: $monsoon;
+// $joyride-tip-close-size: 24px;
+// $joyride-tip-close-weight: $font-weight-normal;
+
+// When Joyride is filling the screen, we use this style for the bg
+// $joyride-screenfill: rgba(0,0,0,0.5);
+
+// 15. Keystrokes
+// - - - - - - - - - - - - - - - - - - - - - - - - -
+
+// $include-html-keystroke-classes: $include-html-classes;
+
+// We use these to control text styles.
+// $keystroke-font: "Consolas", "Menlo", "Courier", monospace;
+// $keystroke-font-size: inherit;
+// $keystroke-font-color: $jet;
+// $keystroke-font-color-alt: $white;
+// $keystroke-function-factor: -7%;
+
+// We use this to control keystroke padding.
+// $keystroke-padding: rem-calc(2 4 0);
+
+// We use these to control background and border styles.
+// $keystroke-bg: scale-color($white, $lightness: $keystroke-function-factor);
+// $keystroke-border-style: solid;
+// $keystroke-border-width: 1px;
+// $keystroke-border-color: scale-color($keystroke-bg, $lightness: $keystroke-function-factor);
+// $keystroke-radius: $global-radius;
+
+// 16. Labels
+// - - - - - - - - - - - - - - - - - - - - - - - - -
+
+// $include-html-label-classes: $include-html-classes;
+
+// We use these to style the labels
+// $label-padding: rem-calc(4 8 4);
+// $label-radius: $global-radius;
+
+// We use these to style the label text
+// $label-font-sizing: rem-calc(11);
+// $label-font-weight: $font-weight-normal;
+// $label-font-color: $oil;
+// $label-font-color-alt: $white;
+// $label-font-family: $body-font-family;
+
+// 17. Magellan
+// - - - - - - - - - - - - - - - - - - - - - - - - -
+
+// $include-html-magellan-classes: $include-html-classes;
+
+// $magellan-bg: $white;
+// $magellan-padding: 10px;
+
+// 18. Off-canvas
+// - - - - - - - - - - - - - - - - - - - - - - - - -
+
+// Off Canvas Tab Bar Variables
+// $include-html-off-canvas-classes: $include-html-classes;
+
+ $tabbar-bg: $l-blue;
+// $tabbar-height: rem-calc(45);
+// $tabbar-icon-width: $tabbar-height;
+// $tabbar-line-height: $tabbar-height;
+// $tabbar-color: $white;
+// $tabbar-middle-padding: 0 rem-calc(10);
+
+// Off Canvas Divider Styles
+// $tabbar-left-section-border: solid 1px scale-color($tabbar-bg, $lightness: -50%);
+// $tabbar-right-section-border: $tabbar-left-section-border;
+
+
+// Off Canvas Tab Bar Headers
+// $tabbar-header-color: $white;
+// $tabbar-header-weight: $font-weight-bold;
+// $tabbar-header-line-height: $tabbar-height;
+// $tabbar-header-margin: 0;
+
+// Off Canvas Menu Variables
+// $off-canvas-width: rem-calc(250);
+ $off-canvas-bg: $l-blue;
+
+// Off Canvas Menu List Variables
+// $off-canvas-label-padding: 0.3rem rem-calc(15);
+// $off-canvas-label-color: $aluminum;
+// $off-canvas-label-text-transform: uppercase;
+// $off-canvas-label-font-size: rem-calc(12);
+// $off-canvas-label-font-weight: $font-weight-bold;
+// $off-canvas-label-bg: $tuatara;
+// $off-canvas-label-border-top: 1px solid scale-color($off-canvas-label-bg, $lightness: 14%);
+// $off-canvas-label-border-bottom: none;
+// $off-canvas-label-margin:0;
+// $off-canvas-link-padding: rem-calc(10, 15);
+// $off-canvas-link-color: rgba($white, 0.7);
+// $off-canvas-link-border-bottom: 1px solid scale-color($off-canvas-bg, $lightness: -25%);
+// $off-canvas-back-bg: #444;
+// $off-canvas-back-border-top: $off-canvas-label-border-top;
+// $off-canvas-back-border-bottom: $off-canvas-label-border-bottom;
+// $off-canvas-back-hover-bg: scale-color($off-canvas-back-bg, $lightness: -30%);
+// $off-canvas-back-hover-border-top: 1px solid scale-color($off-canvas-label-bg, $lightness: 14%);
+// $off-canvas-back-hover-border-bottom: none;
+
+// Off Canvas Menu Icon Variables
+// $tabbar-menu-icon-color: $white;
+// $tabbar-menu-icon-hover: scale-color($tabbar-menu-icon-color, $lightness: -30%);
+
+/* $tabbar-menu-icon-text-indent: rem-calc(55);*/
+// $tabbar-menu-icon-width: $tabbar-icon-width;
+// $tabbar-menu-icon-height: $tabbar-height;
+// $tabbar-menu-icon-padding: 0;
+
+// $tabbar-hamburger-icon-width: rem-calc(16);
+// $tabbar-hamburger-icon-left: false;
+// $tabbar-hamburger-icon-top: false;
+// $tabbar-hamburger-icon-thickness: 1px;
+// $tabbar-hamburger-icon-gap: 6px;
+
+// Off Canvas Back-Link Overlay
+// $off-canvas-overlay-transition: background 300ms ease;
+// $off-canvas-overlay-cursor: pointer;
+// $off-canvas-overlay-box-shadow: -4px 0 4px rgba($black, 0.5), 4px 0 4px rgba($black, 0.5);
+// $off-canvas-overlay-background: rgba($white, 0.2);
+// $off-canvas-overlay-background-hover: rgba($white, 0.05);
+
+// Transition Variables
+// $menu-slide: "transform 500ms ease";
+
+// 19. Orbit
+// - - - - - - - - - - - - - - - - - - - - - - - - -
+
+// $include-html-orbit-classes: $include-html-classes;
+
+// We use these to control the caption styles
+// $orbit-container-bg: none;
+// $orbit-caption-bg: rgba(51,51,51, 0.8);
+// $orbit-caption-font-color: $white;
+// $orbit-caption-font-size: rem-calc(14);
+// $orbit-caption-position: "bottom"; // Supported values: "bottom", "under"
+// $orbit-caption-padding: rem-calc(10 14);
+// $orbit-caption-height: auto;
+
+// We use these to control the left/right nav styles
+// $orbit-nav-bg: transparent;
+// $orbit-nav-bg-hover: rgba(0,0,0,0.3);
+// $orbit-nav-arrow-color: $white;
+// $orbit-nav-arrow-color-hover: $white;
+
+// We use these to control the timer styles
+// $orbit-timer-bg: rgba(255,255,255,0.3);
+// $orbit-timer-show-progress-bar: true;
+
+// We use these to control the bullet nav styles
+// $orbit-bullet-nav-color: $iron;
+// $orbit-bullet-nav-color-active: $aluminum;
+// $orbit-bullet-radius: rem-calc(9);
+
+// We use these to controls the style of slide numbers
+// $orbit-slide-number-bg: rgba(0,0,0,0);
+// $orbit-slide-number-font-color: $white;
+// $orbit-slide-number-padding: rem-calc(5);
+
+// Graceful Loading Wrapper and preloader
+// $wrapper-class: "slideshow-wrapper";
+// $preloader-class: "preloader";
+
+// Hide controls on small
+// $orbit-nav-hide-for-small: true;
+// $orbit-bullet-hide-for-small: true;
+// $orbit-timer-hide-for-small: true;
+
+// 20. Pagination
+// - - - - - - - - - - - - - - - - - - - - - - - - -
+
+// $include-pagination-classes: $include-html-classes;
+
+// We use these to control the pagination container
+// $pagination-height: rem-calc(24);
+// $pagination-margin: rem-calc(-5);
+
+// We use these to set the list-item properties
+// $pagination-li-float: $default-float;
+// $pagination-li-height: rem-calc(24);
+// $pagination-li-font-color: $jet;
+// $pagination-li-font-size: rem-calc(14);
+// $pagination-li-margin: rem-calc(5);
+
+// We use these for the pagination anchor links
+// $pagination-link-pad: rem-calc(1 10 1);
+// $pagination-link-font-color: $aluminum;
+// $pagination-link-active-bg: scale-color($white, $lightness: -10%);
+
+// We use these for disabled anchor links
+// $pagination-link-unavailable-cursor: default;
+// $pagination-link-unavailable-font-color: $aluminum;
+// $pagination-link-unavailable-bg-active: transparent;
+
+// We use these for currently selected anchor links
+// $pagination-link-current-background: $primary-color;
+// $pagination-link-current-font-color: $white;
+// $pagination-link-current-font-weight: $font-weight-bold;
+// $pagination-link-current-cursor: default;
+// $pagination-link-current-active-bg: $primary-color;
+
+// 21. Panels
+// - - - - - - - - - - - - - - - - - - - - - - - - -
+
+// $include-html-panel-classes: $include-html-classes;
+
+// We use these to control the background and border styles
+// $panel-bg: scale-color($white, $lightness: -5%);
+// $panel-border-style: solid;
+// $panel-border-size: 1px;
+
+// We use this % to control how much we darken things on hover
+// $panel-function-factor: -11%;
+// $panel-border-color: scale-color($panel-bg, $lightness: $panel-function-factor);
+
+// We use these to set default inner padding and bottom margin
+// $panel-margin-bottom: rem-calc(20);
+// $panel-padding: rem-calc(20);
+
+// We use these to set default font colors
+// $panel-font-color: $oil;
+// $panel-font-color-alt: $white;
+
+// $panel-header-adjust: true;
+// $callout-panel-link-color: $primary-color;
+// $callout-panel-link-color-hover: scale-color($callout-panel-link-color, $lightness: -14%);
+
+// 22. Pricing Tables
+// - - - - - - - - - - - - - - - - - - - - - - - - -
+
+// $include-html-pricing-classes: $include-html-classes;
+
+// We use this to control the border color
+// $price-table-border: solid 1px $gainsboro;
+
+// We use this to control the bottom margin of the pricing table
+// $price-table-margin-bottom: rem-calc(20);
+
+// We use these to control the title styles
+// $price-title-bg: $oil;
+// $price-title-padding: rem-calc(15 20);
+// $price-title-align: center;
+// $price-title-color: $smoke;
+// $price-title-weight: $font-weight-normal;
+// $price-title-size: rem-calc(16);
+// $price-title-font-family: $body-font-family;
+
+// We use these to control the price styles
+// $price-money-bg: $vapor;
+// $price-money-padding: rem-calc(15 20);
+// $price-money-align: center;
+// $price-money-color: $oil;
+// $price-money-weight: $font-weight-normal;
+// $price-money-size: rem-calc(32);
+// $price-money-font-family: $body-font-family;
+
+
+// We use these to control the description styles
+// $price-bg: $white;
+// $price-desc-color: $monsoon;
+// $price-desc-padding: rem-calc(15);
+// $price-desc-align: center;
+// $price-desc-font-size: rem-calc(12);
+// $price-desc-weight: $font-weight-normal;
+// $price-desc-line-height: 1.4;
+// $price-desc-bottom-border: dotted 1px $gainsboro;
+
+// We use these to control the list item styles
+// $price-item-color: $oil;
+// $price-item-padding: rem-calc(15);
+// $price-item-align: center;
+// $price-item-font-size: rem-calc(14);
+// $price-item-weight: $font-weight-normal;
+// $price-item-bottom-border: dotted 1px $gainsboro;
+
+// We use these to control the CTA area styles
+// $price-cta-bg: $white;
+// $price-cta-align: center;
+// $price-cta-padding: rem-calc(20 20 0);
+
+// 23. Progress Bar
+// - - - - - - - - - - - - - - - - - - - - - - - - -
+
+// $include-html-media-classes: $include-html-classes;
+
+// We use this to set the progress bar height
+// $progress-bar-height: rem-calc(25);
+// $progress-bar-color: $vapor;
+
+// We use these to control the border styles
+// $progress-bar-border-color: scale-color($white, $lightness: 20%);
+// $progress-bar-border-size: 1px;
+// $progress-bar-border-style: solid;
+// $progress-bar-border-radius: $global-radius;
+
+// We use these to control the margin & padding
+// $progress-bar-margin-bottom: rem-calc(10);
+
+// We use these to set the meter colors
+// $progress-meter-color: $primary-color;
+// $progress-meter-secondary-color: $secondary-color;
+// $progress-meter-success-color: $success-color;
+// $progress-meter-alert-color: $alert-color;
+
+// 24. Range Slider
+// - - - - - - - - - - - - - - - - - - - - - - - - -
+
+// $include-html-range-slider-classes: $include-html-classes;
+
+// These variabels define the slider bar styles
+// $range-slider-bar-width: 100%;
+// $range-slider-bar-height: rem-calc(16);
+
+// $range-slider-bar-border-width: 1px;
+// $range-slider-bar-border-style: solid;
+// $range-slider-bar-border-color: $gainsboro;
+// $range-slider-radius: $global-radius;
+// $range-slider-round: $global-rounded;
+// $range-slider-bar-bg-color: $ghost;
+// $range-slider-active-segment-bg-color: scale-color($secondary-color, $lightness: -1%);
+
+// Vertical bar styles
+// $range-slider-vertical-bar-width: rem-calc(16);
+// $range-slider-vertical-bar-height: rem-calc(200);
+
+// These variabels define the slider handle styles
+// $range-slider-handle-width: rem-calc(32);
+// $range-slider-handle-height: rem-calc(22);
+// $range-slider-handle-position-top: rem-calc(-5);
+// $range-slider-handle-bg-color: $primary-color;
+// $range-slider-handle-border-width: 1px;
+// $range-slider-handle-border-style: solid;
+// $range-slider-handle-border-color: none;
+// $range-slider-handle-radius: $global-radius;
+// $range-slider-handle-round: $global-rounded;
+// $range-slider-handle-bg-hover-color: scale-color($primary-color, $lightness: -12%);
+// $range-slider-handle-cursor: pointer;
+
+// $range-slider-disabled-opacity: 0.7;
+// $range-slider-disabled-cursor: $cursor-disabled-value;
+
+// 25. Reveal
+// - - - - - - - - - - - - - - - - - - - - - - - - -
+
+// $include-html-reveal-classes: $include-html-classes;
+
+// We use these to control the style of the reveal overlay.
+// $reveal-overlay-bg: rgba($black, .45);
+// $reveal-overlay-bg-old: $black;
+
+// We use these to control the style of the modal itself.
+// $reveal-modal-bg: $white;
+// $reveal-position-top: rem-calc(100);
+// $reveal-default-width: 80%;
+// $reveal-max-width: $row-width;
+// $reveal-modal-padding: rem-calc(20);
+// $reveal-box-shadow: 0 0 10px rgba($black,.4);
+
+// We use these to style the reveal close button
+// $reveal-close-font-size: rem-calc(40);
+// $reveal-close-top: rem-calc(10);
+// $reveal-close-side: rem-calc(22);
+// $reveal-close-color: $base;
+// $reveal-close-weight: $font-weight-bold;
+
+// We use this to set the default radius used throughout the core.
+// $reveal-radius: $global-radius;
+// $reveal-round: $global-rounded;
+
+// We use these to control the modal border
+// $reveal-border-style: solid;
+// $reveal-border-width: 1px;
+// $reveal-border-color: $steel;
+
+// $reveal-modal-class: "reveal-modal";
+// $close-reveal-modal-class: "close-reveal-modal";
+
+// 26. Side Nav
+// - - - - - - - - - - - - - - - - - - - - - - - - -
+
+// $include-html-nav-classes: $include-html-classes;
+
+// We use this to control padding.
+// $side-nav-padding: rem-calc(14 0);
+
+// We use these to control list styles.
+// $side-nav-list-type: none;
+// $side-nav-list-position: outside;
+// $side-nav-list-margin: rem-calc(0 0 7 0);
+
+// We use these to control link styles.
+// $side-nav-link-color: $primary-color;
+// $side-nav-link-color-active: scale-color($side-nav-link-color, $lightness: 30%);
+// $side-nav-link-color-hover: scale-color($side-nav-link-color, $lightness: 30%);
+// $side-nav-link-bg-hover: hsla(0, 0, 0, 0.025);
+// $side-nav-link-margin: 0;
+// $side-nav-link-padding: rem-calc(7 14);
+// $side-nav-font-size: rem-calc(14);
+// $side-nav-font-weight: $font-weight-normal;
+// $side-nav-font-weight-active: $side-nav-font-weight;
+// $side-nav-font-family: $body-font-family;
+// $side-nav-font-family-active: $side-nav-font-family;
+
+// We use these to control heading styles.
+// $side-nav-heading-color: $side-nav-link-color;
+// $side-nav-heading-font-size: $side-nav-font-size;
+// $side-nav-heading-font-weight: bold;
+// $side-nav-heading-text-transform: uppercase;
+
+// We use these to control border styles
+// $side-nav-divider-size: 1px;
+// $side-nav-divider-style: solid;
+// $side-nav-divider-color: scale-color($white, $lightness: 10%);
+
+// 27. Split Buttons
+// - - - - - - - - - - - - - - - - - - - - - - - - -
+
+// $include-html-button-classes: $include-html-classes;
+
+// We use these to control different shared styles for Split Buttons
+// $split-button-function-factor: 10%;
+// $split-button-pip-color: $white;
+// $split-button-pip-color-alt: $oil;
+// $split-button-active-bg-tint: rgba(0,0,0,0.1);
+
+// We use these to control tiny split buttons
+// $split-button-padding-tny: $button-pip-tny * 10;
+// $split-button-span-width-tny: $button-pip-tny * 6;
+// $split-button-pip-size-tny: $button-pip-tny;
+// $split-button-pip-top-tny: $button-pip-tny * 2;
+// $split-button-pip-default-float-tny: rem-calc(-6);
+
+// We use these to control small split buttons
+// $split-button-padding-sml: $button-pip-sml * 10;
+// $split-button-span-width-sml: $button-pip-sml * 6;
+// $split-button-pip-size-sml: $button-pip-sml;
+// $split-button-pip-top-sml: $button-pip-sml * 1.5;
+// $split-button-pip-default-float-sml: rem-calc(-6);
+
+// We use these to control medium split buttons
+// $split-button-padding-med: $button-pip-med * 9;
+// $split-button-span-width-med: $button-pip-med * 5.5;
+// $split-button-pip-size-med: $button-pip-med - rem-calc(3);
+// $split-button-pip-top-med: $button-pip-med * 1.5;
+// $split-button-pip-default-float-med: rem-calc(-6);
+
+// We use these to control large split buttons
+// $split-button-padding-lrg: $button-pip-lrg * 8;
+// $split-button-span-width-lrg: $button-pip-lrg * 5;
+// $split-button-pip-size-lrg: $button-pip-lrg - rem-calc(6);
+// $split-button-pip-top-lrg: $button-pip-lrg + rem-calc(5);
+// $split-button-pip-default-float-lrg: rem-calc(-6);
+
+// 28. Sub Nav
+// - - - - - - - - - - - - - - - - - - - - - - - - -
+
+// $include-html-nav-classes: $include-html-classes;
+
+// We use these to control margin and padding
+// $sub-nav-list-margin: rem-calc(-4 0 18);
+// $sub-nav-list-padding-top: rem-calc(4);
+
+// We use this to control the definition
+// $sub-nav-font-family: $body-font-family;
+// $sub-nav-font-size: rem-calc(14);
+// $sub-nav-font-color: $aluminum;
+// $sub-nav-font-weight: $font-weight-normal;
+// $sub-nav-text-decoration: none;
+// $sub-nav-padding: rem-calc(3 16);
+// $sub-nav-border-radius: 3px;
+// $sub-nav-font-color-hover: scale-color($sub-nav-font-color, $lightness: -25%);
+
+
+// We use these to control the active item styles
+
+// $sub-nav-active-font-weight: $font-weight-normal;
+// $sub-nav-active-bg: $primary-color;
+// $sub-nav-active-bg-hover: scale-color($sub-nav-active-bg, $lightness: -14%);
+// $sub-nav-active-color: $white;
+// $sub-nav-active-padding: $sub-nav-padding;
+// $sub-nav-active-cursor: default;
+
+// $sub-nav-item-divider: "";
+// $sub-nav-item-divider-margin: rem-calc(12);
+
+// 29. Switch
+// - - - - - - - - - - - - - - - - - - - - - - - - -
+
+// $include-html-form-classes: $include-html-classes;
+
+// Controlling background color for the switch container
+// $switch-bg: $gainsboro;
+
+// We use these to control the switch heights for our default classes
+// $switch-height-tny: 1.5rem;
+// $switch-height-sml: 1.75rem;
+// $switch-height-med: 2rem;
+// $switch-height-lrg: 2.5rem;
+// $switch-bottom-margin: 1.5rem;
+
+// We use these to style the switch-paddle
+// $switch-paddle-bg: $white;
+// $switch-paddle-transition-speed: .15s;
+// $switch-paddle-transition-ease: ease-out;
+// $switch-active-color: $primary-color;
+
+// 30. Tables
+// - - - - - - - - - - - - - - - - - - - - - - - - -
+
+// $include-html-table-classes: $include-html-classes;
+
+// These control the background color for the table and even rows
+// $table-bg: $white;
+// $table-even-row-bg: $snow;
+
+// These control the table cell border style
+// $table-border-style: solid;
+// $table-border-size: 1px;
+// $table-border-color: $gainsboro;
+
+// These control the table head styles
+// $table-head-bg: $white-smoke;
+// $table-head-font-size: rem-calc(14);
+// $table-head-font-color: $jet;
+// $table-head-font-weight: $font-weight-bold;
+// $table-head-padding: rem-calc(8 10 10);
+
+// These control the table foot styles
+// $table-foot-bg: $table-head-bg;
+// $table-foot-font-size: $table-head-font-size;
+// $table-foot-font-color: $table-head-font-color;
+// $table-foot-font-weight: $table-head-font-weight;
+// $table-foot-padding: $table-head-padding;
+
+// These control the caption
+// table-caption-bg: transparent;
+// $table-caption-font-color: $table-head-font-color;
+// $table-caption-font-size: rem-calc(16);
+// $table-caption-font-weight: bold;
+
+// These control the row padding and font styles
+// $table-row-padding: rem-calc(9 10);
+// $table-row-font-size: rem-calc(14);
+// $table-row-font-color: $jet;
+// $table-line-height: rem-calc(18);
+
+// These are for controlling the layout, display and margin of tables
+// $table-layout: auto;
+// $table-display: table-cell;
+// $table-margin-bottom: rem-calc(20);
+
+
+// 31. Tabs
+// - - - - - - - - - - - - - - - - - - - - - - - - -
+
+// $include-html-tabs-classes: $include-html-classes;
+
+// $tabs-navigation-padding: rem-calc(16);
+// $tabs-navigation-bg-color: $silver;
+// $tabs-navigation-active-bg-color: $white;
+// $tabs-navigation-hover-bg-color: scale-color($tabs-navigation-bg-color, $lightness: -6%);
+// $tabs-navigation-font-color: $jet;
+// $tabs-navigation-active-font-color: $tabs-navigation-font-color;
+// $tabs-navigation-font-size: rem-calc(16);
+// $tabs-navigation-font-family: $body-font-family;
+
+// $tabs-content-margin-bottom: rem-calc(24);
+// $tabs-content-padding: ($column-gutter/2);
+
+// $tabs-vertical-navigation-margin-bottom: 1.25rem;
+
+// 32. Thumbnails
+// - - - - - - - - - - - - - - - - - - - - - - - - -
+
+// $include-html-media-classes: $include-html-classes;
+
+// We use these to control border styles
+// $thumb-border-style: solid;
+// $thumb-border-width: 4px;
+// $thumb-border-color: $white;
+// $thumb-box-shadow: 0 0 0 1px rgba($black,.2);
+// $thumb-box-shadow-hover: 0 0 6px 1px rgba($primary-color,0.5);
+
+// Radius and transition speed for thumbs
+// $thumb-radius: $global-radius;
+// $thumb-transition-speed: 200ms;
+
+// 33. Tooltips
+// - - - - - - - - - - - - - - - - - - - - - - - - -
+
+// $include-html-tooltip-classes: $include-html-classes;
+
+// $has-tip-border-bottom: dotted 1px $iron;
+// $has-tip-font-weight: $font-weight-bold;
+// $has-tip-font-color: $oil;
+// $has-tip-border-bottom-hover: dotted 1px scale-color($primary-color, $lightness: -55%);
+// $has-tip-font-color-hover: $primary-color;
+// $has-tip-cursor-type: help;
+
+// $tooltip-padding: rem-calc(12);
+// $tooltip-bg: $oil;
+// $tooltip-font-size: rem-calc(14);
+// $tooltip-font-weight: $font-weight-normal;
+// $tooltip-font-color: $white;
+// $tooltip-line-height: 1.3;
+// $tooltip-close-font-size: rem-calc(10);
+// $tooltip-close-font-weight: $font-weight-normal;
+// $tooltip-close-font-color: $monsoon;
+// $tooltip-font-size-sml: rem-calc(14);
+// $tooltip-radius: $global-radius;
+// $tooltip-rounded: $global-rounded;
+// $tooltip-pip-size: 5px;
+// $tooltip-max-width: 300px;
+
+// 34. Top Bar
+// - - - - - - - - - - - - - - - - - - - - - - - - -
+
+// $include-html-top-bar-classes: $include-html-classes;
+
+// Background color for the top bar
+// $topbar-bg-color: $oil;
+// $topbar-bg: $topbar-bg-color;
+
+// Height and margin
+/* $topbar-height: rem-calc(61);*/
+// $topbar-margin-bottom: 0;
+
+// Controlling the styles for the title in the top bar
+// $topbar-title-weight: $font-weight-normal;
+// $topbar-title-font-size: rem-calc(17);
+
+// Set the link colors and styles for top-level nav
+// $topbar-link-color: $white;
+// $topbar-link-color-hover: $white;
+// $topbar-link-color-active: $white;
+// $topbar-link-color-active-hover: $white;
+// $topbar-link-weight: $font-weight-normal;
+/* $topbar-link-font-size: rem-calc(20);*/
+// $topbar-link-hover-lightness: -10%; // Darken by 10%
+// $topbar-link-bg: $topbar-bg;
+// $topbar-link-bg-hover: $d-blue;
+// $topbar-link-bg-color-hover: $d-blue;
+// $topbar-link-bg-active: $white;
+// $topbar-link-bg-active-hover: scale-color($primary-color, $lightness: -14%);
+// $topbar-link-font-family: $body-font-family;
+// $topbar-link-text-transform: none;
+// $topbar-link-padding: ($topbar-height / 3);
+// $topbar-back-link-size: rem-calc(18);
+/* $topbar-link-dropdown-padding: rem-calc(16);*/
+// $topbar-button-font-size: 0.75rem;
+// $topbar-button-top: 7px;
+
+// Style the top bar dropdown elements
+// $topbar-dropdown-bg: $white;
+// $topbar-dropdown-link-color: $black;
+// $topbar-dropdown-link-color-hover: $green;
+// $topbar-dropdown-link-bg: $white;
+// $topbar-dropdown-link-bg-hover: $white;
+// $topbar-dropdown-link-weight: $font-weight-normal;
+// $topbar-dropdown-toggle-size: 5px;
+// $topbar-dropdown-toggle-color: $white;
+// $topbar-dropdown-toggle-alpha: 0.4;
+
+// $topbar-dropdown-label-color: $monsoon;
+// $topbar-dropdown-label-text-transform: uppercase;
+// $topbar-dropdown-label-font-weight: $font-weight-bold;
+// $topbar-dropdown-label-font-size: rem-calc(10);
+// $topbar-dropdown-label-bg: $oil;
+
+// Top menu icon styles
+// $topbar-menu-link-transform: uppercase;
+// $topbar-menu-link-font-size: rem-calc(13);
+// $topbar-menu-link-weight: $font-weight-bold;
+// $topbar-menu-link-color: $white;
+// $topbar-menu-icon-color: $white;
+// $topbar-menu-link-color-toggled: $jumbo;
+// $topbar-menu-icon-color-toggled: $jumbo;
+// $topbar-menu-icon-position: $opposite-direction; // Change to $default-float for a left menu icon
+
+// Transitions and breakpoint styles
+// $topbar-transition-speed: 300ms;
+// Using rem-calc for the below breakpoint causes issues with top bar
+// $topbar-breakpoint: #{lower-bound($medium-range)}; // Change to 9999px for always mobile layout
+// $topbar-media-query: $medium-up;
+
+// Top-bar input styles
+// $topbar-input-height: rem-calc(28);
+
+// Divider Styles
+// $topbar-divider-border-bottom: solid 1px scale-color($topbar-bg-color, $lightness: 13%);
+// $topbar-divider-border-top: solid 1px scale-color($topbar-bg-color, $lightness: -50%);
+
+// Sticky Class
+// $topbar-sticky-class: ".sticky";
+ $topbar-arrows: false; //Set false to remove the triangle icon from the menu item
+// $topbar-dropdown-arrows: true; //Set false to remove the \00bb >> text from dropdown subnavigation li//
+
+// 36. Visibility Classes
+// - - - - - - - - - - - - - - - - - - - - - - - - -
+
+// $include-html-visibility-classes: $include-html-classes;
+// $include-accessibility-classes: true;
+// $include-table-visibility-classes: true;
+// $include-legacy-visibility-classes: true;
diff --git a/scss/_shadow.wrapper.scss b/scss/_shadow.wrapper.scss
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/scss/_sidebar.scss b/scss/_sidebar.scss
new file mode 100644 (file)
index 0000000..4bb47cd
--- /dev/null
@@ -0,0 +1,131 @@
+#sidebar {
+    padding-top: 25px;
+    background: #f2f9fc;
+    .row.collapse {
+        margin-left: 14px;
+    }
+    li {
+        list-style: none;
+        #calendar_wrap {
+            table#wp-calendar {
+                margin: 0 auto;
+            }
+        }
+    }
+    a {
+        font-size: 12px;
+    }
+    form {
+        margin: 0 12px 0 14px;
+        select {
+            padding: 0 rem-calc(8);
+            border-radius: 5px;
+            height: 25px;
+            margin: 0;
+            option {
+                font-size: 10px;
+            }
+        }
+    }
+    .small-block-grid-2 {
+        margin-top: 10px;
+        li {
+            padding: 0 rem-calc(10) rem-calc(10);
+            img {
+                border: 2px solid lightblue;
+            }
+        }
+        & > li:nth-of-type(2), & > li:nth-of-type(4) {
+            padding-left: 0;
+        }
+        & > li:nth-of-type(3), & > li:nth-of-type(4) {
+            padding-bottom: 20px;
+        }
+    }
+    h3 {
+        margin: 20px 0 0;
+    }
+    h1 {
+        margin: 0;
+        font-size: rem-calc(25);
+        text-transform: none;
+    }
+    input {
+        padding: 5px 0 5px 8px;
+        height: auto;
+        margin: 10px 0;
+    }
+    button {
+        border-radius: 2px;
+        padding: 0 10px;
+    }
+}
+#side-nav {
+    padding-top: 10px;
+    background: #f2f9fc;
+    h1 {
+        font-size: rem-calc(22);
+/*        margin: 5px 0 25px;*/
+    }
+    h4 {
+        font-weight: bold;
+        margin-left: 10px;
+    }
+    li {
+        list-style: none;
+    }
+    ul {
+        list-style: none;
+        margin: 0 0 20px;
+        li {
+            margin: 0 -15px;
+            padding: 5px 10px 5px 25px;
+            &:hover {
+                background: #81adc1;
+            }
+            a {
+                color: darkblue;
+                &:hover {
+                    color: $white;
+                }
+            }
+        }
+    }
+    h3 {
+        text-transform: none;
+        margin: 0;
+    }
+    input {
+        padding: 5px 0 5px 8px;
+        height: auto;
+        margin-bottom: 10px;
+    }
+    button {
+        border-radius: 2px;
+        padding: 0 10px;
+    }
+}
+#extra {
+    margin-top: 15px;
+    p {
+        line-height: 1.3;
+        &.title {
+            margin: 0;
+            &#last {
+                padding-top: 10px;
+            }
+        }
+        &#message {
+            text-transform: uppercase;
+            color: lightblue;
+            font-size: rem-calc(15);
+            margin: 40px 0;
+        }
+    }
+}
+.county-news {
+    font-weight: bold;
+}
+.current_page_item > a {
+    font-weight: bold;
+}
\ No newline at end of file
diff --git a/scss/_slideshow.scss b/scss/_slideshow.scss
new file mode 100644 (file)
index 0000000..bc7fd79
--- /dev/null
@@ -0,0 +1,16 @@
+#slideshow {
+    @media #{$medium-down}{
+        margin-top: 45px;
+    }
+    #caption {
+        background: rgba(0, 0, 0, 0.75);
+        color: $white;
+        margin-top: -51px;
+        p {
+            padding: 10px 5px;
+            font-size: 12px;
+            margin: 0;
+            text-align: right;
+        }
+    }
+}
diff --git a/scss/_structure.scss b/scss/_structure.scss
new file mode 100644 (file)
index 0000000..a351060
--- /dev/null
@@ -0,0 +1,60 @@
+//1. Body
+//2. Header
+h1 {
+    color: $white;
+    font-family: 'Times New Roman', Times, serif;
+    font-size: 36px;
+    letter-spacing: 4px;
+    text-decoration: uppercase;
+}
+h2 {
+    color: $white;
+    font-family: 'Times New Roman', Times, serif;
+    font-size: 36px;
+    letter-spacing: 4px;
+}
+h3 {
+    color: $slate-blue;
+    font-family: 'Times New Roman', Times, serif;
+    font-size: 30px;
+    font-weight: bold;
+}
+h4 {
+    color: $slate-blue;
+    font-family: 'Times New Roman', Times, serif;
+    font-size: 24px;
+    font-weight: bold;
+    letter-spacing: 4px;
+}
+h5 {
+    color: $orange;
+    font-family: 'Times New Roman', Times, serif;
+    font-size: 24px;
+}
+h6 {
+    color: $gold;
+    font-family: 'Times New Roman', Times, serif;
+    font-size: 18px;
+    font-weight: bold;
+}
+//3. Fonts
+//4. Top Bar
+//5. Off-Canvas
+.off-canvas-wrap {
+    min-height: 100%;
+    .inner-wrap {
+        min-height: 100vh;
+        height: 100%;
+    }
+}
+//6. Main
+//7. Slideshow
+//8. Blog
+//9. Sidebar
+//10. Links
+//11. Footer
+//12. Copyright
+
+#example.element {
+    background-color: transparent;
+}
\ No newline at end of file
diff --git a/scss/_topbar.scss b/scss/_topbar.scss
new file mode 100644 (file)
index 0000000..8a13a4a
--- /dev/null
@@ -0,0 +1,296 @@
+.contain-to-grid {
+    box-shadow: 0 5px 10px -1px $aluminum;
+    .top-bar {
+        height: 73px;
+        box-shadow: 0 3px 3px 0 rgba(0, 0, 0, 0.5);
+        margin-bottom: 10px;
+    }
+}
+@media screen and (max-width: 782px) {
+    #wpadminbar  {
+        position: fixed !important;
+    }
+}
+.tab-bar {
+    background-color: $logo-red;
+    .tab-bar-section.middle {
+//        left: 0;
+//        right: 2.8125rem;
+        text-align: right;
+    }
+}
+#top-bar-wrapper {
+    position: absolute;
+    top: 0;
+    width: 100%;
+}
+#top-bar-logo {
+    max-width: 140px;
+    border: 3px solid $logo-red;
+    position: absolute;
+    left: 0px;
+    top: 15px;
+    z-index: 9;
+    -webkit-box-shadow: 9px 10px 6px -6px rgba(black, .7);
+        -moz-box-shadow: 9px 10px 6px -6px rgba(black, .7);
+        box-shadow: 9px 10px 6px -6px rgba(black, .7);
+}
+
+.left-off-canvas-toggle.menu-icon > span {
+    margin-left: 20px;
+}
+.submenu-two-columns {
+    -webkit-column-count: 2; /* Chrome, Safari, Opera */
+    -moz-column-count: 2; /* Firefox */
+    column-count: 2;
+    min-width: 460px;
+    li {
+        -webkit-column-break-inside: avoid;
+        page-break-inside: avoid;
+        break-inside: avoid-column;
+    }
+}
+.top-bar {
+    background: transparent;
+    width: 1024px;
+    margin: 0 auto;
+    padding-top: 100px;
+    z-index: 5;
+    .top-bar-section {
+        background: $ghost;
+        -webkit-border-top-right-radius: 20px;
+        -moz-border-top-right-radius: 20px;
+        border-top-right-radius: 20px;
+        display: inline-block;
+        height: auto;
+        line-height: 1;
+        margin-left: auto;
+        margin-right: auto;
+        width: 100%;
+  
+        -webkit-box-shadow: 9px 10px 6px -6px rgba(black, .7);
+        -moz-box-shadow: 9px 10px 6px -6px rgba(black, .7);
+        box-shadow: 9px 10px 6px -6px rgba(black, .7);
+        > ul {
+            float: right;
+            background: transparent;
+            border-top-right-radius: 9px;
+            border-bottom-right-radius: 9px;
+            height: 65px !important;
+            > li {
+                // height: 65px;
+                // padding: 15px 0;
+                height: 100%;
+                background-color: $ghost;
+                // border-top: 3px solid transparent;
+                // border-bottom: 3px solid transparent;
+                border-top: 2px solid transparent;
+                border-left: 2px solid transparent;
+                border-right: 2px solid transparent;
+                &.active:not(.has-form){
+                    background-color: $logo-red;
+                }
+                // topbar active menu styles
+                &.active:not(.has-form) > a:not(.button) {
+                    padding: 6px 20px;
+
+                    line-height: 1;
+                    background-color: $logo-red;
+                    color: $white;
+                    font-size: 22px;
+                    font-weight: bold;
+                    // padding: 15px 15px;
+                    &.active {
+                        background-color: $logo-red;
+                        color: $white;
+                    }
+                }
+                > a {
+                    position: relative;
+                    top: 50%;
+                    transform: translateY(-50%);
+                    font-size: 26px;
+                    font-family: 'Times New Roman', Times, serif;
+                    // padding: 15px 20px;
+                }
+                &.active:not(.has-form) > a:not(.button) {
+                    font-weight: bold;
+                }
+                > ul { //dropdown menu
+                    > li { // dropdown items
+                        float: none;
+                    }
+                }
+            }
+            > li:not(.has-form):not(.active) {
+                background-color: $ghost;
+                
+                &:hover {
+                    border-top: 2px solid $logo-red;
+                    border-right: 2px solid $logo-red;
+                    border-left: 2px solid $logo-red;
+                    // border-bottom: 3px solid $logo-red;
+                    // border: 2px solid $logo-red;
+              
+                    background-color: $ghost;
+                    > a:not(.button) {
+                        background-color: $ghost;
+                        color: $logo-red;
+                    }
+                    > a.active {
+                        background-color: $ghost;
+                    }
+                }
+                > a:not(.button) {
+                   
+                    line-height: 1;
+                    
+                    background-color: $ghost;
+                    color: $logo-red;
+                    font-size: 24px;
+                    font-weight: bold;
+                    // padding: 15px 15px;
+                    &.active {
+                        background-color: $logo-red;
+                        color: $white;
+                    }
+                }
+                &:last-child,
+                &:last-child > a {
+                    border-top-right-radius: 9px;
+                    // border-bottom-right-radius: 9px;
+                }
+            }
+        }
+        ul{
+            background: white;
+            li {
+                ul.dropdown {
+                    top: 59px;
+                    max-width: 500px;
+                    padding: 20px;
+                    border-width: 0 2px 2px 2px;
+                    border-style: solid;
+                    border-color: $logo-red;
+                    border-bottom-left-radius: 5px;
+                    border-bottom-right-radius: 5px;
+                    // -webkit-box-shadow: 9px 10px 6px -6px rgba(black, .7);
+                    // -moz-box-shadow: 9px 10px 6px -6px rgba(black, .7);
+                    // box-shadow: 9px 10px 6px -6px rgba(black, .7);
+                    z-index: -1;
+                    li:not(.has-form):not(.active):hover {
+                        > a:not(.button) {
+                            background-color: $white;
+                            color: $logo-red;
+                            font-size: 16px;
+                        }
+                    }
+                    li {
+                        &:not(.has-form):not(.active) {
+                            & > a:not(.button) {
+                                background-color: $white;
+                                color: $black;
+                            }
+                        }
+                        min-width: 180px;
+                        background-color: $white;
+                        color: $black;
+                        border-bottom: 1px dotted $ice-purple;
+                        font-size: 16px;
+                        a {
+                            color: $black;
+                            border-top-left-radius: 0;
+                            border-top-right-radius: 0;
+                            text-align: left;
+                            white-space: normal;
+                        }
+                        &:not(.has-form):not(.active) {
+                            & > a:not(.button) {
+                                font-size: rem-calc(16);
+                                padding: 10px 0;
+                                line-height: 1;
+
+                            }
+                        }
+                        &:not(.has-form).active {
+                            background-color: $white;
+                            a:not(.button) {
+                                background-color: $white;
+                                color: $orange;
+                                padding: 10px 0;
+                                font-size: 1rem;
+                                line-height: 1;
+                                &:hover {
+                                    background-color: $white;
+                                    color: $orange;
+                                }
+                            }
+                        }
+                    }
+                }
+                &:not(.drop-left){
+                    ul.dropdown{
+                        left: -1%;
+                    }
+                }
+                &.drop-left {
+                    ul.dropdown {
+                        right: -2%;
+                        left: auto;
+                        li {
+                            a {
+                                text-align: left;
+                            }
+                        }
+                    }
+                }
+    //            &.drop-right {
+    //                ul.dropdown {
+    //                    padding-left: 250px;
+    //                    padding-right: 21px;
+    //                    right: -1%;
+    //                    left: auto;
+    //                    top: 74px;
+    //                    background: $white;
+    //                    border-bottom-left-radius: 10px;
+    //                    border-bottom-right-radius: 10px;
+    //                    min-width: 500px;
+    //                    box-shadow: 0 8px 10px -5px rgba(0, 0, 0, 0.5);
+    //                    -ms-box-shadow: 0 8px 10px -5px rgba(0, 0, 0, 0.5);
+    //                    -moz-box-shadow: 0 8px 10px -5px rgba(0, 0, 0, 0.5);
+    //                    -webkit-box-shadow: 0 8px 10px -5px rgba(0, 0, 0, 0.5);
+    //                    li {
+    //                        white-space: nowrap;
+    //                        background: $white;
+    //                        text-align: right;
+    //                        border-bottom: 1px solid #e7e7e8;
+    //                        padding: 5px 0;
+    //                        &.nav-img-container {
+    //                            img {
+    //                                position: absolute;
+    //                                left: 20px;
+    //                                top: 23px;
+    //                                border: 6px solid #fdefd4;
+    //                            }
+    //                            border: none;
+    //                        }
+    //                        a {
+    //                            padding-left: 0;
+    //                            text-align: left;
+    //                            font-size: 18px;
+    //                            &:hover {
+    //                                color: $d-black;
+    //                                text-shadow: 0 0 1px $green;
+    //                                text-shadow: 1 0 1px $green;
+    //                                text-shadow: 0 1 1px $green;
+    //                                text-shadow: -1 0 1px $green;
+    //                                text-shadow: 0 -1 1px $green;
+    //                            }
+    //                        }
+    //                    }
+    //                }
+    //            }
+            }
+        }
+    }
+}
diff --git a/scss/_wordpress.scss b/scss/_wordpress.scss
new file mode 100644 (file)
index 0000000..33fb645
--- /dev/null
@@ -0,0 +1,237 @@
+// Wordpress styles
+// Table of Contents
+// 01. Images
+
+
+// 01. Images
+// 02 Search and Post
+
+img.aligncenter {
+    display: block;
+    clear: both;
+    float:none;
+    padding:0;
+    margin-left: auto;
+    margin-right: auto;
+    }
+
+img.alignright {
+    padding: 0;
+    margin: 0 0 6px 11px;
+    display: inline;
+    }
+
+blockquote.alignleft,
+img.alignleft,
+.wp-caption.alignleft {
+    margin: rem-calc(7) rem-calc(35) rem-calc(7) 0;
+}
+
+blockquote.alignright,
+img.alignright,
+.wp-caption.alignright {
+    margin: rem-calc(7) 0 rem-calc(7) rem-calc(35);
+}
+img.alignleft {
+    padding: 0;
+    display: inline;
+    }
+img.alignleft, img.alignright, img.aligncenter, img.alignnone, div.wp-caption img {
+//    border: 1px solid $charcoal;
+}
+
+.alignright {
+    float: right;
+}
+.alignnone {
+    float: none;
+}
+.alignleft {
+    float: left;
+}
+.wp-caption {
+//    background: $charcoal;
+    width: auto;
+}
+.wp-caption-text {
+    font-family: Open Sans, sans-serif;
+    font-size: 9px;
+    color: $white;
+    font-style: italic;
+    margin: 0;
+    padding: 0 5px;
+}
+.gallery-one-title {
+    height: 45px;
+    font-size: 0.8em;
+    text-align: center;
+    font-family: sans-serif;
+    padding: 5px;
+}
+.gallery-holder {
+    margin: 10px 0 20px 0;
+}
+@media #{$small-range} {
+    img.alignright, img.alignleft, img.aligncenter {
+        width: 70% !important;
+        display: block;
+        margin-left: auto;
+        margin-right: auto;
+        float: none;
+        text-align: center;
+    }
+    div.wp-caption.alignright, div.wp-caption.alignleft {
+        width: 44% !important;
+        margin-left: auto;
+        margin-right: auto;
+        float: none;
+        text-align: center;
+    }
+    div.wp-caption.aligncenter {
+        width: 85% !important;
+        margin-left: auto;
+        margin-right: auto;
+        float: none;
+        text-align: center;
+    }
+    div.wp-caption.alignnone {
+        width: 85% !important;
+        float: none;
+    }
+    div.wp-caption.alignright, div.wp-caption.alignleft, div.wp-caption.aligncenter {
+        width: 100%;
+    }
+}
+@media #{$medium-range} {
+    img.aligncenter, img.alignnone {
+        width: 70% !important;
+        display: block;
+        margin-left: auto;
+        margin-right: auto;
+        float: none;
+        text-align: center;
+    }
+    div.wp-caption.aligncenter {
+        width: 74% !important;
+        margin-left: auto;
+        margin-right: auto;
+        float: none;
+        text-align: center;
+    }
+    div.wp-caption.aligncenter {
+        width: 100%;
+    }
+    div.wp-caption.alignnone {
+        width: 73% !important;
+        float: none;
+    }
+}
+
+.wp-caption {
+    max-width: 100%;
+    margin: 10px 20px;
+    padding: 5px;
+//    background-color: #f3f3f3;
+//    border: 1px solid #ddd;
+    text-align: center;
+    img {
+        width: 100%;
+    }
+    p.wp-caption-text {
+        padding: 5px;
+        width: 100%;
+        margin: 0;
+        color: black;
+        font-size: 12px;
+    }
+    &.aligncenter {
+        margin: 10px auto;
+    }
+}
+// end Images
+// 02 Search and Post
+@media #{$small-only} {
+    #blog-posts-over {
+        padding: 0 !important;
+        margin: 0 !important;
+    }
+}
+.blog-posts-container {
+    margin: 30px 0 30px;
+    embed, iframe, object, video {
+        max-width: 100%;
+    }
+    a {
+        text-decoration: none;
+    }
+    header.entry-header {
+        h2.entry-title {
+            a {
+                color: #222;
+                margin-left: 0;
+            }
+        }
+    }
+    .wp-caption .wp-caption-text, .gallery-caption, .entry-caption {
+        overflow: hidden;
+        color: #757575;
+        font-size: 0.857143rem;
+        font-style: italic;
+        line-height: 2;
+    }
+    .date {
+        font-size: 12px;
+    }
+    footer.entry-meta {
+        color: #757575;
+        font-size: 0.928571rem;
+        line-height: 1.84615;
+        margin-top: 1.71429rem;
+        clear: both;
+        float: none;
+        margin-right: auto;
+    }
+    footer {
+        background: none;
+        clear: both;
+        padding: 15px 0 0;
+        position: relative;
+        text-align: center;
+    }
+}
+#content-wrapper {
+    border-top: 4px solid $logo-red;
+    border-bottom: 4px solid $ship-blue;
+    h1, h2, h3, h4, h5, h6 {
+        clear: both;
+    }
+}
+.content {
+    background: #fff;
+/*    -webkit-box-shadow: 5px 5px 10px 0px rgba(0,0,0,0.75);
+    -moz-box-shadow: 5px 5px 10px 0px rgba(0,0,0,0.75);
+    box-shadow: 5px 5px 10px 0px rgba(0,0,0,0.75);*/
+    box-shadow: 3px 3px 8px -1px darkgrey;
+}
+#searchform_container {
+    margin-top: 20px;
+}
+#searchform {
+    max-width: 100%;
+    text-align: center;
+    div {
+        input.blogbutton {
+            @include gradient(#1999ce, #107098);
+        }
+    }
+}
+#blog-side-info {
+    border-left: 1px solid grey;
+    margin-top: 30px;
+    padding-left: 20px;
+    @media #{$small-only} {
+        text-align: center;
+    }
+}
+
+// End Search and Posts
diff --git a/scss/admin/tinymce.css b/scss/admin/tinymce.css
new file mode 100644 (file)
index 0000000..24e0f6a
--- /dev/null
@@ -0,0 +1,35 @@
+/*
+GaslightMedia, all rights reserved.
+*/
+/* 
+    Created on : May 22, 2015, 11:19:44 AM
+    Author     : laury
+*/
+ /*
+ * To make the TINYMCE editor in wordpress reflect some of the default styles
+ * we have active on all our themes, thus leading to a more true WYSIWYG
+ * experience.
+ */
+#tinymce h1 {
+    clear: both;
+}
+
+#tinymce h2 {
+    clear: both;
+}
+
+#tinymce h3 {
+    clear: both;   
+}
+
+#tinymce h4 {
+    clear: both;   
+}
+
+#tinymce h5 {
+    clear: both;   
+}
+
+#tinymce h6 {
+    clear: both;   
+} 
\ No newline at end of file
diff --git a/scss/app.scss b/scss/app.scss
new file mode 100644 (file)
index 0000000..7ade1e7
--- /dev/null
@@ -0,0 +1,20 @@
+@import "settings";
+@import "foundation";
+@import "mixins";
+@import "wordpress";
+@import "defaults";
+@import "body";
+@import "page.header";
+@import "topbar";
+@import "main";
+@import "slideshow";
+@import "plugins";
+@import "blog";
+@import "sidebar";
+@import "search";
+@import "page.footer";
+@import "copyright";
+@import "structure";
+@import "left-off-canvas";
+//@import "right-off-canvas";
+
diff --git a/scss/mixins/_gradient.scss b/scss/mixins/_gradient.scss
new file mode 100644 (file)
index 0000000..47f4364
--- /dev/null
@@ -0,0 +1,10 @@
+/* 
+    Created on : Mar 5, 2015, 2:57:35 PM
+    Author     : laury
+*/
+
+@mixin gradient($from, $to) {
+    background: -webkit-linear-gradient(left, $from 5%, $to 100%);
+    background: -moz-linear-gradient(center top, $from 5%, $to 100%);
+    background: -ms-linear-gradient(left, $from 5%, $to 100%);
+}
diff --git a/scss/mixins/_off-canvas-arrow.scss b/scss/mixins/_off-canvas-arrow.scss
new file mode 100644 (file)
index 0000000..07180f3
--- /dev/null
@@ -0,0 +1,42 @@
+@mixin off-canvas-arrow($direction: down, $color: white, $size: 20px) {
+  border-left: $size - 5 solid transparent;
+  border-right: $size - 5 solid transparent;
+   @if $direction == 'up' {
+    border-bottom: $size solid $color;
+    border-top: 0;
+    // if width is not passed, or empty do this
+   } @else {
+    border-top: $size solid $color;
+    border-bottom: 0;
+   }
+}
+@mixin off-canvas-point($direction: right, $color: red, $size: 1rem) {
+    @if $direction == 'down' {
+        content: '>';
+        transform: rotate(90deg);
+        color: $color;
+        height: $size;
+        width: $size;
+        font-size: $size;
+        font-weight: bold;
+        display: block;
+    } @if $direction == 'up' {
+        content: '>';
+        transform: rotate(-90deg);
+        color: $color;
+        height: $size;
+        width: $size;
+        font-size: $size;
+        font-weight: bold;
+        display: block;
+    } @else if $direction == 'right' {
+        content: '>';
+        transform: rotate(0deg);
+        color: $color;
+        height: $size;
+        width: $size;
+        font-size: $size;
+        font-weight: bold;
+        display: block;
+    }
+}
\ No newline at end of file
diff --git a/scss/plugins/_fullCalendar.scss b/scss/plugins/_fullCalendar.scss
new file mode 100644 (file)
index 0000000..d89b30d
--- /dev/null
@@ -0,0 +1,80 @@
+/* These are the basic styles for calendar, there are several others that can be added from the calendar's mark up. 
+   These styles are primarily for the buttons, columns headers, and the over all calendar body. More selectors will 
+   be necessary when getting deeper into the calendar's mark up to style elements
+*/
+
+#eventCalendar{
+    
+    /* contains all of the buttons above the calendar, on left and right */
+    .fc-toolbar{
+        
+        /* apply button styles here to affect all of the calendar buttons */
+        .fc-button{
+      
+        }
+        /* currently selected button styles */
+        .fc-button.fc-state-active{
+
+        }
+        .fc-button.fc-state-hover{
+
+        }
+        
+        /* affect only today, prev and next buttons (buttons on the above the left side of the calendar*/
+        .fc-left{
+            .fc-button{
+       
+            }
+            .fc-today-button{
+                
+            }
+        }
+        
+        /* affect only month, week, day buttons (buttons above the right side of the calendar) */
+        .fc-right{
+            .fc-button-group{
+                .fc-button{
+
+                }
+                .fc-button.fc-state-active{
+
+                }
+                .fc-button.fc-state-hover{
+
+                }
+            }
+        }
+        
+        /* Calendar Title / Current Month or Date */
+        .fc-center{
+            h2{
+    
+            }
+        }
+    }
+    
+    /* entire calendar body */
+    .fc-view-container{
+        
+        /* dates, days or months at the top of each column (sun, mon, tue, wed, thur, fri, sat) */
+        .fc-head{
+            .fc-widget-header{
+        
+            }
+        }
+        .fc-agendaDay-view{
+            
+        }
+        .fc-month-view{
+            
+        }
+        .fc-agendaWeek-view{
+            
+        }
+        .fc-body{
+            .fc-widget-content{
+                
+            }
+        }
+    }
+}
diff --git a/scss/plugins/_glm-blocks.scss b/scss/plugins/_glm-blocks.scss
new file mode 100644 (file)
index 0000000..8903558
--- /dev/null
@@ -0,0 +1,68 @@
+#glm-blocks-wrapper {
+    
+    background-color: $ice;
+    float: left;
+    // margin-bottom: 40px;
+    width: 100%;
+}
+.glm-blocks-container {
+    padding: 40px 0;
+    max-width: 1024px;
+    .glm-block-image {
+        position: relative;
+        img {
+            float: left;
+            width: 100%;
+        }
+    }
+    .glm-block-title h1 {
+        margin: 0;
+        background-color: $logo-red;
+        text-align: center;
+        letter-spacing: 0;
+        padding: 10px;
+        font-weight: bold;
+        line-height: 1;
+        font-size: 24px;
+        position: relative;
+        border-bottom-left-radius: 25%;
+        border-bottom-right-radius: 25%;
+        &::after{
+            content: url(../assets/bottom.png);
+            width: 100%;
+            height: 40px;
+            right: 50%;
+            left: 0;
+            position: absolute;
+            top: 100%;
+            line-height: 0;
+        }
+    }
+    .glm-block {
+        position: relative;
+        margin-bottom: 20px;
+        @media #{$small-only} {
+            position: relative;
+            margin-bottom: 20px;
+            max-width: 400px;
+            margin: 0 auto 20px;
+            float: none !important;
+        }
+    }
+}
+.page-inside .glm-blocks-container .glm-block-title h1 {
+    font-weight: normal;
+    font-size: 20px;
+}
+.glm-block-video-arrow {
+    width: 0;
+    height: 0;
+    position: absolute;
+    border-top: 30px solid transparent;
+    border-bottom: 30px solid transparent;
+    border-left: 50px solid white;
+    left: 50%;
+    top: 50%;
+    transform: translate(-50%, -50%);
+    pointer-events: none;
+}
diff --git a/scss/plugins/_glm-member-db-events.scss b/scss/plugins/_glm-member-db-events.scss
new file mode 100644 (file)
index 0000000..89d0a40
--- /dev/null
@@ -0,0 +1,317 @@
+// Setting for the colors
+$nameSearchButtonColor   : $slate-blue;
+$shortcutsButtonColor    : $slate-blue;
+$backToSearchButtonColor : $slate-blue;
+$eventGradientColor      : #f2f2f2;
+$eventMonthColor         : $slate-blue;
+$readMoreColor           : $slate-blue;
+
+#glm-event-wrapper {
+    h1 {
+        font-size: 1.5rem;
+        padding: 0 15px;
+    }
+    #glm-events-search-form {
+        .button {
+              @include button(
+                // $padding
+                rem-calc(12),
+                // Background color.
+                $nameSearchButtonColor,
+                // If true, set to button radius which is $global-radius
+                // or explicitly set radius amount in px (ex. $radius:10px).
+                // Default:false.
+                3px,
+                // We can set $full-width:true to remove side
+                // padding extend width. Default:false
+                false,
+                // We can set $disabled:true to create a
+                // disabled transparent button. Default:false
+                false
+              );
+
+                color: white;
+            }
+        #glm-event-add-event{
+            width: 126px;
+            float: right;
+        }
+    }
+
+//    #glm-events-shortcuts .shortcuts-button-group {
+//       @include button-group();
+//        .shortcuts-button {
+//            @include button(
+//                rem-calc(12),
+//                $shortcutsButtonColor,
+//                true,
+//                true,
+//                false
+//            );
+//            margin-bottom: 1px;
+//        }
+//        & > li {
+//            @include button-group-style(
+//                $radius:true,
+//                $even:false,
+//                $float:none
+//            );
+//        }
+//    }
+    // for the back to search button
+    button:not(.fc-button)  {
+              @include button(
+                // $padding
+                rem-calc(12),
+                // Background color.
+                $backToSearchButtonColor,
+                // If true, set to button radius which is $global-radius
+                // or explicitly set radius amount in px (ex. $radius:10px).
+                // Default:false.
+                3px,
+                // We can set $full-width:true to remove side
+                // padding extend width. Default:false
+                false,
+                // We can set $disabled:true to create a
+                // disabled transparent button. Default:false
+                false
+              );
+        width: 220px;
+    }
+    p {
+        margin-left: 15px;
+    }
+
+    .glm-event-day-row {
+        border: 1px solid $white;
+        @include gradient($eventGradientColor, $white);
+    }
+
+    .glm-event-day-event {
+        border: 1px solid $eventMonthColor;
+        &:hover {
+            border: 1px solid $black;
+        }
+    }
+    .glm-event-day-event a.glm-read-more {
+        border: 1px solid $eventMonthColor;
+        background-color: $white;
+        color: $black;
+    }
+    .glm-event-day-event a.glm-read-more:hover {
+        color: $white;
+        background-color: $eventMonthColor;
+        border: 1px solid $white;
+    }
+    .glm-event-cal {
+        border: 1px solid $eventMonthColor;
+    }
+    .glm-event-cal-day-container {
+        @include gradient($white, $eventGradientColor);
+    }
+    .glm-event-cal-month {
+        background-color: $eventMonthColor;
+        color: #fff;
+    }
+    h1 {
+        color: $eventMonthColor;
+    }
+    h2 {
+        color:  $slate-blue;
+        font-weight: bold;
+    }
+    #glm-event-detail-cost:before{
+        top: 0px;
+    }
+    .stButton .sharethis{
+       display: none;
+   }
+    span#eventShare.st_sharethis,
+    #shareThisOrange{
+        background-color: $eventMonthColor !important;
+        font-size: rem-calc(14);
+        font-weight: bold;
+        color: white;
+        width: auto;
+        height: 30px;
+        border-radius: 3px;
+        max-height: 30px;
+        padding: 3px 0 0 15px;
+    }
+    #EventDrivingDirectionSubmit {
+        margin-left: 0px;
+        font-weight: bold;
+    }
+}
+.hasDatepicker {
+    width: 100%;
+    height: 34px;
+}
+// Front page display
+#glm-events-frontpage-wrapper {
+    .glm-events-frontpage-day {
+        padding: 3px;
+        background-color: $eventMonthColor;
+        color: #779156;
+    }
+    .glm-events-frontpage-event-container {
+        margin: 10px 0;
+        overflow: hidden;
+    }
+    .glm-events-frontpage-event-image {
+        width: 90px;
+        height: 90px;
+    }
+    .glm-events-frontpage-event-title,
+    .glm-events-frontpage-event-dates,
+    .glm-events-frontpage-event-content {
+        float: left;
+        width: 170px;
+        padding: 0px 12px 0px 8px;
+        margin-top: 4px;
+    }
+    .glm-events-frontpage-event-title {
+    /*    font-size: 15px;*/
+        color: $eventMonthColor;
+        font-weight: bold;
+        max-height: 37.2px;
+        overflow: hidden;
+        line-height: 1.4;
+    }
+    .glm-events-frontpage-event-dates {
+        color: grey;
+        max-height: 20px;
+        overflow: hidden;
+        text-overflow: ellipsis;
+        white-space: nowrap;
+    }
+    .glm-events-frontpage-event-content {
+        max-height: 37.2px;
+        overflow: hidden;
+    }
+}
+@media#{$medium-up} {
+    #glm-event-wrapper {
+//        width: 80%;
+        margin: 0 auto;
+    }
+    #glm-event-wrapper.event-detail {
+        width: 100%;
+    }
+}
+form#glm-member-event-search #glm-event-category{
+    width: 83%
+}
+.prefix,
+.postfix {
+  border-style: solid;
+  border-width: 1px;
+  display: block;
+  font-size: 0.875rem;
+  height: 2.3125rem;
+  line-height: 2.3125rem;
+  overflow: visible;
+  padding-bottom: 0;
+  padding-top: 0;
+  position: relative;
+  text-align: center;
+  width: 100%;
+  z-index: 2;
+}
+span.prefix, label.prefix {
+  background: #f2f2f2;
+  border-right: none;
+  color: #333333;
+  border-color: #cccccc;
+}
+
+span.postfix, label.postfix {
+  background: #f2f2f2;
+  border-left: none;
+  color: #333333;
+  border-color: #cccccc;
+}
+input:not([type]), input[type="text"], input[type="password"], input[type="date"], input[type="datetime"], input[type="datetime-local"], input[type="month"], input[type="week"], input[type="email"], input[type="number"], input[type="search"], input[type="tel"], input[type="time"], input[type="url"], input[type="color"], textarea {
+  -webkit-appearance: none;
+  -moz-appearance: none;
+  border-radius: 0;
+  background-color: #FFFFFF;
+  border-style: solid;
+  border-width: 1px;
+  border-color: #cccccc;
+  box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
+  color: rgba(0, 0, 0, 0.75);
+  display: block;
+  font-family: inherit;
+  font-size: 0.875rem;
+  height: 2.3125rem;
+  margin: 0 0 1rem 0;
+  padding: 0.5rem;
+  width: 100%;
+  -webkit-box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  -webkit-transition: border-color 0.15s linear, background 0.15s linear;
+  -moz-transition: border-color 0.15s linear, background 0.15s linear;
+  -ms-transition: border-color 0.15s linear, background 0.15s linear;
+  -o-transition: border-color 0.15s linear, background 0.15s linear;
+  transition: border-color 0.15s linear, background 0.15s linear;
+}
+.right {
+  float: right !important;
+}
+#glm-event-detail-takeback-mini {
+    //border: 1px solid #033733;
+    background-color: $orange;
+    transition: all 0.5s;
+    &:hover {
+        transition: all 0.5s;
+        background-color: $gold;
+    }
+}
+#front-event-feed-title {
+    color: $slate-blue;
+    font-size: 25px;
+    font-weight: bold;
+    letter-spacing: 1px;
+    text-transform: uppercase;
+}
+#event-feed-row {
+    margin-bottom: 40px;
+}
+#feed {
+    .image-container {
+        width: auto;
+        height: 150px;
+        margin-bottom: 10px;
+    }
+    .front-event-title {
+        color: $slate-blue;
+        font-size: 18px;
+        font-weight: bold;
+        min-height: 50px;
+    }
+    .front-event-date-container {
+        display: inline;
+        padding: 0 5px;
+    }
+    .front-event-date {
+        color: grey;
+        font-size: 14px;
+    }
+    .front-event-button {
+        background-color: $orange;
+        float: right;
+        color: $white;
+        font-size: 15px;
+        text-transform: uppercase;
+        letter-spacing: 1px;
+        font-weight: bold;
+        padding: 4px;
+        line-height: 1.2;
+    }
+    .front-event-border {
+        border-bottom: 2px solid $slate-blue;
+        clear: both;
+    }
+}
\ No newline at end of file
diff --git a/scss/plugins/_glm-member-db-packaging.scss b/scss/plugins/_glm-member-db-packaging.scss
new file mode 100644 (file)
index 0000000..3ffcb5c
--- /dev/null
@@ -0,0 +1,21 @@
+#glm-member-packaging-front-container {
+    #glm-package-detail-member-name h3 {
+        color: $black;
+    }
+
+    .glm-member-db-takeback-mini {
+        text-decoration: none;
+        position: relative;
+        background-color: $orange;
+        transition: all 0.5s;
+        &:hover {
+            transition: all 0.5s;
+            background-color: $gold;
+        }
+    }
+    #glm-member-detail-contact-info {
+        small {
+            color: $black;
+        }
+    }
+}
\ No newline at end of file
diff --git a/scss/plugins/_glm-member-db.scss b/scss/plugins/_glm-member-db.scss
new file mode 100644 (file)
index 0000000..dc43a94
--- /dev/null
@@ -0,0 +1,250 @@
+#glm-member-db-front-container {
+    .glm-member-list-active-info .glm-member-title a {
+      color: $slate-blue;
+      font-size: 26px;
+      letter-spacing: normal;
+      text-decoration: none;
+      vertical-align: top;
+      &:hover {
+          text-decoration: underline;
+      }
+    }
+    #glm-member-list-filters-button {
+        background-color: $orange;
+    }
+    #glm-member-list-map-toggle {
+        background-color: $orange;
+    }
+    #glm-member-list-filters-close {
+        background-color: $dark-orange;
+    }
+    .glm-member-list-container .glm-member-title {
+      line-height: 1;
+      margin: 5px 0;
+      text-transform: none;
+    }
+    .glm-member-list-container .glm-member-list-image-wrapper {
+      float: right;
+      max-height: 180px;
+    }
+    .glm-member-list-data {
+      padding: 20px;
+    }
+    .glm-member-list-active-info {
+        font-size: 16px;
+    }
+    .glm-member-list-address-wrapper > div {
+        line-height: 1.5;
+    }
+    .glm-member-list-active-info .glm-member-list-links > a {
+        text-decoration: underline;
+        color: $dark-blue;
+        line-height: 1.5;
+    }
+    .glm-alpha-links > .glm-alpha-link {
+        background-color: $white;
+        border-color: $slate-blue;
+        color: $slate-blue;
+        &:hover {
+            background-color: $slate-blue;
+            color: $white;
+        }
+    }
+    .glm-alpha-links > .glm-alpha-link-selected {
+        background-color: $slate-blue;
+        color: white;
+    }
+    .glm-member-list-active-info {
+      padding: 0 0px 0 0;
+    }
+    .glm-member-db-list-header-title {
+        text-transform: none;
+    }
+    .glm-member-list-terms {
+        display: none;
+    }
+    .glm-member-search {
+        .glm-member-button-small,
+        input[type="submit"].glm-member-button {
+            font-size: 0.9em !important;
+            padding: 5px 20px !important;
+            margin: 0 auto !important;
+            line-height: 1.8em !important;
+            height: auto !important;
+            border-radius: 5px;
+            background-color: $orange;
+            transition: all 0.5s;
+            &:hover {
+                transition: all 0.5s;
+                background-color: $gold;
+            }
+        }
+    }
+    .glm-member-search::before {
+        background-color: $orange;
+    }
+    .glm-member-db-takeback-mini {
+        text-decoration: none;
+        position: relative;
+        background-color: $orange;
+        transition: all 0.5s;
+        &:hover {
+            transition: all 0.5s;
+            background-color: $gold;
+        }
+    }
+    .glm-member-db-takeback-mini span {
+        font-size: 16px;
+        top: 14px;
+    }
+}
+#content-wrapper .glm-member-db-grid-view {
+    .glm-member-title a {
+        letter-spacing: 2px;
+    }
+    .glm-member-list-sub-links {
+        margin: 0;
+        ul {
+            display: table;
+            margin-left: 0;
+            width: 100%;
+            li {
+                text-transform: uppercase;
+                font-weight: bold;
+                border: 0;
+                width: 50%;
+                float: left;
+                display: block;
+                padding: 1px;
+                margin: 0;
+                a {
+                    color: $orange;
+                    border-radius: 3px;
+                    padding: 4px 8px;
+                    display: block;
+                    width: auto;
+                    font-size: 12px;
+                    text-decoration: underline;
+                }
+            }
+        }
+    }
+}
+#glm-member-detail-container {
+    .glm-member-title {
+        display: none;
+    }
+    #glm-member-detail-contact-info {
+        background-color: $ice;
+        color: $slate-blue;
+    }
+    #glm-member-detail-website-link {
+        text-decoration: none;
+    }
+    #glm-member-detail-data-container > .glm-member-detail-content-toggle {
+        color: $slate-blue;
+    }
+    .map-button {
+        background-color: $orange;
+        &:hover {
+            background-color: $gold;
+        }
+    }
+    #glm-member-detail-links a {
+        color: $slate-blue;
+        border-color: $slate-blue;
+    }
+}
+.glm-member-detail-contact-phone small {
+    font-size: 12px;
+}
+#members-only-sidebar-off-canvas {
+    background-color: #324B4F;
+    border-radius: 5px;
+    list-style: outside none none;
+    margin: 10px;
+    max-width: 230px;
+    h2 {
+        color: $gold;
+    }
+    h4 {
+        color: $gold;
+    }
+    ul li a {
+        color: $white;
+        &:hover {
+            color: $gold;
+        }
+    }
+    .menu-side .glm-button {
+        background: transparent;
+        text-decoration: underline;
+        color: white;
+    }
+}
+#members-only-content {
+    #glm-member-front-header {
+        margin-top: -10px;
+    }
+    #side-links {
+        border: 1px solid $slate-blue;
+        border-radius: 3px;
+        padding: 15px 20px 30px;
+        background-color: $dark-blue;
+        list-style: none;
+        @media #{$medium-only} {
+            padding: 25px 15px;
+        }
+    }
+    #side-links h4 {
+        color: $gold;
+        line-height: 1.2;
+        letter-spacing: normal;
+        font-size: 26px;
+        @media #{$medium-only} {
+            font-size: 24px;
+        }
+    }
+    #side-links ul {
+        margin: 0;
+        list-style: none;
+    }
+    #side-links li {
+        list-style: none;
+        line-height: 1.2;
+        margin-top: 15px;
+    }
+    #side-links li a {
+        color: white;
+        text-decoration: none;
+        font-size: 20px;
+    }
+    #side-links li a:hover {
+        color: $gold;
+    }
+    .glm-button.button {
+        background-color: $slate-blue;
+    }
+    #main-content {
+        padding-top: 0;
+    }
+    #lostpasswordform {
+        max-width: 350px;
+    }
+}
+
+#featured-business {
+    #glm-member-db-front-container {
+        padding: 0;
+    }
+    .glm-featured-member-text {
+        padding: 20px;
+    }
+    .glm-featured-member-image-container {
+        max-height: 200px;
+        overflow: hidden;
+    }
+}
+#sidebar .glm-member-front-container {
+  padding: 0;
+}
diff --git a/scss/plugins/_gravityForms.scss b/scss/plugins/_gravityForms.scss
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/scss/plugins/_nextgen.scss b/scss/plugins/_nextgen.scss
new file mode 100644 (file)
index 0000000..3bb3619
--- /dev/null
@@ -0,0 +1,40 @@
+/* NextGen Gallery */
+.ngg-gallery-thumbnail, 
+.ngg-gallery-thumbnail-box {
+    float: none !important;
+}
+.gallery li a img { // without this images will overlap each other at certain widths
+    display: block;
+    width: 100%;
+}
+.ngg-gallery-thumbnail, .ngg-gallery-thumbnail-box {
+    float: none !important;
+}
+.ngg-album-compact h4 .ngg-album-desc {
+    height: auto !important;
+    font-family: $font-family-serif;
+    font-weight: 400;
+}
+.ngg-album-compact .album-meta-wrapper h4 a {
+    font-style: normal;
+}
+.album-meta-wrapper {
+    display: block;
+    height: 54px;
+    margin-bottom: 20px;
+}
+.ngg-glmalbums {
+    margin: 10px 0;
+}
+/* Ninja Forms */
+.ninja-forms-form-wrap {
+    max-width: 600px;
+    margin: 0 auto;
+    input[type=submit] {
+        @include button();
+        display: block;
+        margin: 0 auto;
+    }
+}
+
+/* End NextGen Gallery */
diff --git a/scss/plugins/_slick.scss b/scss/plugins/_slick.scss
new file mode 100644 (file)
index 0000000..c230944
--- /dev/null
@@ -0,0 +1,8 @@
+#event-feed-row {
+    .main-events-container {
+        padding: 5px 30px;
+    }
+    .slick-next {
+        right: -20px;
+    }
+}
\ No newline at end of file
diff --git a/search.php b/search.php
deleted file mode 100644 (file)
index 23c8ff5..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-<?php
-/**
- * The template for displaying search results pages.
- *
- * @package accesspress_parallax
- */
-
-get_header(); ?>
-<div class="mid-content">
-       <section id="primary" class="content-area">
-               <main id="main" class="site-main" role="main">
-
-               <?php if ( have_posts() ) : ?>
-
-                       <header class="page-header">
-                               <h1 class="page-title"><?php printf( __( 'Search Results for: %s', 'accesspress-parallax' ), '<span>' . get_search_query() . '</span>' ); ?></h1>
-                       </header><!-- .page-header -->
-
-                       <?php /* Start the Loop */ ?>
-                       <?php while ( have_posts() ) : the_post(); ?>
-
-                               <?php
-                               /**
-                                * Run the loop for the search to output the results.
-                                * If you want to overload this in a child theme then include a file
-                                * called content-search.php and that will be used instead.
-                                */
-                               get_template_part( 'content', 'search' );
-                               ?>
-
-                       <?php endwhile; ?>
-
-                       <?php the_posts_pagination(); ?>
-
-               <?php else : ?>
-
-                       <?php get_template_part( 'content', 'none' ); ?>
-
-               <?php endif; ?>
-
-               </main><!-- #main -->
-       </section><!-- #primary -->
-
-<?php get_sidebar(); ?>
-</div>
-<?php get_footer();
diff --git a/sections/blog-archive.php b/sections/blog-archive.php
new file mode 100644 (file)
index 0000000..32313d2
--- /dev/null
@@ -0,0 +1,6 @@
+                    <main class="blog-archive">
+                        <div class="row">
+                            <?php get_template_part('parts/blog-content-area'); ?>
+                            <?php get_template_part('parts/blog-sidebar-r'); ?>
+                        </div>
+                    </main>
\ No newline at end of file
diff --git a/sections/blog-home.php b/sections/blog-home.php
new file mode 100644 (file)
index 0000000..01d5da8
--- /dev/null
@@ -0,0 +1,9 @@
+                    <main class="blog-home">
+                <!--    <article <?php // post_class() ?> id="interior-featured">
+                        <?php // GLM_get_header(); ?>
+                    </article> -->
+                        <div class="row">
+                            <?php get_template_part('parts/blog-content-area'); ?>
+                            <?php get_template_part('parts/blog-sidebar-r'); ?>
+                        </div>
+                    </main>
\ No newline at end of file
diff --git a/sections/blog-single.php b/sections/blog-single.php
new file mode 100644 (file)
index 0000000..d0075b7
--- /dev/null
@@ -0,0 +1,26 @@
+                    <main class="blog-single">
+                        <div class="row">
+                            <div id="blog-posts-over" class="small-12 medium-9 columns">
+                                <?php if(have_posts()) : while(have_posts()): the_post();?>
+                                <div class="row blog-post-container">
+                                    <div class="small-11 small-centered columns">
+                                        <div class="row">
+                                            <div class="small-12 columns">
+                                                <?php get_template_part('parts/blog-text-single'); ?>
+                                                <?php if ( comments_open() || get_comments_number() ) :
+                                                comments_template();
+                                                endif; ?>
+                                            </div>
+                                        </div>
+                                    </div>
+                                </div>
+                                <?php endwhile; ?>
+                                <?php else: ?>
+                                <div id="post-404" class="noposts">
+                                    <p><?php _e('Sorry, no results were found.');?></p>
+                                </div><!-- /#post-404 -->
+                                <?php endif;?>
+                            </div>
+                            <?php get_template_part('parts/blog-sidebar-r'); ?>
+                        </div>
+                    </main>
\ No newline at end of file
diff --git a/sections/copyright.php b/sections/copyright.php
new file mode 100644 (file)
index 0000000..acce51b
--- /dev/null
@@ -0,0 +1,7 @@
+                <div id="copyright" class="small-12 text-center row columns opensearchserver.ignore">
+                    <span>Copyright &copy; <?php echo date('Y');?> </span>
+                    <span class="bullet"> &#8226; </span>
+                    <span> Produced by <a target="_blank" href="http://www.gaslightmedia.com">Gaslight Media</a></span>
+                    <span class="bullet"> &#8226; </span>
+                    <span> All Rights Reserved</span>
+                </div>
\ No newline at end of file
diff --git a/sections/footer.php b/sections/footer.php
new file mode 100644 (file)
index 0000000..9092589
--- /dev/null
@@ -0,0 +1,95 @@
+                        <footer class="main opensearchserver.ignore">
+                            <div id="glm-blocks-wrapper" data-equalizer data-options="equalize_on_stack: false">
+                                <?php
+                                    get_template_part('parts/glm-blocks');
+                                ?>
+                            </div>
+                            <div id="footer-top">
+                                <div id="footer-guide-social-wrapper" class="row">
+                   
+                                
+                                </div>
+                            </div>
+                            <div id="footer-newsletter-wrapper">
+                                <div id="footer-newsletter" class="row">
+                                    <h3 class="footer-newsletter-title">Copper Country Newsletter</h3>
+                                    <p class="footer-newsletter-text">Our eNewsletter will give you the scoop on upcoming events and festivals</p>
+                                    <a class="footer-newsletter-button" href="<?php echo get_permalink( get_page_by_path( 'about-us/sign-up-to-receive-our-newsletters' ) );?>"><span>Sign Up</span></a>
+                                </div>
+                            </div>
+
+<!--                            <div id="footer-svg-wrapper">
+                                <img src="<?php // echo get_template_directory_uri(); ?>/assets/Footer Graphic.svg">
+                            </div>-->
+
+                            <?php if (is_active_sidebar('sidebar-f')) :?>
+                                <?php dynamic_sidebar('sidebar-f');?>
+                            <?php endif;?>
+                            <div id="footer-weather-address-wrapper" class="show-for-medium-up">
+                                <div id="footer-overlay"></div>
+                                <div id="footer-weather-address-container" class="row">
+                                    <div id="footer-weather" class="small-centered small-11 medium-uncentered medium-6 large-2 columns left">
+                                        <div class="footer-weather-logo">
+                                            <div id="weather-widget">
+                                                <?php echo do_shortcode('[wunderground location="Calumet, MI" measurement="f" layout="table-horizontal" numdays="2" showdata="daynames,pop,icon,conditions,date,highlow"]');?>
+                                            </div>
+                                            <a id="activate-weather" class=""><img src="<?php echo get_template_directory_uri(); ?>/assets/weather-badge.png"></a>
+                                        </div>
+                                    </div>
+                                    <div id="footer-address" class="small-centered small-11 medium-uncentered medium-6 large-5 columns">
+                                        <?php if (function_exists('glm_get_clientinfo_option')) :?>
+                                        <h2><?php echo glm_get_clientinfo_option('businessName');?></h2>
+                                        <?php if (glm_get_clientinfo_option('address')):?>
+                                            <span><?php echo glm_get_clientinfo_option('address');?>,</span>
+                                            <span><?php echo glm_get_clientinfo_option('city');?>, <?php echo glm_get_clientinfo_option('state');?>
+                                                <?php echo glm_get_clientinfo_option('zip');?></span>
+                                        <?php endif;?>
+                                        <?php if (glm_get_clientinfo_option('address2')):?>
+                                            <span class="bullet"> &#8226; </span>
+                                            <span><?php echo glm_get_clientinfo_option('address2');?></span>
+                                            <span class="bullet"> &#8226; </span>
+                                            <span><?php echo glm_get_clientinfo_option('city2');?>, <?php echo glm_get_clientinfo_option('state2');?>
+                                                <?php echo glm_get_clientinfo_option('zip2');?></span>
+                                        <?php endif;?>
+                                            <br>
+                                        <?php if (glm_get_clientinfo_option('tollfree')) :?>
+                                            <span><?php echo glm_get_clientinfo_option('tollfree');?></span>
+                                        <?php endif;?>
+                                        <?php if (glm_get_clientinfo_option('phone')) :?>
+                                            <span class="bullet"> &#8226; </span><span><?php echo glm_get_clientinfo_option('phone');?></span>
+                                        <?php endif;?>
+                                        <?php if (glm_get_clientinfo_option('phone2')) :?>
+                                            <span class="bullet"> &#8226; </span><span><?php echo glm_get_clientinfo_option('phone2');?></span>
+                                        <?php endif;?>
+                                        <?php if (glm_get_clientinfo_option('email')) :?>
+                                            <span class="bullet"> &#8226; </span><span><?php echo glm_get_clientinfo_option('email');?></span>
+                                        <?php endif;?>
+                                        <?php if (glm_get_clientinfo_option('fax')) :?>
+                                            <span class="bullet"> &#8226; </span><span><?php echo glm_get_clientinfo_option('fax');?></span>
+                                        <?php endif;?>
+                                        <?php if (glm_get_clientinfo_option('extra')) :?>
+                                            <span class="bullet"> &#8226; </span><span><?php echo glm_get_clientinfo_option('extra');?></span>
+                                        <?php endif;?>
+                                        <?php endif;?>
+                                        <br>
+                                        <a class="footer-address-link" href="<?php echo get_permalink( get_page_by_path( 'about-us/contact-us' ) );?>">Contact Us</a>
+                                        |
+                                        <a class="footer-address-link" href="<?php echo get_permalink( get_page_by_path( 'members-only' ) );?>">Members</a>
+                                        <div id="copyright" class="opensearchserver.ignore">
+                                            <span>Copyright &copy; <?php echo date('Y');?> </span>
+                                            <span class="bullet"> &#8226; </span>
+                                            <span> Produced by <a target="_blank" href="http://www.gaslightmedia.com">Gaslight Media</a></span>
+                                            <span class="bullet"> &#8226; </span>
+                                            <span> All Rights Reserved</span>
+                                        </div>
+                                    </div>
+                                    <div id="footer-social" class="columns small-12 medium-5 large-4 show-for-large-up">
+                                        <p class="footer-social-text">Follow Us</p>
+                                        <a href="https://www.facebook.com/Icebreaker-Mackinaw-Maritime-Museum-209643999061611/" target="_blank"><span id="facebook" class="footer-social-icon"></span></a>
+                                        <!-- <a href="https://instagram.com/michiganskeweenaw/" target="_blank"><span id="instagram" class="footer-social-icon"></span></a> -->
+                                        <a href="https://www.tripadvisor.com/Attraction_Review-g42424-d675257-Reviews-Icebreaker_Mackinaw_Maritime_Museum_Inc-Mackinaw_City_Cheboygan_County_Michigan.html" target="_blank"><span id="travel-advisor"   class="footer-social-icon"></span></a>
+                                        <a href="<?php echo get_permalink( get_option( 'page_for_posts' ) ); ?>"><span id="blog" class="footer-social-icon"></span></a>
+                                    </div>
+                                </div>
+                            </div>
+                        </footer>
diff --git a/sections/front-page.php b/sections/front-page.php
new file mode 100644 (file)
index 0000000..0698952
--- /dev/null
@@ -0,0 +1,18 @@
+                    <div id="header-separator" class="header-separator-front">
+                        <h1>Our Mission:</h1>
+                        <p>
+                         "Preserving the legacy of the Mackinaw WAGB 83 and her Crew"
+                        </p>
+                    </div>
+                    <main class="page-front">
+                        <div id="content-wrapper">
+                            <div class="row">
+                                <?php get_template_part('parts/main-content');?>
+
+                                <div class="small-12 medium-6 large-4 columns small-text-center medium-text-left">
+                                    <?php //get_sidebar(); ?>
+                                </div>
+
+                            </div>
+                        </div>
+                    </main>
\ No newline at end of file
diff --git a/sections/glm-members-only.php b/sections/glm-members-only.php
new file mode 100644 (file)
index 0000000..69f98a6
--- /dev/null
@@ -0,0 +1,23 @@
+<div id="members-only-content" class="row">
+    <div id="side-links" class="show-for-large-up left medium-3 columns">
+        <?php if (is_in_tree(get_option("glm_members_database_option_members_only_id"))) { ?>
+        <?php get_template_part('parts/members-sidebar');?>
+        <?php } ?>
+    </div>
+    <div id="main-content" class="small-12 medium-9 columns">
+
+        <?php if (current_user_can("glm_members_member")) { ?>
+            <!-- If user is logged in as a member, display top bar, bread crumbs, & content -->
+            <?php get_template_part('parts/glm-members-only-top-bar'); ?>
+            <?php get_template_part('parts/main-content'); ?>
+        <?php } else if (get_the_ID() == get_option("glm_members_database_option_members_only_id")) {?>
+            <!-- Otherwise, if it's the main members only page, display content & form -->
+            <?php get_template_part('parts/main-content'); ?>
+            <?php get_template_part('parts/glm-members-only-login-form'); ?>
+        <?php } else { ?>
+            <!-- Otherwise, display main members only page content & form -->
+            <?php echo get_post_page_content(get_option("glm_members_database_option_members_only_id")); ?>
+            <?php get_template_part('parts/glm-members-only-login-form'); ?>
+        <?php } ?>
+    </div>
+</div>
\ No newline at end of file
diff --git a/sections/header.php b/sections/header.php
new file mode 100644 (file)
index 0000000..d48b9b7
--- /dev/null
@@ -0,0 +1,14 @@
+<div id="searchWrapper" class="row">
+    <div id="searchContainer"> <form class="searchformHeader" role="search" method="get" action="<?php echo home_url('/').'site-search/'; ?>">
+        <input id="headerSearch" class="search-input" placeholder="Search" value="" name="query" type="text">
+        <input id="input" class="search-button" name="searchButton" value="Search" type="submit">
+        <a id="magnifying-glass" class="show-for-large-up" href="#"></a></form>
+    </div>
+</div>
+<header class="main">
+    <div id="header-media">
+        <?php
+        echo glm_get_header();
+        ?>
+    </div>
+</header>
\ No newline at end of file
diff --git a/sections/interior-page.php b/sections/interior-page.php
new file mode 100644 (file)
index 0000000..f32e31e
--- /dev/null
@@ -0,0 +1,42 @@
+                    <div id="header-separator" class="header-separator-interior">
+                        <h1><?php
+                            // if ( is_member() ) {
+                            //     echo get_member_name();
+                            // } else if ( glm_is_event_detail() ) {
+                            //     if (glm_is_event_detail()) {
+                            //         echo glm_get_event_name();
+                            //     }
+                            // } else {
+                            //     echo get_the_title();
+                            // }
+                            ?>
+                        </h1>
+                    </div>
+                    <main class="page-inside">
+                        <div id="content-wrapper">
+                            <div class="row">
+
+                                <?php if(is_in_tree(MEMBERS_ONLY_ID)) { ?>
+                                    <?php get_template_part('sections/glm-members-only'); ?>
+                                <?php } else { ?>
+
+                                    <?php if(function_exists('bcn_display') && !is_front_page())
+                                    {
+                                        echo "<div class=\"breadcrumbs small-12 columns\">";
+                                        echo '<span class="st_sharethis" st_title="'. get_the_title().'" st_url="'. get_the_permalink() .'"></span>';
+                                        bcn_display();
+                                        echo "</div>";
+                                    }
+                                    ?>
+                                    <div class="row">
+                                        <?php get_template_part('parts/main-content');?>
+                                    </div>
+                <!--
+                                <div class="small-12 medium-6 large-4 columns small-text-center medium-text-left">
+                                    <?php //get_sidebar(); ?>
+                                </div>
+                -->
+                                <?php } // End of members only check ?>
+                            </div>
+                        </div>
+                    </main>
diff --git a/sections/landing-page.php b/sections/landing-page.php
new file mode 100644 (file)
index 0000000..249b3fd
--- /dev/null
@@ -0,0 +1,79 @@
+<div id="header-separator" class="header-separator-interior">
+    <h1><?php
+        // if ( is_member() ) {
+        //     echo get_member_name();
+        // } else if ( glm_is_event_detail() ) {
+        //     if (glm_is_event_detail()) {
+        //         echo glm_get_event_name();
+        //     }
+        // } else {
+        //     echo get_the_title();
+        // }
+        ?>
+    </h1>
+</div>
+<main class="page-inside">
+    <div id="content-wrapper">
+        <div class="row">
+
+            <?php if(function_exists('bcn_display') && !is_front_page())
+            {
+                echo "<div class=\"breadcrumbs small-12 columns\">";
+                echo '<span class="st_sharethis" st_title="'. get_the_title().'" st_url="'. get_the_permalink() .'"></span>';
+                bcn_display();
+                echo "</div>";
+            }
+            ?>
+            <div class="row">
+                <?php get_template_part('parts/main-content');?>
+            </div>
+        </div>
+    </div>
+
+    <div data-equalizer data-options="equalize_on_stack: false">
+        <div class="glm-blocks-container row">
+        <?php
+        global $post;
+        $args = array(
+            'post_type'      => 'page',
+            'posts_per_page' => -1,
+            'post_parent'    => $post->ID,
+            'order'          => 'ASC',
+            'orderby'        => 'menu_order',
+            'post_status'    => 'publish',
+        );
+
+        $post_parent = $post->ID;
+        $parent = new WP_Query( $args );
+        $blockCount = 0;
+        ?>
+        <?php if ( $parent->have_posts() ) : ?>
+         <?php while ( $parent->have_posts() ) : $parent->the_post(); ?>
+        <?php $blockCount++; ?>
+           <?php $id = get_the_ID();
+                if(get_post_thumbnail_id($id)){
+                    $image_data = wp_get_attachment_image_src(get_post_thumbnail_id($id), 'glm-block-image');
+                } else {
+                    $image_data = wp_get_attachment_image_src(get_post_thumbnail_id($post_parent), 'glm-block-image');
+                }
+                if (($parent->current_post +1) == ($parent->post_count)){
+                    $end = ' end ';
+                } else {
+                    $end = '';
+                }
+           ?>
+
+            <div id="<?php the_ID(); ?>" class="text-center small-12 medium-4 columns large-text-left glm-block<?php echo $end;?>">
+                <a class="glm-block-image" href="<?php echo get_permalink($id); ?>"><img src="<?php echo $image_data[0]; ?>" /></a>
+                <a class="glm-block-title" href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><h1><?php the_title(); ?></h1></a>
+            </div>
+        <?php if ( $blockCount % 3 == 0 ) { ?>
+        </div><div class="glm-blocks-container row">
+        <?php } ?>
+        <?php endwhile; ?>
+
+        <?php endif; wp_reset_query(); ?>
+        </div>
+    </div>
+
+</main>
diff --git a/sections/off-canvas.php b/sections/off-canvas.php
new file mode 100644 (file)
index 0000000..1ca6908
--- /dev/null
@@ -0,0 +1,23 @@
+                    <aside class="left-off-canvas-menu hide-for-large-up opensearchserver.ignore">
+                        <?php glm_theme_mobile_off_canvas(); ?>
+                        <?php if (current_user_can("glm_members_member")) { ?>
+                            <div id="members-only-sidebar-off-canvas" class="show-for-medium-down small-12 columns">
+                            <?php get_template_part('parts/members-sidebar');?>
+                            </div>
+                        <?php } ?>
+                        <br>
+                        <?php get_template_part('parts/search-form');?>
+                        <br>
+                        <div id="off-canvas-social">
+                            <a href="http://www.facebook.com/pages/Michigans-Keweenaw-Peninsula/137047840080" target="_blank"><span id="facebook" class="footer-social-icon"></span></a>
+                            <a href="https://instagram.com/michiganskeweenaw/" target="_blank"><span id="instagram" class="footer-social-icon"></span></a>
+                            <a href="https://www.tripadvisor.com/Attraction_Review-g28943-d624170-Reviews-Keweenaw_Peninsula-Michigan.html" target="_blank"><span id="travel-advisor"   class="footer-social-icon"></span></a>
+                            <a href="<?php echo get_permalink( get_option( 'page_for_posts' ) ); ?>"><span id="blog" class="footer-social-icon"></span></a>
+                        </div>
+                        <br>
+                        <?php get_template_part('parts/client-info-offcanvas');?>
+                    </aside>
+                    <!--
+                    <aside class="right-off-canvas-menu">
+
+                    </aside>-->
\ No newline at end of file
diff --git a/sections/search.php b/sections/search.php
new file mode 100644 (file)
index 0000000..16c6b6e
--- /dev/null
@@ -0,0 +1,110 @@
+        <main class="search-results">
+            <div class="row">
+                <?php if (get_search_query() == "") { ?>
+                <br><h2 class="search-result-header small-12 columns">Please enter a query in the search box. </h2>
+                <?php } else { ?>
+                <br><h2 class="search-result-header small-12 columns">Search Results for "<?php echo get_search_query(); ?>"</h2>
+            </div>
+
+            <div class="row">
+                <div id="blog-posts-over" class="small-12 columns">
+                    <?php if(have_posts()) : while(have_posts()): the_post();?>
+                        <?php if (is_search() && (isset($_GET['searchType']) && $_GET['searchType'] == 'blog') && ($post->post_type=='page')) continue; ?>
+                    <div class="row content search-result-container">
+                        <div class="small-11 small-centered columns">
+                            <article id="<?php the_ID()?>" <?php post_class()?>>
+                                <header class="entry-header">
+                                    <h1 class="entry-title"><a href="<?php the_permalink(); ?>"><?php the_title();?></a></h1>
+                                    <span class="meta date">Posted on <?php the_time('F jS, Y') ?></span>
+                                </header>
+
+
+                        <!-- Start of the Contextual/Highlight Search -->
+                                        <?php
+                                        // Configuration
+                                        $max_length = 400; // Max length in characters
+                                        $min_padding = 30; // Min length in characters of the context to place around found search terms
+
+                                        // Load content as plain text
+                                        global $wp_query, $post;
+                                        $content = (!post_password_required($post) ? strip_tags(preg_replace(array("/\r?\n/", '@<\s*(p|br\s*/?)\s*>@'), array(' ', "\n"), apply_filters('the_content', $post->post_content))) : '');
+
+                                        // Search content for terms
+                                        $terms = $wp_query->query_vars['search_terms'];
+                                        if ( preg_match_all('/'.str_replace('/', '\/', join('|', $terms)).'/i', $content, $matches, PREG_OFFSET_CAPTURE) ) {
+                                            $padding = max($min_padding, $max_length / (2*count($matches[0])));
+
+                                          // Construct extract containing context for each term
+                                          $output = '';
+                                          $last_offset = 0;
+                                          foreach ( $matches[0] as $match ) {
+                                            list($string, $offset) = $match;
+                                            $start  = $offset-$padding;
+                                            $end = $offset+strlen($string)+$padding;
+                                            // Preserve whole words
+                                            while ( $start > 1 && preg_match('/[A-Za-z0-9\'"-]/', $content{$start-1}) ) $start--;
+                                            while ( $end < strlen($content)-1 && preg_match('/[A-Za-z0-9\'"-]/', $content{$end}) ) $end++;
+                                            $start = max($start, $last_offset);
+                                            $context = substr($content, $start, $end-$start);
+                                            if ( $start > $last_offset ) $context = '...'.$context;
+                                            $output .= $context;
+                                            $last_offset = $end;
+                                          }
+
+                                          if ( $last_offset != strlen($content)-1 ) $output .= '...';
+                                        } else {
+                                          $output = $content;
+                                        }
+
+                                        if ( strlen($output) > $max_length ) {
+                                          $end = $max_length-3;
+                                          while ( $end > 1 && preg_match('/[A-Za-z0-9\'"-]/', $output{$end-1}) ) $end--;
+                                          $output = substr($output, 0, $end) . '...';
+                                        }
+
+                                        // Highlight matches
+                                        $context = nl2br(preg_replace('/'.str_replace('/', '\/', join('|', $terms)).'/i', '<strong>$0</strong>', $output));
+                                        ?>
+
+                                        <p class="search_result_context">
+                                          <?php echo $context ?>
+                                        </p>
+                                        <p>
+                                          <a href="<?php the_permalink() ?>" rel="bookmark">Read this entry</a>
+                                        </p>
+                        <!-- End of the Contextual/Highlight Search -->
+
+                                <?php //echo (function_exists('the_advanced_excerpt')) ? the_advanced_excerpt(): the_excerpt(); ?>
+                                <footer class="entry-meta small-12 medium-6 medium-push-3 center">
+                                    <?php
+                                    if (has_category()) {
+                                        $post_categories = wp_get_post_categories( get_the_ID() );
+                                        $cats = array();
+                                        echo 'This entry was posted ';
+                                        echo 'in';
+                                        foreach($post_categories as $c){
+                                            $cat = get_category( $c );
+                                            $cats[] = array( 'name' => $cat->name, 'slug' => $cat->slug );
+                                            echo ', <a rel="category" title="View all posts in '. $cat->name . ' " href="'. $cat->slug .'">'. $cat->name .'</a>';
+                                        }
+                                        echo '.';
+                                    }
+                                    ?>
+                                </footer>
+                            </article>
+                        </div>
+                    </div>
+                    <?php endwhile; ?>
+                    <div class="navigation">
+                        <span class="newer"><?php previous_posts_link(__('« Newer','example')) ?></span> <span class="older"><?php next_posts_link(__('Older »','example')) ?></span>
+                    </div><!-- /.navigation -->
+                    <?php else: ?>
+                    <div id="post-404" class="noposts">
+                        <p><?php _e('Sorry, no results were found.');?></p>
+                    </div><!-- /#post-404 -->
+                    <?php endif;?>
+                </div>
+
+                    <?php } ?> <!-- end empty query check -->
+                </div>
+        </main>
\ No newline at end of file
diff --git a/sections/top-bar.php b/sections/top-bar.php
new file mode 100644 (file)
index 0000000..18a1944
--- /dev/null
@@ -0,0 +1,13 @@
+                    <div id="top-bar-wrapper">
+                        <nav class="top-bar text-center show-for-large-up opensearchserver.ignore" data-topbar role="navigation">
+                            <a href="<?php bloginfo('url')?>"><img id="top-bar-logo" src="<?php echo get_template_directory_uri();?>/assets/logo.gif" class="left"></a>
+                            <section class="top-bar-section right">
+                                <?php glm_theme_top_bar(); ?>
+                            </section>
+                        </nav>
+                        <nav class="tab-bar show-for-medium-down">
+                            <section class="left-small">
+                                <a class="left-off-canvas-toggle menu-icon" href="#"><span>Menu</span></a>
+                            </section>
+                        </nav>
+                    </div>
index cb71500..4cf9d86 100644 (file)
@@ -1,15 +1,6 @@
-<?php
-/**
- * The sidebar containing the main widget area.
- *
- * @package accesspress_parallax
- */
-
-if ( ! is_active_sidebar( 'sidebar-1' ) ) {
-       return;
-}
-?>
-
-<div id="secondary" class="widget-area" role="complementary">
-       <?php dynamic_sidebar( 'sidebar-1' ); ?>
-</div><!-- #secondary -->
+<!--
+                        <div id="side-nav" class="show-for-large-up" data-equalizer-watch>
+                            <div class="row collapse opensearchserver.ignore">
+                                <?php //glm_side_menu(); ?>
+                            </div>
+                        </div>-->
diff --git a/single.php b/single.php
deleted file mode 100644 (file)
index 8f8756b..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-<?php
-/**
- * The template for displaying all single posts.
- *
- * @package accesspress_parallax
- */
-
-get_header(); ?>
-<div class="mid-content clearfix">
-       <div id="primary" class="content-area">
-               <main id="main" class="site-main" role="main">
-
-               <?php while ( have_posts() ) : the_post(); ?>
-
-                       <?php get_template_part( 'content', 'single' ); ?>
-
-                       <?php 
-                       $post_pagination = of_get_option('post_pagination');
-                       if( $post_pagination == 1 || !isset($post_pagination)) :
-                       the_post_navigation( array(
-                               'prev_text'                  => '<i class="fa fa-hand-o-left"></i>' . __( '%title', 'accesspress-parallax' ),
-               'next_text'                  => __( '%title', 'accesspress-parallax' ) . '<i class="fa fa-hand-o-right"></i>',
-               'in_same_term'               => true,
-                               ));
-                       endif;
-                       ?>
-
-                       <?php
-                               // If comments are open or we have at least one comment, load up the comment template
-                               if ( comments_open() || '0' != get_comments_number() ) :
-                                       comments_template();
-                               endif;
-                       ?>
-
-               <?php endwhile; // end of the loop. ?>
-
-               </main><!-- #main -->
-       </div><!-- #primary -->
-
-<?php get_sidebar(); ?>
-</div>
-<?php get_footer();
\ No newline at end of file
diff --git a/slick/CONTRIBUTING.markdown b/slick/CONTRIBUTING.markdown
new file mode 100644 (file)
index 0000000..33b73ca
--- /dev/null
@@ -0,0 +1,35 @@
+## Submitting issues
+
+### Test case required
+
+**All bug reports and problem issues require a jsFiddle**.   
+[Please fork this JSFiddle as a baseline](http://jsfiddle.net/simeydotme/fmo50w7n/).
+
++ A test case clearly demonstrates the bug or issue.
++ It contains the bare minimum HTML, CSS, and JavaScript required to demonstrate the bug.
++ Assets are not minified (we cannot debug .min.js files).
++ A link to your production site is **not** a reduced test case.
+
+Providing a test case is the best way to get your issue addressed. Without a test case; your issue may be closed.  
+You must provide a clear and simple way to reproduce the issue with the provided fiddle.
+
+## Support
+
+Although Slick is designed to be super easy to use, there's always things that can go wrong, especially when interacting with other plugins and complicated websites. If you are **having problems getting Slick to work**, or can't figure something out, **this repository**'s issues section **is not the place to ask about it**.  
+
+I have set up a subreddit for Slick discussion at [reddit.com/r/slickcarousel](http://www.reddit.com/r/slickcarousel/).  
+And a gitter chatroom here: [gitter.im/kenwheeler/slick](https://gitter.im/kenwheeler/slick).  
+And finally you can ask the world for help, and find out if anyone else has your problem at [stackoverflow](http://stackoverflow.com/search?q=slick+carousel).
+
+Please use these forums as an area to discuss Slick and any issues you may have.
+
+## Feature Requests
+
+If you would like to request or propose a feature, please do so in the the Slick subreddit or gitter chat:  
+[reddit.com/r/slickcarousel](http://www.reddit.com/r/slickcarousel/) / [gitter.im/kenwheeler/slick](https://gitter.im/kenwheeler/slick).
+
+## Pull requests
+
+**Contributions are welcome**! That said, please *be prepared to edit* your pull request at request, and provide a jsFiddle of your fork working interoperably with every "mode" that Slick supports, and with varying numbers of slides, slidesToShow & slidesToScroll. Failure to do so will result in your pull request being closed.
+
+*Please note that while Slick is open source, this is still my baby, and by submitting a pull request you are authorizing me to edit or modify it in any way shape or form. You will be listed in Github as a contributor, but I have and will continue to steer the direction of this project.*
diff --git a/slick/ISSUE_TEMPLATE.md b/slick/ISSUE_TEMPLATE.md
new file mode 100644 (file)
index 0000000..7400336
--- /dev/null
@@ -0,0 +1,50 @@
+
+> short description of the bug / issue, provide more detail below.
+
+====================================================================
+
+
+###### `[  paste your jsfiddle link here  ]`  
+
+use this jsfiddle to reproduce your bug: 
+http://jsfiddle.net/simeydotme/fmo50w7n/ 
+we will likely close your issue without it.
+
+
+====================================================================
+
+
+#### Steps to reproduce the problem
+
+1. ...  
+2. ...  
+
+
+====================================================================
+
+
+#### What is the expected behaviour?
+
+...  
+
+
+====================================================================
+
+
+#### What is observed behaviour?
+
+...  
+
+
+====================================================================
+
+
+#### More Details
+
+- Which browsers/versions does it happen on?
+- Which jQuery/Slick version are you using?
+- Did this work before?
+
+
+
+
diff --git a/slick/LICENSE b/slick/LICENSE
new file mode 100644 (file)
index 0000000..3ffd452
--- /dev/null
@@ -0,0 +1,20 @@
+The MIT License (MIT)
+
+Copyright (c) 2013-2016
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/slick/Makefile b/slick/Makefile
new file mode 100644 (file)
index 0000000..eea6b95
--- /dev/null
@@ -0,0 +1,8 @@
+
+build: components slick.js slick.css
+  @component build --dev
+
+components: component.json
+  @component install --dev
+
+.PHONY: clean
diff --git a/slick/README.markdown b/slick/README.markdown
new file mode 100644 (file)
index 0000000..6dc5ca0
--- /dev/null
@@ -0,0 +1,287 @@
+slick
+-------
+
+[1]: <https://github.com/kenwheeler/slick>
+
+_the last carousel you'll ever need_
+
+#### Demo
+
+[http://kenwheeler.github.io/slick](http://kenwheeler.github.io/slick/)
+
+#### CDN
+
+To start working with Slick right away, there's a couple of CDN choices availabile
+to serve the files as close, and fast as possible to your users:
+
+- https://cdnjs.com/libraries/slick-carousel
+- https://www.jsdelivr.com/projects/jquery.slick
+
+#####Example using jsDelivr
+
+Just add a link to the css file in your `<head>`:
+```html
+<link rel="stylesheet" type="text/css" href="//cdn.jsdelivr.net/jquery.slick/1.6.0/slick.css"/>
+<!-- Add the slick-theme.css if you want default styling -->
+<link rel="stylesheet" type="text/css" href="//cdn.jsdelivr.net/jquery.slick/1.6.0/slick-theme.css"/>
+```
+
+Then, before your closing ```<body>``` tag add:
+
+```html
+<script type="text/javascript" src="//cdn.jsdelivr.net/jquery.slick/1.6.0/slick.min.js"></script>
+```
+
+#### Package Managers
+
+```sh
+# Bower
+bower install --save slick-carousel
+
+# NPM
+npm install slick-carousel
+```
+
+#### Contributing
+
+PLEASE review CONTRIBUTING.markdown prior to requesting a feature, filing a pull request or filing an issue.
+
+### Data Attribute Settings
+
+In slick 1.5 you can now add settings using the data-slick attribute. You still need to call $(element).slick() to initialize slick on the element.
+
+Example:
+
+```html
+<div data-slick='{"slidesToShow": 4, "slidesToScroll": 4}'>
+  <div><h3>1</h3></div>
+  <div><h3>2</h3></div>
+  <div><h3>3</h3></div>
+  <div><h3>4</h3></div>
+  <div><h3>5</h3></div>
+  <div><h3>6</h3></div>
+</div>
+```
+
+### Settings
+
+Option | Type | Default | Description
+------ | ---- | ------- | -----------
+accessibility | boolean | true | Enables tabbing and arrow key navigation
+adaptiveHeight | boolean | false | Adapts slider height to the current slide
+autoplay | boolean | false | Enables auto play of slides
+autoplaySpeed | int  | 3000 | Auto play change interval
+centerMode | boolean | false | Enables centered view with partial prev/next slides. Use with odd numbered slidesToShow counts.
+centerPadding | string | '50px' | Side padding when in center mode. (px or %)
+cssEase | string |  'ease' | CSS3 easing
+customPaging | function | n/a | Custom paging templates. See source for use example.
+dots | boolean | false | Current slide indicator dots
+dotsClass | string | 'slick-dots' | Class for slide indicator dots container
+draggable | boolean | true | Enables desktop dragging
+easing | string |  'linear' | animate() fallback easing
+edgeFriction | integer | 0.15 | Resistance when swiping edges of non-infinite carousels
+fade | boolean | false | Enables fade
+arrows | boolean | true | Enable Next/Prev arrows
+appendArrows | string | $(element) | Change where the navigation arrows are attached (Selector, htmlString, Array, Element, jQuery object)
+appendDots | string | $(element) | Change where the navigation dots are attached (Selector, htmlString, Array, Element, jQuery object)
+mobileFirst | boolean | false | Responsive settings use mobile first calculation
+prevArrow | string (html \| jQuery selector) \| object (DOM node \| jQuery object) | `<button type="button" class="slick-prev">Previous</button>` | Allows you to select a node or customize the HTML for the "Previous" arrow.
+nextArrow | string (html \| jQuery selector) \| object (DOM node \| jQuery object) | `<button type="button" class="slick-next">Next</button>` | Allows you to select a node or customize the HTML for the "Next" arrow.
+infinite | boolean | true | Infinite looping
+initialSlide | integer | 0 | Slide to start on
+lazyLoad | string | 'ondemand' | Accepts 'ondemand' or 'progressive' for lazy load technique. 'ondemand' will load the image as soon as you slide to it, 'progressive' loads one image after the other when the page loads.
+pauseOnFocus | boolean | true | Pauses autoplay when slider is focussed
+pauseOnHover | boolean | true | Pauses autoplay on hover
+pauseOnDotsHover | boolean | false | Pauses autoplay when a dot is hovered
+respondTo | string | 'window' | Width that responsive object responds to. Can be 'window', 'slider' or 'min' (the smaller of the two).
+responsive | array | null | Array of objects [containing breakpoints and settings objects (see example)](#responsive-option-example). Enables settings at given `breakpoint`. Set `settings` to "unslick" instead of an object to disable slick at a given breakpoint.
+rows | int | 1 | Setting this to more than 1 initializes grid mode. Use slidesPerRow to set how many slides should be in each row.
+slide | string | '' | Slide element query
+slidesPerRow | int | 1 | With grid mode initialized via the rows option, this sets how many slides are in each grid row.
+slidesToShow | int | 1 | # of slides to show at a time
+slidesToScroll | int | 1 | # of slides to scroll at a time
+speed | int | 300 | Transition speed
+swipe | boolean | true | Enables touch swipe
+swipeToSlide | boolean | false | Swipe to slide irrespective of slidesToScroll
+touchMove | boolean | true | Enables slide moving with touch
+touchThreshold | int | 5 | To advance slides, the user must swipe a length of (1/touchThreshold) * the width of the slider.
+useCSS | boolean | true | Enable/Disable CSS Transitions
+useTransform | boolean | true | Enable/Disable CSS Transforms
+variableWidth | boolean | false | Disables automatic slide width calculation
+vertical | boolean | false | Vertical slide direction
+verticalSwiping | boolean | false | Changes swipe direction to vertical
+rtl | boolean | false | Change the slider's direction to become right-to-left
+waitForAnimate | boolean | true | Ignores requests to advance the slide while animating
+zIndex | number | 1000 | Set the zIndex values for slides, useful for IE9 and lower
+
+##### Responsive Option Example
+The responsive option, and value, is quite unique and powerful.
+You can use it like so:
+
+```javascript
+$(".slider").slick({
+
+  // normal options...
+  infinite: false,
+
+  // the magic
+  responsive: [{
+
+      breakpoint: 1024,
+      settings: {
+        slidesToShow: 3,
+        infinite: true
+      }
+
+    }, {
+
+      breakpoint: 600,
+      settings: {
+        slidesToShow: 2,
+        dots: true
+      }
+
+    }, {
+
+      breakpoint: 300,
+      settings: "unslick" // destroys slick
+
+    }]
+});
+```
+
+
+
+
+### Events
+
+In slick 1.4, callback methods were deprecated and replaced with events. Use them before the initialization of slick as shown below:
+
+```javascript
+// On swipe event
+$('.your-element').on('swipe', function(event, slick, direction){
+  console.log(direction);
+  // left
+});
+
+// On edge hit
+$('.your-element').on('edge', function(event, slick, direction){
+  console.log('edge was hit')
+});
+
+// On before slide change
+$('.your-element').on('beforeChange', function(event, slick, currentSlide, nextSlide){
+  console.log(nextSlide);
+});
+```
+
+Event | Params | Description
+------ | -------- | -----------
+afterChange | event, slick, currentSlide | After slide change callback
+beforeChange | event, slick, currentSlide, nextSlide | Before slide change callback
+breakpoint | event, slick, breakpoint | Fires after a breakpoint is hit
+destroy | event, slick | When slider is destroyed, or unslicked.
+edge | event, slick, direction | Fires when an edge is overscrolled in non-infinite mode.
+init | event, slick | When Slick initializes for the first time callback. Note that this event should be defined before initializing the slider.
+reInit | event, slick | Every time Slick (re-)initializes callback
+setPosition | event, slick | Every time Slick recalculates position
+swipe | event, slick, direction | Fires after swipe/drag
+lazyLoaded | event, slick, image, imageSource | Fires after image loads lazily
+lazyLoadError | event, slick, image, imageSource | Fires after image fails to load
+
+
+#### Methods
+
+Methods are called on slick instances through the slick method itself in version 1.4, see below:
+
+```javascript
+// Add a slide
+$('.your-element').slick('slickAdd',"<div></div>");
+
+// Get the current slide
+var currentSlide = $('.your-element').slick('slickCurrentSlide');
+```
+
+This new syntax allows you to call any internal slick method as well:
+
+```javascript
+// Manually refresh positioning of slick
+$('.your-element').slick('setPosition');
+```
+
+
+Method | Argument | Description
+------ | -------- | -----------
+`slick` | options : object | Initializes Slick
+`unslick` |  | Destroys Slick
+`slickNext` |  |  Triggers next slide
+`slickPrev` | | Triggers previous slide
+`slickPause` | | Pause Autoplay
+`slickPlay` | | Start Autoplay (_will also set `autoplay` option to `true`_)
+`slickGoTo` | index : int, dontAnimate : bool | Goes to slide by index, skipping animation if second parameter is set to true
+`slickCurrentSlide` |  |  Returns the current slide index
+`slickAdd` | element : html or DOM object, index: int, addBefore: bool | Add a slide. If an index is provided, will add at that index, or before if addBefore is set. If no index is provided, add to the end or to the beginning if addBefore is set. Accepts HTML String || Object
+`slickRemove` | index: int, removeBefore: bool | Remove slide by index. If removeBefore is set true, remove slide preceding index, or the first slide if no index is specified. If removeBefore is set to false, remove the slide following index, or the last slide if no index is set.
+`slickFilter` | filter : selector or function | Filters slides using jQuery .filter syntax
+`slickUnfilter` | | Removes applied filter
+`slickGetOption` | option : string(option name) | Gets an option value.
+`slickSetOption` | change an option, `refresh` is always `boolean` and will update UI changes...
+ | `option, value, refresh` | change a [single `option`](https://github.com/kenwheeler/slick#settings) to given `value`; `refresh` is optional.
+ | `"responsive", [{ breakpoint: n, settings: {} }, ... ], refresh` | change or add [whole sets of responsive options](#responsive-option-example)
+ | `{ option: value, option: value, ... }, refresh` | change  [multiple `option`s](https://github.com/kenwheeler/slick#settings) to corresponding `value`s.
+
+
+#### Example
+
+Initialize with:
+
+```javascript
+$(element).slick({
+  dots: true,
+  speed: 500
+});
+ ```
+
+Change the speed with:
+
+```javascript
+$(element).slick('slickSetOption', 'speed', 5000, true);
+```
+
+Destroy with:
+
+```javascript
+$(element).slick('unslick');
+```
+
+
+#### Sass Variables
+
+Variable | Type | Default | Description
+------ | ---- | ------- | -----------
+$slick-font-path | string | "./fonts/" | Directory path for the slick icon font
+$slick-font-family | string | "slick" | Font-family for slick icon font
+$slick-loader-path | string | "./" | Directory path for the loader image
+$slick-arrow-color | color | white | Color of the left/right arrow icons
+$slick-dot-color | color | black | Color of the navigation dots
+$slick-dot-color-active | color | $slick-dot-color | Color of the active navigation dot
+$slick-prev-character | string | '\2190' | Unicode character code for the previous arrow icon
+$slick-next-character | string | '\2192' | Unicode character code for the next arrow icon
+$slick-dot-character | string | '\2022' | Unicode character code for the navigation dot icon
+$slick-dot-size | pixels | 6px | Size of the navigation dots
+
+#### Browser support
+
+Slick works on IE8+ in addition to other modern browsers such as Chrome, Firefox, and Safari.
+
+#### Dependencies
+
+jQuery 1.7
+
+#### License
+
+Copyright (c) 2014 Ken Wheeler
+
+Licensed under the MIT license.
+
+Free as in Bacon.
diff --git a/slick/bower.json b/slick/bower.json
new file mode 100644 (file)
index 0000000..ff2c379
--- /dev/null
@@ -0,0 +1,33 @@
+{
+    "name": "slick-carousel",
+    "main": [
+        "slick/slick.js",
+        "slick/slick.css",
+        "slick/slick.less",
+        "slick/slick.scss"
+    ],
+    "version": "1.6.0",
+    "homepage": "https://github.com/kenwheeler/slick",
+    "authors": [
+        "Ken Wheeler <ken_wheeler@me.com>"
+    ],
+    "description": "the last carousel you'll ever need",
+    "keywords": [
+        "responsive",
+        "carousel",
+        "jquery"
+    ],
+    "license": "MIT",
+    "ignore": [
+        "**/.*",
+        "node_modules",
+        "bower_components",
+        "test",
+        "tests",
+        "package.json",
+        "index.html"
+    ],
+    "dependencies": {
+        "jquery": ">=1.7"
+    }
+}
diff --git a/slick/component.json b/slick/component.json
new file mode 100644 (file)
index 0000000..af23f00
--- /dev/null
@@ -0,0 +1,18 @@
+{
+    "name": "slick",
+    "repo": "kenwheeler/slick",
+    "description": "the last carousel you'll ever need",
+    "version": "1.6.0",
+    "keywords": ["ui", "jquery", "carousel", "responsive", "slider"],
+    "dependencies": {
+        "component/jquery": "*"
+    },
+    "development": {},
+    "scripts": {
+        "slick/slick.js": "slick.js"
+    },
+    "styles": {
+        "slick/slick.css": "slick.css",
+        "slick/slick-theme.css": "slick-theme.css"
+    }
+}
\ No newline at end of file
diff --git a/slick/index.html b/slick/index.html
new file mode 100644 (file)
index 0000000..c8fab56
--- /dev/null
@@ -0,0 +1,137 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <title>Slick Playground</title>
+  <meta charset="UTF-8">
+  <link rel="stylesheet" type="text/css" href="./slick/slick.css">
+  <link rel="stylesheet" type="text/css" href="./slick/slick-theme.css">
+  <style type="text/css">
+    html, body {
+      margin: 0;
+      padding: 0;
+    }
+
+    * {
+      box-sizing: border-box;
+    }
+
+    .slider {
+        width: 50%;
+        margin: 100px auto;
+    }
+
+    .slick-slide {
+      margin: 0px 20px;
+    }
+
+    .slick-slide img {
+      width: 100%;
+    }
+
+    .slick-prev:before,
+    .slick-next:before {
+        color: black;
+    }
+  </style>
+</head>
+<body>
+
+  <section class="regular slider">
+    <div>
+      <img src="http://placehold.it/350x300?text=1">
+    </div>
+    <div>
+      <img src="http://placehold.it/350x300?text=2">
+    </div>
+    <div>
+      <img src="http://placehold.it/350x300?text=3">
+    </div>
+    <div>
+      <img src="http://placehold.it/350x300?text=4">
+    </div>
+    <div>
+      <img src="http://placehold.it/350x300?text=5">
+    </div>
+    <div>
+      <img src="http://placehold.it/350x300?text=6">
+    </div>
+  </section>
+
+  <section class="center slider">
+    <div>
+      <img src="http://placehold.it/350x300?text=1">
+    </div>
+    <div>
+      <img src="http://placehold.it/350x300?text=2">
+    </div>
+    <div>
+      <img src="http://placehold.it/350x300?text=3">
+    </div>
+    <div>
+      <img src="http://placehold.it/350x300?text=4">
+    </div>
+    <div>
+      <img src="http://placehold.it/350x300?text=5">
+    </div>
+    <div>
+      <img src="http://placehold.it/350x300?text=6">
+    </div>
+    <div>
+      <img src="http://placehold.it/350x300?text=7">
+    </div>
+    <div>
+      <img src="http://placehold.it/350x300?text=8">
+    </div>
+    <div>
+      <img src="http://placehold.it/350x300?text=9">
+    </div>
+  </section>
+
+  <section class="variable slider">
+    <div>
+      <img src="http://placehold.it/350x300?text=1">
+    </div>
+    <div>
+      <img src="http://placehold.it/200x300?text=2">
+    </div>
+    <div>
+      <img src="http://placehold.it/100x300?text=3">
+    </div>
+    <div>
+      <img src="http://placehold.it/200x300?text=4">
+    </div>
+    <div>
+      <img src="http://placehold.it/350x300?text=5">
+    </div>
+    <div>
+      <img src="http://placehold.it/300x300?text=6">
+    </div>
+  </section>
+
+  <script src="https://code.jquery.com/jquery-2.2.0.min.js" type="text/javascript"></script>
+  <script src="./slick/slick.js" type="text/javascript" charset="utf-8"></script>
+  <script type="text/javascript">
+    $(document).on('ready', function() {
+      $(".regular").slick({
+        dots: true,
+        infinite: true,
+        slidesToShow: 3,
+        slidesToScroll: 3
+      });
+      $(".center").slick({
+        dots: true,
+        infinite: true,
+        centerMode: true,
+        slidesToShow: 3,
+        slidesToScroll: 3
+      });
+      $(".variable").slick({
+        dots: true,
+        infinite: true,
+        variableWidth: true
+      });
+    });
+  </script>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/slick/package.json b/slick/package.json
new file mode 100644 (file)
index 0000000..8f675a4
--- /dev/null
@@ -0,0 +1,50 @@
+{
+  "name": "slick-carousel",
+  "version": "1.6.0",
+  "description": "the last carousel you'll ever need",
+  "main": "slick/slick.js",
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/kenwheeler/slick.git"
+  },
+  "keywords": [
+    "carousel",
+    "slick",
+    "responsive",
+    "js",
+    "slider"
+  ],
+  "author": "Ken Wheeler <ken_wheeler@me.com>",
+  "contributors": [
+    {
+      "name": "ken wheeler",
+      "email": "ken_wheeler@me.com",
+      "url": "http://kenwheeler.github.io/"
+    },
+    {
+      "name": "simon goellner",
+      "email": "simey.me@gmail.com",
+      "url": "http://simey.me"
+    },
+    {
+      "name": "ahmad el-alfy",
+      "email": "ahmadalfy@gmail.com",
+      "url": "http://www.alfy.me"
+    },
+    {
+      "name": "leggomuhgreggo",
+      "email": "gwestneat@gmail.com"
+    },
+    {
+      "name": "ashley mcknight",
+      "email": "ash@sharpteef.net"
+    }
+  ],
+  "license": "MIT",
+  "bugs": {
+    "url": "https://github.com/kenwheeler/slick/issues"
+  },
+  "dependencies": {
+    "jquery": ">=1.7.2"
+  }
+}
diff --git a/slick/slick.jquery.json b/slick/slick.jquery.json
new file mode 100644 (file)
index 0000000..7af760b
--- /dev/null
@@ -0,0 +1,34 @@
+{
+    "name": "slick",
+    "title": "slick",
+    "description": "A jQuery responsive touch carousel",
+    "keywords": [
+        "responsive",
+        "slider",
+        "carousel",
+        "touch",
+        "mobile"
+    ],
+    "version": "1.6.0",
+    "author": {
+        "name": "Ken Wheeler",
+        "url": "http://kenwheeler.github.io"
+    },
+    "maintainers": [{
+        "name": "Ken Wheeler",
+        "email": "dubmediagroup@gmail.com",
+        "url": "http://www.dubmediagroup.com"
+    }],
+    "licenses": [{
+        "type": "MIT",
+        "url": "https://github.com/kenwheeler/slick/blob/master/LICENSE"
+    }],
+    "demo": "http://kenwheeler.github.io/slick/",
+    "bugs": "https://github.com/kenwheeler/slick/issues",
+    "homepage": "https://github.com/kenwheeler/slick/",
+    "docs": "https://github.com/kenwheeler/slick/",
+    "download": "https://github.com/kenwheeler/slick/archive/master.zip",
+    "dependencies": {
+        "jquery": ">=1.7"
+    }
+}
diff --git a/slick/slick/ajax-loader.gif b/slick/slick/ajax-loader.gif
new file mode 100644 (file)
index 0000000..8dcbdd5
Binary files /dev/null and b/slick/slick/ajax-loader.gif differ
diff --git a/slick/slick/config.rb b/slick/slick/config.rb
new file mode 100644 (file)
index 0000000..81f5ae3
--- /dev/null
@@ -0,0 +1,10 @@
+css_dir = "."
+sass_dir = "."
+images_dir = "."
+fonts_dir = "fonts"
+relative_assets = true
+
+output_style = :compact
+line_comments = false
+
+preferred_syntax = :scss
\ No newline at end of file
diff --git a/slick/slick/fonts/slick.eot b/slick/slick/fonts/slick.eot
new file mode 100644 (file)
index 0000000..2cbab9c
Binary files /dev/null and b/slick/slick/fonts/slick.eot differ
diff --git a/slick/slick/fonts/slick.svg b/slick/slick/fonts/slick.svg
new file mode 100644 (file)
index 0000000..b36a66a
--- /dev/null
@@ -0,0 +1,14 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg xmlns="http://www.w3.org/2000/svg">
+<metadata>Generated by Fontastic.me</metadata>
+<defs>
+<font id="slick" horiz-adv-x="512">
+<font-face font-family="slick" units-per-em="512" ascent="480" descent="-32"/>
+<missing-glyph horiz-adv-x="512" />
+
+<glyph unicode="&#8594;" d="M241 113l130 130c4 4 6 8 6 13 0 5-2 9-6 13l-130 130c-3 3-7 5-12 5-5 0-10-2-13-5l-29-30c-4-3-6-7-6-12 0-5 2-10 6-13l87-88-87-88c-4-3-6-8-6-13 0-5 2-9 6-12l29-30c3-3 8-5 13-5 5 0 9 2 12 5z m234 143c0-40-9-77-29-110-20-34-46-60-80-80-33-20-70-29-110-29-40 0-77 9-110 29-34 20-60 46-80 80-20 33-29 70-29 110 0 40 9 77 29 110 20 34 46 60 80 80 33 20 70 29 110 29 40 0 77-9 110-29 34-20 60-46 80-80 20-33 29-70 29-110z"/>
+<glyph unicode="&#8592;" d="M296 113l29 30c4 3 6 7 6 12 0 5-2 10-6 13l-87 88 87 88c4 3 6 8 6 13 0 5-2 9-6 12l-29 30c-3 3-8 5-13 5-5 0-9-2-12-5l-130-130c-4-4-6-8-6-13 0-5 2-9 6-13l130-130c3-3 7-5 12-5 5 0 10 2 13 5z m179 143c0-40-9-77-29-110-20-34-46-60-80-80-33-20-70-29-110-29-40 0-77 9-110 29-34 20-60 46-80 80-20 33-29 70-29 110 0 40 9 77 29 110 20 34 46 60 80 80 33 20 70 29 110 29 40 0 77-9 110-29 34-20 60-46 80-80 20-33 29-70 29-110z"/>
+<glyph unicode="&#8226;" d="M475 256c0-40-9-77-29-110-20-34-46-60-80-80-33-20-70-29-110-29-40 0-77 9-110 29-34 20-60 46-80 80-20 33-29 70-29 110 0 40 9 77 29 110 20 34 46 60 80 80 33 20 70 29 110 29 40 0 77-9 110-29 34-20 60-46 80-80 20-33 29-70 29-110z"/>
+<glyph unicode="&#97;" d="M475 439l0-128c0-5-1-9-5-13-4-4-8-5-13-5l-128 0c-8 0-13 3-17 11-3 7-2 14 4 20l40 39c-28 26-62 39-100 39-20 0-39-4-57-11-18-8-33-18-46-32-14-13-24-28-32-46-7-18-11-37-11-57 0-20 4-39 11-57 8-18 18-33 32-46 13-14 28-24 46-32 18-7 37-11 57-11 23 0 44 5 64 15 20 9 38 23 51 42 2 1 4 3 7 3 3 0 5-1 7-3l39-39c2-2 3-3 3-6 0-2-1-4-2-6-21-25-46-45-76-59-29-14-60-20-93-20-30 0-58 5-85 17-27 12-51 27-70 47-20 19-35 43-47 70-12 27-17 55-17 85 0 30 5 58 17 85 12 27 27 51 47 70 19 20 43 35 70 47 27 12 55 17 85 17 28 0 55-5 81-15 26-11 50-26 70-45l37 37c6 6 12 7 20 4 8-4 11-9 11-17z"/>
+</font></defs></svg>
diff --git a/slick/slick/fonts/slick.ttf b/slick/slick/fonts/slick.ttf
new file mode 100644 (file)
index 0000000..9d03461
Binary files /dev/null and b/slick/slick/fonts/slick.ttf differ
diff --git a/slick/slick/fonts/slick.woff b/slick/slick/fonts/slick.woff
new file mode 100644 (file)
index 0000000..8ee9972
Binary files /dev/null and b/slick/slick/fonts/slick.woff differ
diff --git a/slick/slick/slick-theme.css b/slick/slick/slick-theme.css
new file mode 100644 (file)
index 0000000..b6cfefd
--- /dev/null
@@ -0,0 +1,206 @@
+@charset 'UTF-8';
+/* Slider */
+.slick-loading .slick-list
+{
+    background: #fff url('./ajax-loader.gif') center center no-repeat;
+}
+
+/* Icons */
+@font-face
+{
+    font-family: 'slick';
+    font-weight: normal;
+    font-style: normal;
+
+    src: url('./fonts/slick.eot');
+    src: url('./fonts/slick.eot?#iefix') format('embedded-opentype'), url('./fonts/slick.woff') format('woff'), url('./fonts/slick.ttf') format('truetype'), url('./fonts/slick.svg#slick') format('svg');
+}
+/* Arrows */
+.slick-prev,
+.slick-next
+{
+    border-radius: 10px;
+    font-size: 0;
+    line-height: 0;
+
+    position: absolute;
+    top: 50%;
+
+    display: block;
+
+    width: 18px;
+    height: 18px;
+    padding: 0;
+    -webkit-transform: translate(0, -50%);
+    -ms-transform: translate(0, -50%);
+    transform: translate(0, -50%);
+
+    cursor: pointer;
+
+    color: transparent;
+    border: none;
+    outline: none;
+    background: transparent;
+}
+.slick-prev:hover,
+.slick-prev:focus,
+.slick-next:hover,
+.slick-next:focus
+{
+    color: transparent;
+    outline: none;
+    background-color: transparent;
+}
+.slick-prev:hover:before,
+.slick-prev:focus:before,
+.slick-next:hover:before,
+.slick-next:focus:before
+{
+    opacity: 1;
+    background-color: transparent;
+}
+.slick-prev.slick-disabled:before,
+.slick-next.slick-disabled:before
+{
+    opacity: .25;
+}
+
+.slick-prev:before,
+.slick-next:before
+{
+    font-family: 'slick';
+    font-size: 26px;
+    line-height: 1;
+
+    opacity: .75;
+    color: #486b71;
+
+    -webkit-font-smoothing: antialiased;
+    -moz-osx-font-smoothing: grayscale;
+}
+
+.slick-prev
+{
+    left: -25px;
+}
+[dir='rtl'] .slick-prev
+{
+    right: -25px;
+    left: auto;
+}
+.slick-prev:before
+{
+    content: '←';
+}
+[dir='rtl'] .slick-prev:before
+{
+    content: '→';
+}
+
+.slick-next
+{
+    right: -25px;
+}
+[dir='rtl'] .slick-next
+{
+    right: auto;
+    left: -25px;
+}
+.slick-next:before
+{
+    content: '→';
+}
+[dir='rtl'] .slick-next:before
+{
+    content: '←';
+}
+
+/* Dots */
+.slick-dotted.slick-slider
+{
+    margin-bottom: 30px;
+}
+
+.slick-dots
+{
+    position: absolute;
+    bottom: -25px;
+
+    display: block;
+
+    width: 100%;
+    padding: 0;
+    margin: 0;
+
+    list-style: none;
+
+    text-align: center;
+}
+.slick-dots li
+{
+    position: relative;
+
+    display: inline-block;
+
+    width: 20px;
+    height: 20px;
+    margin: 0 5px;
+    padding: 0;
+
+    cursor: pointer;
+}
+.slick-dots li button
+{
+    font-size: 0;
+    line-height: 0;
+
+    display: block;
+
+    width: 20px;
+    height: 20px;
+    padding: 5px;
+
+    cursor: pointer;
+
+    color: transparent;
+    border: 0;
+    outline: none;
+    background: transparent;
+}
+.slick-dots li button:hover,
+.slick-dots li button:focus
+{
+    outline: none;
+}
+.slick-dots li button:hover:before,
+.slick-dots li button:focus:before
+{
+    opacity: 1;
+}
+.slick-dots li button:before
+{
+    font-family: 'slick';
+    font-size: 6px;
+    line-height: 20px;
+
+    position: absolute;
+    top: 0;
+    left: 0;
+
+    width: 20px;
+    height: 20px;
+
+    content: '•';
+    text-align: center;
+
+    opacity: .25;
+    color: black;
+
+    -webkit-font-smoothing: antialiased;
+    -moz-osx-font-smoothing: grayscale;
+}
+.slick-dots li.slick-active button:before
+{
+    opacity: .75;
+    color: black;
+}
diff --git a/slick/slick/slick-theme.less b/slick/slick/slick-theme.less
new file mode 100644 (file)
index 0000000..8f10758
--- /dev/null
@@ -0,0 +1,168 @@
+@charset "UTF-8";
+
+// Default Variables
+
+@slick-font-path: "./fonts/";
+@slick-font-family: "slick";
+@slick-loader-path: "./";
+@slick-arrow-color: white;
+@slick-dot-color: black;
+@slick-dot-color-active: @slick-dot-color;
+@slick-prev-character: "←";
+@slick-next-character: "→";
+@slick-dot-character: "•";
+@slick-dot-size: 6px;
+@slick-opacity-default: 0.75;
+@slick-opacity-on-hover: 1;
+@slick-opacity-not-active: 0.25;
+
+/* Slider */
+.slick-loading .slick-list{
+    background: #fff url('@{slick-loader-path}ajax-loader.gif') center center no-repeat;
+}
+
+/* Icons */
+@font-face{
+    font-family: 'slick';
+    font-weight: normal;
+    font-style: normal;
+
+    src: url('@{slick-font-path}slick.eot');
+    src: url('@{slick-font-path}slick.eot?#iefix') format('embedded-opentype'), url('@{slick-font-path}slick.woff') format('woff'), url('@{slick-font-path}slick.ttf') format('truetype'), url('@{slick-font-path}slick.svg#slick') format('svg');
+}
+
+/* Arrows */
+
+.slick-prev,
+.slick-next {
+    position: absolute;
+    display: block;
+    height: 20px;
+    width: 20px;
+    line-height: 0px;
+    font-size: 0px;
+    cursor: pointer;
+    background: transparent;
+    color: transparent;
+    top: 50%;
+    -webkit-transform: translate(0, -50%);
+    -ms-transform: translate(0, -50%);
+    transform: translate(0, -50%);
+    padding: 0;
+    border: none;
+    outline: none;
+    &:hover, &:focus {
+        outline: none;
+        background: transparent;
+        color: transparent;
+        &:before {
+            opacity: @slick-opacity-on-hover;
+        }
+    }
+    &.slick-disabled:before {
+        opacity: @slick-opacity-not-active;
+    }
+}
+
+.slick-prev:before, .slick-next:before {
+    font-family: @slick-font-family;
+    font-size: 20px;
+    line-height: 1;
+    color: @slick-arrow-color;
+    opacity: @slick-opacity-default;
+    -webkit-font-smoothing: antialiased;
+    -moz-osx-font-smoothing: grayscale;
+}
+
+.slick-prev {
+    left: -25px;
+    &[dir="rtl"] {
+        left: auto;
+        right: -25px;
+    }
+    &:before {
+        content: @slick-prev-character;
+        &[dir="rtl"] {
+            content: @slick-next-character;
+        }
+    }
+}
+
+.slick-next {
+    right: -25px;
+    &[dir="rtl"] {
+        left: -25px;
+        right: auto;
+    }
+    &:before {
+        content: @slick-next-character;
+        &[dir="rtl"] {
+            content: @slick-prev-character;
+        }
+    }
+}
+
+/* Dots */
+
+.slick-dotted .slick-slider {
+    margin-bottom: 30px;
+}
+
+.slick-dots {
+    position: absolute;
+    bottom: -25px;
+    list-style: none;
+    display: block;
+    text-align: center;
+    padding: 0;
+    margin: 0;
+    width: 100%;
+    li {
+        position: relative;
+        display: inline-block;
+        height: 20px;
+        width: 20px;
+        margin: 0 5px;
+        padding: 0;
+        cursor: pointer;
+        button {
+            border: 0;
+            background: transparent;
+            display: block;
+            height: 20px;
+            width: 20px;
+            outline: none;
+            line-height: 0px;
+            font-size: 0px;
+            color: transparent;
+            padding: 5px;
+            cursor: pointer;
+            &:hover, &:focus {
+                outline: none;
+                &:before {
+                    opacity: @slick-opacity-on-hover;
+                }
+            }
+            &:before {
+                position: absolute;
+                top: 0;
+                left: 0;
+                content: @slick-dot-character;
+                width: 20px;
+                height: 20px;
+                font-family: @slick-font-family;
+                font-size: @slick-dot-size;
+                line-height: 20px;
+                text-align: center;
+                color: @slick-dot-color;
+                opacity: @slick-opacity-not-active;
+                -webkit-font-smoothing: antialiased;
+                -moz-osx-font-smoothing: grayscale;
+            }
+        }
+        &.slick-active button:before {
+            color: @slick-dot-color-active;
+            opacity: @slick-opacity-default;
+        }
+    }
+}
diff --git a/slick/slick/slick-theme.scss b/slick/slick/slick-theme.scss
new file mode 100644 (file)
index 0000000..7fe63e1
--- /dev/null
@@ -0,0 +1,194 @@
+@charset "UTF-8";
+
+// Default Variables
+
+// Slick icon entity codes outputs the following
+// "\2190" outputs ascii character "←"
+// "\2192" outputs ascii character "→"
+// "\2022" outputs ascii character "•"
+
+$slick-font-path: "./fonts/" !default;
+$slick-font-family: "slick" !default;
+$slick-loader-path: "./" !default;
+$slick-arrow-color: white !default;
+$slick-dot-color: black !default;
+$slick-dot-color-active: $slick-dot-color !default;
+$slick-prev-character: "\2190" !default;
+$slick-next-character: "\2192" !default;
+$slick-dot-character: "\2022" !default;
+$slick-dot-size: 6px !default;
+$slick-opacity-default: 0.75 !default;
+$slick-opacity-on-hover: 1 !default;
+$slick-opacity-not-active: 0.25 !default;
+
+@function slick-image-url($url) {
+    @if function-exists(image-url) {
+        @return image-url($url);
+    }
+    @else {
+        @return url($slick-loader-path + $url);
+    }
+}
+
+@function slick-font-url($url) {
+    @if function-exists(font-url) {
+        @return font-url($url);
+    }
+    @else {
+        @return url($slick-font-path + $url);
+    }
+}
+
+/* Slider */
+
+.slick-list {
+    .slick-loading & {
+        background: #fff slick-image-url("ajax-loader.gif") center center no-repeat;
+    }
+}
+
+/* Icons */
+@if $slick-font-family == "slick" {
+    @font-face {
+        font-family: "slick";
+        src: slick-font-url("slick.eot");
+        src: slick-font-url("slick.eot?#iefix") format("embedded-opentype"), slick-font-url("slick.woff") format("woff"), slick-font-url("slick.ttf") format("truetype"), slick-font-url("slick.svg#slick") format("svg");
+        font-weight: normal;
+        font-style: normal;
+    }
+}
+
+/* Arrows */
+
+.slick-prev,
+.slick-next {
+    position: absolute;
+    display: block;
+    height: 20px;
+    width: 20px;
+    line-height: 0px;
+    font-size: 0px;
+    cursor: pointer;
+    background: transparent;
+    color: transparent;
+    top: 50%;
+    -webkit-transform: translate(0, -50%);
+    -ms-transform: translate(0, -50%);
+    transform: translate(0, -50%);
+    padding: 0;
+    border: none;
+    outline: none;
+    &:hover, &:focus {
+        outline: none;
+        background: transparent;
+        color: transparent;
+        &:before {
+            opacity: $slick-opacity-on-hover;
+        }
+    }
+    &.slick-disabled:before {
+        opacity: $slick-opacity-not-active;
+    }
+    &:before {
+        font-family: $slick-font-family;
+        font-size: 20px;
+        line-height: 1;
+        color: $slick-arrow-color;
+        opacity: $slick-opacity-default;
+        -webkit-font-smoothing: antialiased;
+        -moz-osx-font-smoothing: grayscale;
+    }
+}
+
+.slick-prev {
+    left: -25px;
+    [dir="rtl"] & {
+        left: auto;
+        right: -25px;
+    }
+    &:before {
+        content: $slick-prev-character;
+        [dir="rtl"] & {
+            content: $slick-next-character;
+        }
+    }
+}
+
+.slick-next {
+    right: -25px;
+    [dir="rtl"] & {
+        left: -25px;
+        right: auto;
+    }
+    &:before {
+        content: $slick-next-character;
+        [dir="rtl"] & {
+            content: $slick-prev-character;
+        }
+    }
+}
+
+/* Dots */
+
+.slick-dotted.slick-slider {
+    margin-bottom: 30px;
+}
+
+.slick-dots {
+    position: absolute;
+    bottom: -25px;
+    list-style: none;
+    display: block;
+    text-align: center;
+    padding: 0;
+    margin: 0;
+    width: 100%;
+    li {
+        position: relative;
+        display: inline-block;
+        height: 20px;
+        width: 20px;
+        margin: 0 5px;
+        padding: 0;
+        cursor: pointer;
+        button {
+            border: 0;
+            background: transparent;
+            display: block;
+            height: 20px;
+            width: 20px;
+            outline: none;
+            line-height: 0px;
+            font-size: 0px;
+            color: transparent;
+            padding: 5px;
+            cursor: pointer;
+            &:hover, &:focus {
+                outline: none;
+                &:before {
+                    opacity: $slick-opacity-on-hover;
+                }
+            }
+            &:before {
+                position: absolute;
+                top: 0;
+                left: 0;
+                content: $slick-dot-character;
+                width: 20px;
+                height: 20px;
+                font-family: $slick-font-family;
+                font-size: $slick-dot-size;
+                line-height: 20px;
+                text-align: center;
+                color: $slick-dot-color;
+                opacity: $slick-opacity-not-active;
+                -webkit-font-smoothing: antialiased;
+                -moz-osx-font-smoothing: grayscale;
+            }
+        }
+        &.slick-active button:before {
+            color: $slick-dot-color-active;
+            opacity: $slick-opacity-default;
+        }
+    }
+}
diff --git a/slick/slick/slick.css b/slick/slick/slick.css
new file mode 100644 (file)
index 0000000..dd973fe
--- /dev/null
@@ -0,0 +1,117 @@
+/* Slider */
+.slick-slider
+{
+    position: relative;
+
+    display: block;
+    box-sizing: border-box;
+
+    -webkit-user-select: none;
+       -moz-user-select: none;
+        -ms-user-select: none;
+            user-select: none;
+
+    -webkit-touch-callout: none;
+    -khtml-user-select: none;
+    -ms-touch-action: pan-y;
+        touch-action: pan-y;
+    -webkit-tap-highlight-color: transparent;
+}
+
+.slick-list
+{
+    position: relative;
+
+    display: block;
+    overflow: hidden;
+
+    margin: 0;
+    padding: 0;
+}
+.slick-list:focus
+{
+    outline: none;
+}
+.slick-list.dragging
+{
+    cursor: pointer;
+    cursor: hand;
+}
+
+.slick-slider .slick-track,
+.slick-slider .slick-list
+{
+    -webkit-transform: translate3d(0, 0, 0);
+       -moz-transform: translate3d(0, 0, 0);
+        -ms-transform: translate3d(0, 0, 0);
+         -o-transform: translate3d(0, 0, 0);
+            transform: translate3d(0, 0, 0);
+}
+
+.slick-track
+{
+    position: relative;
+    top: 0;
+    left: 0;
+
+    display: block;
+}
+.slick-track:before,
+.slick-track:after
+{
+    display: table;
+
+    content: '';
+}
+.slick-track:after
+{
+    clear: both;
+}
+.slick-loading .slick-track
+{
+    visibility: hidden;
+}
+
+.slick-slide
+{
+    display: none;
+    float: left;
+
+    height: 100%;
+    min-height: 1px;
+}
+[dir='rtl'] .slick-slide
+{
+    float: right;
+}
+.slick-slide img
+{
+    display: block;
+}
+.slick-slide.slick-loading img
+{
+    display: none;
+}
+.slick-slide.dragging img
+{
+    pointer-events: none;
+}
+.slick-initialized .slick-slide
+{
+    display: block;
+}
+.slick-loading .slick-slide
+{
+    visibility: hidden;
+}
+.slick-vertical .slick-slide
+{
+    display: block;
+
+    height: auto;
+
+    border: 1px solid transparent;
+}
+.slick-arrow.slick-hidden {
+    display: none;
+}
diff --git a/slick/slick/slick.js b/slick/slick/slick.js
new file mode 100644 (file)
index 0000000..5394604
--- /dev/null
@@ -0,0 +1,2892 @@
+/*
+     _ _      _       _
+ ___| (_) ___| | __  (_)___
+/ __| | |/ __| |/ /  | / __|
+\__ \ | | (__|   < _ | \__ \
+|___/_|_|\___|_|\_(_)/ |___/
+                   |__/
+
+ Version: 1.6.0
+  Author: Ken Wheeler
+ Website: http://kenwheeler.github.io
+    Docs: http://kenwheeler.github.io/slick
+    Repo: http://github.com/kenwheeler/slick
+  Issues: http://github.com/kenwheeler/slick/issues
+
+ */
+/* global window, document, define, jQuery, setInterval, clearInterval */
+(function(factory) {
+    'use strict';
+    if (typeof define === 'function' && define.amd) {
+        define(['jquery'], factory);
+    } else if (typeof exports !== 'undefined') {
+        module.exports = factory(require('jquery'));
+    } else {
+        factory(jQuery);
+    }
+
+}(function($) {
+    'use strict';
+    var Slick = window.Slick || {};
+
+    Slick = (function() {
+
+        var instanceUid = 0;
+
+        function Slick(element, settings) {
+
+            var _ = this, dataSettings;
+
+            _.defaults = {
+                accessibility: true,
+                adaptiveHeight: false,
+                appendArrows: $(element),
+                appendDots: $(element),
+                arrows: true,
+                asNavFor: null,
+                prevArrow: '<button type="button" data-role="none" class="slick-prev" aria-label="Previous" tabindex="0" role="button">Previous</button>',
+                nextArrow: '<button type="button" data-role="none" class="slick-next" aria-label="Next" tabindex="0" role="button">Next</button>',
+                autoplay: false,
+                autoplaySpeed: 3000,
+                centerMode: false,
+                centerPadding: '50px',
+                cssEase: 'ease',
+                customPaging: function(slider, i) {
+                    return $('<button type="button" data-role="none" role="button" tabindex="0" />').text(i + 1);
+                },
+                dots: false,
+                dotsClass: 'slick-dots',
+                draggable: true,
+                easing: 'linear',
+                edgeFriction: 0.35,
+                fade: false,
+                focusOnSelect: false,
+                infinite: true,
+                initialSlide: 0,
+                lazyLoad: 'ondemand',
+                mobileFirst: false,
+                pauseOnHover: true,
+                pauseOnFocus: true,
+                pauseOnDotsHover: false,
+                respondTo: 'window',
+                responsive: null,
+                rows: 1,
+                rtl: false,
+                slide: '',
+                slidesPerRow: 1,
+                slidesToShow: 1,
+                slidesToScroll: 1,
+                speed: 500,
+                swipe: true,
+                swipeToSlide: false,
+                touchMove: true,
+                touchThreshold: 5,
+                useCSS: true,
+                useTransform: true,
+                variableWidth: false,
+                vertical: false,
+                verticalSwiping: false,
+                waitForAnimate: true,
+                zIndex: 1000
+            };
+
+            _.initials = {
+                animating: false,
+                dragging: false,
+                autoPlayTimer: null,
+                currentDirection: 0,
+                currentLeft: null,
+                currentSlide: 0,
+                direction: 1,
+                $dots: null,
+                listWidth: null,
+                listHeight: null,
+                loadIndex: 0,
+                $nextArrow: null,
+                $prevArrow: null,
+                slideCount: null,
+                slideWidth: null,
+                $slideTrack: null,
+                $slides: null,
+                sliding: false,
+                slideOffset: 0,
+                swipeLeft: null,
+                $list: null,
+                touchObject: {},
+                transformsEnabled: false,
+                unslicked: false
+            };
+
+            $.extend(_, _.initials);
+
+            _.activeBreakpoint = null;
+            _.animType = null;
+            _.animProp = null;
+            _.breakpoints = [];
+            _.breakpointSettings = [];
+            _.cssTransitions = false;
+            _.focussed = false;
+            _.interrupted = false;
+            _.hidden = 'hidden';
+            _.paused = true;
+            _.positionProp = null;
+            _.respondTo = null;
+            _.rowCount = 1;
+            _.shouldClick = true;
+            _.$slider = $(element);
+            _.$slidesCache = null;
+            _.transformType = null;
+            _.transitionType = null;
+            _.visibilityChange = 'visibilitychange';
+            _.windowWidth = 0;
+            _.windowTimer = null;
+
+            dataSettings = $(element).data('slick') || {};
+
+            _.options = $.extend({}, _.defaults, settings, dataSettings);
+
+            _.currentSlide = _.options.initialSlide;
+
+            _.originalSettings = _.options;
+
+            if (typeof document.mozHidden !== 'undefined') {
+                _.hidden = 'mozHidden';
+                _.visibilityChange = 'mozvisibilitychange';
+            } else if (typeof document.webkitHidden !== 'undefined') {
+                _.hidden = 'webkitHidden';
+                _.visibilityChange = 'webkitvisibilitychange';
+            }
+
+            _.autoPlay = $.proxy(_.autoPlay, _);
+            _.autoPlayClear = $.proxy(_.autoPlayClear, _);
+            _.autoPlayIterator = $.proxy(_.autoPlayIterator, _);
+            _.changeSlide = $.proxy(_.changeSlide, _);
+            _.clickHandler = $.proxy(_.clickHandler, _);
+            _.selectHandler = $.proxy(_.selectHandler, _);
+            _.setPosition = $.proxy(_.setPosition, _);
+            _.swipeHandler = $.proxy(_.swipeHandler, _);
+            _.dragHandler = $.proxy(_.dragHandler, _);
+            _.keyHandler = $.proxy(_.keyHandler, _);
+
+            _.instanceUid = instanceUid++;
+
+            // A simple way to check for HTML strings
+            // Strict HTML recognition (must start with <)
+            // Extracted from jQuery v1.11 source
+            _.htmlExpr = /^(?:\s*(<[\w\W]+>)[^>]*)$/;
+
+
+            _.registerBreakpoints();
+            _.init(true);
+
+        }
+
+        return Slick;
+
+    }());
+
+    Slick.prototype.activateADA = function() {
+        var _ = this;
+
+        _.$slideTrack.find('.slick-active').attr({
+            'aria-hidden': 'false'
+        }).find('a, input, button, select').attr({
+            'tabindex': '0'
+        });
+
+    };
+
+    Slick.prototype.addSlide = Slick.prototype.slickAdd = function(markup, index, addBefore) {
+
+        var _ = this;
+
+        if (typeof(index) === 'boolean') {
+            addBefore = index;
+            index = null;
+        } else if (index < 0 || (index >= _.slideCount)) {
+            return false;
+        }
+
+        _.unload();
+
+        if (typeof(index) === 'number') {
+            if (index === 0 && _.$slides.length === 0) {
+                $(markup).appendTo(_.$slideTrack);
+            } else if (addBefore) {
+                $(markup).insertBefore(_.$slides.eq(index));
+            } else {
+                $(markup).insertAfter(_.$slides.eq(index));
+            }
+        } else {
+            if (addBefore === true) {
+                $(markup).prependTo(_.$slideTrack);
+            } else {
+                $(markup).appendTo(_.$slideTrack);
+            }
+        }
+
+        _.$slides = _.$slideTrack.children(this.options.slide);
+
+        _.$slideTrack.children(this.options.slide).detach();
+
+        _.$slideTrack.append(_.$slides);
+
+        _.$slides.each(function(index, element) {
+            $(element).attr('data-slick-index', index);
+        });
+
+        _.$slidesCache = _.$slides;
+
+        _.reinit();
+
+    };
+
+    Slick.prototype.animateHeight = function() {
+        var _ = this;
+        if (_.options.slidesToShow === 1 && _.options.adaptiveHeight === true && _.options.vertical === false) {
+            var targetHeight = _.$slides.eq(_.currentSlide).outerHeight(true);
+            _.$list.animate({
+                height: targetHeight
+            }, _.options.speed);
+        }
+    };
+
+    Slick.prototype.animateSlide = function(targetLeft, callback) {
+
+        var animProps = {},
+            _ = this;
+
+        _.animateHeight();
+
+        if (_.options.rtl === true && _.options.vertical === false) {
+            targetLeft = -targetLeft;
+        }
+        if (_.transformsEnabled === false) {
+            if (_.options.vertical === false) {
+                _.$slideTrack.animate({
+                    left: targetLeft
+                }, _.options.speed, _.options.easing, callback);
+            } else {
+                _.$slideTrack.animate({
+                    top: targetLeft
+                }, _.options.speed, _.options.easing, callback);
+            }
+
+        } else {
+
+            if (_.cssTransitions === false) {
+                if (_.options.rtl === true) {
+                    _.currentLeft = -(_.currentLeft);
+                }
+                $({
+                    animStart: _.currentLeft
+                }).animate({
+                    animStart: targetLeft
+                }, {
+                    duration: _.options.speed,
+                    easing: _.options.easing,
+                    step: function(now) {
+                        now = Math.ceil(now);
+                        if (_.options.vertical === false) {
+                            animProps[_.animType] = 'translate(' +
+                                now + 'px, 0px)';
+                            _.$slideTrack.css(animProps);
+                        } else {
+                            animProps[_.animType] = 'translate(0px,' +
+                                now + 'px)';
+                            _.$slideTrack.css(animProps);
+                        }
+                    },
+                    complete: function() {
+                        if (callback) {
+                            callback.call();
+                        }
+                    }
+                });
+
+            } else {
+
+                _.applyTransition();
+                targetLeft = Math.ceil(targetLeft);
+
+                if (_.options.vertical === false) {
+                    animProps[_.animType] = 'translate3d(' + targetLeft + 'px, 0px, 0px)';
+                } else {
+                    animProps[_.animType] = 'translate3d(0px,' + targetLeft + 'px, 0px)';
+                }
+                _.$slideTrack.css(animProps);
+
+                if (callback) {
+                    setTimeout(function() {
+
+                        _.disableTransition();
+
+                        callback.call();
+                    }, _.options.speed);
+                }
+
+            }
+
+        }
+
+    };
+
+    Slick.prototype.getNavTarget = function() {
+
+        var _ = this,
+            asNavFor = _.options.asNavFor;
+
+        if ( asNavFor && asNavFor !== null ) {
+            asNavFor = $(asNavFor).not(_.$slider);
+        }
+
+        return asNavFor;
+
+    };
+
+    Slick.prototype.asNavFor = function(index) {
+
+        var _ = this,
+            asNavFor = _.getNavTarget();
+
+        if ( asNavFor !== null && typeof asNavFor === 'object' ) {
+            asNavFor.each(function() {
+                var target = $(this).slick('getSlick');
+                if(!target.unslicked) {
+                    target.slideHandler(index, true);
+                }
+            });
+        }
+
+    };
+
+    Slick.prototype.applyTransition = function(slide) {
+
+        var _ = this,
+            transition = {};
+
+        if (_.options.fade === false) {
+            transition[_.transitionType] = _.transformType + ' ' + _.options.speed + 'ms ' + _.options.cssEase;
+        } else {
+            transition[_.transitionType] = 'opacity ' + _.options.speed + 'ms ' + _.options.cssEase;
+        }
+
+        if (_.options.fade === false) {
+            _.$slideTrack.css(transition);
+        } else {
+            _.$slides.eq(slide).css(transition);
+        }
+
+    };
+
+    Slick.prototype.autoPlay = function() {
+
+        var _ = this;
+
+        _.autoPlayClear();
+
+        if ( _.slideCount > _.options.slidesToShow ) {
+            _.autoPlayTimer = setInterval( _.autoPlayIterator, _.options.autoplaySpeed );
+        }
+
+    };
+
+    Slick.prototype.autoPlayClear = function() {
+
+        var _ = this;
+
+        if (_.autoPlayTimer) {
+            clearInterval(_.autoPlayTimer);
+        }
+
+    };
+
+    Slick.prototype.autoPlayIterator = function() {
+
+        var _ = this,
+            slideTo = _.currentSlide + _.options.slidesToScroll;
+
+        if ( !_.paused && !_.interrupted && !_.focussed ) {
+
+            if ( _.options.infinite === false ) {
+
+                if ( _.direction === 1 && ( _.currentSlide + 1 ) === ( _.slideCount - 1 )) {
+                    _.direction = 0;
+                }
+
+                else if ( _.direction === 0 ) {
+
+                    slideTo = _.currentSlide - _.options.slidesToScroll;
+
+                    if ( _.currentSlide - 1 === 0 ) {
+                        _.direction = 1;
+                    }
+
+                }
+
+            }
+
+            _.slideHandler( slideTo );
+
+        }
+
+    };
+
+    Slick.prototype.buildArrows = function() {
+
+        var _ = this;
+
+        if (_.options.arrows === true ) {
+
+            _.$prevArrow = $(_.options.prevArrow).addClass('slick-arrow');
+            _.$nextArrow = $(_.options.nextArrow).addClass('slick-arrow');
+
+            if( _.slideCount > _.options.slidesToShow ) {
+
+                _.$prevArrow.removeClass('slick-hidden').removeAttr('aria-hidden tabindex');
+                _.$nextArrow.removeClass('slick-hidden').removeAttr('aria-hidden tabindex');
+
+                if (_.htmlExpr.test(_.options.prevArrow)) {
+                    _.$prevArrow.prependTo(_.options.appendArrows);
+                }
+
+                if (_.htmlExpr.test(_.options.nextArrow)) {
+                    _.$nextArrow.appendTo(_.options.appendArrows);
+                }
+
+                if (_.options.infinite !== true) {
+                    _.$prevArrow
+                        .addClass('slick-disabled')
+                        .attr('aria-disabled', 'true');
+                }
+
+            } else {
+
+                _.$prevArrow.add( _.$nextArrow )
+
+                    .addClass('slick-hidden')
+                    .attr({
+                        'aria-disabled': 'true',
+                        'tabindex': '-1'
+                    });
+
+            }
+
+        }
+
+    };
+
+    Slick.prototype.buildDots = function() {
+
+        var _ = this,
+            i, dot;
+
+        if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {
+
+            _.$slider.addClass('slick-dotted');
+
+            dot = $('<ul />').addClass(_.options.dotsClass);
+
+            for (i = 0; i <= _.getDotCount(); i += 1) {
+                dot.append($('<li />').append(_.options.customPaging.call(this, _, i)));
+            }
+
+            _.$dots = dot.appendTo(_.options.appendDots);
+
+            _.$dots.find('li').first().addClass('slick-active').attr('aria-hidden', 'false');
+
+        }
+
+    };
+
+    Slick.prototype.buildOut = function() {
+
+        var _ = this;
+
+        _.$slides =
+            _.$slider
+                .children( _.options.slide + ':not(.slick-cloned)')
+                .addClass('slick-slide');
+
+        _.slideCount = _.$slides.length;
+
+        _.$slides.each(function(index, element) {
+            $(element)
+                .attr('data-slick-index', index)
+                .data('originalStyling', $(element).attr('style') || '');
+        });
+
+        _.$slider.addClass('slick-slider');
+
+        _.$slideTrack = (_.slideCount === 0) ?
+            $('<div class="slick-track"/>').appendTo(_.$slider) :
+            _.$slides.wrapAll('<div class="slick-track"/>').parent();
+
+        _.$list = _.$slideTrack.wrap(
+            '<div aria-live="polite" class="slick-list"/>').parent();
+        _.$slideTrack.css('opacity', 0);
+
+        if (_.options.centerMode === true || _.options.swipeToSlide === true) {
+            _.options.slidesToScroll = 1;
+        }
+
+        $('img[data-lazy]', _.$slider).not('[src]').addClass('slick-loading');
+
+        _.setupInfinite();
+
+        _.buildArrows();
+
+        _.buildDots();
+
+        _.updateDots();
+
+
+        _.setSlideClasses(typeof _.currentSlide === 'number' ? _.currentSlide : 0);
+
+        if (_.options.draggable === true) {
+            _.$list.addClass('draggable');
+        }
+
+    };
+
+    Slick.prototype.buildRows = function() {
+
+        var _ = this, a, b, c, newSlides, numOfSlides, originalSlides,slidesPerSection;
+
+        newSlides = document.createDocumentFragment();
+        originalSlides = _.$slider.children();
+
+        if(_.options.rows > 1) {
+
+            slidesPerSection = _.options.slidesPerRow * _.options.rows;
+            numOfSlides = Math.ceil(
+                originalSlides.length / slidesPerSection
+            );
+
+            for(a = 0; a < numOfSlides; a++){
+                var slide = document.createElement('div');
+                for(b = 0; b < _.options.rows; b++) {
+                    var row = document.createElement('div');
+                    for(c = 0; c < _.options.slidesPerRow; c++) {
+                        var target = (a * slidesPerSection + ((b * _.options.slidesPerRow) + c));
+                        if (originalSlides.get(target)) {
+                            row.appendChild(originalSlides.get(target));
+                        }
+                    }
+                    slide.appendChild(row);
+                }
+                newSlides.appendChild(slide);
+            }
+
+            _.$slider.empty().append(newSlides);
+            _.$slider.children().children().children()
+                .css({
+                    'width':(100 / _.options.slidesPerRow) + '%',
+                    'display': 'inline-block'
+                });
+
+        }
+
+    };
+
+    Slick.prototype.checkResponsive = function(initial, forceUpdate) {
+
+        var _ = this,
+            breakpoint, targetBreakpoint, respondToWidth, triggerBreakpoint = false;
+        var sliderWidth = _.$slider.width();
+        var windowWidth = window.innerWidth || $(window).width();
+
+        if (_.respondTo === 'window') {
+            respondToWidth = windowWidth;
+        } else if (_.respondTo === 'slider') {
+            respondToWidth = sliderWidth;
+        } else if (_.respondTo === 'min') {
+            respondToWidth = Math.min(windowWidth, sliderWidth);
+        }
+
+        if ( _.options.responsive &&
+            _.options.responsive.length &&
+            _.options.responsive !== null) {
+
+            targetBreakpoint = null;
+
+            for (breakpoint in _.breakpoints) {
+                if (_.breakpoints.hasOwnProperty(breakpoint)) {
+                    if (_.originalSettings.mobileFirst === false) {
+                        if (respondToWidth < _.breakpoints[breakpoint]) {
+                            targetBreakpoint = _.breakpoints[breakpoint];
+                        }
+                    } else {
+                        if (respondToWidth > _.breakpoints[breakpoint]) {
+                            targetBreakpoint = _.breakpoints[breakpoint];
+                        }
+                    }
+                }
+            }
+
+            if (targetBreakpoint !== null) {
+                if (_.activeBreakpoint !== null) {
+                    if (targetBreakpoint !== _.activeBreakpoint || forceUpdate) {
+                        _.activeBreakpoint =
+                            targetBreakpoint;
+                        if (_.breakpointSettings[targetBreakpoint] === 'unslick') {
+                            _.unslick(targetBreakpoint);
+                        } else {
+                            _.options = $.extend({}, _.originalSettings,
+                                _.breakpointSettings[
+                                    targetBreakpoint]);
+                            if (initial === true) {
+                                _.currentSlide = _.options.initialSlide;
+                            }
+                            _.refresh(initial);
+                        }
+                        triggerBreakpoint = targetBreakpoint;
+                    }
+                } else {
+                    _.activeBreakpoint = targetBreakpoint;
+                    if (_.breakpointSettings[targetBreakpoint] === 'unslick') {
+                        _.unslick(targetBreakpoint);
+                    } else {
+                        _.options = $.extend({}, _.originalSettings,
+                            _.breakpointSettings[
+                                targetBreakpoint]);
+                        if (initial === true) {
+                            _.currentSlide = _.options.initialSlide;
+                        }
+                        _.refresh(initial);
+                    }
+                    triggerBreakpoint = targetBreakpoint;
+                }
+            } else {
+                if (_.activeBreakpoint !== null) {
+                    _.activeBreakpoint = null;
+                    _.options = _.originalSettings;
+                    if (initial === true) {
+                        _.currentSlide = _.options.initialSlide;
+                    }
+                    _.refresh(initial);
+                    triggerBreakpoint = targetBreakpoint;
+                }
+            }
+
+            // only trigger breakpoints during an actual break. not on initialize.
+            if( !initial && triggerBreakpoint !== false ) {
+                _.$slider.trigger('breakpoint', [_, triggerBreakpoint]);
+            }
+        }
+
+    };
+
+    Slick.prototype.changeSlide = function(event, dontAnimate) {
+
+        var _ = this,
+            $target = $(event.currentTarget),
+            indexOffset, slideOffset, unevenOffset;
+
+        // If target is a link, prevent default action.
+        if($target.is('a')) {
+            event.preventDefault();
+        }
+
+        // If target is not the <li> element (ie: a child), find the <li>.
+        if(!$target.is('li')) {
+            $target = $target.closest('li');
+        }
+
+        unevenOffset = (_.slideCount % _.options.slidesToScroll !== 0);
+        indexOffset = unevenOffset ? 0 : (_.slideCount - _.currentSlide) % _.options.slidesToScroll;
+
+        switch (event.data.message) {
+
+            case 'previous':
+                slideOffset = indexOffset === 0 ? _.options.slidesToScroll : _.options.slidesToShow - indexOffset;
+                if (_.slideCount > _.options.slidesToShow) {
+                    _.slideHandler(_.currentSlide - slideOffset, false, dontAnimate);
+                }
+                break;
+
+            case 'next':
+                slideOffset = indexOffset === 0 ? _.options.slidesToScroll : indexOffset;
+                if (_.slideCount > _.options.slidesToShow) {
+                    _.slideHandler(_.currentSlide + slideOffset, false, dontAnimate);
+                }
+                break;
+
+            case 'index':
+                var index = event.data.index === 0 ? 0 :
+                    event.data.index || $target.index() * _.options.slidesToScroll;
+
+                _.slideHandler(_.checkNavigable(index), false, dontAnimate);
+                $target.children().trigger('focus');
+                break;
+
+            default:
+                return;
+        }
+
+    };
+
+    Slick.prototype.checkNavigable = function(index) {
+
+        var _ = this,
+            navigables, prevNavigable;
+
+        navigables = _.getNavigableIndexes();
+        prevNavigable = 0;
+        if (index > navigables[navigables.length - 1]) {
+            index = navigables[navigables.length - 1];
+        } else {
+            for (var n in navigables) {
+                if (index < navigables[n]) {
+                    index = prevNavigable;
+                    break;
+                }
+                prevNavigable = navigables[n];
+            }
+        }
+
+        return index;
+    };
+
+    Slick.prototype.cleanUpEvents = function() {
+
+        var _ = this;
+
+        if (_.options.dots && _.$dots !== null) {
+
+            $('li', _.$dots)
+                .off('click.slick', _.changeSlide)
+                .off('mouseenter.slick', $.proxy(_.interrupt, _, true))
+                .off('mouseleave.slick', $.proxy(_.interrupt, _, false));
+
+        }
+
+        _.$slider.off('focus.slick blur.slick');
+
+        if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {
+            _.$prevArrow && _.$prevArrow.off('click.slick', _.changeSlide);
+            _.$nextArrow && _.$nextArrow.off('click.slick', _.changeSlide);
+        }
+
+        _.$list.off('touchstart.slick mousedown.slick', _.swipeHandler);
+        _.$list.off('touchmove.slick mousemove.slick', _.swipeHandler);
+        _.$list.off('touchend.slick mouseup.slick', _.swipeHandler);
+        _.$list.off('touchcancel.slick mouseleave.slick', _.swipeHandler);
+
+        _.$list.off('click.slick', _.clickHandler);
+
+        $(document).off(_.visibilityChange, _.visibility);
+
+        _.cleanUpSlideEvents();
+
+        if (_.options.accessibility === true) {
+            _.$list.off('keydown.slick', _.keyHandler);
+        }
+
+        if (_.options.focusOnSelect === true) {
+            $(_.$slideTrack).children().off('click.slick', _.selectHandler);
+        }
+
+        $(window).off('orientationchange.slick.slick-' + _.instanceUid, _.orientationChange);
+
+        $(window).off('resize.slick.slick-' + _.instanceUid, _.resize);
+
+        $('[draggable!=true]', _.$slideTrack).off('dragstart', _.preventDefault);
+
+        $(window).off('load.slick.slick-' + _.instanceUid, _.setPosition);
+        $(document).off('ready.slick.slick-' + _.instanceUid, _.setPosition);
+
+    };
+
+    Slick.prototype.cleanUpSlideEvents = function() {
+
+        var _ = this;
+
+        _.$list.off('mouseenter.slick', $.proxy(_.interrupt, _, true));
+        _.$list.off('mouseleave.slick', $.proxy(_.interrupt, _, false));
+
+    };
+
+    Slick.prototype.cleanUpRows = function() {
+
+        var _ = this, originalSlides;
+
+        if(_.options.rows > 1) {
+            originalSlides = _.$slides.children().children();
+            originalSlides.removeAttr('style');
+            _.$slider.empty().append(originalSlides);
+        }
+
+    };
+
+    Slick.prototype.clickHandler = function(event) {
+
+        var _ = this;
+
+        if (_.shouldClick === false) {
+            event.stopImmediatePropagation();
+            event.stopPropagation();
+            event.preventDefault();
+        }
+
+    };
+
+    Slick.prototype.destroy = function(refresh) {
+
+        var _ = this;
+
+        _.autoPlayClear();
+
+        _.touchObject = {};
+
+        _.cleanUpEvents();
+
+        $('.slick-cloned', _.$slider).detach();
+
+        if (_.$dots) {
+            _.$dots.remove();
+        }
+
+
+        if ( _.$prevArrow && _.$prevArrow.length ) {
+
+            _.$prevArrow
+                .removeClass('slick-disabled slick-arrow slick-hidden')
+                .removeAttr('aria-hidden aria-disabled tabindex')
+                .css('display','');
+
+            if ( _.htmlExpr.test( _.options.prevArrow )) {
+                _.$prevArrow.remove();
+            }
+        }
+
+        if ( _.$nextArrow && _.$nextArrow.length ) {
+
+            _.$nextArrow
+                .removeClass('slick-disabled slick-arrow slick-hidden')
+                .removeAttr('aria-hidden aria-disabled tabindex')
+                .css('display','');
+
+            if ( _.htmlExpr.test( _.options.nextArrow )) {
+                _.$nextArrow.remove();
+            }
+
+        }
+
+
+        if (_.$slides) {
+
+            _.$slides
+                .removeClass('slick-slide slick-active slick-center slick-visible slick-current')
+                .removeAttr('aria-hidden')
+                .removeAttr('data-slick-index')
+                .each(function(){
+                    $(this).attr('style', $(this).data('originalStyling'));
+                });
+
+            _.$slideTrack.children(this.options.slide).detach();
+
+            _.$slideTrack.detach();
+
+            _.$list.detach();
+
+            _.$slider.append(_.$slides);
+        }
+
+        _.cleanUpRows();
+
+        _.$slider.removeClass('slick-slider');
+        _.$slider.removeClass('slick-initialized');
+        _.$slider.removeClass('slick-dotted');
+
+        _.unslicked = true;
+
+        if(!refresh) {
+            _.$slider.trigger('destroy', [_]);
+        }
+
+    };
+
+    Slick.prototype.disableTransition = function(slide) {
+
+        var _ = this,
+            transition = {};
+
+        transition[_.transitionType] = '';
+
+        if (_.options.fade === false) {
+            _.$slideTrack.css(transition);
+        } else {
+            _.$slides.eq(slide).css(transition);
+        }
+
+    };
+
+    Slick.prototype.fadeSlide = function(slideIndex, callback) {
+
+        var _ = this;
+
+        if (_.cssTransitions === false) {
+
+            _.$slides.eq(slideIndex).css({
+                zIndex: _.options.zIndex
+            });
+
+            _.$slides.eq(slideIndex).animate({
+                opacity: 1
+            }, _.options.speed, _.options.easing, callback);
+
+        } else {
+
+            _.applyTransition(slideIndex);
+
+            _.$slides.eq(slideIndex).css({
+                opacity: 1,
+                zIndex: _.options.zIndex
+            });
+
+            if (callback) {
+                setTimeout(function() {
+
+                    _.disableTransition(slideIndex);
+
+                    callback.call();
+                }, _.options.speed);
+            }
+
+        }
+
+    };
+
+    Slick.prototype.fadeSlideOut = function(slideIndex) {
+
+        var _ = this;
+
+        if (_.cssTransitions === false) {
+
+            _.$slides.eq(slideIndex).animate({
+                opacity: 0,
+                zIndex: _.options.zIndex - 2
+            }, _.options.speed, _.options.easing);
+
+        } else {
+
+            _.applyTransition(slideIndex);
+
+            _.$slides.eq(slideIndex).css({
+                opacity: 0,
+                zIndex: _.options.zIndex - 2
+            });
+
+        }
+
+    };
+
+    Slick.prototype.filterSlides = Slick.prototype.slickFilter = function(filter) {
+
+        var _ = this;
+
+        if (filter !== null) {
+
+            _.$slidesCache = _.$slides;
+
+            _.unload();
+
+            _.$slideTrack.children(this.options.slide).detach();
+
+            _.$slidesCache.filter(filter).appendTo(_.$slideTrack);
+
+            _.reinit();
+
+        }
+
+    };
+
+    Slick.prototype.focusHandler = function() {
+
+        var _ = this;
+
+        _.$slider
+            .off('focus.slick blur.slick')
+            .on('focus.slick blur.slick',
+                '*:not(.slick-arrow)', function(event) {
+
+            event.stopImmediatePropagation();
+            var $sf = $(this);
+
+            setTimeout(function() {
+
+                if( _.options.pauseOnFocus ) {
+                    _.focussed = $sf.is(':focus');
+                    _.autoPlay();
+                }
+
+            }, 0);
+
+        });
+    };
+
+    Slick.prototype.getCurrent = Slick.prototype.slickCurrentSlide = function() {
+
+        var _ = this;
+        return _.currentSlide;
+
+    };
+
+    Slick.prototype.getDotCount = function() {
+
+        var _ = this;
+
+        var breakPoint = 0;
+        var counter = 0;
+        var pagerQty = 0;
+
+        if (_.options.infinite === true) {
+            while (breakPoint < _.slideCount) {
+                ++pagerQty;
+                breakPoint = counter + _.options.slidesToScroll;
+                counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow;
+            }
+        } else if (_.options.centerMode === true) {
+            pagerQty = _.slideCount;
+        } else if(!_.options.asNavFor) {
+            pagerQty = 1 + Math.ceil((_.slideCount - _.options.slidesToShow) / _.options.slidesToScroll);
+        }else {
+            while (breakPoint < _.slideCount) {
+                ++pagerQty;
+                breakPoint = counter + _.options.slidesToScroll;
+                counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow;
+            }
+        }
+
+        return pagerQty - 1;
+
+    };
+
+    Slick.prototype.getLeft = function(slideIndex) {
+
+        var _ = this,
+            targetLeft,
+            verticalHeight,
+            verticalOffset = 0,
+            targetSlide;
+
+        _.slideOffset = 0;
+        verticalHeight = _.$slides.first().outerHeight(true);
+
+        if (_.options.infinite === true) {
+            if (_.slideCount > _.options.slidesToShow) {
+                _.slideOffset = (_.slideWidth * _.options.slidesToShow) * -1;
+                verticalOffset = (verticalHeight * _.options.slidesToShow) * -1;
+            }
+            if (_.slideCount % _.options.slidesToScroll !== 0) {
+                if (slideIndex + _.options.slidesToScroll > _.slideCount && _.slideCount > _.options.slidesToShow) {
+                    if (slideIndex > _.slideCount) {
+                        _.slideOffset = ((_.options.slidesToShow - (slideIndex - _.slideCount)) * _.slideWidth) * -1;
+                        verticalOffset = ((_.options.slidesToShow - (slideIndex - _.slideCount)) * verticalHeight) * -1;
+                    } else {
+                        _.slideOffset = ((_.slideCount % _.options.slidesToScroll) * _.slideWidth) * -1;
+                        verticalOffset = ((_.slideCount % _.options.slidesToScroll) * verticalHeight) * -1;
+                    }
+                }
+            }
+        } else {
+            if (slideIndex + _.options.slidesToShow > _.slideCount) {
+                _.slideOffset = ((slideIndex + _.options.slidesToShow) - _.slideCount) * _.slideWidth;
+                verticalOffset = ((slideIndex + _.options.slidesToShow) - _.slideCount) * verticalHeight;
+            }
+        }
+
+        if (_.slideCount <= _.options.slidesToShow) {
+            _.slideOffset = 0;
+            verticalOffset = 0;
+        }
+
+        if (_.options.centerMode === true && _.options.infinite === true) {
+            _.slideOffset += _.slideWidth * Math.floor(_.options.slidesToShow / 2) - _.slideWidth;
+        } else if (_.options.centerMode === true) {
+            _.slideOffset = 0;
+            _.slideOffset += _.slideWidth * Math.floor(_.options.slidesToShow / 2);
+        }
+
+        if (_.options.vertical === false) {
+            targetLeft = ((slideIndex * _.slideWidth) * -1) + _.slideOffset;
+        } else {
+            targetLeft = ((slideIndex * verticalHeight) * -1) + verticalOffset;
+        }
+
+        if (_.options.variableWidth === true) {
+
+            if (_.slideCount <= _.options.slidesToShow || _.options.infinite === false) {
+                targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex);
+            } else {
+                targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex + _.options.slidesToShow);
+            }
+
+            if (_.options.rtl === true) {
+                if (targetSlide[0]) {
+                    targetLeft = (_.$slideTrack.width() - targetSlide[0].offsetLeft - targetSlide.width()) * -1;
+                } else {
+                    targetLeft =  0;
+                }
+            } else {
+                targetLeft = targetSlide[0] ? targetSlide[0].offsetLeft * -1 : 0;
+            }
+
+            if (_.options.centerMode === true) {
+                if (_.slideCount <= _.options.slidesToShow || _.options.infinite === false) {
+                    targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex);
+                } else {
+                    targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex + _.options.slidesToShow + 1);
+                }
+
+                if (_.options.rtl === true) {
+                    if (targetSlide[0]) {
+                        targetLeft = (_.$slideTrack.width() - targetSlide[0].offsetLeft - targetSlide.width()) * -1;
+                    } else {
+                        targetLeft =  0;
+                    }
+                } else {
+                    targetLeft = targetSlide[0] ? targetSlide[0].offsetLeft * -1 : 0;
+                }
+
+                targetLeft += (_.$list.width() - targetSlide.outerWidth()) / 2;
+            }
+        }
+
+        return targetLeft;
+
+    };
+
+    Slick.prototype.getOption = Slick.prototype.slickGetOption = function(option) {
+
+        var _ = this;
+
+        return _.options[option];
+
+    };
+
+    Slick.prototype.getNavigableIndexes = function() {
+
+        var _ = this,
+            breakPoint = 0,
+            counter = 0,
+            indexes = [],
+            max;
+
+        if (_.options.infinite === false) {
+            max = _.slideCount;
+        } else {
+            breakPoint = _.options.slidesToScroll * -1;
+            counter = _.options.slidesToScroll * -1;
+            max = _.slideCount * 2;
+        }
+
+        while (breakPoint < max) {
+            indexes.push(breakPoint);
+            breakPoint = counter + _.options.slidesToScroll;
+            counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow;
+        }
+
+        return indexes;
+
+    };
+
+    Slick.prototype.getSlick = function() {
+
+        return this;
+
+    };
+
+    Slick.prototype.getSlideCount = function() {
+
+        var _ = this,
+            slidesTraversed, swipedSlide, centerOffset;
+
+        centerOffset = _.options.centerMode === true ? _.slideWidth * Math.floor(_.options.slidesToShow / 2) : 0;
+
+        if (_.options.swipeToSlide === true) {
+            _.$slideTrack.find('.slick-slide').each(function(index, slide) {
+                if (slide.offsetLeft - centerOffset + ($(slide).outerWidth() / 2) > (_.swipeLeft * -1)) {
+                    swipedSlide = slide;
+                    return false;
+                }
+            });
+
+            slidesTraversed = Math.abs($(swipedSlide).attr('data-slick-index') - _.currentSlide) || 1;
+
+            return slidesTraversed;
+
+        } else {
+            return _.options.slidesToScroll;
+        }
+
+    };
+
+    Slick.prototype.goTo = Slick.prototype.slickGoTo = function(slide, dontAnimate) {
+
+        var _ = this;
+
+        _.changeSlide({
+            data: {
+                message: 'index',
+                index: parseInt(slide)
+            }
+        }, dontAnimate);
+
+    };
+
+    Slick.prototype.init = function(creation) {
+
+        var _ = this;
+
+        if (!$(_.$slider).hasClass('slick-initialized')) {
+
+            $(_.$slider).addClass('slick-initialized');
+
+            _.buildRows();
+            _.buildOut();
+            _.setProps();
+            _.startLoad();
+            _.loadSlider();
+            _.initializeEvents();
+            _.updateArrows();
+            _.updateDots();
+            _.checkResponsive(true);
+            _.focusHandler();
+
+        }
+
+        if (creation) {
+            _.$slider.trigger('init', [_]);
+        }
+
+        if (_.options.accessibility === true) {
+            _.initADA();
+        }
+
+        if ( _.options.autoplay ) {
+
+            _.paused = false;
+            _.autoPlay();
+
+        }
+
+    };
+
+    Slick.prototype.initADA = function() {
+        var _ = this;
+        _.$slides.add(_.$slideTrack.find('.slick-cloned')).attr({
+            'aria-hidden': 'true',
+            'tabindex': '-1'
+        }).find('a, input, button, select').attr({
+            'tabindex': '-1'
+        });
+
+        _.$slideTrack.attr('role', 'listbox');
+
+        _.$slides.not(_.$slideTrack.find('.slick-cloned')).each(function(i) {
+            $(this).attr({
+                'role': 'option',
+                'aria-describedby': 'slick-slide' + _.instanceUid + i + ''
+            });
+        });
+
+        if (_.$dots !== null) {
+            _.$dots.attr('role', 'tablist').find('li').each(function(i) {
+                $(this).attr({
+                    'role': 'presentation',
+                    'aria-selected': 'false',
+                    'aria-controls': 'navigation' + _.instanceUid + i + '',
+                    'id': 'slick-slide' + _.instanceUid + i + ''
+                });
+            })
+                .first().attr('aria-selected', 'true').end()
+                .find('button').attr('role', 'button').end()
+                .closest('div').attr('role', 'toolbar');
+        }
+        _.activateADA();
+
+    };
+
+    Slick.prototype.initArrowEvents = function() {
+
+        var _ = this;
+
+        if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {
+            _.$prevArrow
+               .off('click.slick')
+               .on('click.slick', {
+                    message: 'previous'
+               }, _.changeSlide);
+            _.$nextArrow
+               .off('click.slick')
+               .on('click.slick', {
+                    message: 'next'
+               }, _.changeSlide);
+        }
+
+    };
+
+    Slick.prototype.initDotEvents = function() {
+
+        var _ = this;
+
+        if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {
+            $('li', _.$dots).on('click.slick', {
+                message: 'index'
+            }, _.changeSlide);
+        }
+
+        if ( _.options.dots === true && _.options.pauseOnDotsHover === true ) {
+
+            $('li', _.$dots)
+                .on('mouseenter.slick', $.proxy(_.interrupt, _, true))
+                .on('mouseleave.slick', $.proxy(_.interrupt, _, false));
+
+        }
+
+    };
+
+    Slick.prototype.initSlideEvents = function() {
+
+        var _ = this;
+
+        if ( _.options.pauseOnHover ) {
+
+            _.$list.on('mouseenter.slick', $.proxy(_.interrupt, _, true));
+            _.$list.on('mouseleave.slick', $.proxy(_.interrupt, _, false));
+
+        }
+
+    };
+
+    Slick.prototype.initializeEvents = function() {
+
+        var _ = this;
+
+        _.initArrowEvents();
+
+        _.initDotEvents();
+        _.initSlideEvents();
+
+        _.$list.on('touchstart.slick mousedown.slick', {
+            action: 'start'
+        }, _.swipeHandler);
+        _.$list.on('touchmove.slick mousemove.slick', {
+            action: 'move'
+        }, _.swipeHandler);
+        _.$list.on('touchend.slick mouseup.slick', {
+            action: 'end'
+        }, _.swipeHandler);
+        _.$list.on('touchcancel.slick mouseleave.slick', {
+            action: 'end'
+        }, _.swipeHandler);
+
+        _.$list.on('click.slick', _.clickHandler);
+
+        $(document).on(_.visibilityChange, $.proxy(_.visibility, _));
+
+        if (_.options.accessibility === true) {
+            _.$list.on('keydown.slick', _.keyHandler);
+        }
+
+        if (_.options.focusOnSelect === true) {
+            $(_.$slideTrack).children().on('click.slick', _.selectHandler);
+        }
+
+        $(window).on('orientationchange.slick.slick-' + _.instanceUid, $.proxy(_.orientationChange, _));
+
+        $(window).on('resize.slick.slick-' + _.instanceUid, $.proxy(_.resize, _));
+
+        $('[draggable!=true]', _.$slideTrack).on('dragstart', _.preventDefault);
+
+        $(window).on('load.slick.slick-' + _.instanceUid, _.setPosition);
+        $(document).on('ready.slick.slick-' + _.instanceUid, _.setPosition);
+
+    };
+
+    Slick.prototype.initUI = function() {
+
+        var _ = this;
+
+        if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {
+
+            _.$prevArrow.show();
+            _.$nextArrow.show();
+
+        }
+
+        if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {
+
+            _.$dots.show();
+
+        }
+
+    };
+
+    Slick.prototype.keyHandler = function(event) {
+
+        var _ = this;
+         //Dont slide if the cursor is inside the form fields and arrow keys are pressed
+        if(!event.target.tagName.match('TEXTAREA|INPUT|SELECT')) {
+            if (event.keyCode === 37 && _.options.accessibility === true) {
+                _.changeSlide({
+                    data: {
+                        message: _.options.rtl === true ? 'next' :  'previous'
+                    }
+                });
+            } else if (event.keyCode === 39 && _.options.accessibility === true) {
+                _.changeSlide({
+                    data: {
+                        message: _.options.rtl === true ? 'previous' : 'next'
+                    }
+                });
+            }
+        }
+
+    };
+
+    Slick.prototype.lazyLoad = function() {
+
+        var _ = this,
+            loadRange, cloneRange, rangeStart, rangeEnd;
+
+        function loadImages(imagesScope) {
+
+            $('img[data-lazy]', imagesScope).each(function() {
+
+                var image = $(this),
+                    imageSource = $(this).attr('data-lazy'),
+                    imageToLoad = document.createElement('img');
+
+                imageToLoad.onload = function() {
+
+                    image
+                        .animate({ opacity: 0 }, 100, function() {
+                            image
+                                .attr('src', imageSource)
+                                .animate({ opacity: 1 }, 200, function() {
+                                    image
+                                        .removeAttr('data-lazy')
+                                        .removeClass('slick-loading');
+                                });
+                            _.$slider.trigger('lazyLoaded', [_, image, imageSource]);
+                        });
+
+                };
+
+                imageToLoad.onerror = function() {
+
+                    image
+                        .removeAttr( 'data-lazy' )
+                        .removeClass( 'slick-loading' )
+                        .addClass( 'slick-lazyload-error' );
+
+                    _.$slider.trigger('lazyLoadError', [ _, image, imageSource ]);
+
+                };
+
+                imageToLoad.src = imageSource;
+
+            });
+
+        }
+
+        if (_.options.centerMode === true) {
+            if (_.options.infinite === true) {
+                rangeStart = _.currentSlide + (_.options.slidesToShow / 2 + 1);
+                rangeEnd = rangeStart + _.options.slidesToShow + 2;
+            } else {
+                rangeStart = Math.max(0, _.currentSlide - (_.options.slidesToShow / 2 + 1));
+                rangeEnd = 2 + (_.options.slidesToShow / 2 + 1) + _.currentSlide;
+            }
+        } else {
+            rangeStart = _.options.infinite ? _.options.slidesToShow + _.currentSlide : _.currentSlide;
+            rangeEnd = Math.ceil(rangeStart + _.options.slidesToShow);
+            if (_.options.fade === true) {
+                if (rangeStart > 0) rangeStart--;
+                if (rangeEnd <= _.slideCount) rangeEnd++;
+            }
+        }
+
+        loadRange = _.$slider.find('.slick-slide').slice(rangeStart, rangeEnd);
+        loadImages(loadRange);
+
+        if (_.slideCount <= _.options.slidesToShow) {
+            cloneRange = _.$slider.find('.slick-slide');
+            loadImages(cloneRange);
+        } else
+        if (_.currentSlide >= _.slideCount - _.options.slidesToShow) {
+            cloneRange = _.$slider.find('.slick-cloned').slice(0, _.options.slidesToShow);
+            loadImages(cloneRange);
+        } else if (_.currentSlide === 0) {
+            cloneRange = _.$slider.find('.slick-cloned').slice(_.options.slidesToShow * -1);
+            loadImages(cloneRange);
+        }
+
+    };
+
+    Slick.prototype.loadSlider = function() {
+
+        var _ = this;
+
+        _.setPosition();
+
+        _.$slideTrack.css({
+            opacity: 1
+        });
+
+        _.$slider.removeClass('slick-loading');
+
+        _.initUI();
+
+        if (_.options.lazyLoad === 'progressive') {
+            _.progressiveLazyLoad();
+        }
+
+    };
+
+    Slick.prototype.next = Slick.prototype.slickNext = function() {
+
+        var _ = this;
+
+        _.changeSlide({
+            data: {
+                message: 'next'
+            }
+        });
+
+    };
+
+    Slick.prototype.orientationChange = function() {
+
+        var _ = this;
+
+        _.checkResponsive();
+        _.setPosition();
+
+    };
+
+    Slick.prototype.pause = Slick.prototype.slickPause = function() {
+
+        var _ = this;
+
+        _.autoPlayClear();
+        _.paused = true;
+
+    };
+
+    Slick.prototype.play = Slick.prototype.slickPlay = function() {
+
+        var _ = this;
+
+        _.autoPlay();
+        _.options.autoplay = true;
+        _.paused = false;
+        _.focussed = false;
+        _.interrupted = false;
+
+    };
+
+    Slick.prototype.postSlide = function(index) {
+
+        var _ = this;
+
+        if( !_.unslicked ) {
+
+            _.$slider.trigger('afterChange', [_, index]);
+
+            _.animating = false;
+
+            _.setPosition();
+
+            _.swipeLeft = null;
+
+            if ( _.options.autoplay ) {
+                _.autoPlay();
+            }
+
+            if (_.options.accessibility === true) {
+                _.initADA();
+            }
+
+        }
+
+    };
+
+    Slick.prototype.prev = Slick.prototype.slickPrev = function() {
+
+        var _ = this;
+
+        _.changeSlide({
+            data: {
+                message: 'previous'
+            }
+        });
+
+    };
+
+    Slick.prototype.preventDefault = function(event) {
+
+        event.preventDefault();
+
+    };
+
+    Slick.prototype.progressiveLazyLoad = function( tryCount ) {
+
+        tryCount = tryCount || 1;
+
+        var _ = this,
+            $imgsToLoad = $( 'img[data-lazy]', _.$slider ),
+            image,
+            imageSource,
+            imageToLoad;
+
+        if ( $imgsToLoad.length ) {
+
+            image = $imgsToLoad.first();
+            imageSource = image.attr('data-lazy');
+            imageToLoad = document.createElement('img');
+
+            imageToLoad.onload = function() {
+
+                image
+                    .attr( 'src', imageSource )
+                    .removeAttr('data-lazy')
+                    .removeClass('slick-loading');
+
+                if ( _.options.adaptiveHeight === true ) {
+                    _.setPosition();
+                }
+
+                _.$slider.trigger('lazyLoaded', [ _, image, imageSource ]);
+                _.progressiveLazyLoad();
+
+            };
+
+            imageToLoad.onerror = function() {
+
+                if ( tryCount < 3 ) {
+
+                    /**
+                     * try to load the image 3 times,
+                     * leave a slight delay so we don't get
+                     * servers blocking the request.
+                     */
+                    setTimeout( function() {
+                        _.progressiveLazyLoad( tryCount + 1 );
+                    }, 500 );
+
+                } else {
+
+                    image
+                        .removeAttr( 'data-lazy' )
+                        .removeClass( 'slick-loading' )
+                        .addClass( 'slick-lazyload-error' );
+
+                    _.$slider.trigger('lazyLoadError', [ _, image, imageSource ]);
+
+                    _.progressiveLazyLoad();
+
+                }
+
+            };
+
+            imageToLoad.src = imageSource;
+
+        } else {
+
+            _.$slider.trigger('allImagesLoaded', [ _ ]);
+
+        }
+
+    };
+
+    Slick.prototype.refresh = function( initializing ) {
+
+        var _ = this, currentSlide, lastVisibleIndex;
+
+        lastVisibleIndex = _.slideCount - _.options.slidesToShow;
+
+        // in non-infinite sliders, we don't want to go past the
+        // last visible index.
+        if( !_.options.infinite && ( _.currentSlide > lastVisibleIndex )) {
+            _.currentSlide = lastVisibleIndex;
+        }
+
+        // if less slides than to show, go to start.
+        if ( _.slideCount <= _.options.slidesToShow ) {
+            _.currentSlide = 0;
+
+        }
+
+        currentSlide = _.currentSlide;
+
+        _.destroy(true);
+
+        $.extend(_, _.initials, { currentSlide: currentSlide });
+
+        _.init();
+
+        if( !initializing ) {
+
+            _.changeSlide({
+                data: {
+                    message: 'index',
+                    index: currentSlide
+                }
+            }, false);
+
+        }
+
+    };
+
+    Slick.prototype.registerBreakpoints = function() {
+
+        var _ = this, breakpoint, currentBreakpoint, l,
+            responsiveSettings = _.options.responsive || null;
+
+        if ( $.type(responsiveSettings) === 'array' && responsiveSettings.length ) {
+
+            _.respondTo = _.options.respondTo || 'window';
+
+            for ( breakpoint in responsiveSettings ) {
+
+                l = _.breakpoints.length-1;
+                currentBreakpoint = responsiveSettings[breakpoint].breakpoint;
+
+                if (responsiveSettings.hasOwnProperty(breakpoint)) {
+
+                    // loop through the breakpoints and cut out any existing
+                    // ones with the same breakpoint number, we don't want dupes.
+                    while( l >= 0 ) {
+                        if( _.breakpoints[l] && _.breakpoints[l] === currentBreakpoint ) {
+                            _.breakpoints.splice(l,1);
+                        }
+                        l--;
+                    }
+
+                    _.breakpoints.push(currentBreakpoint);
+                    _.breakpointSettings[currentBreakpoint] = responsiveSettings[breakpoint].settings;
+
+                }
+
+            }
+
+            _.breakpoints.sort(function(a, b) {
+                return ( _.options.mobileFirst ) ? a-b : b-a;
+            });
+
+        }
+
+    };
+
+    Slick.prototype.reinit = function() {
+
+        var _ = this;
+
+        _.$slides =
+            _.$slideTrack
+                .children(_.options.slide)
+                .addClass('slick-slide');
+
+        _.slideCount = _.$slides.length;
+
+        if (_.currentSlide >= _.slideCount && _.currentSlide !== 0) {
+            _.currentSlide = _.currentSlide - _.options.slidesToScroll;
+        }
+
+        if (_.slideCount <= _.options.slidesToShow) {
+            _.currentSlide = 0;
+        }
+
+        _.registerBreakpoints();
+
+        _.setProps();
+        _.setupInfinite();
+        _.buildArrows();
+        _.updateArrows();
+        _.initArrowEvents();
+        _.buildDots();
+        _.updateDots();
+        _.initDotEvents();
+        _.cleanUpSlideEvents();
+        _.initSlideEvents();
+
+        _.checkResponsive(false, true);
+
+        if (_.options.focusOnSelect === true) {
+            $(_.$slideTrack).children().on('click.slick', _.selectHandler);
+        }
+
+        _.setSlideClasses(typeof _.currentSlide === 'number' ? _.currentSlide : 0);
+
+        _.setPosition();
+        _.focusHandler();
+
+        _.paused = !_.options.autoplay;
+        _.autoPlay();
+
+        _.$slider.trigger('reInit', [_]);
+
+    };
+
+    Slick.prototype.resize = function() {
+
+        var _ = this;
+
+        if ($(window).width() !== _.windowWidth) {
+            clearTimeout(_.windowDelay);
+            _.windowDelay = window.setTimeout(function() {
+                _.windowWidth = $(window).width();
+                _.checkResponsive();
+                if( !_.unslicked ) { _.setPosition(); }
+            }, 50);
+        }
+    };
+
+    Slick.prototype.removeSlide = Slick.prototype.slickRemove = function(index, removeBefore, removeAll) {
+
+        var _ = this;
+
+        if (typeof(index) === 'boolean') {
+            removeBefore = index;
+            index = removeBefore === true ? 0 : _.slideCount - 1;
+        } else {
+            index = removeBefore === true ? --index : index;
+        }
+
+        if (_.slideCount < 1 || index < 0 || index > _.slideCount - 1) {
+            return false;
+        }
+
+        _.unload();
+
+        if (removeAll === true) {
+            _.$slideTrack.children().remove();
+        } else {
+            _.$slideTrack.children(this.options.slide).eq(index).remove();
+        }
+
+        _.$slides = _.$slideTrack.children(this.options.slide);
+
+        _.$slideTrack.children(this.options.slide).detach();
+
+        _.$slideTrack.append(_.$slides);
+
+        _.$slidesCache = _.$slides;
+
+        _.reinit();
+
+    };
+
+    Slick.prototype.setCSS = function(position) {
+
+        var _ = this,
+            positionProps = {},
+            x, y;
+
+        if (_.options.rtl === true) {
+            position = -position;
+        }
+        x = _.positionProp == 'left' ? Math.ceil(position) + 'px' : '0px';
+        y = _.positionProp == 'top' ? Math.ceil(position) + 'px' : '0px';
+
+        positionProps[_.positionProp] = position;
+
+        if (_.transformsEnabled === false) {
+            _.$slideTrack.css(positionProps);
+        } else {
+            positionProps = {};
+            if (_.cssTransitions === false) {
+                positionProps[_.animType] = 'translate(' + x + ', ' + y + ')';
+                _.$slideTrack.css(positionProps);
+            } else {
+                positionProps[_.animType] = 'translate3d(' + x + ', ' + y + ', 0px)';
+                _.$slideTrack.css(positionProps);
+            }
+        }
+
+    };
+
+    Slick.prototype.setDimensions = function() {
+
+        var _ = this;
+
+        if (_.options.vertical === false) {
+            if (_.options.centerMode === true) {
+                _.$list.css({
+                    padding: ('0px ' + _.options.centerPadding)
+                });
+            }
+        } else {
+            _.$list.height(_.$slides.first().outerHeight(true) * _.options.slidesToShow);
+            if (_.options.centerMode === true) {
+                _.$list.css({
+                    padding: (_.options.centerPadding + ' 0px')
+                });
+            }
+        }
+
+        _.listWidth = _.$list.width();
+        _.listHeight = _.$list.height();
+
+
+        if (_.options.vertical === false && _.options.variableWidth === false) {
+            _.slideWidth = Math.ceil(_.listWidth / _.options.slidesToShow);
+            _.$slideTrack.width(Math.ceil((_.slideWidth * _.$slideTrack.children('.slick-slide').length)));
+
+        } else if (_.options.variableWidth === true) {
+            _.$slideTrack.width(5000 * _.slideCount);
+        } else {
+            _.slideWidth = Math.ceil(_.listWidth);
+            _.$slideTrack.height(Math.ceil((_.$slides.first().outerHeight(true) * _.$slideTrack.children('.slick-slide').length)));
+        }
+
+        var offset = _.$slides.first().outerWidth(true) - _.$slides.first().width();
+        if (_.options.variableWidth === false) _.$slideTrack.children('.slick-slide').width(_.slideWidth - offset);
+
+    };
+
+    Slick.prototype.setFade = function() {
+
+        var _ = this,
+            targetLeft;
+
+        _.$slides.each(function(index, element) {
+            targetLeft = (_.slideWidth * index) * -1;
+            if (_.options.rtl === true) {
+                $(element).css({
+                    position: 'relative',
+                    right: targetLeft,
+                    top: 0,
+                    zIndex: _.options.zIndex - 2,
+                    opacity: 0
+                });
+            } else {
+                $(element).css({
+                    position: 'relative',
+                    left: targetLeft,
+                    top: 0,
+                    zIndex: _.options.zIndex - 2,
+                    opacity: 0
+                });
+            }
+        });
+
+        _.$slides.eq(_.currentSlide).css({
+            zIndex: _.options.zIndex - 1,
+            opacity: 1
+        });
+
+    };
+
+    Slick.prototype.setHeight = function() {
+
+        var _ = this;
+
+        if (_.options.slidesToShow === 1 && _.options.adaptiveHeight === true && _.options.vertical === false) {
+            var targetHeight = _.$slides.eq(_.currentSlide).outerHeight(true);
+            _.$list.css('height', targetHeight);
+        }
+
+    };
+
+    Slick.prototype.setOption =
+    Slick.prototype.slickSetOption = function() {
+
+        /**
+         * accepts arguments in format of:
+         *
+         *  - for changing a single option's value:
+         *     .slick("setOption", option, value, refresh )
+         *
+         *  - for changing a set of responsive options:
+         *     .slick("setOption", 'responsive', [{}, ...], refresh )
+         *
+         *  - for updating multiple values at once (not responsive)
+         *     .slick("setOption", { 'option': value, ... }, refresh )
+         */
+
+        var _ = this, l, item, option, value, refresh = false, type;
+
+        if( $.type( arguments[0] ) === 'object' ) {
+
+            option =  arguments[0];
+            refresh = arguments[1];
+            type = 'multiple';
+
+        } else if ( $.type( arguments[0] ) === 'string' ) {
+
+            option =  arguments[0];
+            value = arguments[1];
+            refresh = arguments[2];
+
+            if ( arguments[0] === 'responsive' && $.type( arguments[1] ) === 'array' ) {
+
+                type = 'responsive';
+
+            } else if ( typeof arguments[1] !== 'undefined' ) {
+
+                type = 'single';
+
+            }
+
+        }
+
+        if ( type === 'single' ) {
+
+            _.options[option] = value;
+
+
+        } else if ( type === 'multiple' ) {
+
+            $.each( option , function( opt, val ) {
+
+                _.options[opt] = val;
+
+            });
+
+
+        } else if ( type === 'responsive' ) {
+
+            for ( item in value ) {
+
+                if( $.type( _.options.responsive ) !== 'array' ) {
+
+                    _.options.responsive = [ value[item] ];
+
+                } else {
+
+                    l = _.options.responsive.length-1;
+
+                    // loop through the responsive object and splice out duplicates.
+                    while( l >= 0 ) {
+
+                        if( _.options.responsive[l].breakpoint === value[item].breakpoint ) {
+
+                            _.options.responsive.splice(l,1);
+
+                        }
+
+                        l--;
+
+                    }
+
+                    _.options.responsive.push( value[item] );
+
+                }
+
+            }
+
+        }
+
+        if ( refresh ) {
+
+            _.unload();
+            _.reinit();
+
+        }
+
+    };
+
+    Slick.prototype.setPosition = function() {
+
+        var _ = this;
+
+        _.setDimensions();
+
+        _.setHeight();
+
+        if (_.options.fade === false) {
+            _.setCSS(_.getLeft(_.currentSlide));
+        } else {
+            _.setFade();
+        }
+
+        _.$slider.trigger('setPosition', [_]);
+
+    };
+
+    Slick.prototype.setProps = function() {
+
+        var _ = this,
+            bodyStyle = document.body.style;
+
+        _.positionProp = _.options.vertical === true ? 'top' : 'left';
+
+        if (_.positionProp === 'top') {
+            _.$slider.addClass('slick-vertical');
+        } else {
+            _.$slider.removeClass('slick-vertical');
+        }
+
+        if (bodyStyle.WebkitTransition !== undefined ||
+            bodyStyle.MozTransition !== undefined ||
+            bodyStyle.msTransition !== undefined) {
+            if (_.options.useCSS === true) {
+                _.cssTransitions = true;
+            }
+        }
+
+        if ( _.options.fade ) {
+            if ( typeof _.options.zIndex === 'number' ) {
+                if( _.options.zIndex < 3 ) {
+                    _.options.zIndex = 3;
+                }
+            } else {
+                _.options.zIndex = _.defaults.zIndex;
+            }
+        }
+
+        if (bodyStyle.OTransform !== undefined) {
+            _.animType = 'OTransform';
+            _.transformType = '-o-transform';
+            _.transitionType = 'OTransition';
+            if (bodyStyle.perspectiveProperty === undefined && bodyStyle.webkitPerspective === undefined) _.animType = false;
+        }
+        if (bodyStyle.MozTransform !== undefined) {
+            _.animType = 'MozTransform';
+            _.transformType = '-moz-transform';
+            _.transitionType = 'MozTransition';
+            if (bodyStyle.perspectiveProperty === undefined && bodyStyle.MozPerspective === undefined) _.animType = false;
+        }
+        if (bodyStyle.webkitTransform !== undefined) {
+            _.animType = 'webkitTransform';
+            _.transformType = '-webkit-transform';
+            _.transitionType = 'webkitTransition';
+            if (bodyStyle.perspectiveProperty === undefined && bodyStyle.webkitPerspective === undefined) _.animType = false;
+        }
+        if (bodyStyle.msTransform !== undefined) {
+            _.animType = 'msTransform';
+            _.transformType = '-ms-transform';
+            _.transitionType = 'msTransition';
+            if (bodyStyle.msTransform === undefined) _.animType = false;
+        }
+        if (bodyStyle.transform !== undefined && _.animType !== false) {
+            _.animType = 'transform';
+            _.transformType = 'transform';
+            _.transitionType = 'transition';
+        }
+        _.transformsEnabled = _.options.useTransform && (_.animType !== null && _.animType !== false);
+    };
+
+
+    Slick.prototype.setSlideClasses = function(index) {
+
+        var _ = this,
+            centerOffset, allSlides, indexOffset, remainder;
+
+        allSlides = _.$slider
+            .find('.slick-slide')
+            .removeClass('slick-active slick-center slick-current')
+            .attr('aria-hidden', 'true');
+
+        _.$slides
+            .eq(index)
+            .addClass('slick-current');
+
+        if (_.options.centerMode === true) {
+
+            centerOffset = Math.floor(_.options.slidesToShow / 2);
+
+            if (_.options.infinite === true) {
+
+                if (index >= centerOffset && index <= (_.slideCount - 1) - centerOffset) {
+
+                    _.$slides
+                        .slice(index - centerOffset, index + centerOffset + 1)
+                        .addClass('slick-active')
+                        .attr('aria-hidden', 'false');
+
+                } else {
+
+                    indexOffset = _.options.slidesToShow + index;
+                    allSlides
+                        .slice(indexOffset - centerOffset + 1, indexOffset + centerOffset + 2)
+                        .addClass('slick-active')
+                        .attr('aria-hidden', 'false');
+
+                }
+
+                if (index === 0) {
+
+                    allSlides
+                        .eq(allSlides.length - 1 - _.options.slidesToShow)
+                        .addClass('slick-center');
+
+                } else if (index === _.slideCount - 1) {
+
+                    allSlides
+                        .eq(_.options.slidesToShow)
+                        .addClass('slick-center');
+
+                }
+
+            }
+
+            _.$slides
+                .eq(index)
+                .addClass('slick-center');
+
+        } else {
+
+            if (index >= 0 && index <= (_.slideCount - _.options.slidesToShow)) {
+
+                _.$slides
+                    .slice(index, index + _.options.slidesToShow)
+                    .addClass('slick-active')
+                    .attr('aria-hidden', 'false');
+
+            } else if (allSlides.length <= _.options.slidesToShow) {
+
+                allSlides
+                    .addClass('slick-active')
+                    .attr('aria-hidden', 'false');
+
+            } else {
+
+                remainder = _.slideCount % _.options.slidesToShow;
+                indexOffset = _.options.infinite === true ? _.options.slidesToShow + index : index;
+
+                if (_.options.slidesToShow == _.options.slidesToScroll && (_.slideCount - index) < _.options.slidesToShow) {
+
+                    allSlides
+                        .slice(indexOffset - (_.options.slidesToShow - remainder), indexOffset + remainder)
+                        .addClass('slick-active')
+                        .attr('aria-hidden', 'false');
+
+                } else {
+
+                    allSlides
+                        .slice(indexOffset, indexOffset + _.options.slidesToShow)
+                        .addClass('slick-active')
+                        .attr('aria-hidden', 'false');
+
+                }
+
+            }
+
+        }
+
+        if (_.options.lazyLoad === 'ondemand') {
+            _.lazyLoad();
+        }
+
+    };
+
+    Slick.prototype.setupInfinite = function() {
+
+        var _ = this,
+            i, slideIndex, infiniteCount;
+
+        if (_.options.fade === true) {
+            _.options.centerMode = false;
+        }
+
+        if (_.options.infinite === true && _.options.fade === false) {
+
+            slideIndex = null;
+
+            if (_.slideCount > _.options.slidesToShow) {
+
+                if (_.options.centerMode === true) {
+                    infiniteCount = _.options.slidesToShow + 1;
+                } else {
+                    infiniteCount = _.options.slidesToShow;
+                }
+
+                for (i = _.slideCount; i > (_.slideCount -
+                        infiniteCount); i -= 1) {
+                    slideIndex = i - 1;
+                    $(_.$slides[slideIndex]).clone(true).attr('id', '')
+                        .attr('data-slick-index', slideIndex - _.slideCount)
+                        .prependTo(_.$slideTrack).addClass('slick-cloned');
+                }
+                for (i = 0; i < infiniteCount; i += 1) {
+                    slideIndex = i;
+                    $(_.$slides[slideIndex]).clone(true).attr('id', '')
+                        .attr('data-slick-index', slideIndex + _.slideCount)
+                        .appendTo(_.$slideTrack).addClass('slick-cloned');
+                }
+                _.$slideTrack.find('.slick-cloned').find('[id]').each(function() {
+                    $(this).attr('id', '');
+                });
+
+            }
+
+        }
+
+    };
+
+    Slick.prototype.interrupt = function( toggle ) {
+
+        var _ = this;
+
+        if( !toggle ) {
+            _.autoPlay();
+        }
+        _.interrupted = toggle;
+
+    };
+
+    Slick.prototype.selectHandler = function(event) {
+
+        var _ = this;
+
+        var targetElement =
+            $(event.target).is('.slick-slide') ?
+                $(event.target) :
+                $(event.target).parents('.slick-slide');
+
+        var index = parseInt(targetElement.attr('data-slick-index'));
+
+        if (!index) index = 0;
+
+        if (_.slideCount <= _.options.slidesToShow) {
+
+            _.setSlideClasses(index);
+            _.asNavFor(index);
+            return;
+
+        }
+
+        _.slideHandler(index);
+
+    };
+
+    Slick.prototype.slideHandler = function(index, sync, dontAnimate) {
+
+        var targetSlide, animSlide, oldSlide, slideLeft, targetLeft = null,
+            _ = this, navTarget;
+
+        sync = sync || false;
+
+        if (_.animating === true && _.options.waitForAnimate === true) {
+            return;
+        }
+
+        if (_.options.fade === true && _.currentSlide === index) {
+            return;
+        }
+
+        if (_.slideCount <= _.options.slidesToShow) {
+            return;
+        }
+
+        if (sync === false) {
+            _.asNavFor(index);
+        }
+
+        targetSlide = index;
+        targetLeft = _.getLeft(targetSlide);
+        slideLeft = _.getLeft(_.currentSlide);
+
+        _.currentLeft = _.swipeLeft === null ? slideLeft : _.swipeLeft;
+
+        if (_.options.infinite === false && _.options.centerMode === false && (index < 0 || index > _.getDotCount() * _.options.slidesToScroll)) {
+            if (_.options.fade === false) {
+                targetSlide = _.currentSlide;
+                if (dontAnimate !== true) {
+                    _.animateSlide(slideLeft, function() {
+                        _.postSlide(targetSlide);
+                    });
+                } else {
+                    _.postSlide(targetSlide);
+                }
+            }
+            return;
+        } else if (_.options.infinite === false && _.options.centerMode === true && (index < 0 || index > (_.slideCount - _.options.slidesToScroll))) {
+            if (_.options.fade === false) {
+                targetSlide = _.currentSlide;
+                if (dontAnimate !== true) {
+                    _.animateSlide(slideLeft, function() {
+                        _.postSlide(targetSlide);
+                    });
+                } else {
+                    _.postSlide(targetSlide);
+                }
+            }
+            return;
+        }
+
+        if ( _.options.autoplay ) {
+            clearInterval(_.autoPlayTimer);
+        }
+
+        if (targetSlide < 0) {
+            if (_.slideCount % _.options.slidesToScroll !== 0) {
+                animSlide = _.slideCount - (_.slideCount % _.options.slidesToScroll);
+            } else {
+                animSlide = _.slideCount + targetSlide;
+            }
+        } else if (targetSlide >= _.slideCount) {
+            if (_.slideCount % _.options.slidesToScroll !== 0) {
+                animSlide = 0;
+            } else {
+                animSlide = targetSlide - _.slideCount;
+            }
+        } else {
+            animSlide = targetSlide;
+        }
+
+        _.animating = true;
+
+        _.$slider.trigger('beforeChange', [_, _.currentSlide, animSlide]);
+
+        oldSlide = _.currentSlide;
+        _.currentSlide = animSlide;
+
+        _.setSlideClasses(_.currentSlide);
+
+        if ( _.options.asNavFor ) {
+
+            navTarget = _.getNavTarget();
+            navTarget = navTarget.slick('getSlick');
+
+            if ( navTarget.slideCount <= navTarget.options.slidesToShow ) {
+                navTarget.setSlideClasses(_.currentSlide);
+            }
+
+        }
+
+        _.updateDots();
+        _.updateArrows();
+
+        if (_.options.fade === true) {
+            if (dontAnimate !== true) {
+
+                _.fadeSlideOut(oldSlide);
+
+                _.fadeSlide(animSlide, function() {
+                    _.postSlide(animSlide);
+                });
+
+            } else {
+                _.postSlide(animSlide);
+            }
+            _.animateHeight();
+            return;
+        }
+
+        if (dontAnimate !== true) {
+            _.animateSlide(targetLeft, function() {
+                _.postSlide(animSlide);
+            });
+        } else {
+            _.postSlide(animSlide);
+        }
+
+    };
+
+    Slick.prototype.startLoad = function() {
+
+        var _ = this;
+
+        if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {
+
+            _.$prevArrow.hide();
+            _.$nextArrow.hide();
+
+        }
+
+        if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {
+
+            _.$dots.hide();
+
+        }
+
+        _.$slider.addClass('slick-loading');
+
+    };
+
+    Slick.prototype.swipeDirection = function() {
+
+        var xDist, yDist, r, swipeAngle, _ = this;
+
+        xDist = _.touchObject.startX - _.touchObject.curX;
+        yDist = _.touchObject.startY - _.touchObject.curY;
+        r = Math.atan2(yDist, xDist);
+
+        swipeAngle = Math.round(r * 180 / Math.PI);
+        if (swipeAngle < 0) {
+            swipeAngle = 360 - Math.abs(swipeAngle);
+        }
+
+        if ((swipeAngle <= 45) && (swipeAngle >= 0)) {
+            return (_.options.rtl === false ? 'left' : 'right');
+        }
+        if ((swipeAngle <= 360) && (swipeAngle >= 315)) {
+            return (_.options.rtl === false ? 'left' : 'right');
+        }
+        if ((swipeAngle >= 135) && (swipeAngle <= 225)) {
+            return (_.options.rtl === false ? 'right' : 'left');
+        }
+        if (_.options.verticalSwiping === true) {
+            if ((swipeAngle >= 35) && (swipeAngle <= 135)) {
+                return 'down';
+            } else {
+                return 'up';
+            }
+        }
+
+        return 'vertical';
+
+    };
+
+    Slick.prototype.swipeEnd = function(event) {
+
+        var _ = this,
+            slideCount,
+            direction;
+
+        _.dragging = false;
+        _.interrupted = false;
+        _.shouldClick = ( _.touchObject.swipeLength > 10 ) ? false : true;
+
+        if ( _.touchObject.curX === undefined ) {
+            return false;
+        }
+
+        if ( _.touchObject.edgeHit === true ) {
+            _.$slider.trigger('edge', [_, _.swipeDirection() ]);
+        }
+
+        if ( _.touchObject.swipeLength >= _.touchObject.minSwipe ) {
+
+            direction = _.swipeDirection();
+
+            switch ( direction ) {
+
+                case 'left':
+                case 'down':
+
+                    slideCount =
+                        _.options.swipeToSlide ?
+                            _.checkNavigable( _.currentSlide + _.getSlideCount() ) :
+                            _.currentSlide + _.getSlideCount();
+
+                    _.currentDirection = 0;
+
+                    break;
+
+                case 'right':
+                case 'up':
+
+                    slideCount =
+                        _.options.swipeToSlide ?
+                            _.checkNavigable( _.currentSlide - _.getSlideCount() ) :
+                            _.currentSlide - _.getSlideCount();
+
+                    _.currentDirection = 1;
+
+                    break;
+
+                default:
+
+
+            }
+
+            if( direction != 'vertical' ) {
+
+                _.slideHandler( slideCount );
+                _.touchObject = {};
+                _.$slider.trigger('swipe', [_, direction ]);
+
+            }
+
+        } else {
+
+            if ( _.touchObject.startX !== _.touchObject.curX ) {
+
+                _.slideHandler( _.currentSlide );
+                _.touchObject = {};
+
+            }
+
+        }
+
+    };
+
+    Slick.prototype.swipeHandler = function(event) {
+
+        var _ = this;
+
+        if ((_.options.swipe === false) || ('ontouchend' in document && _.options.swipe === false)) {
+            return;
+        } else if (_.options.draggable === false && event.type.indexOf('mouse') !== -1) {
+            return;
+        }
+
+        _.touchObject.fingerCount = event.originalEvent && event.originalEvent.touches !== undefined ?
+            event.originalEvent.touches.length : 1;
+
+        _.touchObject.minSwipe = _.listWidth / _.options
+            .touchThreshold;
+
+        if (_.options.verticalSwiping === true) {
+            _.touchObject.minSwipe = _.listHeight / _.options
+                .touchThreshold;
+        }
+
+        switch (event.data.action) {
+
+            case 'start':
+                _.swipeStart(event);
+                break;
+
+            case 'move':
+                _.swipeMove(event);
+                break;
+
+            case 'end':
+                _.swipeEnd(event);
+                break;
+
+        }
+
+    };
+
+    Slick.prototype.swipeMove = function(event) {
+
+        var _ = this,
+            edgeWasHit = false,
+            curLeft, swipeDirection, swipeLength, positionOffset, touches;
+
+        touches = event.originalEvent !== undefined ? event.originalEvent.touches : null;
+
+        if (!_.dragging || touches && touches.length !== 1) {
+            return false;
+        }
+
+        curLeft = _.getLeft(_.currentSlide);
+
+        _.touchObject.curX = touches !== undefined ? touches[0].pageX : event.clientX;
+        _.touchObject.curY = touches !== undefined ? touches[0].pageY : event.clientY;
+
+        _.touchObject.swipeLength = Math.round(Math.sqrt(
+            Math.pow(_.touchObject.curX - _.touchObject.startX, 2)));
+
+        if (_.options.verticalSwiping === true) {
+            _.touchObject.swipeLength = Math.round(Math.sqrt(
+                Math.pow(_.touchObject.curY - _.touchObject.startY, 2)));
+        }
+
+        swipeDirection = _.swipeDirection();
+
+        if (swipeDirection === 'vertical') {
+            return;
+        }
+
+        if (event.originalEvent !== undefined && _.touchObject.swipeLength > 4) {
+            event.preventDefault();
+        }
+
+        positionOffset = (_.options.rtl === false ? 1 : -1) * (_.touchObject.curX > _.touchObject.startX ? 1 : -1);
+        if (_.options.verticalSwiping === true) {
+            positionOffset = _.touchObject.curY > _.touchObject.startY ? 1 : -1;
+        }
+
+
+        swipeLength = _.touchObject.swipeLength;
+
+        _.touchObject.edgeHit = false;
+
+        if (_.options.infinite === false) {
+            if ((_.currentSlide === 0 && swipeDirection === 'right') || (_.currentSlide >= _.getDotCount() && swipeDirection === 'left')) {
+                swipeLength = _.touchObject.swipeLength * _.options.edgeFriction;
+                _.touchObject.edgeHit = true;
+            }
+        }
+
+        if (_.options.vertical === false) {
+            _.swipeLeft = curLeft + swipeLength * positionOffset;
+        } else {
+            _.swipeLeft = curLeft + (swipeLength * (_.$list.height() / _.listWidth)) * positionOffset;
+        }
+        if (_.options.verticalSwiping === true) {
+            _.swipeLeft = curLeft + swipeLength * positionOffset;
+        }
+
+        if (_.options.fade === true || _.options.touchMove === false) {
+            return false;
+        }
+
+        if (_.animating === true) {
+            _.swipeLeft = null;
+            return false;
+        }
+
+        _.setCSS(_.swipeLeft);
+
+    };
+
+    Slick.prototype.swipeStart = function(event) {
+
+        var _ = this,
+            touches;
+
+        _.interrupted = true;
+
+        if (_.touchObject.fingerCount !== 1 || _.slideCount <= _.options.slidesToShow) {
+            _.touchObject = {};
+            return false;
+        }
+
+        if (event.originalEvent !== undefined && event.originalEvent.touches !== undefined) {
+            touches = event.originalEvent.touches[0];
+        }
+
+        _.touchObject.startX = _.touchObject.curX = touches !== undefined ? touches.pageX : event.clientX;
+        _.touchObject.startY = _.touchObject.curY = touches !== undefined ? touches.pageY : event.clientY;
+
+        _.dragging = true;
+
+    };
+
+    Slick.prototype.unfilterSlides = Slick.prototype.slickUnfilter = function() {
+
+        var _ = this;
+
+        if (_.$slidesCache !== null) {
+
+            _.unload();
+
+            _.$slideTrack.children(this.options.slide).detach();
+
+            _.$slidesCache.appendTo(_.$slideTrack);
+
+            _.reinit();
+
+        }
+
+    };
+
+    Slick.prototype.unload = function() {
+
+        var _ = this;
+
+        $('.slick-cloned', _.$slider).remove();
+
+        if (_.$dots) {
+            _.$dots.remove();
+        }
+
+        if (_.$prevArrow && _.htmlExpr.test(_.options.prevArrow)) {
+            _.$prevArrow.remove();
+        }
+
+        if (_.$nextArrow && _.htmlExpr.test(_.options.nextArrow)) {
+            _.$nextArrow.remove();
+        }
+
+        _.$slides
+            .removeClass('slick-slide slick-active slick-visible slick-current')
+            .attr('aria-hidden', 'true')
+            .css('width', '');
+
+    };
+
+    Slick.prototype.unslick = function(fromBreakpoint) {
+
+        var _ = this;
+        _.$slider.trigger('unslick', [_, fromBreakpoint]);
+        _.destroy();
+
+    };
+
+    Slick.prototype.updateArrows = function() {
+
+        var _ = this,
+            centerOffset;
+
+        centerOffset = Math.floor(_.options.slidesToShow / 2);
+
+        if ( _.options.arrows === true &&
+            _.slideCount > _.options.slidesToShow &&
+            !_.options.infinite ) {
+
+            _.$prevArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');
+            _.$nextArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');
+
+            if (_.currentSlide === 0) {
+
+                _.$prevArrow.addClass('slick-disabled').attr('aria-disabled', 'true');
+                _.$nextArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');
+
+            } else if (_.currentSlide >= _.slideCount - _.options.slidesToShow && _.options.centerMode === false) {
+
+                _.$nextArrow.addClass('slick-disabled').attr('aria-disabled', 'true');
+                _.$prevArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');
+
+            } else if (_.currentSlide >= _.slideCount - 1 && _.options.centerMode === true) {
+
+                _.$nextArrow.addClass('slick-disabled').attr('aria-disabled', 'true');
+                _.$prevArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');
+
+            }
+
+        }
+
+    };
+
+    Slick.prototype.updateDots = function() {
+
+        var _ = this;
+
+        if (_.$dots !== null) {
+
+            _.$dots
+                .find('li')
+                .removeClass('slick-active')
+                .attr('aria-hidden', 'true');
+
+            _.$dots
+                .find('li')
+                .eq(Math.floor(_.currentSlide / _.options.slidesToScroll))
+                .addClass('slick-active')
+                .attr('aria-hidden', 'false');
+
+        }
+
+    };
+
+    Slick.prototype.visibility = function() {
+
+        var _ = this;
+
+        if ( _.options.autoplay ) {
+
+            if ( document[_.hidden] ) {
+
+                _.interrupted = true;
+
+            } else {
+
+                _.interrupted = false;
+
+            }
+
+        }
+
+    };
+
+    $.fn.slick = function() {
+        var _ = this,
+            opt = arguments[0],
+            args = Array.prototype.slice.call(arguments, 1),
+            l = _.length,
+            i,
+            ret;
+        for (i = 0; i < l; i++) {
+            if (typeof opt == 'object' || typeof opt == 'undefined')
+                _[i].slick = new Slick(_[i], opt);
+            else
+                ret = _[i].slick[opt].apply(_[i].slick, args);
+            if (typeof ret != 'undefined') return ret;
+        }
+        return _;
+    };
+
+}));
diff --git a/slick/slick/slick.less b/slick/slick/slick.less
new file mode 100644 (file)
index 0000000..2fa0fb2
--- /dev/null
@@ -0,0 +1,98 @@
+/* Slider */
+
+.slick-slider {
+    position: relative;
+    display: block;
+    box-sizing: border-box;
+    -webkit-touch-callout: none;
+    -webkit-user-select: none;
+    -khtml-user-select: none;
+    -moz-user-select: none;
+    -ms-user-select: none;
+    user-select: none;
+    -ms-touch-action: pan-y;
+    touch-action: pan-y;
+    -webkit-tap-highlight-color: transparent;
+}
+.slick-list {
+    position: relative;
+    overflow: hidden;
+    display: block;
+    margin: 0;
+    padding: 0;
+
+    &:focus {
+        outline: none;
+    }
+
+    &.dragging {
+        cursor: pointer;
+        cursor: hand;
+    }
+}
+.slick-slider .slick-track,
+.slick-slider .slick-list {
+    -webkit-transform: translate3d(0, 0, 0);
+    -moz-transform: translate3d(0, 0, 0);
+    -ms-transform: translate3d(0, 0, 0);
+    -o-transform: translate3d(0, 0, 0);
+    transform: translate3d(0, 0, 0);
+}
+
+.slick-track {
+    position: relative;
+    left: 0;
+    top: 0;
+    display: block;
+
+    &:before,
+    &:after {
+        content: "";
+        display: table;
+    }
+
+    &:after {
+        clear: both;
+    }
+
+    .slick-loading & {
+        visibility: hidden;
+    }
+}
+.slick-slide {
+    float: left;
+    height: 100%;
+    min-height: 1px;
+    [dir="rtl"] & {
+        float: right;
+    }
+    img {
+        display: block;
+    }
+    &.slick-loading img {
+        display: none;
+    }
+
+    display: none;
+
+    &.dragging img {
+        pointer-events: none;
+    }
+
+    .slick-initialized & {
+        display: block;
+    }
+
+    .slick-loading & {
+        visibility: hidden;
+    }
+
+    .slick-vertical & {
+        display: block;
+        height: auto;
+        border: 1px solid transparent;
+    }
+}
+.slick-arrow.slick-hidden {
+    display: none;
+}
diff --git a/slick/slick/slick.min.js b/slick/slick/slick.min.js
new file mode 100644 (file)
index 0000000..88a8a6b
--- /dev/null
@@ -0,0 +1,18 @@
+/*
+     _ _      _       _
+ ___| (_) ___| | __  (_)___
+/ __| | |/ __| |/ /  | / __|
+\__ \ | | (__|   < _ | \__ \
+|___/_|_|\___|_|\_(_)/ |___/
+                   |__/
+
+ Version: 1.6.0
+  Author: Ken Wheeler
+ Website: http://kenwheeler.github.io
+    Docs: http://kenwheeler.github.io/slick
+    Repo: http://github.com/kenwheeler/slick
+  Issues: http://github.com/kenwheeler/slick/issues
+
+ */
+!function(a){"use strict";"function"==typeof define&&define.amd?define(["jquery"],a):"undefined"!=typeof exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){"use strict";var b=window.Slick||{};b=function(){function c(c,d){var f,e=this;e.defaults={accessibility:!0,adaptiveHeight:!1,appendArrows:a(c),appendDots:a(c),arrows:!0,asNavFor:null,prevArrow:'<button type="button" data-role="none" class="slick-prev" aria-label="Previous" tabindex="0" role="button">Previous</button>',nextArrow:'<button type="button" data-role="none" class="slick-next" aria-label="Next" tabindex="0" role="button">Next</button>',autoplay:!1,autoplaySpeed:3e3,centerMode:!1,centerPadding:"50px",cssEase:"ease",customPaging:function(b,c){return a('<button type="button" data-role="none" role="button" tabindex="0" />').text(c+1)},dots:!1,dotsClass:"slick-dots",draggable:!0,easing:"linear",edgeFriction:.35,fade:!1,focusOnSelect:!1,infinite:!0,initialSlide:0,lazyLoad:"ondemand",mobileFirst:!1,pauseOnHover:!0,pauseOnFocus:!0,pauseOnDotsHover:!1,respondTo:"window",responsive:null,rows:1,rtl:!1,slide:"",slidesPerRow:1,slidesToShow:1,slidesToScroll:1,speed:500,swipe:!0,swipeToSlide:!1,touchMove:!0,touchThreshold:5,useCSS:!0,useTransform:!0,variableWidth:!1,vertical:!1,verticalSwiping:!1,waitForAnimate:!0,zIndex:1e3},e.initials={animating:!1,dragging:!1,autoPlayTimer:null,currentDirection:0,currentLeft:null,currentSlide:0,direction:1,$dots:null,listWidth:null,listHeight:null,loadIndex:0,$nextArrow:null,$prevArrow:null,slideCount:null,slideWidth:null,$slideTrack:null,$slides:null,sliding:!1,slideOffset:0,swipeLeft:null,$list:null,touchObject:{},transformsEnabled:!1,unslicked:!1},a.extend(e,e.initials),e.activeBreakpoint=null,e.animType=null,e.animProp=null,e.breakpoints=[],e.breakpointSettings=[],e.cssTransitions=!1,e.focussed=!1,e.interrupted=!1,e.hidden="hidden",e.paused=!0,e.positionProp=null,e.respondTo=null,e.rowCount=1,e.shouldClick=!0,e.$slider=a(c),e.$slidesCache=null,e.transformType=null,e.transitionType=null,e.visibilityChange="visibilitychange",e.windowWidth=0,e.windowTimer=null,f=a(c).data("slick")||{},e.options=a.extend({},e.defaults,d,f),e.currentSlide=e.options.initialSlide,e.originalSettings=e.options,"undefined"!=typeof document.mozHidden?(e.hidden="mozHidden",e.visibilityChange="mozvisibilitychange"):"undefined"!=typeof document.webkitHidden&&(e.hidden="webkitHidden",e.visibilityChange="webkitvisibilitychange"),e.autoPlay=a.proxy(e.autoPlay,e),e.autoPlayClear=a.proxy(e.autoPlayClear,e),e.autoPlayIterator=a.proxy(e.autoPlayIterator,e),e.changeSlide=a.proxy(e.changeSlide,e),e.clickHandler=a.proxy(e.clickHandler,e),e.selectHandler=a.proxy(e.selectHandler,e),e.setPosition=a.proxy(e.setPosition,e),e.swipeHandler=a.proxy(e.swipeHandler,e),e.dragHandler=a.proxy(e.dragHandler,e),e.keyHandler=a.proxy(e.keyHandler,e),e.instanceUid=b++,e.htmlExpr=/^(?:\s*(<[\w\W]+>)[^>]*)$/,e.registerBreakpoints(),e.init(!0)}var b=0;return c}(),b.prototype.activateADA=function(){var a=this;a.$slideTrack.find(".slick-active").attr({"aria-hidden":"false"}).find("a, input, button, select").attr({tabindex:"0"})},b.prototype.addSlide=b.prototype.slickAdd=function(b,c,d){var e=this;if("boolean"==typeof c)d=c,c=null;else if(0>c||c>=e.slideCount)return!1;e.unload(),"number"==typeof c?0===c&&0===e.$slides.length?a(b).appendTo(e.$slideTrack):d?a(b).insertBefore(e.$slides.eq(c)):a(b).insertAfter(e.$slides.eq(c)):d===!0?a(b).prependTo(e.$slideTrack):a(b).appendTo(e.$slideTrack),e.$slides=e.$slideTrack.children(this.options.slide),e.$slideTrack.children(this.options.slide).detach(),e.$slideTrack.append(e.$slides),e.$slides.each(function(b,c){a(c).attr("data-slick-index",b)}),e.$slidesCache=e.$slides,e.reinit()},b.prototype.animateHeight=function(){var a=this;if(1===a.options.slidesToShow&&a.options.adaptiveHeight===!0&&a.options.vertical===!1){var b=a.$slides.eq(a.currentSlide).outerHeight(!0);a.$list.animate({height:b},a.options.speed)}},b.prototype.animateSlide=function(b,c){var d={},e=this;e.animateHeight(),e.options.rtl===!0&&e.options.vertical===!1&&(b=-b),e.transformsEnabled===!1?e.options.vertical===!1?e.$slideTrack.animate({left:b},e.options.speed,e.options.easing,c):e.$slideTrack.animate({top:b},e.options.speed,e.options.easing,c):e.cssTransitions===!1?(e.options.rtl===!0&&(e.currentLeft=-e.currentLeft),a({animStart:e.currentLeft}).animate({animStart:b},{duration:e.options.speed,easing:e.options.easing,step:function(a){a=Math.ceil(a),e.options.vertical===!1?(d[e.animType]="translate("+a+"px, 0px)",e.$slideTrack.css(d)):(d[e.animType]="translate(0px,"+a+"px)",e.$slideTrack.css(d))},complete:function(){c&&c.call()}})):(e.applyTransition(),b=Math.ceil(b),e.options.vertical===!1?d[e.animType]="translate3d("+b+"px, 0px, 0px)":d[e.animType]="translate3d(0px,"+b+"px, 0px)",e.$slideTrack.css(d),c&&setTimeout(function(){e.disableTransition(),c.call()},e.options.speed))},b.prototype.getNavTarget=function(){var b=this,c=b.options.asNavFor;return c&&null!==c&&(c=a(c).not(b.$slider)),c},b.prototype.asNavFor=function(b){var c=this,d=c.getNavTarget();null!==d&&"object"==typeof d&&d.each(function(){var c=a(this).slick("getSlick");c.unslicked||c.slideHandler(b,!0)})},b.prototype.applyTransition=function(a){var b=this,c={};b.options.fade===!1?c[b.transitionType]=b.transformType+" "+b.options.speed+"ms "+b.options.cssEase:c[b.transitionType]="opacity "+b.options.speed+"ms "+b.options.cssEase,b.options.fade===!1?b.$slideTrack.css(c):b.$slides.eq(a).css(c)},b.prototype.autoPlay=function(){var a=this;a.autoPlayClear(),a.slideCount>a.options.slidesToShow&&(a.autoPlayTimer=setInterval(a.autoPlayIterator,a.options.autoplaySpeed))},b.prototype.autoPlayClear=function(){var a=this;a.autoPlayTimer&&clearInterval(a.autoPlayTimer)},b.prototype.autoPlayIterator=function(){var a=this,b=a.currentSlide+a.options.slidesToScroll;a.paused||a.interrupted||a.focussed||(a.options.infinite===!1&&(1===a.direction&&a.currentSlide+1===a.slideCount-1?a.direction=0:0===a.direction&&(b=a.currentSlide-a.options.slidesToScroll,a.currentSlide-1===0&&(a.direction=1))),a.slideHandler(b))},b.prototype.buildArrows=function(){var b=this;b.options.arrows===!0&&(b.$prevArrow=a(b.options.prevArrow).addClass("slick-arrow"),b.$nextArrow=a(b.options.nextArrow).addClass("slick-arrow"),b.slideCount>b.options.slidesToShow?(b.$prevArrow.removeClass("slick-hidden").removeAttr("aria-hidden tabindex"),b.$nextArrow.removeClass("slick-hidden").removeAttr("aria-hidden tabindex"),b.htmlExpr.test(b.options.prevArrow)&&b.$prevArrow.prependTo(b.options.appendArrows),b.htmlExpr.test(b.options.nextArrow)&&b.$nextArrow.appendTo(b.options.appendArrows),b.options.infinite!==!0&&b.$prevArrow.addClass("slick-disabled").attr("aria-disabled","true")):b.$prevArrow.add(b.$nextArrow).addClass("slick-hidden").attr({"aria-disabled":"true",tabindex:"-1"}))},b.prototype.buildDots=function(){var c,d,b=this;if(b.options.dots===!0&&b.slideCount>b.options.slidesToShow){for(b.$slider.addClass("slick-dotted"),d=a("<ul />").addClass(b.options.dotsClass),c=0;c<=b.getDotCount();c+=1)d.append(a("<li />").append(b.options.customPaging.call(this,b,c)));b.$dots=d.appendTo(b.options.appendDots),b.$dots.find("li").first().addClass("slick-active").attr("aria-hidden","false")}},b.prototype.buildOut=function(){var b=this;b.$slides=b.$slider.children(b.options.slide+":not(.slick-cloned)").addClass("slick-slide"),b.slideCount=b.$slides.length,b.$slides.each(function(b,c){a(c).attr("data-slick-index",b).data("originalStyling",a(c).attr("style")||"")}),b.$slider.addClass("slick-slider"),b.$slideTrack=0===b.slideCount?a('<div class="slick-track"/>').appendTo(b.$slider):b.$slides.wrapAll('<div class="slick-track"/>').parent(),b.$list=b.$slideTrack.wrap('<div aria-live="polite" class="slick-list"/>').parent(),b.$slideTrack.css("opacity",0),(b.options.centerMode===!0||b.options.swipeToSlide===!0)&&(b.options.slidesToScroll=1),a("img[data-lazy]",b.$slider).not("[src]").addClass("slick-loading"),b.setupInfinite(),b.buildArrows(),b.buildDots(),b.updateDots(),b.setSlideClasses("number"==typeof b.currentSlide?b.currentSlide:0),b.options.draggable===!0&&b.$list.addClass("draggable")},b.prototype.buildRows=function(){var b,c,d,e,f,g,h,a=this;if(e=document.createDocumentFragment(),g=a.$slider.children(),a.options.rows>1){for(h=a.options.slidesPerRow*a.options.rows,f=Math.ceil(g.length/h),b=0;f>b;b++){var i=document.createElement("div");for(c=0;c<a.options.rows;c++){var j=document.createElement("div");for(d=0;d<a.options.slidesPerRow;d++){var k=b*h+(c*a.options.slidesPerRow+d);g.get(k)&&j.appendChild(g.get(k))}i.appendChild(j)}e.appendChild(i)}a.$slider.empty().append(e),a.$slider.children().children().children().css({width:100/a.options.slidesPerRow+"%",display:"inline-block"})}},b.prototype.checkResponsive=function(b,c){var e,f,g,d=this,h=!1,i=d.$slider.width(),j=window.innerWidth||a(window).width();if("window"===d.respondTo?g=j:"slider"===d.respondTo?g=i:"min"===d.respondTo&&(g=Math.min(j,i)),d.options.responsive&&d.options.responsive.length&&null!==d.options.responsive){f=null;for(e in d.breakpoints)d.breakpoints.hasOwnProperty(e)&&(d.originalSettings.mobileFirst===!1?g<d.breakpoints[e]&&(f=d.breakpoints[e]):g>d.breakpoints[e]&&(f=d.breakpoints[e]));null!==f?null!==d.activeBreakpoint?(f!==d.activeBreakpoint||c)&&(d.activeBreakpoint=f,"unslick"===d.breakpointSettings[f]?d.unslick(f):(d.options=a.extend({},d.originalSettings,d.breakpointSettings[f]),b===!0&&(d.currentSlide=d.options.initialSlide),d.refresh(b)),h=f):(d.activeBreakpoint=f,"unslick"===d.breakpointSettings[f]?d.unslick(f):(d.options=a.extend({},d.originalSettings,d.breakpointSettings[f]),b===!0&&(d.currentSlide=d.options.initialSlide),d.refresh(b)),h=f):null!==d.activeBreakpoint&&(d.activeBreakpoint=null,d.options=d.originalSettings,b===!0&&(d.currentSlide=d.options.initialSlide),d.refresh(b),h=f),b||h===!1||d.$slider.trigger("breakpoint",[d,h])}},b.prototype.changeSlide=function(b,c){var f,g,h,d=this,e=a(b.currentTarget);switch(e.is("a")&&b.preventDefault(),e.is("li")||(e=e.closest("li")),h=d.slideCount%d.options.slidesToScroll!==0,f=h?0:(d.slideCount-d.currentSlide)%d.options.slidesToScroll,b.data.message){case"previous":g=0===f?d.options.slidesToScroll:d.options.slidesToShow-f,d.slideCount>d.options.slidesToShow&&d.slideHandler(d.currentSlide-g,!1,c);break;case"next":g=0===f?d.options.slidesToScroll:f,d.slideCount>d.options.slidesToShow&&d.slideHandler(d.currentSlide+g,!1,c);break;case"index":var i=0===b.data.index?0:b.data.index||e.index()*d.options.slidesToScroll;d.slideHandler(d.checkNavigable(i),!1,c),e.children().trigger("focus");break;default:return}},b.prototype.checkNavigable=function(a){var c,d,b=this;if(c=b.getNavigableIndexes(),d=0,a>c[c.length-1])a=c[c.length-1];else for(var e in c){if(a<c[e]){a=d;break}d=c[e]}return a},b.prototype.cleanUpEvents=function(){var b=this;b.options.dots&&null!==b.$dots&&a("li",b.$dots).off("click.slick",b.changeSlide).off("mouseenter.slick",a.proxy(b.interrupt,b,!0)).off("mouseleave.slick",a.proxy(b.interrupt,b,!1)),b.$slider.off("focus.slick blur.slick"),b.options.arrows===!0&&b.slideCount>b.options.slidesToShow&&(b.$prevArrow&&b.$prevArrow.off("click.slick",b.changeSlide),b.$nextArrow&&b.$nextArrow.off("click.slick",b.changeSlide)),b.$list.off("touchstart.slick mousedown.slick",b.swipeHandler),b.$list.off("touchmove.slick mousemove.slick",b.swipeHandler),b.$list.off("touchend.slick mouseup.slick",b.swipeHandler),b.$list.off("touchcancel.slick mouseleave.slick",b.swipeHandler),b.$list.off("click.slick",b.clickHandler),a(document).off(b.visibilityChange,b.visibility),b.cleanUpSlideEvents(),b.options.accessibility===!0&&b.$list.off("keydown.slick",b.keyHandler),b.options.focusOnSelect===!0&&a(b.$slideTrack).children().off("click.slick",b.selectHandler),a(window).off("orientationchange.slick.slick-"+b.instanceUid,b.orientationChange),a(window).off("resize.slick.slick-"+b.instanceUid,b.resize),a("[draggable!=true]",b.$slideTrack).off("dragstart",b.preventDefault),a(window).off("load.slick.slick-"+b.instanceUid,b.setPosition),a(document).off("ready.slick.slick-"+b.instanceUid,b.setPosition)},b.prototype.cleanUpSlideEvents=function(){var b=this;b.$list.off("mouseenter.slick",a.proxy(b.interrupt,b,!0)),b.$list.off("mouseleave.slick",a.proxy(b.interrupt,b,!1))},b.prototype.cleanUpRows=function(){var b,a=this;a.options.rows>1&&(b=a.$slides.children().children(),b.removeAttr("style"),a.$slider.empty().append(b))},b.prototype.clickHandler=function(a){var b=this;b.shouldClick===!1&&(a.stopImmediatePropagation(),a.stopPropagation(),a.preventDefault())},b.prototype.destroy=function(b){var c=this;c.autoPlayClear(),c.touchObject={},c.cleanUpEvents(),a(".slick-cloned",c.$slider).detach(),c.$dots&&c.$dots.remove(),c.$prevArrow&&c.$prevArrow.length&&(c.$prevArrow.removeClass("slick-disabled slick-arrow slick-hidden").removeAttr("aria-hidden aria-disabled tabindex").css("display",""),c.htmlExpr.test(c.options.prevArrow)&&c.$prevArrow.remove()),c.$nextArrow&&c.$nextArrow.length&&(c.$nextArrow.removeClass("slick-disabled slick-arrow slick-hidden").removeAttr("aria-hidden aria-disabled tabindex").css("display",""),c.htmlExpr.test(c.options.nextArrow)&&c.$nextArrow.remove()),c.$slides&&(c.$slides.removeClass("slick-slide slick-active slick-center slick-visible slick-current").removeAttr("aria-hidden").removeAttr("data-slick-index").each(function(){a(this).attr("style",a(this).data("originalStyling"))}),c.$slideTrack.children(this.options.slide).detach(),c.$slideTrack.detach(),c.$list.detach(),c.$slider.append(c.$slides)),c.cleanUpRows(),c.$slider.removeClass("slick-slider"),c.$slider.removeClass("slick-initialized"),c.$slider.removeClass("slick-dotted"),c.unslicked=!0,b||c.$slider.trigger("destroy",[c])},b.prototype.disableTransition=function(a){var b=this,c={};c[b.transitionType]="",b.options.fade===!1?b.$slideTrack.css(c):b.$slides.eq(a).css(c)},b.prototype.fadeSlide=function(a,b){var c=this;c.cssTransitions===!1?(c.$slides.eq(a).css({zIndex:c.options.zIndex}),c.$slides.eq(a).animate({opacity:1},c.options.speed,c.options.easing,b)):(c.applyTransition(a),c.$slides.eq(a).css({opacity:1,zIndex:c.options.zIndex}),b&&setTimeout(function(){c.disableTransition(a),b.call()},c.options.speed))},b.prototype.fadeSlideOut=function(a){var b=this;b.cssTransitions===!1?b.$slides.eq(a).animate({opacity:0,zIndex:b.options.zIndex-2},b.options.speed,b.options.easing):(b.applyTransition(a),b.$slides.eq(a).css({opacity:0,zIndex:b.options.zIndex-2}))},b.prototype.filterSlides=b.prototype.slickFilter=function(a){var b=this;null!==a&&(b.$slidesCache=b.$slides,b.unload(),b.$slideTrack.children(this.options.slide).detach(),b.$slidesCache.filter(a).appendTo(b.$slideTrack),b.reinit())},b.prototype.focusHandler=function(){var b=this;b.$slider.off("focus.slick blur.slick").on("focus.slick blur.slick","*:not(.slick-arrow)",function(c){c.stopImmediatePropagation();var d=a(this);setTimeout(function(){b.options.pauseOnFocus&&(b.focussed=d.is(":focus"),b.autoPlay())},0)})},b.prototype.getCurrent=b.prototype.slickCurrentSlide=function(){var a=this;return a.currentSlide},b.prototype.getDotCount=function(){var a=this,b=0,c=0,d=0;if(a.options.infinite===!0)for(;b<a.slideCount;)++d,b=c+a.options.slidesToScroll,c+=a.options.slidesToScroll<=a.options.slidesToShow?a.options.slidesToScroll:a.options.slidesToShow;else if(a.options.centerMode===!0)d=a.slideCount;else if(a.options.asNavFor)for(;b<a.slideCount;)++d,b=c+a.options.slidesToScroll,c+=a.options.slidesToScroll<=a.options.slidesToShow?a.options.slidesToScroll:a.options.slidesToShow;else d=1+Math.ceil((a.slideCount-a.options.slidesToShow)/a.options.slidesToScroll);return d-1},b.prototype.getLeft=function(a){var c,d,f,b=this,e=0;return b.slideOffset=0,d=b.$slides.first().outerHeight(!0),b.options.infinite===!0?(b.slideCount>b.options.slidesToShow&&(b.slideOffset=b.slideWidth*b.options.slidesToShow*-1,e=d*b.options.slidesToShow*-1),b.slideCount%b.options.slidesToScroll!==0&&a+b.options.slidesToScroll>b.slideCount&&b.slideCount>b.options.slidesToShow&&(a>b.slideCount?(b.slideOffset=(b.options.slidesToShow-(a-b.slideCount))*b.slideWidth*-1,e=(b.options.slidesToShow-(a-b.slideCount))*d*-1):(b.slideOffset=b.slideCount%b.options.slidesToScroll*b.slideWidth*-1,e=b.slideCount%b.options.slidesToScroll*d*-1))):a+b.options.slidesToShow>b.slideCount&&(b.slideOffset=(a+b.options.slidesToShow-b.slideCount)*b.slideWidth,e=(a+b.options.slidesToShow-b.slideCount)*d),b.slideCount<=b.options.slidesToShow&&(b.slideOffset=0,e=0),b.options.centerMode===!0&&b.options.infinite===!0?b.slideOffset+=b.slideWidth*Math.floor(b.options.slidesToShow/2)-b.slideWidth:b.options.centerMode===!0&&(b.slideOffset=0,b.slideOffset+=b.slideWidth*Math.floor(b.options.slidesToShow/2)),c=b.options.vertical===!1?a*b.slideWidth*-1+b.slideOffset:a*d*-1+e,b.options.variableWidth===!0&&(f=b.slideCount<=b.options.slidesToShow||b.options.infinite===!1?b.$slideTrack.children(".slick-slide").eq(a):b.$slideTrack.children(".slick-slide").eq(a+b.options.slidesToShow),c=b.options.rtl===!0?f[0]?-1*(b.$slideTrack.width()-f[0].offsetLeft-f.width()):0:f[0]?-1*f[0].offsetLeft:0,b.options.centerMode===!0&&(f=b.slideCount<=b.options.slidesToShow||b.options.infinite===!1?b.$slideTrack.children(".slick-slide").eq(a):b.$slideTrack.children(".slick-slide").eq(a+b.options.slidesToShow+1),c=b.options.rtl===!0?f[0]?-1*(b.$slideTrack.width()-f[0].offsetLeft-f.width()):0:f[0]?-1*f[0].offsetLeft:0,c+=(b.$list.width()-f.outerWidth())/2)),c},b.prototype.getOption=b.prototype.slickGetOption=function(a){var b=this;return b.options[a]},b.prototype.getNavigableIndexes=function(){var e,a=this,b=0,c=0,d=[];for(a.options.infinite===!1?e=a.slideCount:(b=-1*a.options.slidesToScroll,c=-1*a.options.slidesToScroll,e=2*a.slideCount);e>b;)d.push(b),b=c+a.options.slidesToScroll,c+=a.options.slidesToScroll<=a.options.slidesToShow?a.options.slidesToScroll:a.options.slidesToShow;return d},b.prototype.getSlick=function(){return this},b.prototype.getSlideCount=function(){var c,d,e,b=this;return e=b.options.centerMode===!0?b.slideWidth*Math.floor(b.options.slidesToShow/2):0,b.options.swipeToSlide===!0?(b.$slideTrack.find(".slick-slide").each(function(c,f){return f.offsetLeft-e+a(f).outerWidth()/2>-1*b.swipeLeft?(d=f,!1):void 0}),c=Math.abs(a(d).attr("data-slick-index")-b.currentSlide)||1):b.options.slidesToScroll},b.prototype.goTo=b.prototype.slickGoTo=function(a,b){var c=this;c.changeSlide({data:{message:"index",index:parseInt(a)}},b)},b.prototype.init=function(b){var c=this;a(c.$slider).hasClass("slick-initialized")||(a(c.$slider).addClass("slick-initialized"),c.buildRows(),c.buildOut(),c.setProps(),c.startLoad(),c.loadSlider(),c.initializeEvents(),c.updateArrows(),c.updateDots(),c.checkResponsive(!0),c.focusHandler()),b&&c.$slider.trigger("init",[c]),c.options.accessibility===!0&&c.initADA(),c.options.autoplay&&(c.paused=!1,c.autoPlay())},b.prototype.initADA=function(){var b=this;b.$slides.add(b.$slideTrack.find(".slick-cloned")).attr({"aria-hidden":"true",tabindex:"-1"}).find("a, input, button, select").attr({tabindex:"-1"}),b.$slideTrack.attr("role","listbox"),b.$slides.not(b.$slideTrack.find(".slick-cloned")).each(function(c){a(this).attr({role:"option","aria-describedby":"slick-slide"+b.instanceUid+c})}),null!==b.$dots&&b.$dots.attr("role","tablist").find("li").each(function(c){a(this).attr({role:"presentation","aria-selected":"false","aria-controls":"navigation"+b.instanceUid+c,id:"slick-slide"+b.instanceUid+c})}).first().attr("aria-selected","true").end().find("button").attr("role","button").end().closest("div").attr("role","toolbar"),b.activateADA()},b.prototype.initArrowEvents=function(){var a=this;a.options.arrows===!0&&a.slideCount>a.options.slidesToShow&&(a.$prevArrow.off("click.slick").on("click.slick",{message:"previous"},a.changeSlide),a.$nextArrow.off("click.slick").on("click.slick",{message:"next"},a.changeSlide))},b.prototype.initDotEvents=function(){var b=this;b.options.dots===!0&&b.slideCount>b.options.slidesToShow&&a("li",b.$dots).on("click.slick",{message:"index"},b.changeSlide),b.options.dots===!0&&b.options.pauseOnDotsHover===!0&&a("li",b.$dots).on("mouseenter.slick",a.proxy(b.interrupt,b,!0)).on("mouseleave.slick",a.proxy(b.interrupt,b,!1))},b.prototype.initSlideEvents=function(){var b=this;b.options.pauseOnHover&&(b.$list.on("mouseenter.slick",a.proxy(b.interrupt,b,!0)),b.$list.on("mouseleave.slick",a.proxy(b.interrupt,b,!1)))},b.prototype.initializeEvents=function(){var b=this;b.initArrowEvents(),b.initDotEvents(),b.initSlideEvents(),b.$list.on("touchstart.slick mousedown.slick",{action:"start"},b.swipeHandler),b.$list.on("touchmove.slick mousemove.slick",{action:"move"},b.swipeHandler),b.$list.on("touchend.slick mouseup.slick",{action:"end"},b.swipeHandler),b.$list.on("touchcancel.slick mouseleave.slick",{action:"end"},b.swipeHandler),b.$list.on("click.slick",b.clickHandler),a(document).on(b.visibilityChange,a.proxy(b.visibility,b)),b.options.accessibility===!0&&b.$list.on("keydown.slick",b.keyHandler),b.options.focusOnSelect===!0&&a(b.$slideTrack).children().on("click.slick",b.selectHandler),a(window).on("orientationchange.slick.slick-"+b.instanceUid,a.proxy(b.orientationChange,b)),a(window).on("resize.slick.slick-"+b.instanceUid,a.proxy(b.resize,b)),a("[draggable!=true]",b.$slideTrack).on("dragstart",b.preventDefault),a(window).on("load.slick.slick-"+b.instanceUid,b.setPosition),a(document).on("ready.slick.slick-"+b.instanceUid,b.setPosition)},b.prototype.initUI=function(){var a=this;a.options.arrows===!0&&a.slideCount>a.options.slidesToShow&&(a.$prevArrow.show(),a.$nextArrow.show()),a.options.dots===!0&&a.slideCount>a.options.slidesToShow&&a.$dots.show()},b.prototype.keyHandler=function(a){var b=this;a.target.tagName.match("TEXTAREA|INPUT|SELECT")||(37===a.keyCode&&b.options.accessibility===!0?b.changeSlide({data:{message:b.options.rtl===!0?"next":"previous"}}):39===a.keyCode&&b.options.accessibility===!0&&b.changeSlide({data:{message:b.options.rtl===!0?"previous":"next"}}))},b.prototype.lazyLoad=function(){function g(c){a("img[data-lazy]",c).each(function(){var c=a(this),d=a(this).attr("data-lazy"),e=document.createElement("img");e.onload=function(){c.animate({opacity:0},100,function(){c.attr("src",d).animate({opacity:1},200,function(){c.removeAttr("data-lazy").removeClass("slick-loading")}),b.$slider.trigger("lazyLoaded",[b,c,d])})},e.onerror=function(){c.removeAttr("data-lazy").removeClass("slick-loading").addClass("slick-lazyload-error"),b.$slider.trigger("lazyLoadError",[b,c,d])},e.src=d})}var c,d,e,f,b=this;b.options.centerMode===!0?b.options.infinite===!0?(e=b.currentSlide+(b.options.slidesToShow/2+1),f=e+b.options.slidesToShow+2):(e=Math.max(0,b.currentSlide-(b.options.slidesToShow/2+1)),f=2+(b.options.slidesToShow/2+1)+b.currentSlide):(e=b.options.infinite?b.options.slidesToShow+b.currentSlide:b.currentSlide,f=Math.ceil(e+b.options.slidesToShow),b.options.fade===!0&&(e>0&&e--,f<=b.slideCount&&f++)),c=b.$slider.find(".slick-slide").slice(e,f),g(c),b.slideCount<=b.options.slidesToShow?(d=b.$slider.find(".slick-slide"),g(d)):b.currentSlide>=b.slideCount-b.options.slidesToShow?(d=b.$slider.find(".slick-cloned").slice(0,b.options.slidesToShow),g(d)):0===b.currentSlide&&(d=b.$slider.find(".slick-cloned").slice(-1*b.options.slidesToShow),g(d))},b.prototype.loadSlider=function(){var a=this;a.setPosition(),a.$slideTrack.css({opacity:1}),a.$slider.removeClass("slick-loading"),a.initUI(),"progressive"===a.options.lazyLoad&&a.progressiveLazyLoad()},b.prototype.next=b.prototype.slickNext=function(){var a=this;a.changeSlide({data:{message:"next"}})},b.prototype.orientationChange=function(){var a=this;a.checkResponsive(),a.setPosition()},b.prototype.pause=b.prototype.slickPause=function(){var a=this;a.autoPlayClear(),a.paused=!0},b.prototype.play=b.prototype.slickPlay=function(){var a=this;a.autoPlay(),a.options.autoplay=!0,a.paused=!1,a.focussed=!1,a.interrupted=!1},b.prototype.postSlide=function(a){var b=this;b.unslicked||(b.$slider.trigger("afterChange",[b,a]),b.animating=!1,b.setPosition(),b.swipeLeft=null,b.options.autoplay&&b.autoPlay(),b.options.accessibility===!0&&b.initADA())},b.prototype.prev=b.prototype.slickPrev=function(){var a=this;a.changeSlide({data:{message:"previous"}})},b.prototype.preventDefault=function(a){a.preventDefault()},b.prototype.progressiveLazyLoad=function(b){b=b||1;var e,f,g,c=this,d=a("img[data-lazy]",c.$slider);d.length?(e=d.first(),f=e.attr("data-lazy"),g=document.createElement("img"),g.onload=function(){e.attr("src",f).removeAttr("data-lazy").removeClass("slick-loading"),c.options.adaptiveHeight===!0&&c.setPosition(),c.$slider.trigger("lazyLoaded",[c,e,f]),c.progressiveLazyLoad()},g.onerror=function(){3>b?setTimeout(function(){c.progressiveLazyLoad(b+1)},500):(e.removeAttr("data-lazy").removeClass("slick-loading").addClass("slick-lazyload-error"),c.$slider.trigger("lazyLoadError",[c,e,f]),c.progressiveLazyLoad())},g.src=f):c.$slider.trigger("allImagesLoaded",[c])},b.prototype.refresh=function(b){var d,e,c=this;e=c.slideCount-c.options.slidesToShow,!c.options.infinite&&c.currentSlide>e&&(c.currentSlide=e),c.slideCount<=c.options.slidesToShow&&(c.currentSlide=0),d=c.currentSlide,c.destroy(!0),a.extend(c,c.initials,{currentSlide:d}),c.init(),b||c.changeSlide({data:{message:"index",index:d}},!1)},b.prototype.registerBreakpoints=function(){var c,d,e,b=this,f=b.options.responsive||null;if("array"===a.type(f)&&f.length){b.respondTo=b.options.respondTo||"window";for(c in f)if(e=b.breakpoints.length-1,d=f[c].breakpoint,f.hasOwnProperty(c)){for(;e>=0;)b.breakpoints[e]&&b.breakpoints[e]===d&&b.breakpoints.splice(e,1),e--;b.breakpoints.push(d),b.breakpointSettings[d]=f[c].settings}b.breakpoints.sort(function(a,c){return b.options.mobileFirst?a-c:c-a})}},b.prototype.reinit=function(){var b=this;b.$slides=b.$slideTrack.children(b.options.slide).addClass("slick-slide"),b.slideCount=b.$slides.length,b.currentSlide>=b.slideCount&&0!==b.currentSlide&&(b.currentSlide=b.currentSlide-b.options.slidesToScroll),b.slideCount<=b.options.slidesToShow&&(b.currentSlide=0),b.registerBreakpoints(),b.setProps(),b.setupInfinite(),b.buildArrows(),b.updateArrows(),b.initArrowEvents(),b.buildDots(),b.updateDots(),b.initDotEvents(),b.cleanUpSlideEvents(),b.initSlideEvents(),b.checkResponsive(!1,!0),b.options.focusOnSelect===!0&&a(b.$slideTrack).children().on("click.slick",b.selectHandler),b.setSlideClasses("number"==typeof b.currentSlide?b.currentSlide:0),b.setPosition(),b.focusHandler(),b.paused=!b.options.autoplay,b.autoPlay(),b.$slider.trigger("reInit",[b])},b.prototype.resize=function(){var b=this;a(window).width()!==b.windowWidth&&(clearTimeout(b.windowDelay),b.windowDelay=window.setTimeout(function(){b.windowWidth=a(window).width(),b.checkResponsive(),b.unslicked||b.setPosition()},50))},b.prototype.removeSlide=b.prototype.slickRemove=function(a,b,c){var d=this;return"boolean"==typeof a?(b=a,a=b===!0?0:d.slideCount-1):a=b===!0?--a:a,d.slideCount<1||0>a||a>d.slideCount-1?!1:(d.unload(),c===!0?d.$slideTrack.children().remove():d.$slideTrack.children(this.options.slide).eq(a).remove(),d.$slides=d.$slideTrack.children(this.options.slide),d.$slideTrack.children(this.options.slide).detach(),d.$slideTrack.append(d.$slides),d.$slidesCache=d.$slides,void d.reinit())},b.prototype.setCSS=function(a){var d,e,b=this,c={};b.options.rtl===!0&&(a=-a),d="left"==b.positionProp?Math.ceil(a)+"px":"0px",e="top"==b.positionProp?Math.ceil(a)+"px":"0px",c[b.positionProp]=a,b.transformsEnabled===!1?b.$slideTrack.css(c):(c={},b.cssTransitions===!1?(c[b.animType]="translate("+d+", "+e+")",b.$slideTrack.css(c)):(c[b.animType]="translate3d("+d+", "+e+", 0px)",b.$slideTrack.css(c)))},b.prototype.setDimensions=function(){var a=this;a.options.vertical===!1?a.options.centerMode===!0&&a.$list.css({padding:"0px "+a.options.centerPadding}):(a.$list.height(a.$slides.first().outerHeight(!0)*a.options.slidesToShow),a.options.centerMode===!0&&a.$list.css({padding:a.options.centerPadding+" 0px"})),a.listWidth=a.$list.width(),a.listHeight=a.$list.height(),a.options.vertical===!1&&a.options.variableWidth===!1?(a.slideWidth=Math.ceil(a.listWidth/a.options.slidesToShow),a.$slideTrack.width(Math.ceil(a.slideWidth*a.$slideTrack.children(".slick-slide").length))):a.options.variableWidth===!0?a.$slideTrack.width(5e3*a.slideCount):(a.slideWidth=Math.ceil(a.listWidth),a.$slideTrack.height(Math.ceil(a.$slides.first().outerHeight(!0)*a.$slideTrack.children(".slick-slide").length)));var b=a.$slides.first().outerWidth(!0)-a.$slides.first().width();a.options.variableWidth===!1&&a.$slideTrack.children(".slick-slide").width(a.slideWidth-b)},b.prototype.setFade=function(){var c,b=this;b.$slides.each(function(d,e){c=b.slideWidth*d*-1,b.options.rtl===!0?a(e).css({position:"relative",right:c,top:0,zIndex:b.options.zIndex-2,opacity:0}):a(e).css({position:"relative",left:c,top:0,zIndex:b.options.zIndex-2,opacity:0})}),b.$slides.eq(b.currentSlide).css({zIndex:b.options.zIndex-1,opacity:1})},b.prototype.setHeight=function(){var a=this;if(1===a.options.slidesToShow&&a.options.adaptiveHeight===!0&&a.options.vertical===!1){var b=a.$slides.eq(a.currentSlide).outerHeight(!0);a.$list.css("height",b)}},b.prototype.setOption=b.prototype.slickSetOption=function(){var c,d,e,f,h,b=this,g=!1;if("object"===a.type(arguments[0])?(e=arguments[0],g=arguments[1],h="multiple"):"string"===a.type(arguments[0])&&(e=arguments[0],f=arguments[1],g=arguments[2],"responsive"===arguments[0]&&"array"===a.type(arguments[1])?h="responsive":"undefined"!=typeof arguments[1]&&(h="single")),"single"===h)b.options[e]=f;else if("multiple"===h)a.each(e,function(a,c){b.options[a]=c});else if("responsive"===h)for(d in f)if("array"!==a.type(b.options.responsive))b.options.responsive=[f[d]];else{for(c=b.options.responsive.length-1;c>=0;)b.options.responsive[c].breakpoint===f[d].breakpoint&&b.options.responsive.splice(c,1),c--;b.options.responsive.push(f[d])}g&&(b.unload(),b.reinit())},b.prototype.setPosition=function(){var a=this;a.setDimensions(),a.setHeight(),a.options.fade===!1?a.setCSS(a.getLeft(a.currentSlide)):a.setFade(),a.$slider.trigger("setPosition",[a])},b.prototype.setProps=function(){var a=this,b=document.body.style;a.positionProp=a.options.vertical===!0?"top":"left","top"===a.positionProp?a.$slider.addClass("slick-vertical"):a.$slider.removeClass("slick-vertical"),(void 0!==b.WebkitTransition||void 0!==b.MozTransition||void 0!==b.msTransition)&&a.options.useCSS===!0&&(a.cssTransitions=!0),a.options.fade&&("number"==typeof a.options.zIndex?a.options.zIndex<3&&(a.options.zIndex=3):a.options.zIndex=a.defaults.zIndex),void 0!==b.OTransform&&(a.animType="OTransform",a.transformType="-o-transform",a.transitionType="OTransition",void 0===b.perspectiveProperty&&void 0===b.webkitPerspective&&(a.animType=!1)),void 0!==b.MozTransform&&(a.animType="MozTransform",a.transformType="-moz-transform",a.transitionType="MozTransition",void 0===b.perspectiveProperty&&void 0===b.MozPerspective&&(a.animType=!1)),void 0!==b.webkitTransform&&(a.animType="webkitTransform",a.transformType="-webkit-transform",a.transitionType="webkitTransition",void 0===b.perspectiveProperty&&void 0===b.webkitPerspective&&(a.animType=!1)),void 0!==b.msTransform&&(a.animType="msTransform",a.transformType="-ms-transform",a.transitionType="msTransition",void 0===b.msTransform&&(a.animType=!1)),void 0!==b.transform&&a.animType!==!1&&(a.animType="transform",a.transformType="transform",a.transitionType="transition"),a.transformsEnabled=a.options.useTransform&&null!==a.animType&&a.animType!==!1},b.prototype.setSlideClasses=function(a){var c,d,e,f,b=this;d=b.$slider.find(".slick-slide").removeClass("slick-active slick-center slick-current").attr("aria-hidden","true"),b.$slides.eq(a).addClass("slick-current"),b.options.centerMode===!0?(c=Math.floor(b.options.slidesToShow/2),b.options.infinite===!0&&(a>=c&&a<=b.slideCount-1-c?b.$slides.slice(a-c,a+c+1).addClass("slick-active").attr("aria-hidden","false"):(e=b.options.slidesToShow+a,
+d.slice(e-c+1,e+c+2).addClass("slick-active").attr("aria-hidden","false")),0===a?d.eq(d.length-1-b.options.slidesToShow).addClass("slick-center"):a===b.slideCount-1&&d.eq(b.options.slidesToShow).addClass("slick-center")),b.$slides.eq(a).addClass("slick-center")):a>=0&&a<=b.slideCount-b.options.slidesToShow?b.$slides.slice(a,a+b.options.slidesToShow).addClass("slick-active").attr("aria-hidden","false"):d.length<=b.options.slidesToShow?d.addClass("slick-active").attr("aria-hidden","false"):(f=b.slideCount%b.options.slidesToShow,e=b.options.infinite===!0?b.options.slidesToShow+a:a,b.options.slidesToShow==b.options.slidesToScroll&&b.slideCount-a<b.options.slidesToShow?d.slice(e-(b.options.slidesToShow-f),e+f).addClass("slick-active").attr("aria-hidden","false"):d.slice(e,e+b.options.slidesToShow).addClass("slick-active").attr("aria-hidden","false")),"ondemand"===b.options.lazyLoad&&b.lazyLoad()},b.prototype.setupInfinite=function(){var c,d,e,b=this;if(b.options.fade===!0&&(b.options.centerMode=!1),b.options.infinite===!0&&b.options.fade===!1&&(d=null,b.slideCount>b.options.slidesToShow)){for(e=b.options.centerMode===!0?b.options.slidesToShow+1:b.options.slidesToShow,c=b.slideCount;c>b.slideCount-e;c-=1)d=c-1,a(b.$slides[d]).clone(!0).attr("id","").attr("data-slick-index",d-b.slideCount).prependTo(b.$slideTrack).addClass("slick-cloned");for(c=0;e>c;c+=1)d=c,a(b.$slides[d]).clone(!0).attr("id","").attr("data-slick-index",d+b.slideCount).appendTo(b.$slideTrack).addClass("slick-cloned");b.$slideTrack.find(".slick-cloned").find("[id]").each(function(){a(this).attr("id","")})}},b.prototype.interrupt=function(a){var b=this;a||b.autoPlay(),b.interrupted=a},b.prototype.selectHandler=function(b){var c=this,d=a(b.target).is(".slick-slide")?a(b.target):a(b.target).parents(".slick-slide"),e=parseInt(d.attr("data-slick-index"));return e||(e=0),c.slideCount<=c.options.slidesToShow?(c.setSlideClasses(e),void c.asNavFor(e)):void c.slideHandler(e)},b.prototype.slideHandler=function(a,b,c){var d,e,f,g,j,h=null,i=this;return b=b||!1,i.animating===!0&&i.options.waitForAnimate===!0||i.options.fade===!0&&i.currentSlide===a||i.slideCount<=i.options.slidesToShow?void 0:(b===!1&&i.asNavFor(a),d=a,h=i.getLeft(d),g=i.getLeft(i.currentSlide),i.currentLeft=null===i.swipeLeft?g:i.swipeLeft,i.options.infinite===!1&&i.options.centerMode===!1&&(0>a||a>i.getDotCount()*i.options.slidesToScroll)?void(i.options.fade===!1&&(d=i.currentSlide,c!==!0?i.animateSlide(g,function(){i.postSlide(d)}):i.postSlide(d))):i.options.infinite===!1&&i.options.centerMode===!0&&(0>a||a>i.slideCount-i.options.slidesToScroll)?void(i.options.fade===!1&&(d=i.currentSlide,c!==!0?i.animateSlide(g,function(){i.postSlide(d)}):i.postSlide(d))):(i.options.autoplay&&clearInterval(i.autoPlayTimer),e=0>d?i.slideCount%i.options.slidesToScroll!==0?i.slideCount-i.slideCount%i.options.slidesToScroll:i.slideCount+d:d>=i.slideCount?i.slideCount%i.options.slidesToScroll!==0?0:d-i.slideCount:d,i.animating=!0,i.$slider.trigger("beforeChange",[i,i.currentSlide,e]),f=i.currentSlide,i.currentSlide=e,i.setSlideClasses(i.currentSlide),i.options.asNavFor&&(j=i.getNavTarget(),j=j.slick("getSlick"),j.slideCount<=j.options.slidesToShow&&j.setSlideClasses(i.currentSlide)),i.updateDots(),i.updateArrows(),i.options.fade===!0?(c!==!0?(i.fadeSlideOut(f),i.fadeSlide(e,function(){i.postSlide(e)})):i.postSlide(e),void i.animateHeight()):void(c!==!0?i.animateSlide(h,function(){i.postSlide(e)}):i.postSlide(e))))},b.prototype.startLoad=function(){var a=this;a.options.arrows===!0&&a.slideCount>a.options.slidesToShow&&(a.$prevArrow.hide(),a.$nextArrow.hide()),a.options.dots===!0&&a.slideCount>a.options.slidesToShow&&a.$dots.hide(),a.$slider.addClass("slick-loading")},b.prototype.swipeDirection=function(){var a,b,c,d,e=this;return a=e.touchObject.startX-e.touchObject.curX,b=e.touchObject.startY-e.touchObject.curY,c=Math.atan2(b,a),d=Math.round(180*c/Math.PI),0>d&&(d=360-Math.abs(d)),45>=d&&d>=0?e.options.rtl===!1?"left":"right":360>=d&&d>=315?e.options.rtl===!1?"left":"right":d>=135&&225>=d?e.options.rtl===!1?"right":"left":e.options.verticalSwiping===!0?d>=35&&135>=d?"down":"up":"vertical"},b.prototype.swipeEnd=function(a){var c,d,b=this;if(b.dragging=!1,b.interrupted=!1,b.shouldClick=b.touchObject.swipeLength>10?!1:!0,void 0===b.touchObject.curX)return!1;if(b.touchObject.edgeHit===!0&&b.$slider.trigger("edge",[b,b.swipeDirection()]),b.touchObject.swipeLength>=b.touchObject.minSwipe){switch(d=b.swipeDirection()){case"left":case"down":c=b.options.swipeToSlide?b.checkNavigable(b.currentSlide+b.getSlideCount()):b.currentSlide+b.getSlideCount(),b.currentDirection=0;break;case"right":case"up":c=b.options.swipeToSlide?b.checkNavigable(b.currentSlide-b.getSlideCount()):b.currentSlide-b.getSlideCount(),b.currentDirection=1}"vertical"!=d&&(b.slideHandler(c),b.touchObject={},b.$slider.trigger("swipe",[b,d]))}else b.touchObject.startX!==b.touchObject.curX&&(b.slideHandler(b.currentSlide),b.touchObject={})},b.prototype.swipeHandler=function(a){var b=this;if(!(b.options.swipe===!1||"ontouchend"in document&&b.options.swipe===!1||b.options.draggable===!1&&-1!==a.type.indexOf("mouse")))switch(b.touchObject.fingerCount=a.originalEvent&&void 0!==a.originalEvent.touches?a.originalEvent.touches.length:1,b.touchObject.minSwipe=b.listWidth/b.options.touchThreshold,b.options.verticalSwiping===!0&&(b.touchObject.minSwipe=b.listHeight/b.options.touchThreshold),a.data.action){case"start":b.swipeStart(a);break;case"move":b.swipeMove(a);break;case"end":b.swipeEnd(a)}},b.prototype.swipeMove=function(a){var d,e,f,g,h,b=this;return h=void 0!==a.originalEvent?a.originalEvent.touches:null,!b.dragging||h&&1!==h.length?!1:(d=b.getLeft(b.currentSlide),b.touchObject.curX=void 0!==h?h[0].pageX:a.clientX,b.touchObject.curY=void 0!==h?h[0].pageY:a.clientY,b.touchObject.swipeLength=Math.round(Math.sqrt(Math.pow(b.touchObject.curX-b.touchObject.startX,2))),b.options.verticalSwiping===!0&&(b.touchObject.swipeLength=Math.round(Math.sqrt(Math.pow(b.touchObject.curY-b.touchObject.startY,2)))),e=b.swipeDirection(),"vertical"!==e?(void 0!==a.originalEvent&&b.touchObject.swipeLength>4&&a.preventDefault(),g=(b.options.rtl===!1?1:-1)*(b.touchObject.curX>b.touchObject.startX?1:-1),b.options.verticalSwiping===!0&&(g=b.touchObject.curY>b.touchObject.startY?1:-1),f=b.touchObject.swipeLength,b.touchObject.edgeHit=!1,b.options.infinite===!1&&(0===b.currentSlide&&"right"===e||b.currentSlide>=b.getDotCount()&&"left"===e)&&(f=b.touchObject.swipeLength*b.options.edgeFriction,b.touchObject.edgeHit=!0),b.options.vertical===!1?b.swipeLeft=d+f*g:b.swipeLeft=d+f*(b.$list.height()/b.listWidth)*g,b.options.verticalSwiping===!0&&(b.swipeLeft=d+f*g),b.options.fade===!0||b.options.touchMove===!1?!1:b.animating===!0?(b.swipeLeft=null,!1):void b.setCSS(b.swipeLeft)):void 0)},b.prototype.swipeStart=function(a){var c,b=this;return b.interrupted=!0,1!==b.touchObject.fingerCount||b.slideCount<=b.options.slidesToShow?(b.touchObject={},!1):(void 0!==a.originalEvent&&void 0!==a.originalEvent.touches&&(c=a.originalEvent.touches[0]),b.touchObject.startX=b.touchObject.curX=void 0!==c?c.pageX:a.clientX,b.touchObject.startY=b.touchObject.curY=void 0!==c?c.pageY:a.clientY,void(b.dragging=!0))},b.prototype.unfilterSlides=b.prototype.slickUnfilter=function(){var a=this;null!==a.$slidesCache&&(a.unload(),a.$slideTrack.children(this.options.slide).detach(),a.$slidesCache.appendTo(a.$slideTrack),a.reinit())},b.prototype.unload=function(){var b=this;a(".slick-cloned",b.$slider).remove(),b.$dots&&b.$dots.remove(),b.$prevArrow&&b.htmlExpr.test(b.options.prevArrow)&&b.$prevArrow.remove(),b.$nextArrow&&b.htmlExpr.test(b.options.nextArrow)&&b.$nextArrow.remove(),b.$slides.removeClass("slick-slide slick-active slick-visible slick-current").attr("aria-hidden","true").css("width","")},b.prototype.unslick=function(a){var b=this;b.$slider.trigger("unslick",[b,a]),b.destroy()},b.prototype.updateArrows=function(){var b,a=this;b=Math.floor(a.options.slidesToShow/2),a.options.arrows===!0&&a.slideCount>a.options.slidesToShow&&!a.options.infinite&&(a.$prevArrow.removeClass("slick-disabled").attr("aria-disabled","false"),a.$nextArrow.removeClass("slick-disabled").attr("aria-disabled","false"),0===a.currentSlide?(a.$prevArrow.addClass("slick-disabled").attr("aria-disabled","true"),a.$nextArrow.removeClass("slick-disabled").attr("aria-disabled","false")):a.currentSlide>=a.slideCount-a.options.slidesToShow&&a.options.centerMode===!1?(a.$nextArrow.addClass("slick-disabled").attr("aria-disabled","true"),a.$prevArrow.removeClass("slick-disabled").attr("aria-disabled","false")):a.currentSlide>=a.slideCount-1&&a.options.centerMode===!0&&(a.$nextArrow.addClass("slick-disabled").attr("aria-disabled","true"),a.$prevArrow.removeClass("slick-disabled").attr("aria-disabled","false")))},b.prototype.updateDots=function(){var a=this;null!==a.$dots&&(a.$dots.find("li").removeClass("slick-active").attr("aria-hidden","true"),a.$dots.find("li").eq(Math.floor(a.currentSlide/a.options.slidesToScroll)).addClass("slick-active").attr("aria-hidden","false"))},b.prototype.visibility=function(){var a=this;a.options.autoplay&&(document[a.hidden]?a.interrupted=!0:a.interrupted=!1)},a.fn.slick=function(){var f,g,a=this,c=arguments[0],d=Array.prototype.slice.call(arguments,1),e=a.length;for(f=0;e>f;f++)if("object"==typeof c||"undefined"==typeof c?a[f].slick=new b(a[f],c):g=a[f].slick[c].apply(a[f].slick,d),"undefined"!=typeof g)return g;return a}});
\ No newline at end of file
diff --git a/slick/slick/slick.scss b/slick/slick/slick.scss
new file mode 100644 (file)
index 0000000..2fa0fb2
--- /dev/null
@@ -0,0 +1,98 @@
+/* Slider */
+
+.slick-slider {
+    position: relative;
+    display: block;
+    box-sizing: border-box;
+    -webkit-touch-callout: none;
+    -webkit-user-select: none;
+    -khtml-user-select: none;
+    -moz-user-select: none;
+    -ms-user-select: none;
+    user-select: none;
+    -ms-touch-action: pan-y;
+    touch-action: pan-y;
+    -webkit-tap-highlight-color: transparent;
+}
+.slick-list {
+    position: relative;
+    overflow: hidden;
+    display: block;
+    margin: 0;
+    padding: 0;
+
+    &:focus {
+        outline: none;
+    }
+
+    &.dragging {
+        cursor: pointer;
+        cursor: hand;
+    }
+}
+.slick-slider .slick-track,
+.slick-slider .slick-list {
+    -webkit-transform: translate3d(0, 0, 0);
+    -moz-transform: translate3d(0, 0, 0);
+    -ms-transform: translate3d(0, 0, 0);
+    -o-transform: translate3d(0, 0, 0);
+    transform: translate3d(0, 0, 0);
+}
+
+.slick-track {
+    position: relative;
+    left: 0;
+    top: 0;
+    display: block;
+
+    &:before,
+    &:after {
+        content: "";
+        display: table;
+    }
+
+    &:after {
+        clear: both;
+    }
+
+    .slick-loading & {
+        visibility: hidden;
+    }
+}
+.slick-slide {
+    float: left;
+    height: 100%;
+    min-height: 1px;
+    [dir="rtl"] & {
+        float: right;
+    }
+    img {
+        display: block;
+    }
+    &.slick-loading img {
+        display: none;
+    }
+
+    display: none;
+
+    &.dragging img {
+        pointer-events: none;
+    }
+
+    .slick-initialized & {
+        display: block;
+    }
+
+    .slick-loading & {
+        visibility: hidden;
+    }
+
+    .slick-vertical & {
+        display: block;
+        height: auto;
+        border: 1px solid transparent;
+    }
+}
+.slick-arrow.slick-hidden {
+    display: none;
+}
index 27323c8..af8f908 100644 (file)
--- a/style.css
+++ b/style.css
 /*
-Theme Name: AccessPress Parallax
-Theme URI: https://accesspressthemes.com/wordpress-themes/accesspress-parallax/
-Author: AccessPress Themes
-Author URI: https://accesspressthemes.com/
-Description: AccessPress Parallax is a beautiful WordPress theme with Parallax design. Parallax design has become popular and is widely implemented these days. This is probably the most beautiful, feature rich and complete free WordPress parallax theme with features like: fully responsive, advance theme option panel, featured slider, advance post settings, services/team/blog/portfolio/testimonial layout, Google map integration, custom logo/fav icon, call to action, CSS animation, SEO friendly, translation ready, RTL support, custom CSS/JS and more! More over the theme is fully translation ready, WooCommerce Compatible, bbPress Compatible and fully support multilanguage via POLYLANG plugin. Demo: https://accesspressthemes.com/theme-demos/?theme=accesspress-parallax Support forum: https://accesspressthemes.com/support/ Pro version: https://accesspressthemes.com/wordpress-themes/accesspress-parallax-pro/ 
-Version: 1.60
-License: GNU General Public License v3 or later
-License URI: http://www.gnu.org/licenses/gpl-3.0.html
-Text Domain: accesspress-parallax
-Domain Path: /languages/
-Tags: custom-background, custom-colors, custom-header, custom-menu, featured-images, one-column, right-sidebar, theme-options, threaded-comments, translation-ready, two-columns, grid-layout, footer-widgets, blog, e-commerce, photography, portfolio
-
-This theme, like WordPress, is licensed under the GPL.
-Use it to make something cool, have fun, and share what you've learned with others.
-
-AccessPress Parallax is based on Underscores http://underscores.me/, (C) 2012-2014 Automattic, Inc.
+Theme Name: Ice Breaker Mackinaw
+Author: Gaslight Media
+Author URI: http://www.gaslightmedia.com
+Description: A theme for Ice Breaker
+Version: 1.0.0
 */
-
-/*--------------------------------------------------------------
-1.0 - Reset
---------------------------------------------------------------*/
-
-html,
-body,
-div,
-span,
-applet,
-object,
-iframe,
-h1,
-h2,
-h3,
-h4,
-h5,
-h6,
-p,
-blockquote,
-pre,
-a,
-abbr,
-acronym,
-address,
-big,
-cite,
-code,
-del,
-dfn,
-em,
-font,
-ins,
-kbd,
-q,
-s,
-samp,
-small,
-strike,
-strong,
-sub,
-sup,
-tt,
-var,
-dl,
-dt,
-dd,
-ol,
-ul,
-li,
-fieldset,
-form,
-label,
-legend,
-table,
-caption,
-tbody,
-tfoot,
-thead,
-tr,
-th,
-td {
-    border: 0;
-    font-family: inherit;
-    font-size: 100%;
-    font-style: inherit;
-    font-weight: inherit;
-    margin: 0;
-    outline: 0;
-    padding: 0;
-    vertical-align: baseline;
-}
-
-html {
-    font-size: 62.5%;
-    /* Corrects text resizing oddly in IE6/7 when body font-size is set using em units http://clagnut.com/blog/348/#c790 */
-    overflow-y: scroll;
-    /* Keeps page centered in all browsers regardless of content height */
-    -webkit-text-size-adjust: 100%;
-    /* Prevents iOS text size adjust after orientation change, without disabling user zoom */
-    -ms-text-size-adjust: 100%;
-    /* www.456bereastreet.com/archive/201012/controlling_text_size_in_safari_for_ios_without_disabling_user_zoom/ */
-}
-
-*,
-*:before,
-*:after {
-    /* apply a natural box layout model to all elements; see http://www.paulirish.com/2012/box-sizing-border-box-ftw/ */
-    -webkit-box-sizing: border-box;
-    /* Not needed for modern webkit but still used by Blackberry Browser 7.0; see http://caniuse.com/#search=box-sizing */
-    -moz-box-sizing: border-box;
-    /* Still needed for Firefox 28; see http://caniuse.com/#search=box-sizing */
-    box-sizing: border-box;
-}
-
-body {
-    background: #F1F1F1;
-    /* Fallback for when there is no custom background color defined. */
-}
-
-article,
-aside,
-details,
-figcaption,
-figure,
-footer,
-header,
-main,
-nav,
-section {
-    display: block;
-}
-
-ol,
-ul {
-    list-style: none;
-}
-
-table {
-    /* tables still need 'cellspacing="0"' in the markup */
-    border-collapse: separate;
-    border-spacing: 0;
-}
-
-caption,
-th,
-td {
-    font-weight: normal;
-    text-align: left;
-}
-
-blockquote:before,
-blockquote:after,
-q:before,
-q:after {
-    content: "";
-}
-
-blockquote,
-q {
-    quotes: "" "";
-}
-
-a img {
-    border: 0;
-}
-
-/*--------------------------------------------------------------
-Typography
---------------------------------------------------------------*/
-
-body,
-button,
-input,
-select,
-textarea {
-    color: #404040;
-    font-family: 'Roboto', sans-serif;
-    line-height: 1.5;
-    font-weight: 300;
-    font-size: 16px;
-}
-
-h1,
-h2,
-h3,
-h4,
-h5,
-h6 {
-    margin-bottom: 10px;
-    font-weight: bold;
-}
-
-h1 {
-    font-size: 24px;
-}
-
-h2 {
-    font-size: 22px;
-}
-
-h3 {
-    font-size: 20px;
-}
-
-h4 {
-    font-size: 18px;
-}
-
-h5 {
-    font-size: 16px;
-}
-
-h6 {
-    font-size: 14px;
-}
-
-p {
-    margin-bottom: 20px;
-}
-
-b,
-strong {
-    font-weight: bold;
-}
-
-dfn,
-cite,
-em,
-i {
-    font-style: italic;
-}
-
-blockquote {
-    margin: 0 20px;
-}
-
-address {
-    margin: 0 0 20px;
-}
-
-pre {
-    background: #eee;
-    font-family: "Courier 10 Pitch", Courier, monospace;
-    font-size: 15px;
-    line-height: 1.6;
-    margin-bottom: 20px;
-    max-width: 100%;
-    overflow: auto;
-    padding: 20px;
-}
-
-code,
-kbd,
-tt,
-var {
-    font: 15px Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace;
-}
-
-abbr,
-acronym {
-    border-bottom: 1px dotted #666;
-    cursor: help;
-}
-
-mark,
-ins {
-    background: #fff9c0;
-    text-decoration: none;
-}
-
-sup,
-sub {
-    font-size: 75%;
-    height: 0;
-    line-height: 0;
-    position: relative;
-    vertical-align: baseline;
-}
-
-small {
-    font-size: 75%;
-}
-
-big {
-    font-size: 125%;
-}
-
-/*--------------------------------------------------------------
-Elements
---------------------------------------------------------------*/
-
-hr {
-    background-color: #ccc;
-    border: 0;
-    height: 1px;
-    margin-bottom: 20px;
-}
-
-ul,
-ol {
-    margin: 0 0 15px 20px;
-}
-
-ul {
-    list-style: square;
-}
-
-ol {
-    list-style: decimal;
-}
-
-li > ul,
-li > ol {
-    margin-bottom: 0;
-    margin-left: 20px;
-}
-
-dt {
-    font-weight: bold;
-}
-
-dd {
-    margin: 0 20px 20px;
-}
-
-img {
-    height: auto;
-    /* Make sure images are scaled correctly. */
-    max-width: 100%;
-    /* Adhere to container width. */
-    vertical-align: middle;
-
-}
-
-figure {
-    margin: 0;
-}
-
-table {
-    margin: 0 0 20px;
-    width: 100%;
-}
-
-th {
-    font-weight: bold;
-}
-
-/*--------------------------------------------------------------
-Forms
---------------------------------------------------------------*/
-
-button,
-input[type="button"],
-input[type="reset"],
-input[type="submit"] {
-    position: relative;
-    background: #E66432;
-    display: inline-block;
-    padding: 0 20px;
-    text-decoration: none;
-    color: #ffffff;
-    -webkit-transition: all 0.3s ease 0s;
-    -o-transition: all 0.3s ease 0s;
-    transition: all 0.3s ease 0s;
-    cursor: pointer;
-    border: none;
-    line-height: 36px;
-    height: 36px;
-}
-
-button:focus,
-input[type="button"]:focus,
-input[type="reset"]:focus,
-input[type="submit"]:focus,
-button:active,
-input[type="button"]:active,
-input[type="reset"]:active,
-input[type="submit"]:active {
-    outline: 0;
-}
-
-input[type="text"],
-input[type="email"],
-input[type="url"],
-input[type="password"],
-input[type="search"],
-input[type="number"],
-input[type="tel"],
-input[type="range"],
-input[type="date"],
-input[type="month"],
-input[type="week"],
-input[type="time"],
-input[type="datetime"],
-input[type="datetime-local"],
-input[type="color"],
-textarea {
-    color: #333;
-    border: 1px solid #DDD;
-    border-radius: 1px;
-    max-width: 100%;
-}
-
-select {
-    color: #333;
-    border: 1px solid #DDD;
-    border-radius: 1px;
-    max-width: 100%;
-    height: 36px;
-}
-
-input[type="text"]:focus,
-input[type="email"]:focus,
-input[type="url"]:focus,
-input[type="password"]:focus,
-input[type="search"]:focus,
-input[type="number"]:focus,
-input[type="tel"]:focus,
-input[type="range"]:focus,
-input[type="date"]:focus,
-input[type="month"]:focus,
-input[type="week"]:focus,
-input[type="time"]:focus,
-input[type="datetime"]:focus,
-input[type="datetime-local"]:focus,
-input[type="color"]:focus,
-textarea:focus,
-select:focus {
-    color: #111;
-    outline: 0;
-}
-
-input[type="text"],
-input[type="email"],
-input[type="url"],
-input[type="password"],
-input[type="search"],
-input[type="number"],
-input[type="tel"],
-input[type="range"],
-input[type="date"],
-input[type="month"],
-input[type="week"],
-input[type="time"],
-input[type="datetime"],
-input[type="datetime-local"],
-input[type="color"] {
-    padding: 3px;
-    height: 36px;
-}
-
-textarea {
-    overflow: auto;
-    /* Removes default vertical scrollbar in IE6/7/8/9 */
-    padding: 5px 10px;
-    vertical-align: top;
-    /* Improves readability and alignment in all browsers */
-    width: 100%;
-}
-
-/*--------------------------------------------------------------
-Links
---------------------------------------------------------------*/
-
-a {
-    color: #E66432;
-    text-decoration: none;
-}
-
-/*--------------------------------------------------------------
-Accessibility
---------------------------------------------------------------*/
-
-/* Text meant only for screen readers */
-
-.screen-reader-text {
-    clip: rect(1px, 1px, 1px, 1px);
-    position: absolute !important;
-    height: 1px;
-    width: 1px;
-    overflow: hidden;
-}
-
-.screen-reader-text:hover,
-.screen-reader-text:active,
-.screen-reader-text:focus {
-    background-color: #f1f1f1;
-    border-radius: 3px;
-    box-shadow: 0 0 2px 2px rgba(0, 0, 0, 0.6);
-    clip: auto !important;
-    color: #21759b;
-    display: block;
-    font-size: 14px;
-    font-weight: bold;
-    height: auto;
-    left: 5px;
-    line-height: normal;
-    padding: 15px 23px 14px;
-    text-decoration: none;
-    top: 5px;
-    width: auto;
-    z-index: 100000;
-    /* Above WP toolbar */
-}
-
-/*--------------------------------------------------------------
-Alignments
---------------------------------------------------------------*/
-
-.alignleft {
-    float: left;
-    margin-right: 20px;
-}
-
-.alignright {
-    float: right;
-    margin-left: 20px;
-}
-
-.aligncenter {
-    clear: both;
-    display: block;
-    margin: 0 auto;
-}
-
-/*--------------------------------------------------------------
-Clearings
---------------------------------------------------------------*/
-
-.clearfix:before,
-.clearfix:after,
-.entry-content:before,
-.entry-content:after,
-.comment-content:before,
-.comment-content:after,
-.site-header:before,
-.site-header:after,
-.site-content:before,
-.site-content:after,
-.site-footer:before,
-.site-footer:after,
-.row:after,
-.row:before,
-.nav-links:before {
-    content: '';
-    display: table;
-}
-
-.clearfix:after,
-.entry-content:after,
-.comment-content:after,
-.site-header:after,
-.site-content:after,
-.site-footer:after,
-.row:after,
-.nav-links:after {
-    clear: both;
-}
-
-/*--------------------------------------------------------------
-Widgets
---------------------------------------------------------------*/
-
-.widget {
-    margin: 0 0 20px;
-}
-
-/* Make sure select elements fit in widgets */
-
-.widget select {
-    max-width: 100%;
-}
-
-/* Search widget */
-
-.widget_search .search-submit {
-    display: none;
-}
-
-#secondary .widget {
-    background: #FFF;
-    padding: 30px;
-    margin-bottom: 40px;
-}
-
-/*--------------------------------------------------------------
-Content
---------------------------------------------------------------*/
-
-.mid-content {
-    width: 1170px;
-    margin: 0 auto;
-}
-
-.parallax-section {
-    padding: 60px 0 80px;
-    position: relative;
-}
-
-.parallax-section h2 {
-    font-size: 38px;
-    text-transform: uppercase;
-    line-height: 1.2;
-    text-align: center;
-    padding: 0 20px;
-    font-weight: 700;
-    margin-bottom: 60px;
-}
-
-.parallax-section h2 span {
-    position: relative;
-    display: inline-block;
-}
-
-.parallax-section h2 span:after {
-    content: "";
-    position: absolute;
-    width: 50%;
-    top: 100%;
-    left: 50%;
-    margin-left: -25%;
-    margin-top: 10px;
-    border-bottom: 2px solid;
-    border-color: inherit;
-}
-
-.parallax-section .overlay {
-    position: absolute;
-    left: 0;
-    top: 0;
-    width: 100%;
-    height: 100%;
-    z-index: 99;
-}
-
-.parallax-section .mid-content {
-    position: relative;
-    z-index: 999;
-}
-
-.parallax-section .page-content {
-    margin: 0 0 60px;
-}
-
-#content > .mid-content {
-    margin-top: 50px;
-}
-
-#primary {
-    width: 100%;
-    float: left;
-}
-
-#secondary {
-    width: 28%;
-    float: right;
-    font-size: 16px;
-}
-
-#secondary ul {
-    list-style: none;
-    margin-left: 0;
-}
-
-#secondary ul li {
-    padding-bottom: 6px;
-}
-
-#secondary ul li a {
-    text-decoration: none;
-    color: #333;
-}
-
-#secondary h2.widget-title {
-    border-bottom: 3px solid #E66432;
-    margin-bottom: 20px;
-    line-height: 1.2;
-    font-size: 18px;
-    text-transform: uppercase;
-}
-
-#secondary h2.widget-title span {
-    color: #333;
-    display: inline-block;
-    padding: 8px 0;
-}
-
-#secondary .search-form input[type="search"] {
-    width: 100%;
-}
-
-/*--------------------------------------------------------------
-Posts and pages
---------------------------------------------------------------*/
-
-.sticky {}
-
-.site-title {
-    font-size: 24px;
-    font-weight: bold;
-    text-transform: uppercase;
-    white-space: nowrap;
-    margin-bottom: 0;
-}
-
-.site-title a {
-    text-decoration: none;
-}
-
-.site-description {
-    font-size: 14px;
-    font-style: italic;
-    margin-bottom: 0;
-}
-
-.hentry {
-    margin: 0 0 40px;
-    background: #FFF;
-    padding: 40px;
-    margin-bottom: 40px;
-    position: relative;
-}
-
-.single .hentry {
-    margin-bottom: 0;
-}
-
-.archive .hentry {
-    margin-bottom: 60px;
-}
-
-.byline,
-.updated {
-    display: none;
-}
-
-.single .byline,
-.group-blog .byline {
-    display: inline;
-    font-style: italic;
-    font-size: 14px;
-}
-
-.single .byline a,
-.group-blog .byline a {
-    color: #333;
-    text-decoration: none;
-}
-
-.page-content,
-.entry-content,
-.entry-summary {
-    margin: 20px 0 0;
-}
-
-.page-links {
-    clear: both;
-    margin: 0 0 20px;
-}
-
-.entry-header h1.entry-title {
-    margin-left: 80px;
-}
-
-.entry-header h1.entry-title.no-date {
-    margin-left: 0;
-}
-
-.page .entry-header h1.entry-title {
-    margin-left: 0;
-}
-
-.entry-header h1.entry-title a {
-    color: #333;
-    text-decoration: none;
-}
-
-.posted-on {
-    position: absolute;
-    left: 20px;
-    top: -14px;
-    background: #E66432;
-    width: 60px;
-    text-align: center;
-    color: #FFF;
-    font-size: 14px;
-    padding: 10px;
-    line-height: 1.2;
-    text-transform: uppercase;
-}
-
-.posted-on:before {
-    border-color: transparent transparent #BA4F28 #BA4F28;
-    border-style: solid;
-    border-width: 7px 5px;
-    top: 0;
-    content: "";
-    height: 0;
-    right: -10px;
-    position: absolute;
-    width: 0;
-    z-index: -1;
-}
-
-.posted-on span {
-    display: block;
-}
-
-.posted-on span.posted-day {
-    font-size: 24px;
-    font-weight: bold;
-    margin-bottom: 3px;
-}
-
-.bypostauthor {}
-
-.entry-footer {
-    font-size: 14px;
-    margin-top: 30px;
-}
-
-.entry-footer span {
-    margin-right: 15px;
-}
-
-.entry-footer .fa {
-    margin-right: 5px;
-    color: #666;
-}
-
-.entry-footer a {
-    text-decoration: none;
-    color: #333;
-}
-
-.edit-link {
-    background: #333;
-    display: inline-block;
-    padding: 5px 10px;
-    line-height: 1.2;
-    border-radius: 2px;
-    font-size: 13px;
-    margin-top: 15px;
-}
-
-.edit-link a {
-    color: #FFF;
-    text-decoration: none;
-}
-
-.edit-link a .fa {
-    color: #FFF;
-    margin-right: 5px;
-}
-
-.page .entry-footer .edit-link {
-    float: none;
-}
-
-.page-header {
-    background: #FFF;
-    padding: 30px 40px;
-    margin-bottom: 40px;
-}
-
-.page-header h1 {
-    margin-bottom: 0;
-}
-
-.entry-thumb {
-    margin: -40px -40px 30px;
-    text-align: center;
-}
-
-/*--------------------------------------------------------------
-Asides
---------------------------------------------------------------*/
-
-.blog .format-aside .entry-title,
-.archive .format-aside .entry-title {
-    display: none;
-}
-
-/*--------------------------------------------------------------
-Comments
---------------------------------------------------------------*/
-
-#comments {
-    background: #FFF;
-    padding: 40px;
-    margin-bottom: 40px;
-    font-size: 16px;
-}
-
-#comments p {
-    margin-bottom: 10px;
-}
-
-#reply-title {
-    background: #333;
-    color: #fff;
-    display: inline-block;
-    padding: 8px 10px;
-    font-size: 18px;
-    line-height: 1.2;
-    margin-bottom: 0;
-}
-
-#commentform {
-    border-top: 2px solid #333;
-    padding-top: 15px;
-}
-
-.comment-content a {
-    word-wrap: break-word;
-}
-
-#comments input[type="submit"] {
-    background: #333;
-    border: none;
-}
-
-.comments-title {
-    margin-bottom: 10px;
-}
-
-#commentform label {
-    display: block;
-}
-
-textarea#comment {
-    height: 150px;
-}
-
-#author,
-#email,
-#url {
-    width: 100%
-}
-
-/*Comment Lists*/
-
-.comments-area ol {
-    margin: 0;
-    padding: 0;
-    list-style: none;
-}
-
-.comments-area ol.children {
-    margin: 0 0 0 15px;
-}
-
-.comment-list li .comment-body {
-    margin-bottom: 10px;
-    padding: 10px;
-    background: #FCFCFC;
-    border-radius: 5px;
-}
-
-.comment-author img {
-    vertical-align: text-top;
-    margin-right: 10px;
-}
-
-.comment-author .fn {
-    font-style: normal;
-    font-size: 15px;
-    text-transform: capitalize;
-    font-weight: normal;
-}
-
-.comment-metadata a {
-    text-decoration: none;
-    font-size: 13px;
-    font-style: italic;
-}
-
-.comment-metadata .edit-link {
-    display: none;
-}
-
-.comment-author .fn .url {
-    color: #333;
-}
-
-.comment-author .says {
-    display: none;
-}
-
-.commentmetadata {
-    float: right;
-    font-family: 'Lato', sans-serif;
-    font-size: 12px;
-    font-style: italic;
-    font-weight: 300;
-}
-
-.commentmetadata a {
-    color: #666;
-}
-
-.commentmetadata .comment-edit-link {
-    color: #01AEFD;
-}
-
-.commentmetadata + .clear {
-    margin-bottom: 20px;
-}
-
-.reply .comment-reply-link {
-    background: none repeat scroll 0 0 #293037;
-    border-radius: 3px;
-    color: #FFFFFF;
-    font-size: 13px;
-    line-height: 1;
-    padding: 2px 10px;
-    text-decoration: none;
-}
-
-#commentform .form-submit {
-    margin-bottom: 0;
-}
-
-.comment-awaiting-moderation {
-    background: #111;
-    position: absolute;
-    left: 50%;
-    top: -20px;
-    color: #FFF;
-    font-size: 13px;
-    width: 250px;
-    margin-left: -125px;
-}
-
-.comment-awaiting-moderation + br {
-    display: none;
-}
-
-#cancel-comment-reply-link {
-    font-style: italic;
-    color: #333;
-}
-
-#cancel-comment-reply-link:before {
-    font-family: FontAwesome;
-    content: "\f057";
-    margin: 0 5px 0 20px;
-    font-style: normal;
-    color: #333;
-}
-
-.logged-in-as a {
-    color: #333;
-}
-
-/*--------------------------------------------------------------
-Infinite scroll
---------------------------------------------------------------*/
-
-/* Globally hidden elements when Infinite Scroll is supported and in use. */
-
-.infinite-scroll .paging-navigation,
-/* Older / Newer Posts Navigation (always hidden) */
-
-.infinite-scroll.neverending .site-footer {
-    /* Theme Footer (when set to scrolling) */
-    display: none;
-}
-
-/* When Infinite Scroll has reached its end we need to re-display elements that were hidden (via .neverending) before */
-
-.infinity-end.neverending .site-footer {
-    display: block;
-}
-
-/*--------------------------------------------------------------
-Media
---------------------------------------------------------------*/
-
-.page-content img.wp-smiley,
-.entry-content img.wp-smiley,
-.comment-content img.wp-smiley {
-    border: none;
-    margin-bottom: 0;
-    margin-top: 0;
-    padding: 0;
-}
-
-/* Make sure embeds and iframes fit their containers */
-
-embed,
-iframe,
-object {
-    max-width: 100%;
-}
-
-/*--------------------------------------------------------------
-Captions
---------------------------------------------------------------*/
-
-.wp-caption {
-    margin-bottom: 20px;
-    max-width: 100%;
-}
-
-.wp-caption img[class*="wp-image-"] {
-    display: block;
-    margin: 0 auto;
-}
-
-.wp-caption-text {
-    text-align: center;
-}
-
-.wp-caption .wp-caption-text {
-    margin: 0.8075em 0;
-}
-
-/*--------------------------------------------------------------
-Galleries
---------------------------------------------------------------*/
-
-.gallery {
-    margin-bottom: 20px;
-}
-
-.gallery-item {
-    display: inline-block;
-    text-align: center;
-    vertical-align: top;
-    width: 100%;
-    padding: 0 4px 4px 0;
-}
-
-.gallery-item .gallery-icon {
-    position: relative;
-}
-
-.gallery-item a:after {
-    content: "";
-    position: absolute;
-    left: 0;
-    top: 0;
-    width: 100%;
-    height: 100%;
-    background: url(images/zoom.png) no-repeat center rgba(0, 0, 0, 0.3);
-    display: none;
-}
-
-.gallery-item:hover a:after {
-    display: block;
-}
-
-.gallery-columns-2 .gallery-item {
-    max-width: 50%;
-}
-
-.gallery-columns-3 .gallery-item {
-    max-width: 33.33%;
-}
-
-.gallery-columns-4 .gallery-item {
-    max-width: 25%;
-}
-
-.gallery-columns-5 .gallery-item {
-    max-width: 20%;
-}
-
-.gallery-columns-6 .gallery-item {
-    max-width: 16.66%;
-}
-
-.gallery-columns-7 .gallery-item {
-    max-width: 14.28%;
-}
-
-.gallery-columns-8 .gallery-item {
-    max-width: 12.5%;
-}
-
-.gallery-columns-9 .gallery-item {
-    max-width: 11.11%;
-}
-
-.gallery-caption {
-    font-size: 14px;
-    line-height: 1.2;
-    margin-top: 5px;
-}
-
-/*--------------------------------------------------------------
-Main Header
---------------------------------------------------------------*/
-
-#masthead {
-    width: 100%;
-    z-index: 99999;
-    background: #FFF;
-    padding: 24px 0;
-    border-bottom: 3px solid #E66432;
-    position: relative;
-}
-
-#masthead .flex-box {
-    display: -webkit-box;
-    display: -moz-box;
-    display: -ms-flexbox;
-    display: -webkit-flex;
-    display: flex;
-    justify-content: space-between;
-    align-items: center
-}
-
-#masthead.logo-top {
-    text-align: center;
-}
-
-#masthead.logo-top .flex-box {
-    display: block;
-}
-
-body.parallax-on #masthead {
-    position: fixed;
-    left: 0;
-    top: 0;
-    right: 0;
-}
-
-body.logged-in.parallax-on #masthead {
-    top: auto;
-}
-
-#content {
-    position: relative;
-    z-index: 99;
-}
-
-body.parallax-on .wpcf7-not-valid-tip {
-    text-align: center;
-    font-size: 13px;
-}
-
-#site-logo {
-    float: left;
-    width: 20%;
-}
-
-.logo-top #site-logo {
-    float: none;
-    width: auto;
-    padding: 10px 0;
-}
-
-.main-navigation {
-    float: right;
-    max-width: 80%;
-}
-
-.logo-top .main-navigation {
-    float: none;
-    width: auto;
-    text-align: center;
-    max-width: none;
-    margin-top: 15px;
-}
-
-.main-navigation ul {
-    list-style: none;
-    margin: 0;
-    padding-left: 0;
-    float: right;
-}
-
-.logo-top .main-navigation ul {
-    float: none;
-}
-
-.main-navigation ul li {
-    position: relative;
-}
-
-.main-navigation > ul > li {
-    float: left;
-    position: relative;
-    font-weight: 400;
-}
-
-.main-navigation > ul > li > a {
-    text-transform: uppercase;
-    font-size: 14px;
-    padding: 5px 10px;
-}
-
-.main-navigation > ul > li.current a {
-    color: #E66432;
-}
-
-.main-navigation a {
-    display: block;
-    text-decoration: none;
-    color: #333;
-}
-
-.main-navigation ul ul {
-    background: #FFF;
-    position: absolute;
-    top: 100%;
-    left: 0;
-    z-index: 99999;
-    font-size: 15px;
-    box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);
-    display: none;
-}
-
-.main-navigation ul ul ul {
-    left: 100%;
-    top: 0;
-}
-
-.main-navigation ul ul a {
-    min-width: 200px;
-    padding: 10px;
-    border-bottom: 1px solid #EEE;
-}
-
-.logo-top .main-navigation ul ul li {
-    text-align: left;
-}
-
-.main-navigation ul ul li:last-child a {
-    border: none;
-}
-
-.main-navigation li:hover > a {
-    color: #E66432;
-}
-
-.main-navigation ul li:hover > ul {
-    display: block;
-}
-
-.main-navigation .current_page_item > a,
-.main-navigation .current-menu-item > a {
-    color: #E66432;
-}
-
-/* Small menu */
-
-.menu-toggle {
-    display: none;
-}
-
-.site-main .comment-navigation,
-.site-main .paging-navigation,
-.site-main .post-navigation,
-.site-main .posts-navigation {
-    margin: 0 0 40px;
-    overflow: hidden;
-    background: #FFF;
-}
-
-.comment-navigation .nav-previous,
-.paging-navigation .nav-previous,
-.post-navigation .nav-previous,
-.posts-navigation .nav-previous {
-    float: left;
-    width: 50%;
-    padding: 10px;
-}
-
-.comment-navigation .nav-previous a .fa,
-.paging-navigation .nav-previous a .fa,
-.post-navigation .nav-previous a .fa,
-.posts-navigation .nav-previous a .fa {
-    margin-right: 10px;
-    font-size: 16px;
-}
-
-.comment-navigation .nav-next,
-.paging-navigation .nav-next,
-.post-navigation .nav-next,
-.posts-navigation .nav-next {
-    float: right;
-    text-align: right;
-    width: 50%;
-    padding: 10px;
-}
-
-.comment-navigation .nav-next a .fa,
-.paging-navigation .nav-next a .fa,
-.post-navigation .nav-next a .fa,
-.posts-navigation .nav-next a .fa {
-    margin-left: 10px;
-    font-size: 16px;
-}
-
-.site-main .comment-navigation a,
-.site-main .paging-navigation a,
-.site-main .post-navigation a,
-.site-main .posts-navigation a {
-    background: #333;
-    padding: 20px 40px;
-    color: #FFF;
-    text-decoration: none;
-    font-size: 14px;
-    display: block;
-}
-
-.pagination {
-    text-align: center;
-    margin-bottom: 30px;
-}
-
-.pagination .nav-links a,
-.pagination .nav-links span {
-    display: inline-block;
-    background: #E66432;
-    padding: 10px;
-    color: #FFF;
-    line-height: 1;
-    margin: 0 2px;
-}
-
-/*--------------------------------------------------------------
-Main SLider
---------------------------------------------------------------*/
-
-#main-slider {
-    position: relative;
-    margin-bottom: 30px;
-}
-
-.parallax-on #main-slider,
-#main-slider.full-screen-,
-.page-template-home-page-php #main-slider {
-    margin-bottom: 0;
-}
-
-#main-slider.full-screen-yes {
-    min-height: 80vh;
-}
-
-.main-slides {
-    display: none;
-}
-
-#main-slider .main-slides:after {
-    content: "";
-    background: url(images/overlay4.png) repeat rgba(0, 0, 0, 0.3);
-    position: absolute;
-    height: 100%;
-    width: 100%;
-    z-index: 999;
-    left: 0;
-    top: 0;
-}
-
-#main-slider .slick-slide img {
-    margin: 0 auto;
-}
-
-.full-screen-yes .slides {
-    background-size: cover;
-    background-position: top center;
-    background-repeat: no-repeat;
-}
-
-.slider-caption {
-    position: absolute;
-    top: 50%;
-    left: 0;
-    width: 100%;
-    z-index: 99999;
-    text-align: center;
-    transform: translateY(-50%);
-    -ms-transform: translateY(-50%);
-    -webkit-transform: translateY(-50%);
-}
-
-.slider-caption .caption-title {
-    font-size: 54px;
-    font-weight: bold;
-    text-transform: uppercase;
-    color: #FFF;
-    position: relative;
-    margin: 0 auto 20px;
-    width: 80%;
-    line-height: 1.3;
-    text-shadow: 5px 5px 10px rgba(0, 0, 0, 0.4);
-}
-
-.slider-caption .caption-description {
-    font-size: 24px;
-    color: #FFF;
-    position: relative;
-    text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.3);
-    font-weight: 300;
-    margin: 0 auto 20px;
-    width: 70%;
-}
-
-.slider-caption .caption-description p {
-    margin-bottom: 20px;
-}
-
-.slider-caption .caption-description a,
-.btn,
-.call-to-action a {
-    position: relative;
-    border: 2px solid #ffffff;
-    display: inline-block;
-    line-height: 1;
-    padding: 12px 20px;
-    text-decoration: none;
-    color: #ffffff;
-    -webkit-transition: all 0.3s ease 0s;
-    -o-transition: all 0.3s ease 0s;
-    transition: all 0.3s ease 0s;
-    font-size: 20px;
-}
-
-.slider-caption .caption-description a:hover,
-.btn:hover {
-    background: #E56432 !important;
-    border: 2px solid #E56432 !important;
-    color: #FFF !important;
-}
-
-.next-page {
-    position: absolute;
-    height: 60px;
-    width: 60px;
-    border: 1px solid #FFF;
-    border-radius: 50%;
-    bottom: 15%;
-    left: 50%;
-    margin-left: -30px;
-    z-index: 999;
-}
-
-.next-page a {
-    display: block;
-    background: url(images/down-arrow.png) no-repeat center;
-    position: absolute;
-    left: 0;
-    top: 0;
-    height: 100%;
-    width: 100%;
-    -webkit-animation: flow-down 2s linear 3s infinite;
-    /* Chrome, Safari, Opera */
-    animation: flow-down 2s linear 3s infinite;
-    /* Standard syntax */
-}
-
-#main-slider .slick-slide {
-    position: relative;
-}
-
-#main-slider.full-screen-yes .slick-slide {
-    height: 100vh;
-    background-size: cover;
-    background-position: center;
-}
-
-#main-slider .slick-arrow {
-    position: absolute;
-    top: 50%;
-    margin-top: -50px;
-    outline: 0;
-    width: 28px;
-    height: 100px;
-    padding: 0;
-    text-indent: -9999px;
-    z-index: 99;
-}
-
-#main-slider .slick-prev.slick-arrow {
-    left: 40px;
-    background: url(images/controls.png) no-repeat;
-}
-
-#main-slider .slick-next.slick-arrow {
-    right: 40px;
-    background: url(images/controls.png) no-repeat right top;
-}
-
-#main-slider .slick-dots {
-    position: absolute;
-    bottom: 30px;
-    width: 100%;
-    margin: 0;
-    padding: 0;
-    text-align: center;
-}
-
-#main-slider .slick-dots li {
-    display: inline-block;
-}
-
-#main-slider .slick-dots li button {
-    border: 2px solid #FFF;
-    text-indent: -9999px;
-    display: block;
-    width: 20px;
-    height: 8px;
-    margin: 0 5px;
-    outline: 0;
-    padding: 0;
-    line-height: 8px;
-    border-radius: 0;
-    background: none;
-}
-
-#main-slider .slick-dots li.slick-active button {
-    background: #E66432;
-    border: 2px solid #E66432;
-}
-
-/* Chrome, Safari, Opera */
-
-@-webkit-keyframes flow-down {
-    0% {
-        top: 0px;
-        opacity: 0.8;
-    }
-    50% {
-        top: 9px;
-        opacity: 1;
-    }
-    100% {
-        top: 0;
-        opacity: 0.8;
-    }
-}
-
-/* Standard syntax */
-
-@keyframes flow-down {
-    0% {
-        top: 0px;
-        opacity: 0.8;
-    }
-    50% {
-        top: 9px;
-        opacity: 1;
-    }
-    100% {
-        top: 0;
-        opacity: 0.8;
-    }
-}
-
-/*--------------------------------------------------------------
-Default Section
---------------------------------------------------------------*/
-
-.parallax-section input[type="text"],
-.parallax-section input[type="email"],
-.parallax-section input[type="url"],
-.parallax-section input[type="password"],
-.parallax-section input[type="search"],
-.parallax-section input[type="tel"],
-.parallax-section textarea {
-    border: 1px solid #E66432;
-    color: inherit;
-    padding: 10px 15px;
-    height: 42px;
-    width: 100%;
-    margin: 0 auto;
-    display: block;
-    background: rgba( 255, 255, 255, 0.4);
-}
-
-.parallax-section textarea {
-    line-height: 1.5;
-    width: 100%;
-    margin: 0 auto;
-    display: block;
-    height: 180px;
-}
-
-.parallax-section .wpcf7-form .wpcf7-submit {
-    width: 100%;
-    margin: 0 auto;
-    display: block;
-    background: #E66432;
-}
-
-.parallax-section .wpcf7-form p {
-    margin-bottom: 15px;
-}
-
-.parallax-section .slider-caption .caption-description a,
-.parallax-section .btn {
-    border-color: inherit;
-    color: inherit;
-}
-
-/*--------------------------------------------------------------
-Service Section
---------------------------------------------------------------*/
-
-.service_template {
-    padding-bottom: 40px;
-}
-
-.service-list {
-    width: 48%;
-    margin-bottom: 40px;
-}
-
-.service-list h3 {
-    margin-bottom: 15px;
-    line-height: 1.2;
-    font-size: 18px;
-    font-weight: 700;
-}
-
-.service-list .service-image {
-    height: 80px;
-    width: 80px;
-    margin-top: 15px;
-    overflow: hidden;
-    border: 3px solid #EEE;
-}
-
-.service-list .service-image img {
-    padding: 15px;
-}
-
-.service-list .service-detail {
-    width: 460px;
-}
-
-.service-list.odd {
-    float: left;
-    text-align: right;
-}
-
-.service-list.odd .service-image {
-    float: right;
-}
-
-.service-list.odd .service-detail {
-    float: left;
-}
-
-.service-list.even {
-    float: right;
-}
-
-.service-list.even .service-image {
-    float: left;
-}
-
-.service-list.even .service-detail {
-    float: right;
-}
-
-/*--------------------------------------------------------------
-Testimonial Section
---------------------------------------------------------------*/
-
-.testimonial-list {
-    text-align: center;
-}
-
-.testimonial-list .testimonial-content {
-    font-size: 20px;
-    font-style: italic;
-    margin-bottom: 30px;
-    line-height: 1.4;
-    position: relative;
-    padding: 0 50px;
-}
-
-.testimonial-list .testimonial-content:before {
-    position: absolute;
-    left: 0;
-    top: 0;
-    content: '\f10d';
-    font-size: 32px;
-    line-height: 1;
-    height: 30px;
-    font-family: "FontAwesome";
-    opacity: 0.5;
-}
-
-.testimonial-list h3 {
-    font-size: 20px;
-    font-weight: bold;
-}
-
-.testimonial-list .testimonial-image {
-    width: 100px;
-    height: 100px;
-    border-radius: 50%;
-    margin: 30px auto 50px;
-}
-
-.testimonial-list .testimonial-image img {
-    border-radius: 50%;
-}
-
-.testimonial-listing .slick-arrow {
-    position: absolute;
-    margin: 0;
-    top: 100%;
-    left: 50%;
-    height: 38px;
-    width: 38px;
-    background: none;
-    border: 1px solid;
-    border-color: inherit;
-    text-indent: 0;
-    font-size: 26px;
-    color: inherit;
-    text-decoration: none;
-    text-align: center;
-    line-height: 38px;
-    display: inline-block;
-    -webkit-transition: all 0.3s ease 0s;
-    -moz-transition: all 0.3s ease 0s;
-    transition: all 0.3s ease 0s;
-    cursor: pointer;
-}
-
-.testimonial-listing .slick-arrow:hover {
-    background: #e66432;
-    border: 1px solid #e66432;
-    color: #FFF;
-}
-
-.testimonial-listing .fa-angle-left {
-    margin-left: -45px;
-}
-
-.testimonial-listing .fa-angle-right {
-    margin-left: 5px;
-}
-
-/*--------------------------------------------------------------
-Portfolio Section
---------------------------------------------------------------*/
-
-.portfolio-listing {
-    margin: 0 -15px;
-}
-
-.portfolio-listing a:nth-child(3n+1){
-    clear: both;
-}
-
-.portfolio-list {
-    width: 33.333%;
-    float: left;
-    position: relative;
-}
-
-.portfolio-wrap {
-    margin: 15px;
-    overflow: hidden;
-    position: relative;
-}
-
-.portfolio-list .portfolio-overlay {
-    position: absolute;
-    width: 100%;
-    height: 100%;
-    background: rgba(0, 0, 0, 0.3);
-    display: none;
-    z-index: 9999;
-}
-
-.portfolio-list .portfolio-overlay span {
-    width: 60px;
-    height: 60px;
-    margin-left: -30px;
-    margin-top: -30px;
-    position: absolute;
-    top: 50%;
-    left: 50%;
-    border: 2px solid #FFF;
-    border-radius: 50%;
-    font-size: 30px;
-    text-align: center;
-    line-height: 60px;
-    color: #FFF;
-}
-
-.portfolio-list:hover .portfolio-overlay {
-    display: block;
-}
-
-.portfolio-list h3 {
-    position: absolute;
-    width: 100%;
-    padding: 20px;
-    bottom: 0;
-    left: 0;
-    color: #FFF;
-    background: url(images/portfolio-text-bg.png) repeat-x top left;
-    font-size: 16px;
-    margin: 0;
-    text-transform: uppercase;
-}
-
-.portfolio-list:hover h3 {
-    display: none;
-}
-
-.portfolio-list img {
-    transition: all 0.3s ease-in-out;
-    -moz-transition: all 0.3s ease-in-out;
-    -webkit-transition: all 0.3s ease-in-out;
-}
-
-.portfolio-list:hover img {
-    -ms-transform: scale(1.2);
-    /* IE 9 */
-    -webkit-transform: scale(1.2);
-    /* Chrome, Safari, Opera */
-    transform: scale(1.2);
-}
-
-/*--------------------------------------------------------------
-Call to Action Section
---------------------------------------------------------------*/
-
-.call-to-action {
-    text-align: center;
-}
-
-.call-to-action h2 {
-    margin: 30px 0 15px;
-    font-size: 24px;
-}
-
-.parallax-section .call-to-action .page-content {
-    margin-bottom: 0;
-}
-
-.parallax-section.action_template {
-    padding: 30px 0;
-}
-
-/*--------------------------------------------------------------
-Team Section
---------------------------------------------------------------*/
-
-.team-tab {
-    text-align: center;
-    padding: 0 50px;
-}
-
-.team-image {
-    border-radius: 50%;
-    border: 2px solid #FFF;
-    margin: 0 8px 20px;
-    position: relative;
-    cursor: pointer;
-    display: none;
-}
-
-.team-image:hover,
-.team-image.slick-current {
-    border: 2px solid #E66432;
-}
-
-.team-image img {
-    border-radius: 50%;
-}
-
-.team-list {
-    display: none;
-}
-
-.team-content {
-    margin-top: 60px;
-}
-
-.team-big-image {
-    float: left;
-    width: 35%;
-    margin-right: 3%;
-    border-radius: 50%;
-    overflow: hidden;
-    border: 4px solid #FFF;
-}
-
-.team-big-image img {
-    border-radius: 50%;
-    width: 100%;
-    padding: 3px;
-}
-
-.team-detail {
-    float: left;
-    width: 62%;
-}
-
-.team-detail h3 {
-    font-size: 30px;
-    margin-bottom: 10px;
-    line-height: 1.2;
-}
-
-.team-detail h4 {
-    font-size: 20px;
-    margin-bottom: 25px;
-    opacity: 0.8;
-}
-
-.team-tab .slick-arrow {
-    position: absolute;
-    text-indent: 0;
-    font-size: 46px;
-    text-decoration: none;
-    height: 50px;
-    line-height: 50px;
-    margin-top: -30px;
-    color: inherit;
-    font-weight: normal;
-    top: 50%;
-    cursor: pointer;
-}
-
-.team-tab .fa-angle-left {
-    background: none;
-    left: -40px;
-}
-
-.team-tab .fa-angle-right {
-    background: none;
-    right: -40px;
-}
-
-.blank-section {
-    min-height: 300px;
-    height: 60vh;
-}
-
-/*--------------------------------------------------------------
-Google Map Section
---------------------------------------------------------------*/
-
-.parallax-section.google-map {
-    padding: 0;
-}
-
-.parallax-section.google-map p {
-    margin: 0
-}
-
-.parallax-section.google-map img {
-    max-width: none;
-}
-
-.google-map iframe {
-    width: 100% !important;
-    display: block;
-    height: 400px !important;
-}
-
-.googlemap-toggle {
-    position: absolute;
-    left: 50%;
-    margin-left: -40px;
-    background: #000000;
-    top: 0;
-    color: #FFF;
-    padding: 0 30px 0 20px;
-    margin-top: -32px;
-    cursor: pointer;
-    border-radius: 2px 2px 0 0;
-    z-index: 999;
-    font-size: 14px;
-    line-height: 32px;
-    height: 32px;
-}
-
-.googlemap-toggle:after {
-    content: "\f106";
-    font-size: 20px;
-    margin: 15px 0 0;
-    line-height: 0;
-    position: absolute;
-    right: 10px;
-    font-family: "FontAwesome";
-}
-
-.googlemap-toggle.active:after {
-    content: "\f107";
-}
-
-#ap-map-canvas {
-    height: 450px !important;
-    width: 100%;
-}
-
-/*--------------------------------------------------------------
-Blog Section
---------------------------------------------------------------*/
-
-.blog-list {
-    float: left;
-    width: 30%;
-    margin-right: 3.33%;
-    background: #FFF;
-    text-decoration: none;
-    color: #333;
-}
-
-.blog-list .blog-image img {
-    width: 100%;
-}
-
-.blog-list:hover {
-    color: #333;
-}
-
-.blog-list:nth-child(3n) {
-    margin-right: 0;
-}
-
-.blog-list h3 {
-    font-size: 16px;
-    text-transform: uppercase;
-    margin: 15px 0 10px;
-    font-weight: bold;
-}
-
-.blog-list .blog-excerpt {
-    padding: 0 20px 60px;
-    border-bottom: 3px solid #E66432;
-    position: relative;
-}
-
-.blog-list .blog-excerpt .posted-date {
-    font-size: 13px;
-    margin-bottom: 15px;
-    color: #E66432;
-    text-align: right;
-}
-
-.blog-list .blog-excerpt .posted-date .fa {
-    margin-right: 5px;
-}
-
-.blog-list .blog-excerpt span {
-    background: #E66432;
-    color: #FFF;
-    display: inline-block;
-    position: absolute;
-    bottom: 0;
-    right: 10px;
-    padding: 8px 15px;
-    font-size: 14px;
-}
-
-.btn-wrap {
-    text-align: center;
-    margin-top: 70px;
-}
-
-.blog-list:hover .blog-excerpt span {
-    background: #333;
-}
-
-.blog-list:hover .blog-excerpt {
-    border-color: #333;
-}
-
-/*--------------------------------------------------------------
-Footer Section
---------------------------------------------------------------*/
-
-#colophon {
-    background: #000;
-    color: #FFF;
-    font-size: 15px;
-}
-
-.top-footer {
-    background: #272727;
-    padding: 55px 0;
-}
-
-.top-footer ul {
-    list-style: none;
-    margin: 0;
-}
-
-.top-footer ul li {
-    margin-bottom: 5px;
-}
-
-.top-footer h2 {
-    font-size: 18px;
-    margin-bottom: 32px;
-    position: relative;
-}
-
-.top-footer h2:after {
-    content: "";
-    position: absolute;
-    top: 100%;
-    width: 40px;
-    border-bottom: 1px solid #FFF;
-    left: 0;
-    margin-top: 5px;
-}
-
-.top-footer a {
-    color: #FFF;
-    text-decoration: none;
-}
-
-.top-footer .top-footer-wrap {
-    margin-left: -2%;
-}
-
-.footer-column-1.top-footer .top-footer-wrap {
-    margin-left: 0;
-}
-
-.footer-column-1 .footer-block {
-    width: 100%;
-    margin-left: 0;
-}
-
-.footer-column-2 .footer-block {
-    width: 48%;
-    margin-left: 2%
-}
-
-.footer-column-3 .footer-block {
-    width: 31.333%;
-    margin-left: 2%
-}
-
-.footer-column-4 .footer-block {
-    width: 23%;
-    margin-left: 2%
-}
-
-.footer-block {
-    float: left;
-}
-
-.footer-block .widget,
-.footer-block .gallery {
-    margin-bottom: 0;
-}
-
-.bottom-footer {
-    background: #000;
-    padding: 15px;
-    font-size: 14px;
-}
-
-.bottom-footer a {
-    color: #FFF;
-}
-
-.copy-right {
-    float: left;
-}
-
-.site-info {
-    float: right;
-}
-
-.site-info a {
-    text-decoration: underline;
-}
-
-.tagcloud a {
-    background: #000;
-    padding: 10px 15px;
-    font-size: 13px !important;
-    margin: 0 0 5px 0;
-    display: inline-block;
-    line-height: 1;
-}
-
-#go-top {
-    position: fixed;
-    right: 30px;
-    bottom: 30px;
-    display: none;
-    height: 50px;
-    width: 50px;
-    background: #E66432;
-    text-align: center;
-    line-height: 50px;
-    z-index: 9999;
-}
-
-#go-top a {
-    display: block;
-    color: #FFF;
-}
-
-/*--------------------------------------------------------------
-Social
---------------------------------------------------------------*/
-
-.social-icons {
-    position: fixed;
-    left: 0;
-    top: 50%;
-    width: 30px;
-    z-index: 9;
-}
-
-.social-icons a {
-    background: red;
-    height: 30px;
-    width: 30px;
-    margin-bottom: 1px;
-    line-height: 30px;
-    text-align: center;
-    color: #FFF;
-    display: inline-block;
-    position: relative;
-}
-
-.social-icons a:hover {
-    background: #e66432
-}
-
-.social-icons a span {
-    background: #333;
-    padding: 6px 10px;
-    font-size: 11px;
-    font-family: Arial;
-    text-decoration: none;
-    position: absolute;
-    left: 130%;
-    top: 2px;
-    margin-left: 10px;
-    border-radius: 1px;
-    white-space: nowrap;
-    line-height: 1;
-    font-style: italic;
-    opacity: 0;
-    visibility: hidden;
-    transition: left 0.3s ease;
-    -moz-transition: left 0.3s ease;
-    -webkit-transition: left 0.3s ease;
-}
-
-.social-icons a span:after {
-    content: "";
-    position: absolute;
-    left: 0;
-    border-color: transparent #333 transparent transparent;
-    border-style: solid;
-    border-width: 4px;
-    margin-left: -8px;
-    top: 50%;
-    margin-top: -4px;
-}
-
-.social-icons a:hover span {
-    opacity: 1;
-    visibility: visible;
-    left: 100%;
-}
-
-/*--------------------------------------------------------------
-Responsive grid for pages
---------------------------------------------------------------*/
-
-.row {
-    margin-bottom: 25px;
-}
-
-.row:last-child {
-    margin-bottom: 0;
-}
-
-.span1,
-.span2,
-.span3,
-.span4,
-.span5,
-.span6 {
-    float: left;
-}
-
-.col {
-    margin-left: 3%;
-}
-
-.col:first-child {
-    margin-left: 0;
-}
-
-
-.span1 {
-    width: 14.1666666667%;
-
-}
-
-.span2 {
-    width: 31.3333333333%;
-
-}
-
-.span3 {
-    width: 48.5%;
-
-}
-
-.span4 {
-    width: 65.6666666667%;
-
-}
-
-.span5 {
-    width: 82.8333333333%;
-
-}
-
-.span6 {
-    width: 100%;
-    margin-left: 0;
-}
-
-@media screen and (max-width: 768px) {
-
-    .span1,
-    .span2,
-    .span3,
-    .span4,
-    .span5,
-    .span6 {
-        width: 100%;
-        float: none;
-        margin-left: 0;
-    }
-
-}
-
-/*RTL CSS*/
-
-.rtl #site-logo {
-    float: right;
-}
-
-.rtl .main-navigation {
-    float: left;
-}
-
-.rtl .main-navigation > ul > li {
-    float: right;
-}
-
-.rtl .blog-list .blog-excerpt .posted-date .fa {
-    margin-right: 0;
-    margin-left: 5px;
-}
-
-.rtl .service-list.even {
-    text-align: left;
-}
-
-.rtl .top-footer h2:after {
-    left: auto;
-    right: 0;
-}
-
-.rtl .comment-navigation .nav-next a .fa,
-.rtl .paging-navigation .nav-next a .fa,
-.rtl .post-navigation .nav-next a .fa {
-    margin-left: 0;
-    margin-right: 10px;
-}
-
-.rtl .comment-navigation .nav-previous,
-.rtl .paging-navigation .nav-previous,
-.rtl .post-navigation .nav-previous {
-    text-align: left;
-}
-
-.rtl .comment-navigation .nav-previous a .fa,
-.rtl .paging-navigation .nav-previous a .fa,
-.rtl .post-navigation .nav-previous a .fa {
-    margin-left: 10px;
-    margin-right: 0;
-}
-
-.rtl .bx-wrapper .bx-controls-direction a {
-    text-indent: 999999999px;
-}
\ No newline at end of file
diff --git a/welcome/css/no.png b/welcome/css/no.png
deleted file mode 100644 (file)
index fe3dea6..0000000
Binary files a/welcome/css/no.png and /dev/null differ
diff --git a/welcome/css/welcome.css b/welcome/css/welcome.css
deleted file mode 100644 (file)
index c895909..0000000
+++ /dev/null
@@ -1,248 +0,0 @@
-/**
- *
- * Welcome Page Styles
- *
-**/
-
-.clearfix:after,
-.clearfix:before{
-    content: "";
-    display: table;
-}
-
-.clearfix:after{
-    clear: both;
-}
-
-.welcome-section-wrapper *{
-    box-sizing: border-box;
-}
-
-.about-wrap .accesspress-badge{
-    background: url(wlogo.png) center 20px no-repeat #0073aa;
-    text-decoration: none;
-    background-size: 70%;
-    padding-top: 130px;
-    color: #FFF;
-}
-
-.theme-steps-list{
-    width: 40%;
-    float: left;
-}
-
-.theme-image{
-    width: 55%;
-    float: right;
-}
-
-.theme-steps{
-    margin-bottom: 60px;
-}
-
-.welcome-section-wrapper {
-       padding: 50px 0;
-}
-
-.recomended-plugin-wrap{
-    margin-left: -4%;
-}
-
-.recom-plugin-wrap{
-    background: #fff;
-    border: 1px solid #ddd;
-    width: 29.33%;
-    float: left;
-    margin-left: 4%;
-    margin-bottom: 50px;
-}
-
-.plugin-img-wrap{
-    margin-top: 0;
-    text-align: center;
-}
-
-.plugin-img-wrap img{
-    border: 0;
-    padding: 12% 12% 0;
-}
-
-.version-author-info {
-    padding: 15px 0;
-    font-size: 13px;
-    font-style: italic;
-}
-
-.plugin-title-install {
-    position: relative;
-    font-size: 14px;
-    font-weight: 600;
-    margin: 0;
-    line-height: 26px;
-    padding: 10px 15px;
-    -webkit-box-shadow: inset 0 1px 0 rgba(0,0,0,.1);
-    box-shadow: inset 0 1px 0 rgba(0,0,0,.1);
-    overflow: hidden;
-    white-space: nowrap;
-    text-overflow: ellipsis;
-    background: #fff;
-    background: rgba(255,255,255,.65);
-}
-
-.plugin-btn-wrapper{
-    -webkit-transition: opacity .1s ease-in-out;
-    transition: opacity .1s ease-in-out;
-    position: absolute;
-    top: 0;
-    bottom: 0;
-    right: 0;
-    height: 46px;
-    padding: 10px 20px;
-    background: rgba(244,244,244,.7);
-    border-left: 1px solid rgba(0,0,0,.05);
-}
-
-.action-tab {
-    padding-left: 40px;
-    border-left: 4px solid #fff;
-    background: #fff;
-    padding-top: 35px;
-    padding-bottom: 35px;
-    margin-bottom: 30px;
-    box-shadow: 0 1px 1px 0 rgba(0, 0, 0, 0.1);
-}
-
-.action-tab.warning {
-    border-color: #eba300;
-}
-
-.action-tab.success {
-    border-color: #00b9eb;
-}
-
-.action-tab h3{
-    margin-top: 0;
-}
-
-.pending-tasks {
-    display: inline-block;
-    background-color: #d54e21;
-    color: #fff;
-    font-size: 9px;
-    line-height: 17px;
-    font-weight: 600;
-    margin: 1px 0 0 2px;
-    vertical-align: top;
-    -webkit-border-radius: 10px;
-    border-radius: 10px;
-    z-index: 26;
-    padding: 0 6px;
-    margin-left: 5px;
-}
-
-.support-process{
-    border: 1px solid #DDD;
-    padding: 30px;
-    margin-bottom: 40px;
-}
-
-.support-process h3{
-    margin-top: 0;
-}
-
-.recommended_plugins .recomplug-title {
-    font-size: 20px;
-    margin-top: 0;
-}
-
-table.comparison-table {
-    background:#F6F6F6;
-    border:#ccc 1px solid;
-    width: 100%;
-    border-collapse: collapse;
-    border-radius: 3px;
-}
-
-table.comparison-table th,
-table.comparison-table td{
-    border:1px solid #CCC;
-    padding: 15px;
-    text-align: left;
-}
-
-table.comparison-table th:nth-child(2),
-table.comparison-table td:nth-child(2),
-table.comparison-table th:nth-child(3),
-table.comparison-table td:nth-child(3){
-    text-align: center;
-}
-
-table.comparison-table th {
-    background: #ededed;
-    font-size: 20px;
-    padding: 25px 15px;
-}
-
-
-table.comparison-table th p:last-child,
-table.comparison-table td p:last-child{
-    margin-bottom: 0;
-}
-
-table.comparison-table td span{
-    font-weight: bold;
-}
-
-table.comparison-table tr:hover{
-    background: #EEE;
-}
-
-a.buy-pro-btn {
-    display: block;
-    background: #b92424;
-    color: #fff;
-    text-decoration: none;
-    padding: 15px 20px;
-    border-radius: 5px;
-    text-align: center;
-}
-
-a.buy-pro-btn:hover{
-    background: #981f1f
-}
-
-.about-wrap .three-col .support-process.col:last-child{
-    background: #0073aa;
-    color: #FFF;
-}
-
-.about-wrap .three-col .support-process.col:last-child h3{
-    color: #FFF;
-}
-
-.about-wrap .three-col .support-process.col:last-child{
-   background: #0073aa;
-   color: #FFF;
-}
-
-.about-wrap .three-col .support-process.col:last-child h3{
-   color: #FFF;
-}
-
-.free_vs_pro .three-col h4{
-   font-weight: bold;
-}
-
-.free_vs_pro .three-col{
- margin-bottom: 30px;
-}
-
-.free_vs_pro .three-col .col{
- border: 5px solid #E0E0E0;
- padding: 15px 30px;
- text-align: center;
-}
-
-.free_vs_pro .three-col .col:hover{
-   background: #EEE;
-}
\ No newline at end of file
diff --git a/welcome/css/wlogo.png b/welcome/css/wlogo.png
deleted file mode 100644 (file)
index 50273d5..0000000
Binary files a/welcome/css/wlogo.png and /dev/null differ
diff --git a/welcome/css/yes.png b/welcome/css/yes.png
deleted file mode 100644 (file)
index bf13317..0000000
Binary files a/welcome/css/yes.png and /dev/null differ
diff --git a/welcome/js/welcome.js b/welcome/js/welcome.js
deleted file mode 100644 (file)
index 46d7acd..0000000
+++ /dev/null
@@ -1,156 +0,0 @@
-/**
- *
- * Welcome Page Scripts
- *
- */
-jQuery(document).ready(function ($) {
-       
-       /** Ajax Plugin Installation **/
-       $(".plugin-btn-wrapper .install").on('click', function (e) {
-               e.preventDefault();
-               var el = $(this);
-
-               is_loading = true;
-       el.addClass('installing');
-       var plugin = $(el).attr('data-slug');
-       var plugin_file = $(el).attr('data-file');
-       var ajaxurl = accesspressparallaxWelcomeObject.ajaxurl;
-
-               $.ajax({
-                       type: 'POST',
-                       url: ajaxurl,
-                       data: {
-                               action: 'accesspressparallax_plugin_installer',
-                               plugin: plugin,
-                               plugin_file: plugin_file,
-                               nonce: accesspressparallaxWelcomeObject.admin_nonce,
-                       },
-                       success: function(response) {
-
-                               if(response == 'success'){
-                                       
-                                               el.attr('class', 'installed button');
-                                               el.html(accesspressparallaxWelcomeObject.installed_btn);
-                                               
-                               }
-
-                               el.removeClass('installing');
-                               is_loading = false;
-                               location.reload();
-                       },
-                       error: function(xhr, status, error) {
-                       console.log(status);
-                       el.removeClass('installing');
-                       is_loading = false;
-                       }
-               });
-       });
-
-       /** Ajax Plugin Installation (Offlines) **/
-       $('.install-offline').on('click', function (e) {
-               e.preventDefault();
-               var el = $(this);
-
-               is_loading = true;
-       el.addClass('installing');
-
-               var file_location = el.attr('href');
-               var github = $(el).attr('data-github');
-               var slug = $(el).attr('data-slug');
-               var file = el.attr('data-file');
-               $.ajax({
-                       type: 'POST',
-                       url: ajaxurl,
-                       data: {
-                               action: 'accesspressparallax_plugin_offline_installer',
-                               file_location: file_location,
-                               file: file,
-                               slug: slug,
-                               github: github,
-                               dataType: 'json'
-                       },
-                       success: function(response) {
-
-                               if(response == 'success'){
-                                       
-                                       el.attr('class', 'installed button');
-                                       el.html(accesspressparallaxWelcomeObject.installed_btn);
-                                               
-                               }
-
-                               is_loading = false;
-                               location.reload();
-                       },
-                       error: function(xhr, status, error) {
-                       el.removeClass('installing');
-                       is_loading = false;
-                       }
-               });
-       });
-
-       /** Ajax Plugin Activation **/
-       $(".activate").on('click', function (e) {
-               
-               var el = $(this);
-               var plugin = $(el).attr('data-slug');
-
-       var ajaxurl = accesspressparallaxWelcomeObject.ajaxurl;
-       
-       
-               $.ajax({
-                       type: 'POST',
-                       url: ajaxurl,
-                       data: {
-                               action: 'accesspressparallax_plugin_activation',
-                               plugin: plugin,
-                               nonce: accesspressparallaxWelcomeObject.activate_nonce,
-                               dataType: 'json'
-                       },
-                       success: function(response) {
-                               if(response){
-                                       if(response.status === 'success'){
-                                               el.attr('class', 'installed button');
-                                               el.html(accesspressparallaxWelcomeObject.installed_btn);
-                                       }
-                               }
-                               is_loading = false;
-                               location.reload();
-                       },
-                       error: function(xhr, status, error) {
-                       console.log(status);
-                       is_loading = false;
-                       }
-               });
-       });
-
-       /** Ajax Plugin Activation Offline **/
-       $('.activate-offline').on('click', function (e) {
-               e.preventDefault();
-               
-               var el = $(this);
-               var plugin = $(el).attr('data-slug');
-
-               $.ajax({
-                       type: 'POST',
-                       url: ajaxurl,
-                       data: {
-                               action: 'accesspressparallax_plugin_offline_activation',
-                               plugin: plugin,
-                               nonce: accesspressparallaxWelcomeObject.activate_nonce,
-                               dataType: 'json'
-                       },
-                       success: function(response) {
-                               if(response){
-                                       el.attr('class', 'installed button');
-                                       el.html(accesspressparallaxWelcomeObject.installed_btn);
-                               }
-                               is_loading = false;
-                               location.reload();
-                       },
-                       error: function(xhr, status, error) {
-                       console.log(status);
-                       is_loading = false;
-                       }
-               });
-       });
-});
\ No newline at end of file
diff --git a/welcome/sections/free_vs_pro.php b/welcome/sections/free_vs_pro.php
deleted file mode 100644 (file)
index 52e7313..0000000
+++ /dev/null
@@ -1,272 +0,0 @@
-<div class="three-col">
-       <div class="col">
-               <h4><?php esc_html_e('ONE TIME PAYMENT', 'accesspress-parallax');  ?></h4>
-               <p><?php esc_html_e('No renewal needed', 'accesspress-parallax');  ?></p>
-       </div>
-
-       <div class="col">
-               <h4><?php esc_html_e('UNLIMITED DOMAIN LICENCE', 'accesspress-parallax');  ?></h4>
-               <p><?php esc_html_e('Use in as many website as you need', 'accesspress-parallax');  ?></p>
-       </div>
-
-       <div class="col">
-               <h4><?php esc_html_e('FREE UPDATES FOR LIFE TIME', 'accesspress-parallax');  ?></h4>
-               <p><?php esc_html_e('Keep upto date', 'accesspress-parallax'); ?></p>
-       </div>
-</div>
-<table class="comparison-table">
-       <tr>
-               <th><?php esc_html_e('Features', 'accesspress-parallax'); ?></th>
-               <th><?php esc_html_e('Free', 'accesspress-parallax'); ?></th>
-               <th><?php esc_html_e('Pro', 'accesspress-parallax'); ?></th>
-       </tr>
-       <tr>
-               <td>
-                       <span><?php esc_html_e('Demo Import.', 'accesspress-parallax'); ?></span>
-                       <p><?php esc_html_e('Tired of configuring site from scratch. Installation of demo is just one click away.', 'accesspress-parallax'); ?></p>
-               </td>
-               <td>
-                       <img src="<?php echo get_template_directory_uri().'/welcome/css/no.png'; ?>">
-               </td>
-               <td>
-                       <img src="<?php echo get_template_directory_uri().'/welcome/css/yes.png'; ?>">
-               </td>
-       </tr>
-       <tr>
-               <td>
-                       <span><?php esc_html_e('Responsive Design', 'accesspress-parallax'); ?></span>
-                       <p><?php esc_html_e('Displays fine in device with different screen sizes.', 'accesspress-parallax'); ?></p>
-               </td>
-               <td>
-                       <img src="<?php echo get_template_directory_uri().'/welcome/css/yes.png'; ?>">
-               </td>
-               <td>
-                       <img src="<?php echo get_template_directory_uri().'/welcome/css/yes.png'; ?>">
-               </td>
-       </tr>
-       <tr>
-               <td>
-                       <span><?php esc_html_e('Translation Ready', 'accesspress-parallax'); ?></span>
-                       <p><?php esc_html_e('Create the site in your own custom language.', 'accesspress-parallax'); ?></p>
-               </td>
-               <td>
-                       <img src="<?php echo get_template_directory_uri().'/welcome/css/no.png'; ?>">
-               </td>
-               <td>
-                       <img src="<?php echo get_template_directory_uri().'/welcome/css/yes.png'; ?>">
-               </td>
-       </tr>
-       <tr>
-               <td>
-                       <span><?php esc_html_e('Multiple Color Scheme', 'accesspress-parallax'); ?></span>
-                       <p><?php esc_html_e('Choose any theme skin color you like for your site.', 'accesspress-parallax'); ?></p>
-               </td>
-               <td>
-                       <img src="<?php echo get_template_directory_uri().'/welcome/css/no.png'; ?>">
-               </td>
-               <td>
-                       <img src="<?php echo get_template_directory_uri().'/welcome/css/yes.png'; ?>">
-               </td>
-       </tr>
-       <tr>
-               <td>
-                       <span><?php esc_html_e('Based on Theme Options Panel', 'accesspress-parallax'); ?></span>
-                       <p><?php esc_html_e('Easily configure the theme using easy to configure theme options.', 'accesspress-parallax'); ?></p>
-               </td>
-               <td>
-                       <img src="<?php echo get_template_directory_uri().'/welcome/css/yes.png'; ?>">
-               </td>
-               <td>
-                       <img src="<?php echo get_template_directory_uri().'/welcome/css/yes.png'; ?>">
-               </td>
-       </tr>
-       <tr>
-               <td>
-                       <span><?php esc_html_e('WOW Parallax', 'accesspress-parallax'); ?></span>
-                       <p><?php esc_html_e('Multi layer, smooth parallax! Add some interaction on your website, business sites also can be fun to browse!', 'accesspress-parallax'); ?></p>
-               </td>
-               <td>
-                       <img src="<?php echo get_template_directory_uri().'/welcome/css/yes.png'; ?>">
-               </td>
-               <td>
-                       <img src="<?php echo get_template_directory_uri().'/welcome/css/yes.png'; ?>">
-               </td>
-       </tr>
-       <tr>
-               <td>
-                       <span><?php esc_html_e('Featured Slider', 'accesspress-parallax'); ?></span>
-                       <p><?php esc_html_e('Configure a beautiful Featured Slider', 'accesspress-parallax'); ?></p>
-               </td>
-               <td>
-                       <img src="<?php echo get_template_directory_uri().'/welcome/css/yes.png'; ?>">
-               </td>
-               <td>
-                       <img src="<?php echo get_template_directory_uri().'/welcome/css/yes.png'; ?>">
-               </td>
-       </tr>
-       <tr>
-               <td>
-                       <span><?php esc_html_e('Header Layouts', 'accesspress-parallax'); ?></span>
-                       <p><?php esc_html_e('Choose any header layout for the site from the available multiple header layouts.', 'accesspress-parallax'); ?></p>
-               </td>
-               <td>
-                       <span><?php esc_html_e('2', 'accesspress-parallax'); ?></span>
-               </td>
-               <td>
-                       <span><?php esc_html_e('4', 'accesspress-parallax'); ?></span>
-               </td>
-       </tr>
-       <tr>
-               <td>
-                       <span><?php esc_html_e('Supports Revolution Slider', 'accesspress-parallax'); ?></span>
-                       <p><?php esc_html_e('Integrate a feature rich slider in your website.', 'accesspress-parallax'); ?></p>
-               </td>
-               <td>
-                       <img src="<?php echo get_template_directory_uri().'/welcome/css/no.png'; ?>">
-               </td>
-               <td>
-                       <img src="<?php echo get_template_directory_uri().'/welcome/css/yes.png'; ?>">
-               </td>
-       </tr>
-       <tr>
-               <td>
-                       <span><?php esc_html_e('Advance Parallax Scrolling', 'accesspress-parallax'); ?></span>
-                       <p><?php esc_html_e('Have advanced parallax scrolling with css3 animation in your website.', 'accesspress-parallax'); ?></p>
-               </td>
-               <td>
-                       <img src="<?php echo get_template_directory_uri().'/welcome/css/no.png'; ?>">
-               </td>
-               <td>
-                       <img src="<?php echo get_template_directory_uri().'/welcome/css/yes.png'; ?>">
-               </td>
-       </tr>
-       <tr>
-               <td>
-                       <span><?php esc_html_e('Cool Animation Effects', 'accesspress-parallax'); ?></span>
-                       <p><?php esc_html_e('Have a new interactive sections with cool animation effects.', 'accesspress-parallax'); ?></p>
-               </td>
-               <td>
-                       <img src="<?php echo get_template_directory_uri().'/welcome/css/no.png'; ?>">
-               </td>
-               <td>
-                       <img src="<?php echo get_template_directory_uri().'/welcome/css/yes.png'; ?>">
-               </td>
-       </tr>
-       <tr>
-               <td>
-                       <span><?php esc_html_e('Multiple Page Layout', 'accesspress-parallax'); ?></span>
-                       <p><?php esc_html_e('Have variation amongst the pages choosing the layout from the multiple page layouts.', 'accesspress-parallax'); ?></p>
-               </td>
-               <td>
-                       <img src="<?php echo get_template_directory_uri().'/welcome/css/no.png'; ?>">
-               </td>
-               <td>
-                       <img src="<?php echo get_template_directory_uri().'/welcome/css/yes.png'; ?>">
-               </td>
-       </tr>
-       <tr>
-               <td>
-                       <span><?php esc_html_e('Multiple Portfolio Layout', 'accesspress-parallax'); ?></span>
-                       <p><?php esc_html_e('Choose anyone layout for your portfolio page from the multiple portfolio layouts.', 'accesspress-parallax'); ?></p>
-               </td>
-               <td>
-                       <span><?php esc_html_e('1', 'accesspress-parallax'); ?></span>
-               </td>
-               <td>
-                       <span><?php esc_html_e('2', 'accesspress-parallax'); ?></span>
-               </td>
-       </tr>
-       <tr>
-               <td>
-                       <span><?php esc_html_e('Advanced Breadcrumb Settins', 'accesspress-parallax'); ?></span>
-                       <p><?php esc_html_e('Customize breadcrumb to display the way you want with advanced options to customize.', 'accesspress-parallax'); ?></p>
-               </td>
-               <td>
-                       <img src="<?php echo get_template_directory_uri().'/welcome/css/no.png'; ?>">
-               </td>
-               <td>
-                       <img src="<?php echo get_template_directory_uri().'/welcome/css/yes.png'; ?>">
-               </td>
-       </tr>
-       <tr>
-               <td>
-                       <span><?php esc_html_e('Multiple Background Option', 'accesspress-parallax'); ?></span>
-                       <p><?php esc_html_e('Choose to display either solid color, pattern or image as a background for your website.', 'accesspress-parallax'); ?></p>
-               </td>
-               <td>
-                       <img src="<?php echo get_template_directory_uri().'/welcome/css/no.png'; ?>">
-               </td>
-               <td>
-                       <img src="<?php echo get_template_directory_uri().'/welcome/css/yes.png'; ?>">
-               </td>
-       </tr>
-       <tr>
-               <td>
-                       <span><?php esc_html_e('Typography Option', 'accesspress-parallax'); ?></span>
-                       <p><?php esc_html_e('Set the fonts for your website from available 600+ Google Fonts.', 'accesspress-parallax'); ?></p>
-               </td>
-               <td>
-                       <img src="<?php echo get_template_directory_uri().'/welcome/css/no.png'; ?>">
-               </td>
-               <td>
-                       <img src="<?php echo get_template_directory_uri().'/welcome/css/yes.png'; ?>">
-               </td>
-       </tr>
-       <tr>
-               <td>
-                       <span><?php esc_html_e('Inbuilt Shortcodes', 'accesspress-parallax'); ?></span>
-                       <p><?php esc_html_e('Build feature rich pages using beautiful inbuilt shortcodes.', 'accesspress-parallax'); ?></p>
-               </td>
-               <td>
-                       <span><?php esc_html_e('0', 'accesspress-parallax'); ?></span>
-               </td>
-               <td>
-                       <span><?php esc_html_e('13', 'accesspress-parallax'); ?></span>
-               </td>
-       </tr>
-       <tr>
-               <td>
-                       <span><?php esc_html_e('Inbuilt Widgets', 'accesspress-parallax'); ?></span>
-                       <p><?php esc_html_e('Create a feature rich page in an instant using the inbuilt widgets.', 'accesspress-parallax'); ?></p>
-               </td>
-               <td>
-                       <span><?php esc_html_e('1', 'accesspress-parallax'); ?></span>
-               </td>
-               <td>
-                       <span><?php esc_html_e('16', 'accesspress-parallax'); ?></span>
-               </td>
-       </tr>
-       <tr>
-               <td>
-                       <span><?php esc_html_e('Fully WooCommerce Compatible', 'accesspress-parallax'); ?></span>
-                       <p><?php esc_html_e('Yes - Stop your WooCommerce theme search here.', 'accesspress-parallax'); ?></p>
-               </td>
-               <td>
-                       <img src="<?php echo get_template_directory_uri().'/welcome/css/yes.png'; ?>">
-               </td>
-               <td>
-                       <img src="<?php echo get_template_directory_uri().'/welcome/css/yes.png'; ?>">
-               </td>
-       </tr>
-       <tr>
-               <td>
-                       <span><?php esc_html_e('SEO Optimized', 'accesspress-parallax'); ?></span>
-                       <p><?php esc_html_e('Google will love it.', 'accesspress-parallax'); ?></p>
-               </td>
-               <td>
-                       <img src="<?php echo get_template_directory_uri().'/welcome/css/yes.png'; ?>">
-               </td>
-               <td>
-                       <img src="<?php echo get_template_directory_uri().'/welcome/css/yes.png'; ?>">
-               </td>
-       </tr>
-       <tr>
-               <td>
-                       <span><?php esc_html_e('Upgrade to Pro', 'accesspress-parallax'); ?></span>
-                       <p><?php esc_html_e('Upgrade to pro version for additional features and better supports.', 'accesspress-parallax'); ?></p>
-               </td>
-               <td colspan="2">
-                       <a class="buy-pro-btn" href="http://accesspressthemes.com/wordpress-themes/accesspress-parallax-pro/"><?php esc_html_e('Buy Now', 'accesspress-parallax'); ?></a>
-               </td>
-       </tr>
-</table>
\ No newline at end of file
diff --git a/welcome/sections/getting_started.php b/welcome/sections/getting_started.php
deleted file mode 100644 (file)
index c53178c..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-<div class="theme-steps-list">
-
-       <div class="theme-steps">
-               <h3><?php echo esc_html__('Step 1 - Documentation', 'accesspress-parallax'); ?></h3>
-               <p><?php echo esc_html__('Read the detailed documentation of the theme. The documentation contain all the necessary information required to setup the theme AccessPress Parallax.', 'accesspress-parallax'); ?></p>
-               <a target='__blank' class="button" href="https://accesspressthemes.com/theme-instruction-accesspress-parallax"><?php echo esc_html__('Read Documentation', 'accesspress-parallax'); ?></a>
-       </div>
-
-       <div class="theme-steps">
-               <h3><?php echo esc_html__('Step 2 - Theme Options Panel', 'accesspress-parallax'); ?></h3>
-               <p><?php echo esc_html__('Using the WordPress Customizer you can easily customize every aspect of the theme.', 'accesspress-parallax'); ?></p>
-               <a class="button button-primary" href="<?php echo esc_url(admin_url('themes.php?page=theme-options')); ?>"><?php echo esc_html__('Go to Theme Options Panels', 'accesspress-parallax'); ?></a>
-       </div>
-
-</div>
-
-<div class="theme-image">
-       <img src="<?php echo get_template_directory_uri() ?>/screenshot.png">
-</div>
\ No newline at end of file
diff --git a/welcome/sections/recommended_plugins.php b/welcome/sections/recommended_plugins.php
deleted file mode 100644 (file)
index 5c77eee..0000000
+++ /dev/null
@@ -1,120 +0,0 @@
-<?php
-       wp_enqueue_style( 'plugin-install' );
-       wp_enqueue_script( 'plugin-install' );
-       wp_enqueue_script( 'updates' );
-       $free_plugins = $this->free_plugins;
-       $pro_plugins = $this->pro_plugins;
-
-       if(!empty($pro_plugins)) {
-               ?>
-               <h4 class="recomplug-title"><?php echo esc_html__('Pro Plugins', 'accesspress-parallax'); ?></h4>
-               <p><?php echo esc_html__('Take Advantage of some of our Premium Plugins', 'accesspress-parallax'); ?></p>
-               <div class="recomended-plugin-wrap">
-               <?php
-               foreach($pro_plugins as $plugin) {
-
-                       $status = $this->accesspressparallax_plugin_active($plugin);
-                       $icon_url = $plugin['screenshot'];
-                       switch($status) {
-                               case 'install' :
-                                       $btn_class = 'install-offline button';
-                                       $label = esc_html__('Install and Activate', 'accesspress-parallax');
-                                       $link = $plugin['location'];
-                                       break;
-
-                               case 'inactive' :
-                                       $btn_class = 'button';
-                                       $label = esc_html__('Deactivate', 'accesspress-parallax');
-                                       $link = admin_url('plugins.php');
-                                       break;
-
-                               case 'active' :
-                                       $btn_class = 'activate-offline button button-primary';
-                                       $label = esc_html__('Activate', 'accesspress-parallax');
-                                       $link = $plugin['location'];
-                                       break;
-                       }
-
-                       ?>
-                               <div class="recom-plugin-wrap">
-                                       <div class="plugin-img-wrap">
-                                               <img src="<?php echo esc_url($icon_url); ?>" />
-                                               <div class="version-author-info">
-                                                       <span class="version"><?php printf('Version %s', $plugin['version']); ?></span>
-                                                       <span class="seperator">|</span>
-                                                       <span class="author"><?php echo esc_html($plugin['author']); ?></span>
-                                               </div>
-                                       </div>
-                                       <div class="plugin-title-install clearfix">
-                                               <span class="title" title="<?php echo $plugin['name']; ?>">
-                                                       <?php echo esc_html($plugin['name']); ?>
-                                               </span>
-
-                                               <span class="plugin-btn-wrapper plugin-card-<?php echo esc_attr($plugin['slug']); ?>">
-                                                       <a class="<?php echo esc_attr($btn_class); ?>" data-file="<?php echo esc_attr($plugin['slug']).'/'.esc_attr($plugin['filename']); ?>" data-slug="<?php echo esc_attr($plugin['slug']); ?>" href="<?php echo esc_html($link); ?>"><?php echo $label; ?></a>
-                                               </span>
-                                       </div>
-                               </div>
-                       <?php
-               } ?>
-               </div>
-       <?php
-       }
-
-       if(!empty($free_plugins)) {
-               ?>
-               <h4 class="recomplug-title"><?php echo esc_html__('Free Plugins', 'accesspress-parallax'); ?></h4>
-               <p><?php echo esc_html__('These Free Plugins might be handy for you.', 'accesspress-parallax'); ?></p>
-               <div class="recomended-plugin-wrap">
-               <?php
-               foreach($free_plugins as $plugin) {
-                       $info = $this->accesspressparallax_call_plugin_api($plugin['slug']);
-
-                       $icon_url = $this->accesspressparallax_check_for_icon($info->icons);
-                       $status = $this->accesspressparallax_plugin_active($plugin);
-                       $btn_url = $this->accesspressparallax_plugin_generate_url($status, $plugin);
-
-                       switch($status) {
-                               case 'install' :
-                                       $btn_class = 'install button';
-                                       $label = esc_html__('Install and Activate', 'accesspress-parallax');
-                                       break;
-
-                               case 'inactive' :
-                                       $btn_class = 'button';
-                                       $label = esc_html__('Deactivate', 'accesspress-parallax');
-                                       break;
-
-                               case 'active' :
-                                       $btn_class = 'activate button button-primary';
-                                       $label = esc_html__('Activate', 'accesspress-parallax');
-                                       break;
-                       }
-
-                       ?>
-                               <div class="recom-plugin-wrap">
-                                       <div class="plugin-img-wrap">
-                                               <img src="<?php echo esc_url($icon_url); ?>" />
-                                               <div class="version-author-info">
-                                                       <span class="version"><?php printf('Version %s', $info->version); ?></span>
-                                                       <span class="seperator">|</span>
-                                                       <span class="author"><?php echo $info->author; ?></span>
-                                               </div>
-                                       </div>
-                                       <div class="plugin-title-install clearfix">
-                                               <span class="title" title="<?php echo $info->name; ?>">
-                                                       <?php
-                                                               echo esc_html($info->name);
-                                                       ?>      
-                                               </span>
-
-                                               <span class="plugin-btn-wrapper plugin-card-<?php echo esc_attr($plugin['slug']); ?>" action_button>
-                                                       <a class="<?php echo esc_attr($btn_class); ?>" data-file"<?php echo esc_attr($plugin['slug']); ?>" data-slug="<?php echo esc_attr($plugin['slug']); ?>" href="<?php echo esc_url($btn_url); ?>"><?php echo $label; ?></a>
-                                               </span>
-                                       </div>
-                               </div>
-                       <?php
-               } ?>
-               </div>
-       <?php
-       }
\ No newline at end of file
diff --git a/welcome/sections/support.php b/welcome/sections/support.php
deleted file mode 100644 (file)
index 0cb81ad..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-<div class="two-col">
-       <div class="support-process col">
-               <h3><?php echo esc_html__('Documentation', 'accesspress-parallax'); ?></h3>
-               <p><?php printf(esc_html__('Read the detailed documentation of the theme. The documentation contain all the necessary information required to setup the theme %s.', 'accesspress-parallax'), $this->theme_name ); ?></p>
-               <a class="button" target="_blank" href="https://accesspressthemes.com/theme-instruction-accesspress-parallax"><?php echo esc_html__('Read Full Documentation', 'accesspress-parallax'); ?></a>
-       </div>
-
-       <div class="support-process col">
-               <h3><?php echo esc_html__('Create Support Tickets', 'accesspress-parallax'); ?></h3>
-               <p><?php echo esc_html__('Still having problem after reading all the documentation? No Problem!! Please create a support ticket. Our dedicated support team will help you to solve your problem', 'accesspress-parallax'); ?></p>
-               <a class="button" target="_blank" href="http://accesspressthemes.com/support/"><?php echo esc_html__('Create Support Tickets', 'accesspress-parallax'); ?></a>
-       </div>
-</div>
-
-<div class="useful-articles-wrapper three-col">
-       <div class="support-process col">
-               <h3><?php echo esc_html__('Visuals Matters for Site Traffic', 'accesspress-parallax'); ?></h3>
-               <p><?php echo esc_html__('Without a good design, a site just looks lame, hence decreasing the site visitors. That is why you should care a lot about how your WordPress blog looks. If you wanna learn more on why visuals matters for site traffic follow the below link', 'accesspress-parallax') ?></p>
-               <a class="button" target="_blank" href="https://wpall.club/wordpress-articles-board/how-to-improve-your-wordpress-blog-design-using-visuals/"><?php echo esc_html__('Read Full Article', 'accesspress-parallax'); ?></a>
-       </div>
-
-       <div class="support-process col">
-               <h3><?php echo esc_html__('Attract More Customers to Your Site', 'accesspress-parallax'); ?></h3>
-               <p><?php echo esc_html__('No matter how many efforts you have made in making a website, it is of no use if the users do not find it appealing. If the visitors are leaving you in few seconds. Learn how to attract the new visitors and keep the old visitors following this very very article', 'accesspress-parallax'); ?></p>
-               <a class="button" target="_blank" href="https://accesspressthemes.com/blog/how-to-improve-customer-retention-on-your-wordpress-site/"><?php echo esc_html__('Read Full Article', 'accesspress-parallax'); ?></a>
-       </div>
-
-       <div class="support-process col">
-               <h3><?php echo esc_html__('More WordPress Resources', 'accesspress-parallax'); ?></h3>
-               <p><?php echo esc_html__('Want to learn some more on themes ? Visit the following link for more information on latest articles on themes and plugins.', 'accesspress-parallax'); ?></p>
-               <a class="button" target="_blank" href="https://wpall.club/"><?php echo esc_html__('View More', 'accesspress-parallax'); ?></a>
-       </div>
-</div>
\ No newline at end of file
diff --git a/welcome/welcome.php b/welcome/welcome.php
deleted file mode 100644 (file)
index ae05c7d..0000000
+++ /dev/null
@@ -1,544 +0,0 @@
-<?php
-       if(!class_exists('Accesspress_Parallax_Welcome')) :
-
-               class Accesspress_Parallax_Welcome {
-
-                       public $tab_sections = array();
-
-                       public $theme_name = ''; // For storing Theme Name
-                       public $theme_version = ''; // For Storing Theme Current Version Information
-                       public $free_plugins = array(); // For Storing the list of the Recommended Free Plugins
-                       public $pro_plugins = array(); // For Storing the list of the Recommended Pro Plugins
-                       public $req_plugins = array(); // For Storing the list of the Required Plugins
-                       public $companion_plugins = array(); // For Storing the list of the Companion Plugins
-
-                       /**
-                        * Constructor for the Welcome Screen
-                        */
-                       public function __construct() {
-                               
-                               /** Useful Variables **/
-                               $theme = wp_get_theme();
-                               $this->theme_name = $theme->Name;
-                               $this->theme_version = $theme->Version;
-
-                               /** List of Companion Plugins **/
-                               $this->companion_plugins = array();
-
-                               /** List of required Plugins **/
-                               $this->req_plugins = array(
-
-                                       'instant-demo-importer' => array(
-                                               'slug' => 'instant-demo-importer',
-                                               'name' => __('Instant Demo Importer', 'accesspress-parallax'),
-                                               'filename' =>'instant-demo-importer.php',
-                                               'class' => 'Instant_Demo_Importer',
-                                               'github_repo' => true,
-                                               'bundled' => true,
-                                               'location' => 'https://github.com/WPaccesskeys/instant-demo-importer/archive/master.zip',
-                                               'info' => __('Instant Demo Importer Plugin adds the feature to Import the Demo Conent with a single click.', 'accesspress-parallax'),
-                                       ),
-
-                               );
-
-                               /** Define Tabs Sections **/
-                               $this->tab_sections = array(
-                                       'getting_started' => __('Getting Started', 'accesspress-parallax'),
-                                       'recommended_plugins' => __('Recommended Plugins', 'accesspress-parallax'),
-                                       'support' => __('Support', 'accesspress-parallax'),
-                                       'free_vs_pro' => __('Free vs Pro', 'accesspress-parallax'),
-                               );
-
-                               /** List of Recommended Free Plugins **/
-                               $this->free_plugins = array(
-                                       'woocommerce' => array(
-                                               'slug' => 'woocommerce',
-                                               'filename' =>'woocommerce.php',
-                                               'class' => 'WooCommerce',
-                                       ),
-
-                                       'accesspress-social-icons' => array(
-                                               'slug' => 'accesspress-social-icons',
-                                               'filename' => 'accesspress-social-icons.php',
-                                               'class' => 'APS_Class'
-                                       ),
-
-                                       'accesspress-social-share' => array(
-                                               'slug' => 'accesspress-social-share',
-                                               'filename' => 'accesspress-social-share.php',
-                                               'class' => 'APSS_Class'
-                                       ),
-
-                                       'accesspress-instagram-feed' => array(
-                                               'slug' => 'accesspress-instagram-feed',
-                                               'filename' => 'accesspress-instagram-feed.php',
-                                               'class' => 'APSS_Class'
-                                       ),
-
-                                       'ap-custom-testimonial' => array(
-                                               'slug' => 'ap-custom-testimonial',
-                                               'filename' => 'ap-custom-testimonial.php',
-                                               'class' => 'APCT_free'
-                                       ),
-
-                                       'accesspress-twitter-feed' => array(
-                                               'slug' => 'accesspress-twitter-feed',
-                                               'filename' => 'accesspress-twitter-feed.php',
-                                               'class' => 'APTF_Class'
-                                       ),
-                               );
-
-                               /** List of Recommended Pro Plugins **/
-                               $this->pro_plugins = array();
-
-                               /* Theme Activation Notice */
-                               add_action( 'load-themes.php', array( $this, 'accesspressparallax_activation_admin_notice' ) );
-
-                               /* Create a Welcome Page */
-                               add_action( 'admin_menu', array( $this, 'accesspressparallax_welcome_register_menu' ) );
-
-                               /* Enqueue Styles & Scripts for Welcome Page */
-                               add_action( 'admin_enqueue_scripts', array( $this, 'accesspressparallax_welcome_styles_and_scripts' ) );
-
-                               /** Plugin Installation Ajax **/
-                               add_action( 'wp_ajax_accesspressparallax_plugin_installer', array( $this, 'accesspressparallax_plugin_installer_callback' ) );
-
-                               /** Plugin Installation Ajax **/
-                               add_action( 'wp_ajax_accesspressparallax_plugin_offline_installer', array( $this, 'accesspressparallax_plugin_offline_installer_callback' ) );
-
-                               /** Plugin Activation Ajax **/
-                               add_action( 'wp_ajax_accesspressparallax_plugin_activation', array( $this, 'accesspressparallax_plugin_activation_callback' ) );
-
-                               /** Plugin Activation Ajax (Offline) **/
-                               add_action( 'wp_ajax_accesspressparallax_plugin_offline_activation', array( $this, 'accesspressparallax_plugin_offline_activation_callback' ) );
-
-                               //add_action( 'init', array( $this, 'get_required_plugin_notification' ));
-
-                       }
-
-                       public function get_required_plugin_notification() {
-                               
-                               $req_plugins = $this->companion_plugins;
-                               $notif_counter = count($this->companion_plugins);
-
-                               foreach($req_plugins as $plugin) {
-                                       $folder_name = $plugin['slug'];
-                                       $file_name = $plugin['filename'];
-                                       $path = WP_PLUGIN_DIR.'/'.esc_attr($folder_name).'/'.esc_attr($file_name);
-                                       if(file_exists( $path )) {
-                                               if(class_exists($plugin['class'])) {
-                                                       $notif_counter--;
-                                               }
-                                       }
-                               }
-
-                               return $notif_counter;
-                       }
-
-                       /** Welcome Message Notification on Theme Activation **/
-                       public function accesspressparallax_activation_admin_notice() {
-                               global $pagenow;
-
-                               if( is_admin() && ('themes.php' == $pagenow) && (isset($_GET['activated'])) ) {
-                                       ?>
-                                       <div class="notice notice-success is-dismissible">
-                                               <p><?php printf( __( 'Welcome! Thank you for choosing %1$s! Please make sure you visit our <a href="%2$s">Welcome page</a> to get started with %1$s.', 'accesspress-parallax' ), $this->theme_name, admin_url( 'themes.php?page=accesspressparallax-welcome' )  ); ?></p>
-                                               <p><a class="button" href="<?php echo admin_url( 'themes.php?page=accesspressparallax-welcome' ) ?>"><?php _e( 'Lets Get Started', 'accesspress-parallax' ); ?></a></p>
-                                       </div>
-                                       <?php
-                               }
-                       }
-
-                       /** Register Menu for Welcome Page **/
-                       public function accesspressparallax_welcome_register_menu() {
-                               $not = $this->get_required_plugin_notification();
-                               $title = $not > 0 ? 'Welcome <span class="pending-tasks">'.$not.'</span>' : esc_html__( 'Welcome', 'accesspress-parallax' );
-                               add_theme_page( 'Welcome', $title , 'edit_theme_options', 'accesspressparallax-welcome', array( $this, 'accesspressparallax_welcome_screen' ));
-                       }
-
-                       /** Welcome Page **/
-                       public function accesspressparallax_welcome_screen() {
-                               $tabs = $this->tab_sections;
-
-                               $current_section = isset($_GET['section']) ? $_GET['section'] : 'getting_started';
-                               $section_inline_style = '';
-                               ?>
-                               <div class="wrap about-wrap access-wrap">
-                                       <h1><?php printf( esc_html__( 'Welcome to %s - Version %s', 'accesspress-parallax' ), $this->theme_name, $this->theme_version ); ?></h1>
-                                       <div class="about-text"><?php printf( esc_html__( '%s is a beautiful WordPress theme with Parallax design. Parallax design has become popular and is widely implemented these days. This is probably the most beautiful, feature rich and complete free WordPress parallax theme with useful features.', 'accesspress-parallax' ), $this->theme_name ); ?></div>
-
-                                       <a target="_blank" href="http://www.accesspressthemes.com" class="accesspress-badge wp-badge"><span><?php echo esc_html('AccessPressThemes'); ?></span></a>
-
-                               <div class="nav-tab-wrapper clearfix">
-                                       <?php foreach($tabs as $id => $label) : ?>
-                                               <?php
-                                                       $section = isset($_REQUEST['section']) ? esc_attr($_REQUEST['section']) : 'getting_started';
-                                                       $nav_class = 'nav-tab';
-                                                       if($id == $section) {
-                                                               $nav_class .= ' nav-tab-active';
-                                                       }
-                                               ?>
-                                               <a href="<?php echo admin_url('themes.php?page=accesspressparallax-welcome&section='.$id); ?>" class="<?php echo $nav_class; ?>" >
-                                                       <?php echo esc_html( $label ); ?>
-                                                       <?php if($id == 'actions_required') : $not = $this->get_required_plugin_notification(); ?>
-                                                               <?php if($not) : ?>
-                                                                       <span class="pending-tasks">
-                                                                               <?php echo $not; ?>
-                                                                       </span>
-                                                               <?php endif; ?>
-                                                       <?php endif; ?>
-                                               </a>
-                                       <?php endforeach; ?>
-                               </div>
-
-                               <div class="welcome-section-wrapper">
-                                       <?php $section = isset($_REQUEST['section']) ? $_REQUEST['section'] : 'getting_started'; ?>
-                                       
-                                       <div class="welcome-section <?php echo esc_attr($section); ?> clearfix">
-                                               <?php require_once get_template_directory() . '/welcome/sections/'.esc_html($section).'.php'; ?>
-                                       </div>
-                               </div>
-                               </div>
-                               <?php
-                       }
-
-                       /** Enqueue Necessary Styles and Scripts for the Welcome Page **/
-                       public function accesspressparallax_welcome_styles_and_scripts() {
-                               wp_enqueue_style( 'accesspress-basic-welcome-screen', get_template_directory_uri() . '/welcome/css/welcome.css' );
-                               wp_enqueue_script( 'accesspress-basic-welcome-screen', get_template_directory_uri() . '/welcome/js/welcome.js', array( 'jquery' ) );
-
-                               wp_localize_script( 'accesspress-basic-welcome-screen', 'accesspressparallaxWelcomeObject', array(
-                                       'admin_nonce'   => wp_create_nonce('accesspressparallax_plugin_installer_nonce'),
-                                       'activate_nonce'        => wp_create_nonce('accesspressparallax_plugin_activate_nonce'),
-                                       'ajaxurl'               => esc_url( admin_url( 'admin-ajax.php' ) ),
-                                       'activate_btn' => __('Activate', 'accesspress-parallax'),
-                                       'installed_btn' => __('Activated', 'accesspress-parallax'),
-                                       'demo_installing' => __('Installing Demo', 'accesspress-parallax'),
-                                       'demo_installed' => __('Demo Installed', 'accesspress-parallax'),
-                                       'demo_confirm' => __('Are you sure to import demo content ?', 'accesspress-parallax'),
-                               ) );
-                       }
-
-                       /** Plugin API **/
-                       public function accesspressparallax_call_plugin_api( $plugin ) {
-                               include_once ABSPATH . 'wp-admin/includes/plugin-install.php';
-
-                               $call_api = plugins_api( 'plugin_information', array(
-                                       'slug'   => $plugin,
-                                       'fields' => array(
-                                               'downloaded'        => false,
-                                               'rating'            => false,
-                                               'description'       => false,
-                                               'short_description' => true,
-                                               'donate_link'       => false,
-                                               'tags'              => false,
-                                               'sections'          => true,
-                                               'homepage'          => true,
-                                               'added'             => false,
-                                               'last_updated'      => false,
-                                               'compatibility'     => false,
-                                               'tested'            => false,
-                                               'requires'          => false,
-                                               'downloadlink'      => false,
-                                               'icons'             => true
-                                       )
-                               ) );
-
-                               return $call_api;
-                       }
-
-                       /** Check For Icon **/
-                       public function accesspressparallax_check_for_icon( $arr ) {
-                               if ( ! empty( $arr['svg'] ) ) {
-                                       $plugin_icon_url = $arr['svg'];
-                               } elseif ( ! empty( $arr['2x'] ) ) {
-                                       $plugin_icon_url = $arr['2x'];
-                               } elseif ( ! empty( $arr['1x'] ) ) {
-                                       $plugin_icon_url = $arr['1x'];
-                               } else {
-                                       $plugin_icon_url = $arr['default'];
-                               }
-
-                               return $plugin_icon_url;
-                       }
-
-                       /** Check if Plugin is active or not **/
-                       public function accesspressparallax_plugin_active($plugin) {
-                               $folder_name = $plugin['slug'];
-                               $file_name = $plugin['filename'];
-                               $status = 'install';
-
-                               $path = WP_PLUGIN_DIR.'/'.esc_attr($folder_name).'/'.esc_attr($file_name);
-
-                               if(file_exists( $path )) {
-                                       $status = class_exists($plugin['class']) ? 'inactive' : 'active';
-                               }
-
-                               return $status;
-                       }
-
-                       /** Generate Url for the Plugin Button **/
-                       public function accesspressparallax_plugin_generate_url($status, $plugin) {
-                               $folder_name = $plugin['slug'];
-                               $file_name = $plugin['filename'];
-
-                               switch ( $status ) {
-                                       case 'install':
-                                               return wp_nonce_url(
-                                                       add_query_arg(
-                                                               array(
-                                                                       'action' => 'install-plugin',
-                                                                       'plugin' => esc_attr($folder_name)
-                                                               ),
-                                                               network_admin_url( 'update.php' )
-                                                       ),
-                                                       'install-plugin_' . esc_attr($folder_name)
-                                               );
-                                               break;
-
-                                       case 'inactive':
-                                               return add_query_arg( array(
-                                                                             'action'        => 'deactivate',
-                                                                             'plugin'        => rawurlencode( esc_attr($folder_name) . '/' . esc_attr($file_name) ),
-                                                                             'plugin_status' => 'all',
-                                                                             'paged'         => '1',
-                                                                             '_wpnonce'      => wp_create_nonce( 'deactivate-plugin_' . esc_attr($folder_name) . '/' . esc_attr($file_name) ),
-                                                                     ), network_admin_url( 'plugins.php' ) );
-                                               break;
-
-                                       case 'active':
-                                               return add_query_arg( array(
-                                                                             'action'        => 'activate',
-                                                                             'plugin'        => rawurlencode( esc_attr($folder_name) . '/' . esc_attr($file_name) ),
-                                                                             'plugin_status' => 'all',
-                                                                             'paged'         => '1',
-                                                                             '_wpnonce'      => wp_create_nonce( 'activate-plugin_' . esc_attr($folder_name) . '/' . esc_attr($file_name) ),
-                                                                     ), network_admin_url( 'plugins.php' ) );
-                                               break;
-                               }
-                       }
-
-                       /* ========== Plugin Installation Ajax =========== */
-                       public function accesspressparallax_plugin_installer_callback(){
-
-                               if ( ! current_user_can('install_plugins') )
-                                       wp_die( __( 'Sorry, you are not allowed to install plugins on this site.', 'accesspress-parallax' ) );
-
-                               $nonce = $_POST["nonce"];
-                               $plugin = $_POST["plugin"];
-                               $plugin_file = $_POST["plugin_file"];
-
-                               // Check our nonce, if they don't match then bounce!
-                               if (! wp_verify_nonce( $nonce, 'accesspressparallax_plugin_installer_nonce' ))
-                                       wp_die( __( 'Error - unable to verify nonce, please try again.', 'accesspress-parallax') );
-
-
-                       // Include required libs for installation
-                               require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
-                               require_once ABSPATH . 'wp-admin/includes/class-wp-ajax-upgrader-skin.php';
-                               require_once ABSPATH . 'wp-admin/includes/class-plugin-upgrader.php';
-
-                               // Get Plugin Info
-                               $api = $this->accesspressparallax_call_plugin_api($plugin);
-
-                               $skin     = new WP_Ajax_Upgrader_Skin();
-                               $upgrader = new Plugin_Upgrader( $skin );
-                               $upgrader->install($api->download_link);
-
-                               $plugin_file = ABSPATH . 'wp-content/plugins/'.esc_html($plugin).'/'.esc_html($plugin_file);
-
-                               if($api->name) {
-                                       $main_plugin_file = $this->get_plugin_file($plugin);
-                                       if($main_plugin_file){
-                                               activate_plugin($main_plugin_file);
-                                               echo "success";
-                                               die();
-                                       }
-                               }
-                               echo "fail";
-
-                               die();
-                       }
-
-                       /** Plugin Offline Installation Ajax **/
-                       public function accesspressparallax_plugin_offline_installer_callback() {
-
-                               
-                               $file_location = $_POST['file_location'];
-                               $file = $_POST['file'];
-                               $github = $_POST['github'];
-                               $slug = $_POST['slug'];
-                               $plugin_directory = ABSPATH . 'wp-content/plugins/';
-
-                               $zip = new ZipArchive;
-                               if ($zip->open(esc_html($file_location)) === TRUE) {
-
-                                   $zip->extractTo($plugin_directory);
-                                   $zip->close();
-
-                                   if($github) {
-                                       rename(realpath($plugin_directory).'/'.$slug.'-master', realpath($plugin_directory).'/'.$slug);
-                                   }
-                                   
-                                   activate_plugin($file);
-                                       echo "success";
-                                       die();
-                               } else {
-                                   echo 'failed';
-                               }
-
-                               die();
-                       }
-
-                       /** Plugin Offline Activation Ajax **/
-                       public function accesspressparallax_plugin_offline_activation_callback() {
-
-                               $plugin = $_POST['plugin'];
-                               $plugin_file = ABSPATH . 'wp-content/plugins/'.esc_html($plugin).'/'.esc_html($plugin).'.php';
-
-                               if(file_exists($plugin_file)) {
-                                       activate_plugin($plugin_file);
-                               } else {
-                                       echo "Plugin Doesn't Exists";
-                               }
-
-                               die();
-                               
-                       }
-
-                       /** Plugin Activation Ajax **/
-                       public function accesspressparallax_plugin_activation_callback(){
-
-                               if ( ! current_user_can('install_plugins') )
-                                       wp_die( __( 'Sorry, you are not allowed to activate plugins on this site.', 'accesspress-parallax' ) );
-
-                               $nonce = $_POST["nonce"];
-                               $plugin = $_POST["plugin"];
-
-                               // Check our nonce, if they don't match then bounce!
-                               if (! wp_verify_nonce( $nonce, 'accesspressparallax_plugin_activate_nonce' ))
-                                       die( __( 'Error - unable to verify nonce, please try again.', 'accesspress-parallax' ) );
-
-
-                       // Include required libs for activation
-                               require_once ABSPATH . 'wp-admin/includes/plugin-install.php';
-                               require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
-                               require_once ABSPATH . 'wp-admin/includes/class-plugin-upgrader.php';
-
-
-                               // Get Plugin Info
-                               $api = $this->accesspressparallax_call_plugin_api(esc_attr($plugin));
-
-
-                               if($api->name){
-                                       $main_plugin_file = $this->get_plugin_file(esc_attr($plugin));
-                                       $status = 'success';
-                                       if($main_plugin_file){
-                                               activate_plugin($main_plugin_file);
-                                               $msg = $api->name .' successfully activated.';
-                                       }
-                               } else {
-                                       $status = 'failed';
-                                       $msg = esc_html__('There was an error activating $api->name', 'accesspress-parallax');
-                               }
-
-                               $json = array(
-                                       'status' => $status,
-                                       'msg' => $msg,
-                               );
-
-                               wp_send_json($json);
-
-                       }
-
-                       public function all_required_plugins_installed() {
-
-                       $companion_plugins = $this->companion_plugins;
-                               $show_success_notice = false;
-
-                               foreach($companion_plugins as $plugin) {
-
-                                       $path = WP_PLUGIN_DIR.'/'.esc_attr($plugin['slug']).'/'.esc_attr($plugin['filename']);
-
-                                       if(file_exists($path)) {
-                                               if(class_exists($plugin['class'])) {
-                                                       $show_success_notice = true;
-                                               } else {
-                                                       $show_success_notice = false;
-                                                       break;
-                                               }
-                                       } else {
-                                               $show_success_notice = false;
-                                               break;
-                                       }
-                               }
-
-                               return $show_success_notice;
-               }
-
-                       public static function get_plugin_file( $plugin_slug ) {
-                        require_once ABSPATH . '/wp-admin/includes/plugin.php'; // Load plugin lib
-                        $plugins = get_plugins();
-
-                        foreach( $plugins as $plugin_file => $plugin_info ) {
-
-                                // Get the basename of the plugin e.g. [askismet]/askismet.php
-                                $slug = dirname( plugin_basename( $plugin_file ) );
-
-                                if($slug){
-                                   if ( $slug == $plugin_slug ) {
-                                      return $plugin_file; // If $slug = $plugin_name
-                                   }
-                           }
-                        }
-                        return null;
-               }
-
-               public function get_local_dir_path($plugin) {
-
-                       $url = wp_nonce_url(admin_url('themes.php?page=accesspressparallax-welcome&section=import_demo'),'accesspressparallax-file-installation');
-                               if (false === ($creds = request_filesystem_credentials($url, '', false, false, null) ) ) {
-                                       return; // stop processing here
-                               }
-
-                       if ( ! WP_Filesystem($creds) ) {
-                                       request_filesystem_credentials($url, '', true, false, null);
-                                       return;
-                               }
-
-                               global $wp_filesystem;
-                               $file = $wp_filesystem->get_contents( $plugin['location'] );
-
-                               $file_location = get_template_directory().'/welcome/plugins/'.$plugin['slug'].'.zip';
-
-                               $wp_filesystem->put_contents( $file_location, $file, FS_CHMOD_FILE );
-
-                               return $file_location;
-               }
-
-               }
-
-               new Accesspress_Parallax_Welcome();
-
-       endif;
-
-       /** Initializing Demo Importer if exists **/
-       if(class_exists('Instant_Demo_Importer')) :
-               $demoimporter = new Instant_Demo_Importer();
-
-               $demoimporter->demos = array(
-                       'accesspress-parallax' => array(
-                               'title' => __('Parallax Demo', 'accesspress-parallax'),
-                               'name' => 'accesspress-parallax',
-                               'screenshot' => get_template_directory_uri().'/welcome/demos/accesspress-parallax/screen.png',
-                               'home_page' => '',
-                               'menus' => array(
-                               )
-                       ),
-               );
-
-               $demoimporter->demo_dir = get_template_directory().'/welcome/demos/'; // Path to the directory containing demo files
-               $demoimporter->options_replace_url = 'http://demo.accesspressthemes.com/accesspress-parallax'; // Set the url to be replaced with current siteurl
-               $demoimporter->option_name = 'accesspress_parallax'; // Set the the name of the option if the theme is based on theme option
-       endif;
-?>
\ No newline at end of file
diff --git a/woocommerce/ap-parallax-style.css b/woocommerce/ap-parallax-style.css
deleted file mode 100644 (file)
index 50d1267..0000000
+++ /dev/null
@@ -1,223 +0,0 @@
-.woocommerce-area{
-    margin: 0 0 20px;
-    background: #FFF;
-    padding: 20px;
-    margin-bottom: 40px;
-    position: relative;
-}
-
-.woocommerce .woocommerce-breadcrumb{
-    border-bottom: 1px solid #EEE;
-    padding: 0 0 6px;
-}
-
-.woocommerce .woocommerce-breadcrumb a{
-    text-decoration: none;
-}
-
-.woocommerce .woocommerce-breadcrumb a:hover{
-    color: #E66432;
-}
-
-.woocommerce .page-title{
-    margin-bottom: 20px;
-}
-
-.woocommerce ul.products li.product, 
-.woocommerce-page ul.products li.product{
-    border: 1px solid #EEE;
-    padding: 15px;
-    overflow: hidden;
-}
-
-.woocommerce ul.products li.product a{
-    color: inherit;
-}
-
-.woocommerce ul.products li.product .woocommerce-loop-category__title, 
-.woocommerce ul.products li.product .woocommerce-loop-product__title, 
-.woocommerce ul.products li.product h3{
-    text-align: center;
-    text-transform: uppercase;
-}
-
-.woocommerce .related.products ul.products li.product .woocommerce-loop-product__title{
-    text-align: center;
-    color: #444;
-    text-transform: uppercase;
-    font-weight: bold;
-}
-
-.woocommerce ul.products li.product .onsale,
-.woocommerce span.onsale{
-    background: #E66432;
-    border-radius: 0;
-    margin: 15px;
-    min-height: 0;
-    line-height: 1.5;
-}
-
-.woocommerce ul.products li.product a img{
-    margin-bottom: 0;
-}
-
-.woocommerce ul.products li.product h3{
-    text-align: center;
-    border-top: 2px solid #E66432;
-    border-bottom: 1px solid #EEE;
-    color: #333;
-}
-
-.parallax-section .woocommerce ul.products li.product h3,
-.parallax-section .woocommerce ul.products li.product .price,
-.parallax-section .woocommerce a{
-    color: inherit;
-}
-
-.parallax-section .woocommerce ul.products li.product h3{
-    border-bottom-color: rgba(255,255,255,0.2);
-}
-
-.woocommerce ul.products li.product .price{
-    color: #333;
-    font-size: 16px;
-    padding: 10px;
-    margin-bottom: 0;
-    text-align: center;
-}
-
-.woocommerce ul.products li.product .price del{
-    display: inline-block;
-}
-
-.woocommerce ul.products li.product .button.add_to_cart_button{
-    position: absolute;
-    bottom: 15px;
-    transform: translatey(100px);
-    -ms-transform: translatey(100px);
-    -webkit-transform: translatey(100px);
-    left: 15px;
-    right: 15px;
-    transition: all 0.3s ease;
-    -moz-transition: all 0.3s ease;
-    -webkit-transition: all 0.3s ease;
-}
-
-.woocommerce ul.products li.product:hover .button.add_to_cart_button{
-    transform: translatey(0);
-    -ms-transform: translatey(0);
-    -webkit-transform: translatey(0);
-}
-
-.woocommerce ul.products li.product .button{
-    margin: 0;
-    background: #E66432;
-    text-align: center;
-    color: #FFF;
-    display: block;
-    font-weight: normal;
-    border-radius: 0;
-}
-
-.woocommerce a.added_to_cart{
-    display: none;
-}
-
-.woocommerce nav.woocommerce-pagination ul{
-    border: 0;
-}
-
-.woocommerce nav.woocommerce-pagination ul li{
-    border:none; 
-    margin: 0 4px;
-}
-
-.woocommerce nav.woocommerce-pagination ul li a, 
-.woocommerce nav.woocommerce-pagination ul li span{
-    background: #E66432;
-    color: #FFF;
-    padding: 12px;
-}
-
-.woocommerce nav.woocommerce-pagination ul li a:focus, 
-.woocommerce nav.woocommerce-pagination ul li a:hover, 
-.woocommerce nav.woocommerce-pagination ul li span.current{
-    background: #000;
-    color: #FFF;
-}
-
-.woocommerce #respond input#submit.alt, 
-.woocommerce a.button.alt, 
-.woocommerce button.button.alt, 
-.woocommerce input.button.alt{
-    background: #E66432;
-    border-radius: 0;
-    font-weight: normal;
-}
-
-.woocommerce #respond input#submit.alt:hover, 
-.woocommerce a.button.alt:hover, 
-.woocommerce button.button.alt:hover, 
-.woocommerce input.button.alt:hover{
-    background: #E06536;
-}
-
-.woocommerce div.product p.price, 
-.woocommerce div.product span.price{
-    color: #333;
-}
-
-.woocommerce-review-link,
-.product_meta a{
-    text-decoration: none;
-}
-
-.woocommerce #respond input#submit.alt.disabled, 
-.woocommerce #respond input#submit.alt.disabled:hover, 
-.woocommerce #respond input#submit.alt:disabled, 
-.woocommerce #respond input#submit.alt:disabled:hover, 
-.woocommerce #respond input#submit.alt:disabled[disabled], 
-.woocommerce #respond input#submit.alt:disabled[disabled]:hover, 
-.woocommerce a.button.alt.disabled, 
-.woocommerce a.button.alt.disabled:hover, 
-.woocommerce a.button.alt:disabled, 
-.woocommerce a.button.alt:disabled:hover, 
-.woocommerce a.button.alt:disabled[disabled], 
-.woocommerce a.button.alt:disabled[disabled]:hover, 
-.woocommerce button.button.alt.disabled, 
-.woocommerce button.button.alt.disabled:hover, 
-.woocommerce button.button.alt:disabled, 
-.woocommerce button.button.alt:disabled:hover, 
-.woocommerce button.button.alt:disabled[disabled], 
-.woocommerce button.button.alt:disabled[disabled]:hover, 
-.woocommerce input.button.alt.disabled, 
-.woocommerce input.button.alt.disabled:hover, 
-.woocommerce input.button.alt:disabled, 
-.woocommerce input.button.alt:disabled:hover, 
-.woocommerce input.button.alt:disabled[disabled], 
-.woocommerce input.button.alt:disabled[disabled]:hover{
-    background: #E66432;
-}
-
-.woocommerce #respond input#submit, 
-.woocommerce a.button, 
-.woocommerce button.button, 
-.woocommerce input.button{
-    background: #000;
-    border-radius: 0;
-    color: #FFF;
-    font-weight: normal;
-}
-
-.woocommerce #respond input#submit:hover, 
-.woocommerce a.button:hover, 
-.woocommerce button.button:hover, 
-.woocommerce input.button:hover{
-    background: #E66432;
-    color: #FFF;
-}
-
-.woocommerce .widget_price_filter .ui-slider .ui-slider-handle,
-.woocommerce .widget_price_filter .ui-slider .ui-slider-range{
-    background-color: #E66432;
-}
diff --git a/woocommerce/ap-parallax-woocommerce-function.php b/woocommerce/ap-parallax-woocommerce-function.php
deleted file mode 100644 (file)
index 7c9981c..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-<?php
-remove_action('woocommerce_sidebar','woocommerce_get_sidebar',10);
-remove_action( 'woocommerce_before_main_content', 'woocommerce_output_content_wrapper', 10);
-remove_action( 'woocommerce_after_main_content', 'woocommerce_output_content_wrapper_end', 10);
-remove_action( 'woocommerce_after_shop_loop_item_title', 'woocommerce_template_loop_rating', 5);
-
-add_action('woocommerce_before_main_content','accesspress_parallax_archive_page_start',5);
-add_action('woocommerce_after_main_content','accesspress_parallax_archive_page_end',5);
-remove_action( 'woocommerce_cart_collaterals', 'woocommerce_cross_sell_display' );
-
-
-function accesspress_parallax_archive_page_start(){ 
-    echo '<div class="mid-content clearfix">';
-    echo '<section id="primary" class="content-area woocommerce-area">';
-    echo '<main id="main" class="site-main" role="main">';
-}
-
-function accesspress_parallax_archive_page_end(){ 
-    echo '</main>';
-       echo '</section>';
-    // get_sidebar();
-    echo '</div>';
-}
-
-// Change number or products per row to 3
-add_filter('loop_shop_columns', 'accesspress_parallax_loop_columns');
-if (!function_exists('accesspress_parallax_loop_columns')) {
-       function accesspress_parallax_loop_columns() {
-               return 3; // 3 products per row
-       }
-}
-
-//Change number of related products on product page
-add_filter( 'woocommerce_output_related_products_args', 'accesspress_parallax_related_products_args' );
-if (!function_exists('accesspress_parallax_related_products_args')) {
-       function accesspress_parallax_related_products_args( $args ) {
-        $args['posts_per_page'] = 3; // 3 related products
-        $args['columns'] = 3; // arranged in 3 columns
-        return $args;
-       }
-}
-
-add_action( 'body_class', 'accesspress_parallax_woo_body_class');
-if (!function_exists('accesspress_parallax_woo_body_class')) {
-       function accesspress_parallax_woo_body_class( $class ) {
-        $class[] = 'columns-'.accesspress_parallax_loop_columns();
-        return $class;
-       }
-}
\ No newline at end of file