diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
index 0000000..291bc73
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,484 @@
+## [3.4.2](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.4.2)
+
+### Enhancements
+
+- Improve UX of static comment forms. [#448](https://github.com/mmistakes/minimal-mistakes/issues/448)
+
+## [3.4.1](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.4.1)
+
+### Enhancements
+
+- Add `staticman.filename` configuration with UNIX timestamp for sorting data files. example ~> `comment-1470943149`.
+
+### Bug Fixes
+
+- Don't add `` to author name if URL is blank.
+
+## [3.4.0](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.4.0)
+
+### Enhancements
+
+- Support static-based commenting via [Staticman](https://staticman.net/) for sites hosted with GitHub Pages. [#424](https://github.com/mmistakes/minimal-mistakes/issues/424)
+
+## [3.3.7](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.3.7)
+
+### Bug Fixes
+
+- Re-enabled Jekyll plugins in `_config.yml` in case they aren't autoloaded in `Gemfile`. [#417](https://github.com/mmistakes/minimal-mistakes/issues/417)
+
+### Enhancements
+
+- Fallback to `site.github.url` for use in `{{ base_path }}` when `site.url` is `nil`.
+- Replace Sass and Autoprefixer `npm` build scripts with [Jekyll's built-in asset support](https://jekyllrb.com/docs/assets/). [#333](https://github.com/mmistakes/minimal-mistakes/issues/333)
+
+### Maintenance
+
+- Document `site.repository` and its role with [`github-metadata`](https://github.com/jekyll/github-metadata) gem.
+- Add sample [archive page with content](https://mmistakes.github.io/minimal-mistakes/archive-layout-with-content/) for testing styles on demo site.
+
+## [3.3.6](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.3.6)
+
+### Bug Fixes
+
+- Fix blank `site.teaser` bug. [#412](https://github.com/mmistakes/minimal-mistakes/issues/412)
+
+## [3.3.5](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.3.5)
+
+### Enhancements
+
+- Add English default text `site.locale` strings. [#407](https://github.com/mmistakes/minimal-mistakes/issues/407)
+- Add Portuguese localized UI text. [#411](https://github.com/mmistakes/minimal-mistakes/pull/411)
+- Add Italian localized UI text. [#409](https://github.com/mmistakes/minimal-mistakes/pull/409)
+
+### Maintenance
+
+- Remove unused Google AdSense variables in `_config.yml`. [#404](https://github.com/mmistakes/minimal-mistakes/issues/404)
+- Update `Gemfile` instructions for using `github-pages` vs. native `jekyll` gems.
+- Disable `gems:` in `_config.yml` and enable plugins with Bundler instead.
+- Add `repository` to `_config.yml` to suppress GitHub Pages error `Liquid Exception: No repo name found.`
+
+## [3.3.4](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.3.4)
+
+### Enhancements
+
+- Add support for configurable feed URL to use a service like FeedBurner instead of linking directly to `feed.xml` in `` and the site footer. [#378](https://github.com/mmistakes/minimal-mistakes/issues/378), [#379](https://github.com/mmistakes/minimal-mistakes/pull/379), [#406](https://github.com/mmistakes/minimal-mistakes/pull/406)
+- Add Turkish localized UI text. [#403](https://github.com/mmistakes/minimal-mistakes/pull/403)
+
+### Maintenance
+
+- Update gems: `activesupport` (4.2.7), `ffi` (1.9.14), `github-pages` (88), `jekyll-redirect-from` (0.11.0), `jekyll-watch` (1.5.0).
+
+## [3.3.3](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.3.3)
+
+### Enhancements
+
+- Make footer stick to the bottom of the page.
+
+### Bug Fixes
+
+- Fix `gallery` size bug [#402](https://github.com/mmistakes/minimal-mistakes/issues/402)
+
+### Maintenance
+
+- Set default `lang` to `en`.
+
+## [3.3.2](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.3.2)
+
+### Bug Fixes
+
+- Fix JavaScript that triggers "sticky" sidebar to avoid layout issues on screen sizes < `1024px`. [#396](https://github.com/mmistakes/minimal-mistakes/issues/396)
+
+## [3.3.1](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.3.1)
+
+### Enhancements
+
+- Enable image popup on < 500px wide screens. [#385](https://github.com/mmistakes/minimal-mistakes/issues/385)
+- Indicate the relationship between component URLs in a paginated series by applying `rel="prev"` and `rel="next"` to pages that use `site.paginator`. [#253](https://github.com/mmistakes/minimal-mistakes/issues/253)
+- Improve link posts in archive listings. [#276](https://github.com/mmistakes/minimal-mistakes/issues/276)
+
+### Maintenance
+
+- Update gems: `github-pages` (86), `ffi` 1.9.13, `jekyll-mentions` 1.1.3, and `rouge` 1.11.1
+- Fix note about custom sidebar content appearing below author profile. [#388](https://github.com/mmistakes/minimal-mistakes/issues/388)
+
+## [3.2.13](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.2.13)
+
+### Enhancements
+
+- Add English default UI text for Canada, Great Britain, and Australia. [#377](https://github.com/mmistakes/minimal-mistakes/issues/377)
+- Switch default locale from `en-US` to `en`.
+
+## [3.2.12](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.2.12)
+
+### Enhancements
+
+- Remove window width "magic number" from sticky sidebar check in `main.js` for improved flexibility. [#375](https://github.com/mmistakes/minimal-mistakes/pull/375)
+
+### Bug Fixes
+
+- Fix author override conditional where a missing `authors.yml` would show broken sidebar content. Defaults to `site.author`. [#376](https://github.com/mmistakes/minimal-mistakes/pull/376)
+
+## [3.2.11](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.2.11)
+
+### Bug Fixes
+
+- Fix disappearing author sidebar links [#372](https://github.com/mmistakes/minimal-mistakes/issues/372)
+
+### Maintenance
+
+- Update gems: `github-pages` (84), `jekyll-github-metadata` 2.0.2, and `kramdown` 1.11.1
+- Update vendor JavaScript: jQuery 1.12.4, Stickyfill.js 1.1.4
+- Update Font Awesome 4.6.3
+
+## [3.2.10](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.2.10)
+
+### Maintenance
+
+- Add `CONTRIBUTING.md`
+
+## [3.2.9](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.2.9)
+
+### Enhancements
+
+- Add support for [header overlay images](https://mmistakes.github.io/minimal-mistakes/docs/layouts/#header-overlay) for Open Graph images. [#358](https://github.com/mmistakes/minimal-mistakes/pull/358)
+
+### Bug Fixes
+
+- Fix `Person` typo Schema.org type [#358](https://github.com/mmistakes/minimal-mistakes/pull/358)
+
+### Maintenance
+
+- Update `github-pages` gem and dependencies.
+- Remove `minutes_read` to avoid awkward reading time wording [#356](https://github.com/mmistakes/minimal-mistakes/issues/356)
+
+## [3.2.8](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.2.8)
+
+### Bug Fixes
+
+- Remove `cursor: pointer` that appears on white-space surrounding author side list items and links. [#354](https://github.com/mmistakes/minimal-mistakes/pull/354)
+
+### Maintenance
+
+- Add contributing information to `README.md`. [#357](https://github.com/mmistakes/minimal-mistakes/issues/357)
+
+## [3.2.7](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.2.7)
+
+### Enhancements
+
+- Add French localized UI text. [#346](https://github.com/mmistakes/minimal-mistakes/pull/346)
+
+### Bug Fixes
+
+- Fix branch logic for Yandex and Alexa in `seo.html`. [#348](https://github.com/mmistakes/minimal-mistakes/pull/348)
+
+## [3.2.6](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.2.6)
+
+### Bug Fixes
+
+- Fix error `Liquid Exception: divided by 0 in _includes/archive-single.html, included in _layouts/single.html` caused by null `words_per_minute` in `_config.yml`. [#345](https://github.com/mmistakes/minimal-mistakes/pull/345)
+
+## [3.2.5](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.2.5)
+
+### Bug Fixes
+
+- Fix link color in hero overlay to be white.
+- Remove underlines from archive item titles.
+
+## [3.2.4](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.2.4)
+
+### Enhancements
+
+- Improve text alignment of masthead, hero overlay, page footer to be flush left and remove awkward white-space gaps. [#342](https://github.com/mmistakes/minimal-mistakes/issues/342)
+- Add Spanish localized UI text. [#338](https://github.com/mmistakes/minimal-mistakes/pull/338)
+
+### Bug Fixes
+
+- Fix alignment of icons in author sidebar [#341](https://github.com/mmistakes/minimal-mistakes/issues/341)
+
+### Maintenance
+
+- Add background color to page footer to set it apart from main content. [#342](https://github.com/mmistakes/minimal-mistakes/issues/342)
+- Add terms and privacy policy to theme's demo site. [#343](https://github.com/mmistakes/minimal-mistakes/issues/343)
+- Update screenshots found in theme documentation.
+
+## [3.2.3](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.2.3)
+
+### Enhancements
+
+- Add [Discourse](https://www.discourse.org/) as a commenting provider. [#335](https://github.com/mmistakes/minimal-mistakes/pull/335)
+
+## [3.2.2](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.2.2)
+
+### Enhancements
+
+- Add support for image captions in Magnific Popup overlays via the [`gallery`](https://mmistakes.github.io/minimal-mistakes/docs/helpers/#gallery) helper. [#334](https://github.com/mmistakes/minimal-mistakes/issues/334)
+
+## [3.2.1](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.2.1)
+
+### Bug Fixes
+
+- Remove need for "double tapping" masthead menu links on iOS devices. [#315](https://github.com/mmistakes/minimal-mistakes/issues/315)
+
+### Maintenance
+
+- Add `ISSUE_TEMPLATE.md` for improve issue submission process.
+
+## [3.2.0](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.2.0)
+
+### Bug Fixes
+
+- Fix missing category/tag links in post footer due to possible conflict with `site.tags` and `site.categories`. [#329](https://github.com/mmistakes/minimal-mistakes/issues/329#issuecomment-222375568)
+
+## [3.1.8](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.1.8)
+
+### Bug Fixes
+
+- Fix `Liquid Exception: undefined method 'gsub' for nil:NilClass in _layouts/single.html` error when `page.title` is null. `` element is now conditional if `title: ` is not set for a `page` or collection item. [#312](https://github.com/mmistakes/minimal-mistakes/issues/312)
+
+### Maintenance
+
+- Remove duplicate `fa-twitter` and `fa-twitter-square` classes from `_utilities.scss`. [#302](https://github.com/mmistakes/minimal-mistakes/issues/302)
+
+- Document installing additional Jekyll gem dependencies when using `gem "jekyll"` instead of `gem "github-pages"` to avoid any errors on run. [#305](https://github.com/mmistakes/minimal-mistakes/issues/305)
+
+## [3.1.7](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.1.7)
+
+### Enhancements
+
+- Add translation key for "Recent Posts" used in home page `index.html`. [#316](https://github.com/mmistakes/minimal-mistakes/pull/316)
+
+### Maintenance
+
+- Small fix to avoid underlying the whitespace between icons and related text when hovering. [#303](https://github.com/mmistakes/minimal-mistakes/pull/303)
+
+## [3.1.6](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.1.6)
+
+### Maintenance
+
+- Update gem dependencies. Run `bundle` to update `Gemfile.lock`.
+
+## [3.1.5](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.1.5)
+
+### Maintenance
+
+- Fix `www` and `https` links in author profile include [#293](https://github.com/mmistakes/minimal-mistakes/pull/293)
+
+## [3.1.4](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.1.4)
+
+### Enhancements
+
+- Add overlay_filter param to hero headers [#298](https://github.com/mmistakes/minimal-mistakes/pull/298)
+
+## [3.1.3](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.1.3)
+
+### Enhancements
+
+- Improve `site.locale` documentation [#284](https://github.com/mmistakes/minimal-mistakes/issues/284)
+- Remove ProTip note about protocol-less `site.url` as it is an anti-pattern [#288](https://github.com/mmistakes/minimal-mistakes/issues/288)
+
+### Bug Fixes
+
+- Fix `og_image` URL in seo.html [#277](https://github.com/mmistakes/minimal-mistakes/issues/277)
+- Fix `author_profile` toggle when assigned in a `_layout` [#285](https://github.com/mmistakes/minimal-mistakes/issues/285)
+- Fix typo in `build:all` npm script [#283](https://github.com/mmistakes/minimal-mistakes/pull/283)
+- Fix URL typo documentation [#287](https://github.com/mmistakes/minimal-mistakes/issues/287)
+- SEO author bug. If `twitter.username` is set and `author.twitter` is `nil` bad things happen. [#289](https://github.com/mmistakes/minimal-mistakes/issues/289)
+
+## [3.1.2](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.1.2)
+
+### Enhancements
+
+- Explain how to use `nav_list` helper in [documentation](https://mmistakes.github.io/minimal-mistakes/docs/helpers/#navigation-list).
+- Reduce left/right padding on smaller screens to increase width of main content column.
+
+### Bug Fixes
+
+- Fix alignment issues with related posts [#273](https://github.com/mmistakes/minimal-mistakes/issues/273) and "Follow" button in author profile [#274](https://github.com/mmistakes/minimal-mistakes/issues/274).
+
+## [3.1.1](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.1.1)
+
+### Bug Fix
+
+- Fixed reading time bug when `words_per_minute` wasn't set in `_config.yml` [#271](https://github.com/mmistakes/minimal-mistakes/issues/271)
+
+## [3.1.0](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.1.0)
+
+### Enhancements
+
+- Updated [Font Awesome](https://fortawesome.github.io/Font-Awesome/whats-new/) to version 4.6.1
+- Added optional GitHub and Bitbucket links to footer if set on `site.author` in `_config.yml`.
+
+### Bug Fixes
+- Fixed Bitbucket URL typo in author sidebar.
+
+## [3.0.3](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.0.3)
+
+### Enhancements
+
+- Rebuilt the entire theme: layouts, includes, stylesheets, scripts, you name it.
+- Refreshed the look and feel while staying true to the original design of the theme (author sidebar/main content).
+- Replaced grid system with [Susy](http://susy.oddbird.net/).
+- Replaced Grunt tasks with `npm` scripts.
+- Removed Google Fonts and replaced with system fonts to improve performance (they can be [added back](https://mmistakes.github.io/minimal-mistakes/docs/stylesheets/) if desired)
+- Greatly improved [theme documentation](https://mmistakes.github.io/minimal-mistakes/docs/quick-start-guide/).
+- Increased the amount of sample posts, sample pages, and sample collections to throughly test the theme and edge-cases.
+- Moved all sample content and assets out of `master` to keep it as clean as possible for forking.
+- Added new layouts for `splash` pages, archives for [`jekyll-archives`](https://github.com/jekyll/jekyll-archives) if enabled, and [`compress.html`](https://github.com/penibelst/jekyll-compress-html) to improve performance.
+- Added taxonomy links to posts (tags and categories).
+- Added optional "reading time" meta data.
+- Improved Liquid used for Twitter Cards and Open Graph data in ``.
+- Improved `gallery` include helper and added `feature_row` for use with splash page layout.
+- Added Keybase.io, author web URI, and Bitbucket optional links to sidebar.
+- Add `feed.xml` link to footer.
+- Added a [UI text data file](https://mmistakes.github.io/minimal-mistakes/docs/ui-text/) to easily change all text found in the theme.
+- Added LinkedIn to optional social share buttons.
+- Added Facebook, Google+, and custom commenting options in addition to Disqus.
+- Added optional breadcrumb links.
+
+## [2.2.1](https://github.com/mmistakes/minimal-mistakes/releases/tag/2.2.1)
+
+## [2.2.0](https://github.com/mmistakes/minimal-mistakes/releases/tag/2.2.0)
+
+### Enhancements
+
+- Add support for Jekyll 3.0
+- Minor updates to syntax highlighting CSS and theme documentation
+
+## [2.1.3](https://github.com/mmistakes/minimal-mistakes/releases/tag/2.1.3)
+
+### Enhancements
+
+- Cleaner print styles that remove the top navigation, social sharing buttons, and other elements not needed when printed.
+
+## [2.1.2](https://github.com/mmistakes/minimal-mistakes/releases/tag/2.1.2)
+
+### Enhancements
+
+- Add optional CodePen icon/url to author side bar [#156](https://github.com/mmistakes/minimal-mistakes/pull/156)
+- Documented Stackoverflow username explanation in `_config.yml` [#157](https://github.com/mmistakes/minimal-mistakes/pull/157)
+- Simplified Liquid in `post-index.html` to better handle year listings [#166](https://github.com/mmistakes/minimal-mistakes/pull/166)
+
+### Bug Fixes
+
+- Cleanup Facebook related Open Graph meta tags [#149](https://github.com/mmistakes/minimal-mistakes/issues/149)
+- Corrected minor typos [#158](https://github.com/mmistakes/minimal-mistakes/pull/158) [#175](https://github.com/mmistakes/minimal-mistakes/issues/175)
+
+## [2.1.1](https://github.com/mmistakes/minimal-mistakes/releases/tag/2.1.1)
+
+### Enhancements
+
+- Add optional XING profile link to author sidebar
+- Include open graph meta tags for feature image (if assigned) [#149](https://github.com/mmistakes/minimal-mistakes/issues/149)
+- Create an include for feed footer
+
+### Bug Fixes
+
+- Remove http protocol from Google search form on sample 404 page
+- Only show related posts if there are one or more available
+- Fix alignment of email address link in author sidebar
+
+## [2.1.0](https://github.com/mmistakes/minimal-mistakes/releases/tag/2.1.0)
+
+### Enhancements
+
+- Add optional social sharing buttons ([#42](https://github.com/mmistakes/minimal-mistakes/issues/42))
+
+
+
+- Add Soundcloud, YouTube ([#95](https://github.com/mmistakes/minimal-mistakes/pull/95)), Flickr ([#119](https://github.com/mmistakes/minimal-mistakes/pull/119)), and Weibo ([#116](https://github.com/mmistakes/minimal-mistakes/pull/116)) icons for use in author sidebar.
+- Fix typos in posts and documentation and remove references to Less
+- Include note about Octopress gem being optional
+- Post author override support extended to the Atom feed ([#71](https://github.com/mmistakes/minimal-mistakes/pull/71))
+- Only include email address in feed if specified in `_config.yml` or author `_data`
+- Wrap all page content in `#main` to harmonize article and post index styles ([#86](https://github.com/mmistakes/minimal-mistakes/issues/86))
+- Include new sample feature images for posts and pages
+- Table of contents improvements: fix collapse toggle, indent nested elements, show on small screens, and create an `_include` for reusing in posts and pages.
+- Include note about running Jekyll with `bundle exec` when using Bundler
+- Fix home page path in top navigation
+- Remove Google Authorship ([#120](https://github.com/mmistakes/minimal-mistakes/issues/120))
+- Remove duplicate author content that displayed in `div.article-author-bottom`
+- Removed unused `_sass/print.scss` styles
+- Improve comments in `.scss` files
+
+## [2.0.0](https://github.com/mmistakes/minimal-mistakes/releases/tag/v2.0)
+
+## [1.3.3](https://github.com/mmistakes/minimal-mistakes/releases/tag/1.3.3)
+
+### Enhancements
+
+- Added new icons and profile links for Stackoverflow, Dribbble, Pinterest, Foursquare, and Steam to the author bio sidebar.
+- Cleaned up the Kramdown auto table of contents styling to be more readable
+- Removed page width specific .less stylesheets and created mixins for easier updating
+- Removed Modernizr since it wasn't being used
+- Added pages to sitemap.xml
+- Added category: to rake new_post task
+- Minor typographic changes
+
+### Bug Fixes
+
+- Corrected various broken links in README and Theme Setup.
+
+## [1.3.1](https://github.com/mmistakes/minimal-mistakes/releases/tag/1.3.1)
+
+### Enhancements
+
+- Cleaned up table of contents styling
+- Reworked top navigation to be a better experience on small screens. Nav items now display vertically when the menu button is tapped, revealing links with larger touch targets.
+
+
+
+## [1.2.0](https://github.com/mmistakes/minimal-mistakes/releases/tag/1.2.0)
+
+### Bug Fixes
+
+- Table weren't filling the entire width of the content container. They now scale at 100%. Thanks [@dhruvbhatia](https://github.com/dhruvbhatia)
+
+### Enhancements
+
+- Decreased spacing between Markdown footnotes
+- Removed dark background on footer
+- Removed UPPERCASE styling on post titles in the index listing
+
+## [1.1.4](https://github.com/mmistakes/minimal-mistakes/releases/tag/1.1.4)
+
+### Bug Fixes
+
+- Fix top navigation bug issue ([#10](https://github.com/mmistakes/minimal-mistakes/issues/10)) for real this time. Remember to clear your floats kids.
+
+## [1.1.3](https://github.com/mmistakes/minimal-mistakes/releases/tag/1.1.3)
+
+### Bug Fixes
+
+- Fix top navigation links that weren't click able on small viewports (Issue [#10](https://github.com/mmistakes/minimal-mistakes/issues/10)).
+- Remove line wrap from top navigation links that may span multiple lines.
+
+## [1.1.2](https://github.com/mmistakes/minimal-mistakes/releases/tag/1.1.2)
+
+### Enhancements
+
+- Added Grunt build script for compiling Less/JavaScript and optimizing image assets.
+- Added support for large image summary Twitter card.
+- Stylesheet adjustments
+
+## [1.1.1](https://github.com/mmistakes/minimal-mistakes/releases/tag/1.1.1)
+
+### Bug Fixes
+
+- Removed [Typeplate](http://typeplate.com/) styles. Was [causing issues with newer versions of Less](https://github.com/typeplate/typeplate.github.io/issues/108) and is no longer maintained.
+
+### Enhancements
+
+- Added [image attribution](http://mmistakes.github.io/minimal-mistakes/theme-setup/#feature-images) for post and page feature images.
+- Added [404 page](http://mmistakes.github.io/minimal-mistakes/404.html).
+- Cleaned up various Less variables to better align with naming conventions used in other MM Jekyll themes.
+- Removed Chrome Frame references.
+- Added global CSS3 transitions to text and block elements.
+- Improved typography in a few places.
+
+## [1.0.2](https://github.com/mmistakes/minimal-mistakes/releases/tag/v1.0.2)
+
+### Enhancements
+
+- Google Analytics, Google Authorship, webmaster verifies, and Twitter card meta are now optional.
+
+## [1.0.1](https://github.com/mmistakes/minimal-mistakes/releases/tag/v1.0.1)
\ No newline at end of file
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 0000000..803b63d
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -0,0 +1,5 @@
+Contributions are welcome! Please add issues and make pull requests. There are no stupid questions. All ideas are welcome. This is a volunteer project. Be excellent to each other.
+
+Fork from master and go from there. This repository is intended to remain a generic, ready-to-fork template that demonstrates the features of academicpages.
+
+If you make a pull request and change code, please make sure there is a closed issue tagged with 'code change' that has some comment linking to either the single commit (if the change was just one commit) or a diff comparing before/after the change (see [issue 21](https://github.com/academicpages/academicpages.github.io/issues/21) for example). This is so that those who have forked this repo and modified it for their purposes can more easily patch bugs and new features.
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000..8ec8863
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,3 @@
+FROM alpine
+RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories
+RUN apk add --no-cache ruby-bundler libstdc++
diff --git a/Gemfile b/Gemfile
new file mode 100644
index 0000000..4684fac
--- /dev/null
+++ b/Gemfile
@@ -0,0 +1,29 @@
+source "https://rubygems.org"
+
+# Hello! This is where you manage which Jekyll version is used to run.
+# When you want to use a different version, change it below, save the
+# file and run `bundle install`. Run Jekyll with `bundle exec`, like so:
+#
+# bundle exec jekyll serve
+#
+# This will help ensure the proper Jekyll version is running.
+# Happy Jekylling!
+
+gem "github-pages", group: :jekyll_plugins
+
+# If you want to use Jekyll native, uncomment the line below.
+# To upgrade, run `bundle update`.
+
+# gem "jekyll"
+
+gem "wdm", "~> 0.1.0" if Gem.win_platform?
+
+# If you have any plugins, put them here!
+group :jekyll_plugins do
+ # gem "jekyll-archives"
+ gem "jekyll-feed"
+ gem 'jekyll-sitemap'
+ gem 'hawkins'
+end
+
+gem "webrick", "~> 1.8"
diff --git a/Gemfile.lock b/Gemfile.lock
new file mode 100644
index 0000000..e45e4d6
--- /dev/null
+++ b/Gemfile.lock
@@ -0,0 +1,280 @@
+GEM
+ remote: https://rubygems.org/
+ specs:
+ activesupport (7.1.2)
+ base64
+ bigdecimal
+ concurrent-ruby (~> 1.0, >= 1.0.2)
+ connection_pool (>= 2.2.5)
+ drb
+ i18n (>= 1.6, < 2)
+ minitest (>= 5.1)
+ mutex_m
+ tzinfo (~> 2.0)
+ addressable (2.8.6)
+ public_suffix (>= 2.0.2, < 6.0)
+ base64 (0.2.0)
+ bigdecimal (3.1.5)
+ coffee-script (2.4.1)
+ coffee-script-source
+ execjs
+ coffee-script-source (1.11.1)
+ colorator (1.1.0)
+ commonmarker (0.23.10)
+ concurrent-ruby (1.2.2)
+ connection_pool (2.4.1)
+ dnsruby (1.70.0)
+ simpleidn (~> 0.2.1)
+ drb (2.2.0)
+ ruby2_keywords
+ em-websocket (0.5.3)
+ eventmachine (>= 0.12.9)
+ http_parser.rb (~> 0)
+ ethon (0.16.0)
+ ffi (>= 1.15.0)
+ eventmachine (1.2.7)
+ execjs (2.9.1)
+ faraday (2.9.0)
+ faraday-net_http (>= 2.0, < 3.2)
+ faraday-net_http (3.1.0)
+ net-http
+ ffi (1.16.3)
+ forwardable-extended (2.6.0)
+ gemoji (3.0.1)
+ github-pages (228)
+ github-pages-health-check (= 1.17.9)
+ jekyll (= 3.9.3)
+ jekyll-avatar (= 0.7.0)
+ jekyll-coffeescript (= 1.1.1)
+ jekyll-commonmark-ghpages (= 0.4.0)
+ jekyll-default-layout (= 0.1.4)
+ jekyll-feed (= 0.15.1)
+ jekyll-gist (= 1.5.0)
+ jekyll-github-metadata (= 2.13.0)
+ jekyll-include-cache (= 0.2.1)
+ jekyll-mentions (= 1.6.0)
+ jekyll-optional-front-matter (= 0.3.2)
+ jekyll-paginate (= 1.1.0)
+ jekyll-readme-index (= 0.3.0)
+ jekyll-redirect-from (= 0.16.0)
+ jekyll-relative-links (= 0.6.1)
+ jekyll-remote-theme (= 0.4.3)
+ jekyll-sass-converter (= 1.5.2)
+ jekyll-seo-tag (= 2.8.0)
+ jekyll-sitemap (= 1.4.0)
+ jekyll-swiss (= 1.0.0)
+ jekyll-theme-architect (= 0.2.0)
+ jekyll-theme-cayman (= 0.2.0)
+ jekyll-theme-dinky (= 0.2.0)
+ jekyll-theme-hacker (= 0.2.0)
+ jekyll-theme-leap-day (= 0.2.0)
+ jekyll-theme-merlot (= 0.2.0)
+ jekyll-theme-midnight (= 0.2.0)
+ jekyll-theme-minimal (= 0.2.0)
+ jekyll-theme-modernist (= 0.2.0)
+ jekyll-theme-primer (= 0.6.0)
+ jekyll-theme-slate (= 0.2.0)
+ jekyll-theme-tactile (= 0.2.0)
+ jekyll-theme-time-machine (= 0.2.0)
+ jekyll-titles-from-headings (= 0.5.3)
+ jemoji (= 0.12.0)
+ kramdown (= 2.3.2)
+ kramdown-parser-gfm (= 1.1.0)
+ liquid (= 4.0.4)
+ mercenary (~> 0.3)
+ minima (= 2.5.1)
+ nokogiri (>= 1.13.6, < 2.0)
+ rouge (= 3.26.0)
+ terminal-table (~> 1.4)
+ github-pages-health-check (1.17.9)
+ addressable (~> 2.3)
+ dnsruby (~> 1.60)
+ octokit (~> 4.0)
+ public_suffix (>= 3.0, < 5.0)
+ typhoeus (~> 1.3)
+ hawkins (2.0.5)
+ em-websocket (~> 0.5)
+ jekyll (~> 3.1)
+ html-pipeline (2.14.3)
+ activesupport (>= 2)
+ nokogiri (>= 1.4)
+ http_parser.rb (0.8.0)
+ i18n (1.14.1)
+ concurrent-ruby (~> 1.0)
+ jekyll (3.9.3)
+ addressable (~> 2.4)
+ colorator (~> 1.0)
+ em-websocket (~> 0.5)
+ i18n (>= 0.7, < 2)
+ jekyll-sass-converter (~> 1.0)
+ jekyll-watch (~> 2.0)
+ kramdown (>= 1.17, < 3)
+ liquid (~> 4.0)
+ mercenary (~> 0.3.3)
+ pathutil (~> 0.9)
+ rouge (>= 1.7, < 4)
+ safe_yaml (~> 1.0)
+ jekyll-avatar (0.7.0)
+ jekyll (>= 3.0, < 5.0)
+ jekyll-coffeescript (1.1.1)
+ coffee-script (~> 2.2)
+ coffee-script-source (~> 1.11.1)
+ jekyll-commonmark (1.4.0)
+ commonmarker (~> 0.22)
+ jekyll-commonmark-ghpages (0.4.0)
+ commonmarker (~> 0.23.7)
+ jekyll (~> 3.9.0)
+ jekyll-commonmark (~> 1.4.0)
+ rouge (>= 2.0, < 5.0)
+ jekyll-default-layout (0.1.4)
+ jekyll (~> 3.0)
+ jekyll-feed (0.15.1)
+ jekyll (>= 3.7, < 5.0)
+ jekyll-gist (1.5.0)
+ octokit (~> 4.2)
+ jekyll-github-metadata (2.13.0)
+ jekyll (>= 3.4, < 5.0)
+ octokit (~> 4.0, != 4.4.0)
+ jekyll-include-cache (0.2.1)
+ jekyll (>= 3.7, < 5.0)
+ jekyll-mentions (1.6.0)
+ html-pipeline (~> 2.3)
+ jekyll (>= 3.7, < 5.0)
+ jekyll-optional-front-matter (0.3.2)
+ jekyll (>= 3.0, < 5.0)
+ jekyll-paginate (1.1.0)
+ jekyll-readme-index (0.3.0)
+ jekyll (>= 3.0, < 5.0)
+ jekyll-redirect-from (0.16.0)
+ jekyll (>= 3.3, < 5.0)
+ jekyll-relative-links (0.6.1)
+ jekyll (>= 3.3, < 5.0)
+ jekyll-remote-theme (0.4.3)
+ addressable (~> 2.0)
+ jekyll (>= 3.5, < 5.0)
+ jekyll-sass-converter (>= 1.0, <= 3.0.0, != 2.0.0)
+ rubyzip (>= 1.3.0, < 3.0)
+ jekyll-sass-converter (1.5.2)
+ sass (~> 3.4)
+ jekyll-seo-tag (2.8.0)
+ jekyll (>= 3.8, < 5.0)
+ jekyll-sitemap (1.4.0)
+ jekyll (>= 3.7, < 5.0)
+ jekyll-swiss (1.0.0)
+ jekyll-theme-architect (0.2.0)
+ jekyll (> 3.5, < 5.0)
+ jekyll-seo-tag (~> 2.0)
+ jekyll-theme-cayman (0.2.0)
+ jekyll (> 3.5, < 5.0)
+ jekyll-seo-tag (~> 2.0)
+ jekyll-theme-dinky (0.2.0)
+ jekyll (> 3.5, < 5.0)
+ jekyll-seo-tag (~> 2.0)
+ jekyll-theme-hacker (0.2.0)
+ jekyll (> 3.5, < 5.0)
+ jekyll-seo-tag (~> 2.0)
+ jekyll-theme-leap-day (0.2.0)
+ jekyll (> 3.5, < 5.0)
+ jekyll-seo-tag (~> 2.0)
+ jekyll-theme-merlot (0.2.0)
+ jekyll (> 3.5, < 5.0)
+ jekyll-seo-tag (~> 2.0)
+ jekyll-theme-midnight (0.2.0)
+ jekyll (> 3.5, < 5.0)
+ jekyll-seo-tag (~> 2.0)
+ jekyll-theme-minimal (0.2.0)
+ jekyll (> 3.5, < 5.0)
+ jekyll-seo-tag (~> 2.0)
+ jekyll-theme-modernist (0.2.0)
+ jekyll (> 3.5, < 5.0)
+ jekyll-seo-tag (~> 2.0)
+ jekyll-theme-primer (0.6.0)
+ jekyll (> 3.5, < 5.0)
+ jekyll-github-metadata (~> 2.9)
+ jekyll-seo-tag (~> 2.0)
+ jekyll-theme-slate (0.2.0)
+ jekyll (> 3.5, < 5.0)
+ jekyll-seo-tag (~> 2.0)
+ jekyll-theme-tactile (0.2.0)
+ jekyll (> 3.5, < 5.0)
+ jekyll-seo-tag (~> 2.0)
+ jekyll-theme-time-machine (0.2.0)
+ jekyll (> 3.5, < 5.0)
+ jekyll-seo-tag (~> 2.0)
+ jekyll-titles-from-headings (0.5.3)
+ jekyll (>= 3.3, < 5.0)
+ jekyll-watch (2.2.1)
+ listen (~> 3.0)
+ jemoji (0.12.0)
+ gemoji (~> 3.0)
+ html-pipeline (~> 2.2)
+ jekyll (>= 3.0, < 5.0)
+ kramdown (2.3.2)
+ rexml
+ kramdown-parser-gfm (1.1.0)
+ kramdown (~> 2.0)
+ liquid (4.0.4)
+ listen (3.8.0)
+ rb-fsevent (~> 0.10, >= 0.10.3)
+ rb-inotify (~> 0.9, >= 0.9.10)
+ mercenary (0.3.6)
+ minima (2.5.1)
+ jekyll (>= 3.5, < 5.0)
+ jekyll-feed (~> 0.9)
+ jekyll-seo-tag (~> 2.1)
+ minitest (5.20.0)
+ mutex_m (0.2.0)
+ net-http (0.4.1)
+ uri
+ nokogiri (1.16.0-x86_64-linux)
+ racc (~> 1.4)
+ octokit (4.25.1)
+ faraday (>= 1, < 3)
+ sawyer (~> 0.9)
+ pathutil (0.16.2)
+ forwardable-extended (~> 2.6)
+ public_suffix (4.0.7)
+ racc (1.7.3)
+ rb-fsevent (0.11.2)
+ rb-inotify (0.10.1)
+ ffi (~> 1.0)
+ rexml (3.2.6)
+ rouge (3.26.0)
+ ruby2_keywords (0.0.5)
+ rubyzip (2.3.2)
+ safe_yaml (1.0.5)
+ sass (3.7.4)
+ sass-listen (~> 4.0.0)
+ sass-listen (4.0.0)
+ rb-fsevent (~> 0.9, >= 0.9.4)
+ rb-inotify (~> 0.9, >= 0.9.7)
+ sawyer (0.9.2)
+ addressable (>= 2.3.5)
+ faraday (>= 0.17.3, < 3)
+ simpleidn (0.2.1)
+ unf (~> 0.1.4)
+ terminal-table (1.8.0)
+ unicode-display_width (~> 1.1, >= 1.1.1)
+ typhoeus (1.4.1)
+ ethon (>= 0.9.0)
+ tzinfo (2.0.6)
+ concurrent-ruby (~> 1.0)
+ unf (0.1.4)
+ unf_ext
+ unf_ext (0.0.9.1)
+ unicode-display_width (1.8.0)
+ uri (0.13.0)
+ webrick (1.8.1)
+
+PLATFORMS
+ x86_64-linux
+
+DEPENDENCIES
+ github-pages
+ hawkins
+ jekyll-feed
+ jekyll-sitemap
+ webrick (~> 1.8)
+
+BUNDLED WITH
+ 2.3.5
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..23a6cd1
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2016 Michael Rose
+
+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.
\ No newline at end of file
diff --git a/_config.dev.yml b/_config.dev.yml
new file mode 100644
index 0000000..45df3df
--- /dev/null
+++ b/_config.dev.yml
@@ -0,0 +1,13 @@
+# Develop override settings
+
+url: http://localhost:4000
+
+analytics:
+ provider: false
+
+comments:
+ disqus:
+ shortname : "mmistakes-dev"
+
+sass:
+ style: expanded
\ No newline at end of file
diff --git a/_config.yml b/_config.yml
new file mode 100644
index 0000000..50dc991
--- /dev/null
+++ b/_config.yml
@@ -0,0 +1,311 @@
+# Welcome to Jekyll!
+#
+# This config file is meant for settings that affect your entire site, values
+# which you are expected to set up once and rarely need to edit after that.
+# For technical reasons, this file is *NOT* reloaded automatically when you use
+# `jekyll serve`. If you change this file, please restart the server process.
+
+# Site Settings
+locale : "en-US"
+title : "Yuchen Lei"
+title_separator : "-"
+name : &name "Yuchen Lei"
+description : &description "personal description"
+url : "" # the base hostname & protocol for your site e.g. "https://mmistakes.github.io"
+baseurl : "" # the subpath of your site, e.g. "/blog"
+repository : "academicpages/academicpages.github.io"
+teaser : # filename of teaser fallback teaser image placed in /images/, .e.g. "500x300.png"
+breadcrumbs : false # true, false (default)
+words_per_minute : 160
+future : true
+read_more : "disabled" # if enabled, adds "Read more" links to excerpts
+talkmap_link : false #change to true to add link to talkmap on talks page
+comments:
+ provider : # false (default), "disqus", "discourse", "facebook", "google-plus", "staticman", "custom"
+ disqus:
+ shortname :
+ discourse:
+ server : # https://meta.discourse.org/t/embedding-discourse-comments-via-javascript/31963 , e.g.: meta.discourse.org
+ facebook:
+ appid :
+ num_posts : # 5 (default)
+ colorscheme : # "light" (default), "dark"
+staticman:
+ allowedFields : ['name', 'email', 'url', 'message']
+ branch : "gh-pages" # "master", "gh-pages"
+ commitMessage : "New comment."
+ filename : comment-{@timestamp}
+ format : "yml"
+ moderation : true
+ path : "_data/comments/{options.slug}"
+ requiredFields : ['name', 'email', 'message']
+ transforms:
+ email : "md5"
+ generatedFields:
+ date:
+ type : "date"
+ options:
+ format : "iso8601" # "iso8601" (default), "timestamp-seconds", "timestamp-milliseconds"
+atom_feed:
+ path : # blank (default) uses feed.xml
+
+# SEO Related
+google_site_verification :
+bing_site_verification :
+alexa_site_verification :
+yandex_site_verification :
+
+# Social Sharing
+twitter:
+ username : &twitter
+facebook:
+ username :
+ app_id :
+ publisher :
+og_image : # Open Graph/Twitter default site image
+# For specifying social profiles
+# - https://developers.google.com/structured-data/customize/social-profiles
+social:
+ type : # Person or Organization (defaults to Person)
+ name : # If the user or organization name differs from the site's name
+ links: # An array of links to social media profiles
+
+
+# Analytics
+analytics:
+ provider : "false" # false (default), "google", "google-universal", "custom"
+ google:
+ tracking_id :
+
+
+# Site Author
+author:
+ name : "Yuchen Lei"
+ avatar : "profile.png"
+ bio : "MSc @ Wuhan University"
+ location : "Wuhan, Hubei, China"
+ employer :
+ pubmed :
+ googlescholar : "https://scholar.google.com/citations?user=sCVs-IUAAAAJ"
+ email :
+ researchgate : "https://www.researchgate.net/profile/Yuchen-Lei-8"
+ uri :
+ bitbucket :
+ codepen :
+ dribbble :
+ flickr :
+ facebook :
+ foursquare :
+ github : "TooYoungTooSimp"
+ google_plus :
+ keybase :
+ instagram :
+ impactstory : #"https://profiles.impactstory.org/u/xxxx-xxxx-xxxx-xxxx"
+ lastfm :
+ linkedin : "https://www.linkedin.com/in/~yclei/"
+ orcid : "https://orcid.org/0009-0005-4610-6550"
+ pinterest :
+ soundcloud :
+ stackoverflow : # http://stackoverflow.com/users/123456/username
+ steam :
+ tumblr :
+ twitter :
+ vine :
+ weibo :
+ xing :
+ youtube :
+ wikipedia :
+
+
+# Reading Files
+include:
+ - .htaccess
+ - _pages
+ - files
+exclude:
+ - "*.sublime-project"
+ - "*.sublime-workspace"
+ - .asset-cache
+ - .bundle
+ - .jekyll-assets-cache
+ - .sass-cache
+ - CHANGELOG
+ - Capfile
+ - Gemfile
+ - Gruntfile.js
+ - LICENSE
+ - README
+ - Rakefile
+ - assets/js/_main.js
+ - assets/js/plugins
+ - assets/js/vendor
+ - config
+ - gulpfile.js
+ - log
+ - node_modules
+ - package.json
+ - tmp
+ - vendor
+keep_files:
+ - .git
+ - .svn
+encoding: "utf-8"
+markdown_ext: "markdown,mkdown,mkdn,mkd,md"
+
+
+# Conversion
+markdown: kramdown
+highlighter: rouge
+lsi: false
+excerpt_separator: "\n\n"
+incremental: false
+
+
+# Markdown Processing
+kramdown:
+ input: GFM
+ hard_wrap: false
+ auto_ids: true
+ footnote_nr: 1
+ entity_output: as_char
+ toc_levels: 1..6
+ smart_quotes: lsquo,rsquo,ldquo,rdquo
+ enable_coderay: false
+
+
+# Collections
+collections:
+ teaching:
+ output: true
+ permalink: /:collection/:path/
+ publications:
+ output: true
+ permalink: /:collection/:path/
+ # portfolio:
+ # output: true
+ # permalink: /:collection/:path/
+ # talks:
+ # output: true
+ # permalink: /:collection/:path/
+
+
+# Defaults
+defaults:
+ # _posts
+ - scope:
+ path: ""
+ type: posts
+ values:
+ layout: single
+ author_profile: true
+ read_time: true
+ comments: true
+ share: true
+ related: true
+ # _pages
+ - scope:
+ path: ""
+ type: pages
+ values:
+ layout: single
+ author_profile: true
+ # _teaching
+ - scope:
+ path: ""
+ type: teaching
+ values:
+ layout: single
+ author_profile: true
+ share: true
+ comments: true
+ # _publications
+ - scope:
+ path: ""
+ type: publications
+ values:
+ layout: single
+ author_profile: true
+ share: true
+ comments: true
+ # _portfolio
+ - scope:
+ path: ""
+ type: portfolio
+ values:
+ layout: single
+ author_profile: true
+ share: true
+ comment: true
+ # _talks
+ - scope:
+ path: ""
+ type: talks
+ values:
+ layout: talk
+ author_profile: true
+ share: true
+
+# Sass/SCSS
+sass:
+ sass_dir: _sass
+ style: compressed # http://sass-lang.com/documentation/file.SASS_REFERENCE.html#output_style
+
+
+# Outputting
+permalink: /:categories/:title/
+# paginate: 5 # amount of posts to show
+# paginate_path: /page:num/
+timezone: America/Los_Angeles # http://en.wikipedia.org/wiki/List_of_tz_database_time_zones
+
+
+# Plugins
+plugins:
+ - jekyll-paginate
+ - jekyll-sitemap
+ - jekyll-gist
+ - jekyll-feed
+ - jekyll-redirect-from
+# mimic GitHub Pages with --safe
+whitelist:
+ - jekyll-paginate
+ - jekyll-sitemap
+ - jekyll-gist
+ - jekyll-feed
+ - jemoji
+
+
+# Archives
+# Type
+# - GitHub Pages compatible archive pages built with Liquid ~> type: liquid (default)
+# - Jekyll Archives plugin archive pages ~> type: jekyll-archives
+# Path (examples)
+# - Archive page should exist at path when using Liquid method or you can
+# expect broken links (especially with breadcrumbs enabled)
+# - /tags/my-awesome-tag/index.html ~> path: /tags/
+# - path: /categories/
+# - path: /
+category_archive:
+ type: liquid
+ path: /categories/
+tag_archive:
+ type: liquid
+ path: /tags/
+# https://github.com/jekyll/jekyll-archives
+# jekyll-archives:
+# enabled:
+# - categories
+# - tags
+# layouts:
+# category: archive-taxonomy
+# tag: archive-taxonomy
+# permalinks:
+# category: /categories/:name/
+# tag: /tags/:name/
+
+
+# HTML Compression
+# - http://jch.penibelst.de/
+compress_html:
+ clippings: all
+ ignore:
+ envs: development
diff --git a/_data/authors.yml b/_data/authors.yml
new file mode 100644
index 0000000..8c5d15e
--- /dev/null
+++ b/_data/authors.yml
@@ -0,0 +1,18 @@
+# Authors
+
+Name Name:
+ name : "Name Name"
+ uri : "http://name.com"
+ email : "name@name.com"
+ bio : "This is the first name."
+ avatar : "bio-photo-2.jpg"
+ twitter : "name"
+ google_plus : "Name"
+
+Name2 Name2:
+ name : "Name2 Name2"
+ email : "name2@name2.com"
+ bio : "I ordered what?"
+ avatar : "bio-photo.jpg"
+ twitter : "name2"
+ google_plus : "Name"
\ No newline at end of file
diff --git a/_data/comments/layout-comments/comment-1470944006665.yml b/_data/comments/layout-comments/comment-1470944006665.yml
new file mode 100644
index 0000000..fd4e1a7
--- /dev/null
+++ b/_data/comments/layout-comments/comment-1470944006665.yml
@@ -0,0 +1,6 @@
+message: "\r\n\r\n“It's hard to be an artist. It's hard to be anything. It's hard to be.”"
+name: Bill Murray
+email: b0caa2a71f5066b3d90711c224578c21
+url: ''
+hidden: ''
+date: '2016-08-11T19:33:25.928Z'
diff --git a/_data/comments/layout-comments/comment-1470944162041.yml b/_data/comments/layout-comments/comment-1470944162041.yml
new file mode 100644
index 0000000..fb9b55e
--- /dev/null
+++ b/_data/comments/layout-comments/comment-1470944162041.yml
@@ -0,0 +1,6 @@
+message: "> “I never had seen Seinfeld, and they said, ‘Oh, it’s the last episode.’ And I said, ‘Oh, I’ll watch Seinfeld.’ And it was terrible.”\r\n>\r\n> *— From a 2014 interview with Howard Stern*"
+name: Anonymous
+email: 8c7e898f1b570760f834ecc03edf6b35
+url: ''
+hidden: ''
+date: '2016-08-11T19:36:01.033Z'
diff --git a/_data/comments/markup-syntax-highlighting/comment-1470969665387.yml b/_data/comments/markup-syntax-highlighting/comment-1470969665387.yml
new file mode 100644
index 0000000..bc7a53f
--- /dev/null
+++ b/_data/comments/markup-syntax-highlighting/comment-1470969665387.yml
@@ -0,0 +1,6 @@
+message: "Here's a test comment with a Markdown code block:\r\n\r\n```scss\r\nh1, h2, h3, h4, h5, h6 {\r\n margin: 2em 0 0.5em;\r\n line-height: 1.2;\r\n font-family: $header-font-family;\r\n font-weight: bold;\r\n}\r\n```"
+name: Michael Rose
+email: 1ce71bc10b86565464b612093d89707e
+url: 'https://mademistakes.com'
+hidden: ''
+date: '2016-08-12T02:41:04.706Z'
diff --git a/_data/comments/welcome-to-jekyll/comment-1470942205700.yml b/_data/comments/welcome-to-jekyll/comment-1470942205700.yml
new file mode 100644
index 0000000..cde7395
--- /dev/null
+++ b/_data/comments/welcome-to-jekyll/comment-1470942205700.yml
@@ -0,0 +1,6 @@
+message: "This is a test comment with some **Markdown** sprinkled about for *testing purposes*.\r\n\r\n### Subheading in a comment? Madness!\r\n\r\nNam et risus nec ipsum efficitur facilisis. Aenean tincidunt dapibus odio, eget rutrum urna lacinia non. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas."
+name: Michael Rose
+email: 1ce71bc10b86565464b612093d89707e
+url: 'https://mademistakes.com'
+hidden: ''
+date: '2016-08-11T19:03:24.929Z'
diff --git a/_data/comments/welcome-to-jekyll/comment-1470942247755.yml b/_data/comments/welcome-to-jekyll/comment-1470942247755.yml
new file mode 100644
index 0000000..8bc479e
--- /dev/null
+++ b/_data/comments/welcome-to-jekyll/comment-1470942247755.yml
@@ -0,0 +1,6 @@
+message: '"How much wood would a woodchuck chuck if a woodchuck could chuck wood?"'
+name: Jackalope
+email: cba827e665ae179e1d1ae007a6c3c1ab
+url: ''
+hidden: ''
+date: '2016-08-11T19:04:06.958Z'
diff --git a/_data/comments/welcome-to-jekyll/comment-1470942265819.yml b/_data/comments/welcome-to-jekyll/comment-1470942265819.yml
new file mode 100644
index 0000000..58c506a
--- /dev/null
+++ b/_data/comments/welcome-to-jekyll/comment-1470942265819.yml
@@ -0,0 +1,6 @@
+message: '"How much wood would a woodchuck chuck if a woodchuck could chuck wood?"'
+name: Jackalope Duplicate
+email: cba827e665ae179e1d1ae007a6c3c1ab
+url: ''
+hidden: ''
+date: '2016-08-11T19:04:25.085Z'
diff --git a/_data/comments/welcome-to-jekyll/comment-1470942493518.yml b/_data/comments/welcome-to-jekyll/comment-1470942493518.yml
new file mode 100644
index 0000000..68882dc
--- /dev/null
+++ b/_data/comments/welcome-to-jekyll/comment-1470942493518.yml
@@ -0,0 +1,6 @@
+message: "Images can be added to a comment using Markdown like this\r\n\r\n```\r\n\r\n```\r\n"
+name: Michael Rose
+email: 1ce71bc10b86565464b612093d89707e
+url: 'https://mademistakes.com'
+hidden: ''
+date: '2016-08-11T19:08:12.789Z'
diff --git a/_data/navigation.yml b/_data/navigation.yml
new file mode 100644
index 0000000..3381cfc
--- /dev/null
+++ b/_data/navigation.yml
@@ -0,0 +1,22 @@
+# main links links
+main:
+ - title: "Publications"
+ url: /publications/
+
+ # - title: "Talks"
+ # url: /talks/
+
+ - title: "Teaching"
+ url: /teaching/
+
+ # - title: "Portfolio"
+ # url: /portfolio/
+
+ # - title: "Blog Posts"
+ # url: /year-archive/
+
+ # - title: "CV"
+ # url: /cv/
+
+ # - title: "Guide"
+ # url: /markdown/
diff --git a/_data/ui-text.yml b/_data/ui-text.yml
new file mode 100644
index 0000000..f37f7fa
--- /dev/null
+++ b/_data/ui-text.yml
@@ -0,0 +1,270 @@
+# User interface text and labels
+
+# English (default)
+# -----------------
+en: &DEFAULT_EN
+ page : "Page"
+ pagination_previous : "Previous"
+ pagination_next : "Next"
+ breadcrumb_home_label : "Home"
+ breadcrumb_separator : "/"
+ toc_label : "On This Page"
+ ext_link_label : "Direct Link"
+ less_than : "less than"
+ minute_read : "minute read"
+ share_on_label : "Share on"
+ meta_label :
+ tags_label : "Tags:"
+ categories_label : "Categories:"
+ date_label : "Published:"
+ comments_label : "Leave a Comment"
+ comments_title : "Comments"
+ more_label : "Learn More"
+ related_label : "You May Also Enjoy"
+ follow_label : "Follow:"
+ feed_label : "Feed"
+ powered_by : "Powered by"
+ website_label : "Website"
+ email_label : "Email"
+ recent_posts : "Recent Posts"
+ undefined_wpm : "Undefined parameter words_per_minute at _config.yml"
+ comment_form_info : "Your email address will not be published. Required fields are marked"
+ comment_form_comment_label : "Comment"
+ comment_form_md_info : "Markdown is supported."
+ comment_form_name_label : "Name"
+ comment_form_email_label : "Email address"
+ comment_form_website_label : "Website (optional)"
+ comment_btn_submit : "Submit Comment"
+ comment_btn_submitted : "Submitted"
+ comment_success_msg : "Thanks for your comment! It will show on the site once it has been approved."
+ comment_error_msg : "Sorry, there was an error with your submission. Please make sure all required fields have been completed and try again."
+ loading_label : "Loading..."
+en-US:
+ <<: *DEFAULT_EN
+en-CA:
+ <<: *DEFAULT_EN
+en-GB:
+ <<: *DEFAULT_EN
+en-AU:
+ <<: *DEFAULT_EN
+
+# Spanish
+# --------------
+es: &DEFAULT_ES
+ page : "Página"
+ pagination_previous : "Anterior"
+ pagination_next : "Siguiente"
+ breadcrumb_home_label : "Inicio"
+ breadcrumb_separator : "/"
+ toc_label : "Contenidos"
+ ext_link_label : "Enlace"
+ less_than : "menos de"
+ minute_read : "minuto de lectura"
+ share_on_label : "Compartir"
+ meta_label :
+ tags_label : "Etiquetas:"
+ categories_label : "Categorías:"
+ date_label : "Actualizado:"
+ comments_label : "Comentar"
+ comments_title :
+ more_label : "Ver más"
+ related_label : "Podrías ver también"
+ follow_label : "Seguir:"
+ feed_label : "Feed"
+ powered_by : "Powered by"
+ website_label : "Sitio web"
+ email_label : "Email"
+ recent_posts : "Entradas recientes"
+ undefined_wpm : "Parametro words_per_minute (Palabras por minuto) no definido en _config.yml"
+ comment_form_info :
+ comment_form_comment_label :
+ comment_form_md_info :
+ comment_form_name_label :
+ comment_form_email_label :
+ comment_form_website_label :
+ comment_btn_submit :
+ comment_btn_submitted :
+ comment_success_msg :
+ comment_error_msg :
+ loading_label :
+es-ES:
+ <<: *DEFAULT_ES
+es-CO:
+ <<: *DEFAULT_ES
+
+# French
+# -----------------
+fr: &DEFAULT_FR
+ page : "Page"
+ pagination_previous : "Précédent"
+ pagination_next : "Suivant"
+ breadcrumb_home_label : "Accueil"
+ breadcrumb_separator : "/"
+ toc_label : "Sur cette page"
+ ext_link_label : "Lien direct"
+ less_than : "plus petit que"
+ minute_read : "minute de lecture"
+ share_on_label : "Partager sur"
+ meta_label :
+ tags_label : "Tags :"
+ categories_label : "Catégories :"
+ date_label : "Mis à jour :"
+ comments_label : "Laisser un commentaire"
+ comments_title :
+ more_label : "Lire plus"
+ related_label : "Vous pourriez aimer"
+ follow_label : "Suivez moi"
+ feed_label : "Flux"
+ powered_by : "Propulsé par"
+ website_label : "Site"
+ email_label : "Email"
+ recent_posts : "Posts récents"
+ undefined_wpm : "Le paramètre words_per_minute n'est pas défini dans _config.yml"
+ comment_form_info :
+ comment_form_comment_label :
+ comment_form_md_info :
+ comment_form_name_label :
+ comment_form_email_label :
+ comment_form_website_label :
+ comment_btn_submit :
+ comment_btn_submitted :
+ comment_success_msg :
+ comment_error_msg :
+ loading_label :
+fr-FR:
+ <<: *DEFAULT_FR
+fr-BE:
+ <<: *DEFAULT_FR
+fr-CH:
+ <<: *DEFAULT_FR
+
+# Turkish
+# -----------------
+tr: &DEFAULT_TR
+ page : "Sayfa"
+ pagination_previous : "Önceki"
+ pagination_next : "Sonraki"
+ breadcrumb_home_label : "Ana Sayfa"
+ breadcrumb_separator : "/"
+ toc_label : "İçindekiler"
+ ext_link_label : "Doğrudan Bağlantı"
+ less_than : "Şu süreden az: "
+ minute_read : "dakika tahmini okuma süresi"
+ share_on_label : "Paylaş"
+ meta_label :
+ tags_label : "Etiketler:"
+ categories_label : "Kategoriler:"
+ date_label : "Güncelleme tarihi:"
+ comments_label : "Yorum yapın"
+ comments_title :
+ more_label : "Daha fazlasını öğrenin"
+ related_label : "Bunlar ilginizi çekebilir:"
+ follow_label : "Takip et:"
+ feed_label : "RSS"
+ powered_by : "Emeği geçenler: "
+ website_label : "Web sayfası"
+ email_label : "E-posta"
+ recent_posts : "Son yazılar"
+ undefined_wpm : "_config.yml dosyasında tanımlanmamış words_per_minute parametresi"
+ comment_form_info :
+ comment_form_comment_label :
+ comment_form_md_info :
+ comment_form_name_label :
+ comment_form_email_label :
+ comment_form_website_label :
+ comment_btn_submit :
+ comment_btn_submitted :
+ comment_success_msg :
+ comment_error_msg :
+ loading_label :
+tr-TR:
+ <<: *DEFAULT_TR
+
+# Brazilian Portguese
+# -----------------
+pt: &DEFAULT_PT
+ page : "Página"
+ pagination_previous : "Anterior"
+ pagination_next : "Próxima"
+ breadcrumb_home_label : "Início"
+ breadcrumb_separator : "/"
+ toc_label : "Nesta página"
+ ext_link_label : "Link direto"
+ less_than : "menor que"
+ minute_read : "minutos de leitura"
+ share_on_label : "Compartilhe em"
+ meta_label :
+ tags_label : "Tags:"
+ categories_label : "Categorias:"
+ date_label : "Atualizado em:"
+ comments_label : "Deixe um comentário"
+ comments_title :
+ more_label : "Aprenda Mais"
+ related_label : "Talvez Você Goste Também"
+ follow_label : "Acompanhe em"
+ feed_label : "Feed"
+ powered_by : "Feito por"
+ website_label : "Site"
+ email_label : "E-mail"
+ recent_posts : "Postagens recentes"
+ undefined_wpm : "Parâmetro indefinido em word_per_minute no _config.yml"
+ comment_form_info : "Seu endereço de e-mail não será publicado. Campos obrigatórios são marcados"
+ comment_form_comment_label : "Comentário"
+ comment_form_md_info : "Markdown é suportado"
+ comment_form_name_label : "Nome"
+ comment_form_email_label : "Endereço de e-mail'"
+ comment_form_website_label : "Website (opcional)"
+ comment_btn_submit : "Enviar Comentário"
+ comment_btn_submitted : "Enviado"
+ comment_success_msg : "Obrigado por seu comentário! Ele será exibido no site depois de aprovado."
+ comment_error_msg : "Desculpe, houve um erro com o seu envio. Certifique-se de que todos os campos obrigatórios foram preenchidos e tente novamente."
+ loading_label : "Carregando..."
+pt-BR:
+ <<: *DEFAULT_PT
+pt-PT:
+ <<: *DEFAULT_PT
+
+# Italian
+# -----------------
+it: &DEFAULT_IT
+ page : "Pagina"
+ pagination_previous : "Precedente"
+ pagination_next : "Prossima"
+ breadcrumb_home_label : "Home"
+ breadcrumb_separator : "/"
+ toc_label : "Indice della pagina"
+ ext_link_label : "Link"
+ less_than : "meno di"
+ minute_read : "minuto/i di lettura"
+ share_on_label : "Condividi"
+ meta_label :
+ tags_label : "Tags:"
+ categories_label : "Categorie:"
+ date_label : "Aggiornato:"
+ comments_label : "Scrivi un commento"
+ comments_title :
+ more_label : "Scopri di più"
+ related_label : "Potrebbe Piacerti Anche"
+ follow_label : "Segui:"
+ feed_label : "Feed"
+ powered_by : "Powered by"
+ website_label : "Website"
+ email_label : "Email"
+ recent_posts : "Articoli Recenti"
+ undefined_wpm : "Parametro words_per_minute non definito in _config.yml"
+ comment_form_info :
+ comment_form_comment_label :
+ comment_form_md_info :
+ comment_form_name_label :
+ comment_form_email_label :
+ comment_form_website_label :
+ comment_btn_submit :
+ comment_btn_submitted :
+ comment_success_msg :
+ comment_error_msg :
+ loading_label :
+it-IT:
+ <<: *DEFAULT_IT
+
+# Another locale
+# --------------
diff --git a/_drafts/post-draft.md b/_drafts/post-draft.md
new file mode 100644
index 0000000..e0bb2bd
--- /dev/null
+++ b/_drafts/post-draft.md
@@ -0,0 +1,19 @@
+---
+layout: single
+title: "Draft Post"
+header:
+ teaser: "unsplash-gallery-image-2-th.jpg"
+categories:
+ - Jekyll
+tags:
+ - edge case
+---
+Monocle ipsum dolor sit amet handsome pariatur aliqua, hub remarkable irure commodo classic deserunt bespoke. Sunt commodo signature, Swiss minim flat white Tsutaya excepteur artisanal et Nordic laborum joy ANA. Beams mollit exquisite Ginza efficient dolore qui Comme des Garçons Winkreative Lufthansa bulletin global. Iconic sed liveable duis. Mollit dolore eu laboris Comme des Garçons hub pintxos sed eiusmod tote bag Shinkansen nisi consectetur pariatur. Nordic international quis finest Baggu dolore, bureaux hub hand-crafted ut joy sint Airbus A380.
+
+Conversation handsome hub cosy, enim emerging sed K-pop velit Gaggenau charming proident et boulevard ryokan. Remarkable airport deserunt international est, nulla minim magna emerging discerning in exclusive dolor. Commodo dolore deserunt cosy, global Nordic culpa uniforms signature charming. Smart ryokan commodo, eiusmod global occaecat incididunt aliqua Beams. Boulevard conversation excepteur finest Swiss non veniam Comme des Garçons essential artisanal. Destination Scandinavian international, anim Boeing 787 in duis Baggu irure essential.
+
+Fugiat exclusive laborum, Gaggenau ad Winkreative sharp elit labore. Remarkable officia ryokan Boeing 787, consectetur boutique Nordic Singapore espresso elit iconic perfect izakaya soft power excepteur. Ut veniam carefully curated K-pop dolore, uniforms in voluptate. Craftsmanship Ettinger Lufthansa sophisticated esse boutique veniam exquisite. Aute cillum bespoke, intricate consectetur in exquisite international lovely bulletin irure Washlet Gaggenau deserunt. Efficient eu quality of life wardrobe labore, dolor emerging airport concierge reprehenderit izakaya dolore liveable Baggu.
+
+Commodo elegant essential consectetur Gaggenau culpa consequat id sophisticated St Moritz sunt conversation duis non velit. Nulla business class non ut Marylebone ANA soft power fugiat carefully curated. Bureaux sed punctual handsome Washlet impeccable hand-crafted aute extraordinary tote bag enim boulevard soft power sleepy. Dolore conversation irure Zürich the best adipisicing, vibrant finest hub anim premium aliqua. Cupidatat smart international, bureaux Baggu id efficient punctual. Tempor nulla flat white enim, K-pop incididunt elit efficient Toto uniforms concierge discerning. Concierge sleepy extraordinary, deserunt Melbourne commodo Nordic Winkreative Washlet Ginza exercitation espresso.
+
+Tsutaya sed in business class sharp. Do Beams in adipisicing Lufthansa. Business class occaecat Melbourne, irure Singapore commodo espresso carefully curated quis quality of life adipisicing. Impeccable laborum efficient classic proident in. Beams Helsinki ullamco Marylebone dolore sophisticated concierge Muji anim duis joy ut. Comme des Garçons aute Muji in aliquip ryokan soft power Nordic essential ANA culpa elegant.
\ No newline at end of file
diff --git a/_includes/analytics-providers/custom.html b/_includes/analytics-providers/custom.html
new file mode 100644
index 0000000..c34b97a
--- /dev/null
+++ b/_includes/analytics-providers/custom.html
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/_includes/analytics-providers/google-universal.html b/_includes/analytics-providers/google-universal.html
new file mode 100644
index 0000000..3ada6e3
--- /dev/null
+++ b/_includes/analytics-providers/google-universal.html
@@ -0,0 +1,9 @@
+
\ No newline at end of file
diff --git a/_includes/analytics-providers/google.html b/_includes/analytics-providers/google.html
new file mode 100644
index 0000000..b591b99
--- /dev/null
+++ b/_includes/analytics-providers/google.html
@@ -0,0 +1,11 @@
+
\ No newline at end of file
diff --git a/_includes/analytics.html b/_includes/analytics.html
new file mode 100644
index 0000000..64a3359
--- /dev/null
+++ b/_includes/analytics.html
@@ -0,0 +1,12 @@
+{% if site.analytics.provider and page.analytics != false %}
+
+{% case site.analytics.provider %}
+{% when "google" %}
+ {% include /analytics-providers/google.html %}
+{% when "google-universal" %}
+ {% include /analytics-providers/google-universal.html %}
+{% when "custom" %}
+ {% include /analytics-providers/custom.html %}
+{% endcase %}
+
+{% endif %}
\ No newline at end of file
diff --git a/_includes/archive-single-cv.html b/_includes/archive-single-cv.html
new file mode 100644
index 0000000..85f65da
--- /dev/null
+++ b/_includes/archive-single-cv.html
@@ -0,0 +1,42 @@
+{% include base_path %}
+
+{% if post.header.teaser %}
+ {% capture teaser %}{{ post.header.teaser }}{% endcapture %}
+{% else %}
+ {% assign teaser = site.teaser %}
+{% endif %}
+
+{% if post.id %}
+ {% assign title = post.title | markdownify | remove: "" | remove: "
" %}
+{% else %}
+ {% assign title = post.title %}
+{% endif %}
+
+
+
+
+ {% if include.type == "grid" and teaser %}
+
+
+
+ {% endif %}
+
+ {% if post.read_time %}
+ {% include read-time.html %}
+ {% endif %}
+ {% if post.venue%}{{ post.citation }}
{% endif %}
+
+
+
diff --git a/_includes/archive-single-talk-cv.html b/_includes/archive-single-talk-cv.html
new file mode 100644
index 0000000..5de6a54
--- /dev/null
+++ b/_includes/archive-single-talk-cv.html
@@ -0,0 +1,41 @@
+{% include base_path %}
+
+{% if post.header.teaser %}
+ {% capture teaser %}{{ post.header.teaser }}{% endcapture %}
+{% else %}
+ {% assign teaser = site.teaser %}
+{% endif %}
+
+{% if post.id %}
+ {% assign title = post.title | markdownify | remove: "" | remove: "
" %}
+{% else %}
+ {% assign title = post.title %}
+{% endif %}
+
+
+
+
+ {% if include.type == "grid" and teaser %}
+
+
+
+ {% endif %}
+
+ {% if post.date %} {{ post.date | date: '%B %d, %Y' }}
{% endif %}
+ {% if post.venue%}{{post.type}} at {{ post.venue }}, {{post.location}}
{% endif %}
+
+
+
+
diff --git a/_includes/archive-single-talk.html b/_includes/archive-single-talk.html
new file mode 100644
index 0000000..6722ce4
--- /dev/null
+++ b/_includes/archive-single-talk.html
@@ -0,0 +1,42 @@
+{% include base_path %}
+
+{% if post.header.teaser %}
+ {% capture teaser %}{{ post.header.teaser }}{% endcapture %}
+{% else %}
+ {% assign teaser = site.teaser %}
+{% endif %}
+
+{% if post.id %}
+ {% assign title = post.title | markdownify | remove: "" | remove: "
" %}
+{% else %}
+ {% assign title = post.title %}
+{% endif %}
+
+
+
+ {% if include.type == "grid" and teaser %}
+
+
+
+ {% endif %}
+
+ {% if post.read_time %}
+ {% include read-time.html %}
+ {% endif %}
+ {% if post.date %} {{ post.date | date: '%B %d, %Y' }}
{% endif %}
+ {% if post.venue %}{{post.type}}, {{ post.venue }}, {{post.location}} {% endif %}
+ {% if post.excerpt %}
{{ post.excerpt | markdownify }}
{% endif %}
+
+
diff --git a/_includes/archive-single.html b/_includes/archive-single.html
new file mode 100644
index 0000000..2578471
--- /dev/null
+++ b/_includes/archive-single.html
@@ -0,0 +1,64 @@
+{% include base_path %}
+
+{% if post.header.teaser %}
+ {% capture teaser %}{{ post.header.teaser }}{% endcapture %}
+{% else %}
+ {% assign teaser = site.teaser %}
+{% endif %}
+
+{% if post.id %}
+ {% assign title = post.title | markdownify | remove: "" | remove: "
" %}
+{% else %}
+ {% assign title = post.title %}
+{% endif %}
+
+
+
+ {% if include.type == "grid" and teaser %}
+
+
+
+ {% endif %}
+
+
+
+ {% if post.read_time %}
+ {% include read-time.html %}
+ {% endif %}
+
+ {% if post.collection == 'teaching' %}
+ {{ post.type }}, {{ post.venue }} , {{ post.date | default: "1900-01-01" | date: "%Y" }}
+ {% elsif post.collection == 'publications' %}
+ Published in {{ post.venue }} , {{ post.date | default: "1900-01-01" | date: "%Y" }}
+ {% elsif post.date %}
+ {{ site.data.ui-text[site.locale].date_label | default: "Published:" }} {{ post.date | default: "1900-01-01" | date: "%B %d, %Y" }}
+ {% endif %}
+
+ {% if post.excerpt and site.read_more != 'enabled' %}
+ {{ post.excerpt | markdownify }}
+ {% elsif post.excerpt and site.read_more == 'enabled' %}
+
{{ post.excerpt | markdownify | remove: '
' | remove: '
' }} Read more
+ {% endif %}
+
+ {% if post.citation and post.paperurl %}
+ Recommended citation: {{ post.citation }} {{ post.paperurl }}
+ {% elsif post.citation %}
+ Recommended citation: {{ post.citation }}
+ {% elsif post.paperurl %}
+ Download here
+ {% endif %}
+
+
+
diff --git a/_includes/author-profile.html b/_includes/author-profile.html
new file mode 100644
index 0000000..5544916
--- /dev/null
+++ b/_includes/author-profile.html
@@ -0,0 +1,123 @@
+{% include base_path %}
+
+{% if page.author and site.data.authors[page.author] %}
+ {% assign author = site.data.authors[page.author] %}{% else %}{% assign author = site.author %}
+{% endif %}
+
+
+
+
+ {% if author.avatar contains "://" %}
+
+ {% else %}
+
+ {% endif %}
+
+
+
+
{{ author.name }}
+ {% if author.bio %}
{{ author.bio }}
{% endif %}
+
+
+
+
Follow
+
+ {% if author.location %}
+ {{ author.location }}
+ {% endif %}
+ {% if author.employer %}
+ {{ author.employer }}
+ {% endif %}
+ {% if author.uri %}
+ {{ site.data.ui-text[site.locale].website_label | default: "Website" }}
+ {% endif %}
+ {% if author.email %}
+ {{ site.data.ui-text[site.locale].email_label | default: "Email" }}
+ {% endif %}
+ {% if author.keybase %}
+ Keybase
+ {% endif %}
+ {% if author.researchgate %}
+ ResearchGate
+ {% endif %}
+ {% if author.twitter %}
+ Twitter
+ {% endif %}
+ {% if author.facebook %}
+ Facebook
+ {% endif %}
+ {% if author.google_plus %}
+ Google+
+ {% endif %}
+ {% if author.linkedin %}
+ LinkedIn
+ {% endif %}
+ {% if author.xing %}
+ XING
+ {% endif %}
+ {% if author.instagram %}
+ Instagram
+ {% endif %}
+ {% if author.tumblr %}
+ Tumblr
+ {% endif %}
+ {% if author.bitbucket %}
+ Bitbucket
+ {% endif %}
+ {% if author.github %}
+ Github
+ {% endif %}
+ {% if author.stackoverflow %}
+ Stackoverflow
+ {% endif %}
+ {% if author.lastfm %}
+ Last.fm
+ {% endif %}
+ {% if author.dribbble %}
+ Dribbble
+ {% endif %}
+ {% if author.pinterest %}
+ Pinterest
+ {% endif %}
+ {% if author.foursquare %}
+ Foursquare
+ {% endif %}
+ {% if author.steam %}
+ Steam
+ {% endif %}
+ {% if author.youtube %}
+ YouTube
+ {% endif %}
+ {% if author.soundcloud %}
+ Soundcloud
+ {% endif %}
+ {% if author.weibo %}
+ Weibo
+ {% endif %}
+ {% if author.flickr %}
+ Flickr
+ {% endif %}
+ {% if author.codepen %}
+ CodePen
+ {% endif %}
+ {% if author.vine %}
+ Vine
+ {% endif %}
+ {% if author.googlescholar %}
+ Google Scholar
+ {% endif %}
+ {% if author.pubmed %}
+ PubMed
+ {% endif %}
+ {% if author.orcid %}
+ ORCID
+ {% endif %}
+ {% if author.impactstory %}
+ Impactstory
+ {% endif %}
+ {% if author.wikipedia %}
+ Wikipedia
+{% endif %}
+
+
+
diff --git a/_includes/base_path b/_includes/base_path
new file mode 100644
index 0000000..36826c4
--- /dev/null
+++ b/_includes/base_path
@@ -0,0 +1,5 @@
+{% if site.url %}
+ {% assign base_path = site.url | append: site.baseurl %}
+{% else %}
+ {% assign base_path = site.github.url %}
+{% endif %}
\ No newline at end of file
diff --git a/_includes/breadcrumbs.html b/_includes/breadcrumbs.html
new file mode 100644
index 0000000..2b9f7a9
--- /dev/null
+++ b/_includes/breadcrumbs.html
@@ -0,0 +1,41 @@
+{% include base_path %}
+
+{% case site.categories.type %}
+ {% when "liquid" %}
+ {% assign path_type = "#" %}
+ {% when "jekyll-archives" %}
+ {% assign path_type = nil %}
+{% endcase %}
+
+{% if page.collection != 'posts' %}
+ {% assign path_type = nil %}
+ {% assign crumb_path = '/' %}
+{% else %}
+ {% assign crumb_path = site.categories.path %}
+{% endif %}
+
+
+
+ {% assign crumbs = page.url | split: '/' %}
+ {% assign i = 1 %}
+ {% for crumb in crumbs offset: 1 %}
+ {% if forloop.first %}
+
+ {{ site.data.ui-text[site.locale].breadcrumb_home_label | default: "Home" }}
+
+
+ {{ site.data.ui-text[site.locale].breadcrumb_separator | default: "/" }}
+ {% endif %}
+ {% if forloop.last %}
+ {{ page.title }}
+ {% else %}
+ {% assign i = i | plus: 1 %}
+
+ {{ crumb | replace: '-', ' ' | replace: '%20', ' ' | capitalize }}
+
+
+ {{ site.data.ui-text[site.locale].breadcrumb_separator | default: "/" }}
+ {% endif %}
+ {% endfor %}
+
+
\ No newline at end of file
diff --git a/_includes/browser-upgrade.html b/_includes/browser-upgrade.html
new file mode 100644
index 0000000..e8d8b26
--- /dev/null
+++ b/_includes/browser-upgrade.html
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/_includes/category-list.html b/_includes/category-list.html
new file mode 100644
index 0000000..a2a623e
--- /dev/null
+++ b/_includes/category-list.html
@@ -0,0 +1,30 @@
+{% include base_path %}
+
+{% include base_path %}
+
+{% case site.category_archive.type %}
+ {% when "liquid" %}
+ {% assign path_type = "#" %}
+ {% when "jekyll-archives" %}
+ {% assign path_type = nil %}
+{% endcase %}
+
+{% if site.category_archive.path %}
+ {% comment %}
+
+
+ {% endcomment %}
+ {% capture page_categories %}{% for category in page.categories %}{{ category | downcase }}#{{ category }}{% unless forloop.last %},{% endunless %}{% endfor %}{% endcapture %}
+ {% assign category_hashes = (page_categories | split: ',' | sort:0) %}
+
+
+ {{ site.data.ui-text[site.locale].categories_label | default: "Categories:" }}
+
+ {% for hash in category_hashes %}
+ {% assign keyValue = hash | split: '#' %}
+ {% capture category_word %}{{ keyValue[1] | strip_newlines }}{% endcapture %}
+ {{ category_word }} {% unless forloop.last %}, {% endunless %}
+ {% endfor %}
+
+
+{% endif %}
\ No newline at end of file
diff --git a/_includes/comment.html b/_includes/comment.html
new file mode 100644
index 0000000..ec954f5
--- /dev/null
+++ b/_includes/comment.html
@@ -0,0 +1,22 @@
+
\ No newline at end of file
diff --git a/_includes/comments-providers/custom.html b/_includes/comments-providers/custom.html
new file mode 100644
index 0000000..9099369
--- /dev/null
+++ b/_includes/comments-providers/custom.html
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/_includes/comments-providers/discourse.html b/_includes/comments-providers/discourse.html
new file mode 100644
index 0000000..1d23b6f
--- /dev/null
+++ b/_includes/comments-providers/discourse.html
@@ -0,0 +1,14 @@
+{% if site.comments.discourse.server %}
+{% include base_path %}
+{% capture canonical %}{{ base_path }}{% if site.permalink contains '.html' %}{{ page.url }}{% else %}{{ page.url | remove:'index.html' | strip_slash }}{% endif %}{% endcapture %}
+
+Please enable JavaScript to view the comments powered by [Discourse](http://forum.beta-europe.org/c/beta/website).
+{% endif %}
\ No newline at end of file
diff --git a/_includes/comments-providers/disqus.html b/_includes/comments-providers/disqus.html
new file mode 100644
index 0000000..c6fc691
--- /dev/null
+++ b/_includes/comments-providers/disqus.html
@@ -0,0 +1,22 @@
+{% if site.comments.disqus.shortname %}
+
+ Please enable JavaScript to view the comments powered by Disqus.
+{% endif %}
\ No newline at end of file
diff --git a/_includes/comments-providers/facebook.html b/_includes/comments-providers/facebook.html
new file mode 100644
index 0000000..009dc1c
--- /dev/null
+++ b/_includes/comments-providers/facebook.html
@@ -0,0 +1,8 @@
+
+
\ No newline at end of file
diff --git a/_includes/comments-providers/google-plus.html b/_includes/comments-providers/google-plus.html
new file mode 100644
index 0000000..0b4ff6b
--- /dev/null
+++ b/_includes/comments-providers/google-plus.html
@@ -0,0 +1,2 @@
+
+Please enable JavaScript to view the comments powered by Google+.
\ No newline at end of file
diff --git a/_includes/comments-providers/scripts.html b/_includes/comments-providers/scripts.html
new file mode 100644
index 0000000..ed192f7
--- /dev/null
+++ b/_includes/comments-providers/scripts.html
@@ -0,0 +1,18 @@
+{% if site.comments.provider and page.comments %}
+
+{% case site.comments.provider %}
+{% when "disqus" %}
+ {% include /comments-providers/disqus.html %}
+{% when "discourse" %}
+ {% include /comments-providers/discourse.html %}
+{% when "facebook" %}
+ {% include /comments-providers/facebook.html %}
+{% when "google-plus" %}
+ {% include /comments-providers/google-plus.html %}
+{% when "staticman" %}
+ {% include /comments-providers/staticman.html %}
+{% when "custom" %}
+ {% include /comments-providers/custom.html %}
+{% endcase %}
+
+{% endif %}
\ No newline at end of file
diff --git a/_includes/comments-providers/staticman.html b/_includes/comments-providers/staticman.html
new file mode 100644
index 0000000..471fa86
--- /dev/null
+++ b/_includes/comments-providers/staticman.html
@@ -0,0 +1,42 @@
+{% if site.repository and site.staticman.branch %}
+
+{% endif %}
\ No newline at end of file
diff --git a/_includes/comments.html b/_includes/comments.html
new file mode 100644
index 0000000..53bc539
--- /dev/null
+++ b/_includes/comments.html
@@ -0,0 +1,81 @@
+{% include base_path %}
+
+
\ No newline at end of file
diff --git a/_includes/feature_row b/_includes/feature_row
new file mode 100644
index 0000000..b84f36b
--- /dev/null
+++ b/_includes/feature_row
@@ -0,0 +1,52 @@
+{% include base_path %}
+
+{% if include.id %}
+ {% assign feature_row = page.[include.id] %}
+{% else %}
+ {% assign feature_row = page.feature_row %}
+{% endif %}
+
+
+
+ {% for f in feature_row %}
+
+ {% if f.url contains "://" %}
+ {% capture f_url %}{{ f.url }}{% endcapture %}
+ {% else %}
+ {% capture f_url %}{{ f.url | prepend: base_path }}{% endcapture %}
+ {% endif %}
+
+
+ {% endfor %}
+
+
\ No newline at end of file
diff --git a/_includes/footer.html b/_includes/footer.html
new file mode 100644
index 0000000..224d9b8
--- /dev/null
+++ b/_includes/footer.html
@@ -0,0 +1,24 @@
+{% include base_path %}
+
+
+
+
diff --git a/_includes/footer/custom.html b/_includes/footer/custom.html
new file mode 100644
index 0000000..cce5904
--- /dev/null
+++ b/_includes/footer/custom.html
@@ -0,0 +1,3 @@
+
+Sitemap
+
diff --git a/_includes/gallery b/_includes/gallery
new file mode 100644
index 0000000..4d271ee
--- /dev/null
+++ b/_includes/gallery
@@ -0,0 +1,49 @@
+{% include base_path %}
+
+{% if include.id %}
+ {% assign gallery = page.[include.id] %}
+{% else %}
+ {% assign gallery = page.gallery %}
+{% endif %}
+
+{% if gallery.size == 2 %}
+ {% assign gallery_layout = 'half' %}
+{% elsif gallery.size >= 3 %}
+ {% assign gallery_layout = 'third' %}
+{% else %}
+ {% assign gallery_layout = '' %}
+{% endif %}
+
+
+ {% for img in gallery %}
+ {% if img.url %}
+
+
+
+ {% else %}
+
+ {% endif %}
+ {% endfor %}
+ {% if include.caption %}
+ {{ include.caption | markdownify | remove: "" | remove: "
" }}
+ {% endif %}
+
\ No newline at end of file
diff --git a/_includes/group-by-array b/_includes/group-by-array
new file mode 100644
index 0000000..251302c
--- /dev/null
+++ b/_includes/group-by-array
@@ -0,0 +1,47 @@
+
+
+
+{% assign __empty_array = '' | split: ',' %}
+{% assign group_names = __empty_array %}
+{% assign group_items = __empty_array %}
+
+
+{% assign __names = include.collection | map: include.field %}
+
+
+{% assign __names = __names | join: ',' | join: ',' | split: ',' %}
+
+
+{% assign __names = __names | sort %}
+{% for name in __names | sort %}
+
+
+{% unless name == previous %}
+
+
+{% assign group_names = group_names | push: name %}
+{% endunless %}
+
+{% assign previous = name %}
+{% endfor %}
+
+
+
+{% for name in group_names %}
+
+
+{% assign __item = __empty_array %}
+{% for __element in include.collection %}
+{% if __element[include.field] contains name %}
+{% assign __item = __item | push: __element %}
+{% endif %}
+{% endfor %}
+
+
+{% assign group_items = group_items | push: __item %}
+{% endfor %}
\ No newline at end of file
diff --git a/_includes/head.html b/_includes/head.html
new file mode 100644
index 0000000..ffcc741
--- /dev/null
+++ b/_includes/head.html
@@ -0,0 +1,21 @@
+{% include base_path %}
+
+
+
+{% include seo.html %}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/_includes/head/custom.html b/_includes/head/custom.html
new file mode 100644
index 0000000..2a0b1c2
--- /dev/null
+++ b/_includes/head/custom.html
@@ -0,0 +1,38 @@
+{% include base_path %}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/_includes/masthead.html b/_includes/masthead.html
new file mode 100644
index 0000000..ffef559
--- /dev/null
+++ b/_includes/masthead.html
@@ -0,0 +1,23 @@
+{% include base_path %}
+
+
\ No newline at end of file
diff --git a/_includes/nav_list b/_includes/nav_list
new file mode 100644
index 0000000..91228ba
--- /dev/null
+++ b/_includes/nav_list
@@ -0,0 +1,46 @@
+{% include base_path %}
+{% assign navigation = site.data.navigation[include.nav] %}
+
+
+ {% if page.sidebar.title %}{% endif %}
+
+ {% for nav in navigation %}
+
+ {% if nav.url %}
+ {% comment %}internal/external URL check{% endcomment %}
+ {% if nav.url contains "://" %}
+ {% assign domain = "" %}
+ {% else %}
+ {% assign domain = base_path %}
+ {% endif %}
+
+ {{ nav.title }}
+ {% else %}
+ {{ nav.title }}
+ {% endif %}
+
+ {% if nav.children != null %}
+
+ {% for child in nav.children %}
+ {% comment %}internal/external URL check{% endcomment %}
+ {% if child.url contains "://" %}
+ {% assign domain = "" %}
+ {% else %}
+ {% assign domain = base_path %}
+ {% endif %}
+
+ {% comment %}set "active" class on current page{% endcomment %}
+ {% if child.url == page.url %}
+ {% assign active = "active" %}
+ {% else %}
+ {% assign active = "" %}
+ {% endif %}
+
+ {{ child.title }}
+ {% endfor %}
+
+ {% endif %}
+
+ {% endfor %}
+
+
\ No newline at end of file
diff --git a/_includes/page__hero.html b/_includes/page__hero.html
new file mode 100644
index 0000000..cd0fa9f
--- /dev/null
+++ b/_includes/page__hero.html
@@ -0,0 +1,55 @@
+{% include base_path %}
+
+{% if page.header.image contains "://" %}
+ {% capture img_path %}{{ page.header.image }}{% endcapture %}
+{% else %}
+ {% capture img_path %}{{ page.header.image | prepend: "/images/" | prepend: base_path }}{% endcapture %}
+{% endif %}
+
+{% if page.header.cta_url contains "://" %}
+ {% capture cta_path %}{{ page.header.cta_url }}{% endcapture %}
+{% else %}
+ {% capture cta_path %}{{ page.header.cta_url | prepend: base_path }}{% endcapture %}
+{% endif %}
+
+{% if page.header.overlay_image contains "://" %}
+ {% capture overlay_img_path %}{{ page.header.overlay_image }}{% endcapture %}
+{% elsif page.header.overlay_image %}
+ {% capture overlay_img_path %}{{ page.header.overlay_image | prepend: "/images/" | prepend: base_path }}{% endcapture %}
+{% endif %}
+
+{% if page.header.overlay_filter contains "rgba" %}
+ {% capture overlay_filter %}{{ page.header.overlay_filter }}{% endcapture %}
+{% elsif page.header.overlay_filter %}
+ {% capture overlay_filter %}rgba(0, 0, 0, {{ page.header.overlay_filter }}){% endcapture %}
+{% endif %}
+
+
\ No newline at end of file
diff --git a/_includes/page__taxonomy.html b/_includes/page__taxonomy.html
new file mode 100644
index 0000000..5a0c39f
--- /dev/null
+++ b/_includes/page__taxonomy.html
@@ -0,0 +1,9 @@
+{% include base_path %}
+
+{% if site.tag_archive.type and page.tags[0] %}
+ {% include tag-list.html %}
+{% endif %}
+
+{% if site.category_archive.type and page.categories[0] %}
+ {% include category-list.html %}
+{% endif %}
\ No newline at end of file
diff --git a/_includes/paginator.html b/_includes/paginator.html
new file mode 100644
index 0000000..2924f9a
--- /dev/null
+++ b/_includes/paginator.html
@@ -0,0 +1,70 @@
+{% include base_path %}
+
+{% if paginator.total_pages > 1 %}
+
+{% endif %}
\ No newline at end of file
diff --git a/_includes/post_pagination.html b/_includes/post_pagination.html
new file mode 100644
index 0000000..cb2005e
--- /dev/null
+++ b/_includes/post_pagination.html
@@ -0,0 +1,16 @@
+{% include base_path %}
+
+{% if page.previous or page.next %}
+
+{% endif %}
\ No newline at end of file
diff --git a/_includes/read-time.html b/_includes/read-time.html
new file mode 100644
index 0000000..a45043c
--- /dev/null
+++ b/_includes/read-time.html
@@ -0,0 +1,17 @@
+{% if post.read_time %}
+ {% assign words = post.content | strip_html | number_of_words %}
+{% elsif page.read_time %}
+ {% assign words = page.content | strip_html | number_of_words %}
+{% endif %}
+
+{% if site.words_per_minute %}
+ {% if words < 180 %}
+ {{ site.data.ui-text[site.locale].less_than | default: "less than" }} 1 {{ site.data.ui-text[site.locale].minute_read | default: "minute read" }}
+ {% elsif words < 360 %}
+ 1 {{ site.data.ui-text[site.locale].minute_read | default: "minute read" }}
+ {% else %}
+ {{ words | divided_by:site.words_per_minute }} {{ site.data.ui-text[site.locale].minute_read | default: "minute read" }}
+ {% endif %}
+{% else %}
+ {{ site.data.ui-text[site.locale].undefined_wpm | "Undefined parameter words_per_minute at _config.yml" }}
+{% endif %}
\ No newline at end of file
diff --git a/_includes/scripts.html b/_includes/scripts.html
new file mode 100644
index 0000000..138d271
--- /dev/null
+++ b/_includes/scripts.html
@@ -0,0 +1,4 @@
+
+
+{% include analytics.html %}
+{% include /comments-providers/scripts.html %}
diff --git a/_includes/seo.html b/_includes/seo.html
new file mode 100644
index 0000000..a43115b
--- /dev/null
+++ b/_includes/seo.html
@@ -0,0 +1,139 @@
+{% include base_path %}
+
+
+{% if site.url %}
+ {% assign seo_url = site.url | append: site.baseurl %}
+{% endif %}
+{% assign seo_url = seo_url | default: site.github.url %}
+
+{% if page.title %}
+ {% assign seo_title = page.title | append: " " | append: site.title_separator | append: " " | append: site.title %}
+{% endif %}
+
+{% if seo_title %}
+ {% assign seo_title = seo_title | markdownify | strip_html | strip_newlines | escape_once %}
+{% endif %}
+
+{% if site.url %}
+ {% assign canonical_url = page.url | replace: "index.html", "" | prepend: site.url %}
+{% endif %}
+
+{{ seo_title | default: site.title }}{% if paginator %}{% unless paginator.page == 1 %} {{ site.title_separator }} {{ site.data.ui-text[site.locale].page | default: "Page" }} {{ paginator.page }}{% endunless %}{% endif %}
+
+{% assign seo_description = page.description | default: page.excerpt | default: site.description %}
+{% if seo_description %}
+ {% assign seo_description = seo_description | markdownify | strip_html | strip_newlines | escape_once %}
+{% endif %}
+
+{% assign seo_author = page.author | default: page.author[0] | default: site.author[0] %}
+{% if seo_author %}
+ {% if seo_author.twitter %}
+ {% assign seo_author_twitter = seo_author.twitter %}
+ {% else %}
+ {% if site.data.authors and site.data.authors[seo_author] %}
+ {% assign seo_author_twitter = site.data.authors[seo_author].twitter %}
+ {% else %}
+ {% assign seo_author_twitter = seo_author %}
+ {% endif %}
+ {% endif %}
+ {% assign seo_author_twitter = seo_author_twitter | replace: "@", "" %}
+{% endif %}
+
+
+
+
+
+{% if seo_url %}
+
+
+{% endif %}
+
+{% if page.excerpt %}
+
+{% endif %}
+
+{% if site.twitter.username %}
+
+
+
+
+
+ {% if page.header.image %}
+
+
+ {% else %}
+
+ {% if site.og_image %}
+
+ {% endif %}
+ {% endif %}
+
+ {% if seo_author_twitter %}
+
+ {% endif %}
+{% endif %}
+
+{% if site.facebook %}
+ {% if site.facebook.publisher %}
+
+ {% endif %}
+
+ {% if site.facebook.app_id %}
+
+ {% endif %}
+{% endif %}
+
+{% if page.header.image %}
+
+{% elsif page.header.overlay_image %}
+
+{% endif %}
+
+{% if page.date %}
+
+
+{% endif %}
+
+{% if paginator.previous_page %}
+
+{% endif %}
+{% if paginator.next_page %}
+
+{% endif %}
+
+{% if site.og_image %}
+
+{% endif %}
+
+{% if site.social %}
+
+{% endif %}
+
+{% if site.google_site_verification %}
+
+{% endif %}
+{% if site.bing_site_verification %}
+
+{% endif %}
+{% if site.alexa_site_verification %}
+
+{% endif %}
+{% if site.yandex_site_verification %}
+
+{% endif %}
+
diff --git a/_includes/sidebar.html b/_includes/sidebar.html
new file mode 100644
index 0000000..b8ee39a
--- /dev/null
+++ b/_includes/sidebar.html
@@ -0,0 +1,25 @@
+{% include base_path %}
+
+{% if page.author_profile or layout.author_profile or page.sidebar %}
+
+{% endif %}
\ No newline at end of file
diff --git a/_includes/social-share.html b/_includes/social-share.html
new file mode 100644
index 0000000..3eeafbd
--- /dev/null
+++ b/_includes/social-share.html
@@ -0,0 +1,13 @@
+{% include base_path %}
+
+
+ {% if site.data.ui-text[site.locale].share_on_label %}
+ {{ site.data.ui-text[site.locale].share_on_label | default: "Share on" }}
+ {% endif %}
+
+
+
+ Facebook
+
+ LinkedIn
+
\ No newline at end of file
diff --git a/_includes/tag-list.html b/_includes/tag-list.html
new file mode 100644
index 0000000..80fcff3
--- /dev/null
+++ b/_includes/tag-list.html
@@ -0,0 +1,28 @@
+{% include base_path %}
+
+{% case site.tag_archive.type %}
+ {% when "liquid" %}
+ {% assign path_type = "#" %}
+ {% when "jekyll-archives" %}
+ {% assign path_type = nil %}
+{% endcase %}
+
+{% if site.tag_archive.path %}
+ {% comment %}
+
+
+ {% endcomment %}
+ {% capture page_tags %}{% for tag in page.tags %}{{ tag | downcase }}#{{ tag }}{% unless forloop.last %},{% endunless %}{% endfor %}{% endcapture %}
+ {% assign tag_hashes = (page_tags | split: ',' | sort:0) %}
+
+
+ {{ site.data.ui-text[site.locale].tags_label | default: "Tags:" }}
+
+ {% for hash in tag_hashes %}
+ {% assign keyValue = hash | split: '#' %}
+ {% capture tag_word %}{{ keyValue[1] | strip_newlines }}{% endcapture %}
+ {{ tag_word }} {% unless forloop.last %}, {% endunless %}
+ {% endfor %}
+
+
+{% endif %}
\ No newline at end of file
diff --git a/_includes/toc b/_includes/toc
new file mode 100644
index 0000000..6ba831c
--- /dev/null
+++ b/_includes/toc
@@ -0,0 +1,7 @@
+
\ No newline at end of file
diff --git a/_layouts/archive-taxonomy.html b/_layouts/archive-taxonomy.html
new file mode 100644
index 0000000..4d5827f
--- /dev/null
+++ b/_layouts/archive-taxonomy.html
@@ -0,0 +1,16 @@
+---
+layout: default
+author_profile: false
+---
+
+
+ {% include sidebar.html %}
+
+
+
{{ page.title }}
+ {% include base_path %}
+ {% for post in page.posts %}
+ {% include archive-single.html %}
+ {% endfor %}
+
+
\ No newline at end of file
diff --git a/_layouts/archive.html b/_layouts/archive.html
new file mode 100644
index 0000000..1b1d174
--- /dev/null
+++ b/_layouts/archive.html
@@ -0,0 +1,24 @@
+---
+layout: default
+---
+
+{% if page.header.overlay_color or page.header.overlay_image or page.header.image %}
+ {% include page__hero.html %}
+{% endif %}
+
+{% if page.url != "/" and site.breadcrumbs %}
+ {% unless paginator %}
+ {% include breadcrumbs.html %}
+ {% endunless %}
+{% endif %}
+
+
+ {% include sidebar.html %}
+
+
+ {% unless page.header.overlay_color or page.header.overlay_image %}
+
{{ page.title }}
+ {% endunless %}
+ {{ content }}
+
+
diff --git a/_layouts/compress.html b/_layouts/compress.html
new file mode 100644
index 0000000..8248010
--- /dev/null
+++ b/_layouts/compress.html
@@ -0,0 +1,10 @@
+---
+# Jekyll layout that compresses HTML
+# v3.0.2
+# http://jch.penibelst.de/
+# © 2014–2015 Anatol Broder
+# MIT License
+---
+
+{% capture _LINE_FEED %}
+{% endcapture %}{% if site.compress_html.ignore.envs contains jekyll.environment %}{{ content }}{% else %}{% capture _content %}{{ content }}{% endcapture %}{% assign _profile = site.compress_html.profile %}{% if site.compress_html.endings == "all" %}{% assign _endings = "html head body li dt dd p rt rp optgroup option colgroup caption thead tbody tfoot tr td th" | split: " " %}{% else %}{% assign _endings = site.compress_html.endings %}{% endif %}{% for _element in _endings %}{% capture _end %}{{ _element }}>{% endcapture %}{% assign _content = _content | remove: _end %}{% endfor %}{% if _profile and _endings %}{% assign _profile_endings = _content | size | plus: 1 %}{% endif %}{% for _element in site.compress_html.startings %}{% capture _start %}<{{ _element }}>{% endcapture %}{% assign _content = _content | remove: _start %}{% endfor %}{% if _profile and site.compress_html.startings %}{% assign _profile_startings = _content | size | plus: 1 %}{% endif %}{% if site.compress_html.comments == "all" %}{% assign _comments = "" | split: " " %}{% else %}{% assign _comments = site.compress_html.comments %}{% endif %}{% if _comments.size == 2 %}{% capture _comment_befores %}.{{ _content }}{% endcapture %}{% assign _comment_befores = _comment_befores | split: _comments.first %}{% for _comment_before in _comment_befores %}{% if forloop.first %}{% continue %}{% endif %}{% capture _comment_outside %}{% if _carry %}{{ _comments.first }}{% endif %}{{ _comment_before }}{% endcapture %}{% capture _comment %}{% unless _carry %}{{ _comments.first }}{% endunless %}{{ _comment_outside | split: _comments.last | first }}{% if _comment_outside contains _comments.last %}{{ _comments.last }}{% assign _carry = false %}{% else %}{% assign _carry = true %}{% endif %}{% endcapture %}{% assign _content = _content | remove_first: _comment %}{% endfor %}{% if _profile %}{% assign _profile_comments = _content | size | plus: 1 %}{% endif %}{% endif %}{% assign _pre_befores = _content | split: "" %}{% assign _pres_after = "" %}{% if _pres.size != 0 %}{% if site.compress_html.blanklines %}{% assign _lines = _pres.last | split: _LINE_FEED %}{% capture _pres_after %}{% for _line in _lines %}{% assign _trimmed = _line | split: " " | join: " " %}{% if _trimmed != empty or forloop.last %}{% unless forloop.first %}{{ _LINE_FEED }}{% endunless %}{{ _line }}{% endif %}{% endfor %}{% endcapture %}{% else %}{% assign _pres_after = _pres.last | split: " " | join: " " %}{% endif %}{% endif %}{% capture _content %}{{ _content }}{% if _pre_before contains " " %}{% endif %}{% unless _pre_before contains " " and _pres.size == 1 %}{{ _pres_after }}{% endunless %}{% endcapture %}{% endfor %}{% if _profile %}{% assign _profile_collapse = _content | size | plus: 1 %}{% endif %}{% if site.compress_html.clippings == "all" %}{% assign _clippings = "html head title base link meta style body article section nav aside h1 h2 h3 h4 h5 h6 hgroup header footer address p hr blockquote ol ul li dl dt dd figure figcaption main div table caption colgroup col tbody thead tfoot tr td th" | split: " " %}{% else %}{% assign _clippings = site.compress_html.clippings %}{% endif %}{% for _element in _clippings %}{% assign _edges = " ; ; ;" | replace: "e", _element | split: ";" %}{% assign _content = _content | replace: _edges[0], _edges[1] | replace: _edges[2], _edges[3] | replace: _edges[4], _edges[5] %}{% endfor %}{% if _profile and _clippings %}{% assign _profile_clippings = _content | size | plus: 1 %}{% endif %}{{ _content }}{% if _profile %} Step Bytes raw {{ content | size }}{% if _profile_endings %} endings {{ _profile_endings }}{% endif %}{% if _profile_startings %} startings {{ _profile_startings }}{% endif %}{% if _profile_comments %} comments {{ _profile_comments }}{% endif %}{% if _profile_collapse %} collapse {{ _profile_collapse }}{% endif %}{% if _profile_clippings %} clippings {{ _profile_clippings }}{% endif %}
{% endif %}{% endif %}
diff --git a/_layouts/default.html b/_layouts/default.html
new file mode 100644
index 0000000..3ae77cf
--- /dev/null
+++ b/_layouts/default.html
@@ -0,0 +1,24 @@
+---
+layout: compress
+---
+
+{% include base_path %}
+
+
+
+
+ {% include head.html %}
+ {% include head/custom.html %}
+
+
+
+
+ {% include browser-upgrade.html %}
+ {% include masthead.html %}
+
+ {{ content }}
+
+ {% include scripts.html %}
+
+
+
diff --git a/_layouts/single.html b/_layouts/single.html
new file mode 100644
index 0000000..6290cd2
--- /dev/null
+++ b/_layouts/single.html
@@ -0,0 +1,90 @@
+---
+layout: default
+---
+
+{% include base_path %}
+
+{% if page.header.overlay_color or page.header.overlay_image or page.header.image %}
+ {% include page__hero.html %}
+{% endif %}
+
+{% if page.url != "/" and site.breadcrumbs %}
+ {% unless paginator %}
+ {% include breadcrumbs.html %}
+ {% endunless %}
+{% endif %}
+
+
+ {% include sidebar.html %}
+
+
+ {% if page.title %} {% endif %}
+ {% if page.excerpt %} {% endif %}
+ {% if page.date %} {% endif %}
+ {% if page.modified %} {% endif %}
+
+
+ {% unless page.header.overlay_color or page.header.overlay_image %}
+
+ {% if page.title %}{{ page.title | markdownify | remove: " " | remove: "
" }}{% endif %}
+ {% if page.read_time %}
+ {% include read-time.html %}
+ {% endif %}
+ {% if page.modified %}
+ {{ site.data.ui-text[site.locale].date_label | default: "Published:" }} {{ page.modified | date: "%B %d, %Y" }}
+ {% endif %}
+
+ {% if page.collection == 'teaching' %}
+ {{ page.type }}, {{ page.venue }} , {{ page.date | default: "1900-01-01" | date: "%Y" }}
+ {% elsif page.venue and page.date %}
+ Published in {{ page.venue }} , {{ page.date | default: "1900-01-01" | date: "%Y" }}
+ {% elsif page.date %}
+ {{ site.data.ui-text[site.locale].date_label | default: "Published:" }} {{ page.date | default: "1900-01-01" | date: "%B %d, %Y" }}
+ {% endif %}
+
+
+ {% if page.citation and page.paperurl %}
+ Recommended citation: {{ page.citation }} {{ page.paperurl }}
+ {% elsif page.citation %}
+ Recommended citation: {{ page.citation }}
+ {% endif %}
+
+
+ {% endunless %}
+
+
+ {{ content }}
+ {% if page.link %}{% endif %}
+
+
+
+ {% if site.data.ui-text[site.locale].meta_label %}
+ {{ site.data.ui-text[site.locale].meta_label }}
+ {% endif %}
+ {% include page__taxonomy.html %}
+
+
+ {% if page.share %}{% include social-share.html %}{% endif %}
+
+ {% include post_pagination.html %}
+
+
+ {% if site.comments.provider and page.comments %}
+ {% include comments.html %}
+ {% endif %}
+
+
+ {% comment %}{% endcomment %}
+ {% if page.id and page.related and site.related_posts.size > 0 %}
+
+ {% if site.data.ui-text[site.locale].related_label %}
+
{{ site.data.ui-text[site.locale].related_label | default: "You May Also Enjoy" }}
+ {% endif %}
+
+ {% for post in site.related_posts limit:4 %}
+ {% include archive-single.html type="grid" %}
+ {% endfor %}
+
+
+ {% endif %}
+
diff --git a/_layouts/splash.html b/_layouts/splash.html
new file mode 100644
index 0000000..72d0d87
--- /dev/null
+++ b/_layouts/splash.html
@@ -0,0 +1,22 @@
+---
+layout: default
+---
+
+{% include base_path %}
+
+{% if page.header.overlay_color or page.header.overlay_image or page.header.image %}
+ {% include page__hero.html %}
+{% endif %}
+
+
+
+ {% if page.title %} {% endif %}
+ {% if page.excerpt %} {% endif %}
+ {% if page.date %} {% endif %}
+ {% if page.modified %} {% endif %}
+
+
+
+
diff --git a/_layouts/talk.html b/_layouts/talk.html
new file mode 100644
index 0000000..757aa61
--- /dev/null
+++ b/_layouts/talk.html
@@ -0,0 +1,78 @@
+---
+layout: default
+---
+
+{% include base_path %}
+
+{% if page.header.overlay_color or page.header.overlay_image or page.header.image %}
+ {% include page__hero.html %}
+{% endif %}
+
+{% if page.url != "/" and site.breadcrumbs %}
+ {% unless paginator %}
+ {% include breadcrumbs.html %}
+ {% endunless %}
+{% endif %}
+
+
+ {% include sidebar.html %}
+
+
+ {% if page.title %} {% endif %}
+ {% if page.excerpt %} {% endif %}
+ {% if page.date %} {% endif %}
+ {% if page.modified %} {% endif %}
+
+
+ {% unless page.header.overlay_color or page.header.overlay_image %}
+
+ {% if page.title %}{{ page.title | markdownify | remove: " " | remove: "
" }}{% endif %}
+ {% if page.read_time %}
+ {% include read-time.html %}
+ {% endif %}
+ {% if page.modified %}
+ Date: {{ page.modified | date: "%B %d, %Y" }}
+ {% elsif page.date %}
+ Date: {{ page.date | date: "%B %d, %Y" }}
+ {% endif %}
+ {% if page.talk_type %}{{page.talk_type}} at {{ page.venue }}, {{page.location}} {% endif %}
+
+
+ {% endunless %}
+
+
+ {{ content }}
+ {% if page.link %}{% endif %}
+
+
+
+ {% if site.data.ui-text[site.locale].meta_label %}
+ {{ site.data.ui-text[site.locale].meta_label }}
+ {% endif %}
+ {% include page__taxonomy.html %}
+
+
+ {% if page.share %}{% include social-share.html %}{% endif %}
+
+ {% include post_pagination.html %}
+
+
+ {% if site.comments.provider and page.comments %}
+ {% include comments.html %}
+ {% endif %}
+
+
+ {% comment %}{% endcomment %}
+ {% if page.id and page.related and site.related_posts.size > 0 %}
+
+ {% if site.data.ui-text[site.locale].related_label %}
+
{{ site.data.ui-text[site.locale].related_label | default: "You May Also Enjoy" }}
+ {% endif %}
+
+ {% for post in site.related_posts limit:4 %}
+ {% include archive-single.html type="grid" %}
+ {% endfor %}
+
+
+ {% endif %}
+
diff --git a/_pages/404.md b/_pages/404.md
new file mode 100644
index 0000000..9d0f860
--- /dev/null
+++ b/_pages/404.md
@@ -0,0 +1,16 @@
+---
+title: "Page Not Found"
+excerpt: "Page not found. Your pixels are in another canvas."
+sitemap: false
+permalink: /404.html
+---
+
+Sorry, but the page you were trying to view does not exist --- perhaps you can try searching for it below.
+
+
+
diff --git a/_pages/about.md b/_pages/about.md
new file mode 100644
index 0000000..6ebdcbd
--- /dev/null
+++ b/_pages/about.md
@@ -0,0 +1,21 @@
+---
+permalink: /
+title: ""
+excerpt: "About me"
+author_profile: true
+redirect_from:
+ - /about/
+ - /about.html
+---
+
+
+Education
+======
+* M.S. in Cyber Science and Engineering, Wuhan University, 2025 (expected)
+* B.S. in Information Security, China University of Geoscience, 2022
+
+Publications
+======
+ {% for post in site.publications %}
+ {% include archive-single-cv.html %}
+ {% endfor %}
\ No newline at end of file
diff --git a/_pages/category-archive.html b/_pages/category-archive.html
new file mode 100644
index 0000000..3ed3378
--- /dev/null
+++ b/_pages/category-archive.html
@@ -0,0 +1,17 @@
+---
+layout: archive
+permalink: /categories/
+title: "Posts by Category"
+author_profile: true
+---
+
+{% include base_path %}
+{% include group-by-array collection=site.posts field="categories" %}
+
+{% for category in group_names %}
+ {% assign posts = group_items[forloop.index0] %}
+ {{ category }}
+ {% for post in posts %}
+ {% include archive-single.html %}
+ {% endfor %}
+{% endfor %}
\ No newline at end of file
diff --git a/_pages/collection-archive.html b/_pages/collection-archive.html
new file mode 100644
index 0000000..344c51e
--- /dev/null
+++ b/_pages/collection-archive.html
@@ -0,0 +1,24 @@
+---
+layout: archive
+title: "Posts by Collection"
+permalink: /collection-archive/
+author_profile: true
+---
+
+{% include base_path %}
+{% capture written_label %}'None'{% endcapture %}
+
+{% for collection in site.collections %}
+ {% unless collection.output == false or collection.label == "posts" %}
+ {% capture label %}{{ collection.label }}{% endcapture %}
+ {% if label != written_label %}
+ {{ label }}
+ {% capture written_label %}{{ label }}{% endcapture %}
+ {% endif %}
+ {% endunless %}
+ {% for post in collection.docs %}
+ {% unless collection.output == false or collection.label == "posts" %}
+ {% include archive-single.html %}
+ {% endunless %}
+ {% endfor %}
+{% endfor %}
\ No newline at end of file
diff --git a/_pages/cv.md b/_pages/cv.md
new file mode 100644
index 0000000..8726613
--- /dev/null
+++ b/_pages/cv.md
@@ -0,0 +1,52 @@
+---
+layout: archive
+title: "CV"
+permalink: /cv/
+author_profile: true
+redirect_from:
+ - /resume
+---
+
+{% include base_path %}
+
+Education
+======
+* B.S. in GitHub, China University of Geoscience, 2022
+* M.S. in Jekyll, Wuhan University, 2025 (expected)
+
+Work experience
+======
+* Summer 2015: Research Assistant
+ * Github University
+ * Duties included: Tagging issues
+ * Supervisor: Professor Git
+
+* Fall 2015: Research Assistant
+ * Github University
+ * Duties included: Merging pull requests
+ * Supervisor: Professor Hub
+
+Skills
+======
+* Skill 1
+* Skill 2
+ * Sub-skill 2.1
+ * Sub-skill 2.2
+ * Sub-skill 2.3
+* Skill 3
+
+Publications
+======
+ {% for post in site.publications %}
+ {% include archive-single-cv.html %}
+ {% endfor %}
+
+Teaching
+======
+ {% for post in site.teaching %}
+ {% include archive-single-cv.html %}
+ {% endfor %}
+
+Service and leadership
+======
+* Currently signed in to 43 different slack teams
diff --git a/_pages/markdown.md b/_pages/markdown.md
new file mode 100644
index 0000000..86f082e
--- /dev/null
+++ b/_pages/markdown.md
@@ -0,0 +1,202 @@
+---
+permalink: /markdown/
+title: "Markdown"
+author_profile: true
+redirect_from:
+ - /md/
+ - /markdown.html
+---
+
+## Locations of key files/directories
+
+* Basic config options: _config.yml
+* Top navigation bar config: _data/navigation.yml
+* Single pages: _pages/
+* Collections of pages are .md or .html files in:
+ * _publications/
+ * _portfolio/
+ * _posts/
+ * _teaching/
+ * _talks/
+* Footer: _includes/footer.html
+* Static files (like PDFs): /files/
+* Profile image (can set in _config.yml): images/profile.png
+
+## Tips and hints
+
+* Name a file ".md" to have it render in markdown, name it ".html" to render in HTML.
+* Go to the [commit list](https://github.com/academicpages/academicpages.github.io/commits/master) (on your repo) to find the last version Github built with Jekyll.
+ * Green check: successful build
+ * Orange circle: building
+ * Red X: error
+ * No icon: not built
+
+## Resources
+ * [Liquid syntax guide](https://shopify.github.io/liquid/tags/control-flow/)
+
+## Markdown guide
+
+### Header three
+
+#### Header four
+
+##### Header five
+
+###### Header six
+
+## Blockquotes
+
+Single line blockquote:
+
+> Quotes are cool.
+
+## Tables
+
+### Table 1
+
+| Entry | Item | |
+| -------- | ------ | ------------------------------------------------------------ |
+| [John Doe](#) | 2016 | Description of the item in the list |
+| [Jane Doe](#) | 2019 | Description of the item in the list |
+| [Doe Doe](#) | 2022 | Description of the item in the list |
+
+### Table 2
+
+| Header1 | Header2 | Header3 |
+|:--------|:-------:|--------:|
+| cell1 | cell2 | cell3 |
+| cell4 | cell5 | cell6 |
+|-----------------------------|
+| cell1 | cell2 | cell3 |
+| cell4 | cell5 | cell6 |
+|=============================|
+| Foot1 | Foot2 | Foot3 |
+
+## Definition Lists
+
+Definition List Title
+: Definition list division.
+
+Startup
+: A startup company or startup is a company or temporary organization designed to search for a repeatable and scalable business model.
+
+#dowork
+: Coined by Rob Dyrdek and his personal body guard Christopher "Big Black" Boykins, "Do Work" works as a self motivator, to motivating your friends.
+
+Do It Live
+: I'll let Bill O'Reilly [explain](https://www.youtube.com/watch?v=O_HyZ5aW76c "We'll Do It Live") this one.
+
+## Unordered Lists (Nested)
+
+ * List item one
+ * List item one
+ * List item one
+ * List item two
+ * List item three
+ * List item four
+ * List item two
+ * List item three
+ * List item four
+ * List item two
+ * List item three
+ * List item four
+
+## Ordered List (Nested)
+
+ 1. List item one
+ 1. List item one
+ 1. List item one
+ 2. List item two
+ 3. List item three
+ 4. List item four
+ 2. List item two
+ 3. List item three
+ 4. List item four
+ 2. List item two
+ 3. List item three
+ 4. List item four
+
+## Buttons
+
+Make any link standout more when applying the `.btn` class.
+
+## Notices
+
+**Watch out!** You can also add notices by appending `{: .notice}` to a paragraph.
+{: .notice}
+
+## HTML Tags
+
+### Address Tag
+
+
+ 1 Infinite Loop Cupertino, CA 95014 United States
+
+
+### Anchor Tag (aka. Link)
+
+This is an example of a [link](http://github.com "Github").
+
+### Abbreviation Tag
+
+The abbreviation CSS stands for "Cascading Style Sheets".
+
+*[CSS]: Cascading Style Sheets
+
+### Cite Tag
+
+"Code is poetry." ---Automattic
+
+### Code Tag
+
+You will learn later on in these tests that `word-wrap: break-word;` will be your best friend.
+
+### Strike Tag
+
+This tag will let you strikeout text .
+
+### Emphasize Tag
+
+The emphasize tag should _italicize_ text.
+
+### Insert Tag
+
+This tag should denote inserted text.
+
+### Keyboard Tag
+
+This scarcely known tag emulates keyboard text , which is usually styled like the `` tag.
+
+### Preformatted Tag
+
+This tag styles large blocks of code.
+
+
+.post-title {
+ margin: 0 0 5px;
+ font-weight: bold;
+ font-size: 38px;
+ line-height: 1.2;
+ and here's a line of some really, really, really, really long text, just to see how the PRE tag handles it and to find out how it overflows;
+}
+
+
+### Quote Tag
+
+Developers, developers, developers… –Steve Ballmer
+
+### Strong Tag
+
+This tag shows **bold text**.
+
+### Subscript Tag
+
+Getting our science styling on with H2 O, which should push the "2" down.
+
+### Superscript Tag
+
+Still sticking with science and Isaac Newton's E = MC2 , which should lift the 2 up.
+
+### Variable Tag
+
+This allows you to denote variables .
diff --git a/_pages/page-archive.html b/_pages/page-archive.html
new file mode 100644
index 0000000..c1c5d7c
--- /dev/null
+++ b/_pages/page-archive.html
@@ -0,0 +1,11 @@
+---
+layout: archive
+title: "Page Archive"
+permalink: /page-archive/
+author_profile: false
+---
+
+{% include base_path %}
+{% for post in site.pages %}
+ {% include archive-single.html %}
+{% endfor %}
\ No newline at end of file
diff --git a/_pages/publications.md b/_pages/publications.md
new file mode 100644
index 0000000..de7be72
--- /dev/null
+++ b/_pages/publications.md
@@ -0,0 +1,16 @@
+---
+layout: archive
+title: "Publications"
+permalink: /publications/
+author_profile: true
+---
+
+{% if author.googlescholar %}
+ You can also find my articles on my Google Scholar profile .
+{% endif %}
+
+{% include base_path %}
+
+{% for post in site.publications reversed %}
+ {% include archive-single.html %}
+{% endfor %}
diff --git a/_pages/sitemap.md b/_pages/sitemap.md
new file mode 100644
index 0000000..0b85047
--- /dev/null
+++ b/_pages/sitemap.md
@@ -0,0 +1,37 @@
+---
+layout: archive
+title: "Sitemap"
+permalink: /sitemap/
+author_profile: true
+---
+
+{% include base_path %}
+
+A list of all the posts and pages found on the site. For you robots out there is an [XML version]({{ base_path }}/sitemap.xml) available for digesting as well.
+
+
+
+
+
+{% capture written_label %}'None'{% endcapture %}
+
+{% for collection in site.collections %}
+{% unless collection.output == false or collection.label == "posts" %}
+ {% capture label %}{{ collection.label }}{% endcapture %}
+ {% if label != written_label %}
+ {{ label }}
+ {% capture written_label %}{{ label }}{% endcapture %}
+ {% endif %}
+{% endunless %}
+{% for post in collection.docs %}
+ {% unless collection.output == false or collection.label == "posts" %}
+ {% include archive-single.html %}
+ {% endunless %}
+{% endfor %}
+{% endfor %}
diff --git a/_pages/tag-archive.html b/_pages/tag-archive.html
new file mode 100644
index 0000000..4006381
--- /dev/null
+++ b/_pages/tag-archive.html
@@ -0,0 +1,17 @@
+---
+layout: archive
+permalink: /tags/
+title: "Posts by Tags"
+author_profile: true
+---
+
+{% include base_path %}
+{% include group-by-array collection=site.posts field="tags" %}
+
+{% for tag in group_names %}
+ {% assign posts = group_items[forloop.index0] %}
+ {{ tag }}
+ {% for post in posts %}
+ {% include archive-single.html %}
+ {% endfor %}
+{% endfor %}
\ No newline at end of file
diff --git a/_pages/talkmap.html b/_pages/talkmap.html
new file mode 100644
index 0000000..c4ca03e
--- /dev/null
+++ b/_pages/talkmap.html
@@ -0,0 +1,9 @@
+---
+layout: archive
+title: "Talk map"
+permalink: /talkmap.html
+author_profile: true
+---
+
+This map is generated from a Jupyter Notebook file in /_talks/talkmap.ipynb , which mines the location fields in the .md files in _talks/.
+
diff --git a/_pages/teaching.html b/_pages/teaching.html
new file mode 100644
index 0000000..ea3910f
--- /dev/null
+++ b/_pages/teaching.html
@@ -0,0 +1,12 @@
+---
+layout: archive
+title: "Teaching"
+permalink: /teaching/
+author_profile: true
+---
+
+{% include base_path %}
+
+{% for post in site.teaching reversed %}
+ {% include archive-single.html %}
+{% endfor %}
diff --git a/_pages/terms.md b/_pages/terms.md
new file mode 100644
index 0000000..3c7479b
--- /dev/null
+++ b/_pages/terms.md
@@ -0,0 +1,39 @@
+---
+permalink: /terms/
+title: "Terms and Privacy Policy"
+modified: 2016-06-06
+---
+
+{% include base_path %}
+{% include toc %}
+
+## Privacy Policy
+
+The privacy of my visitors is extremely important. This Privacy Policy outlines the types of personal information that is received and collected and how it is used.
+
+First and foremost, I will never share your email address or any other personal information to anyone without your direct consent.
+
+### Log Files
+
+Like many other websites, this site uses log files to help learn about when, from where, and how often traffic flows to this site. The information in these log files include:
+
+* Internet Protocol addresses (IP)
+* Types of browser
+* Internet Service Provider (ISP)
+* Date and time stamp
+* Referring and exit pages
+* Number of clicks
+
+All of this information is not linked to anything that is personally identifiable.
+
+### Cookies and Web Beacons
+
+When you visit this site "convenience" cookies are stored on your computer when you submit a comment to help you log in faster to [Disqus](http://disqus.com) the next time you leave a comment.
+
+Third-party advertisers may also place and read cookies on your browser and/or use web beacons to collect information. This site has no access or control over these cookies. You should review the respective privacy policies on any and all third-party ad servers for more information regarding their practices and how to opt-out.
+
+If you wish to disable cookies, you may do so through your web browser options. Instructions for doing so can be found on the specific web browsers' websites.
+
+#### Google Analytics
+
+Google Analytics is a web analytics tool I use to help understand how visitors engage with this website. It reports website trends using cookies and web beacons without identifying individual visitors. You can read [Google Analytics Privacy Policy](http://www.google.com/analytics/learn/privacy.html).
\ No newline at end of file
diff --git a/_pages/year-archive.html b/_pages/year-archive.html
new file mode 100644
index 0000000..b3b2883
--- /dev/null
+++ b/_pages/year-archive.html
@@ -0,0 +1,19 @@
+---
+layout: archive
+permalink: /year-archive/
+title: "Blog posts"
+author_profile: true
+redirect_from:
+ - /wordpress/blog-posts/
+---
+
+{% include base_path %}
+{% capture written_year %}'None'{% endcapture %}
+{% for post in site.posts %}
+ {% capture year %}{{ post.date | date: '%Y' }}{% endcapture %}
+ {% if year != written_year %}
+ {{ year }}
+ {% capture written_year %}{{ year }}{% endcapture %}
+ {% endif %}
+ {% include archive-single.html %}
+{% endfor %}
diff --git a/_posts/2012-08-14-blog-post-1.md b/_posts/2012-08-14-blog-post-1.md
new file mode 100644
index 0000000..8d4819a
--- /dev/null
+++ b/_posts/2012-08-14-blog-post-1.md
@@ -0,0 +1,20 @@
+---
+title: 'Blog Post number 1'
+date: 2012-08-14
+permalink: /posts/2012/08/blog-post-1/
+tags:
+ - cool posts
+ - category1
+ - category2
+---
+
+This is a sample blog post. Lorem ipsum I can't remember the rest of lorem ipsum and don't have an internet connection right now. Testing testing testing this blog post. Blog posts are cool.
+
+Headings are cool
+======
+
+You can have many headings
+======
+
+Aren't headings cool?
+------
\ No newline at end of file
diff --git a/_posts/2013-08-14-blog-post-2.md b/_posts/2013-08-14-blog-post-2.md
new file mode 100644
index 0000000..f5c960d
--- /dev/null
+++ b/_posts/2013-08-14-blog-post-2.md
@@ -0,0 +1,20 @@
+---
+title: 'Blog Post number 2'
+date: 2013-08-14
+permalink: /posts/2013/08/blog-post-2/
+tags:
+ - cool posts
+ - category1
+ - category2
+---
+
+This is a sample blog post. Lorem ipsum I can't remember the rest of lorem ipsum and don't have an internet connection right now. Testing testing testing this blog post. Blog posts are cool.
+
+Headings are cool
+======
+
+You can have many headings
+======
+
+Aren't headings cool?
+------
\ No newline at end of file
diff --git a/_posts/2014-08-14-blog-post-3.md b/_posts/2014-08-14-blog-post-3.md
new file mode 100644
index 0000000..83175c7
--- /dev/null
+++ b/_posts/2014-08-14-blog-post-3.md
@@ -0,0 +1,20 @@
+---
+title: 'Blog Post number 3'
+date: 2014-08-14
+permalink: /posts/2014/08/blog-post-3/
+tags:
+ - cool posts
+ - category1
+ - category2
+---
+
+This is a sample blog post. Lorem ipsum I can't remember the rest of lorem ipsum and don't have an internet connection right now. Testing testing testing this blog post. Blog posts are cool.
+
+Headings are cool
+======
+
+You can have many headings
+======
+
+Aren't headings cool?
+------
\ No newline at end of file
diff --git a/_posts/2015-08-14-blog-post-4.md b/_posts/2015-08-14-blog-post-4.md
new file mode 100644
index 0000000..9e882e6
--- /dev/null
+++ b/_posts/2015-08-14-blog-post-4.md
@@ -0,0 +1,20 @@
+---
+title: 'Blog Post number 4'
+date: 2015-08-14
+permalink: /posts/2012/08/blog-post-4/
+tags:
+ - cool posts
+ - category1
+ - category2
+---
+
+This is a sample blog post. Lorem ipsum I can't remember the rest of lorem ipsum and don't have an internet connection right now. Testing testing testing this blog post. Blog posts are cool.
+
+Headings are cool
+======
+
+You can have many headings
+======
+
+Aren't headings cool?
+------
\ No newline at end of file
diff --git a/_posts/2199-01-01-future-post.md b/_posts/2199-01-01-future-post.md
new file mode 100644
index 0000000..e96eb5e
--- /dev/null
+++ b/_posts/2199-01-01-future-post.md
@@ -0,0 +1,11 @@
+---
+title: 'Future Blog Post'
+date: 2199-01-01
+permalink: /posts/2012/08/blog-post-4/
+tags:
+ - cool posts
+ - category1
+ - category2
+---
+
+This post will show up by default. To disable scheduling of future posts, edit `config.yml` and set `future: false`.
diff --git a/_publications/01-2023-babd.md b/_publications/01-2023-babd.md
new file mode 100644
index 0000000..5063697
--- /dev/null
+++ b/_publications/01-2023-babd.md
@@ -0,0 +1,12 @@
+---
+title: "BABD: A Bitcoin Address Behavior Dataset for Pattern Analysis"
+collection: publications
+permalink: /publication/01-2023-babd
+# excerpt: 'This paper is about the number 1. The number 2 is left for future work.'
+date: 2023-12-28
+venue: 'IEEE Transactions on Information Forensics and Security'
+paperurl: 'https://ieeexplore.ieee.org/document/10375557/'
+citation: '"BABD: A Bitcoin Address Behavior Dataset for Pattern Analysis," in IEEE Transactions on Information Forensics and Security, vol. 19, pp. 2171-2185, 2024, doi: 10.1109/TIFS.2023.3347894.'
+---
+
+Cryptocurrencies have dramatically increased adoption in mainstream applications in various fields such as financial and online services, however, there are still a few amounts of cryptocurrency transactions that involve illicit or criminal activities. It is essential to identify and monitor addresses associated with illegal behaviors to ensure the security and stability of the cryptocurrency ecosystem. In this paper, we propose a framework to build a dataset comprising Bitcoin transactions between 12 July 2019 and 26 May 2021. This dataset (hereafter referred to as BABD-13) contains 13 types of Bitcoin addresses, 5 categories of indicators with 148 features, and 544,462 labeled data, which is the largest labeled Bitcoin address behavior dataset publicly available to our knowledge. We also propose a novel and efficient subgraph generation algorithm called BTC-SubGen to extract a k -hop subgraph from the entire Bitcoin transaction graph constructed by the directed heterogeneous multigraph starting from a specific Bitcoin address node. We then conduct 13-class classification tasks on BABD-13 by five machine learning models namely k -nearest neighbors algorithm, decision tree, random forest, multilayer perceptron, and XGBoost, the results show that the accuracy rates are between 93.24% and 97.13%. In addition, we study the relations and importance of the proposed features and analyze how they affect the effect of machine learning models. Finally, we conduct a preliminary analysis of the behavior patterns of different types of Bitcoin addresses using concrete features and find several meaningful and explainable modes.
\ No newline at end of file
diff --git a/_publications/02-2024-matd3.md b/_publications/02-2024-matd3.md
new file mode 100644
index 0000000..a0138cc
--- /dev/null
+++ b/_publications/02-2024-matd3.md
@@ -0,0 +1,12 @@
+---
+title: "Multi-Agent Reinforcement Learning for Cooperative Task Offloading in Internet-of-Vehicles"
+collection: publications
+permalink: /publication/02-2024-matd3
+# excerpt: 'This paper is about the number 1. The number 2 is left for future work.'
+date: 2024-07-03
+venue: 'IEEE Wireless Communications and Networking Conference (WCNC)'
+paperurl: 'https://ieeexplore.ieee.org/document/10571109'
+citation: '"Multi-Agent Reinforcement Learning for Cooperative Task Offloading in Internet-of-Vehicles," 2024 IEEE Wireless Communications and Networking Conference (WCNC), Dubai, United Arab Emirates, 2024, pp. 1-6, doi: 10.1109/WCNC57260.2024.10571109.'
+---
+
+The Internet of Vehicles (IoV) has witnessed a significant growth in the number of participants. This rapid expansion has increased demands for computing resources and quality of service (QoS), posing challenges for mobile edge computing (MEC) in the IoV domain. Efficiently allocating computing power to meet these service demands has become a crucial concern. Therefore, joint optimization of offloading decisions and power allocation is required to achieve the tradeoff between task latency and energy consumption. To address the above challenge, we propose a multi-agent reinforcement learning (MARL) method called multi-agent twin delayed deep deterministic policy gradient (MA-TD3) in this paper. Compared to its predecessor, multi-agent deep deterministic policy gradient (MADDPG), this algorithm improves performance and execution speed. It solves the slow convergence problem caused by Q-value overestimation and reduces the computational cost. The experimental results illustrate that the proposed algorithm reaches an observable performance improvement.
\ No newline at end of file
diff --git a/_sass/_animations.scss b/_sass/_animations.scss
new file mode 100644
index 0000000..25ef77f
--- /dev/null
+++ b/_sass/_animations.scss
@@ -0,0 +1,21 @@
+/* ==========================================================================
+ ANIMATIONS
+ ========================================================================== */
+
+@-webkit-keyframes intro {
+ 0% {
+ opacity: 0;
+ }
+ 100% {
+ opacity: 1;
+ }
+}
+
+@keyframes intro {
+ 0% {
+ opacity: 0;
+ }
+ 100% {
+ opacity: 1;
+ }
+}
\ No newline at end of file
diff --git a/_sass/_archive.scss b/_sass/_archive.scss
new file mode 100644
index 0000000..e978e72
--- /dev/null
+++ b/_sass/_archive.scss
@@ -0,0 +1,245 @@
+/* ==========================================================================
+ ARCHIVE
+ ========================================================================== */
+
+.archive {
+ margin-bottom: 2em;
+
+ @include breakpoint($medium) {
+ @include span(12 of 12);
+ }
+
+ @include breakpoint($large) {
+ @include span(10 of 12 last);
+ @include prefix(0.5 of 12);
+ }
+
+ a {
+ text-decoration: underline;
+
+ &:hover {
+ text-decoration: underline;
+
+ img {
+ box-shadow: 0 0 10px rgba(#000, 0.25);
+ }
+ }
+ }
+}
+
+.archive__subtitle {
+ margin: 1.414em 0 0;
+ padding-bottom: 0.5em;
+ font-size: $type-size-5;
+ color: mix(#fff, $gray, 25%);
+ border-bottom: 1px solid $border-color;
+
+ + .list__item .archive__item-title {
+ margin-top: 0.5em;
+ }
+}
+
+.archive__item-title {
+ margin-bottom: 0.25em;
+ font-family: $sans-serif-narrow;
+
+ a + a {
+ opacity: 0.5;
+ }
+}
+
+/* remove border*/
+.page__content {
+
+ .archive__item-title {
+ margin-top: 1em;
+ border-bottom: none;
+ }
+}
+
+.archive__item-excerpt {
+ margin-top: 0;
+ font-size: $type-size-6;
+
+ & + p {
+ text-indent: 0;
+ }
+}
+
+.archive__item-teaser {
+ border-radius: $border-radius;
+ overflow: hidden;
+ img {
+ width: 100%;
+ }
+}
+
+.archive__item:hover {
+ .archive__item-teaser {
+ box-shadow: 0 0 10px rgba(#000, 0.25);
+ }
+
+ .archive__item-title {
+ text-decoration: underline;
+ }
+}
+
+
+/*
+ List view
+ ========================================================================== */
+
+.list__item {
+ @include breakpoint($medium) {
+ padding-right: $right-sidebar-width-narrow;
+ }
+
+ @include breakpoint($large) {
+ padding-right: $right-sidebar-width;
+ }
+
+ @include breakpoint($x-large) {
+ padding-right: $right-sidebar-width-wide;
+ }
+
+ .page__meta {
+ margin: 0 0 4px;
+ }
+}
+
+
+/*
+ Grid view
+ ========================================================================== */
+
+.grid__item {
+ margin-bottom: 2em;
+
+ .page__meta {
+ margin: 0 0 4px;
+ }
+
+ .archive__item-title {
+ margin-top: 0.5em;
+ font-size: $type-size-5;
+ }
+
+ .archive__item-excerpt {
+ display: none;
+ }
+
+ @include breakpoint($small) {
+ @include gallery(5 of 10);
+ .archive__item-teaser {
+ max-height: 200px;
+ }
+ }
+
+ @include breakpoint($medium) {
+ margin-left: 0; /* reset before mixin does its thing*/
+ margin-right: 0; /* reset before mixin does its thing*/
+ @include gallery(2.5 of 10);
+
+ .archive__item-teaser {
+ max-height: 120px;
+ }
+
+ .archive__item-excerpt {
+ display: block;
+ font-size: $type-size-6;
+ }
+ }
+}
+
+
+/*
+ Features
+ ========================================================================== */
+
+.feature__wrapper {
+ @include clearfix();
+ margin-bottom: 2em;
+ border-bottom: 1px solid $border-color;
+}
+
+.feature__item {
+ margin-bottom: 2em;
+ font-size: 1.25rem;
+
+ @include breakpoint($small) {
+ margin-bottom: 0;
+ @include gallery(4 of 12);
+
+ .feature__item-teaser {
+ max-height: 200px;
+ overflow: hidden;
+ }
+ }
+
+ &--left {
+ @include full();
+ font-size: 1.25rem;
+
+ .archive__item-teaser {
+ margin-bottom: 2em;
+ }
+
+ @include breakpoint($small) {
+ .archive__item-teaser {
+ @include span(5 of 12);
+ }
+
+ .archive__item-body {
+ @include span(7 of 12 last);
+ @include prefix(0.5 of 12);
+ @include suffix(1 of 12);
+ }
+ }
+ }
+
+ &--right {
+ @include full();
+ font-size: 1.25rem;
+
+ .archive__item-teaser {
+ margin-bottom: 2em;
+ }
+
+ @include breakpoint($small) {
+ text-align: right;
+
+ .archive__item-teaser {
+ @include span(5 of 12 rtl);
+ }
+
+ .archive__item-body {
+ @include span(7 of 12 last rtl);
+ @include prefix(0.5 of 12);
+ @include suffix(1 of 12);
+ }
+ }
+ }
+
+ &--center {
+ @include full();
+ font-size: 1.25rem;
+
+ .archive__item-teaser {
+ margin-bottom: 2em;
+ }
+
+ @include breakpoint($small) {
+ text-align: center;
+
+ .archive__item-teaser {
+ margin: 0 auto;
+ width: span(5 of 12);
+ }
+
+ .archive__item-body {
+ margin: 0 auto;
+ width: span(7 of 12);
+ }
+ }
+ }
+}
diff --git a/_sass/_base.scss b/_sass/_base.scss
new file mode 100644
index 0000000..ef4015e
--- /dev/null
+++ b/_sass/_base.scss
@@ -0,0 +1,315 @@
+/* ==========================================================================
+ BASE ELEMENTS
+ ========================================================================== */
+html {
+ /* sticky footer fix */
+ position: relative;
+ min-height: 100%;
+}
+
+body {
+ margin: 0;
+ padding: 0;
+ padding-bottom: 9em;
+ color: $text-color;
+ font-family: $global-font-family;
+ line-height: 1.5;
+
+ &.overflow--hidden {
+ /* when primary navigation is visible, the content in the background won't scroll */
+ overflow: hidden;
+ }
+}
+
+h1, h2, h3, h4, h5, h6 {
+ margin: 2em 0 0.5em;
+ line-height: 1.2;
+ font-family: $header-font-family;
+ font-weight: bold;
+}
+
+h1 {
+ margin-top: 0;
+ font-size: $type-size-3;
+}
+
+h2 {
+ font-size: $type-size-4;
+}
+
+h3 {
+ font-size: $type-size-5;
+}
+
+h4 {
+ font-size: $type-size-6;
+}
+
+h5 {
+ font-size: $type-size-6;
+}
+
+h6 {
+ font-size: $type-size-6;
+}
+
+small, .small {
+ font-size: $type-size-6;
+}
+
+p {
+ margin-bottom: 1.3em;
+}
+
+u,
+ins {
+ text-decoration: none;
+ border-bottom: 1px solid $text-color;
+ a {
+ color: inherit;
+ }
+}
+
+del a {
+ color: inherit;
+}
+
+/* reduce orphans and widows when printing */
+
+p, pre, blockquote, ul, ol, dl, figure, table, fieldset {
+ orphans: 3;
+ widows: 3;
+}
+
+/* abbreviations */
+
+abbr[title],
+abbr[data-original-title] {
+ text-decoration: none;
+ cursor: help;
+ border-bottom: 1px dotted $text-color;
+}
+
+/* blockquotes */
+
+blockquote {
+ margin: 2em 1em 2em 0;
+ padding-left: 1em;
+ padding-right: 1em;
+ font-style: italic;
+ border-left: 0.25em solid $primary-color;
+
+ cite {
+ font-style: italic;
+
+ &:before {
+ content: "\2014";
+ padding-right: 5px;
+ }
+ }
+}
+
+/* links */
+
+a {
+ &:focus {
+ @extend %tab-focus;
+ }
+
+ &:hover,
+ &:active {
+ outline: 0;
+ }
+}
+
+/* code */
+
+tt, code, kbd, samp, pre {
+ font-family: $monospace;
+}
+
+pre {
+ overflow-x: auto; /* add scrollbars to wide code blocks*/
+}
+
+p > code,
+a > code,
+li > code,
+figcaption > code,
+td > code {
+ padding-top: 0.1rem;
+ padding-bottom: 0.1rem;
+ font-size: $type-size-6;
+ background: $code-background-color;
+ border: 1px solid $lighter-gray;
+ border-radius: $border-radius;
+ box-shadow: $box-shadow;
+
+ &:before, &:after {
+ letter-spacing: -0.2em;
+ content: "\00a0"; /* non-breaking space*/
+ }
+}
+
+/* horizontal rule */
+
+hr {
+ display: block;
+ margin: 1em 0;
+ border: 0;
+ border-top: 1px solid $border-color;
+}
+
+/* lists */
+
+ul li,
+ol li {
+ margin-bottom: 0.5em;
+}
+
+li ul,
+li ol {
+ margin-top: 0.5em;
+}
+
+/*
+ Media and embeds
+ ========================================================================== */
+
+/* Figures and images */
+
+figure {
+ display: -webkit-box;
+ display: flex;
+ -webkit-box-pack: justify;
+ justify-content: space-between;
+ -webkit-box-align: start;
+ align-items: flex-start;
+ flex-wrap: wrap;
+ margin: 2em 0;
+
+ img,
+ iframe,
+ .fluid-width-video-wrapper {
+ margin-bottom: 1em;
+ }
+
+ img {
+ width: 100%;
+ border-radius: $border-radius;
+ -webkit-transition: $global-transition;
+ transition: $global-transition;
+ }
+
+ > a {
+ display: block;
+ }
+
+ &.half {
+ > a,
+ > img {
+ @include breakpoint($small) {
+ width: calc(50% - 0.5em);
+ }
+ }
+
+ figcaption {
+ width: 100%;
+ }
+ }
+
+ &.third {
+ > a,
+ > img {
+ @include breakpoint($small) {
+ width: calc(33.3333% - 0.5em);
+ }
+ }
+
+ figcaption {
+ width: 100%;
+ }
+ }
+}
+
+/* Figure captions */
+
+figcaption {
+ margin-bottom: 0.5em;
+ color: mix(#fff, $text-color, 25%);
+ font-family: $caption-font-family;
+ font-size: $type-size-6;
+
+ a {
+ color: inherit;
+ text-decoration: none;
+ border-bottom: 1px solid $light-gray;
+ -webkit-transition: $global-transition;
+ transition: $global-transition;
+
+ &:hover {
+ color: #000;
+ border-bottom-color: #000;
+ }
+ }
+}
+
+
+/* Fix IE9 SVG bug */
+
+svg:not(:root) {
+ overflow: hidden;
+}
+
+
+/*
+ Navigation lists
+ ========================================================================== */
+
+/**
+ * Removes margins, padding, and bullet points from navigation lists
+ *
+ * Example usage:
+ *
+ *
+ *
+ */
+
+nav {
+ ul {
+ margin: 0;
+ padding: 0;
+ }
+
+ li {
+ list-style: none;
+ }
+
+ a {
+ text-decoration: none;
+ }
+
+ /* override white-space for nested lists */
+ ul li,
+ ol li {
+ margin-bottom: 0;
+ }
+
+ li ul,
+ li ol {
+ margin-top: 0;
+ }
+}
+
+/*
+ Global animation transition
+ ========================================================================== */
+
+b, i, strong, em, blockquote, p, q, span, figure, img, h1, h2, header, input, a, tr, td, form button, input[type="submit"], .btn, .highlight, .archive__item-teaser {
+ -webkit-transition: $global-transition;
+ transition: $global-transition;
+}
diff --git a/_sass/_buttons.scss b/_sass/_buttons.scss
new file mode 100644
index 0000000..d6cf90e
--- /dev/null
+++ b/_sass/_buttons.scss
@@ -0,0 +1,153 @@
+/* ==========================================================================
+ BUTTONS
+ ========================================================================== */
+
+/*
+ Default button
+ ========================================================================== */
+
+.btn {
+ /* default button */
+ display: inline-block;
+ margin-bottom: 0.25em;
+ padding: 0.5em 1em;
+ color: #fff !important;
+ font-family: $sans-serif;
+ font-size: $type-size-6;
+ font-weight: bold;
+ text-align: center;
+ text-decoration: none;
+ background-color: $primary-color;
+ border: 0 !important;
+ border-radius: $border-radius;
+ cursor: pointer;
+
+ &:hover {
+ background-color: mix(white, #000, 20%);
+ }
+
+ .icon {
+ margin-right: 0.5em;
+ }
+
+ .icon + .hidden {
+ margin-left: -0.5em; /* override for hidden text*/
+ }
+
+ /* fills width of parent container */
+
+ &--block {
+ display: block;
+ width: 100%;
+
+ + .btn--block {
+ margin-top: 0.25em;
+ }
+ }
+
+ /* for dark backgrounds */
+
+ &--inverse {
+ color: $gray !important;
+ border: 1px solid $light-gray !important; /* override*/
+ background-color: #fff;
+
+ &:hover {
+ color: #fff !important;
+ border-color: $gray;
+ }
+ }
+
+ /* light outline */
+
+ &--light-outline {
+ border: 1px solid #fff !important; /* override*/
+ background-color: transparent;
+ }
+
+ /* information */
+
+ &--info {
+ background-color: $info-color;
+
+ &:hover {
+ background-color: mix(#000, $info-color, 20%);
+ }
+ }
+
+ /* warning */
+
+ &--warning {
+ background-color: $warning-color;
+
+ &:hover {
+ background-color: mix(#000, $warning-color, 20%);
+ }
+ }
+
+ /* success */
+
+ &--success {
+ background-color: $success-color;
+
+ &:hover {
+ background-color: mix(#000, $success-color, 20%);
+ }
+ }
+
+ /* danger */
+
+ &--danger {
+ background-color: $danger-color;
+
+ &:hover {
+ background-color: mix(#000, $danger-color, 20%);
+ }
+ }
+
+ /* disabled */
+
+ &--disabled {
+ pointer-events: none;
+ cursor: not-allowed;
+ filter: alpha(opacity=65);
+ box-shadow: none;
+ opacity: 0.65;
+ }
+
+ /* social buttons */
+
+ $social:
+ (facebook, $facebook-color),
+ (twitter, $twitter-color),
+ (google-plus, $google-plus-color),
+ (linkedin, $linkedin-color);
+
+ @each $socialnetwork, $color in $social {
+ &--#{$socialnetwork} {
+ background-color: $color;
+
+ &:hover {
+ background-color: mix(#000, $color, 20%);
+ }
+ }
+ }
+
+ /* extra large button */
+
+ &--x-large {
+ font-size: $type-size-4;
+ }
+
+ /* large button */
+
+ &--large {
+ font-size: $type-size-5;
+ }
+
+ /* small button */
+
+ &--small {
+ font-size: $type-size-7;
+ }
+}
\ No newline at end of file
diff --git a/_sass/_footer.scss b/_sass/_footer.scss
new file mode 100644
index 0000000..e7b1843
--- /dev/null
+++ b/_sass/_footer.scss
@@ -0,0 +1,92 @@
+/* ==========================================================================
+ FOOTER
+ ========================================================================== */
+
+.page__footer {
+ @include clearfix;
+ float: left;
+ margin-left: 0;
+ margin-right: 0;
+ width: 100%;
+ clear: both;
+ /* sticky footer fix start */
+ position: absolute;
+ bottom: 0em;
+ height: auto;
+ /* sticky footer fix end */
+ margin-top: 3em;
+ color: mix(#fff, $gray, 25%);
+ -webkit-animation: intro 0.3s both;
+ animation: intro 0.3s both;
+ -webkit-animation-delay: 0.45s;
+ animation-delay: 0.45s;
+ background-color: $lighter-gray;
+ border-top: 1px solid $light-gray;
+
+ footer {
+ @include clearfix;
+ margin-left: auto;
+ margin-right: auto;
+ margin-top: 2em;
+ max-width: 100%;
+ padding: 0 1em 2em;
+
+ @include breakpoint($x-large) {
+ max-width: $x-large;
+ }
+ }
+
+ a {
+ color: inherit;
+ text-decoration: none;
+
+ &:hover {
+ text-decoration: underline;
+ }
+ }
+
+ .fas,
+ .fab,
+ .far,
+ .fal {
+ color: mix(#fff, $gray, 25%);
+ }
+}
+
+.page__footer-copyright {
+ font-family: $global-font-family;
+ font-size: $type-size-7;
+}
+
+.page__footer-follow {
+ ul {
+ margin: 0;
+ padding: 0;
+ list-style-type: none;
+ }
+
+ li {
+ display: inline-block;
+ padding-top: 5px;
+ padding-bottom: 5px;
+ font-family: $sans-serif-narrow;
+ font-size: $type-size-6;
+ text-transform: uppercase;
+ }
+
+ li + li:before {
+ content: "";
+ padding-right: 5px;
+ }
+
+ a {
+ padding-right: 10px;
+ font-weight: bold;
+ }
+
+ .social-icons {
+ a {
+ white-space: nowrap;
+ }
+ }
+}
diff --git a/_sass/_forms.scss b/_sass/_forms.scss
new file mode 100644
index 0000000..a1f0f14
--- /dev/null
+++ b/_sass/_forms.scss
@@ -0,0 +1,391 @@
+/* ==========================================================================
+ Forms
+ ========================================================================== */
+
+form {
+ margin: 0 0 5px 0;
+
+ fieldset {
+ margin-bottom: 5px;
+ padding: 0;
+ border-width: 0;
+ }
+
+ legend {
+ display: block;
+ width: 100%;
+ margin-bottom: 5px * 2;
+ *margin-left: -7px;
+ padding: 0;
+ color: $text-color;
+ border: 0;
+ border-bottom: 1px solid mix(#fff, #000, 80%);
+ white-space: normal;
+ }
+
+ p {
+ margin-bottom: 5px / 2;
+ }
+
+ ul {
+ list-style-type: none;
+ margin: 0 0 5px 0;
+ padding: 0;
+ }
+
+ br {
+ display: none;
+ }
+}
+
+label,
+input,
+button,
+select,
+textarea {
+ vertical-align: baseline;
+ *vertical-align: middle;
+}
+
+input,
+button,
+select,
+textarea {
+ box-sizing: border-box;
+ font-family: $sans-serif;
+}
+
+label {
+ display: block;
+ margin-bottom: 0.25em;
+ color: $text-color;
+ cursor: pointer;
+
+ small {
+ font-size: $type-size-6;
+ }
+
+ input,
+ textarea,
+ select {
+ display: block;
+ }
+}
+
+input,
+textarea,
+select {
+ display: inline-block;
+ width: 100%;
+ padding: 0.25em;
+ margin-bottom: 0.5em;
+ color: $text-color;
+ background-color: #fff;
+ border: 1px solid mix(#fff, #000, 80%);
+ border-radius: $border-radius;
+ box-shadow: $box-shadow;
+
+ &:hover {
+ border-color: mix(#fff, $primary-color, 50%);
+ }
+}
+
+.input-mini {
+ width: 60px;
+}
+
+.input-small {
+ width: 90px;
+}
+
+input[type="image"],
+input[type="checkbox"],
+input[type="radio"] {
+ width: auto;
+ height: auto;
+ padding: 0;
+ margin: 3px 0;
+ *margin-top: 0;
+ line-height: normal;
+ cursor: pointer;
+ border-radius: 0;
+ border: 0 \9;
+}
+
+input[type="checkbox"],
+input[type="radio"] {
+ box-sizing: border-box;
+ padding: 0;
+ *width: 13px;
+ *height: 13px;
+}
+
+input[type="image"] {
+ border: 0;
+ box-shadow: none;
+}
+
+input[type="file"] {
+ width: auto;
+ padding: initial;
+ line-height: initial;
+ border: initial;
+ background-color: transparent;
+ background-color: initial;
+ box-shadow: none;
+}
+
+input[type="button"],
+input[type="reset"],
+input[type="submit"] {
+ width: auto;
+ height: auto;
+ cursor: pointer;
+ *overflow: visible;
+}
+
+select,
+input[type="file"] {
+ *margin-top: 4px;
+}
+
+select {
+ width: auto;
+ background-color: #fff;
+}
+
+select[multiple],
+select[size] {
+ height: auto;
+}
+
+textarea {
+ resize: vertical;
+ height: auto;
+ overflow: auto;
+ vertical-align: top;
+}
+
+input[type="hidden"] {
+ display: none;
+}
+
+.form {
+ position: relative;
+}
+
+.radio,
+.checkbox {
+ padding-left: 18px;
+ font-weight: normal;
+}
+
+.radio input[type="radio"],
+.checkbox input[type="checkbox"] {
+ float: left;
+ margin-left: -18px;
+}
+
+.radio.inline,
+.checkbox.inline {
+ display: inline-block;
+ padding-top: 5px;
+ margin-bottom: 0;
+ vertical-align: middle;
+}
+
+.radio.inline + .radio.inline,
+.checkbox.inline + .checkbox.inline {
+ margin-left: 10px;
+}
+
+
+/*
+ Disabled state
+ ========================================================================== */
+
+input[disabled],
+select[disabled],
+textarea[disabled],
+input[readonly],
+select[readonly],
+textarea[readonly] {
+ opacity: 0.5;
+ cursor: not-allowed;
+}
+
+
+/*
+ Focus & active state
+ ========================================================================== */
+
+input:focus,
+textarea:focus {
+ border-color: $primary-color;
+ outline: 0;
+ outline: thin dotted \9;
+}
+
+input[type="file"]:focus,
+input[type="radio"]:focus,
+input[type="checkbox"]:focus,
+select:focus {
+ box-shadow: none;
+}
+
+
+/*
+ Help text
+ ========================================================================== */
+
+.help-block,
+.help-inline {
+ color: $info-color;
+}
+
+.help-block {
+ display: block;
+ margin-bottom: 1em;
+ line-height: 1em;
+}
+
+.help-inline {
+ display: inline-block;
+ vertical-align: middle;
+ padding-left: 5px;
+}
+
+
+/*
+ .form-inline
+ ========================================================================== */
+
+.form-inline input,
+.form-inline textarea,
+.form-inline select {
+ display: inline-block;
+ margin-bottom: 0;
+}
+
+.form-inline label {
+ display: inline-block;
+}
+
+.form-inline .radio,
+.form-inline .checkbox,
+.form-inline .radio {
+ padding-left: 0;
+ margin-bottom: 0;
+ vertical-align: middle;
+}
+
+.form-inline .radio input[type="radio"],
+.form-inline .checkbox input[type="checkbox"] {
+ float: left;
+ margin-left: 0;
+ margin-right: 3px; }
+
+
+/*
+ .form-search
+ ========================================================================== */
+
+.form-search input,
+.form-search textarea,
+.form-search select {
+ display: inline-block;
+ margin-bottom: 0;
+}
+
+.form-search .search-query {
+ padding-left: 14px;
+ padding-right: 14px;
+ margin-bottom: 0;
+ border-radius: 14px;
+}
+
+.form-search label {
+ display: inline-block;
+}
+
+.form-search .radio,
+.form-search .checkbox,
+.form-inline .radio {
+ padding-left: 0;
+ margin-bottom: 0;
+ vertical-align: middle;
+}
+
+.form-search .radio input[type="radio"],
+.form-search .checkbox input[type="checkbox"] {
+ float: left;
+ margin-left: 0;
+ margin-right: 3px;
+}
+
+
+/*
+ .form--loading
+ ========================================================================== */
+
+.form--loading:before {
+ content: '';
+}
+
+.form--loading .form__spinner {
+ display: block;
+}
+
+.form:before {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ background-color: rgba(255, 255, 255, 0.7);
+ z-index: 10;
+}
+
+.form__spinner {
+ display: none;
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ z-index: 11;
+}
+
+
+
+/*
+ Google search form
+ ========================================================================== */
+
+#goog-fixurl {
+ ul {
+ list-style: none;
+ margin-left: 0;
+ padding-left: 0;
+ li {
+ list-style-type: none;
+ }
+ }
+}
+
+#goog-wm-qt {
+ width: auto;
+ margin-right: 10px;
+ margin-bottom: 20px;
+ padding: 8px 20px;
+ display: inline-block;
+ font-size: $type-size-6;
+ background-color: #fff;
+ color: #000;
+ border-width: 2px !important;
+ border-style: solid !important;
+ border-color: lighten(#000,50);
+ border-radius: $border-radius;
+}
+
+#goog-wm-sb {
+ @extend .btn;
+}
\ No newline at end of file
diff --git a/_sass/_masthead.scss b/_sass/_masthead.scss
new file mode 100644
index 0000000..dec55cd
--- /dev/null
+++ b/_sass/_masthead.scss
@@ -0,0 +1,53 @@
+/* ==========================================================================
+ MASTHEAD
+ ========================================================================== */
+
+.masthead {
+ position: relative;
+ border-bottom: 1px solid $border-color;
+ -webkit-animation: intro 0.3s both;
+ animation: intro 0.3s both;
+ -webkit-animation-delay: 0.15s;
+ animation-delay: 0.15s;
+ z-index: 20;
+
+ &__inner-wrap {
+ @include container;
+ @include clearfix;
+ padding: 1em 1em 1em;
+ font-family: $sans-serif-narrow;
+
+ @include breakpoint($x-large) {
+ max-width: $x-large;
+ }
+
+ nav {
+ z-index: 10;
+ }
+
+ a {
+ text-decoration: none;
+ }
+ }
+}
+
+.masthead__menu {
+
+ ul {
+ margin: 0;
+ padding: 0;
+ clear: both;
+ list-style-type: none;
+ }
+}
+
+.masthead__menu-item {
+ display: block;
+ list-style-type: none;
+ white-space: nowrap;
+
+ &--lg {
+ padding-right: 2em;
+ font-weight: 700;
+ }
+}
\ No newline at end of file
diff --git a/_sass/_mixins.scss b/_sass/_mixins.scss
new file mode 100644
index 0000000..14782b1
--- /dev/null
+++ b/_sass/_mixins.scss
@@ -0,0 +1,53 @@
+/* ==========================================================================
+ MIXINS
+ ========================================================================== */
+
+%tab-focus {
+ /* Default*/
+ outline: thin dotted $warning-color;
+ /* Webkit*/
+ outline: 5px auto $warning-color;
+ outline-offset: -2px;
+}
+
+/*
+ em function
+ ========================================================================== */
+
+@function em($target, $context: $doc-font-size) {
+ @return ($target / $context) * 1em;
+}
+
+
+/*
+ Bourbon clearfix
+ ========================================================================== */
+
+/*
+ * Provides an easy way to include a clearfix for containing floats.
+ * link http://cssmojo.com/latest_new_clearfix_so_far/
+ *
+ * example scss - Usage
+ *
+ * .element {
+ * @include clearfix;
+ * }
+ *
+ * example css - CSS Output
+ *
+ * .element::after {
+ * clear: both;
+ * content: "";
+ * display: table;
+ * }
+*/
+
+@mixin clearfix {
+ clear: both;
+
+ &::after {
+ clear: both;
+ content: "";
+ display: table;
+ }
+}
\ No newline at end of file
diff --git a/_sass/_navigation.scss b/_sass/_navigation.scss
new file mode 100644
index 0000000..d96735b
--- /dev/null
+++ b/_sass/_navigation.scss
@@ -0,0 +1,432 @@
+/* ==========================================================================
+ NAVIGATION
+ ========================================================================== */
+
+/*
+ Breadcrumb navigation links
+ ========================================================================== */
+
+.breadcrumbs {
+ @include container;
+ @include clearfix;
+ margin-top: 0;
+ margin-bottom: 0;
+ padding-left: 2em;
+ padding-right: 2em;
+ font-family: $sans-serif;
+ -webkit-animation: intro 0.3s both;
+ animation: intro 0.3s both;
+ -webkit-animation-delay: 0.30s;
+ animation-delay: 0.30s;
+
+ @include breakpoint($large) {
+ padding-left: 1em;
+ padding-right: 1em;
+ }
+
+ @include breakpoint($x-large) {
+ max-width: $x-large;
+ }
+
+ ol {
+ padding: 0;
+ list-style: none;
+ font-size: $type-size-6;
+
+ @include breakpoint($large) {
+ @include span(10 of 12 last);
+ }
+
+ @include breakpoint($x-large) {
+ @include prefix(0.5 of 12);
+ }
+ }
+
+ li {
+ display: inline;
+ }
+
+ .current {
+ font-weight: bold;
+ }
+}
+
+
+/*
+ Post pagination navigation links
+ ========================================================================== */
+
+.pagination {
+ @include full();
+ @include clearfix();
+ margin-top: 1em;
+ padding-top: 1em;
+
+ ul {
+ margin: 0;
+ padding: 0;
+ list-style-type: none;
+ font-family: $sans-serif;
+ }
+
+ li {
+ display: block;
+ float: left;
+ margin-left: -1px;
+
+ a {
+ margin-bottom: 0.25em;
+ padding: 0.5em 1em;
+ font-family: $sans-serif;
+ font-size: 14px;
+ font-weight: bold;
+ line-height: 1.5;
+ text-align: center;
+ text-decoration: none;
+ color: mix(#fff, $gray, 25%);
+ border: 1px solid $light-gray;
+ border-radius: 0;
+
+ &:hover {
+ color: $link-color-hover;
+ }
+
+ &.current {
+ color: #fff;
+ background: $primary-color;
+ }
+
+ &.disabled {
+ color: mix(#fff, $gray, 75%);
+ pointer-events: none;
+ cursor: not-allowed;
+ }
+ }
+
+ &:first-child {
+ margin-left: 0;
+
+ a {
+ border-top-left-radius: $border-radius;
+ border-bottom-left-radius: $border-radius;
+ }
+ }
+
+ &:last-child {
+ a {
+ border-top-right-radius: $border-radius;
+ border-bottom-right-radius: $border-radius;
+ }
+ }
+ }
+
+ /* next/previous buttons */
+ &--pager {
+ display: block;
+ padding: 1em 2em;
+ float: left;
+ width: 50%;
+ font-family: $sans-serif;
+ font-size: $type-size-5;
+ font-weight: bold;
+ text-align: center;
+ text-decoration: none;
+ color: mix(#fff, $gray, 50%);
+ border: 1px solid $light-gray;
+ border-radius: $border-radius;
+
+ &:hover {
+ color: $link-color-hover;
+ }
+
+ &:first-child {
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0;
+ }
+
+ &:last-child {
+ margin-left: -1px;
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0;
+ }
+
+ &.disabled {
+ color: mix(#fff, $gray, 75%);
+ pointer-events: none;
+ cursor: not-allowed;
+ }
+ }
+}
+
+.page__content + .pagination,
+.page__meta + .pagination,
+.page__share + .pagination,
+.page__comments + .pagination {
+ margin-top: 2em;
+ padding-top: 2em;
+ border-top: 1px solid $border-color;
+}
+
+
+/*
+ Priority plus navigation
+ ========================================================================== */
+
+.greedy-nav {
+ position: relative;
+ min-width: 250px;
+ background: $background-color;
+
+ a {
+ display: block;
+ margin: 0 1rem;
+ padding: 0.5rem 0;
+ color: $masthead-link-color;
+ text-decoration: none;
+
+ &:hover {
+ color: $masthead-link-color-hover;
+ }
+ }
+
+ button {
+ position: absolute;
+ height: 100%;
+ right: 0;
+ padding: 0 0.5rem;
+ border: 0;
+ outline: none;
+ background-color: $primary-color;
+ color: #fff;
+ cursor: pointer;
+ }
+
+ .visible-links {
+ display: table;
+
+ li {
+ display: table-cell;
+ vertical-align: middle;
+
+ &:first-child {
+ font-weight: bold;
+
+ a {
+ margin-left: 0;
+ }
+ }
+
+ &:last-child {
+ a {
+ margin-right: 0;
+ }
+ }
+ }
+
+ a {
+ position: relative;
+
+ &:before {
+ content: "";
+ position: absolute;
+ left: 0;
+ bottom: 0;
+ height: 4px;
+ background: mix(#fff, $primary-color, 50%);
+ width: 100%;
+ -webkit-transition: $global-transition;
+ transition: $global-transition;
+ -webkit-transform: scaleX(0);
+ -ms-transform: scaleX(0);
+ transform: scaleX(0); /* hide*/
+ }
+
+ &:hover:before {
+ -webkit-transform: scaleX(1);
+ -ms-transform: scaleX(1);
+ transform: scaleX(1); /* reveal*/
+ }
+ }
+ }
+
+ .hidden-links {
+ position: absolute;
+ top: 100%;
+ right: 0;
+ margin-top: 15px;
+ padding: 5px;
+ border: 1px solid $border-color;
+ border-radius: $border-radius;
+ background: #fff;
+ box-shadow: 0 0 10px rgba(#000, 0.25);
+
+ a {
+ margin: 0;
+ padding: 10px 20px;
+ font-size: $type-size-5;
+
+ &:hover {
+ color: $masthead-link-color-hover;
+ background: mix(#fff, $primary-color, 75%);
+ }
+ }
+
+ &:before {
+ content: "";
+ position: absolute;
+ top: -11px;
+ right: 10px;
+ width: 0;
+ border-style: solid;
+ border-width: 0 10px 10px;
+ border-color: $border-color transparent;
+ display: block;
+ z-index: 0;
+ }
+
+ &:after {
+ content: "";
+ position: absolute;
+ top: -10px;
+ right: 10px;
+ width: 0;
+ border-style: solid;
+ border-width: 0 10px 10px;
+ border-color: #fff transparent;
+ display: block;
+ z-index: 1;
+ }
+
+ li {
+ display: block;
+ border-bottom: 1px solid $border-color;
+
+ &:last-child {
+ border-bottom: none;
+ }
+ }
+ }
+}
+
+
+/*
+ Navigation list
+ ========================================================================== */
+
+.nav__list {
+ font-size: 1.25rem;
+
+ ul {
+ margin-bottom: 1em;
+ }
+
+ a {
+ display: block;
+ padding: 0.125em 0;
+ color: inherit;
+
+ &:hover {
+ text-decoration: underline;
+ }
+ }
+
+ .active {
+ margin-left: -0.5em;
+ padding-left: 0.5em;
+ padding-right: 0.5em;
+ color: #fff;
+ font-weight: bold;
+ background: $primary-color;
+ border-radius: $border-radius;
+
+ &:hover {
+ color: #fff;
+ }
+ }
+}
+
+.nav__title {
+ margin: 0;
+ padding: 0.5rem 1rem;
+ font-family: $sans-serif-narrow;
+ font-size: $type-size-5;
+ font-weight: bold;
+}
+
+.nav__sub-title {
+ display: block;
+ margin: 0.5rem 0;
+ padding: 0.5rem 0;
+ font-family: $sans-serif-narrow;
+ font-size: $type-size-6;
+ font-weight: bold;
+ text-transform: uppercase;
+ border-bottom: 1px solid $border-color;
+}
+
+
+/*
+ Table of contents navigation
+ ========================================================================== */
+
+.toc {
+ font-family: $sans-serif-narrow;
+ color: $gray;
+ text-transform: uppercase;
+ letter-spacing: 1px;
+ background-color: #fff;
+ border: 1px solid $border-color;
+ border-radius: $border-radius;
+ box-shadow: $box-shadow;
+
+ .nav__title {
+ color: #fff;
+ font-size: $type-size-6;
+ background: $primary-color;
+ border-top-left-radius: $border-radius;
+ border-top-right-radius: $border-radius;
+ }
+}
+
+.toc__menu {
+ margin: 0;
+ padding: 0;
+ width: 100%;
+ list-style: none;
+ font-size: 0.8rem;
+
+ a {
+ display: block;
+ padding: 0.5rem 1rem;
+ color: $gray;
+ font-size: $type-size-7;
+ font-weight: bold;
+ line-height: 1.5;
+ border-bottom: 1px solid $border-color;
+
+ &:hover {
+ color: #000;
+ background: $lighter-gray;
+ }
+ }
+
+ > li:last-child {
+ a {
+ border-bottom: none;
+ }
+ }
+
+ li ul > li a {
+ padding-left: 2rem;
+ font-weight: normal;
+ }
+
+ /* hide sub sub links on small screens*/
+ li > ul li {
+ display: none;
+
+ @include breakpoint($medium) {
+ display: block;
+ }
+ }
+}
\ No newline at end of file
diff --git a/_sass/_notices.scss b/_sass/_notices.scss
new file mode 100644
index 0000000..26afa31
--- /dev/null
+++ b/_sass/_notices.scss
@@ -0,0 +1,99 @@
+/* ==========================================================================
+ NOTICE TEXT BLOCKS
+ ========================================================================== */
+
+/**
+ * Default Kramdown usage (no indents!):
+ *
+ * #### Headline for the Notice
+ * Text for the notice
+ *
+ */
+
+@mixin notice($notice-color) {
+ margin: 2em 0 !important; /* override*/
+ padding: 1em;
+ font-family: $global-font-family;
+ font-size: $type-size-6 !important;
+ text-indent: initial; /* override*/
+ background-color: mix(#fff, $notice-color, 90%);
+ border-radius: $border-radius;
+ box-shadow: 0 1px 1px rgba($notice-color, 0.25);
+
+ h4 {
+ margin-top: 0 !important; /* override*/
+ margin-bottom: 0.75em;
+ }
+
+ @at-root .page__content #{&} h4 {
+ /* using at-root to override .page-content h4 font size*/
+ margin-bottom: 0;
+ font-size: 1em;
+ }
+
+ p {
+ &:last-child {
+ margin-bottom: 0 !important; /* override*/
+ }
+ }
+
+ h4 + p {
+ /* remove space above paragraphs that appear directly after notice headline*/
+ margin-top: 0;
+ padding-top: 0;
+ }
+
+ a {
+ color: $notice-color;
+
+ &:hover {
+ color: mix(#000, $notice-color, 40%);
+ }
+ }
+
+ code {
+ background-color: mix(#fff, $notice-color, 95%)
+ }
+
+ ul {
+ &:last-child {
+ margin-bottom: 0; /* override*/
+ }
+ }
+}
+
+/* Default notice */
+
+.notice {
+ @include notice($light-gray);
+}
+
+/* Primary notice */
+
+.notice--primary {
+ @include notice($primary-color);
+}
+
+/* Info notice */
+
+.notice--info {
+ @include notice($info-color);
+}
+
+/* Warning notice */
+
+.notice--warning {
+ @include notice($warning-color);
+}
+
+/* Success notice */
+
+.notice--success {
+ @include notice($success-color);
+}
+
+/* Danger notice */
+
+.notice--danger {
+ @include notice($danger-color);
+}
\ No newline at end of file
diff --git a/_sass/_page.scss b/_sass/_page.scss
new file mode 100644
index 0000000..b962a9d
--- /dev/null
+++ b/_sass/_page.scss
@@ -0,0 +1,401 @@
+/* ==========================================================================
+ SINGLE PAGE/POST
+ ========================================================================== */
+
+#main {
+ @include container;
+ @include clearfix;
+ margin-top: 2em;
+ padding-left: 1em;
+ padding-right: 1em;
+ animation: intro 0.3s both;
+ animation-delay: 0.35s;
+
+ @include breakpoint($x-large) {
+ max-width: $x-large;
+ }
+}
+
+.page {
+ @include breakpoint($large) {
+ @include span(10 of 12 last);
+ @include prefix(0.5 of 12);
+ @include suffix(2 of 12);
+ }
+
+ .page__inner-wrap {
+ @include full();
+
+ .page__content,
+ .page__meta,
+ .page__share {
+ @include full();
+ }
+ }
+}
+
+.page__title {
+ margin-top: 0;
+ line-height: 1;
+
+ & + .page__meta {
+ margin-top: -0.5em;
+ }
+}
+
+.page__lead {
+ font-family: $global-font-family;
+ font-size: $type-size-4;
+}
+
+.page__content {
+
+ h2 {
+ padding-bottom: 0.5em;
+ border-bottom: 1px solid $border-color;
+ }
+
+ p, li, dl {
+ font-size: 1em;
+ }
+
+ /* paragraph indents */
+ p {
+ margin: 0 0 $indent-var;
+
+ /* sibling indentation*/
+ @if $paragraph-indent == true {
+ & + p {
+ text-indent: $indent-var;
+ margin-top: -($indent-var);
+ }
+ }
+ }
+
+ a {
+ text-decoration: underline;
+
+ &:hover {
+ text-decoration: underline;
+
+ img {
+ box-shadow: 0 0 10px rgba(#000, 0.25);
+ }
+ }
+ }
+
+ dt {
+ margin-top: 1em;
+ font-family: $sans-serif;
+ font-weight: bold;
+ }
+
+ dd {
+ margin-left: 1em;
+ font-family: $sans-serif;
+ font-size: $type-size-6;
+ }
+
+ .small {
+ font-size: $type-size-6;
+ }
+
+ /* blockquote citations */
+ blockquote + .small {
+ margin-top: -1.5em;
+ padding-left: 1.25rem;
+ }
+}
+
+.page__hero {
+ position: relative;
+ margin-bottom: 2em;
+ @include clearfix;
+ animation: intro 0.3s both;
+ animation-delay: 0.25s;
+
+ &--overlay {
+ position: relative;
+ margin-bottom: 2em;
+ padding: 3em 0;
+ @include clearfix;
+ background-size: cover;
+ background-repeat: no-repeat;
+ background-position: center;
+ animation: intro 0.3s both;
+ animation-delay: 0.25s;
+
+ a {
+ color: #fff;
+ }
+
+ .wrapper {
+ padding-left: 1em;
+ padding-right: 1em;
+
+ @include breakpoint($x-large) {
+ max-width: $x-large;
+ }
+ }
+
+ .page__title,
+ .page__meta,
+ .page__lead,
+ .btn {
+ color: #fff;
+ text-shadow: 1px 1px 4px rgba(#000, 0.5);
+ }
+
+ .page__lead {
+ max-width: $medium;
+ }
+
+ .page__title {
+ font-size: $type-size-2;
+
+ @include breakpoint($small) {
+ font-size: $type-size-1;
+ }
+ }
+ }
+}
+
+.page__hero-image {
+ width: 100%;
+ height: auto;
+ -ms-interpolation-mode: bicubic;
+}
+
+.page__hero-caption {
+ position: absolute;
+ bottom: 0;
+ right: 0;
+ margin: 0 auto;
+ padding: 2px 5px;
+ color: #fff;
+ font-family: $caption-font-family;
+ font-size: $type-size-7;
+ background: #000;
+ text-align: right;
+ z-index: 5;
+ opacity: 0.5;
+ border-radius: $border-radius 0 $border-radius 0;
+
+ @include breakpoint($large) {
+ padding: 5px 10px;
+ }
+
+ a {
+ color: #fff;
+ text-decoration: none;
+ }
+}
+
+/*
+ Social sharing
+ ========================================================================== */
+
+.page__share {
+ margin-top: 2em;
+ padding-top: 1em;
+ border-top: 1px solid $border-color;
+
+ @include breakpoint(max-width $small) {
+ .btn span {
+ border: 0;
+ clip: rect(0 0 0 0);
+ height: 1px;
+ margin: -1px;
+ overflow: hidden;
+ padding: 0;
+ position: absolute;
+ width: 1px;
+ }
+ }
+}
+
+.page__share-title {
+ margin-bottom: 10px;
+ font-size: $type-size-6;
+ text-transform: uppercase;
+}
+
+
+/*
+ Page meta
+ ========================================================================== */
+
+.page__meta {
+ margin-top: 2em;
+ color: mix(#fff, $gray, 25%);
+ font-family: $sans-serif;
+ font-size: $type-size-6;
+
+ p {
+ margin: 0;
+ }
+
+ a {
+ color: inherit;
+ }
+}
+
+.page__meta-title {
+ margin-bottom: 10px;
+ font-size: $type-size-6;
+ text-transform: uppercase;
+}
+
+
+/*
+ Page taxonomy
+ ========================================================================== */
+
+.page__taxonomy {
+ .sep {
+ display: none;
+ }
+
+ strong {
+ margin-right: 10px;
+ }
+}
+
+.page__taxonomy-item {
+ display: inline-block;
+ margin-right: 5px;
+ margin-bottom: 8px;
+ padding: 5px 10px;
+ text-decoration: none;
+ border: 1px solid $light-gray;
+ border-radius: $border-radius;
+
+ &:hover {
+ text-decoration: none;
+ color: $link-color-hover;
+ }
+}
+
+
+/*
+ Comments
+ ========================================================================== */
+
+.page__comments {
+ @include full();
+}
+
+.page__comments-title {
+ margin-top: 2rem;
+ margin-bottom: 10px;
+ padding-top: 2rem;
+ font-size: $type-size-6;
+ border-top: 1px solid $border-color;
+ text-transform: uppercase;
+}
+
+.page__comments-form {
+ padding: 1em;
+ background: $lighter-gray;
+ transition: $global-transition;
+
+ &.disabled {
+ input,
+ button,
+ textarea,
+ label {
+ pointer-events: none;
+ cursor: not-allowed;
+ filter: alpha(opacity=65);
+ box-shadow: none;
+ opacity: 0.65;
+ }
+ }
+}
+
+.comment {
+ @include clearfix();
+ margin: 1em 0;
+
+ &:not(:last-child) {
+ border-bottom: 1px solid $border-color;
+ }
+}
+
+.comment__avatar-wrapper {
+ float: left;
+ width: 60px;
+ height: 60px;
+
+ @include breakpoint($large) {
+ width: 100px;
+ height: 100px;
+ }
+}
+
+.comment__avatar {
+ width: 40px;
+ height: 40px;
+ border-radius: 50%;
+
+ @include breakpoint($large) {
+ width: 80px;
+ height: 80px;
+ padding: 5px;
+ border: 1px solid $border-color;
+ }
+}
+
+.comment__content-wrapper {
+ float: right;
+ width: calc(100% - 60px);
+
+ @include breakpoint($large) {
+ width: calc(100% - 100px);
+ }
+}
+
+.comment__author {
+ margin: 0;
+
+ a {
+ text-decoration: none;
+ }
+}
+
+.comment__date {
+ @extend .page__meta;
+ margin: 0;
+
+ a {
+ text-decoration: none;
+ }
+}
+
+
+/*
+ Related
+ ========================================================================== */
+
+.page__related {
+ margin-top: 2em;
+ padding-top: 1em;
+ border-top: 1px solid $border-color;
+ @include clearfix();
+ float: left;
+
+ @include breakpoint($large) {
+ @include pre(2.5 of 12);
+ }
+
+ a {
+ color: inherit;
+ text-decoration: none;
+ }
+}
+
+.page__related-title {
+ margin-bottom: 10px;
+ font-size: $type-size-6;
+ text-transform: uppercase;
+}
diff --git a/_sass/_print.scss b/_sass/_print.scss
new file mode 100644
index 0000000..09bdb1d
--- /dev/null
+++ b/_sass/_print.scss
@@ -0,0 +1,18 @@
+/* ==========================================================================
+ PRINT STYLES
+ ========================================================================== */
+
+/*
+ Hide the following elements on print
+ ========================================================================== */
+
+@media print {
+ .masthead,
+ .toc,
+ .page__share,
+ .page__related,
+ .ads,
+ .page__footer {
+ display: none;
+ }
+}
diff --git a/_sass/_reset.scss b/_sass/_reset.scss
new file mode 100644
index 0000000..7d33b49
--- /dev/null
+++ b/_sass/_reset.scss
@@ -0,0 +1,179 @@
+/* ==========================================================================
+ STYLE RESETS
+ ========================================================================== */
+
+@include border-box-sizing;
+
+html {
+ /* apply a natural box layout model to all elements */
+ box-sizing: border-box;
+ background-color: $background-color;
+ font-size: 16px;
+
+ @include breakpoint($medium) {
+ font-size: 18px;
+ }
+
+ -webkit-text-size-adjust: 100%;
+ -ms-text-size-adjust: 100%;
+}
+
+/* Remove margin */
+
+body { margin: 0; }
+
+/* Selected elements */
+
+::-moz-selection {
+ color: #fff;
+ background: #000;
+}
+
+::selection {
+ color: #fff;
+ background: #000;
+}
+
+/* Display HTML5 elements in IE6-9 and FF3 */
+
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+main,
+nav,
+section {
+ display: block;
+}
+
+/* Display block in IE6-9 and FF3 */
+
+audio,
+canvas,
+video {
+ display: inline-block;
+ *display: inline;
+ *zoom: 1;
+}
+
+/* Prevents modern browsers from displaying 'audio' without controls */
+
+audio:not([controls]) {
+ display: none;
+}
+
+a {
+ color: $link-color;
+}
+
+/* Apply focus state */
+
+a:focus {
+ @extend %tab-focus;
+}
+
+/* Remove outline from links */
+
+a:hover,
+a:active {
+ outline: 0;
+}
+
+/* Prevent sub and sup affecting line-height in all browsers */
+
+sub,
+sup {
+ position: relative;
+ font-size: 75%;
+ line-height: 0;
+ vertical-align: baseline;
+}
+
+sup {
+ top: -0.5em;
+}
+
+sub {
+ bottom: -0.25em;
+}
+
+/* img border in anchor's and image quality */
+
+img {
+ /* Responsive images (ensure images don't scale beyond their parents) */
+ max-width: 100%; /* part 1: Set a maximum relative to the parent*/
+ width: auto\9; /* IE7-8 need help adjusting responsive images*/
+ height: auto; /* part 2: Scale the height according to the width, otherwise you get stretching*/
+
+ vertical-align: middle;
+ border: 0;
+ -ms-interpolation-mode: bicubic;
+}
+
+/* Prevent max-width from affecting Google Maps */
+
+#map_canvas img,
+.google-maps img {
+ max-width: none;
+}
+
+/* Consistent form font size in all browsers, margin changes, misc */
+
+button,
+input,
+select,
+textarea {
+ margin: 0;
+ font-size: 100%;
+ vertical-align: middle;
+}
+
+button,
+input {
+ *overflow: visible; /* inner spacing ie IE6/7*/
+ line-height: normal; /* FF3/4 have !important on line-height in UA stylesheet*/
+}
+
+button::-moz-focus-inner,
+input::-moz-focus-inner { /* inner padding and border oddities in FF3/4*/
+ padding: 0;
+ border: 0;
+}
+
+button,
+html input[type="button"], // avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` and `video` controls
+input[type="reset"],
+input[type="submit"] {
+ -webkit-appearance: button; /* corrects inability to style clickable `input` types in iOS*/
+ cursor: pointer; /* improves usability and consistency of cursor style between image-type `input` and others*/
+}
+
+label,
+select,
+button,
+input[type="button"],
+input[type="reset"],
+input[type="submit"],
+input[type="radio"],
+input[type="checkbox"] {
+ cursor: pointer; /* improves usability and consistency of cursor style between image-type `input` and others*/
+}
+
+input[type="search"] { /* Appearance in Safari/Chrome*/
+ box-sizing: content-box;
+ -webkit-appearance: textfield;
+}
+
+input[type="search"]::-webkit-search-decoration,
+input[type="search"]::-webkit-search-cancel-button {
+ -webkit-appearance: none; /* inner-padding issues in Chrome OSX, Safari 5*/
+}
+
+textarea {
+ overflow: auto; /* remove vertical scrollbar in IE6-9*/
+ vertical-align: top; /* readability and alignment cross-browser*/
+}
\ No newline at end of file
diff --git a/_sass/_sidebar.scss b/_sass/_sidebar.scss
new file mode 100644
index 0000000..5bb6270
--- /dev/null
+++ b/_sass/_sidebar.scss
@@ -0,0 +1,237 @@
+/* ==========================================================================
+ SIDEBAR
+ ========================================================================== */
+
+/*
+ Default
+ ========================================================================== */
+
+.sidebar {
+ -webkit-transform: translate3d(0, 0 , 0);
+ transform: translate3d(0, 0 , 0);
+
+ @include clearfix();
+ margin-bottom: 1em;
+
+ @include breakpoint($large) {
+ @include span(2 of 12);
+ opacity: 1;
+ -webkit-transition: opacity 0.2s ease-in-out;
+ transition: opacity 0.2s ease-in-out;
+
+ &:hover {
+ opacity: 1;
+ }
+ }
+
+
+ @include breakpoint($x-large) {
+ padding-right: 0;
+ }
+
+ h2, h3, h4, h5, h6 {
+ margin-bottom: 0;
+ font-family: $sans-serif-narrow;
+ }
+
+ h3, h4 {
+ font-size: $type-size-5;
+ }
+
+ p, li {
+ font-family: $sans-serif;
+ font-size: $type-size-6;
+ line-height: 1.5;
+ }
+
+ img {
+ width: 100%;
+ }
+}
+
+.sidebar__right {
+ margin-bottom: 1em;
+
+ @include breakpoint($large) {
+ position: relative;
+ float: right;
+ width: $right-sidebar-width-narrow;
+ margin-left: span(0.5 of 12);
+ z-index: 10;
+ }
+
+ @include breakpoint($x-large) {
+ width: $right-sidebar-width;
+ }
+}
+
+/*
+ Author profile and links
+ ========================================================================== */
+
+.author__avatar {
+ display: table-cell;
+ vertical-align: top;
+ width: 36px;
+ // set width only, for non-square avatars
+ // height: 36px;
+
+ @include breakpoint($large) {
+ display: block;
+ width: auto;
+ height: auto;
+ }
+
+ img {
+ max-width: 175px;
+ // border-radius: 50%;
+
+ @include breakpoint($large) {
+ padding: 5px;
+ border: 1px solid $border-color;
+ }
+ }
+}
+
+.author__content {
+ display: table-cell;
+ vertical-align: top;
+ padding-left: 15px;
+ padding-right: 25px;
+ line-height: 1;
+
+ @include breakpoint($large) {
+ display: block;
+ width: 100%;
+ padding-left: 0;
+ padding-right: 0;
+ }
+}
+
+.author__name {
+ margin: 0;
+
+ @include breakpoint($large) {
+ margin-top: 10px;
+ margin-bottom: 10px;
+ }
+}
+.sidebar .author__name {
+ font-family: $sans-serif;
+ font-size: $type-size-5;
+}
+
+.author__bio {
+ margin: 0;
+
+ @include breakpoint($large) {
+ margin-top: 10px;
+ margin-bottom: 20px;
+ }
+}
+
+.author__urls-wrapper {
+ position: relative;
+ display: table-cell;
+ vertical-align: middle;
+ font-family: $sans-serif;
+ z-index: 10;
+ position: relative;
+ cursor: pointer;
+
+ li:last-child {
+ a {
+ margin-bottom: 0;
+ }
+ }
+
+ @include breakpoint($large) {
+ display: block;
+ }
+
+ button {
+ margin-bottom: 0;
+
+ @include breakpoint($large) {
+ display: none;
+ }
+ }
+}
+
+.author__urls {
+ display: none;
+ position: absolute;
+ right: 0;
+ margin-top: 15px;
+ padding: 10px;
+ list-style-type: none;
+ border: 1px solid $border-color;
+ border-radius: $border-radius;
+ background: #fff;
+ z-index: -1;
+ box-shadow: 0 0 10px rgba(#000, 0.25);
+ cursor: default;
+
+ @include breakpoint($large) {
+ display: block;
+ position: relative;
+ margin: 0;
+ padding: 0;
+ border: 0;
+ background: transparent;
+ box-shadow: none;
+ }
+
+ &:before {
+ display: block;
+ content: "";
+ position: absolute;
+ top: -11px;
+ left: calc(50% - 10px);
+ width: 0;
+ border-style: solid;
+ border-width: 0 10px 10px;
+ border-color: $border-color transparent;
+ z-index: 0;
+
+ @include breakpoint($large) {
+ display: none;
+ }
+ }
+
+ &:after {
+ display: block;
+ content: "";
+ position: absolute;
+ top: -10px;
+ left: calc(50% - 10px);
+ width: 0;
+ border-style: solid;
+ border-width: 0 10px 10px;
+ border-color: #fff transparent;
+ z-index: 1;
+
+ @include breakpoint($large) {
+ display: none;
+ }
+ }
+
+ li {
+ white-space: nowrap;
+ }
+
+ a {
+ display: block;
+ margin-bottom: 5px;
+ padding-right: 5px;
+ padding-top: 2px;
+ padding-bottom: 2px;
+ color: inherit;
+ font-size: $type-size-5;
+ text-decoration: none;
+
+ &:hover {
+ text-decoration: underline;
+ }
+ }
+}
diff --git a/_sass/_syntax.scss b/_sass/_syntax.scss
new file mode 100644
index 0000000..f40ed05
--- /dev/null
+++ b/_sass/_syntax.scss
@@ -0,0 +1,123 @@
+/* ==========================================================================
+ Syntax highlighting
+ ========================================================================== */
+
+div.highlighter-rouge, figure.highlight {
+ position: relative;
+ margin-bottom: 1em;
+ padding: 1em;
+ border: 1px solid $border-color;
+ border-radius: $border-radius;
+ background-color: $code-background-color;
+ box-shadow: $box-shadow;
+
+ &:before {
+ position: absolute;
+ top: 0;
+ right: 0;
+ padding: 0.5em;
+ background-color: $lighter-gray;
+ content: "\f121";
+ font-family: "fontawesome" !important;
+ font-size: $type-size-6;
+ line-height: 1;
+ text-transform: none;
+ speak: none;
+ }
+
+ .highlight {
+ margin: 0;
+ font-family: $monospace;
+ font-size: $type-size-7;
+ line-height: 1.8;
+ }
+}
+
+.highlight table td { padding: 5px; }
+.highlight table pre { margin: 0; }
+
+
+/*
+ Solarized Light
+ http://ethanschoonover.com/solarized
+
+ SOLARIZED HEX ROLE
+ --------- -------- ------------------------------------------
+ base01 #586e75 body text / default code / primary content
+ base1 #93a1a1 comments / secondary content
+ base3 #fdf6e3 background
+ orange #cb4b16 constants
+ red #dc322f regex, special keywords
+ blue #22b3eb reserved keywords
+ cyan #2aa198 strings, numbers
+ green #859900 operators, other keywords
+ ========================================================================== */
+
+.highlight .c { color: #93a1a1 } /* Comment */
+.highlight .err { color: #586e75 } /* Error */
+.highlight .g { color: #586e75 } /* Generic */
+.highlight .k { color: #859900 } /* Keyword */
+.highlight .l { color: #586e75 } /* Literal */
+.highlight .n { color: #586e75 } /* Name */
+.highlight .o { color: #859900 } /* Operator */
+.highlight .x { color: #cb4b16 } /* Other */
+.highlight .p { color: #586e75 } /* Punctuation */
+.highlight .cm { color: #93a1a1 } /* Comment.Multiline */
+.highlight .cp { color: #859900 } /* Comment.Preproc */
+.highlight .c1 { color: #93a1a1 } /* Comment.Single */
+.highlight .cs { color: #859900 } /* Comment.Special */
+.highlight .gd { color: #2aa198 } /* Generic.Deleted */
+.highlight .ge { color: #586e75; font-style: italic } /* Generic.Emph */
+.highlight .gr { color: #dc322f } /* Generic.Error */
+.highlight .gh { color: #cb4b16 } /* Generic.Heading */
+.highlight .gi { color: #859900 } /* Generic.Inserted */
+.highlight .go { color: #586e75 } /* Generic.Output */
+.highlight .gp { color: #586e75 } /* Generic.Prompt */
+.highlight .gs { color: #586e75; font-weight: bold } /* Generic.Strong */
+.highlight .gu { color: #cb4b16 } /* Generic.Subheading */
+.highlight .gt { color: #586e75 } /* Generic.Traceback */
+.highlight .kc { color: #cb4b16 } /* Keyword.Constant */
+.highlight .kd { color: #22b3eb } /* Keyword.Declaration */
+.highlight .kn { color: #859900 } /* Keyword.Namespace */
+.highlight .kp { color: #859900 } /* Keyword.Pseudo */
+.highlight .kr { color: #22b3eb } /* Keyword.Reserved */
+.highlight .kt { color: #dc322f } /* Keyword.Type */
+.highlight .ld { color: #586e75 } /* Literal.Date */
+.highlight .m { color: #2aa198 } /* Literal.Number */
+.highlight .s { color: #2aa198 } /* Literal.String */
+.highlight .na { color: #586e75 } /* Name.Attribute */
+.highlight .nb { color: #B58900 } /* Name.Builtin */
+.highlight .nc { color: #22b3eb } /* Name.Class */
+.highlight .no { color: #cb4b16 } /* Name.Constant */
+.highlight .nd { color: #22b3eb } /* Name.Decorator */
+.highlight .ni { color: #cb4b16 } /* Name.Entity */
+.highlight .ne { color: #cb4b16 } /* Name.Exception */
+.highlight .nf { color: #22b3eb } /* Name.Function */
+.highlight .nl { color: #586e75 } /* Name.Label */
+.highlight .nn { color: #586e75 } /* Name.Namespace */
+.highlight .nx { color: #586e75 } /* Name.Other */
+.highlight .py { color: #586e75 } /* Name.Property */
+.highlight .nt { color: #22b3eb } /* Name.Tag */
+.highlight .nv { color: #22b3eb } /* Name.Variable */
+.highlight .ow { color: #859900 } /* Operator.Word */
+.highlight .w { color: #586e75 } /* Text.Whitespace */
+.highlight .mf { color: #2aa198 } /* Literal.Number.Float */
+.highlight .mh { color: #2aa198 } /* Literal.Number.Hex */
+.highlight .mi { color: #2aa198 } /* Literal.Number.Integer */
+.highlight .mo { color: #2aa198 } /* Literal.Number.Oct */
+.highlight .sb { color: #93a1a1 } /* Literal.String.Backtick */
+.highlight .sc { color: #2aa198 } /* Literal.String.Char */
+.highlight .sd { color: #586e75 } /* Literal.String.Doc */
+.highlight .s2 { color: #2aa198 } /* Literal.String.Double */
+.highlight .se { color: #cb4b16 } /* Literal.String.Escape */
+.highlight .sh { color: #586e75 } /* Literal.String.Heredoc */
+.highlight .si { color: #2aa198 } /* Literal.String.Interpol */
+.highlight .sx { color: #2aa198 } /* Literal.String.Other */
+.highlight .sr { color: #dc322f } /* Literal.String.Regex */
+.highlight .s1 { color: #2aa198 } /* Literal.String.Single */
+.highlight .ss { color: #2aa198 } /* Literal.String.Symbol */
+.highlight .bp { color: #22b3eb } /* Name.Builtin.Pseudo */
+.highlight .vc { color: #22b3eb } /* Name.Variable.Class */
+.highlight .vg { color: #22b3eb } /* Name.Variable.Global */
+.highlight .vi { color: #22b3eb } /* Name.Variable.Instance */
+.highlight .il { color: #2aa198 } /* Literal.Number.Integer.Long */
\ No newline at end of file
diff --git a/_sass/_tables.scss b/_sass/_tables.scss
new file mode 100644
index 0000000..d31dc24
--- /dev/null
+++ b/_sass/_tables.scss
@@ -0,0 +1,38 @@
+/* ==========================================================================
+ TABLES
+ ========================================================================== */
+
+table {
+ margin-bottom: 1em;
+ width: 100%;
+ font-family: $global-font-family;
+ font-size: $type-size-6;
+ border-collapse: collapse;
+ border: 1px solid $light-gray;
+
+ & + table {
+ margin-top: 1em;
+ }
+}
+
+thead {
+ background-color: $lighter-gray;
+ border-bottom: 1px solid $light-gray;
+}
+
+th {
+ padding: 0.5em;
+ font-weight: bold;
+ text-align: left;
+ border-right: 1px solid $light-gray;
+}
+
+td {
+ padding: 0.5em;
+ border-bottom: 1px solid $light-gray;
+ border-right: 1px solid $light-gray;
+}
+
+tr, td, th {
+ vertical-align: middle;
+}
\ No newline at end of file
diff --git a/_sass/_utilities.scss b/_sass/_utilities.scss
new file mode 100644
index 0000000..87536a4
--- /dev/null
+++ b/_sass/_utilities.scss
@@ -0,0 +1,470 @@
+/* ==========================================================================
+ UTILITY CLASSES
+ ========================================================================== */
+
+/*
+ Visibility
+ ========================================================================== */
+
+/* http://www.456bereastreet.com/archive/200711/screen_readers_sometimes_ignore_displaynone/ */
+
+.hidden {
+ display: none;
+ visibility: hidden;
+}
+
+/* for preloading images */
+
+.load {
+ display: none;
+}
+
+.transparent {
+ opacity: 0;
+}
+
+/* https://developer.yahoo.com/blogs/ydn/clip-hidden-content-better-accessibility-53456.html */
+
+.visually-hidden,
+.screen-reader-text,
+.screen-reader-text span,
+.screen-reader-shortcut {
+ position: absolute !important;
+ clip: rect(1px, 1px, 1px, 1px);
+ height: 1px !important;
+ width: 1px !important;
+ border: 0 !important;
+ overflow: hidden;
+}
+
+body:hover .visually-hidden a,
+body:hover .visually-hidden input,
+body:hover .visually-hidden button {
+ display: none !important;
+}
+
+/* screen readers */
+
+.screen-reader-text:focus,
+.screen-reader-shortcut:focus {
+ clip: auto !important;
+ height: auto !important;
+ width: auto !important;
+ display: block;
+ font-size: 1em;
+ font-weight: bold;
+ padding: 15px 23px 14px;
+ background: #fff;
+ z-index: 100000;
+ text-decoration: none;
+ box-shadow: 0 0 2px 2px rgba(0,0,0,.6);
+}
+
+
+/*
+ Skip links
+ ========================================================================== */
+
+.skip-link {
+ position: fixed;
+ z-index: 20;
+ margin: 0;
+ font-family: $sans-serif;
+ white-space: nowrap;
+}
+
+.skip-link li {
+ height: 0;
+ width: 0;
+ list-style: none;
+}
+
+
+/*
+ Type
+ ========================================================================== */
+
+.text-left {
+ text-align: left;
+}
+
+.text-center {
+ text-align: center;
+}
+
+.text-right {
+ text-align: right;
+}
+
+.text-justify {
+ text-align: justify;
+}
+
+.text-nowrap {
+ white-space: nowrap;
+}
+
+
+/*
+ Alignment
+ ========================================================================== */
+
+/* clearfix */
+
+.cf { clear: both; }
+
+.wrapper {
+ @include container();
+}
+
+
+/*
+ Images
+ ========================================================================== */
+
+/* image align left */
+
+.align-left {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+
+ @include breakpoint($small) {
+ float: left;
+ margin-right: 1em;
+ }
+}
+
+/* image align right */
+
+.align-right {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+
+ @include breakpoint($small) {
+ float: right;
+ margin-left: 1em;
+ }
+}
+
+/* image align center */
+
+.align-center {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+
+/* file page content container */
+
+.full {
+ @include breakpoint($large){
+ margin-right: -1 * span(2.5 of 12) !important;
+ }
+}
+
+/*
+ Icons
+ ========================================================================== */
+
+.icon {
+ display: inline-block;
+ fill: currentColor;
+ width: 1em;
+ height: 1.1em;
+ line-height: 1;
+ position: relative;
+ top: -0.1em;
+ vertical-align: middle;
+}
+
+/* social icons*/
+
+.social-icons {
+ .fa {
+ color: #000;
+ }
+
+ .fa-behance,
+ .fa-behance-square {
+ color: $behance-color;
+ }
+
+ .fa-dribbble {
+ color: $dribbble-color;
+ }
+
+ .fa-facebook,
+ .fa-facebook-square {
+ color: $facebook-color;
+ }
+
+ .fa-flickr {
+ color: $flickr-color;
+ }
+
+ .fa-foursquare {
+ color: $foursquare-color;
+ }
+
+ .fa-github,
+ .fa-github-alt,
+ .fa-github-square {
+ color: $github-color;
+ }
+
+ .fa-google-plus,
+ .fa-google-plus-square {
+ color: $google-plus-color;
+ }
+
+ .fa-instagram {
+ color: $instagram-color;
+ }
+
+ .fa-lastfm,
+ .fa-lastfm-square {
+ color: $lastfm-color;
+ }
+
+ .fa-linkedin,
+ .fa-linkedin-square {
+ color: $linkedin-color;
+ }
+
+ .fa-pinterest,
+ .fa-pinterest-p,
+ .fa-pinterest-square {
+ color: $pinterest-color;
+ }
+
+ .fa-rss,
+ .fa-rss-square {
+ color: $rss-color;
+ }
+
+ .fa-soundcloud {
+ color: $soundcloud-color;
+ }
+
+ .fa-stack-exchange,
+ .fa-stack-overflow {
+ color: $stackoverflow-color;
+ }
+
+ .fa-tumblr,
+ .fa-tumblr-square {
+ color: $tumblr-color;
+ }
+
+ .fa-twitter,
+ .fa-twitter-square {
+ color: $twitter-color;
+ }
+
+ .fa-vimeo,
+ .fa-vimeo-square {
+ color: $vimeo-color;
+ }
+
+ .fa-vine {
+ color: $vine-color;
+ }
+
+ .fa-youtube,
+ .fa-youtube-square,
+ .fa-youtube-play {
+ color: $youtube-color;
+ }
+
+ .fa-xing,
+ .fa-xing-square {
+ color: $xing-color;
+ }
+}
+
+
+/*
+ Navicons
+ ========================================================================== */
+
+.navicon {
+ position: relative;
+ width: $navicon-width;
+ height: $navicon-height;
+ background: #fff;
+ margin: auto;
+ -webkit-transition: 0.3s;
+ transition: 0.3s;
+
+ &:before,
+ &:after {
+ content: "";
+ position: absolute;
+ left: 0;
+ width: $navicon-width;
+ height: $navicon-height;
+ background: #fff;
+ -webkit-transition: 0.3s;
+ transition: 0.3s;
+ }
+
+ &:before {
+ top: (-2 * $navicon-height);
+ }
+
+ &:after {
+ bottom: (-2 * $navicon-height);
+ }
+}
+
+.close .navicon {
+ /* hide the middle line*/
+ background: transparent;
+
+ /* overlay the lines by setting both their top values to 0*/
+ &:before, &:after{
+ -webkit-transform-origin: 50% 50%;
+ -ms-transform-origin: 50% 50%;
+ transform-origin: 50% 50%;
+ top: 0;
+ width: $navicon-width;
+ }
+
+ /* rotate the lines to form the x shape*/
+ &:before{
+ -webkit-transform: rotate3d(0,0,1,45deg);
+ transform: rotate3d(0,0,1,45deg);
+ }
+ &:after{
+ -webkit-transform: rotate3d(0,0,1,-45deg);
+ transform: rotate3d(0,0,1,-45deg);
+ }
+}
+
+
+/*
+ Sticky, fixed to top content
+ ========================================================================== */
+
+.sticky {
+ @include breakpoint($large) {
+ @include clearfix();
+ position: -webkit-sticky;
+ position: sticky;
+ top: 2em;
+
+ > * {
+ display: block;
+ }
+ }
+}
+
+
+/*
+ Wells
+ ========================================================================== */
+
+.well {
+ min-height: 20px;
+ padding: 19px;
+ margin-bottom: 20px;
+ background-color: #f5f5f5;
+ border: 1px solid #e3e3e3;
+ border-radius: $border-radius;
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
+}
+
+
+/*
+ Modals
+ ========================================================================== */
+
+.show-modal {
+ overflow: hidden;
+ position: relative;
+
+ &:before {
+ position: absolute;
+ content: "";
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ z-index: 999;
+ background-color: rgba(255, 255, 255, 0.85);
+ }
+
+ .modal {
+ display: block;
+ }
+}
+
+.modal {
+ display: none;
+ position: fixed;
+ width: 300px;
+ top: 50%;
+ left: 50%;
+ margin-left: -150px;
+ margin-top: -150px;
+ min-height: 0;
+ z-index: 9999;
+ background: #fff;
+ border: 1px solid $border-color;
+ border-radius: $border-radius;
+ box-shadow: $box-shadow;
+
+ &__title {
+ margin: 0;
+ padding: 0.5em 1em;
+ }
+
+ &__supporting-text {
+ padding: 0 1em 0.5em 1em;
+ }
+
+ &__actions {
+ padding: 0.5em 1em;
+ border-top: 1px solid $border-color;
+ }
+}
+
+
+/*
+ Footnotes
+ ========================================================================== */
+
+.footnote {
+ color: mix(#fff, $gray, 25%);
+ text-decoration: none;
+}
+
+.footnotes {
+ color: mix(#fff, $gray, 25%);
+
+ ol, li, p {
+ margin-bottom: 0;
+ font-size: $type-size-6;
+ }
+}
+
+a.reversefootnote {
+ color: $gray;
+ text-decoration: none;
+
+ &:hover {
+ text-decoration: underline;
+ }
+}
+
+
+/*
+ Required
+ ========================================================================== */
+
+.required {
+ color: $danger-color;
+ font-weight: bold;
+}
diff --git a/_sass/_variables.scss b/_sass/_variables.scss
new file mode 100644
index 0000000..c584e78
--- /dev/null
+++ b/_sass/_variables.scss
@@ -0,0 +1,153 @@
+/* ==========================================================================
+ Variables
+ ========================================================================== */
+
+/*
+ Typography
+ ========================================================================== */
+
+$doc-font-size : 16;
+
+/* paragraph indention */
+$paragraph-indent : false; // true, false (default)
+$indent-var : 1.3em;
+
+/* system typefaces */
+$serif : Georgia, Times, serif;
+$sans-serif : -apple-system, ".SFNSText-Regular", "San Francisco", "Roboto", "Segoe UI", "Helvetica Neue", "Lucida Grande", Arial, sans-serif;
+$monospace : Monaco, Consolas, "Lucida Console", monospace;
+
+/* sans serif typefaces */
+$sans-serif-narrow : $sans-serif;
+$helvetica : Helvetica, "Helvetica Neue", Arial, sans-serif;
+
+/* serif typefaces */
+$georgia : Georgia, serif;
+$times : Times, serif;
+$bodoni : "Bodoni MT", serif;
+$calisto : "Calisto MT", serif;
+$garamond : Garamond, serif;
+
+$global-font-family : $sans-serif;
+$header-font-family : $sans-serif;
+$caption-font-family : $serif;
+
+/* type scale */
+$type-size-1 : 2.441em; // ~39.056px
+$type-size-2 : 1.953em; // ~31.248px
+$type-size-3 : 1.563em; // ~25.008px
+$type-size-4 : 1.25em; // ~20px
+$type-size-5 : 1em; // ~16px
+$type-size-6 : 0.75em; // ~12px
+$type-size-7 : 0.6875em; // ~11px
+$type-size-8 : 0.625em; // ~10px
+
+
+/*
+ Colors
+ ========================================================================== */
+
+$gray : #7a8288;
+$dark-gray : mix(#000, $gray, 40%);
+$darker-gray : mix(#000, $gray, 60%);
+$light-gray : mix(#fff, $gray, 50%);
+$lighter-gray : mix(#fff, $gray, 90%);
+
+$body-color : #fff;
+$background-color : #fff;
+$code-background-color : #fafafa;
+$code-background-color-dark : $light-gray;
+$text-color : $dark-gray;
+$border-color : $lighter-gray;
+
+$primary-color : #7a8288;
+$success-color : #62c462;
+$warning-color : #f89406;
+$danger-color : #ee5f5b;
+$info-color : #52adc8;
+
+/* brands */
+$behance-color : #1769FF;
+$dribbble-color : #ea4c89;
+$facebook-color : #3b5998;
+$flickr-color : #ff0084;
+$foursquare-color : #0072b1;
+$github-color : #171516;
+$google-plus-color : #dd4b39;
+$instagram-color : #517fa4;
+$lastfm-color : #d51007;
+$linkedin-color : #007bb6;
+$pinterest-color : #cb2027;
+$rss-color : #fa9b39;
+$soundcloud-color : #ff3300;
+$stackoverflow-color : #fe7a15;
+$tumblr-color : #32506d;
+$twitter-color : #55acee;
+$vimeo-color : #1ab7ea;
+$vine-color : #00bf8f;
+$youtube-color : #bb0000;
+$xing-color : #006567;
+
+
+/* links */
+$link-color : $info-color;
+$link-color-hover : mix(#000, $link-color, 25%);
+$link-color-visited : mix(#fff, $link-color, 25%);
+$masthead-link-color : $primary-color;
+$masthead-link-color-hover : mix(#000, $primary-color, 25%);
+
+
+/*
+ Breakpoints
+ ========================================================================== */
+
+@include breakpoint-set("to ems", true);
+/*
+$small : 400px;
+$medium : 500px;
+$medium-wide : 550px;
+$large : 1200px;
+$x-large : 1800px;
+*/
+
+$small : 600px !default;
+$medium : 768px !default;
+$medium-wide : 900px !default;
+$large : 925px !default;
+$x-large : 1280px !default;
+
+/*
+ Grid
+ ========================================================================== */
+
+$right-sidebar-width-narrow : 0px;
+$right-sidebar-width : 0px;
+$right-sidebar-width-wide : 0px;
+
+$susy: (
+ columns: 12,
+ column-width: 120px,
+ gutters: 1/4,
+ math: fluid,
+ output: float,
+ gutter-position: after,
+ container: $large,
+ global-box-sizing: border-box,
+ // debug: (
+ // image: show,
+ // color: blue,
+ // output: overlay,
+ // toggle: top right,
+ // ),
+);
+
+
+/*
+ Other
+ ========================================================================== */
+
+$border-radius : 4px;
+$box-shadow : 0 1px 1px rgba(0, 0, 0, 0.125);
+$navicon-width : 28px;
+$navicon-height : 4px;
+$global-transition : all 0.2s ease-in-out;
diff --git a/_sass/vendor/breakpoint/_breakpoint.scss b/_sass/vendor/breakpoint/_breakpoint.scss
new file mode 100644
index 0000000..a0528eb
--- /dev/null
+++ b/_sass/vendor/breakpoint/_breakpoint.scss
@@ -0,0 +1,114 @@
+//////////////////////////////
+// Default Variables
+//////////////////////////////
+$Breakpoint-Settings: (
+ 'default media': all,
+ 'default feature': min-width,
+ 'default pair': width,
+
+ 'force all media type': false,
+ 'to ems': false,
+ 'transform resolutions': true,
+
+ 'no queries': false,
+ 'no query fallbacks': false,
+
+ 'base font size': 16px,
+
+ 'legacy syntax': false
+);
+
+$breakpoint: () !default;
+
+//////////////////////////////
+// Imports
+//////////////////////////////
+@import "settings";
+@import "context";
+@import "helpers";
+@import "parsers";
+@import "no-query";
+
+@import "respond-to";
+
+@import "legacy-settings";
+
+//////////////////////////////
+// Breakpoint Mixin
+//////////////////////////////
+
+@mixin breakpoint($query, $no-query: false) {
+ @include legacy-settings-warning;
+
+ // Reset contexts
+ @include private-breakpoint-reset-contexts();
+
+ $breakpoint: breakpoint($query, false);
+
+ $query-string: map-get($breakpoint, 'query');
+ $query-fallback: map-get($breakpoint, 'fallback');
+
+ $private-breakpoint-context-holder: map-get($breakpoint, 'context holder') !global;
+ $private-breakpoint-query-count: map-get($breakpoint, 'query count') !global;
+
+ // Allow for an as-needed override or usage of no query fallback.
+ @if $no-query != false {
+ $query-fallback: $no-query;
+ }
+
+ @if $query-fallback != false {
+ $context-setter: private-breakpoint-set-context('no-query', $query-fallback);
+ }
+
+ // Print Out Query String
+ @if not breakpoint-get('no queries') {
+ @media #{$query-string} {
+ @content;
+ }
+ }
+
+ @if breakpoint-get('no query fallbacks') != false or breakpoint-get('no queries') == true {
+
+ $type: type-of(breakpoint-get('no query fallbacks'));
+ $print: false;
+
+ @if ($type == 'bool') {
+ $print: true;
+ }
+ @else if ($type == 'string') {
+ @if $query-fallback == breakpoint-get('no query fallbacks') {
+ $print: true;
+ }
+ }
+ @else if ($type == 'list') {
+ @each $wrapper in breakpoint-get('no query fallbacks') {
+ @if $query-fallback == $wrapper {
+ $print: true;
+ }
+ }
+ }
+
+ // Write Fallback
+ @if ($query-fallback != false) and ($print == true) {
+ $type-fallback: type-of($query-fallback);
+
+ @if ($type-fallback != 'bool') {
+ #{$query-fallback} & {
+ @content;
+ }
+ }
+ @else {
+ @content;
+ }
+ }
+ }
+
+ @include private-breakpoint-reset-contexts();
+}
+
+
+@mixin mq($query, $no-query: false) {
+ @include breakpoint($query, $no-query) {
+ @content;
+ }
+}
diff --git a/_sass/vendor/breakpoint/_context.scss b/_sass/vendor/breakpoint/_context.scss
new file mode 100644
index 0000000..57947f5
--- /dev/null
+++ b/_sass/vendor/breakpoint/_context.scss
@@ -0,0 +1,95 @@
+//////////////////////////////
+// Private Breakpoint Variables
+//////////////////////////////
+$private-breakpoint-context-holder: ();
+$private-breakpoint-query-count: 0 !default;
+
+//////////////////////////////
+// Breakpoint Has Context
+// Returns whether or not you are inside a Breakpoint query
+//////////////////////////////
+@function breakpoint-has-context() {
+ @if length($private-breakpoint-query-count) {
+ @return true;
+ }
+ @else {
+ @return false;
+ }
+}
+
+//////////////////////////////
+// Breakpoint Get Context
+// $feature: Input feature to get it's current MQ context. Returns false if no context
+//////////////////////////////
+@function breakpoint-get-context($feature) {
+ @if map-has-key($private-breakpoint-context-holder, $feature) {
+ $get: map-get($private-breakpoint-context-holder, $feature);
+ // Special handling of no-query from get side so /false/ prepends aren't returned
+ @if $feature == 'no-query' {
+ @if type-of($get) == 'list' and length($get) > 1 and nth($get, 1) == false {
+ $get: nth($get, length($get));
+ }
+ }
+ @return $get;
+ }
+ @else {
+ @if breakpoint-has-context() and $feature == 'media' {
+ @return breakpoint-get('default media');
+ }
+ @else {
+ @return false;
+ }
+ }
+}
+
+//////////////////////////////
+// Private function to set context
+//////////////////////////////
+@function private-breakpoint-set-context($feature, $value) {
+ @if $value == 'monochrome' {
+ $feature: 'monochrome';
+ }
+
+ $current: map-get($private-breakpoint-context-holder, $feature);
+ @if $current and length($current) == $private-breakpoint-query-count {
+ @warn "You have already queried against `#{$feature}`. Unexpected things may happen if you query against the same feature more than once in the same `and` query. Breakpoint is overwriting the current context with `#{$value}`";
+ }
+
+ @if not map-has-key($private-breakpoint-context-holder, $feature) {
+ $v-holder: ();
+ @for $i from 1 to $private-breakpoint-query-count {
+ @if $feature == 'media' {
+ $v-holder: append($v-holder, breakpoint-get('default media'));
+ }
+ @else {
+ $v-holder: append($v-holder, false);
+ }
+ }
+ $v-holder: append($v-holder, $value);
+ $private-breakpoint-context-holder: map-merge($private-breakpoint-context-holder, ($feature: $v-holder)) !global;
+ }
+ @else {
+ $v-holder: map-get($private-breakpoint-context-holder, $feature);
+ $length: length($v-holder);
+ @for $i from $length to $private-breakpoint-query-count - 1 {
+ @if $feature == 'media' {
+ $v-holder: append($v-holder, breakpoint-get('default media'));
+ }
+ @else {
+ $v-holder: append($v-holder, false);
+ }
+ }
+ $v-holder: append($v-holder, $value);
+ $private-breakpoint-context-holder: map-merge($private-breakpoint-context-holder, ($feature: $v-holder)) !global;
+ }
+
+ @return true;
+}
+
+//////////////////////////////
+// Private function to reset context
+//////////////////////////////
+@mixin private-breakpoint-reset-contexts {
+ $private-breakpoint-context-holder: () !global;
+ $private-breakpoint-query-count: 0 !global;
+}
\ No newline at end of file
diff --git a/_sass/vendor/breakpoint/_helpers.scss b/_sass/vendor/breakpoint/_helpers.scss
new file mode 100644
index 0000000..97e522d
--- /dev/null
+++ b/_sass/vendor/breakpoint/_helpers.scss
@@ -0,0 +1,151 @@
+//////////////////////////////
+// Converts the input value to Base EMs
+//////////////////////////////
+@function breakpoint-to-base-em($value) {
+ $value-unit: unit($value);
+
+ // Will convert relative EMs into root EMs.
+ @if breakpoint-get('base font size') and type-of(breakpoint-get('base font size')) == 'number' and $value-unit == 'em' {
+ $base-unit: unit(breakpoint-get('base font size'));
+
+ @if $base-unit == 'px' or $base-unit == '%' or $base-unit == 'em' or $base-unit == 'pt' {
+ @return base-conversion($value) / base-conversion(breakpoint-get('base font size')) * 1em;
+ }
+ @else {
+ @warn '#{breakpoint-get(\'base font size\')} is not set in valid units for font size!';
+ @return false;
+ }
+ }
+ @else {
+ @return base-conversion($value);
+ }
+}
+
+@function base-conversion($value) {
+ $unit: unit($value);
+
+ @if $unit == 'px' {
+ @return $value / 16px * 1em;
+ }
+ @else if $unit == '%' {
+ @return $value / 100% * 1em;
+ }
+ @else if $unit == 'em' {
+ @return $value;
+ }
+ @else if $unit == 'pt' {
+ @return $value / 12pt * 1em;
+ }
+ @else {
+ @return $value;
+// @warn 'Everything is terrible! What have you done?!';
+ }
+}
+
+//////////////////////////////
+// Returns whether the feature can have a min/max pair
+//////////////////////////////
+$breakpoint-min-max-features: 'color',
+ 'color-index',
+ 'aspect-ratio',
+ 'device-aspect-ratio',
+ 'device-height',
+ 'device-width',
+ 'height',
+ 'monochrome',
+ 'resolution',
+ 'width';
+
+@function breakpoint-min-max($feature) {
+ @each $item in $breakpoint-min-max-features {
+ @if $feature == $item {
+ @return true;
+ }
+ }
+ @return false;
+}
+
+//////////////////////////////
+// Returns whether the feature can have a string value
+//////////////////////////////
+$breakpoint-string-features: 'orientation',
+ 'scan',
+ 'color',
+ 'aspect-ratio',
+ 'device-aspect-ratio',
+ 'pointer',
+ 'luminosity';
+
+@function breakpoint-string-value($feature) {
+ @each $item in $breakpoint-string-features {
+ @if breakpoint-min-max($item) {
+ @if $feature == 'min-#{$item}' or $feature == 'max-#{$item}' {
+ @return true;
+ }
+ }
+ @else if $feature == $item {
+ @return true;
+ }
+ }
+ @return false;
+}
+
+//////////////////////////////
+// Returns whether the feature is a media type
+//////////////////////////////
+$breakpoint-media-types: 'all',
+ 'braille',
+ 'embossed',
+ 'handheld',
+ 'print',
+ 'projection',
+ 'screen',
+ 'speech',
+ 'tty',
+ 'tv';
+
+@function breakpoint-is-media($feature) {
+ @each $media in $breakpoint-media-types {
+ @if ($feature == $media) or ($feature == 'not #{$media}') or ($feature == 'only #{$media}') {
+ @return true;
+ }
+ }
+
+ @return false;
+}
+
+//////////////////////////////
+// Returns whether the feature can stand alone
+//////////////////////////////
+$breakpoint-single-string-features: 'color',
+ 'color-index',
+ 'grid',
+ 'monochrome';
+
+@function breakpoint-single-string($feature) {
+ @each $item in $breakpoint-single-string-features {
+ @if $feature == $item {
+ @return true;
+ }
+ }
+ @return false;
+}
+
+//////////////////////////////
+// Returns whether the feature
+//////////////////////////////
+@function breakpoint-is-resolution($feature) {
+ $resolutions: 'device-pixel-ratio', 'dpr';
+
+ @if breakpoint-get('transform resolutions') {
+ $resolutions: append($resolutions, 'resolution');
+ }
+
+ @each $reso in $resolutions {
+ @if index($feature, $reso) or index($feature, 'min-#{$reso}') or index($feature, 'max-#{$reso}') {
+ @return true;
+ }
+ }
+
+ @return false;
+}
diff --git a/_sass/vendor/breakpoint/_legacy-settings.scss b/_sass/vendor/breakpoint/_legacy-settings.scss
new file mode 100644
index 0000000..e060ebe
--- /dev/null
+++ b/_sass/vendor/breakpoint/_legacy-settings.scss
@@ -0,0 +1,50 @@
+@mixin legacy-settings-warning {
+ $legacyVars: (
+ 'default-media': 'default media',
+ 'default-feature': 'default feature',
+ 'force-media-all': 'force all media type',
+ 'to-ems': 'to ems',
+ 'resolutions': 'transform resolutions',
+ 'no-queries': 'no queries',
+ 'no-query-fallbacks': 'no query fallbacks',
+ 'base-font-size': 'base font size',
+ 'legacy-syntax': 'legacy syntax'
+ );
+
+ @each $legacy, $new in $legacyVars {
+ @if global-variable-exists('breakpoint-' + $legacy) {
+ @warn "In order to avoid variable namspace collisions, we have updated the way to change settings for Breakpoint. Please change all instances of `$breakpoint-#{$legacy}: {{setting}}` to `@include breakpoint-set('#{$new}', {{setting}})`. Variable settings, as well as this warning will be deprecated in a future release."
+ }
+ };
+
+ //////////////////////////////
+ // Hand correct each setting
+ //////////////////////////////
+ @if global-variable-exists('breakpoint-default-media') and $breakpoint-default-media != breakpoint-get('default media') {
+ @include breakpoint-set('default media', $breakpoint-default-media);
+ }
+ @if global-variable-exists('breakpoint-default-feature') and $breakpoint-default-feature != breakpoint-get('default feature') {
+ @include breakpoint-set('default feature', $breakpoint-default-feature);
+ }
+ @if global-variable-exists('breakpoint-force-media-all') and $breakpoint-force-media-all != breakpoint-get('force all media type') {
+ @include breakpoint-set('force all media type', $breakpoint-force-media-all);
+ }
+ @if global-variable-exists('breakpoint-to-ems') and $breakpoint-to-ems != breakpoint-get('to ems') {
+ @include breakpoint-set('to ems', $breakpoint-to-ems);
+ }
+ @if global-variable-exists('breakpoint-resolutions') and $breakpoint-resolutions != breakpoint-get('transform resolutions') {
+ @include breakpoint-set('transform resolutions', $breakpoint-resolutions);
+ }
+ @if global-variable-exists('breakpoint-no-queries') and $breakpoint-no-queries != breakpoint-get('no queries') {
+ @include breakpoint-set('no queries', $breakpoint-no-queries);
+ }
+ @if global-variable-exists('breakpoint-no-query-fallbacks') and $breakpoint-no-query-fallbacks != breakpoint-get('no query fallbacks') {
+ @include breakpoint-set('no query fallbacks', $breakpoint-no-query-fallbacks);
+ }
+ @if global-variable-exists('breakpoint-base-font-size') and $breakpoint-base-font-size != breakpoint-get('base font size') {
+ @include breakpoint-set('base font size', $breakpoint-base-font-size);
+ }
+ @if global-variable-exists('breakpoint-legacy-syntax') and $breakpoint-legacy-syntax != breakpoint-get('legacy syntax') {
+ @include breakpoint-set('legacy syntax', $breakpoint-legacy-syntax);
+ }
+}
\ No newline at end of file
diff --git a/_sass/vendor/breakpoint/_no-query.scss b/_sass/vendor/breakpoint/_no-query.scss
new file mode 100644
index 0000000..0b5a81f
--- /dev/null
+++ b/_sass/vendor/breakpoint/_no-query.scss
@@ -0,0 +1,15 @@
+@function breakpoint-no-query($query) {
+ @if type-of($query) == 'list' {
+ $keyword: nth($query, 1);
+
+ @if type-of($keyword) == 'string' and ($keyword == 'no-query' or $keyword == 'no query' or $keyword == 'fallback') {
+ @return nth($query, 2);
+ }
+ @else {
+ @return false;
+ }
+ }
+ @else {
+ @return false;
+ }
+}
diff --git a/_sass/vendor/breakpoint/_parsers.scss b/_sass/vendor/breakpoint/_parsers.scss
new file mode 100644
index 0000000..f0b053f
--- /dev/null
+++ b/_sass/vendor/breakpoint/_parsers.scss
@@ -0,0 +1,215 @@
+//////////////////////////////
+// Import Parser Pieces
+//////////////////////////////
+@import "parsers/query";
+@import "parsers/single";
+@import "parsers/double";
+@import "parsers/triple";
+@import "parsers/resolution";
+
+$Memo-Exists: function-exists(memo-get) and function-exists(memo-set);
+
+//////////////////////////////
+// Breakpoint Function
+//////////////////////////////
+@function breakpoint($query, $contexts...) {
+ $run: true;
+ $return: ();
+
+ // Grab the Memo Output if Memoization can be a thing
+ @if $Memo-Exists {
+ $return: memo-get(breakpoint, breakpoint $query $contexts);
+
+ @if $return != null {
+ $run: false;
+ }
+ }
+
+ @if not $Memo-Exists or $run {
+ // Internal Variables
+ $query-string: '';
+ $query-fallback: false;
+ $return: ();
+
+ // Reserve Global Private Breakpoint Context
+ $holder-context: $private-breakpoint-context-holder;
+ $holder-query-count: $private-breakpoint-query-count;
+
+ // Reset Global Private Breakpoint Context
+ $private-breakpoint-context-holder: () !global;
+ $private-breakpoint-query-count: 0 !global;
+
+
+ // Test to see if it's a comma-separated list
+ $or-list: if(list-separator($query) == 'comma', true, false);
+
+
+ @if ($or-list == false and breakpoint-get('legacy syntax') == false) {
+ $query-string: breakpoint-parse($query);
+ }
+ @else {
+ $length: length($query);
+
+ $last: nth($query, $length);
+ $query-fallback: breakpoint-no-query($last);
+
+ @if ($query-fallback != false) {
+ $length: $length - 1;
+ }
+
+ @if (breakpoint-get('legacy syntax') == true) {
+ $mq: ();
+
+ @for $i from 1 through $length {
+ $mq: append($mq, nth($query, $i), comma);
+ }
+
+ $query-string: breakpoint-parse($mq);
+ }
+ @else {
+ $query-string: '';
+ @for $i from 1 through $length {
+ $query-string: $query-string + if($i == 1, '', ', ') + breakpoint-parse(nth($query, $i));
+ }
+ }
+ }
+
+ $return: ('query': $query-string,
+ 'fallback': $query-fallback,
+ 'context holder': $private-breakpoint-context-holder,
+ 'query count': $private-breakpoint-query-count
+ );
+ @if length($contexts) > 0 and nth($contexts, 1) != false {
+ @if $query-fallback != false {
+ $context-setter: private-breakpoint-set-context('no-query', $query-fallback);
+ }
+ $context-map: ();
+ @each $context in $contexts {
+ $context-map: map-merge($context-map, ($context: breakpoint-get-context($context)));
+ }
+ $return: map-merge($return, (context: $context-map));
+ }
+
+ // Reset Global Private Breakpoint Context
+ $private-breakpoint-context-holder: () !global;
+ $private-breakpoint-query-count: 0 !global;
+
+ @if $Memo-Exists {
+ $holder: memo-set(breakpoint, breakpoint $query $contexts, $return);
+ }
+ }
+
+ @return $return;
+}
+
+//////////////////////////////
+// General Breakpoint Parser
+//////////////////////////////
+@function breakpoint-parse($query) {
+ // Increase number of 'and' queries
+ $private-breakpoint-query-count: $private-breakpoint-query-count + 1 !global;
+
+ // Set up Media Type
+ $query-print: '';
+
+ $force-all: ((breakpoint-get('force all media type') == true) and (breakpoint-get('default media') == 'all'));
+ $empty-media: true;
+ @if ($force-all == true) or (breakpoint-get('default media') != 'all') {
+ // Force the print of the default media type if (force all is true and default media type is all) or (default media type is not all)
+ $query-print: breakpoint-get('default media');
+ $empty-media: false;
+ }
+
+
+ $query-resolution: false;
+
+ $query-holder: breakpoint-parse-query($query);
+
+
+
+ // Loop over each parsed out query and write it to $query-print
+ $first: true;
+
+ @each $feature in $query-holder {
+ $length: length($feature);
+
+ // Parse a single feature
+ @if ($length == 1) {
+ // Feature is currently a list, grab the actual value
+ $feature: nth($feature, 1);
+
+ // Media Type must by convention be the first item, so it's safe to flat override $query-print, which right now should only be the default media type
+ @if (breakpoint-is-media($feature)) {
+ @if ($force-all == true) or ($feature != 'all') {
+ // Force the print of the default media type if (force all is true and default media type is all) or (default media type is not all)
+ $query-print: $feature;
+ $empty-media: false;
+
+ // Set Context
+ $context-setter: private-breakpoint-set-context(media, $query-print);
+ }
+ }
+ @else {
+ $parsed: breakpoint-parse-single($feature, $empty-media, $first);
+ $query-print: '#{$query-print} #{$parsed}';
+ $first: false;
+ }
+ }
+ // Parse a double feature
+ @else if ($length == 2) {
+ @if (breakpoint-is-resolution($feature) != false) {
+ $query-resolution: $feature;
+ }
+ @else {
+ $parsed: null;
+ // If it's a string/number pair,
+ // we check to see if one is a single-string value,
+ // then we parse it as a normal double
+ $alpha: nth($feature, 1);
+ $beta: nth($feature, 2);
+ @if breakpoint-single-string($alpha) or breakpoint-single-string($beta) {
+ $parsed: breakpoint-parse-single($alpha, $empty-media, $first);
+ $query-print: '#{$query-print} #{$parsed}';
+ $first: false;
+ $parsed: breakpoint-parse-single($beta, $empty-media, $first);
+ $query-print: '#{$query-print} #{$parsed}';
+ }
+ @else {
+ $parsed: breakpoint-parse-double($feature, $empty-media, $first);
+ $query-print: '#{$query-print} #{$parsed}';
+ $first: false;
+ }
+ }
+ }
+ // Parse a triple feature
+ @else if ($length == 3) {
+ $parsed: breakpoint-parse-triple($feature, $empty-media, $first);
+ $query-print: '#{$query-print} #{$parsed}';
+ $first: false;
+ }
+
+ }
+
+ @if ($query-resolution != false) {
+ $query-print: breakpoint-build-resolution($query-print, $query-resolution, $empty-media, $first);
+ }
+
+ // Loop through each feature that's been detected so far and append 'false' to the the value list to increment their counters
+ @each $f, $v in $private-breakpoint-context-holder {
+ $v-holder: $v;
+ $length: length($v-holder);
+ @if length($v-holder) < $private-breakpoint-query-count {
+ @for $i from $length to $private-breakpoint-query-count {
+ @if $f == 'media' {
+ $v-holder: append($v-holder, breakpoint-get('default media'));
+ }
+ @else {
+ $v-holder: append($v-holder, false);
+ }
+ }
+ }
+ $private-breakpoint-context-holder: map-merge($private-breakpoint-context-holder, ($f: $v-holder)) !global;
+ }
+
+ @return $query-print;
+}
diff --git a/_sass/vendor/breakpoint/_respond-to.scss b/_sass/vendor/breakpoint/_respond-to.scss
new file mode 100644
index 0000000..e2462c5
--- /dev/null
+++ b/_sass/vendor/breakpoint/_respond-to.scss
@@ -0,0 +1,82 @@
+////////////////////////
+// Default the Breakpoints variable
+////////////////////////
+$breakpoints: () !default;
+$BREAKPOINTS: () !default;
+
+////////////////////////
+// Respond-to API Mixin
+////////////////////////
+@mixin respond-to($context, $no-query: false) {
+ @if length($breakpoints) > 0 and length($BREAKPOINTS) == 0 {
+ @warn "In order to avoid variable namespace collisions, we have updated the way to add breakpoints for respond-to. Please change all instances of `$breakpoints: add-breakpoint()` to `@include add-breakpoint()`. The `add-breakpoint()` function will be deprecated in a future release.";
+ $BREAKPOINTS: $breakpoints !global;
+ $breakpoints: () !global;
+ }
+
+ @if type-of($BREAKPOINTS) != 'map' {
+ // Just in case someone writes gibberish to the $breakpoints variable.
+ @warn "Your breakpoints aren't a map! `respond-to` expects a map. Please check the value of $BREAKPOINTS variable.";
+ @content;
+ }
+ @else if map-has-key($BREAKPOINTS, $context) {
+ @include breakpoint(map-get($BREAKPOINTS, $context), $no-query) {
+ @content;
+ }
+ }
+ @else if not map-has-key($BREAKPOINTS, $context) {
+ @warn "`#{$context}` isn't a defined breakpoint! Please add it using `$breakpoints: add-breakpoint(`#{$context}`, $value);`";
+ @content;
+ }
+ @else {
+ @warn "You haven't created any breakpoints yet! Make some already! `@include add-breakpoint($name, $bkpt)`";
+ @content;
+ }
+}
+
+//////////////////////////////
+// Add Breakpoint to Breakpoints
+// TODO: Remove function in next release
+//////////////////////////////
+@function add-breakpoint($name, $bkpt, $overwrite: false) {
+ $output: ($name: $bkpt);
+
+ @if length($breakpoints) == 0 {
+ @return $output;
+ }
+ @else {
+ @if map-has-key($breakpoints, $name) and $overwrite != true {
+ @warn "You already have a breakpoint named `#{$name}`, please choose another breakpoint name, or pass in `$overwrite: true` to overwrite the previous breakpoint.";
+ @return $breakpoints;
+ }
+ @else if not map-has-key($breakpoints, $name) or $overwrite == true {
+ @return map-merge($breakpoints, $output);
+ }
+ }
+}
+
+@mixin add-breakpoint($name, $bkpt, $overwrite: false) {
+ $output: ($name: $bkpt);
+
+ @if length($BREAKPOINTS) == 0 {
+ $BREAKPOINTS: $output !global;
+ }
+ @else {
+ @if map-has-key($BREAKPOINTS, $name) and $overwrite != true {
+ @warn "You already have a breakpoint named `#{$name}`, please choose another breakpoint name, or pass in `$overwrite: true` to overwrite the previous breakpoint.";
+ $BREAKPOINTS: $BREAKPOINTS !global;
+ }
+ @else if not map-has-key($BREAKPOINTS, $name) or $overwrite == true {
+ $BREAKPOINTS: map-merge($BREAKPOINTS, $output) !global;
+ }
+ }
+}
+
+@function get-breakpoint($name: false) {
+ @if $name == false {
+ @return $BREAKPOINTS;
+ }
+ @else {
+ @return map-get($BREAKPOINTS, $name);
+ }
+}
diff --git a/_sass/vendor/breakpoint/_settings.scss b/_sass/vendor/breakpoint/_settings.scss
new file mode 100644
index 0000000..05ee689
--- /dev/null
+++ b/_sass/vendor/breakpoint/_settings.scss
@@ -0,0 +1,71 @@
+//////////////////////////////
+// Has Setting
+//////////////////////////////
+@function breakpoint-has($setting) {
+ @if map-has-key($breakpoint, $setting) {
+ @return true;
+ }
+ @else {
+ @return false;
+ }
+}
+
+//////////////////////////////
+// Get Settings
+//////////////////////////////
+@function breakpoint-get($setting) {
+ @if breakpoint-has($setting) {
+ @return map-get($breakpoint, $setting);
+ }
+ @else {
+ @return map-get($Breakpoint-Settings, $setting);
+ }
+}
+
+//////////////////////////////
+// Set Settings
+//////////////////////////////
+@function breakpoint-set($setting, $value) {
+ @if (str-index($setting, '-') or str-index($setting, '_')) and str-index($setting, ' ') == null {
+ @warn "Words in Breakpoint settings should be separated by spaces, not dashes or underscores. Please replace dashes and underscores between words with spaces. Settings will not work as expected until changed.";
+ }
+ $breakpoint: map-merge($breakpoint, ($setting: $value)) !global;
+ @return true;
+}
+
+@mixin breakpoint-change($setting, $value) {
+ $breakpoint-change: breakpoint-set($setting, $value);
+}
+
+@mixin breakpoint-set($setting, $value) {
+ @include breakpoint-change($setting, $value);
+}
+
+@mixin bkpt-change($setting, $value) {
+ @include breakpoint-change($setting, $value);
+}
+@mixin bkpt-set($setting, $value) {
+ @include breakpoint-change($setting, $value);
+}
+
+//////////////////////////////
+// Remove Setting
+//////////////////////////////
+@function breakpoint-reset($settings...) {
+ @if length($settings) == 1 {
+ $settings: nth($settings, 1);
+ }
+
+ @each $setting in $settings {
+ $breakpoint: map-remove($breakpoint, $setting) !global;
+ }
+ @return true;
+}
+
+@mixin breakpoint-reset($settings...) {
+ $breakpoint-reset: breakpoint-reset($settings);
+}
+
+@mixin bkpt-reset($settings...) {
+ $breakpoint-reset: breakpoint-reset($settings);
+}
\ No newline at end of file
diff --git a/_sass/vendor/breakpoint/parsers/_double.scss b/_sass/vendor/breakpoint/parsers/_double.scss
new file mode 100644
index 0000000..24580c1
--- /dev/null
+++ b/_sass/vendor/breakpoint/parsers/_double.scss
@@ -0,0 +1,33 @@
+//////////////////////////////
+// Import Pieces
+//////////////////////////////
+@import "double/default-pair";
+@import "double/double-string";
+@import "double/default";
+
+@function breakpoint-parse-double($feature, $empty-media, $first) {
+ $parsed: '';
+ $leader: '';
+ // If we're forcing
+ @if not ($empty-media) or not ($first) {
+ $leader: 'and ';
+ }
+
+ $first: nth($feature, 1);
+ $second: nth($feature, 2);
+
+ // If we've got two numbers, we know we need to use the default pair because there are no media queries that has a media feature that is a number
+ @if type-of($first) == 'number' and type-of($second) == 'number' {
+ $parsed: breakpoint-parse-default-pair($first, $second);
+ }
+ // If they are both strings, we send it through the string parser
+ @else if type-of($first) == 'string' and type-of($second) == 'string' {
+ $parsed: breakpoint-parse-double-string($first, $second);
+ }
+ // If it's a string/number pair, we parse it as a normal double
+ @else {
+ $parsed: breakpoint-parse-double-default($first, $second);
+ }
+
+ @return $leader + $parsed;
+}
diff --git a/_sass/vendor/breakpoint/parsers/_query.scss b/_sass/vendor/breakpoint/parsers/_query.scss
new file mode 100644
index 0000000..b138b39
--- /dev/null
+++ b/_sass/vendor/breakpoint/parsers/_query.scss
@@ -0,0 +1,82 @@
+@function breakpoint-parse-query($query) {
+ // Parse features out of an individual query
+ $feature-holder: ();
+ $query-holder: ();
+ $length: length($query);
+
+ @if $length == 2 {
+ // If we've got a string/number, number/string, check to see if it's a valid string/number pair or two singles
+ @if (type-of(nth($query, 1)) == 'string' and type-of(nth($query, 2)) == 'number') or (type-of(nth($query, 1)) == 'number' and type-of(nth($query, 2)) == 'string') {
+
+ $number: '';
+ $value: '';
+
+ @if type-of(nth($query, 1)) == 'string' {
+ $number: nth($query, 2);
+ $value: nth($query, 1);
+ }
+ @else {
+ $number: nth($query, 1);
+ $value: nth($query, 2);
+ }
+
+ // If the string value can be a single value, check to see if the number passed in is a valid input for said single value. Fortunately, all current single-value options only accept unitless numbers, so this check is easy.
+ @if breakpoint-single-string($value) {
+ @if unitless($number) {
+ $feature-holder: append($value, $number, space);
+ $query-holder: append($query-holder, $feature-holder, comma);
+ @return $query-holder;
+ }
+ }
+ // If the string is a media type, split the query
+ @if breakpoint-is-media($value) {
+ $query-holder: append($query-holder, nth($query, 1));
+ $query-holder: append($query-holder, nth($query, 2));
+ @return $query-holder;
+ }
+ // If it's not a single feature, we're just going to assume it's a proper string/value pair, and roll with it.
+ @else {
+ $feature-holder: append($value, $number, space);
+ $query-holder: append($query-holder, $feature-holder, comma);
+ @return $query-holder;
+ }
+
+ }
+ // If they're both numbers, we assume it's a double and roll with that
+ @else if (type-of(nth($query, 1)) == 'number' and type-of(nth($query, 2)) == 'number') {
+ $feature-holder: append(nth($query, 1), nth($query, 2), space);
+ $query-holder: append($query-holder, $feature-holder, comma);
+ @return $query-holder;
+ }
+ // If they're both strings and neither are singles, we roll with that.
+ @else if (type-of(nth($query, 1)) == 'string' and type-of(nth($query, 2)) == 'string') {
+ @if not breakpoint-single-string(nth($query, 1)) and not breakpoint-single-string(nth($query, 2)) {
+ $feature-holder: append(nth($query, 1), nth($query, 2), space);
+ $query-holder: append($query-holder, $feature-holder, comma);
+ @return $query-holder;
+ }
+ }
+ }
+ @else if $length == 3 {
+ // If we've got three items and none is a list, we check to see
+ @if type-of(nth($query, 1)) != 'list' and type-of(nth($query, 2)) != 'list' and type-of(nth($query, 3)) != 'list' {
+ // If none of the items are single string values and none of the values are media values, we're good.
+ @if (not breakpoint-single-string(nth($query, 1)) and not breakpoint-single-string(nth($query, 2)) and not breakpoint-single-string(nth($query, 3))) and ((not breakpoint-is-media(nth($query, 1)) and not breakpoint-is-media(nth($query, 2)) and not breakpoint-is-media(nth($query, 3)))) {
+ $feature-holder: append(nth($query, 1), nth($query, 2), space);
+ $feature-holder: append($feature-holder, nth($query, 3), space);
+ $query-holder: append($query-holder, $feature-holder, comma);
+ @return $query-holder;
+ }
+ // let's check to see if the first item is a media type
+ @else if breakpoint-is-media(nth($query, 1)) {
+ $query-holder: append($query-holder, nth($query, 1));
+ $feature-holder: append(nth($query, 2), nth($query, 3), space);
+ $query-holder: append($query-holder, $feature-holder);
+ @return $query-holder;
+ }
+ }
+ }
+
+ // If it's a single item, or if it's not a special case double or triple, we can simply return the query.
+ @return $query;
+}
diff --git a/_sass/vendor/breakpoint/parsers/_resolution.scss b/_sass/vendor/breakpoint/parsers/_resolution.scss
new file mode 100644
index 0000000..19769ad
--- /dev/null
+++ b/_sass/vendor/breakpoint/parsers/_resolution.scss
@@ -0,0 +1,31 @@
+@import "resolution/resolution";
+
+@function breakpoint-build-resolution($query-print, $query-resolution, $empty-media, $first) {
+ $leader: '';
+ // If we're forcing
+ @if not ($empty-media) or not ($first) {
+ $leader: 'and ';
+ }
+
+ @if breakpoint-get('transform resolutions') and $query-resolution {
+ $resolutions: breakpoint-make-resolutions($query-resolution);
+ $length: length($resolutions);
+ $query-holder: '';
+
+ @for $i from 1 through $length {
+ $query: '#{$query-print} #{$leader}#{nth($resolutions, $i)}';
+ @if $i == 1 {
+ $query-holder: $query;
+ }
+ @else {
+ $query-holder: '#{$query-holder}, #{$query}';
+ }
+ }
+
+ @return $query-holder;
+ }
+ @else {
+ // Return with attached resolution
+ @return $query-print;
+ }
+}
diff --git a/_sass/vendor/breakpoint/parsers/_single.scss b/_sass/vendor/breakpoint/parsers/_single.scss
new file mode 100644
index 0000000..d9fd764
--- /dev/null
+++ b/_sass/vendor/breakpoint/parsers/_single.scss
@@ -0,0 +1,26 @@
+//////////////////////////////
+// Import Pieces
+//////////////////////////////
+@import "single/default";
+
+@function breakpoint-parse-single($feature, $empty-media, $first) {
+ $parsed: '';
+ $leader: '';
+ // If we're forcing
+ @if not ($empty-media) or not ($first) {
+ $leader: 'and ';
+ }
+
+ // If it's a single feature that can stand alone, we let it
+ @if (breakpoint-single-string($feature)) {
+ $parsed: $feature;
+ // Set Context
+ $context-setter: private-breakpoint-set-context($feature, $feature);
+ }
+ // If it's not a stand alone feature, we pass it off to the default handler.
+ @else {
+ $parsed: breakpoint-parse-default($feature);
+ }
+
+ @return $leader + '(' + $parsed + ')';
+}
diff --git a/_sass/vendor/breakpoint/parsers/_triple.scss b/_sass/vendor/breakpoint/parsers/_triple.scss
new file mode 100644
index 0000000..e273206
--- /dev/null
+++ b/_sass/vendor/breakpoint/parsers/_triple.scss
@@ -0,0 +1,36 @@
+//////////////////////////////
+// Import Pieces
+//////////////////////////////
+@import "triple/default";
+
+@function breakpoint-parse-triple($feature, $empty-media, $first) {
+ $parsed: '';
+ $leader: '';
+
+ // If we're forcing
+ @if not ($empty-media) or not ($first) {
+ $leader: 'and ';
+ }
+
+ // separate the string features from the value numbers
+ $string: null;
+ $numbers: null;
+ @each $val in $feature {
+ @if type-of($val) == string {
+ $string: $val;
+ }
+ @else {
+ @if type-of($numbers) == 'null' {
+ $numbers: $val;
+ }
+ @else {
+ $numbers: append($numbers, $val);
+ }
+ }
+ }
+
+ $parsed: breakpoint-parse-triple-default($string, nth($numbers, 1), nth($numbers, 2));
+
+ @return $leader + $parsed;
+
+}
diff --git a/_sass/vendor/breakpoint/parsers/double/_default-pair.scss b/_sass/vendor/breakpoint/parsers/double/_default-pair.scss
new file mode 100644
index 0000000..f88432c
--- /dev/null
+++ b/_sass/vendor/breakpoint/parsers/double/_default-pair.scss
@@ -0,0 +1,21 @@
+@function breakpoint-parse-default-pair($first, $second) {
+ $default: breakpoint-get('default pair');
+ $min: '';
+ $max: '';
+
+ // Sort into min and max
+ $min: min($first, $second);
+ $max: max($first, $second);
+
+ // Set Context
+ $context-setter: private-breakpoint-set-context(min-#{$default}, $min);
+ $context-setter: private-breakpoint-set-context(max-#{$default}, $max);
+
+ // Make them EMs if need be
+ @if (breakpoint-get('to ems') == true) {
+ $min: breakpoint-to-base-em($min);
+ $max: breakpoint-to-base-em($max);
+ }
+
+ @return '(min-#{$default}: #{$min}) and (max-#{$default}: #{$max})';
+}
diff --git a/_sass/vendor/breakpoint/parsers/double/_default.scss b/_sass/vendor/breakpoint/parsers/double/_default.scss
new file mode 100644
index 0000000..73190ed
--- /dev/null
+++ b/_sass/vendor/breakpoint/parsers/double/_default.scss
@@ -0,0 +1,22 @@
+@function breakpoint-parse-double-default($first, $second) {
+ $feature: '';
+ $value: '';
+
+ @if type-of($first) == 'string' {
+ $feature: $first;
+ $value: $second;
+ }
+ @else {
+ $feature: $second;
+ $value: $first;
+ }
+
+ // Set Context
+ $context-setter: private-breakpoint-set-context($feature, $value);
+
+ @if (breakpoint-get('to ems') == true) {
+ $value: breakpoint-to-base-em($value);
+ }
+
+ @return '(#{$feature}: #{$value})'
+}
diff --git a/_sass/vendor/breakpoint/parsers/double/_double-string.scss b/_sass/vendor/breakpoint/parsers/double/_double-string.scss
new file mode 100644
index 0000000..c6fd0cb
--- /dev/null
+++ b/_sass/vendor/breakpoint/parsers/double/_double-string.scss
@@ -0,0 +1,22 @@
+@function breakpoint-parse-double-string($first, $second) {
+ $feature: '';
+ $value: '';
+
+ // Test to see which is the feature and which is the value
+ @if (breakpoint-string-value($first) == true) {
+ $feature: $first;
+ $value: $second;
+ }
+ @else if (breakpoint-string-value($second) == true) {
+ $feature: $second;
+ $value: $first;
+ }
+ @else {
+ @warn "Neither #{$first} nor #{$second} is a valid media query name.";
+ }
+
+ // Set Context
+ $context-setter: private-breakpoint-set-context($feature, $value);
+
+ @return '(#{$feature}: #{$value})';
+}
\ No newline at end of file
diff --git a/_sass/vendor/breakpoint/parsers/resolution/_resolution.scss b/_sass/vendor/breakpoint/parsers/resolution/_resolution.scss
new file mode 100644
index 0000000..3680421
--- /dev/null
+++ b/_sass/vendor/breakpoint/parsers/resolution/_resolution.scss
@@ -0,0 +1,60 @@
+@function breakpoint-make-resolutions($resolution) {
+ $length: length($resolution);
+
+ $output: ();
+
+ @if $length == 2 {
+ $feature: '';
+ $value: '';
+
+ // Find which is number
+ @if type-of(nth($resolution, 1)) == 'number' {
+ $value: nth($resolution, 1);
+ }
+ @else {
+ $value: nth($resolution, 2);
+ }
+
+ // Determine min/max/standard
+ @if index($resolution, 'min-resolution') {
+ $feature: 'min-';
+ }
+ @else if index($resolution, 'max-resolution') {
+ $feature: 'max-';
+ }
+
+ $standard: '(#{$feature}resolution: #{$value})';
+
+ // If we're not dealing with dppx,
+ @if unit($value) != 'dppx' {
+ $base: 96dpi;
+ @if unit($value) == 'dpcm' {
+ $base: 243.84dpcm;
+ }
+ // Write out feature tests
+ $webkit: '';
+ $moz: '';
+ $webkit: '(-webkit-#{$feature}device-pixel-ratio: #{$value / $base})';
+ $moz: '(#{$feature}-moz-device-pixel-ratio: #{$value / $base})';
+ // Append to output
+ $output: append($output, $standard, space);
+ $output: append($output, $webkit, space);
+ $output: append($output, $moz, space);
+ }
+ @else {
+ $webkit: '';
+ $moz: '';
+ $webkit: '(-webkit-#{$feature}device-pixel-ratio: #{$value / 1dppx})';
+ $moz: '(#{$feature}-moz-device-pixel-ratio: #{$value / 1dppx})';
+ $fallback: '(#{$feature}resolution: #{$value / 1dppx * 96dpi})';
+ // Append to output
+ $output: append($output, $standard, space);
+ $output: append($output, $webkit, space);
+ $output: append($output, $moz, space);
+ $output: append($output, $fallback, space);
+ }
+
+ }
+
+ @return $output;
+}
diff --git a/_sass/vendor/breakpoint/parsers/single/_default.scss b/_sass/vendor/breakpoint/parsers/single/_default.scss
new file mode 100644
index 0000000..503ef42
--- /dev/null
+++ b/_sass/vendor/breakpoint/parsers/single/_default.scss
@@ -0,0 +1,13 @@
+@function breakpoint-parse-default($feature) {
+ $default: breakpoint-get('default feature');
+
+ // Set Context
+ $context-setter: private-breakpoint-set-context($default, $feature);
+
+ @if (breakpoint-get('to ems') == true) and (type-of($feature) == 'number') {
+ @return '#{$default}: #{breakpoint-to-base-em($feature)}';
+ }
+ @else {
+ @return '#{$default}: #{$feature}';
+ }
+}
diff --git a/_sass/vendor/breakpoint/parsers/triple/_default.scss b/_sass/vendor/breakpoint/parsers/triple/_default.scss
new file mode 100644
index 0000000..7fa418d
--- /dev/null
+++ b/_sass/vendor/breakpoint/parsers/triple/_default.scss
@@ -0,0 +1,18 @@
+@function breakpoint-parse-triple-default($feature, $first, $second) {
+
+ // Sort into min and max
+ $min: min($first, $second);
+ $max: max($first, $second);
+
+ // Set Context
+ $context-setter: private-breakpoint-set-context(min-#{$feature}, $min);
+ $context-setter: private-breakpoint-set-context(max-#{$feature}, $max);
+
+ // Make them EMs if need be
+ @if (breakpoint-get('to ems') == true) {
+ $min: breakpoint-to-base-em($min);
+ $max: breakpoint-to-base-em($max);
+ }
+
+ @return '(min-#{$feature}: #{$min}) and (max-#{$feature}: #{$max})';
+}
diff --git a/_sass/vendor/font-awesome/_animated.scss b/_sass/vendor/font-awesome/_animated.scss
new file mode 100644
index 0000000..7c7c0e1
--- /dev/null
+++ b/_sass/vendor/font-awesome/_animated.scss
@@ -0,0 +1,20 @@
+// Animated Icons
+// --------------------------
+
+.#{$fa-css-prefix}-spin {
+ animation: fa-spin 2s infinite linear;
+}
+
+.#{$fa-css-prefix}-pulse {
+ animation: fa-spin 1s infinite steps(8);
+}
+
+@keyframes fa-spin {
+ 0% {
+ transform: rotate(0deg);
+ }
+
+ 100% {
+ transform: rotate(360deg);
+ }
+}
diff --git a/_sass/vendor/font-awesome/_bordered-pulled.scss b/_sass/vendor/font-awesome/_bordered-pulled.scss
new file mode 100644
index 0000000..c8c4274
--- /dev/null
+++ b/_sass/vendor/font-awesome/_bordered-pulled.scss
@@ -0,0 +1,20 @@
+// Bordered & Pulled
+// -------------------------
+
+.#{$fa-css-prefix}-border {
+ border: solid .08em $fa-border-color;
+ border-radius: .1em;
+ padding: .2em .25em .15em;
+}
+
+.#{$fa-css-prefix}-pull-left { float: left; }
+.#{$fa-css-prefix}-pull-right { float: right; }
+
+.#{$fa-css-prefix},
+.fas,
+.far,
+.fal,
+.fab {
+ &.#{$fa-css-prefix}-pull-left { margin-right: .3em; }
+ &.#{$fa-css-prefix}-pull-right { margin-left: .3em; }
+}
diff --git a/_sass/vendor/font-awesome/_core.scss b/_sass/vendor/font-awesome/_core.scss
new file mode 100644
index 0000000..a4ee7e8
--- /dev/null
+++ b/_sass/vendor/font-awesome/_core.scss
@@ -0,0 +1,20 @@
+// Base Class Definition
+// -------------------------
+
+.#{$fa-css-prefix},
+.fas,
+.far,
+.fal,
+.fab {
+ -moz-osx-font-smoothing: grayscale;
+ -webkit-font-smoothing: antialiased;
+ display: inline-block;
+ font-style: normal;
+ font-variant: normal;
+ text-rendering: auto;
+ line-height: 1;
+}
+
+%fa-icon {
+ @include fa-icon;
+}
diff --git a/_sass/vendor/font-awesome/_fixed-width.scss b/_sass/vendor/font-awesome/_fixed-width.scss
new file mode 100644
index 0000000..970641f
--- /dev/null
+++ b/_sass/vendor/font-awesome/_fixed-width.scss
@@ -0,0 +1,6 @@
+// Fixed Width Icons
+// -------------------------
+.#{$fa-css-prefix}-fw {
+ text-align: center;
+ width: $fa-fw-width;
+}
diff --git a/_sass/vendor/font-awesome/_icons.scss b/_sass/vendor/font-awesome/_icons.scss
new file mode 100644
index 0000000..f263728
--- /dev/null
+++ b/_sass/vendor/font-awesome/_icons.scss
@@ -0,0 +1,1262 @@
+/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
+readers do not read off random characters that represent icons */
+
+.#{$fa-css-prefix}-500px:before { content: fa-content($fa-var-500px); }
+.#{$fa-css-prefix}-accessible-icon:before { content: fa-content($fa-var-accessible-icon); }
+.#{$fa-css-prefix}-accusoft:before { content: fa-content($fa-var-accusoft); }
+.#{$fa-css-prefix}-acquisitions-incorporated:before { content: fa-content($fa-var-acquisitions-incorporated); }
+.#{$fa-css-prefix}-ad:before { content: fa-content($fa-var-ad); }
+.#{$fa-css-prefix}-address-book:before { content: fa-content($fa-var-address-book); }
+.#{$fa-css-prefix}-address-card:before { content: fa-content($fa-var-address-card); }
+.#{$fa-css-prefix}-adjust:before { content: fa-content($fa-var-adjust); }
+.#{$fa-css-prefix}-adn:before { content: fa-content($fa-var-adn); }
+.#{$fa-css-prefix}-adversal:before { content: fa-content($fa-var-adversal); }
+.#{$fa-css-prefix}-affiliatetheme:before { content: fa-content($fa-var-affiliatetheme); }
+.#{$fa-css-prefix}-air-freshener:before { content: fa-content($fa-var-air-freshener); }
+.#{$fa-css-prefix}-algolia:before { content: fa-content($fa-var-algolia); }
+.#{$fa-css-prefix}-align-center:before { content: fa-content($fa-var-align-center); }
+.#{$fa-css-prefix}-align-justify:before { content: fa-content($fa-var-align-justify); }
+.#{$fa-css-prefix}-align-left:before { content: fa-content($fa-var-align-left); }
+.#{$fa-css-prefix}-align-right:before { content: fa-content($fa-var-align-right); }
+.#{$fa-css-prefix}-alipay:before { content: fa-content($fa-var-alipay); }
+.#{$fa-css-prefix}-allergies:before { content: fa-content($fa-var-allergies); }
+.#{$fa-css-prefix}-amazon:before { content: fa-content($fa-var-amazon); }
+.#{$fa-css-prefix}-amazon-pay:before { content: fa-content($fa-var-amazon-pay); }
+.#{$fa-css-prefix}-ambulance:before { content: fa-content($fa-var-ambulance); }
+.#{$fa-css-prefix}-american-sign-language-interpreting:before { content: fa-content($fa-var-american-sign-language-interpreting); }
+.#{$fa-css-prefix}-amilia:before { content: fa-content($fa-var-amilia); }
+.#{$fa-css-prefix}-anchor:before { content: fa-content($fa-var-anchor); }
+.#{$fa-css-prefix}-android:before { content: fa-content($fa-var-android); }
+.#{$fa-css-prefix}-angellist:before { content: fa-content($fa-var-angellist); }
+.#{$fa-css-prefix}-angle-double-down:before { content: fa-content($fa-var-angle-double-down); }
+.#{$fa-css-prefix}-angle-double-left:before { content: fa-content($fa-var-angle-double-left); }
+.#{$fa-css-prefix}-angle-double-right:before { content: fa-content($fa-var-angle-double-right); }
+.#{$fa-css-prefix}-angle-double-up:before { content: fa-content($fa-var-angle-double-up); }
+.#{$fa-css-prefix}-angle-down:before { content: fa-content($fa-var-angle-down); }
+.#{$fa-css-prefix}-angle-left:before { content: fa-content($fa-var-angle-left); }
+.#{$fa-css-prefix}-angle-right:before { content: fa-content($fa-var-angle-right); }
+.#{$fa-css-prefix}-angle-up:before { content: fa-content($fa-var-angle-up); }
+.#{$fa-css-prefix}-angry:before { content: fa-content($fa-var-angry); }
+.#{$fa-css-prefix}-angrycreative:before { content: fa-content($fa-var-angrycreative); }
+.#{$fa-css-prefix}-angular:before { content: fa-content($fa-var-angular); }
+.#{$fa-css-prefix}-ankh:before { content: fa-content($fa-var-ankh); }
+.#{$fa-css-prefix}-app-store:before { content: fa-content($fa-var-app-store); }
+.#{$fa-css-prefix}-app-store-ios:before { content: fa-content($fa-var-app-store-ios); }
+.#{$fa-css-prefix}-apper:before { content: fa-content($fa-var-apper); }
+.#{$fa-css-prefix}-apple:before { content: fa-content($fa-var-apple); }
+.#{$fa-css-prefix}-apple-alt:before { content: fa-content($fa-var-apple-alt); }
+.#{$fa-css-prefix}-apple-pay:before { content: fa-content($fa-var-apple-pay); }
+.#{$fa-css-prefix}-archive:before { content: fa-content($fa-var-archive); }
+.#{$fa-css-prefix}-archway:before { content: fa-content($fa-var-archway); }
+.#{$fa-css-prefix}-arrow-alt-circle-down:before { content: fa-content($fa-var-arrow-alt-circle-down); }
+.#{$fa-css-prefix}-arrow-alt-circle-left:before { content: fa-content($fa-var-arrow-alt-circle-left); }
+.#{$fa-css-prefix}-arrow-alt-circle-right:before { content: fa-content($fa-var-arrow-alt-circle-right); }
+.#{$fa-css-prefix}-arrow-alt-circle-up:before { content: fa-content($fa-var-arrow-alt-circle-up); }
+.#{$fa-css-prefix}-arrow-circle-down:before { content: fa-content($fa-var-arrow-circle-down); }
+.#{$fa-css-prefix}-arrow-circle-left:before { content: fa-content($fa-var-arrow-circle-left); }
+.#{$fa-css-prefix}-arrow-circle-right:before { content: fa-content($fa-var-arrow-circle-right); }
+.#{$fa-css-prefix}-arrow-circle-up:before { content: fa-content($fa-var-arrow-circle-up); }
+.#{$fa-css-prefix}-arrow-down:before { content: fa-content($fa-var-arrow-down); }
+.#{$fa-css-prefix}-arrow-left:before { content: fa-content($fa-var-arrow-left); }
+.#{$fa-css-prefix}-arrow-right:before { content: fa-content($fa-var-arrow-right); }
+.#{$fa-css-prefix}-arrow-up:before { content: fa-content($fa-var-arrow-up); }
+.#{$fa-css-prefix}-arrows-alt:before { content: fa-content($fa-var-arrows-alt); }
+.#{$fa-css-prefix}-arrows-alt-h:before { content: fa-content($fa-var-arrows-alt-h); }
+.#{$fa-css-prefix}-arrows-alt-v:before { content: fa-content($fa-var-arrows-alt-v); }
+.#{$fa-css-prefix}-assistive-listening-systems:before { content: fa-content($fa-var-assistive-listening-systems); }
+.#{$fa-css-prefix}-asterisk:before { content: fa-content($fa-var-asterisk); }
+.#{$fa-css-prefix}-asymmetrik:before { content: fa-content($fa-var-asymmetrik); }
+.#{$fa-css-prefix}-at:before { content: fa-content($fa-var-at); }
+.#{$fa-css-prefix}-atlas:before { content: fa-content($fa-var-atlas); }
+.#{$fa-css-prefix}-atom:before { content: fa-content($fa-var-atom); }
+.#{$fa-css-prefix}-audible:before { content: fa-content($fa-var-audible); }
+.#{$fa-css-prefix}-audio-description:before { content: fa-content($fa-var-audio-description); }
+.#{$fa-css-prefix}-autoprefixer:before { content: fa-content($fa-var-autoprefixer); }
+.#{$fa-css-prefix}-avianex:before { content: fa-content($fa-var-avianex); }
+.#{$fa-css-prefix}-aviato:before { content: fa-content($fa-var-aviato); }
+.#{$fa-css-prefix}-award:before { content: fa-content($fa-var-award); }
+.#{$fa-css-prefix}-aws:before { content: fa-content($fa-var-aws); }
+.#{$fa-css-prefix}-backspace:before { content: fa-content($fa-var-backspace); }
+.#{$fa-css-prefix}-backward:before { content: fa-content($fa-var-backward); }
+.#{$fa-css-prefix}-balance-scale:before { content: fa-content($fa-var-balance-scale); }
+.#{$fa-css-prefix}-ban:before { content: fa-content($fa-var-ban); }
+.#{$fa-css-prefix}-band-aid:before { content: fa-content($fa-var-band-aid); }
+.#{$fa-css-prefix}-bandcamp:before { content: fa-content($fa-var-bandcamp); }
+.#{$fa-css-prefix}-barcode:before { content: fa-content($fa-var-barcode); }
+.#{$fa-css-prefix}-bars:before { content: fa-content($fa-var-bars); }
+.#{$fa-css-prefix}-baseball-ball:before { content: fa-content($fa-var-baseball-ball); }
+.#{$fa-css-prefix}-basketball-ball:before { content: fa-content($fa-var-basketball-ball); }
+.#{$fa-css-prefix}-bath:before { content: fa-content($fa-var-bath); }
+.#{$fa-css-prefix}-battery-empty:before { content: fa-content($fa-var-battery-empty); }
+.#{$fa-css-prefix}-battery-full:before { content: fa-content($fa-var-battery-full); }
+.#{$fa-css-prefix}-battery-half:before { content: fa-content($fa-var-battery-half); }
+.#{$fa-css-prefix}-battery-quarter:before { content: fa-content($fa-var-battery-quarter); }
+.#{$fa-css-prefix}-battery-three-quarters:before { content: fa-content($fa-var-battery-three-quarters); }
+.#{$fa-css-prefix}-bed:before { content: fa-content($fa-var-bed); }
+.#{$fa-css-prefix}-beer:before { content: fa-content($fa-var-beer); }
+.#{$fa-css-prefix}-behance:before { content: fa-content($fa-var-behance); }
+.#{$fa-css-prefix}-behance-square:before { content: fa-content($fa-var-behance-square); }
+.#{$fa-css-prefix}-bell:before { content: fa-content($fa-var-bell); }
+.#{$fa-css-prefix}-bell-slash:before { content: fa-content($fa-var-bell-slash); }
+.#{$fa-css-prefix}-bezier-curve:before { content: fa-content($fa-var-bezier-curve); }
+.#{$fa-css-prefix}-bible:before { content: fa-content($fa-var-bible); }
+.#{$fa-css-prefix}-bicycle:before { content: fa-content($fa-var-bicycle); }
+.#{$fa-css-prefix}-bimobject:before { content: fa-content($fa-var-bimobject); }
+.#{$fa-css-prefix}-binoculars:before { content: fa-content($fa-var-binoculars); }
+.#{$fa-css-prefix}-birthday-cake:before { content: fa-content($fa-var-birthday-cake); }
+.#{$fa-css-prefix}-bitbucket:before { content: fa-content($fa-var-bitbucket); }
+.#{$fa-css-prefix}-bitcoin:before { content: fa-content($fa-var-bitcoin); }
+.#{$fa-css-prefix}-bity:before { content: fa-content($fa-var-bity); }
+.#{$fa-css-prefix}-black-tie:before { content: fa-content($fa-var-black-tie); }
+.#{$fa-css-prefix}-blackberry:before { content: fa-content($fa-var-blackberry); }
+.#{$fa-css-prefix}-blender:before { content: fa-content($fa-var-blender); }
+.#{$fa-css-prefix}-blender-phone:before { content: fa-content($fa-var-blender-phone); }
+.#{$fa-css-prefix}-blind:before { content: fa-content($fa-var-blind); }
+.#{$fa-css-prefix}-blogger:before { content: fa-content($fa-var-blogger); }
+.#{$fa-css-prefix}-blogger-b:before { content: fa-content($fa-var-blogger-b); }
+.#{$fa-css-prefix}-bluetooth:before { content: fa-content($fa-var-bluetooth); }
+.#{$fa-css-prefix}-bluetooth-b:before { content: fa-content($fa-var-bluetooth-b); }
+.#{$fa-css-prefix}-bold:before { content: fa-content($fa-var-bold); }
+.#{$fa-css-prefix}-bolt:before { content: fa-content($fa-var-bolt); }
+.#{$fa-css-prefix}-bomb:before { content: fa-content($fa-var-bomb); }
+.#{$fa-css-prefix}-bone:before { content: fa-content($fa-var-bone); }
+.#{$fa-css-prefix}-bong:before { content: fa-content($fa-var-bong); }
+.#{$fa-css-prefix}-book:before { content: fa-content($fa-var-book); }
+.#{$fa-css-prefix}-book-dead:before { content: fa-content($fa-var-book-dead); }
+.#{$fa-css-prefix}-book-open:before { content: fa-content($fa-var-book-open); }
+.#{$fa-css-prefix}-book-reader:before { content: fa-content($fa-var-book-reader); }
+.#{$fa-css-prefix}-bookmark:before { content: fa-content($fa-var-bookmark); }
+.#{$fa-css-prefix}-bowling-ball:before { content: fa-content($fa-var-bowling-ball); }
+.#{$fa-css-prefix}-box:before { content: fa-content($fa-var-box); }
+.#{$fa-css-prefix}-box-open:before { content: fa-content($fa-var-box-open); }
+.#{$fa-css-prefix}-boxes:before { content: fa-content($fa-var-boxes); }
+.#{$fa-css-prefix}-braille:before { content: fa-content($fa-var-braille); }
+.#{$fa-css-prefix}-brain:before { content: fa-content($fa-var-brain); }
+.#{$fa-css-prefix}-briefcase:before { content: fa-content($fa-var-briefcase); }
+.#{$fa-css-prefix}-briefcase-medical:before { content: fa-content($fa-var-briefcase-medical); }
+.#{$fa-css-prefix}-broadcast-tower:before { content: fa-content($fa-var-broadcast-tower); }
+.#{$fa-css-prefix}-broom:before { content: fa-content($fa-var-broom); }
+.#{$fa-css-prefix}-brush:before { content: fa-content($fa-var-brush); }
+.#{$fa-css-prefix}-btc:before { content: fa-content($fa-var-btc); }
+.#{$fa-css-prefix}-bug:before { content: fa-content($fa-var-bug); }
+.#{$fa-css-prefix}-building:before { content: fa-content($fa-var-building); }
+.#{$fa-css-prefix}-bullhorn:before { content: fa-content($fa-var-bullhorn); }
+.#{$fa-css-prefix}-bullseye:before { content: fa-content($fa-var-bullseye); }
+.#{$fa-css-prefix}-burn:before { content: fa-content($fa-var-burn); }
+.#{$fa-css-prefix}-buromobelexperte:before { content: fa-content($fa-var-buromobelexperte); }
+.#{$fa-css-prefix}-bus:before { content: fa-content($fa-var-bus); }
+.#{$fa-css-prefix}-bus-alt:before { content: fa-content($fa-var-bus-alt); }
+.#{$fa-css-prefix}-business-time:before { content: fa-content($fa-var-business-time); }
+.#{$fa-css-prefix}-buysellads:before { content: fa-content($fa-var-buysellads); }
+.#{$fa-css-prefix}-calculator:before { content: fa-content($fa-var-calculator); }
+.#{$fa-css-prefix}-calendar:before { content: fa-content($fa-var-calendar); }
+.#{$fa-css-prefix}-calendar-alt:before { content: fa-content($fa-var-calendar-alt); }
+.#{$fa-css-prefix}-calendar-check:before { content: fa-content($fa-var-calendar-check); }
+.#{$fa-css-prefix}-calendar-minus:before { content: fa-content($fa-var-calendar-minus); }
+.#{$fa-css-prefix}-calendar-plus:before { content: fa-content($fa-var-calendar-plus); }
+.#{$fa-css-prefix}-calendar-times:before { content: fa-content($fa-var-calendar-times); }
+.#{$fa-css-prefix}-camera:before { content: fa-content($fa-var-camera); }
+.#{$fa-css-prefix}-camera-retro:before { content: fa-content($fa-var-camera-retro); }
+.#{$fa-css-prefix}-campground:before { content: fa-content($fa-var-campground); }
+.#{$fa-css-prefix}-cannabis:before { content: fa-content($fa-var-cannabis); }
+.#{$fa-css-prefix}-capsules:before { content: fa-content($fa-var-capsules); }
+.#{$fa-css-prefix}-car:before { content: fa-content($fa-var-car); }
+.#{$fa-css-prefix}-car-alt:before { content: fa-content($fa-var-car-alt); }
+.#{$fa-css-prefix}-car-battery:before { content: fa-content($fa-var-car-battery); }
+.#{$fa-css-prefix}-car-crash:before { content: fa-content($fa-var-car-crash); }
+.#{$fa-css-prefix}-car-side:before { content: fa-content($fa-var-car-side); }
+.#{$fa-css-prefix}-caret-down:before { content: fa-content($fa-var-caret-down); }
+.#{$fa-css-prefix}-caret-left:before { content: fa-content($fa-var-caret-left); }
+.#{$fa-css-prefix}-caret-right:before { content: fa-content($fa-var-caret-right); }
+.#{$fa-css-prefix}-caret-square-down:before { content: fa-content($fa-var-caret-square-down); }
+.#{$fa-css-prefix}-caret-square-left:before { content: fa-content($fa-var-caret-square-left); }
+.#{$fa-css-prefix}-caret-square-right:before { content: fa-content($fa-var-caret-square-right); }
+.#{$fa-css-prefix}-caret-square-up:before { content: fa-content($fa-var-caret-square-up); }
+.#{$fa-css-prefix}-caret-up:before { content: fa-content($fa-var-caret-up); }
+.#{$fa-css-prefix}-cart-arrow-down:before { content: fa-content($fa-var-cart-arrow-down); }
+.#{$fa-css-prefix}-cart-plus:before { content: fa-content($fa-var-cart-plus); }
+.#{$fa-css-prefix}-cat:before { content: fa-content($fa-var-cat); }
+.#{$fa-css-prefix}-cc-amazon-pay:before { content: fa-content($fa-var-cc-amazon-pay); }
+.#{$fa-css-prefix}-cc-amex:before { content: fa-content($fa-var-cc-amex); }
+.#{$fa-css-prefix}-cc-apple-pay:before { content: fa-content($fa-var-cc-apple-pay); }
+.#{$fa-css-prefix}-cc-diners-club:before { content: fa-content($fa-var-cc-diners-club); }
+.#{$fa-css-prefix}-cc-discover:before { content: fa-content($fa-var-cc-discover); }
+.#{$fa-css-prefix}-cc-jcb:before { content: fa-content($fa-var-cc-jcb); }
+.#{$fa-css-prefix}-cc-mastercard:before { content: fa-content($fa-var-cc-mastercard); }
+.#{$fa-css-prefix}-cc-paypal:before { content: fa-content($fa-var-cc-paypal); }
+.#{$fa-css-prefix}-cc-stripe:before { content: fa-content($fa-var-cc-stripe); }
+.#{$fa-css-prefix}-cc-visa:before { content: fa-content($fa-var-cc-visa); }
+.#{$fa-css-prefix}-centercode:before { content: fa-content($fa-var-centercode); }
+.#{$fa-css-prefix}-certificate:before { content: fa-content($fa-var-certificate); }
+.#{$fa-css-prefix}-chair:before { content: fa-content($fa-var-chair); }
+.#{$fa-css-prefix}-chalkboard:before { content: fa-content($fa-var-chalkboard); }
+.#{$fa-css-prefix}-chalkboard-teacher:before { content: fa-content($fa-var-chalkboard-teacher); }
+.#{$fa-css-prefix}-charging-station:before { content: fa-content($fa-var-charging-station); }
+.#{$fa-css-prefix}-chart-area:before { content: fa-content($fa-var-chart-area); }
+.#{$fa-css-prefix}-chart-bar:before { content: fa-content($fa-var-chart-bar); }
+.#{$fa-css-prefix}-chart-line:before { content: fa-content($fa-var-chart-line); }
+.#{$fa-css-prefix}-chart-pie:before { content: fa-content($fa-var-chart-pie); }
+.#{$fa-css-prefix}-check:before { content: fa-content($fa-var-check); }
+.#{$fa-css-prefix}-check-circle:before { content: fa-content($fa-var-check-circle); }
+.#{$fa-css-prefix}-check-double:before { content: fa-content($fa-var-check-double); }
+.#{$fa-css-prefix}-check-square:before { content: fa-content($fa-var-check-square); }
+.#{$fa-css-prefix}-chess:before { content: fa-content($fa-var-chess); }
+.#{$fa-css-prefix}-chess-bishop:before { content: fa-content($fa-var-chess-bishop); }
+.#{$fa-css-prefix}-chess-board:before { content: fa-content($fa-var-chess-board); }
+.#{$fa-css-prefix}-chess-king:before { content: fa-content($fa-var-chess-king); }
+.#{$fa-css-prefix}-chess-knight:before { content: fa-content($fa-var-chess-knight); }
+.#{$fa-css-prefix}-chess-pawn:before { content: fa-content($fa-var-chess-pawn); }
+.#{$fa-css-prefix}-chess-queen:before { content: fa-content($fa-var-chess-queen); }
+.#{$fa-css-prefix}-chess-rook:before { content: fa-content($fa-var-chess-rook); }
+.#{$fa-css-prefix}-chevron-circle-down:before { content: fa-content($fa-var-chevron-circle-down); }
+.#{$fa-css-prefix}-chevron-circle-left:before { content: fa-content($fa-var-chevron-circle-left); }
+.#{$fa-css-prefix}-chevron-circle-right:before { content: fa-content($fa-var-chevron-circle-right); }
+.#{$fa-css-prefix}-chevron-circle-up:before { content: fa-content($fa-var-chevron-circle-up); }
+.#{$fa-css-prefix}-chevron-down:before { content: fa-content($fa-var-chevron-down); }
+.#{$fa-css-prefix}-chevron-left:before { content: fa-content($fa-var-chevron-left); }
+.#{$fa-css-prefix}-chevron-right:before { content: fa-content($fa-var-chevron-right); }
+.#{$fa-css-prefix}-chevron-up:before { content: fa-content($fa-var-chevron-up); }
+.#{$fa-css-prefix}-child:before { content: fa-content($fa-var-child); }
+.#{$fa-css-prefix}-chrome:before { content: fa-content($fa-var-chrome); }
+.#{$fa-css-prefix}-church:before { content: fa-content($fa-var-church); }
+.#{$fa-css-prefix}-circle:before { content: fa-content($fa-var-circle); }
+.#{$fa-css-prefix}-circle-notch:before { content: fa-content($fa-var-circle-notch); }
+.#{$fa-css-prefix}-city:before { content: fa-content($fa-var-city); }
+.#{$fa-css-prefix}-clipboard:before { content: fa-content($fa-var-clipboard); }
+.#{$fa-css-prefix}-clipboard-check:before { content: fa-content($fa-var-clipboard-check); }
+.#{$fa-css-prefix}-clipboard-list:before { content: fa-content($fa-var-clipboard-list); }
+.#{$fa-css-prefix}-clock:before { content: fa-content($fa-var-clock); }
+.#{$fa-css-prefix}-clone:before { content: fa-content($fa-var-clone); }
+.#{$fa-css-prefix}-closed-captioning:before { content: fa-content($fa-var-closed-captioning); }
+.#{$fa-css-prefix}-cloud:before { content: fa-content($fa-var-cloud); }
+.#{$fa-css-prefix}-cloud-download-alt:before { content: fa-content($fa-var-cloud-download-alt); }
+.#{$fa-css-prefix}-cloud-meatball:before { content: fa-content($fa-var-cloud-meatball); }
+.#{$fa-css-prefix}-cloud-moon:before { content: fa-content($fa-var-cloud-moon); }
+.#{$fa-css-prefix}-cloud-moon-rain:before { content: fa-content($fa-var-cloud-moon-rain); }
+.#{$fa-css-prefix}-cloud-rain:before { content: fa-content($fa-var-cloud-rain); }
+.#{$fa-css-prefix}-cloud-showers-heavy:before { content: fa-content($fa-var-cloud-showers-heavy); }
+.#{$fa-css-prefix}-cloud-sun:before { content: fa-content($fa-var-cloud-sun); }
+.#{$fa-css-prefix}-cloud-sun-rain:before { content: fa-content($fa-var-cloud-sun-rain); }
+.#{$fa-css-prefix}-cloud-upload-alt:before { content: fa-content($fa-var-cloud-upload-alt); }
+.#{$fa-css-prefix}-cloudscale:before { content: fa-content($fa-var-cloudscale); }
+.#{$fa-css-prefix}-cloudsmith:before { content: fa-content($fa-var-cloudsmith); }
+.#{$fa-css-prefix}-cloudversify:before { content: fa-content($fa-var-cloudversify); }
+.#{$fa-css-prefix}-cocktail:before { content: fa-content($fa-var-cocktail); }
+.#{$fa-css-prefix}-code:before { content: fa-content($fa-var-code); }
+.#{$fa-css-prefix}-code-branch:before { content: fa-content($fa-var-code-branch); }
+.#{$fa-css-prefix}-codepen:before { content: fa-content($fa-var-codepen); }
+.#{$fa-css-prefix}-codiepie:before { content: fa-content($fa-var-codiepie); }
+.#{$fa-css-prefix}-coffee:before { content: fa-content($fa-var-coffee); }
+.#{$fa-css-prefix}-cog:before { content: fa-content($fa-var-cog); }
+.#{$fa-css-prefix}-cogs:before { content: fa-content($fa-var-cogs); }
+.#{$fa-css-prefix}-coins:before { content: fa-content($fa-var-coins); }
+.#{$fa-css-prefix}-columns:before { content: fa-content($fa-var-columns); }
+.#{$fa-css-prefix}-comment:before { content: fa-content($fa-var-comment); }
+.#{$fa-css-prefix}-comment-alt:before { content: fa-content($fa-var-comment-alt); }
+.#{$fa-css-prefix}-comment-dollar:before { content: fa-content($fa-var-comment-dollar); }
+.#{$fa-css-prefix}-comment-dots:before { content: fa-content($fa-var-comment-dots); }
+.#{$fa-css-prefix}-comment-slash:before { content: fa-content($fa-var-comment-slash); }
+.#{$fa-css-prefix}-comments:before { content: fa-content($fa-var-comments); }
+.#{$fa-css-prefix}-comments-dollar:before { content: fa-content($fa-var-comments-dollar); }
+.#{$fa-css-prefix}-compact-disc:before { content: fa-content($fa-var-compact-disc); }
+.#{$fa-css-prefix}-compass:before { content: fa-content($fa-var-compass); }
+.#{$fa-css-prefix}-compress:before { content: fa-content($fa-var-compress); }
+.#{$fa-css-prefix}-concierge-bell:before { content: fa-content($fa-var-concierge-bell); }
+.#{$fa-css-prefix}-connectdevelop:before { content: fa-content($fa-var-connectdevelop); }
+.#{$fa-css-prefix}-contao:before { content: fa-content($fa-var-contao); }
+.#{$fa-css-prefix}-cookie:before { content: fa-content($fa-var-cookie); }
+.#{$fa-css-prefix}-cookie-bite:before { content: fa-content($fa-var-cookie-bite); }
+.#{$fa-css-prefix}-copy:before { content: fa-content($fa-var-copy); }
+.#{$fa-css-prefix}-copyright:before { content: fa-content($fa-var-copyright); }
+.#{$fa-css-prefix}-couch:before { content: fa-content($fa-var-couch); }
+.#{$fa-css-prefix}-cpanel:before { content: fa-content($fa-var-cpanel); }
+.#{$fa-css-prefix}-creative-commons:before { content: fa-content($fa-var-creative-commons); }
+.#{$fa-css-prefix}-creative-commons-by:before { content: fa-content($fa-var-creative-commons-by); }
+.#{$fa-css-prefix}-creative-commons-nc:before { content: fa-content($fa-var-creative-commons-nc); }
+.#{$fa-css-prefix}-creative-commons-nc-eu:before { content: fa-content($fa-var-creative-commons-nc-eu); }
+.#{$fa-css-prefix}-creative-commons-nc-jp:before { content: fa-content($fa-var-creative-commons-nc-jp); }
+.#{$fa-css-prefix}-creative-commons-nd:before { content: fa-content($fa-var-creative-commons-nd); }
+.#{$fa-css-prefix}-creative-commons-pd:before { content: fa-content($fa-var-creative-commons-pd); }
+.#{$fa-css-prefix}-creative-commons-pd-alt:before { content: fa-content($fa-var-creative-commons-pd-alt); }
+.#{$fa-css-prefix}-creative-commons-remix:before { content: fa-content($fa-var-creative-commons-remix); }
+.#{$fa-css-prefix}-creative-commons-sa:before { content: fa-content($fa-var-creative-commons-sa); }
+.#{$fa-css-prefix}-creative-commons-sampling:before { content: fa-content($fa-var-creative-commons-sampling); }
+.#{$fa-css-prefix}-creative-commons-sampling-plus:before { content: fa-content($fa-var-creative-commons-sampling-plus); }
+.#{$fa-css-prefix}-creative-commons-share:before { content: fa-content($fa-var-creative-commons-share); }
+.#{$fa-css-prefix}-creative-commons-zero:before { content: fa-content($fa-var-creative-commons-zero); }
+.#{$fa-css-prefix}-credit-card:before { content: fa-content($fa-var-credit-card); }
+.#{$fa-css-prefix}-critical-role:before { content: fa-content($fa-var-critical-role); }
+.#{$fa-css-prefix}-crop:before { content: fa-content($fa-var-crop); }
+.#{$fa-css-prefix}-crop-alt:before { content: fa-content($fa-var-crop-alt); }
+.#{$fa-css-prefix}-cross:before { content: fa-content($fa-var-cross); }
+.#{$fa-css-prefix}-crosshairs:before { content: fa-content($fa-var-crosshairs); }
+.#{$fa-css-prefix}-crow:before { content: fa-content($fa-var-crow); }
+.#{$fa-css-prefix}-crown:before { content: fa-content($fa-var-crown); }
+.#{$fa-css-prefix}-css3:before { content: fa-content($fa-var-css3); }
+.#{$fa-css-prefix}-css3-alt:before { content: fa-content($fa-var-css3-alt); }
+.#{$fa-css-prefix}-cube:before { content: fa-content($fa-var-cube); }
+.#{$fa-css-prefix}-cubes:before { content: fa-content($fa-var-cubes); }
+.#{$fa-css-prefix}-cut:before { content: fa-content($fa-var-cut); }
+.#{$fa-css-prefix}-cuttlefish:before { content: fa-content($fa-var-cuttlefish); }
+.#{$fa-css-prefix}-d-and-d:before { content: fa-content($fa-var-d-and-d); }
+.#{$fa-css-prefix}-d-and-d-beyond:before { content: fa-content($fa-var-d-and-d-beyond); }
+.#{$fa-css-prefix}-dashcube:before { content: fa-content($fa-var-dashcube); }
+.#{$fa-css-prefix}-database:before { content: fa-content($fa-var-database); }
+.#{$fa-css-prefix}-deaf:before { content: fa-content($fa-var-deaf); }
+.#{$fa-css-prefix}-delicious:before { content: fa-content($fa-var-delicious); }
+.#{$fa-css-prefix}-democrat:before { content: fa-content($fa-var-democrat); }
+.#{$fa-css-prefix}-deploydog:before { content: fa-content($fa-var-deploydog); }
+.#{$fa-css-prefix}-deskpro:before { content: fa-content($fa-var-deskpro); }
+.#{$fa-css-prefix}-desktop:before { content: fa-content($fa-var-desktop); }
+.#{$fa-css-prefix}-dev:before { content: fa-content($fa-var-dev); }
+.#{$fa-css-prefix}-deviantart:before { content: fa-content($fa-var-deviantart); }
+.#{$fa-css-prefix}-dharmachakra:before { content: fa-content($fa-var-dharmachakra); }
+.#{$fa-css-prefix}-diagnoses:before { content: fa-content($fa-var-diagnoses); }
+.#{$fa-css-prefix}-dice:before { content: fa-content($fa-var-dice); }
+.#{$fa-css-prefix}-dice-d20:before { content: fa-content($fa-var-dice-d20); }
+.#{$fa-css-prefix}-dice-d6:before { content: fa-content($fa-var-dice-d6); }
+.#{$fa-css-prefix}-dice-five:before { content: fa-content($fa-var-dice-five); }
+.#{$fa-css-prefix}-dice-four:before { content: fa-content($fa-var-dice-four); }
+.#{$fa-css-prefix}-dice-one:before { content: fa-content($fa-var-dice-one); }
+.#{$fa-css-prefix}-dice-six:before { content: fa-content($fa-var-dice-six); }
+.#{$fa-css-prefix}-dice-three:before { content: fa-content($fa-var-dice-three); }
+.#{$fa-css-prefix}-dice-two:before { content: fa-content($fa-var-dice-two); }
+.#{$fa-css-prefix}-digg:before { content: fa-content($fa-var-digg); }
+.#{$fa-css-prefix}-digital-ocean:before { content: fa-content($fa-var-digital-ocean); }
+.#{$fa-css-prefix}-digital-tachograph:before { content: fa-content($fa-var-digital-tachograph); }
+.#{$fa-css-prefix}-directions:before { content: fa-content($fa-var-directions); }
+.#{$fa-css-prefix}-discord:before { content: fa-content($fa-var-discord); }
+.#{$fa-css-prefix}-discourse:before { content: fa-content($fa-var-discourse); }
+.#{$fa-css-prefix}-divide:before { content: fa-content($fa-var-divide); }
+.#{$fa-css-prefix}-dizzy:before { content: fa-content($fa-var-dizzy); }
+.#{$fa-css-prefix}-dna:before { content: fa-content($fa-var-dna); }
+.#{$fa-css-prefix}-dochub:before { content: fa-content($fa-var-dochub); }
+.#{$fa-css-prefix}-docker:before { content: fa-content($fa-var-docker); }
+.#{$fa-css-prefix}-dog:before { content: fa-content($fa-var-dog); }
+.#{$fa-css-prefix}-dollar-sign:before { content: fa-content($fa-var-dollar-sign); }
+.#{$fa-css-prefix}-dolly:before { content: fa-content($fa-var-dolly); }
+.#{$fa-css-prefix}-dolly-flatbed:before { content: fa-content($fa-var-dolly-flatbed); }
+.#{$fa-css-prefix}-donate:before { content: fa-content($fa-var-donate); }
+.#{$fa-css-prefix}-door-closed:before { content: fa-content($fa-var-door-closed); }
+.#{$fa-css-prefix}-door-open:before { content: fa-content($fa-var-door-open); }
+.#{$fa-css-prefix}-dot-circle:before { content: fa-content($fa-var-dot-circle); }
+.#{$fa-css-prefix}-dove:before { content: fa-content($fa-var-dove); }
+.#{$fa-css-prefix}-download:before { content: fa-content($fa-var-download); }
+.#{$fa-css-prefix}-draft2digital:before { content: fa-content($fa-var-draft2digital); }
+.#{$fa-css-prefix}-drafting-compass:before { content: fa-content($fa-var-drafting-compass); }
+.#{$fa-css-prefix}-dragon:before { content: fa-content($fa-var-dragon); }
+.#{$fa-css-prefix}-draw-polygon:before { content: fa-content($fa-var-draw-polygon); }
+.#{$fa-css-prefix}-dribbble:before { content: fa-content($fa-var-dribbble); }
+.#{$fa-css-prefix}-dribbble-square:before { content: fa-content($fa-var-dribbble-square); }
+.#{$fa-css-prefix}-dropbox:before { content: fa-content($fa-var-dropbox); }
+.#{$fa-css-prefix}-drum:before { content: fa-content($fa-var-drum); }
+.#{$fa-css-prefix}-drum-steelpan:before { content: fa-content($fa-var-drum-steelpan); }
+.#{$fa-css-prefix}-drumstick-bite:before { content: fa-content($fa-var-drumstick-bite); }
+.#{$fa-css-prefix}-drupal:before { content: fa-content($fa-var-drupal); }
+.#{$fa-css-prefix}-dumbbell:before { content: fa-content($fa-var-dumbbell); }
+.#{$fa-css-prefix}-dungeon:before { content: fa-content($fa-var-dungeon); }
+.#{$fa-css-prefix}-dyalog:before { content: fa-content($fa-var-dyalog); }
+.#{$fa-css-prefix}-earlybirds:before { content: fa-content($fa-var-earlybirds); }
+.#{$fa-css-prefix}-ebay:before { content: fa-content($fa-var-ebay); }
+.#{$fa-css-prefix}-edge:before { content: fa-content($fa-var-edge); }
+.#{$fa-css-prefix}-edit:before { content: fa-content($fa-var-edit); }
+.#{$fa-css-prefix}-eject:before { content: fa-content($fa-var-eject); }
+.#{$fa-css-prefix}-elementor:before { content: fa-content($fa-var-elementor); }
+.#{$fa-css-prefix}-ellipsis-h:before { content: fa-content($fa-var-ellipsis-h); }
+.#{$fa-css-prefix}-ellipsis-v:before { content: fa-content($fa-var-ellipsis-v); }
+.#{$fa-css-prefix}-ello:before { content: fa-content($fa-var-ello); }
+.#{$fa-css-prefix}-ember:before { content: fa-content($fa-var-ember); }
+.#{$fa-css-prefix}-empire:before { content: fa-content($fa-var-empire); }
+.#{$fa-css-prefix}-envelope:before { content: fa-content($fa-var-envelope); }
+.#{$fa-css-prefix}-envelope-open:before { content: fa-content($fa-var-envelope-open); }
+.#{$fa-css-prefix}-envelope-open-text:before { content: fa-content($fa-var-envelope-open-text); }
+.#{$fa-css-prefix}-envelope-square:before { content: fa-content($fa-var-envelope-square); }
+.#{$fa-css-prefix}-envira:before { content: fa-content($fa-var-envira); }
+.#{$fa-css-prefix}-equals:before { content: fa-content($fa-var-equals); }
+.#{$fa-css-prefix}-eraser:before { content: fa-content($fa-var-eraser); }
+.#{$fa-css-prefix}-erlang:before { content: fa-content($fa-var-erlang); }
+.#{$fa-css-prefix}-ethereum:before { content: fa-content($fa-var-ethereum); }
+.#{$fa-css-prefix}-etsy:before { content: fa-content($fa-var-etsy); }
+.#{$fa-css-prefix}-euro-sign:before { content: fa-content($fa-var-euro-sign); }
+.#{$fa-css-prefix}-exchange-alt:before { content: fa-content($fa-var-exchange-alt); }
+.#{$fa-css-prefix}-exclamation:before { content: fa-content($fa-var-exclamation); }
+.#{$fa-css-prefix}-exclamation-circle:before { content: fa-content($fa-var-exclamation-circle); }
+.#{$fa-css-prefix}-exclamation-triangle:before { content: fa-content($fa-var-exclamation-triangle); }
+.#{$fa-css-prefix}-expand:before { content: fa-content($fa-var-expand); }
+.#{$fa-css-prefix}-expand-arrows-alt:before { content: fa-content($fa-var-expand-arrows-alt); }
+.#{$fa-css-prefix}-expeditedssl:before { content: fa-content($fa-var-expeditedssl); }
+.#{$fa-css-prefix}-external-link-alt:before { content: fa-content($fa-var-external-link-alt); }
+.#{$fa-css-prefix}-external-link-square-alt:before { content: fa-content($fa-var-external-link-square-alt); }
+.#{$fa-css-prefix}-eye:before { content: fa-content($fa-var-eye); }
+.#{$fa-css-prefix}-eye-dropper:before { content: fa-content($fa-var-eye-dropper); }
+.#{$fa-css-prefix}-eye-slash:before { content: fa-content($fa-var-eye-slash); }
+.#{$fa-css-prefix}-facebook:before { content: fa-content($fa-var-facebook); }
+.#{$fa-css-prefix}-facebook-f:before { content: fa-content($fa-var-facebook-f); }
+.#{$fa-css-prefix}-facebook-messenger:before { content: fa-content($fa-var-facebook-messenger); }
+.#{$fa-css-prefix}-facebook-square:before { content: fa-content($fa-var-facebook-square); }
+.#{$fa-css-prefix}-fantasy-flight-games:before { content: fa-content($fa-var-fantasy-flight-games); }
+.#{$fa-css-prefix}-fast-backward:before { content: fa-content($fa-var-fast-backward); }
+.#{$fa-css-prefix}-fast-forward:before { content: fa-content($fa-var-fast-forward); }
+.#{$fa-css-prefix}-fax:before { content: fa-content($fa-var-fax); }
+.#{$fa-css-prefix}-feather:before { content: fa-content($fa-var-feather); }
+.#{$fa-css-prefix}-feather-alt:before { content: fa-content($fa-var-feather-alt); }
+.#{$fa-css-prefix}-female:before { content: fa-content($fa-var-female); }
+.#{$fa-css-prefix}-fighter-jet:before { content: fa-content($fa-var-fighter-jet); }
+.#{$fa-css-prefix}-file:before { content: fa-content($fa-var-file); }
+.#{$fa-css-prefix}-file-alt:before { content: fa-content($fa-var-file-alt); }
+.#{$fa-css-prefix}-file-archive:before { content: fa-content($fa-var-file-archive); }
+.#{$fa-css-prefix}-file-audio:before { content: fa-content($fa-var-file-audio); }
+.#{$fa-css-prefix}-file-code:before { content: fa-content($fa-var-file-code); }
+.#{$fa-css-prefix}-file-contract:before { content: fa-content($fa-var-file-contract); }
+.#{$fa-css-prefix}-file-csv:before { content: fa-content($fa-var-file-csv); }
+.#{$fa-css-prefix}-file-download:before { content: fa-content($fa-var-file-download); }
+.#{$fa-css-prefix}-file-excel:before { content: fa-content($fa-var-file-excel); }
+.#{$fa-css-prefix}-file-export:before { content: fa-content($fa-var-file-export); }
+.#{$fa-css-prefix}-file-image:before { content: fa-content($fa-var-file-image); }
+.#{$fa-css-prefix}-file-import:before { content: fa-content($fa-var-file-import); }
+.#{$fa-css-prefix}-file-invoice:before { content: fa-content($fa-var-file-invoice); }
+.#{$fa-css-prefix}-file-invoice-dollar:before { content: fa-content($fa-var-file-invoice-dollar); }
+.#{$fa-css-prefix}-file-medical:before { content: fa-content($fa-var-file-medical); }
+.#{$fa-css-prefix}-file-medical-alt:before { content: fa-content($fa-var-file-medical-alt); }
+.#{$fa-css-prefix}-file-pdf:before { content: fa-content($fa-var-file-pdf); }
+.#{$fa-css-prefix}-file-powerpoint:before { content: fa-content($fa-var-file-powerpoint); }
+.#{$fa-css-prefix}-file-prescription:before { content: fa-content($fa-var-file-prescription); }
+.#{$fa-css-prefix}-file-signature:before { content: fa-content($fa-var-file-signature); }
+.#{$fa-css-prefix}-file-upload:before { content: fa-content($fa-var-file-upload); }
+.#{$fa-css-prefix}-file-video:before { content: fa-content($fa-var-file-video); }
+.#{$fa-css-prefix}-file-word:before { content: fa-content($fa-var-file-word); }
+.#{$fa-css-prefix}-fill:before { content: fa-content($fa-var-fill); }
+.#{$fa-css-prefix}-fill-drip:before { content: fa-content($fa-var-fill-drip); }
+.#{$fa-css-prefix}-film:before { content: fa-content($fa-var-film); }
+.#{$fa-css-prefix}-filter:before { content: fa-content($fa-var-filter); }
+.#{$fa-css-prefix}-fingerprint:before { content: fa-content($fa-var-fingerprint); }
+.#{$fa-css-prefix}-fire:before { content: fa-content($fa-var-fire); }
+.#{$fa-css-prefix}-fire-extinguisher:before { content: fa-content($fa-var-fire-extinguisher); }
+.#{$fa-css-prefix}-firefox:before { content: fa-content($fa-var-firefox); }
+.#{$fa-css-prefix}-first-aid:before { content: fa-content($fa-var-first-aid); }
+.#{$fa-css-prefix}-first-order:before { content: fa-content($fa-var-first-order); }
+.#{$fa-css-prefix}-first-order-alt:before { content: fa-content($fa-var-first-order-alt); }
+.#{$fa-css-prefix}-firstdraft:before { content: fa-content($fa-var-firstdraft); }
+.#{$fa-css-prefix}-fish:before { content: fa-content($fa-var-fish); }
+.#{$fa-css-prefix}-fist-raised:before { content: fa-content($fa-var-fist-raised); }
+.#{$fa-css-prefix}-flag:before { content: fa-content($fa-var-flag); }
+.#{$fa-css-prefix}-flag-checkered:before { content: fa-content($fa-var-flag-checkered); }
+.#{$fa-css-prefix}-flag-usa:before { content: fa-content($fa-var-flag-usa); }
+.#{$fa-css-prefix}-flask:before { content: fa-content($fa-var-flask); }
+.#{$fa-css-prefix}-flickr:before { content: fa-content($fa-var-flickr); }
+.#{$fa-css-prefix}-flipboard:before { content: fa-content($fa-var-flipboard); }
+.#{$fa-css-prefix}-flushed:before { content: fa-content($fa-var-flushed); }
+.#{$fa-css-prefix}-fly:before { content: fa-content($fa-var-fly); }
+.#{$fa-css-prefix}-folder:before { content: fa-content($fa-var-folder); }
+.#{$fa-css-prefix}-folder-minus:before { content: fa-content($fa-var-folder-minus); }
+.#{$fa-css-prefix}-folder-open:before { content: fa-content($fa-var-folder-open); }
+.#{$fa-css-prefix}-folder-plus:before { content: fa-content($fa-var-folder-plus); }
+.#{$fa-css-prefix}-font:before { content: fa-content($fa-var-font); }
+.#{$fa-css-prefix}-font-awesome:before { content: fa-content($fa-var-font-awesome); }
+.#{$fa-css-prefix}-font-awesome-alt:before { content: fa-content($fa-var-font-awesome-alt); }
+.#{$fa-css-prefix}-font-awesome-flag:before { content: fa-content($fa-var-font-awesome-flag); }
+.#{$fa-css-prefix}-font-awesome-logo-full:before { content: fa-content($fa-var-font-awesome-logo-full); }
+.#{$fa-css-prefix}-fonticons:before { content: fa-content($fa-var-fonticons); }
+.#{$fa-css-prefix}-fonticons-fi:before { content: fa-content($fa-var-fonticons-fi); }
+.#{$fa-css-prefix}-football-ball:before { content: fa-content($fa-var-football-ball); }
+.#{$fa-css-prefix}-fort-awesome:before { content: fa-content($fa-var-fort-awesome); }
+.#{$fa-css-prefix}-fort-awesome-alt:before { content: fa-content($fa-var-fort-awesome-alt); }
+.#{$fa-css-prefix}-forumbee:before { content: fa-content($fa-var-forumbee); }
+.#{$fa-css-prefix}-forward:before { content: fa-content($fa-var-forward); }
+.#{$fa-css-prefix}-foursquare:before { content: fa-content($fa-var-foursquare); }
+.#{$fa-css-prefix}-free-code-camp:before { content: fa-content($fa-var-free-code-camp); }
+.#{$fa-css-prefix}-freebsd:before { content: fa-content($fa-var-freebsd); }
+.#{$fa-css-prefix}-frog:before { content: fa-content($fa-var-frog); }
+.#{$fa-css-prefix}-frown:before { content: fa-content($fa-var-frown); }
+.#{$fa-css-prefix}-frown-open:before { content: fa-content($fa-var-frown-open); }
+.#{$fa-css-prefix}-fulcrum:before { content: fa-content($fa-var-fulcrum); }
+.#{$fa-css-prefix}-funnel-dollar:before { content: fa-content($fa-var-funnel-dollar); }
+.#{$fa-css-prefix}-futbol:before { content: fa-content($fa-var-futbol); }
+.#{$fa-css-prefix}-galactic-republic:before { content: fa-content($fa-var-galactic-republic); }
+.#{$fa-css-prefix}-galactic-senate:before { content: fa-content($fa-var-galactic-senate); }
+.#{$fa-css-prefix}-gamepad:before { content: fa-content($fa-var-gamepad); }
+.#{$fa-css-prefix}-gas-pump:before { content: fa-content($fa-var-gas-pump); }
+.#{$fa-css-prefix}-gavel:before { content: fa-content($fa-var-gavel); }
+.#{$fa-css-prefix}-gem:before { content: fa-content($fa-var-gem); }
+.#{$fa-css-prefix}-genderless:before { content: fa-content($fa-var-genderless); }
+.#{$fa-css-prefix}-get-pocket:before { content: fa-content($fa-var-get-pocket); }
+.#{$fa-css-prefix}-gg:before { content: fa-content($fa-var-gg); }
+.#{$fa-css-prefix}-gg-circle:before { content: fa-content($fa-var-gg-circle); }
+.#{$fa-css-prefix}-ghost:before { content: fa-content($fa-var-ghost); }
+.#{$fa-css-prefix}-gift:before { content: fa-content($fa-var-gift); }
+.#{$fa-css-prefix}-git:before { content: fa-content($fa-var-git); }
+.#{$fa-css-prefix}-git-square:before { content: fa-content($fa-var-git-square); }
+.#{$fa-css-prefix}-github:before { content: fa-content($fa-var-github); }
+.#{$fa-css-prefix}-github-alt:before { content: fa-content($fa-var-github-alt); }
+.#{$fa-css-prefix}-github-square:before { content: fa-content($fa-var-github-square); }
+.#{$fa-css-prefix}-gitkraken:before { content: fa-content($fa-var-gitkraken); }
+.#{$fa-css-prefix}-gitlab:before { content: fa-content($fa-var-gitlab); }
+.#{$fa-css-prefix}-gitter:before { content: fa-content($fa-var-gitter); }
+.#{$fa-css-prefix}-glass-martini:before { content: fa-content($fa-var-glass-martini); }
+.#{$fa-css-prefix}-glass-martini-alt:before { content: fa-content($fa-var-glass-martini-alt); }
+.#{$fa-css-prefix}-glasses:before { content: fa-content($fa-var-glasses); }
+.#{$fa-css-prefix}-glide:before { content: fa-content($fa-var-glide); }
+.#{$fa-css-prefix}-glide-g:before { content: fa-content($fa-var-glide-g); }
+.#{$fa-css-prefix}-globe:before { content: fa-content($fa-var-globe); }
+.#{$fa-css-prefix}-globe-africa:before { content: fa-content($fa-var-globe-africa); }
+.#{$fa-css-prefix}-globe-americas:before { content: fa-content($fa-var-globe-americas); }
+.#{$fa-css-prefix}-globe-asia:before { content: fa-content($fa-var-globe-asia); }
+.#{$fa-css-prefix}-gofore:before { content: fa-content($fa-var-gofore); }
+.#{$fa-css-prefix}-golf-ball:before { content: fa-content($fa-var-golf-ball); }
+.#{$fa-css-prefix}-goodreads:before { content: fa-content($fa-var-goodreads); }
+.#{$fa-css-prefix}-goodreads-g:before { content: fa-content($fa-var-goodreads-g); }
+.#{$fa-css-prefix}-google:before { content: fa-content($fa-var-google); }
+.#{$fa-css-prefix}-google-drive:before { content: fa-content($fa-var-google-drive); }
+.#{$fa-css-prefix}-google-play:before { content: fa-content($fa-var-google-play); }
+.#{$fa-css-prefix}-google-plus:before { content: fa-content($fa-var-google-plus); }
+.#{$fa-css-prefix}-google-plus-g:before { content: fa-content($fa-var-google-plus-g); }
+.#{$fa-css-prefix}-google-plus-square:before { content: fa-content($fa-var-google-plus-square); }
+.#{$fa-css-prefix}-google-wallet:before { content: fa-content($fa-var-google-wallet); }
+.#{$fa-css-prefix}-gopuram:before { content: fa-content($fa-var-gopuram); }
+.#{$fa-css-prefix}-graduation-cap:before { content: fa-content($fa-var-graduation-cap); }
+.#{$fa-css-prefix}-gratipay:before { content: fa-content($fa-var-gratipay); }
+.#{$fa-css-prefix}-grav:before { content: fa-content($fa-var-grav); }
+.#{$fa-css-prefix}-greater-than:before { content: fa-content($fa-var-greater-than); }
+.#{$fa-css-prefix}-greater-than-equal:before { content: fa-content($fa-var-greater-than-equal); }
+.#{$fa-css-prefix}-grimace:before { content: fa-content($fa-var-grimace); }
+.#{$fa-css-prefix}-grin:before { content: fa-content($fa-var-grin); }
+.#{$fa-css-prefix}-grin-alt:before { content: fa-content($fa-var-grin-alt); }
+.#{$fa-css-prefix}-grin-beam:before { content: fa-content($fa-var-grin-beam); }
+.#{$fa-css-prefix}-grin-beam-sweat:before { content: fa-content($fa-var-grin-beam-sweat); }
+.#{$fa-css-prefix}-grin-hearts:before { content: fa-content($fa-var-grin-hearts); }
+.#{$fa-css-prefix}-grin-squint:before { content: fa-content($fa-var-grin-squint); }
+.#{$fa-css-prefix}-grin-squint-tears:before { content: fa-content($fa-var-grin-squint-tears); }
+.#{$fa-css-prefix}-grin-stars:before { content: fa-content($fa-var-grin-stars); }
+.#{$fa-css-prefix}-grin-tears:before { content: fa-content($fa-var-grin-tears); }
+.#{$fa-css-prefix}-grin-tongue:before { content: fa-content($fa-var-grin-tongue); }
+.#{$fa-css-prefix}-grin-tongue-squint:before { content: fa-content($fa-var-grin-tongue-squint); }
+.#{$fa-css-prefix}-grin-tongue-wink:before { content: fa-content($fa-var-grin-tongue-wink); }
+.#{$fa-css-prefix}-grin-wink:before { content: fa-content($fa-var-grin-wink); }
+.#{$fa-css-prefix}-grip-horizontal:before { content: fa-content($fa-var-grip-horizontal); }
+.#{$fa-css-prefix}-grip-vertical:before { content: fa-content($fa-var-grip-vertical); }
+.#{$fa-css-prefix}-gripfire:before { content: fa-content($fa-var-gripfire); }
+.#{$fa-css-prefix}-grunt:before { content: fa-content($fa-var-grunt); }
+.#{$fa-css-prefix}-gulp:before { content: fa-content($fa-var-gulp); }
+.#{$fa-css-prefix}-h-square:before { content: fa-content($fa-var-h-square); }
+.#{$fa-css-prefix}-hacker-news:before { content: fa-content($fa-var-hacker-news); }
+.#{$fa-css-prefix}-hacker-news-square:before { content: fa-content($fa-var-hacker-news-square); }
+.#{$fa-css-prefix}-hackerrank:before { content: fa-content($fa-var-hackerrank); }
+.#{$fa-css-prefix}-hammer:before { content: fa-content($fa-var-hammer); }
+.#{$fa-css-prefix}-hamsa:before { content: fa-content($fa-var-hamsa); }
+.#{$fa-css-prefix}-hand-holding:before { content: fa-content($fa-var-hand-holding); }
+.#{$fa-css-prefix}-hand-holding-heart:before { content: fa-content($fa-var-hand-holding-heart); }
+.#{$fa-css-prefix}-hand-holding-usd:before { content: fa-content($fa-var-hand-holding-usd); }
+.#{$fa-css-prefix}-hand-lizard:before { content: fa-content($fa-var-hand-lizard); }
+.#{$fa-css-prefix}-hand-paper:before { content: fa-content($fa-var-hand-paper); }
+.#{$fa-css-prefix}-hand-peace:before { content: fa-content($fa-var-hand-peace); }
+.#{$fa-css-prefix}-hand-point-down:before { content: fa-content($fa-var-hand-point-down); }
+.#{$fa-css-prefix}-hand-point-left:before { content: fa-content($fa-var-hand-point-left); }
+.#{$fa-css-prefix}-hand-point-right:before { content: fa-content($fa-var-hand-point-right); }
+.#{$fa-css-prefix}-hand-point-up:before { content: fa-content($fa-var-hand-point-up); }
+.#{$fa-css-prefix}-hand-pointer:before { content: fa-content($fa-var-hand-pointer); }
+.#{$fa-css-prefix}-hand-rock:before { content: fa-content($fa-var-hand-rock); }
+.#{$fa-css-prefix}-hand-scissors:before { content: fa-content($fa-var-hand-scissors); }
+.#{$fa-css-prefix}-hand-spock:before { content: fa-content($fa-var-hand-spock); }
+.#{$fa-css-prefix}-hands:before { content: fa-content($fa-var-hands); }
+.#{$fa-css-prefix}-hands-helping:before { content: fa-content($fa-var-hands-helping); }
+.#{$fa-css-prefix}-handshake:before { content: fa-content($fa-var-handshake); }
+.#{$fa-css-prefix}-hanukiah:before { content: fa-content($fa-var-hanukiah); }
+.#{$fa-css-prefix}-hashtag:before { content: fa-content($fa-var-hashtag); }
+.#{$fa-css-prefix}-hat-wizard:before { content: fa-content($fa-var-hat-wizard); }
+.#{$fa-css-prefix}-haykal:before { content: fa-content($fa-var-haykal); }
+.#{$fa-css-prefix}-hdd:before { content: fa-content($fa-var-hdd); }
+.#{$fa-css-prefix}-heading:before { content: fa-content($fa-var-heading); }
+.#{$fa-css-prefix}-headphones:before { content: fa-content($fa-var-headphones); }
+.#{$fa-css-prefix}-headphones-alt:before { content: fa-content($fa-var-headphones-alt); }
+.#{$fa-css-prefix}-headset:before { content: fa-content($fa-var-headset); }
+.#{$fa-css-prefix}-heart:before { content: fa-content($fa-var-heart); }
+.#{$fa-css-prefix}-heartbeat:before { content: fa-content($fa-var-heartbeat); }
+.#{$fa-css-prefix}-helicopter:before { content: fa-content($fa-var-helicopter); }
+.#{$fa-css-prefix}-highlighter:before { content: fa-content($fa-var-highlighter); }
+.#{$fa-css-prefix}-hiking:before { content: fa-content($fa-var-hiking); }
+.#{$fa-css-prefix}-hippo:before { content: fa-content($fa-var-hippo); }
+.#{$fa-css-prefix}-hips:before { content: fa-content($fa-var-hips); }
+.#{$fa-css-prefix}-hire-a-helper:before { content: fa-content($fa-var-hire-a-helper); }
+.#{$fa-css-prefix}-history:before { content: fa-content($fa-var-history); }
+.#{$fa-css-prefix}-hockey-puck:before { content: fa-content($fa-var-hockey-puck); }
+.#{$fa-css-prefix}-home:before { content: fa-content($fa-var-home); }
+.#{$fa-css-prefix}-hooli:before { content: fa-content($fa-var-hooli); }
+.#{$fa-css-prefix}-hornbill:before { content: fa-content($fa-var-hornbill); }
+.#{$fa-css-prefix}-horse:before { content: fa-content($fa-var-horse); }
+.#{$fa-css-prefix}-hospital:before { content: fa-content($fa-var-hospital); }
+.#{$fa-css-prefix}-hospital-alt:before { content: fa-content($fa-var-hospital-alt); }
+.#{$fa-css-prefix}-hospital-symbol:before { content: fa-content($fa-var-hospital-symbol); }
+.#{$fa-css-prefix}-hot-tub:before { content: fa-content($fa-var-hot-tub); }
+.#{$fa-css-prefix}-hotel:before { content: fa-content($fa-var-hotel); }
+.#{$fa-css-prefix}-hotjar:before { content: fa-content($fa-var-hotjar); }
+.#{$fa-css-prefix}-hourglass:before { content: fa-content($fa-var-hourglass); }
+.#{$fa-css-prefix}-hourglass-end:before { content: fa-content($fa-var-hourglass-end); }
+.#{$fa-css-prefix}-hourglass-half:before { content: fa-content($fa-var-hourglass-half); }
+.#{$fa-css-prefix}-hourglass-start:before { content: fa-content($fa-var-hourglass-start); }
+.#{$fa-css-prefix}-house-damage:before { content: fa-content($fa-var-house-damage); }
+.#{$fa-css-prefix}-houzz:before { content: fa-content($fa-var-houzz); }
+.#{$fa-css-prefix}-hryvnia:before { content: fa-content($fa-var-hryvnia); }
+.#{$fa-css-prefix}-html5:before { content: fa-content($fa-var-html5); }
+.#{$fa-css-prefix}-hubspot:before { content: fa-content($fa-var-hubspot); }
+.#{$fa-css-prefix}-i-cursor:before { content: fa-content($fa-var-i-cursor); }
+.#{$fa-css-prefix}-id-badge:before { content: fa-content($fa-var-id-badge); }
+.#{$fa-css-prefix}-id-card:before { content: fa-content($fa-var-id-card); }
+.#{$fa-css-prefix}-id-card-alt:before { content: fa-content($fa-var-id-card-alt); }
+.#{$fa-css-prefix}-image:before { content: fa-content($fa-var-image); }
+.#{$fa-css-prefix}-images:before { content: fa-content($fa-var-images); }
+.#{$fa-css-prefix}-imdb:before { content: fa-content($fa-var-imdb); }
+.#{$fa-css-prefix}-inbox:before { content: fa-content($fa-var-inbox); }
+.#{$fa-css-prefix}-indent:before { content: fa-content($fa-var-indent); }
+.#{$fa-css-prefix}-industry:before { content: fa-content($fa-var-industry); }
+.#{$fa-css-prefix}-infinity:before { content: fa-content($fa-var-infinity); }
+.#{$fa-css-prefix}-info:before { content: fa-content($fa-var-info); }
+.#{$fa-css-prefix}-info-circle:before { content: fa-content($fa-var-info-circle); }
+.#{$fa-css-prefix}-instagram:before { content: fa-content($fa-var-instagram); }
+.#{$fa-css-prefix}-internet-explorer:before { content: fa-content($fa-var-internet-explorer); }
+.#{$fa-css-prefix}-ioxhost:before { content: fa-content($fa-var-ioxhost); }
+.#{$fa-css-prefix}-italic:before { content: fa-content($fa-var-italic); }
+.#{$fa-css-prefix}-itunes:before { content: fa-content($fa-var-itunes); }
+.#{$fa-css-prefix}-itunes-note:before { content: fa-content($fa-var-itunes-note); }
+.#{$fa-css-prefix}-java:before { content: fa-content($fa-var-java); }
+.#{$fa-css-prefix}-jedi:before { content: fa-content($fa-var-jedi); }
+.#{$fa-css-prefix}-jedi-order:before { content: fa-content($fa-var-jedi-order); }
+.#{$fa-css-prefix}-jenkins:before { content: fa-content($fa-var-jenkins); }
+.#{$fa-css-prefix}-joget:before { content: fa-content($fa-var-joget); }
+.#{$fa-css-prefix}-joint:before { content: fa-content($fa-var-joint); }
+.#{$fa-css-prefix}-joomla:before { content: fa-content($fa-var-joomla); }
+.#{$fa-css-prefix}-journal-whills:before { content: fa-content($fa-var-journal-whills); }
+.#{$fa-css-prefix}-js:before { content: fa-content($fa-var-js); }
+.#{$fa-css-prefix}-js-square:before { content: fa-content($fa-var-js-square); }
+.#{$fa-css-prefix}-jsfiddle:before { content: fa-content($fa-var-jsfiddle); }
+.#{$fa-css-prefix}-kaaba:before { content: fa-content($fa-var-kaaba); }
+.#{$fa-css-prefix}-kaggle:before { content: fa-content($fa-var-kaggle); }
+.#{$fa-css-prefix}-key:before { content: fa-content($fa-var-key); }
+.#{$fa-css-prefix}-keybase:before { content: fa-content($fa-var-keybase); }
+.#{$fa-css-prefix}-keyboard:before { content: fa-content($fa-var-keyboard); }
+.#{$fa-css-prefix}-keycdn:before { content: fa-content($fa-var-keycdn); }
+.#{$fa-css-prefix}-khanda:before { content: fa-content($fa-var-khanda); }
+.#{$fa-css-prefix}-kickstarter:before { content: fa-content($fa-var-kickstarter); }
+.#{$fa-css-prefix}-kickstarter-k:before { content: fa-content($fa-var-kickstarter-k); }
+.#{$fa-css-prefix}-kiss:before { content: fa-content($fa-var-kiss); }
+.#{$fa-css-prefix}-kiss-beam:before { content: fa-content($fa-var-kiss-beam); }
+.#{$fa-css-prefix}-kiss-wink-heart:before { content: fa-content($fa-var-kiss-wink-heart); }
+.#{$fa-css-prefix}-kiwi-bird:before { content: fa-content($fa-var-kiwi-bird); }
+.#{$fa-css-prefix}-korvue:before { content: fa-content($fa-var-korvue); }
+.#{$fa-css-prefix}-landmark:before { content: fa-content($fa-var-landmark); }
+.#{$fa-css-prefix}-language:before { content: fa-content($fa-var-language); }
+.#{$fa-css-prefix}-laptop:before { content: fa-content($fa-var-laptop); }
+.#{$fa-css-prefix}-laptop-code:before { content: fa-content($fa-var-laptop-code); }
+.#{$fa-css-prefix}-laravel:before { content: fa-content($fa-var-laravel); }
+.#{$fa-css-prefix}-lastfm:before { content: fa-content($fa-var-lastfm); }
+.#{$fa-css-prefix}-lastfm-square:before { content: fa-content($fa-var-lastfm-square); }
+.#{$fa-css-prefix}-laugh:before { content: fa-content($fa-var-laugh); }
+.#{$fa-css-prefix}-laugh-beam:before { content: fa-content($fa-var-laugh-beam); }
+.#{$fa-css-prefix}-laugh-squint:before { content: fa-content($fa-var-laugh-squint); }
+.#{$fa-css-prefix}-laugh-wink:before { content: fa-content($fa-var-laugh-wink); }
+.#{$fa-css-prefix}-layer-group:before { content: fa-content($fa-var-layer-group); }
+.#{$fa-css-prefix}-leaf:before { content: fa-content($fa-var-leaf); }
+.#{$fa-css-prefix}-leanpub:before { content: fa-content($fa-var-leanpub); }
+.#{$fa-css-prefix}-lemon:before { content: fa-content($fa-var-lemon); }
+.#{$fa-css-prefix}-less:before { content: fa-content($fa-var-less); }
+.#{$fa-css-prefix}-less-than:before { content: fa-content($fa-var-less-than); }
+.#{$fa-css-prefix}-less-than-equal:before { content: fa-content($fa-var-less-than-equal); }
+.#{$fa-css-prefix}-level-down-alt:before { content: fa-content($fa-var-level-down-alt); }
+.#{$fa-css-prefix}-level-up-alt:before { content: fa-content($fa-var-level-up-alt); }
+.#{$fa-css-prefix}-life-ring:before { content: fa-content($fa-var-life-ring); }
+.#{$fa-css-prefix}-lightbulb:before { content: fa-content($fa-var-lightbulb); }
+.#{$fa-css-prefix}-line:before { content: fa-content($fa-var-line); }
+.#{$fa-css-prefix}-link:before { content: fa-content($fa-var-link); }
+.#{$fa-css-prefix}-linkedin:before { content: fa-content($fa-var-linkedin); }
+.#{$fa-css-prefix}-linkedin-in:before { content: fa-content($fa-var-linkedin-in); }
+.#{$fa-css-prefix}-linode:before { content: fa-content($fa-var-linode); }
+.#{$fa-css-prefix}-linux:before { content: fa-content($fa-var-linux); }
+.#{$fa-css-prefix}-lira-sign:before { content: fa-content($fa-var-lira-sign); }
+.#{$fa-css-prefix}-list:before { content: fa-content($fa-var-list); }
+.#{$fa-css-prefix}-list-alt:before { content: fa-content($fa-var-list-alt); }
+.#{$fa-css-prefix}-list-ol:before { content: fa-content($fa-var-list-ol); }
+.#{$fa-css-prefix}-list-ul:before { content: fa-content($fa-var-list-ul); }
+.#{$fa-css-prefix}-location-arrow:before { content: fa-content($fa-var-location-arrow); }
+.#{$fa-css-prefix}-lock:before { content: fa-content($fa-var-lock); }
+.#{$fa-css-prefix}-lock-open:before { content: fa-content($fa-var-lock-open); }
+.#{$fa-css-prefix}-long-arrow-alt-down:before { content: fa-content($fa-var-long-arrow-alt-down); }
+.#{$fa-css-prefix}-long-arrow-alt-left:before { content: fa-content($fa-var-long-arrow-alt-left); }
+.#{$fa-css-prefix}-long-arrow-alt-right:before { content: fa-content($fa-var-long-arrow-alt-right); }
+.#{$fa-css-prefix}-long-arrow-alt-up:before { content: fa-content($fa-var-long-arrow-alt-up); }
+.#{$fa-css-prefix}-low-vision:before { content: fa-content($fa-var-low-vision); }
+.#{$fa-css-prefix}-luggage-cart:before { content: fa-content($fa-var-luggage-cart); }
+.#{$fa-css-prefix}-lyft:before { content: fa-content($fa-var-lyft); }
+.#{$fa-css-prefix}-magento:before { content: fa-content($fa-var-magento); }
+.#{$fa-css-prefix}-magic:before { content: fa-content($fa-var-magic); }
+.#{$fa-css-prefix}-magnet:before { content: fa-content($fa-var-magnet); }
+.#{$fa-css-prefix}-mail-bulk:before { content: fa-content($fa-var-mail-bulk); }
+.#{$fa-css-prefix}-mailchimp:before { content: fa-content($fa-var-mailchimp); }
+.#{$fa-css-prefix}-male:before { content: fa-content($fa-var-male); }
+.#{$fa-css-prefix}-mandalorian:before { content: fa-content($fa-var-mandalorian); }
+.#{$fa-css-prefix}-map:before { content: fa-content($fa-var-map); }
+.#{$fa-css-prefix}-map-marked:before { content: fa-content($fa-var-map-marked); }
+.#{$fa-css-prefix}-map-marked-alt:before { content: fa-content($fa-var-map-marked-alt); }
+.#{$fa-css-prefix}-map-marker:before { content: fa-content($fa-var-map-marker); }
+.#{$fa-css-prefix}-map-marker-alt:before { content: fa-content($fa-var-map-marker-alt); }
+.#{$fa-css-prefix}-map-pin:before { content: fa-content($fa-var-map-pin); }
+.#{$fa-css-prefix}-map-signs:before { content: fa-content($fa-var-map-signs); }
+.#{$fa-css-prefix}-markdown:before { content: fa-content($fa-var-markdown); }
+.#{$fa-css-prefix}-marker:before { content: fa-content($fa-var-marker); }
+.#{$fa-css-prefix}-mars:before { content: fa-content($fa-var-mars); }
+.#{$fa-css-prefix}-mars-double:before { content: fa-content($fa-var-mars-double); }
+.#{$fa-css-prefix}-mars-stroke:before { content: fa-content($fa-var-mars-stroke); }
+.#{$fa-css-prefix}-mars-stroke-h:before { content: fa-content($fa-var-mars-stroke-h); }
+.#{$fa-css-prefix}-mars-stroke-v:before { content: fa-content($fa-var-mars-stroke-v); }
+.#{$fa-css-prefix}-mask:before { content: fa-content($fa-var-mask); }
+.#{$fa-css-prefix}-mastodon:before { content: fa-content($fa-var-mastodon); }
+.#{$fa-css-prefix}-maxcdn:before { content: fa-content($fa-var-maxcdn); }
+.#{$fa-css-prefix}-medal:before { content: fa-content($fa-var-medal); }
+.#{$fa-css-prefix}-medapps:before { content: fa-content($fa-var-medapps); }
+.#{$fa-css-prefix}-medium:before { content: fa-content($fa-var-medium); }
+.#{$fa-css-prefix}-medium-m:before { content: fa-content($fa-var-medium-m); }
+.#{$fa-css-prefix}-medkit:before { content: fa-content($fa-var-medkit); }
+.#{$fa-css-prefix}-medrt:before { content: fa-content($fa-var-medrt); }
+.#{$fa-css-prefix}-meetup:before { content: fa-content($fa-var-meetup); }
+.#{$fa-css-prefix}-megaport:before { content: fa-content($fa-var-megaport); }
+.#{$fa-css-prefix}-meh:before { content: fa-content($fa-var-meh); }
+.#{$fa-css-prefix}-meh-blank:before { content: fa-content($fa-var-meh-blank); }
+.#{$fa-css-prefix}-meh-rolling-eyes:before { content: fa-content($fa-var-meh-rolling-eyes); }
+.#{$fa-css-prefix}-memory:before { content: fa-content($fa-var-memory); }
+.#{$fa-css-prefix}-menorah:before { content: fa-content($fa-var-menorah); }
+.#{$fa-css-prefix}-mercury:before { content: fa-content($fa-var-mercury); }
+.#{$fa-css-prefix}-meteor:before { content: fa-content($fa-var-meteor); }
+.#{$fa-css-prefix}-microchip:before { content: fa-content($fa-var-microchip); }
+.#{$fa-css-prefix}-microphone:before { content: fa-content($fa-var-microphone); }
+.#{$fa-css-prefix}-microphone-alt:before { content: fa-content($fa-var-microphone-alt); }
+.#{$fa-css-prefix}-microphone-alt-slash:before { content: fa-content($fa-var-microphone-alt-slash); }
+.#{$fa-css-prefix}-microphone-slash:before { content: fa-content($fa-var-microphone-slash); }
+.#{$fa-css-prefix}-microscope:before { content: fa-content($fa-var-microscope); }
+.#{$fa-css-prefix}-microsoft:before { content: fa-content($fa-var-microsoft); }
+.#{$fa-css-prefix}-minus:before { content: fa-content($fa-var-minus); }
+.#{$fa-css-prefix}-minus-circle:before { content: fa-content($fa-var-minus-circle); }
+.#{$fa-css-prefix}-minus-square:before { content: fa-content($fa-var-minus-square); }
+.#{$fa-css-prefix}-mix:before { content: fa-content($fa-var-mix); }
+.#{$fa-css-prefix}-mixcloud:before { content: fa-content($fa-var-mixcloud); }
+.#{$fa-css-prefix}-mizuni:before { content: fa-content($fa-var-mizuni); }
+.#{$fa-css-prefix}-mobile:before { content: fa-content($fa-var-mobile); }
+.#{$fa-css-prefix}-mobile-alt:before { content: fa-content($fa-var-mobile-alt); }
+.#{$fa-css-prefix}-modx:before { content: fa-content($fa-var-modx); }
+.#{$fa-css-prefix}-monero:before { content: fa-content($fa-var-monero); }
+.#{$fa-css-prefix}-money-bill:before { content: fa-content($fa-var-money-bill); }
+.#{$fa-css-prefix}-money-bill-alt:before { content: fa-content($fa-var-money-bill-alt); }
+.#{$fa-css-prefix}-money-bill-wave:before { content: fa-content($fa-var-money-bill-wave); }
+.#{$fa-css-prefix}-money-bill-wave-alt:before { content: fa-content($fa-var-money-bill-wave-alt); }
+.#{$fa-css-prefix}-money-check:before { content: fa-content($fa-var-money-check); }
+.#{$fa-css-prefix}-money-check-alt:before { content: fa-content($fa-var-money-check-alt); }
+.#{$fa-css-prefix}-monument:before { content: fa-content($fa-var-monument); }
+.#{$fa-css-prefix}-moon:before { content: fa-content($fa-var-moon); }
+.#{$fa-css-prefix}-mortar-pestle:before { content: fa-content($fa-var-mortar-pestle); }
+.#{$fa-css-prefix}-mosque:before { content: fa-content($fa-var-mosque); }
+.#{$fa-css-prefix}-motorcycle:before { content: fa-content($fa-var-motorcycle); }
+.#{$fa-css-prefix}-mountain:before { content: fa-content($fa-var-mountain); }
+.#{$fa-css-prefix}-mouse-pointer:before { content: fa-content($fa-var-mouse-pointer); }
+.#{$fa-css-prefix}-music:before { content: fa-content($fa-var-music); }
+.#{$fa-css-prefix}-napster:before { content: fa-content($fa-var-napster); }
+.#{$fa-css-prefix}-neos:before { content: fa-content($fa-var-neos); }
+.#{$fa-css-prefix}-network-wired:before { content: fa-content($fa-var-network-wired); }
+.#{$fa-css-prefix}-neuter:before { content: fa-content($fa-var-neuter); }
+.#{$fa-css-prefix}-newspaper:before { content: fa-content($fa-var-newspaper); }
+.#{$fa-css-prefix}-nimblr:before { content: fa-content($fa-var-nimblr); }
+.#{$fa-css-prefix}-nintendo-switch:before { content: fa-content($fa-var-nintendo-switch); }
+.#{$fa-css-prefix}-node:before { content: fa-content($fa-var-node); }
+.#{$fa-css-prefix}-node-js:before { content: fa-content($fa-var-node-js); }
+.#{$fa-css-prefix}-not-equal:before { content: fa-content($fa-var-not-equal); }
+.#{$fa-css-prefix}-notes-medical:before { content: fa-content($fa-var-notes-medical); }
+.#{$fa-css-prefix}-npm:before { content: fa-content($fa-var-npm); }
+.#{$fa-css-prefix}-ns8:before { content: fa-content($fa-var-ns8); }
+.#{$fa-css-prefix}-nutritionix:before { content: fa-content($fa-var-nutritionix); }
+.#{$fa-css-prefix}-object-group:before { content: fa-content($fa-var-object-group); }
+.#{$fa-css-prefix}-object-ungroup:before { content: fa-content($fa-var-object-ungroup); }
+.#{$fa-css-prefix}-odnoklassniki:before { content: fa-content($fa-var-odnoklassniki); }
+.#{$fa-css-prefix}-odnoklassniki-square:before { content: fa-content($fa-var-odnoklassniki-square); }
+.#{$fa-css-prefix}-oil-can:before { content: fa-content($fa-var-oil-can); }
+.#{$fa-css-prefix}-old-republic:before { content: fa-content($fa-var-old-republic); }
+.#{$fa-css-prefix}-om:before { content: fa-content($fa-var-om); }
+.#{$fa-css-prefix}-opencart:before { content: fa-content($fa-var-opencart); }
+.#{$fa-css-prefix}-openid:before { content: fa-content($fa-var-openid); }
+.#{$fa-css-prefix}-opera:before { content: fa-content($fa-var-opera); }
+.#{$fa-css-prefix}-optin-monster:before { content: fa-content($fa-var-optin-monster); }
+.#{$fa-css-prefix}-osi:before { content: fa-content($fa-var-osi); }
+.#{$fa-css-prefix}-otter:before { content: fa-content($fa-var-otter); }
+.#{$fa-css-prefix}-outdent:before { content: fa-content($fa-var-outdent); }
+.#{$fa-css-prefix}-page4:before { content: fa-content($fa-var-page4); }
+.#{$fa-css-prefix}-pagelines:before { content: fa-content($fa-var-pagelines); }
+.#{$fa-css-prefix}-paint-brush:before { content: fa-content($fa-var-paint-brush); }
+.#{$fa-css-prefix}-paint-roller:before { content: fa-content($fa-var-paint-roller); }
+.#{$fa-css-prefix}-palette:before { content: fa-content($fa-var-palette); }
+.#{$fa-css-prefix}-palfed:before { content: fa-content($fa-var-palfed); }
+.#{$fa-css-prefix}-pallet:before { content: fa-content($fa-var-pallet); }
+.#{$fa-css-prefix}-paper-plane:before { content: fa-content($fa-var-paper-plane); }
+.#{$fa-css-prefix}-paperclip:before { content: fa-content($fa-var-paperclip); }
+.#{$fa-css-prefix}-parachute-box:before { content: fa-content($fa-var-parachute-box); }
+.#{$fa-css-prefix}-paragraph:before { content: fa-content($fa-var-paragraph); }
+.#{$fa-css-prefix}-parking:before { content: fa-content($fa-var-parking); }
+.#{$fa-css-prefix}-passport:before { content: fa-content($fa-var-passport); }
+.#{$fa-css-prefix}-pastafarianism:before { content: fa-content($fa-var-pastafarianism); }
+.#{$fa-css-prefix}-paste:before { content: fa-content($fa-var-paste); }
+.#{$fa-css-prefix}-patreon:before { content: fa-content($fa-var-patreon); }
+.#{$fa-css-prefix}-pause:before { content: fa-content($fa-var-pause); }
+.#{$fa-css-prefix}-pause-circle:before { content: fa-content($fa-var-pause-circle); }
+.#{$fa-css-prefix}-paw:before { content: fa-content($fa-var-paw); }
+.#{$fa-css-prefix}-paypal:before { content: fa-content($fa-var-paypal); }
+.#{$fa-css-prefix}-peace:before { content: fa-content($fa-var-peace); }
+.#{$fa-css-prefix}-pen:before { content: fa-content($fa-var-pen); }
+.#{$fa-css-prefix}-pen-alt:before { content: fa-content($fa-var-pen-alt); }
+.#{$fa-css-prefix}-pen-fancy:before { content: fa-content($fa-var-pen-fancy); }
+.#{$fa-css-prefix}-pen-nib:before { content: fa-content($fa-var-pen-nib); }
+.#{$fa-css-prefix}-pen-square:before { content: fa-content($fa-var-pen-square); }
+.#{$fa-css-prefix}-pencil-alt:before { content: fa-content($fa-var-pencil-alt); }
+.#{$fa-css-prefix}-pencil-ruler:before { content: fa-content($fa-var-pencil-ruler); }
+.#{$fa-css-prefix}-penny-arcade:before { content: fa-content($fa-var-penny-arcade); }
+.#{$fa-css-prefix}-people-carry:before { content: fa-content($fa-var-people-carry); }
+.#{$fa-css-prefix}-percent:before { content: fa-content($fa-var-percent); }
+.#{$fa-css-prefix}-percentage:before { content: fa-content($fa-var-percentage); }
+.#{$fa-css-prefix}-periscope:before { content: fa-content($fa-var-periscope); }
+.#{$fa-css-prefix}-person-booth:before { content: fa-content($fa-var-person-booth); }
+.#{$fa-css-prefix}-phabricator:before { content: fa-content($fa-var-phabricator); }
+.#{$fa-css-prefix}-phoenix-framework:before { content: fa-content($fa-var-phoenix-framework); }
+.#{$fa-css-prefix}-phoenix-squadron:before { content: fa-content($fa-var-phoenix-squadron); }
+.#{$fa-css-prefix}-phone:before { content: fa-content($fa-var-phone); }
+.#{$fa-css-prefix}-phone-slash:before { content: fa-content($fa-var-phone-slash); }
+.#{$fa-css-prefix}-phone-square:before { content: fa-content($fa-var-phone-square); }
+.#{$fa-css-prefix}-phone-volume:before { content: fa-content($fa-var-phone-volume); }
+.#{$fa-css-prefix}-php:before { content: fa-content($fa-var-php); }
+.#{$fa-css-prefix}-pied-piper:before { content: fa-content($fa-var-pied-piper); }
+.#{$fa-css-prefix}-pied-piper-alt:before { content: fa-content($fa-var-pied-piper-alt); }
+.#{$fa-css-prefix}-pied-piper-hat:before { content: fa-content($fa-var-pied-piper-hat); }
+.#{$fa-css-prefix}-pied-piper-pp:before { content: fa-content($fa-var-pied-piper-pp); }
+.#{$fa-css-prefix}-piggy-bank:before { content: fa-content($fa-var-piggy-bank); }
+.#{$fa-css-prefix}-pills:before { content: fa-content($fa-var-pills); }
+.#{$fa-css-prefix}-pinterest:before { content: fa-content($fa-var-pinterest); }
+.#{$fa-css-prefix}-pinterest-p:before { content: fa-content($fa-var-pinterest-p); }
+.#{$fa-css-prefix}-pinterest-square:before { content: fa-content($fa-var-pinterest-square); }
+.#{$fa-css-prefix}-place-of-worship:before { content: fa-content($fa-var-place-of-worship); }
+.#{$fa-css-prefix}-plane:before { content: fa-content($fa-var-plane); }
+.#{$fa-css-prefix}-plane-arrival:before { content: fa-content($fa-var-plane-arrival); }
+.#{$fa-css-prefix}-plane-departure:before { content: fa-content($fa-var-plane-departure); }
+.#{$fa-css-prefix}-play:before { content: fa-content($fa-var-play); }
+.#{$fa-css-prefix}-play-circle:before { content: fa-content($fa-var-play-circle); }
+.#{$fa-css-prefix}-playstation:before { content: fa-content($fa-var-playstation); }
+.#{$fa-css-prefix}-plug:before { content: fa-content($fa-var-plug); }
+.#{$fa-css-prefix}-plus:before { content: fa-content($fa-var-plus); }
+.#{$fa-css-prefix}-plus-circle:before { content: fa-content($fa-var-plus-circle); }
+.#{$fa-css-prefix}-plus-square:before { content: fa-content($fa-var-plus-square); }
+.#{$fa-css-prefix}-podcast:before { content: fa-content($fa-var-podcast); }
+.#{$fa-css-prefix}-poll:before { content: fa-content($fa-var-poll); }
+.#{$fa-css-prefix}-poll-h:before { content: fa-content($fa-var-poll-h); }
+.#{$fa-css-prefix}-poo:before { content: fa-content($fa-var-poo); }
+.#{$fa-css-prefix}-poo-storm:before { content: fa-content($fa-var-poo-storm); }
+.#{$fa-css-prefix}-poop:before { content: fa-content($fa-var-poop); }
+.#{$fa-css-prefix}-portrait:before { content: fa-content($fa-var-portrait); }
+.#{$fa-css-prefix}-pound-sign:before { content: fa-content($fa-var-pound-sign); }
+.#{$fa-css-prefix}-power-off:before { content: fa-content($fa-var-power-off); }
+.#{$fa-css-prefix}-pray:before { content: fa-content($fa-var-pray); }
+.#{$fa-css-prefix}-praying-hands:before { content: fa-content($fa-var-praying-hands); }
+.#{$fa-css-prefix}-prescription:before { content: fa-content($fa-var-prescription); }
+.#{$fa-css-prefix}-prescription-bottle:before { content: fa-content($fa-var-prescription-bottle); }
+.#{$fa-css-prefix}-prescription-bottle-alt:before { content: fa-content($fa-var-prescription-bottle-alt); }
+.#{$fa-css-prefix}-print:before { content: fa-content($fa-var-print); }
+.#{$fa-css-prefix}-procedures:before { content: fa-content($fa-var-procedures); }
+.#{$fa-css-prefix}-product-hunt:before { content: fa-content($fa-var-product-hunt); }
+.#{$fa-css-prefix}-project-diagram:before { content: fa-content($fa-var-project-diagram); }
+.#{$fa-css-prefix}-pushed:before { content: fa-content($fa-var-pushed); }
+.#{$fa-css-prefix}-puzzle-piece:before { content: fa-content($fa-var-puzzle-piece); }
+.#{$fa-css-prefix}-python:before { content: fa-content($fa-var-python); }
+.#{$fa-css-prefix}-qq:before { content: fa-content($fa-var-qq); }
+.#{$fa-css-prefix}-qrcode:before { content: fa-content($fa-var-qrcode); }
+.#{$fa-css-prefix}-question:before { content: fa-content($fa-var-question); }
+.#{$fa-css-prefix}-question-circle:before { content: fa-content($fa-var-question-circle); }
+.#{$fa-css-prefix}-quidditch:before { content: fa-content($fa-var-quidditch); }
+.#{$fa-css-prefix}-quinscape:before { content: fa-content($fa-var-quinscape); }
+.#{$fa-css-prefix}-quora:before { content: fa-content($fa-var-quora); }
+.#{$fa-css-prefix}-quote-left:before { content: fa-content($fa-var-quote-left); }
+.#{$fa-css-prefix}-quote-right:before { content: fa-content($fa-var-quote-right); }
+.#{$fa-css-prefix}-quran:before { content: fa-content($fa-var-quran); }
+.#{$fa-css-prefix}-r-project:before { content: fa-content($fa-var-r-project); }
+.#{$fa-css-prefix}-rainbow:before { content: fa-content($fa-var-rainbow); }
+.#{$fa-css-prefix}-random:before { content: fa-content($fa-var-random); }
+.#{$fa-css-prefix}-ravelry:before { content: fa-content($fa-var-ravelry); }
+.#{$fa-css-prefix}-react:before { content: fa-content($fa-var-react); }
+.#{$fa-css-prefix}-reacteurope:before { content: fa-content($fa-var-reacteurope); }
+.#{$fa-css-prefix}-readme:before { content: fa-content($fa-var-readme); }
+.#{$fa-css-prefix}-rebel:before { content: fa-content($fa-var-rebel); }
+.#{$fa-css-prefix}-receipt:before { content: fa-content($fa-var-receipt); }
+.#{$fa-css-prefix}-recycle:before { content: fa-content($fa-var-recycle); }
+.#{$fa-css-prefix}-red-river:before { content: fa-content($fa-var-red-river); }
+.#{$fa-css-prefix}-reddit:before { content: fa-content($fa-var-reddit); }
+.#{$fa-css-prefix}-reddit-alien:before { content: fa-content($fa-var-reddit-alien); }
+.#{$fa-css-prefix}-reddit-square:before { content: fa-content($fa-var-reddit-square); }
+.#{$fa-css-prefix}-redo:before { content: fa-content($fa-var-redo); }
+.#{$fa-css-prefix}-redo-alt:before { content: fa-content($fa-var-redo-alt); }
+.#{$fa-css-prefix}-registered:before { content: fa-content($fa-var-registered); }
+.#{$fa-css-prefix}-renren:before { content: fa-content($fa-var-renren); }
+.#{$fa-css-prefix}-reply:before { content: fa-content($fa-var-reply); }
+.#{$fa-css-prefix}-reply-all:before { content: fa-content($fa-var-reply-all); }
+.#{$fa-css-prefix}-replyd:before { content: fa-content($fa-var-replyd); }
+.#{$fa-css-prefix}-republican:before { content: fa-content($fa-var-republican); }
+.#{$fa-css-prefix}-researchgate:before { content: fa-content($fa-var-researchgate); }
+.#{$fa-css-prefix}-resolving:before { content: fa-content($fa-var-resolving); }
+.#{$fa-css-prefix}-retweet:before { content: fa-content($fa-var-retweet); }
+.#{$fa-css-prefix}-rev:before { content: fa-content($fa-var-rev); }
+.#{$fa-css-prefix}-ribbon:before { content: fa-content($fa-var-ribbon); }
+.#{$fa-css-prefix}-ring:before { content: fa-content($fa-var-ring); }
+.#{$fa-css-prefix}-road:before { content: fa-content($fa-var-road); }
+.#{$fa-css-prefix}-robot:before { content: fa-content($fa-var-robot); }
+.#{$fa-css-prefix}-rocket:before { content: fa-content($fa-var-rocket); }
+.#{$fa-css-prefix}-rocketchat:before { content: fa-content($fa-var-rocketchat); }
+.#{$fa-css-prefix}-rockrms:before { content: fa-content($fa-var-rockrms); }
+.#{$fa-css-prefix}-route:before { content: fa-content($fa-var-route); }
+.#{$fa-css-prefix}-rss:before { content: fa-content($fa-var-rss); }
+.#{$fa-css-prefix}-rss-square:before { content: fa-content($fa-var-rss-square); }
+.#{$fa-css-prefix}-ruble-sign:before { content: fa-content($fa-var-ruble-sign); }
+.#{$fa-css-prefix}-ruler:before { content: fa-content($fa-var-ruler); }
+.#{$fa-css-prefix}-ruler-combined:before { content: fa-content($fa-var-ruler-combined); }
+.#{$fa-css-prefix}-ruler-horizontal:before { content: fa-content($fa-var-ruler-horizontal); }
+.#{$fa-css-prefix}-ruler-vertical:before { content: fa-content($fa-var-ruler-vertical); }
+.#{$fa-css-prefix}-running:before { content: fa-content($fa-var-running); }
+.#{$fa-css-prefix}-rupee-sign:before { content: fa-content($fa-var-rupee-sign); }
+.#{$fa-css-prefix}-sad-cry:before { content: fa-content($fa-var-sad-cry); }
+.#{$fa-css-prefix}-sad-tear:before { content: fa-content($fa-var-sad-tear); }
+.#{$fa-css-prefix}-safari:before { content: fa-content($fa-var-safari); }
+.#{$fa-css-prefix}-sass:before { content: fa-content($fa-var-sass); }
+.#{$fa-css-prefix}-save:before { content: fa-content($fa-var-save); }
+.#{$fa-css-prefix}-schlix:before { content: fa-content($fa-var-schlix); }
+.#{$fa-css-prefix}-school:before { content: fa-content($fa-var-school); }
+.#{$fa-css-prefix}-screwdriver:before { content: fa-content($fa-var-screwdriver); }
+.#{$fa-css-prefix}-scribd:before { content: fa-content($fa-var-scribd); }
+.#{$fa-css-prefix}-scroll:before { content: fa-content($fa-var-scroll); }
+.#{$fa-css-prefix}-search:before { content: fa-content($fa-var-search); }
+.#{$fa-css-prefix}-search-dollar:before { content: fa-content($fa-var-search-dollar); }
+.#{$fa-css-prefix}-search-location:before { content: fa-content($fa-var-search-location); }
+.#{$fa-css-prefix}-search-minus:before { content: fa-content($fa-var-search-minus); }
+.#{$fa-css-prefix}-search-plus:before { content: fa-content($fa-var-search-plus); }
+.#{$fa-css-prefix}-searchengin:before { content: fa-content($fa-var-searchengin); }
+.#{$fa-css-prefix}-seedling:before { content: fa-content($fa-var-seedling); }
+.#{$fa-css-prefix}-sellcast:before { content: fa-content($fa-var-sellcast); }
+.#{$fa-css-prefix}-sellsy:before { content: fa-content($fa-var-sellsy); }
+.#{$fa-css-prefix}-server:before { content: fa-content($fa-var-server); }
+.#{$fa-css-prefix}-servicestack:before { content: fa-content($fa-var-servicestack); }
+.#{$fa-css-prefix}-shapes:before { content: fa-content($fa-var-shapes); }
+.#{$fa-css-prefix}-share:before { content: fa-content($fa-var-share); }
+.#{$fa-css-prefix}-share-alt:before { content: fa-content($fa-var-share-alt); }
+.#{$fa-css-prefix}-share-alt-square:before { content: fa-content($fa-var-share-alt-square); }
+.#{$fa-css-prefix}-share-square:before { content: fa-content($fa-var-share-square); }
+.#{$fa-css-prefix}-shekel-sign:before { content: fa-content($fa-var-shekel-sign); }
+.#{$fa-css-prefix}-shield-alt:before { content: fa-content($fa-var-shield-alt); }
+.#{$fa-css-prefix}-ship:before { content: fa-content($fa-var-ship); }
+.#{$fa-css-prefix}-shipping-fast:before { content: fa-content($fa-var-shipping-fast); }
+.#{$fa-css-prefix}-shirtsinbulk:before { content: fa-content($fa-var-shirtsinbulk); }
+.#{$fa-css-prefix}-shoe-prints:before { content: fa-content($fa-var-shoe-prints); }
+.#{$fa-css-prefix}-shopping-bag:before { content: fa-content($fa-var-shopping-bag); }
+.#{$fa-css-prefix}-shopping-basket:before { content: fa-content($fa-var-shopping-basket); }
+.#{$fa-css-prefix}-shopping-cart:before { content: fa-content($fa-var-shopping-cart); }
+.#{$fa-css-prefix}-shopware:before { content: fa-content($fa-var-shopware); }
+.#{$fa-css-prefix}-shower:before { content: fa-content($fa-var-shower); }
+.#{$fa-css-prefix}-shuttle-van:before { content: fa-content($fa-var-shuttle-van); }
+.#{$fa-css-prefix}-sign:before { content: fa-content($fa-var-sign); }
+.#{$fa-css-prefix}-sign-in-alt:before { content: fa-content($fa-var-sign-in-alt); }
+.#{$fa-css-prefix}-sign-language:before { content: fa-content($fa-var-sign-language); }
+.#{$fa-css-prefix}-sign-out-alt:before { content: fa-content($fa-var-sign-out-alt); }
+.#{$fa-css-prefix}-signal:before { content: fa-content($fa-var-signal); }
+.#{$fa-css-prefix}-signature:before { content: fa-content($fa-var-signature); }
+.#{$fa-css-prefix}-simplybuilt:before { content: fa-content($fa-var-simplybuilt); }
+.#{$fa-css-prefix}-sistrix:before { content: fa-content($fa-var-sistrix); }
+.#{$fa-css-prefix}-sitemap:before { content: fa-content($fa-var-sitemap); }
+.#{$fa-css-prefix}-sith:before { content: fa-content($fa-var-sith); }
+.#{$fa-css-prefix}-skull:before { content: fa-content($fa-var-skull); }
+.#{$fa-css-prefix}-skull-crossbones:before { content: fa-content($fa-var-skull-crossbones); }
+.#{$fa-css-prefix}-skyatlas:before { content: fa-content($fa-var-skyatlas); }
+.#{$fa-css-prefix}-skype:before { content: fa-content($fa-var-skype); }
+.#{$fa-css-prefix}-slack:before { content: fa-content($fa-var-slack); }
+.#{$fa-css-prefix}-slack-hash:before { content: fa-content($fa-var-slack-hash); }
+.#{$fa-css-prefix}-slash:before { content: fa-content($fa-var-slash); }
+.#{$fa-css-prefix}-sliders-h:before { content: fa-content($fa-var-sliders-h); }
+.#{$fa-css-prefix}-slideshare:before { content: fa-content($fa-var-slideshare); }
+.#{$fa-css-prefix}-smile:before { content: fa-content($fa-var-smile); }
+.#{$fa-css-prefix}-smile-beam:before { content: fa-content($fa-var-smile-beam); }
+.#{$fa-css-prefix}-smile-wink:before { content: fa-content($fa-var-smile-wink); }
+.#{$fa-css-prefix}-smog:before { content: fa-content($fa-var-smog); }
+.#{$fa-css-prefix}-smoking:before { content: fa-content($fa-var-smoking); }
+.#{$fa-css-prefix}-smoking-ban:before { content: fa-content($fa-var-smoking-ban); }
+.#{$fa-css-prefix}-snapchat:before { content: fa-content($fa-var-snapchat); }
+.#{$fa-css-prefix}-snapchat-ghost:before { content: fa-content($fa-var-snapchat-ghost); }
+.#{$fa-css-prefix}-snapchat-square:before { content: fa-content($fa-var-snapchat-square); }
+.#{$fa-css-prefix}-snowflake:before { content: fa-content($fa-var-snowflake); }
+.#{$fa-css-prefix}-socks:before { content: fa-content($fa-var-socks); }
+.#{$fa-css-prefix}-solar-panel:before { content: fa-content($fa-var-solar-panel); }
+.#{$fa-css-prefix}-sort:before { content: fa-content($fa-var-sort); }
+.#{$fa-css-prefix}-sort-alpha-down:before { content: fa-content($fa-var-sort-alpha-down); }
+.#{$fa-css-prefix}-sort-alpha-up:before { content: fa-content($fa-var-sort-alpha-up); }
+.#{$fa-css-prefix}-sort-amount-down:before { content: fa-content($fa-var-sort-amount-down); }
+.#{$fa-css-prefix}-sort-amount-up:before { content: fa-content($fa-var-sort-amount-up); }
+.#{$fa-css-prefix}-sort-down:before { content: fa-content($fa-var-sort-down); }
+.#{$fa-css-prefix}-sort-numeric-down:before { content: fa-content($fa-var-sort-numeric-down); }
+.#{$fa-css-prefix}-sort-numeric-up:before { content: fa-content($fa-var-sort-numeric-up); }
+.#{$fa-css-prefix}-sort-up:before { content: fa-content($fa-var-sort-up); }
+.#{$fa-css-prefix}-soundcloud:before { content: fa-content($fa-var-soundcloud); }
+.#{$fa-css-prefix}-spa:before { content: fa-content($fa-var-spa); }
+.#{$fa-css-prefix}-space-shuttle:before { content: fa-content($fa-var-space-shuttle); }
+.#{$fa-css-prefix}-speakap:before { content: fa-content($fa-var-speakap); }
+.#{$fa-css-prefix}-spider:before { content: fa-content($fa-var-spider); }
+.#{$fa-css-prefix}-spinner:before { content: fa-content($fa-var-spinner); }
+.#{$fa-css-prefix}-splotch:before { content: fa-content($fa-var-splotch); }
+.#{$fa-css-prefix}-spotify:before { content: fa-content($fa-var-spotify); }
+.#{$fa-css-prefix}-spray-can:before { content: fa-content($fa-var-spray-can); }
+.#{$fa-css-prefix}-square:before { content: fa-content($fa-var-square); }
+.#{$fa-css-prefix}-square-full:before { content: fa-content($fa-var-square-full); }
+.#{$fa-css-prefix}-square-root-alt:before { content: fa-content($fa-var-square-root-alt); }
+.#{$fa-css-prefix}-squarespace:before { content: fa-content($fa-var-squarespace); }
+.#{$fa-css-prefix}-stack-exchange:before { content: fa-content($fa-var-stack-exchange); }
+.#{$fa-css-prefix}-stack-overflow:before { content: fa-content($fa-var-stack-overflow); }
+.#{$fa-css-prefix}-stamp:before { content: fa-content($fa-var-stamp); }
+.#{$fa-css-prefix}-star:before { content: fa-content($fa-var-star); }
+.#{$fa-css-prefix}-star-and-crescent:before { content: fa-content($fa-var-star-and-crescent); }
+.#{$fa-css-prefix}-star-half:before { content: fa-content($fa-var-star-half); }
+.#{$fa-css-prefix}-star-half-alt:before { content: fa-content($fa-var-star-half-alt); }
+.#{$fa-css-prefix}-star-of-david:before { content: fa-content($fa-var-star-of-david); }
+.#{$fa-css-prefix}-star-of-life:before { content: fa-content($fa-var-star-of-life); }
+.#{$fa-css-prefix}-staylinked:before { content: fa-content($fa-var-staylinked); }
+.#{$fa-css-prefix}-steam:before { content: fa-content($fa-var-steam); }
+.#{$fa-css-prefix}-steam-square:before { content: fa-content($fa-var-steam-square); }
+.#{$fa-css-prefix}-steam-symbol:before { content: fa-content($fa-var-steam-symbol); }
+.#{$fa-css-prefix}-step-backward:before { content: fa-content($fa-var-step-backward); }
+.#{$fa-css-prefix}-step-forward:before { content: fa-content($fa-var-step-forward); }
+.#{$fa-css-prefix}-stethoscope:before { content: fa-content($fa-var-stethoscope); }
+.#{$fa-css-prefix}-sticker-mule:before { content: fa-content($fa-var-sticker-mule); }
+.#{$fa-css-prefix}-sticky-note:before { content: fa-content($fa-var-sticky-note); }
+.#{$fa-css-prefix}-stop:before { content: fa-content($fa-var-stop); }
+.#{$fa-css-prefix}-stop-circle:before { content: fa-content($fa-var-stop-circle); }
+.#{$fa-css-prefix}-stopwatch:before { content: fa-content($fa-var-stopwatch); }
+.#{$fa-css-prefix}-store:before { content: fa-content($fa-var-store); }
+.#{$fa-css-prefix}-store-alt:before { content: fa-content($fa-var-store-alt); }
+.#{$fa-css-prefix}-strava:before { content: fa-content($fa-var-strava); }
+.#{$fa-css-prefix}-stream:before { content: fa-content($fa-var-stream); }
+.#{$fa-css-prefix}-street-view:before { content: fa-content($fa-var-street-view); }
+.#{$fa-css-prefix}-strikethrough:before { content: fa-content($fa-var-strikethrough); }
+.#{$fa-css-prefix}-stripe:before { content: fa-content($fa-var-stripe); }
+.#{$fa-css-prefix}-stripe-s:before { content: fa-content($fa-var-stripe-s); }
+.#{$fa-css-prefix}-stroopwafel:before { content: fa-content($fa-var-stroopwafel); }
+.#{$fa-css-prefix}-studiovinari:before { content: fa-content($fa-var-studiovinari); }
+.#{$fa-css-prefix}-stumbleupon:before { content: fa-content($fa-var-stumbleupon); }
+.#{$fa-css-prefix}-stumbleupon-circle:before { content: fa-content($fa-var-stumbleupon-circle); }
+.#{$fa-css-prefix}-subscript:before { content: fa-content($fa-var-subscript); }
+.#{$fa-css-prefix}-subway:before { content: fa-content($fa-var-subway); }
+.#{$fa-css-prefix}-suitcase:before { content: fa-content($fa-var-suitcase); }
+.#{$fa-css-prefix}-suitcase-rolling:before { content: fa-content($fa-var-suitcase-rolling); }
+.#{$fa-css-prefix}-sun:before { content: fa-content($fa-var-sun); }
+.#{$fa-css-prefix}-superpowers:before { content: fa-content($fa-var-superpowers); }
+.#{$fa-css-prefix}-superscript:before { content: fa-content($fa-var-superscript); }
+.#{$fa-css-prefix}-supple:before { content: fa-content($fa-var-supple); }
+.#{$fa-css-prefix}-surprise:before { content: fa-content($fa-var-surprise); }
+.#{$fa-css-prefix}-swatchbook:before { content: fa-content($fa-var-swatchbook); }
+.#{$fa-css-prefix}-swimmer:before { content: fa-content($fa-var-swimmer); }
+.#{$fa-css-prefix}-swimming-pool:before { content: fa-content($fa-var-swimming-pool); }
+.#{$fa-css-prefix}-synagogue:before { content: fa-content($fa-var-synagogue); }
+.#{$fa-css-prefix}-sync:before { content: fa-content($fa-var-sync); }
+.#{$fa-css-prefix}-sync-alt:before { content: fa-content($fa-var-sync-alt); }
+.#{$fa-css-prefix}-syringe:before { content: fa-content($fa-var-syringe); }
+.#{$fa-css-prefix}-table:before { content: fa-content($fa-var-table); }
+.#{$fa-css-prefix}-table-tennis:before { content: fa-content($fa-var-table-tennis); }
+.#{$fa-css-prefix}-tablet:before { content: fa-content($fa-var-tablet); }
+.#{$fa-css-prefix}-tablet-alt:before { content: fa-content($fa-var-tablet-alt); }
+.#{$fa-css-prefix}-tablets:before { content: fa-content($fa-var-tablets); }
+.#{$fa-css-prefix}-tachometer-alt:before { content: fa-content($fa-var-tachometer-alt); }
+.#{$fa-css-prefix}-tag:before { content: fa-content($fa-var-tag); }
+.#{$fa-css-prefix}-tags:before { content: fa-content($fa-var-tags); }
+.#{$fa-css-prefix}-tape:before { content: fa-content($fa-var-tape); }
+.#{$fa-css-prefix}-tasks:before { content: fa-content($fa-var-tasks); }
+.#{$fa-css-prefix}-taxi:before { content: fa-content($fa-var-taxi); }
+.#{$fa-css-prefix}-teamspeak:before { content: fa-content($fa-var-teamspeak); }
+.#{$fa-css-prefix}-teeth:before { content: fa-content($fa-var-teeth); }
+.#{$fa-css-prefix}-teeth-open:before { content: fa-content($fa-var-teeth-open); }
+.#{$fa-css-prefix}-telegram:before { content: fa-content($fa-var-telegram); }
+.#{$fa-css-prefix}-telegram-plane:before { content: fa-content($fa-var-telegram-plane); }
+.#{$fa-css-prefix}-temperature-high:before { content: fa-content($fa-var-temperature-high); }
+.#{$fa-css-prefix}-temperature-low:before { content: fa-content($fa-var-temperature-low); }
+.#{$fa-css-prefix}-tencent-weibo:before { content: fa-content($fa-var-tencent-weibo); }
+.#{$fa-css-prefix}-terminal:before { content: fa-content($fa-var-terminal); }
+.#{$fa-css-prefix}-text-height:before { content: fa-content($fa-var-text-height); }
+.#{$fa-css-prefix}-text-width:before { content: fa-content($fa-var-text-width); }
+.#{$fa-css-prefix}-th:before { content: fa-content($fa-var-th); }
+.#{$fa-css-prefix}-th-large:before { content: fa-content($fa-var-th-large); }
+.#{$fa-css-prefix}-th-list:before { content: fa-content($fa-var-th-list); }
+.#{$fa-css-prefix}-the-red-yeti:before { content: fa-content($fa-var-the-red-yeti); }
+.#{$fa-css-prefix}-theater-masks:before { content: fa-content($fa-var-theater-masks); }
+.#{$fa-css-prefix}-themeco:before { content: fa-content($fa-var-themeco); }
+.#{$fa-css-prefix}-themeisle:before { content: fa-content($fa-var-themeisle); }
+.#{$fa-css-prefix}-thermometer:before { content: fa-content($fa-var-thermometer); }
+.#{$fa-css-prefix}-thermometer-empty:before { content: fa-content($fa-var-thermometer-empty); }
+.#{$fa-css-prefix}-thermometer-full:before { content: fa-content($fa-var-thermometer-full); }
+.#{$fa-css-prefix}-thermometer-half:before { content: fa-content($fa-var-thermometer-half); }
+.#{$fa-css-prefix}-thermometer-quarter:before { content: fa-content($fa-var-thermometer-quarter); }
+.#{$fa-css-prefix}-thermometer-three-quarters:before { content: fa-content($fa-var-thermometer-three-quarters); }
+.#{$fa-css-prefix}-think-peaks:before { content: fa-content($fa-var-think-peaks); }
+.#{$fa-css-prefix}-thumbs-down:before { content: fa-content($fa-var-thumbs-down); }
+.#{$fa-css-prefix}-thumbs-up:before { content: fa-content($fa-var-thumbs-up); }
+.#{$fa-css-prefix}-thumbtack:before { content: fa-content($fa-var-thumbtack); }
+.#{$fa-css-prefix}-ticket-alt:before { content: fa-content($fa-var-ticket-alt); }
+.#{$fa-css-prefix}-times:before { content: fa-content($fa-var-times); }
+.#{$fa-css-prefix}-times-circle:before { content: fa-content($fa-var-times-circle); }
+.#{$fa-css-prefix}-tint:before { content: fa-content($fa-var-tint); }
+.#{$fa-css-prefix}-tint-slash:before { content: fa-content($fa-var-tint-slash); }
+.#{$fa-css-prefix}-tired:before { content: fa-content($fa-var-tired); }
+.#{$fa-css-prefix}-toggle-off:before { content: fa-content($fa-var-toggle-off); }
+.#{$fa-css-prefix}-toggle-on:before { content: fa-content($fa-var-toggle-on); }
+.#{$fa-css-prefix}-toilet-paper:before { content: fa-content($fa-var-toilet-paper); }
+.#{$fa-css-prefix}-toolbox:before { content: fa-content($fa-var-toolbox); }
+.#{$fa-css-prefix}-tooth:before { content: fa-content($fa-var-tooth); }
+.#{$fa-css-prefix}-torah:before { content: fa-content($fa-var-torah); }
+.#{$fa-css-prefix}-torii-gate:before { content: fa-content($fa-var-torii-gate); }
+.#{$fa-css-prefix}-tractor:before { content: fa-content($fa-var-tractor); }
+.#{$fa-css-prefix}-trade-federation:before { content: fa-content($fa-var-trade-federation); }
+.#{$fa-css-prefix}-trademark:before { content: fa-content($fa-var-trademark); }
+.#{$fa-css-prefix}-traffic-light:before { content: fa-content($fa-var-traffic-light); }
+.#{$fa-css-prefix}-train:before { content: fa-content($fa-var-train); }
+.#{$fa-css-prefix}-transgender:before { content: fa-content($fa-var-transgender); }
+.#{$fa-css-prefix}-transgender-alt:before { content: fa-content($fa-var-transgender-alt); }
+.#{$fa-css-prefix}-trash:before { content: fa-content($fa-var-trash); }
+.#{$fa-css-prefix}-trash-alt:before { content: fa-content($fa-var-trash-alt); }
+.#{$fa-css-prefix}-tree:before { content: fa-content($fa-var-tree); }
+.#{$fa-css-prefix}-trello:before { content: fa-content($fa-var-trello); }
+.#{$fa-css-prefix}-tripadvisor:before { content: fa-content($fa-var-tripadvisor); }
+.#{$fa-css-prefix}-trophy:before { content: fa-content($fa-var-trophy); }
+.#{$fa-css-prefix}-truck:before { content: fa-content($fa-var-truck); }
+.#{$fa-css-prefix}-truck-loading:before { content: fa-content($fa-var-truck-loading); }
+.#{$fa-css-prefix}-truck-monster:before { content: fa-content($fa-var-truck-monster); }
+.#{$fa-css-prefix}-truck-moving:before { content: fa-content($fa-var-truck-moving); }
+.#{$fa-css-prefix}-truck-pickup:before { content: fa-content($fa-var-truck-pickup); }
+.#{$fa-css-prefix}-tshirt:before { content: fa-content($fa-var-tshirt); }
+.#{$fa-css-prefix}-tty:before { content: fa-content($fa-var-tty); }
+.#{$fa-css-prefix}-tumblr:before { content: fa-content($fa-var-tumblr); }
+.#{$fa-css-prefix}-tumblr-square:before { content: fa-content($fa-var-tumblr-square); }
+.#{$fa-css-prefix}-tv:before { content: fa-content($fa-var-tv); }
+.#{$fa-css-prefix}-twitch:before { content: fa-content($fa-var-twitch); }
+.#{$fa-css-prefix}-twitter:before { content: fa-content($fa-var-twitter); }
+.#{$fa-css-prefix}-twitter-square:before { content: fa-content($fa-var-twitter-square); }
+.#{$fa-css-prefix}-typo3:before { content: fa-content($fa-var-typo3); }
+.#{$fa-css-prefix}-uber:before { content: fa-content($fa-var-uber); }
+.#{$fa-css-prefix}-uikit:before { content: fa-content($fa-var-uikit); }
+.#{$fa-css-prefix}-umbrella:before { content: fa-content($fa-var-umbrella); }
+.#{$fa-css-prefix}-umbrella-beach:before { content: fa-content($fa-var-umbrella-beach); }
+.#{$fa-css-prefix}-underline:before { content: fa-content($fa-var-underline); }
+.#{$fa-css-prefix}-undo:before { content: fa-content($fa-var-undo); }
+.#{$fa-css-prefix}-undo-alt:before { content: fa-content($fa-var-undo-alt); }
+.#{$fa-css-prefix}-uniregistry:before { content: fa-content($fa-var-uniregistry); }
+.#{$fa-css-prefix}-universal-access:before { content: fa-content($fa-var-universal-access); }
+.#{$fa-css-prefix}-university:before { content: fa-content($fa-var-university); }
+.#{$fa-css-prefix}-unlink:before { content: fa-content($fa-var-unlink); }
+.#{$fa-css-prefix}-unlock:before { content: fa-content($fa-var-unlock); }
+.#{$fa-css-prefix}-unlock-alt:before { content: fa-content($fa-var-unlock-alt); }
+.#{$fa-css-prefix}-untappd:before { content: fa-content($fa-var-untappd); }
+.#{$fa-css-prefix}-upload:before { content: fa-content($fa-var-upload); }
+.#{$fa-css-prefix}-usb:before { content: fa-content($fa-var-usb); }
+.#{$fa-css-prefix}-user:before { content: fa-content($fa-var-user); }
+.#{$fa-css-prefix}-user-alt:before { content: fa-content($fa-var-user-alt); }
+.#{$fa-css-prefix}-user-alt-slash:before { content: fa-content($fa-var-user-alt-slash); }
+.#{$fa-css-prefix}-user-astronaut:before { content: fa-content($fa-var-user-astronaut); }
+.#{$fa-css-prefix}-user-check:before { content: fa-content($fa-var-user-check); }
+.#{$fa-css-prefix}-user-circle:before { content: fa-content($fa-var-user-circle); }
+.#{$fa-css-prefix}-user-clock:before { content: fa-content($fa-var-user-clock); }
+.#{$fa-css-prefix}-user-cog:before { content: fa-content($fa-var-user-cog); }
+.#{$fa-css-prefix}-user-edit:before { content: fa-content($fa-var-user-edit); }
+.#{$fa-css-prefix}-user-friends:before { content: fa-content($fa-var-user-friends); }
+.#{$fa-css-prefix}-user-graduate:before { content: fa-content($fa-var-user-graduate); }
+.#{$fa-css-prefix}-user-injured:before { content: fa-content($fa-var-user-injured); }
+.#{$fa-css-prefix}-user-lock:before { content: fa-content($fa-var-user-lock); }
+.#{$fa-css-prefix}-user-md:before { content: fa-content($fa-var-user-md); }
+.#{$fa-css-prefix}-user-minus:before { content: fa-content($fa-var-user-minus); }
+.#{$fa-css-prefix}-user-ninja:before { content: fa-content($fa-var-user-ninja); }
+.#{$fa-css-prefix}-user-plus:before { content: fa-content($fa-var-user-plus); }
+.#{$fa-css-prefix}-user-secret:before { content: fa-content($fa-var-user-secret); }
+.#{$fa-css-prefix}-user-shield:before { content: fa-content($fa-var-user-shield); }
+.#{$fa-css-prefix}-user-slash:before { content: fa-content($fa-var-user-slash); }
+.#{$fa-css-prefix}-user-tag:before { content: fa-content($fa-var-user-tag); }
+.#{$fa-css-prefix}-user-tie:before { content: fa-content($fa-var-user-tie); }
+.#{$fa-css-prefix}-user-times:before { content: fa-content($fa-var-user-times); }
+.#{$fa-css-prefix}-users:before { content: fa-content($fa-var-users); }
+.#{$fa-css-prefix}-users-cog:before { content: fa-content($fa-var-users-cog); }
+.#{$fa-css-prefix}-ussunnah:before { content: fa-content($fa-var-ussunnah); }
+.#{$fa-css-prefix}-utensil-spoon:before { content: fa-content($fa-var-utensil-spoon); }
+.#{$fa-css-prefix}-utensils:before { content: fa-content($fa-var-utensils); }
+.#{$fa-css-prefix}-vaadin:before { content: fa-content($fa-var-vaadin); }
+.#{$fa-css-prefix}-vector-square:before { content: fa-content($fa-var-vector-square); }
+.#{$fa-css-prefix}-venus:before { content: fa-content($fa-var-venus); }
+.#{$fa-css-prefix}-venus-double:before { content: fa-content($fa-var-venus-double); }
+.#{$fa-css-prefix}-venus-mars:before { content: fa-content($fa-var-venus-mars); }
+.#{$fa-css-prefix}-viacoin:before { content: fa-content($fa-var-viacoin); }
+.#{$fa-css-prefix}-viadeo:before { content: fa-content($fa-var-viadeo); }
+.#{$fa-css-prefix}-viadeo-square:before { content: fa-content($fa-var-viadeo-square); }
+.#{$fa-css-prefix}-vial:before { content: fa-content($fa-var-vial); }
+.#{$fa-css-prefix}-vials:before { content: fa-content($fa-var-vials); }
+.#{$fa-css-prefix}-viber:before { content: fa-content($fa-var-viber); }
+.#{$fa-css-prefix}-video:before { content: fa-content($fa-var-video); }
+.#{$fa-css-prefix}-video-slash:before { content: fa-content($fa-var-video-slash); }
+.#{$fa-css-prefix}-vihara:before { content: fa-content($fa-var-vihara); }
+.#{$fa-css-prefix}-vimeo:before { content: fa-content($fa-var-vimeo); }
+.#{$fa-css-prefix}-vimeo-square:before { content: fa-content($fa-var-vimeo-square); }
+.#{$fa-css-prefix}-vimeo-v:before { content: fa-content($fa-var-vimeo-v); }
+.#{$fa-css-prefix}-vine:before { content: fa-content($fa-var-vine); }
+.#{$fa-css-prefix}-vk:before { content: fa-content($fa-var-vk); }
+.#{$fa-css-prefix}-vnv:before { content: fa-content($fa-var-vnv); }
+.#{$fa-css-prefix}-volleyball-ball:before { content: fa-content($fa-var-volleyball-ball); }
+.#{$fa-css-prefix}-volume-down:before { content: fa-content($fa-var-volume-down); }
+.#{$fa-css-prefix}-volume-mute:before { content: fa-content($fa-var-volume-mute); }
+.#{$fa-css-prefix}-volume-off:before { content: fa-content($fa-var-volume-off); }
+.#{$fa-css-prefix}-volume-up:before { content: fa-content($fa-var-volume-up); }
+.#{$fa-css-prefix}-vote-yea:before { content: fa-content($fa-var-vote-yea); }
+.#{$fa-css-prefix}-vr-cardboard:before { content: fa-content($fa-var-vr-cardboard); }
+.#{$fa-css-prefix}-vuejs:before { content: fa-content($fa-var-vuejs); }
+.#{$fa-css-prefix}-walking:before { content: fa-content($fa-var-walking); }
+.#{$fa-css-prefix}-wallet:before { content: fa-content($fa-var-wallet); }
+.#{$fa-css-prefix}-warehouse:before { content: fa-content($fa-var-warehouse); }
+.#{$fa-css-prefix}-water:before { content: fa-content($fa-var-water); }
+.#{$fa-css-prefix}-weebly:before { content: fa-content($fa-var-weebly); }
+.#{$fa-css-prefix}-weibo:before { content: fa-content($fa-var-weibo); }
+.#{$fa-css-prefix}-weight:before { content: fa-content($fa-var-weight); }
+.#{$fa-css-prefix}-weight-hanging:before { content: fa-content($fa-var-weight-hanging); }
+.#{$fa-css-prefix}-weixin:before { content: fa-content($fa-var-weixin); }
+.#{$fa-css-prefix}-whatsapp:before { content: fa-content($fa-var-whatsapp); }
+.#{$fa-css-prefix}-whatsapp-square:before { content: fa-content($fa-var-whatsapp-square); }
+.#{$fa-css-prefix}-wheelchair:before { content: fa-content($fa-var-wheelchair); }
+.#{$fa-css-prefix}-whmcs:before { content: fa-content($fa-var-whmcs); }
+.#{$fa-css-prefix}-wifi:before { content: fa-content($fa-var-wifi); }
+.#{$fa-css-prefix}-wikipedia-w:before { content: fa-content($fa-var-wikipedia-w); }
+.#{$fa-css-prefix}-wind:before { content: fa-content($fa-var-wind); }
+.#{$fa-css-prefix}-window-close:before { content: fa-content($fa-var-window-close); }
+.#{$fa-css-prefix}-window-maximize:before { content: fa-content($fa-var-window-maximize); }
+.#{$fa-css-prefix}-window-minimize:before { content: fa-content($fa-var-window-minimize); }
+.#{$fa-css-prefix}-window-restore:before { content: fa-content($fa-var-window-restore); }
+.#{$fa-css-prefix}-windows:before { content: fa-content($fa-var-windows); }
+.#{$fa-css-prefix}-wine-bottle:before { content: fa-content($fa-var-wine-bottle); }
+.#{$fa-css-prefix}-wine-glass:before { content: fa-content($fa-var-wine-glass); }
+.#{$fa-css-prefix}-wine-glass-alt:before { content: fa-content($fa-var-wine-glass-alt); }
+.#{$fa-css-prefix}-wix:before { content: fa-content($fa-var-wix); }
+.#{$fa-css-prefix}-wizards-of-the-coast:before { content: fa-content($fa-var-wizards-of-the-coast); }
+.#{$fa-css-prefix}-wolf-pack-battalion:before { content: fa-content($fa-var-wolf-pack-battalion); }
+.#{$fa-css-prefix}-won-sign:before { content: fa-content($fa-var-won-sign); }
+.#{$fa-css-prefix}-wordpress:before { content: fa-content($fa-var-wordpress); }
+.#{$fa-css-prefix}-wordpress-simple:before { content: fa-content($fa-var-wordpress-simple); }
+.#{$fa-css-prefix}-wpbeginner:before { content: fa-content($fa-var-wpbeginner); }
+.#{$fa-css-prefix}-wpexplorer:before { content: fa-content($fa-var-wpexplorer); }
+.#{$fa-css-prefix}-wpforms:before { content: fa-content($fa-var-wpforms); }
+.#{$fa-css-prefix}-wpressr:before { content: fa-content($fa-var-wpressr); }
+.#{$fa-css-prefix}-wrench:before { content: fa-content($fa-var-wrench); }
+.#{$fa-css-prefix}-x-ray:before { content: fa-content($fa-var-x-ray); }
+.#{$fa-css-prefix}-xbox:before { content: fa-content($fa-var-xbox); }
+.#{$fa-css-prefix}-xing:before { content: fa-content($fa-var-xing); }
+.#{$fa-css-prefix}-xing-square:before { content: fa-content($fa-var-xing-square); }
+.#{$fa-css-prefix}-y-combinator:before { content: fa-content($fa-var-y-combinator); }
+.#{$fa-css-prefix}-yahoo:before { content: fa-content($fa-var-yahoo); }
+.#{$fa-css-prefix}-yandex:before { content: fa-content($fa-var-yandex); }
+.#{$fa-css-prefix}-yandex-international:before { content: fa-content($fa-var-yandex-international); }
+.#{$fa-css-prefix}-yelp:before { content: fa-content($fa-var-yelp); }
+.#{$fa-css-prefix}-yen-sign:before { content: fa-content($fa-var-yen-sign); }
+.#{$fa-css-prefix}-yin-yang:before { content: fa-content($fa-var-yin-yang); }
+.#{$fa-css-prefix}-yoast:before { content: fa-content($fa-var-yoast); }
+.#{$fa-css-prefix}-youtube:before { content: fa-content($fa-var-youtube); }
+.#{$fa-css-prefix}-youtube-square:before { content: fa-content($fa-var-youtube-square); }
+.#{$fa-css-prefix}-zhihu:before { content: fa-content($fa-var-zhihu); }
diff --git a/_sass/vendor/font-awesome/_larger.scss b/_sass/vendor/font-awesome/_larger.scss
new file mode 100644
index 0000000..27c2ad5
--- /dev/null
+++ b/_sass/vendor/font-awesome/_larger.scss
@@ -0,0 +1,23 @@
+// Icon Sizes
+// -------------------------
+
+// makes the font 33% larger relative to the icon container
+.#{$fa-css-prefix}-lg {
+ font-size: (4em / 3);
+ line-height: (3em / 4);
+ vertical-align: -.0667em;
+}
+
+.#{$fa-css-prefix}-xs {
+ font-size: .75em;
+}
+
+.#{$fa-css-prefix}-sm {
+ font-size: .875em;
+}
+
+@for $i from 1 through 10 {
+ .#{$fa-css-prefix}-#{$i}x {
+ font-size: $i * 1em;
+ }
+}
diff --git a/_sass/vendor/font-awesome/_list.scss b/_sass/vendor/font-awesome/_list.scss
new file mode 100644
index 0000000..8ebf333
--- /dev/null
+++ b/_sass/vendor/font-awesome/_list.scss
@@ -0,0 +1,18 @@
+// List Icons
+// -------------------------
+
+.#{$fa-css-prefix}-ul {
+ list-style-type: none;
+ margin-left: $fa-li-width * 5/4;
+ padding-left: 0;
+
+ > li { position: relative; }
+}
+
+.#{$fa-css-prefix}-li {
+ left: -$fa-li-width;
+ position: absolute;
+ text-align: center;
+ width: $fa-li-width;
+ line-height: inherit;
+}
diff --git a/_sass/vendor/font-awesome/_mixins.scss b/_sass/vendor/font-awesome/_mixins.scss
new file mode 100644
index 0000000..50a2e9f
--- /dev/null
+++ b/_sass/vendor/font-awesome/_mixins.scss
@@ -0,0 +1,57 @@
+// Mixins
+// --------------------------
+
+@mixin fa-icon {
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ display: inline-block;
+ font-style: normal;
+ font-variant: normal;
+ font-weight: normal;
+ line-height: 1;
+ vertical-align: -.125em;
+}
+
+@mixin fa-icon-rotate($degrees, $rotation) {
+ -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation})";
+ transform: rotate($degrees);
+}
+
+@mixin fa-icon-flip($horiz, $vert, $rotation) {
+ -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation}, mirror=1)";
+ transform: scale($horiz, $vert);
+}
+
+
+// Only display content to screen readers. A la Bootstrap 4.
+//
+// See: http://a11yproject.com/posts/how-to-hide-content/
+
+@mixin sr-only {
+ border: 0;
+ clip: rect(0, 0, 0, 0);
+ height: 1px;
+ margin: -1px;
+ overflow: hidden;
+ padding: 0;
+ position: absolute;
+ width: 1px;
+}
+
+// Use in conjunction with .sr-only to only display content when it's focused.
+//
+// Useful for "Skip to main content" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1
+//
+// Credit: HTML5 Boilerplate
+
+@mixin sr-only-focusable {
+ &:active,
+ &:focus {
+ clip: auto;
+ height: auto;
+ margin: 0;
+ overflow: visible;
+ position: static;
+ width: auto;
+ }
+}
diff --git a/_sass/vendor/font-awesome/_rotated-flipped.scss b/_sass/vendor/font-awesome/_rotated-flipped.scss
new file mode 100644
index 0000000..995bc4c
--- /dev/null
+++ b/_sass/vendor/font-awesome/_rotated-flipped.scss
@@ -0,0 +1,23 @@
+// Rotated & Flipped Icons
+// -------------------------
+
+.#{$fa-css-prefix}-rotate-90 { @include fa-icon-rotate(90deg, 1); }
+.#{$fa-css-prefix}-rotate-180 { @include fa-icon-rotate(180deg, 2); }
+.#{$fa-css-prefix}-rotate-270 { @include fa-icon-rotate(270deg, 3); }
+
+.#{$fa-css-prefix}-flip-horizontal { @include fa-icon-flip(-1, 1, 0); }
+.#{$fa-css-prefix}-flip-vertical { @include fa-icon-flip(1, -1, 2); }
+.#{$fa-css-prefix}-flip-horizontal.#{$fa-css-prefix}-flip-vertical { @include fa-icon-flip(-1, -1, 2); }
+
+// Hook for IE8-9
+// -------------------------
+
+:root {
+ .#{$fa-css-prefix}-rotate-90,
+ .#{$fa-css-prefix}-rotate-180,
+ .#{$fa-css-prefix}-rotate-270,
+ .#{$fa-css-prefix}-flip-horizontal,
+ .#{$fa-css-prefix}-flip-vertical {
+ filter: none;
+ }
+}
diff --git a/_sass/vendor/font-awesome/_screen-reader.scss b/_sass/vendor/font-awesome/_screen-reader.scss
new file mode 100644
index 0000000..5d0ab26
--- /dev/null
+++ b/_sass/vendor/font-awesome/_screen-reader.scss
@@ -0,0 +1,5 @@
+// Screen Readers
+// -------------------------
+
+.sr-only { @include sr-only; }
+.sr-only-focusable { @include sr-only-focusable; }
diff --git a/_sass/vendor/font-awesome/_shims.scss b/_sass/vendor/font-awesome/_shims.scss
new file mode 100644
index 0000000..00fc279
--- /dev/null
+++ b/_sass/vendor/font-awesome/_shims.scss
@@ -0,0 +1,2062 @@
+.#{$fa-css-prefix}.#{$fa-css-prefix}-glass:before { content: fa-content($fa-var-glass-martini); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-meetup {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-star-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-star-o:before { content: fa-content($fa-var-star); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-remove:before { content: fa-content($fa-var-times); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-close:before { content: fa-content($fa-var-times); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-gear:before { content: fa-content($fa-var-cog); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-trash-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-trash-o:before { content: fa-content($fa-var-trash-alt); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-o:before { content: fa-content($fa-var-file); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-clock-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-clock-o:before { content: fa-content($fa-var-clock); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-arrow-circle-o-down {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-arrow-circle-o-down:before { content: fa-content($fa-var-arrow-alt-circle-down); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-arrow-circle-o-up {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-arrow-circle-o-up:before { content: fa-content($fa-var-arrow-alt-circle-up); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-play-circle-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-play-circle-o:before { content: fa-content($fa-var-play-circle); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-repeat:before { content: fa-content($fa-var-redo); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-rotate-right:before { content: fa-content($fa-var-redo); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-refresh:before { content: fa-content($fa-var-sync); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-list-alt {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-dedent:before { content: fa-content($fa-var-outdent); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-video-camera:before { content: fa-content($fa-var-video); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-picture-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-picture-o:before { content: fa-content($fa-var-image); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-photo {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-photo:before { content: fa-content($fa-var-image); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-image {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-image:before { content: fa-content($fa-var-image); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-pencil:before { content: fa-content($fa-var-pencil-alt); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-map-marker:before { content: fa-content($fa-var-map-marker-alt); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-pencil-square-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-pencil-square-o:before { content: fa-content($fa-var-edit); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-share-square-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-share-square-o:before { content: fa-content($fa-var-share-square); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-check-square-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-check-square-o:before { content: fa-content($fa-var-check-square); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-arrows:before { content: fa-content($fa-var-arrows-alt); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-times-circle-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-times-circle-o:before { content: fa-content($fa-var-times-circle); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-check-circle-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-check-circle-o:before { content: fa-content($fa-var-check-circle); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-mail-forward:before { content: fa-content($fa-var-share); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-eye {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-eye-slash {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-warning:before { content: fa-content($fa-var-exclamation-triangle); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-calendar:before { content: fa-content($fa-var-calendar-alt); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-arrows-v:before { content: fa-content($fa-var-arrows-alt-v); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-arrows-h:before { content: fa-content($fa-var-arrows-alt-h); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-bar-chart {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-bar-chart:before { content: fa-content($fa-var-chart-bar); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-bar-chart-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-bar-chart-o:before { content: fa-content($fa-var-chart-bar); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-twitter-square {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-facebook-square {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-gears:before { content: fa-content($fa-var-cogs); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-thumbs-o-up {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-thumbs-o-up:before { content: fa-content($fa-var-thumbs-up); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-thumbs-o-down {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-thumbs-o-down:before { content: fa-content($fa-var-thumbs-down); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-heart-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-heart-o:before { content: fa-content($fa-var-heart); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-sign-out:before { content: fa-content($fa-var-sign-out-alt); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-linkedin-square {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-linkedin-square:before { content: fa-content($fa-var-linkedin); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-thumb-tack:before { content: fa-content($fa-var-thumbtack); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-external-link:before { content: fa-content($fa-var-external-link-alt); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-sign-in:before { content: fa-content($fa-var-sign-in-alt); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-github-square {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-lemon-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-lemon-o:before { content: fa-content($fa-var-lemon); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-square-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-square-o:before { content: fa-content($fa-var-square); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-bookmark-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-bookmark-o:before { content: fa-content($fa-var-bookmark); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-twitter {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-facebook {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-facebook:before { content: fa-content($fa-var-facebook-f); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-facebook-f {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-facebook-f:before { content: fa-content($fa-var-facebook-f); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-github {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-credit-card {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-feed:before { content: fa-content($fa-var-rss); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hdd-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hdd-o:before { content: fa-content($fa-var-hdd); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-o-right {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-o-right:before { content: fa-content($fa-var-hand-point-right); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-o-left {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-o-left:before { content: fa-content($fa-var-hand-point-left); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-o-up {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-o-up:before { content: fa-content($fa-var-hand-point-up); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-o-down {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-o-down:before { content: fa-content($fa-var-hand-point-down); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-arrows-alt:before { content: fa-content($fa-var-expand-arrows-alt); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-group:before { content: fa-content($fa-var-users); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-chain:before { content: fa-content($fa-var-link); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-scissors:before { content: fa-content($fa-var-cut); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-files-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-files-o:before { content: fa-content($fa-var-copy); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-floppy-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-floppy-o:before { content: fa-content($fa-var-save); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-navicon:before { content: fa-content($fa-var-bars); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-reorder:before { content: fa-content($fa-var-bars); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-pinterest {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-pinterest-square {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-google-plus-square {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-google-plus {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-google-plus:before { content: fa-content($fa-var-google-plus-g); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-money {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-money:before { content: fa-content($fa-var-money-bill-alt); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-unsorted:before { content: fa-content($fa-var-sort); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-sort-desc:before { content: fa-content($fa-var-sort-down); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-sort-asc:before { content: fa-content($fa-var-sort-up); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-linkedin {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-linkedin:before { content: fa-content($fa-var-linkedin-in); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-rotate-left:before { content: fa-content($fa-var-undo); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-legal:before { content: fa-content($fa-var-gavel); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-tachometer:before { content: fa-content($fa-var-tachometer-alt); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-dashboard:before { content: fa-content($fa-var-tachometer-alt); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-comment-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-comment-o:before { content: fa-content($fa-var-comment); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-comments-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-comments-o:before { content: fa-content($fa-var-comments); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-flash:before { content: fa-content($fa-var-bolt); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-clipboard {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-paste {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-paste:before { content: fa-content($fa-var-clipboard); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-lightbulb-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-lightbulb-o:before { content: fa-content($fa-var-lightbulb); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-exchange:before { content: fa-content($fa-var-exchange-alt); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-cloud-download:before { content: fa-content($fa-var-cloud-download-alt); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-cloud-upload:before { content: fa-content($fa-var-cloud-upload-alt); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-bell-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-bell-o:before { content: fa-content($fa-var-bell); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-cutlery:before { content: fa-content($fa-var-utensils); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-text-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-text-o:before { content: fa-content($fa-var-file-alt); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-building-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-building-o:before { content: fa-content($fa-var-building); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hospital-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hospital-o:before { content: fa-content($fa-var-hospital); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-tablet:before { content: fa-content($fa-var-tablet-alt); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-mobile:before { content: fa-content($fa-var-mobile-alt); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-mobile-phone:before { content: fa-content($fa-var-mobile-alt); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-circle-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-circle-o:before { content: fa-content($fa-var-circle); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-mail-reply:before { content: fa-content($fa-var-reply); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-github-alt {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-folder-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-folder-o:before { content: fa-content($fa-var-folder); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-folder-open-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-folder-open-o:before { content: fa-content($fa-var-folder-open); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-smile-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-smile-o:before { content: fa-content($fa-var-smile); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-frown-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-frown-o:before { content: fa-content($fa-var-frown); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-meh-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-meh-o:before { content: fa-content($fa-var-meh); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-keyboard-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-keyboard-o:before { content: fa-content($fa-var-keyboard); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-flag-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-flag-o:before { content: fa-content($fa-var-flag); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-mail-reply-all:before { content: fa-content($fa-var-reply-all); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-star-half-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-star-half-o:before { content: fa-content($fa-var-star-half); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-star-half-empty {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-star-half-empty:before { content: fa-content($fa-var-star-half); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-star-half-full {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-star-half-full:before { content: fa-content($fa-var-star-half); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-code-fork:before { content: fa-content($fa-var-code-branch); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-chain-broken:before { content: fa-content($fa-var-unlink); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-shield:before { content: fa-content($fa-var-shield-alt); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-calendar-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-calendar-o:before { content: fa-content($fa-var-calendar); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-maxcdn {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-html5 {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-css3 {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-ticket:before { content: fa-content($fa-var-ticket-alt); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-minus-square-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-minus-square-o:before { content: fa-content($fa-var-minus-square); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-level-up:before { content: fa-content($fa-var-level-up-alt); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-level-down:before { content: fa-content($fa-var-level-down-alt); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-pencil-square:before { content: fa-content($fa-var-pen-square); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-external-link-square:before { content: fa-content($fa-var-external-link-square-alt); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-compass {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-caret-square-o-down {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-caret-square-o-down:before { content: fa-content($fa-var-caret-square-down); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-toggle-down {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-toggle-down:before { content: fa-content($fa-var-caret-square-down); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-caret-square-o-up {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-caret-square-o-up:before { content: fa-content($fa-var-caret-square-up); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-toggle-up {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-toggle-up:before { content: fa-content($fa-var-caret-square-up); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-caret-square-o-right {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-caret-square-o-right:before { content: fa-content($fa-var-caret-square-right); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-toggle-right {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-toggle-right:before { content: fa-content($fa-var-caret-square-right); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-eur:before { content: fa-content($fa-var-euro-sign); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-euro:before { content: fa-content($fa-var-euro-sign); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-gbp:before { content: fa-content($fa-var-pound-sign); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-usd:before { content: fa-content($fa-var-dollar-sign); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-dollar:before { content: fa-content($fa-var-dollar-sign); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-inr:before { content: fa-content($fa-var-rupee-sign); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-rupee:before { content: fa-content($fa-var-rupee-sign); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-jpy:before { content: fa-content($fa-var-yen-sign); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-cny:before { content: fa-content($fa-var-yen-sign); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-rmb:before { content: fa-content($fa-var-yen-sign); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-yen:before { content: fa-content($fa-var-yen-sign); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-rub:before { content: fa-content($fa-var-ruble-sign); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-ruble:before { content: fa-content($fa-var-ruble-sign); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-rouble:before { content: fa-content($fa-var-ruble-sign); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-krw:before { content: fa-content($fa-var-won-sign); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-won:before { content: fa-content($fa-var-won-sign); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-btc {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-bitcoin {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-bitcoin:before { content: fa-content($fa-var-btc); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-text:before { content: fa-content($fa-var-file-alt); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-sort-alpha-asc:before { content: fa-content($fa-var-sort-alpha-down); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-sort-alpha-desc:before { content: fa-content($fa-var-sort-alpha-up); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-sort-amount-asc:before { content: fa-content($fa-var-sort-amount-down); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-sort-amount-desc:before { content: fa-content($fa-var-sort-amount-up); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-sort-numeric-asc:before { content: fa-content($fa-var-sort-numeric-down); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-sort-numeric-desc:before { content: fa-content($fa-var-sort-numeric-up); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-youtube-square {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-youtube {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-xing {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-xing-square {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-youtube-play {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-youtube-play:before { content: fa-content($fa-var-youtube); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-dropbox {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-stack-overflow {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-instagram {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-flickr {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-adn {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-bitbucket {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-bitbucket-square {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-bitbucket-square:before { content: fa-content($fa-var-bitbucket); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-tumblr {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-tumblr-square {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-long-arrow-down:before { content: fa-content($fa-var-long-arrow-alt-down); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-long-arrow-up:before { content: fa-content($fa-var-long-arrow-alt-up); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-long-arrow-left:before { content: fa-content($fa-var-long-arrow-alt-left); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-long-arrow-right:before { content: fa-content($fa-var-long-arrow-alt-right); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-apple {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-windows {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-android {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-linux {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-dribbble {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-skype {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-foursquare {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-trello {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-gratipay {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-gittip {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-gittip:before { content: fa-content($fa-var-gratipay); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-sun-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-sun-o:before { content: fa-content($fa-var-sun); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-moon-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-moon-o:before { content: fa-content($fa-var-moon); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-vk {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-weibo {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-renren {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-pagelines {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-stack-exchange {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-arrow-circle-o-right {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-arrow-circle-o-right:before { content: fa-content($fa-var-arrow-alt-circle-right); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-arrow-circle-o-left {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-arrow-circle-o-left:before { content: fa-content($fa-var-arrow-alt-circle-left); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-caret-square-o-left {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-caret-square-o-left:before { content: fa-content($fa-var-caret-square-left); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-toggle-left {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-toggle-left:before { content: fa-content($fa-var-caret-square-left); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-dot-circle-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-dot-circle-o:before { content: fa-content($fa-var-dot-circle); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-vimeo-square {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-try:before { content: fa-content($fa-var-lira-sign); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-turkish-lira:before { content: fa-content($fa-var-lira-sign); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-plus-square-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-plus-square-o:before { content: fa-content($fa-var-plus-square); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-slack {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-wordpress {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-openid {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-institution:before { content: fa-content($fa-var-university); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-bank:before { content: fa-content($fa-var-university); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-mortar-board:before { content: fa-content($fa-var-graduation-cap); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-yahoo {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-google {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-reddit {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-reddit-square {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-stumbleupon-circle {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-stumbleupon {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-delicious {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-digg {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-pied-piper-pp {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-pied-piper-alt {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-drupal {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-joomla {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-spoon:before { content: fa-content($fa-var-utensil-spoon); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-behance {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-behance-square {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-steam {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-steam-square {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-automobile:before { content: fa-content($fa-var-car); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-cab:before { content: fa-content($fa-var-taxi); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-envelope-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-envelope-o:before { content: fa-content($fa-var-envelope); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-deviantart {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-soundcloud {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-pdf-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-pdf-o:before { content: fa-content($fa-var-file-pdf); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-word-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-word-o:before { content: fa-content($fa-var-file-word); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-excel-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-excel-o:before { content: fa-content($fa-var-file-excel); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-powerpoint-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-powerpoint-o:before { content: fa-content($fa-var-file-powerpoint); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-image-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-image-o:before { content: fa-content($fa-var-file-image); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-photo-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-photo-o:before { content: fa-content($fa-var-file-image); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-picture-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-picture-o:before { content: fa-content($fa-var-file-image); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-archive-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-archive-o:before { content: fa-content($fa-var-file-archive); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-zip-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-zip-o:before { content: fa-content($fa-var-file-archive); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-audio-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-audio-o:before { content: fa-content($fa-var-file-audio); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-sound-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-sound-o:before { content: fa-content($fa-var-file-audio); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-video-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-video-o:before { content: fa-content($fa-var-file-video); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-movie-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-movie-o:before { content: fa-content($fa-var-file-video); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-code-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-code-o:before { content: fa-content($fa-var-file-code); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-vine {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-codepen {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-jsfiddle {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-life-ring {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-life-bouy {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-life-bouy:before { content: fa-content($fa-var-life-ring); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-life-buoy {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-life-buoy:before { content: fa-content($fa-var-life-ring); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-life-saver {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-life-saver:before { content: fa-content($fa-var-life-ring); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-support {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-support:before { content: fa-content($fa-var-life-ring); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-circle-o-notch:before { content: fa-content($fa-var-circle-notch); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-rebel {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-ra {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-ra:before { content: fa-content($fa-var-rebel); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-resistance {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-resistance:before { content: fa-content($fa-var-rebel); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-empire {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-ge {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-ge:before { content: fa-content($fa-var-empire); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-git-square {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-git {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hacker-news {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-y-combinator-square {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-y-combinator-square:before { content: fa-content($fa-var-hacker-news); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-yc-square {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-yc-square:before { content: fa-content($fa-var-hacker-news); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-tencent-weibo {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-qq {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-weixin {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-wechat {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-wechat:before { content: fa-content($fa-var-weixin); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-send:before { content: fa-content($fa-var-paper-plane); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-paper-plane-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-paper-plane-o:before { content: fa-content($fa-var-paper-plane); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-send-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-send-o:before { content: fa-content($fa-var-paper-plane); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-circle-thin {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-circle-thin:before { content: fa-content($fa-var-circle); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-header:before { content: fa-content($fa-var-heading); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-sliders:before { content: fa-content($fa-var-sliders-h); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-futbol-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-futbol-o:before { content: fa-content($fa-var-futbol); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-soccer-ball-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-soccer-ball-o:before { content: fa-content($fa-var-futbol); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-slideshare {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-twitch {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-yelp {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-newspaper-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-newspaper-o:before { content: fa-content($fa-var-newspaper); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-paypal {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-google-wallet {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-cc-visa {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-cc-mastercard {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-cc-discover {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-cc-amex {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-cc-paypal {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-cc-stripe {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-bell-slash-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-bell-slash-o:before { content: fa-content($fa-var-bell-slash); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-trash:before { content: fa-content($fa-var-trash-alt); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-copyright {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-eyedropper:before { content: fa-content($fa-var-eye-dropper); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-area-chart:before { content: fa-content($fa-var-chart-area); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-pie-chart:before { content: fa-content($fa-var-chart-pie); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-line-chart:before { content: fa-content($fa-var-chart-line); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-lastfm {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-lastfm-square {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-ioxhost {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-angellist {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-cc {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-cc:before { content: fa-content($fa-var-closed-captioning); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-ils:before { content: fa-content($fa-var-shekel-sign); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-shekel:before { content: fa-content($fa-var-shekel-sign); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-sheqel:before { content: fa-content($fa-var-shekel-sign); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-meanpath {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-meanpath:before { content: fa-content($fa-var-font-awesome); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-buysellads {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-connectdevelop {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-dashcube {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-forumbee {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-leanpub {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-sellsy {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-shirtsinbulk {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-simplybuilt {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-skyatlas {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-diamond {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-diamond:before { content: fa-content($fa-var-gem); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-intersex:before { content: fa-content($fa-var-transgender); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-facebook-official {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-facebook-official:before { content: fa-content($fa-var-facebook); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-pinterest-p {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-whatsapp {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hotel:before { content: fa-content($fa-var-bed); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-viacoin {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-medium {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-y-combinator {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-yc {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-yc:before { content: fa-content($fa-var-y-combinator); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-optin-monster {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-opencart {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-expeditedssl {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-battery-4:before { content: fa-content($fa-var-battery-full); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-battery:before { content: fa-content($fa-var-battery-full); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-battery-3:before { content: fa-content($fa-var-battery-three-quarters); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-battery-2:before { content: fa-content($fa-var-battery-half); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-battery-1:before { content: fa-content($fa-var-battery-quarter); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-battery-0:before { content: fa-content($fa-var-battery-empty); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-object-group {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-object-ungroup {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-sticky-note-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-sticky-note-o:before { content: fa-content($fa-var-sticky-note); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-cc-jcb {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-cc-diners-club {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-clone {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hourglass-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hourglass-o:before { content: fa-content($fa-var-hourglass); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hourglass-1:before { content: fa-content($fa-var-hourglass-start); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hourglass-2:before { content: fa-content($fa-var-hourglass-half); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hourglass-3:before { content: fa-content($fa-var-hourglass-end); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-rock-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-rock-o:before { content: fa-content($fa-var-hand-rock); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-grab-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-grab-o:before { content: fa-content($fa-var-hand-rock); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-paper-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-paper-o:before { content: fa-content($fa-var-hand-paper); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-stop-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-stop-o:before { content: fa-content($fa-var-hand-paper); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-scissors-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-scissors-o:before { content: fa-content($fa-var-hand-scissors); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-lizard-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-lizard-o:before { content: fa-content($fa-var-hand-lizard); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-spock-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-spock-o:before { content: fa-content($fa-var-hand-spock); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-pointer-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-pointer-o:before { content: fa-content($fa-var-hand-pointer); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-peace-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-peace-o:before { content: fa-content($fa-var-hand-peace); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-registered {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-creative-commons {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-gg {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-gg-circle {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-tripadvisor {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-odnoklassniki {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-odnoklassniki-square {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-get-pocket {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-wikipedia-w {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-safari {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-chrome {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-firefox {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-opera {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-internet-explorer {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-television:before { content: fa-content($fa-var-tv); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-contao {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-500px {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-amazon {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-calendar-plus-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-calendar-plus-o:before { content: fa-content($fa-var-calendar-plus); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-calendar-minus-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-calendar-minus-o:before { content: fa-content($fa-var-calendar-minus); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-calendar-times-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-calendar-times-o:before { content: fa-content($fa-var-calendar-times); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-calendar-check-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-calendar-check-o:before { content: fa-content($fa-var-calendar-check); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-map-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-map-o:before { content: fa-content($fa-var-map); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-commenting:before { content: fa-content($fa-var-comment-dots); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-commenting-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-commenting-o:before { content: fa-content($fa-var-comment-dots); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-houzz {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-vimeo {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-vimeo:before { content: fa-content($fa-var-vimeo-v); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-black-tie {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-fonticons {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-reddit-alien {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-edge {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-credit-card-alt:before { content: fa-content($fa-var-credit-card); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-codiepie {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-modx {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-fort-awesome {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-usb {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-product-hunt {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-mixcloud {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-scribd {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-pause-circle-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-pause-circle-o:before { content: fa-content($fa-var-pause-circle); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-stop-circle-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-stop-circle-o:before { content: fa-content($fa-var-stop-circle); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-bluetooth {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-bluetooth-b {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-gitlab {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-wpbeginner {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-wpforms {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-envira {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-wheelchair-alt {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-wheelchair-alt:before { content: fa-content($fa-var-accessible-icon); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-question-circle-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-question-circle-o:before { content: fa-content($fa-var-question-circle); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-volume-control-phone:before { content: fa-content($fa-var-phone-volume); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-asl-interpreting:before { content: fa-content($fa-var-american-sign-language-interpreting); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-deafness:before { content: fa-content($fa-var-deaf); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hard-of-hearing:before { content: fa-content($fa-var-deaf); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-glide {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-glide-g {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-signing:before { content: fa-content($fa-var-sign-language); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-viadeo {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-viadeo-square {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-snapchat {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-snapchat-ghost {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-snapchat-square {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-pied-piper {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-first-order {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-yoast {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-themeisle {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-google-plus-official {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-google-plus-official:before { content: fa-content($fa-var-google-plus); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-google-plus-circle {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-google-plus-circle:before { content: fa-content($fa-var-google-plus); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-font-awesome {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-fa {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-fa:before { content: fa-content($fa-var-font-awesome); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-handshake-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-handshake-o:before { content: fa-content($fa-var-handshake); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-envelope-open-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-envelope-open-o:before { content: fa-content($fa-var-envelope-open); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-linode {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-address-book-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-address-book-o:before { content: fa-content($fa-var-address-book); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-vcard:before { content: fa-content($fa-var-address-card); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-address-card-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-address-card-o:before { content: fa-content($fa-var-address-card); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-vcard-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-vcard-o:before { content: fa-content($fa-var-address-card); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-user-circle-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-user-circle-o:before { content: fa-content($fa-var-user-circle); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-user-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-user-o:before { content: fa-content($fa-var-user); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-id-badge {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-drivers-license:before { content: fa-content($fa-var-id-card); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-id-card-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-id-card-o:before { content: fa-content($fa-var-id-card); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-drivers-license-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-drivers-license-o:before { content: fa-content($fa-var-id-card); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-quora {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-free-code-camp {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-telegram {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-thermometer-4:before { content: fa-content($fa-var-thermometer-full); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-thermometer:before { content: fa-content($fa-var-thermometer-full); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-thermometer-3:before { content: fa-content($fa-var-thermometer-three-quarters); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-thermometer-2:before { content: fa-content($fa-var-thermometer-half); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-thermometer-1:before { content: fa-content($fa-var-thermometer-quarter); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-thermometer-0:before { content: fa-content($fa-var-thermometer-empty); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-bathtub:before { content: fa-content($fa-var-bath); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-s15:before { content: fa-content($fa-var-bath); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-window-maximize {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-window-restore {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-times-rectangle:before { content: fa-content($fa-var-window-close); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-window-close-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-window-close-o:before { content: fa-content($fa-var-window-close); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-times-rectangle-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-times-rectangle-o:before { content: fa-content($fa-var-window-close); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-bandcamp {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-grav {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-etsy {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-imdb {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-ravelry {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-eercast {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-eercast:before { content: fa-content($fa-var-sellcast); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-snowflake-o {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-snowflake-o:before { content: fa-content($fa-var-snowflake); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-superpowers {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-wpexplorer {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-spotify {
+ font-family: 'Font Awesome 5 Brands';
+ font-weight: 400;
+}
+
diff --git a/_sass/vendor/font-awesome/_stacked.scss b/_sass/vendor/font-awesome/_stacked.scss
new file mode 100644
index 0000000..ae7ef4e
--- /dev/null
+++ b/_sass/vendor/font-awesome/_stacked.scss
@@ -0,0 +1,31 @@
+// Stacked Icons
+// -------------------------
+
+.#{$fa-css-prefix}-stack {
+ display: inline-block;
+ height: 2em;
+ line-height: 2em;
+ position: relative;
+ vertical-align: middle;
+ width: ($fa-fw-width*2);
+}
+
+.#{$fa-css-prefix}-stack-1x,
+.#{$fa-css-prefix}-stack-2x {
+ left: 0;
+ position: absolute;
+ text-align: center;
+ width: 100%;
+}
+
+.#{$fa-css-prefix}-stack-1x {
+ line-height: inherit;
+}
+
+.#{$fa-css-prefix}-stack-2x {
+ font-size: 2em;
+}
+
+.#{$fa-css-prefix}-inverse {
+ color: $fa-inverse;
+}
diff --git a/_sass/vendor/font-awesome/_variables.scss b/_sass/vendor/font-awesome/_variables.scss
new file mode 100644
index 0000000..4bd43fc
--- /dev/null
+++ b/_sass/vendor/font-awesome/_variables.scss
@@ -0,0 +1,1276 @@
+// Variables
+// --------------------------
+
+$fa-font-path: "../fonts" !default;
+$fa-font-size-base: 16px !default;
+$fa-css-prefix: fa !default;
+$fa-version: "5.5.0" !default;
+$fa-border-color: #eee !default;
+$fa-inverse: #fff !default;
+$fa-li-width: 2em !default;
+$fa-fw-width: (20em / 16);
+
+// Convenience function used to set content property
+@function fa-content($fa-var) {
+ @return unquote("\"#{ $fa-var }\"");
+}
+
+$fa-var-500px: \f26e;
+$fa-var-accessible-icon: \f368;
+$fa-var-accusoft: \f369;
+$fa-var-acquisitions-incorporated: \f6af;
+$fa-var-ad: \f641;
+$fa-var-address-book: \f2b9;
+$fa-var-address-card: \f2bb;
+$fa-var-adjust: \f042;
+$fa-var-adn: \f170;
+$fa-var-adversal: \f36a;
+$fa-var-affiliatetheme: \f36b;
+$fa-var-air-freshener: \f5d0;
+$fa-var-algolia: \f36c;
+$fa-var-align-center: \f037;
+$fa-var-align-justify: \f039;
+$fa-var-align-left: \f036;
+$fa-var-align-right: \f038;
+$fa-var-alipay: \f642;
+$fa-var-allergies: \f461;
+$fa-var-amazon: \f270;
+$fa-var-amazon-pay: \f42c;
+$fa-var-ambulance: \f0f9;
+$fa-var-american-sign-language-interpreting: \f2a3;
+$fa-var-amilia: \f36d;
+$fa-var-anchor: \f13d;
+$fa-var-android: \f17b;
+$fa-var-angellist: \f209;
+$fa-var-angle-double-down: \f103;
+$fa-var-angle-double-left: \f100;
+$fa-var-angle-double-right: \f101;
+$fa-var-angle-double-up: \f102;
+$fa-var-angle-down: \f107;
+$fa-var-angle-left: \f104;
+$fa-var-angle-right: \f105;
+$fa-var-angle-up: \f106;
+$fa-var-angry: \f556;
+$fa-var-angrycreative: \f36e;
+$fa-var-angular: \f420;
+$fa-var-ankh: \f644;
+$fa-var-app-store: \f36f;
+$fa-var-app-store-ios: \f370;
+$fa-var-apper: \f371;
+$fa-var-apple: \f179;
+$fa-var-apple-alt: \f5d1;
+$fa-var-apple-pay: \f415;
+$fa-var-archive: \f187;
+$fa-var-archway: \f557;
+$fa-var-arrow-alt-circle-down: \f358;
+$fa-var-arrow-alt-circle-left: \f359;
+$fa-var-arrow-alt-circle-right: \f35a;
+$fa-var-arrow-alt-circle-up: \f35b;
+$fa-var-arrow-circle-down: \f0ab;
+$fa-var-arrow-circle-left: \f0a8;
+$fa-var-arrow-circle-right: \f0a9;
+$fa-var-arrow-circle-up: \f0aa;
+$fa-var-arrow-down: \f063;
+$fa-var-arrow-left: \f060;
+$fa-var-arrow-right: \f061;
+$fa-var-arrow-up: \f062;
+$fa-var-arrows-alt: \f0b2;
+$fa-var-arrows-alt-h: \f337;
+$fa-var-arrows-alt-v: \f338;
+$fa-var-assistive-listening-systems: \f2a2;
+$fa-var-asterisk: \f069;
+$fa-var-asymmetrik: \f372;
+$fa-var-at: \f1fa;
+$fa-var-atlas: \f558;
+$fa-var-atom: \f5d2;
+$fa-var-audible: \f373;
+$fa-var-audio-description: \f29e;
+$fa-var-autoprefixer: \f41c;
+$fa-var-avianex: \f374;
+$fa-var-aviato: \f421;
+$fa-var-award: \f559;
+$fa-var-aws: \f375;
+$fa-var-backspace: \f55a;
+$fa-var-backward: \f04a;
+$fa-var-balance-scale: \f24e;
+$fa-var-ban: \f05e;
+$fa-var-band-aid: \f462;
+$fa-var-bandcamp: \f2d5;
+$fa-var-barcode: \f02a;
+$fa-var-bars: \f0c9;
+$fa-var-baseball-ball: \f433;
+$fa-var-basketball-ball: \f434;
+$fa-var-bath: \f2cd;
+$fa-var-battery-empty: \f244;
+$fa-var-battery-full: \f240;
+$fa-var-battery-half: \f242;
+$fa-var-battery-quarter: \f243;
+$fa-var-battery-three-quarters: \f241;
+$fa-var-bed: \f236;
+$fa-var-beer: \f0fc;
+$fa-var-behance: \f1b4;
+$fa-var-behance-square: \f1b5;
+$fa-var-bell: \f0f3;
+$fa-var-bell-slash: \f1f6;
+$fa-var-bezier-curve: \f55b;
+$fa-var-bible: \f647;
+$fa-var-bicycle: \f206;
+$fa-var-bimobject: \f378;
+$fa-var-binoculars: \f1e5;
+$fa-var-birthday-cake: \f1fd;
+$fa-var-bitbucket: \f171;
+$fa-var-bitcoin: \f379;
+$fa-var-bity: \f37a;
+$fa-var-black-tie: \f27e;
+$fa-var-blackberry: \f37b;
+$fa-var-blender: \f517;
+$fa-var-blender-phone: \f6b6;
+$fa-var-blind: \f29d;
+$fa-var-blogger: \f37c;
+$fa-var-blogger-b: \f37d;
+$fa-var-bluetooth: \f293;
+$fa-var-bluetooth-b: \f294;
+$fa-var-bold: \f032;
+$fa-var-bolt: \f0e7;
+$fa-var-bomb: \f1e2;
+$fa-var-bone: \f5d7;
+$fa-var-bong: \f55c;
+$fa-var-book: \f02d;
+$fa-var-book-dead: \f6b7;
+$fa-var-book-open: \f518;
+$fa-var-book-reader: \f5da;
+$fa-var-bookmark: \f02e;
+$fa-var-bowling-ball: \f436;
+$fa-var-box: \f466;
+$fa-var-box-open: \f49e;
+$fa-var-boxes: \f468;
+$fa-var-braille: \f2a1;
+$fa-var-brain: \f5dc;
+$fa-var-briefcase: \f0b1;
+$fa-var-briefcase-medical: \f469;
+$fa-var-broadcast-tower: \f519;
+$fa-var-broom: \f51a;
+$fa-var-brush: \f55d;
+$fa-var-btc: \f15a;
+$fa-var-bug: \f188;
+$fa-var-building: \f1ad;
+$fa-var-bullhorn: \f0a1;
+$fa-var-bullseye: \f140;
+$fa-var-burn: \f46a;
+$fa-var-buromobelexperte: \f37f;
+$fa-var-bus: \f207;
+$fa-var-bus-alt: \f55e;
+$fa-var-business-time: \f64a;
+$fa-var-buysellads: \f20d;
+$fa-var-calculator: \f1ec;
+$fa-var-calendar: \f133;
+$fa-var-calendar-alt: \f073;
+$fa-var-calendar-check: \f274;
+$fa-var-calendar-minus: \f272;
+$fa-var-calendar-plus: \f271;
+$fa-var-calendar-times: \f273;
+$fa-var-camera: \f030;
+$fa-var-camera-retro: \f083;
+$fa-var-campground: \f6bb;
+$fa-var-cannabis: \f55f;
+$fa-var-capsules: \f46b;
+$fa-var-car: \f1b9;
+$fa-var-car-alt: \f5de;
+$fa-var-car-battery: \f5df;
+$fa-var-car-crash: \f5e1;
+$fa-var-car-side: \f5e4;
+$fa-var-caret-down: \f0d7;
+$fa-var-caret-left: \f0d9;
+$fa-var-caret-right: \f0da;
+$fa-var-caret-square-down: \f150;
+$fa-var-caret-square-left: \f191;
+$fa-var-caret-square-right: \f152;
+$fa-var-caret-square-up: \f151;
+$fa-var-caret-up: \f0d8;
+$fa-var-cart-arrow-down: \f218;
+$fa-var-cart-plus: \f217;
+$fa-var-cat: \f6be;
+$fa-var-cc-amazon-pay: \f42d;
+$fa-var-cc-amex: \f1f3;
+$fa-var-cc-apple-pay: \f416;
+$fa-var-cc-diners-club: \f24c;
+$fa-var-cc-discover: \f1f2;
+$fa-var-cc-jcb: \f24b;
+$fa-var-cc-mastercard: \f1f1;
+$fa-var-cc-paypal: \f1f4;
+$fa-var-cc-stripe: \f1f5;
+$fa-var-cc-visa: \f1f0;
+$fa-var-centercode: \f380;
+$fa-var-certificate: \f0a3;
+$fa-var-chair: \f6c0;
+$fa-var-chalkboard: \f51b;
+$fa-var-chalkboard-teacher: \f51c;
+$fa-var-charging-station: \f5e7;
+$fa-var-chart-area: \f1fe;
+$fa-var-chart-bar: \f080;
+$fa-var-chart-line: \f201;
+$fa-var-chart-pie: \f200;
+$fa-var-check: \f00c;
+$fa-var-check-circle: \f058;
+$fa-var-check-double: \f560;
+$fa-var-check-square: \f14a;
+$fa-var-chess: \f439;
+$fa-var-chess-bishop: \f43a;
+$fa-var-chess-board: \f43c;
+$fa-var-chess-king: \f43f;
+$fa-var-chess-knight: \f441;
+$fa-var-chess-pawn: \f443;
+$fa-var-chess-queen: \f445;
+$fa-var-chess-rook: \f447;
+$fa-var-chevron-circle-down: \f13a;
+$fa-var-chevron-circle-left: \f137;
+$fa-var-chevron-circle-right: \f138;
+$fa-var-chevron-circle-up: \f139;
+$fa-var-chevron-down: \f078;
+$fa-var-chevron-left: \f053;
+$fa-var-chevron-right: \f054;
+$fa-var-chevron-up: \f077;
+$fa-var-child: \f1ae;
+$fa-var-chrome: \f268;
+$fa-var-church: \f51d;
+$fa-var-circle: \f111;
+$fa-var-circle-notch: \f1ce;
+$fa-var-city: \f64f;
+$fa-var-clipboard: \f328;
+$fa-var-clipboard-check: \f46c;
+$fa-var-clipboard-list: \f46d;
+$fa-var-clock: \f017;
+$fa-var-clone: \f24d;
+$fa-var-closed-captioning: \f20a;
+$fa-var-cloud: \f0c2;
+$fa-var-cloud-download-alt: \f381;
+$fa-var-cloud-meatball: \f73b;
+$fa-var-cloud-moon: \f6c3;
+$fa-var-cloud-moon-rain: \f73c;
+$fa-var-cloud-rain: \f73d;
+$fa-var-cloud-showers-heavy: \f740;
+$fa-var-cloud-sun: \f6c4;
+$fa-var-cloud-sun-rain: \f743;
+$fa-var-cloud-upload-alt: \f382;
+$fa-var-cloudscale: \f383;
+$fa-var-cloudsmith: \f384;
+$fa-var-cloudversify: \f385;
+$fa-var-cocktail: \f561;
+$fa-var-code: \f121;
+$fa-var-code-branch: \f126;
+$fa-var-codepen: \f1cb;
+$fa-var-codiepie: \f284;
+$fa-var-coffee: \f0f4;
+$fa-var-cog: \f013;
+$fa-var-cogs: \f085;
+$fa-var-coins: \f51e;
+$fa-var-columns: \f0db;
+$fa-var-comment: \f075;
+$fa-var-comment-alt: \f27a;
+$fa-var-comment-dollar: \f651;
+$fa-var-comment-dots: \f4ad;
+$fa-var-comment-slash: \f4b3;
+$fa-var-comments: \f086;
+$fa-var-comments-dollar: \f653;
+$fa-var-compact-disc: \f51f;
+$fa-var-compass: \f14e;
+$fa-var-compress: \f066;
+$fa-var-concierge-bell: \f562;
+$fa-var-connectdevelop: \f20e;
+$fa-var-contao: \f26d;
+$fa-var-cookie: \f563;
+$fa-var-cookie-bite: \f564;
+$fa-var-copy: \f0c5;
+$fa-var-copyright: \f1f9;
+$fa-var-couch: \f4b8;
+$fa-var-cpanel: \f388;
+$fa-var-creative-commons: \f25e;
+$fa-var-creative-commons-by: \f4e7;
+$fa-var-creative-commons-nc: \f4e8;
+$fa-var-creative-commons-nc-eu: \f4e9;
+$fa-var-creative-commons-nc-jp: \f4ea;
+$fa-var-creative-commons-nd: \f4eb;
+$fa-var-creative-commons-pd: \f4ec;
+$fa-var-creative-commons-pd-alt: \f4ed;
+$fa-var-creative-commons-remix: \f4ee;
+$fa-var-creative-commons-sa: \f4ef;
+$fa-var-creative-commons-sampling: \f4f0;
+$fa-var-creative-commons-sampling-plus: \f4f1;
+$fa-var-creative-commons-share: \f4f2;
+$fa-var-creative-commons-zero: \f4f3;
+$fa-var-credit-card: \f09d;
+$fa-var-critical-role: \f6c9;
+$fa-var-crop: \f125;
+$fa-var-crop-alt: \f565;
+$fa-var-cross: \f654;
+$fa-var-crosshairs: \f05b;
+$fa-var-crow: \f520;
+$fa-var-crown: \f521;
+$fa-var-css3: \f13c;
+$fa-var-css3-alt: \f38b;
+$fa-var-cube: \f1b2;
+$fa-var-cubes: \f1b3;
+$fa-var-cut: \f0c4;
+$fa-var-cuttlefish: \f38c;
+$fa-var-d-and-d: \f38d;
+$fa-var-d-and-d-beyond: \f6ca;
+$fa-var-dashcube: \f210;
+$fa-var-database: \f1c0;
+$fa-var-deaf: \f2a4;
+$fa-var-delicious: \f1a5;
+$fa-var-democrat: \f747;
+$fa-var-deploydog: \f38e;
+$fa-var-deskpro: \f38f;
+$fa-var-desktop: \f108;
+$fa-var-dev: \f6cc;
+$fa-var-deviantart: \f1bd;
+$fa-var-dharmachakra: \f655;
+$fa-var-diagnoses: \f470;
+$fa-var-dice: \f522;
+$fa-var-dice-d20: \f6cf;
+$fa-var-dice-d6: \f6d1;
+$fa-var-dice-five: \f523;
+$fa-var-dice-four: \f524;
+$fa-var-dice-one: \f525;
+$fa-var-dice-six: \f526;
+$fa-var-dice-three: \f527;
+$fa-var-dice-two: \f528;
+$fa-var-digg: \f1a6;
+$fa-var-digital-ocean: \f391;
+$fa-var-digital-tachograph: \f566;
+$fa-var-directions: \f5eb;
+$fa-var-discord: \f392;
+$fa-var-discourse: \f393;
+$fa-var-divide: \f529;
+$fa-var-dizzy: \f567;
+$fa-var-dna: \f471;
+$fa-var-dochub: \f394;
+$fa-var-docker: \f395;
+$fa-var-dog: \f6d3;
+$fa-var-dollar-sign: \f155;
+$fa-var-dolly: \f472;
+$fa-var-dolly-flatbed: \f474;
+$fa-var-donate: \f4b9;
+$fa-var-door-closed: \f52a;
+$fa-var-door-open: \f52b;
+$fa-var-dot-circle: \f192;
+$fa-var-dove: \f4ba;
+$fa-var-download: \f019;
+$fa-var-draft2digital: \f396;
+$fa-var-drafting-compass: \f568;
+$fa-var-dragon: \f6d5;
+$fa-var-draw-polygon: \f5ee;
+$fa-var-dribbble: \f17d;
+$fa-var-dribbble-square: \f397;
+$fa-var-dropbox: \f16b;
+$fa-var-drum: \f569;
+$fa-var-drum-steelpan: \f56a;
+$fa-var-drumstick-bite: \f6d7;
+$fa-var-drupal: \f1a9;
+$fa-var-dumbbell: \f44b;
+$fa-var-dungeon: \f6d9;
+$fa-var-dyalog: \f399;
+$fa-var-earlybirds: \f39a;
+$fa-var-ebay: \f4f4;
+$fa-var-edge: \f282;
+$fa-var-edit: \f044;
+$fa-var-eject: \f052;
+$fa-var-elementor: \f430;
+$fa-var-ellipsis-h: \f141;
+$fa-var-ellipsis-v: \f142;
+$fa-var-ello: \f5f1;
+$fa-var-ember: \f423;
+$fa-var-empire: \f1d1;
+$fa-var-envelope: \f0e0;
+$fa-var-envelope-open: \f2b6;
+$fa-var-envelope-open-text: \f658;
+$fa-var-envelope-square: \f199;
+$fa-var-envira: \f299;
+$fa-var-equals: \f52c;
+$fa-var-eraser: \f12d;
+$fa-var-erlang: \f39d;
+$fa-var-ethereum: \f42e;
+$fa-var-etsy: \f2d7;
+$fa-var-euro-sign: \f153;
+$fa-var-exchange-alt: \f362;
+$fa-var-exclamation: \f12a;
+$fa-var-exclamation-circle: \f06a;
+$fa-var-exclamation-triangle: \f071;
+$fa-var-expand: \f065;
+$fa-var-expand-arrows-alt: \f31e;
+$fa-var-expeditedssl: \f23e;
+$fa-var-external-link-alt: \f35d;
+$fa-var-external-link-square-alt: \f360;
+$fa-var-eye: \f06e;
+$fa-var-eye-dropper: \f1fb;
+$fa-var-eye-slash: \f070;
+$fa-var-facebook: \f09a;
+$fa-var-facebook-f: \f39e;
+$fa-var-facebook-messenger: \f39f;
+$fa-var-facebook-square: \f082;
+$fa-var-fantasy-flight-games: \f6dc;
+$fa-var-fast-backward: \f049;
+$fa-var-fast-forward: \f050;
+$fa-var-fax: \f1ac;
+$fa-var-feather: \f52d;
+$fa-var-feather-alt: \f56b;
+$fa-var-female: \f182;
+$fa-var-fighter-jet: \f0fb;
+$fa-var-file: \f15b;
+$fa-var-file-alt: \f15c;
+$fa-var-file-archive: \f1c6;
+$fa-var-file-audio: \f1c7;
+$fa-var-file-code: \f1c9;
+$fa-var-file-contract: \f56c;
+$fa-var-file-csv: \f6dd;
+$fa-var-file-download: \f56d;
+$fa-var-file-excel: \f1c3;
+$fa-var-file-export: \f56e;
+$fa-var-file-image: \f1c5;
+$fa-var-file-import: \f56f;
+$fa-var-file-invoice: \f570;
+$fa-var-file-invoice-dollar: \f571;
+$fa-var-file-medical: \f477;
+$fa-var-file-medical-alt: \f478;
+$fa-var-file-pdf: \f1c1;
+$fa-var-file-powerpoint: \f1c4;
+$fa-var-file-prescription: \f572;
+$fa-var-file-signature: \f573;
+$fa-var-file-upload: \f574;
+$fa-var-file-video: \f1c8;
+$fa-var-file-word: \f1c2;
+$fa-var-fill: \f575;
+$fa-var-fill-drip: \f576;
+$fa-var-film: \f008;
+$fa-var-filter: \f0b0;
+$fa-var-fingerprint: \f577;
+$fa-var-fire: \f06d;
+$fa-var-fire-extinguisher: \f134;
+$fa-var-firefox: \f269;
+$fa-var-first-aid: \f479;
+$fa-var-first-order: \f2b0;
+$fa-var-first-order-alt: \f50a;
+$fa-var-firstdraft: \f3a1;
+$fa-var-fish: \f578;
+$fa-var-fist-raised: \f6de;
+$fa-var-flag: \f024;
+$fa-var-flag-checkered: \f11e;
+$fa-var-flag-usa: \f74d;
+$fa-var-flask: \f0c3;
+$fa-var-flickr: \f16e;
+$fa-var-flipboard: \f44d;
+$fa-var-flushed: \f579;
+$fa-var-fly: \f417;
+$fa-var-folder: \f07b;
+$fa-var-folder-minus: \f65d;
+$fa-var-folder-open: \f07c;
+$fa-var-folder-plus: \f65e;
+$fa-var-font: \f031;
+$fa-var-font-awesome: \f2b4;
+$fa-var-font-awesome-alt: \f35c;
+$fa-var-font-awesome-flag: \f425;
+$fa-var-font-awesome-logo-full: \f4e6;
+$fa-var-fonticons: \f280;
+$fa-var-fonticons-fi: \f3a2;
+$fa-var-football-ball: \f44e;
+$fa-var-fort-awesome: \f286;
+$fa-var-fort-awesome-alt: \f3a3;
+$fa-var-forumbee: \f211;
+$fa-var-forward: \f04e;
+$fa-var-foursquare: \f180;
+$fa-var-free-code-camp: \f2c5;
+$fa-var-freebsd: \f3a4;
+$fa-var-frog: \f52e;
+$fa-var-frown: \f119;
+$fa-var-frown-open: \f57a;
+$fa-var-fulcrum: \f50b;
+$fa-var-funnel-dollar: \f662;
+$fa-var-futbol: \f1e3;
+$fa-var-galactic-republic: \f50c;
+$fa-var-galactic-senate: \f50d;
+$fa-var-gamepad: \f11b;
+$fa-var-gas-pump: \f52f;
+$fa-var-gavel: \f0e3;
+$fa-var-gem: \f3a5;
+$fa-var-genderless: \f22d;
+$fa-var-get-pocket: \f265;
+$fa-var-gg: \f260;
+$fa-var-gg-circle: \f261;
+$fa-var-ghost: \f6e2;
+$fa-var-gift: \f06b;
+$fa-var-git: \f1d3;
+$fa-var-git-square: \f1d2;
+$fa-var-github: \f09b;
+$fa-var-github-alt: \f113;
+$fa-var-github-square: \f092;
+$fa-var-gitkraken: \f3a6;
+$fa-var-gitlab: \f296;
+$fa-var-gitter: \f426;
+$fa-var-glass-martini: \f000;
+$fa-var-glass-martini-alt: \f57b;
+$fa-var-glasses: \f530;
+$fa-var-glide: \f2a5;
+$fa-var-glide-g: \f2a6;
+$fa-var-globe: \f0ac;
+$fa-var-globe-africa: \f57c;
+$fa-var-globe-americas: \f57d;
+$fa-var-globe-asia: \f57e;
+$fa-var-gofore: \f3a7;
+$fa-var-golf-ball: \f450;
+$fa-var-goodreads: \f3a8;
+$fa-var-goodreads-g: \f3a9;
+$fa-var-google: \f1a0;
+$fa-var-google-drive: \f3aa;
+$fa-var-google-play: \f3ab;
+$fa-var-google-plus: \f2b3;
+$fa-var-google-plus-g: \f0d5;
+$fa-var-google-plus-square: \f0d4;
+$fa-var-google-wallet: \f1ee;
+$fa-var-gopuram: \f664;
+$fa-var-graduation-cap: \f19d;
+$fa-var-gratipay: \f184;
+$fa-var-grav: \f2d6;
+$fa-var-greater-than: \f531;
+$fa-var-greater-than-equal: \f532;
+$fa-var-grimace: \f57f;
+$fa-var-grin: \f580;
+$fa-var-grin-alt: \f581;
+$fa-var-grin-beam: \f582;
+$fa-var-grin-beam-sweat: \f583;
+$fa-var-grin-hearts: \f584;
+$fa-var-grin-squint: \f585;
+$fa-var-grin-squint-tears: \f586;
+$fa-var-grin-stars: \f587;
+$fa-var-grin-tears: \f588;
+$fa-var-grin-tongue: \f589;
+$fa-var-grin-tongue-squint: \f58a;
+$fa-var-grin-tongue-wink: \f58b;
+$fa-var-grin-wink: \f58c;
+$fa-var-grip-horizontal: \f58d;
+$fa-var-grip-vertical: \f58e;
+$fa-var-gripfire: \f3ac;
+$fa-var-grunt: \f3ad;
+$fa-var-gulp: \f3ae;
+$fa-var-h-square: \f0fd;
+$fa-var-hacker-news: \f1d4;
+$fa-var-hacker-news-square: \f3af;
+$fa-var-hackerrank: \f5f7;
+$fa-var-hammer: \f6e3;
+$fa-var-hamsa: \f665;
+$fa-var-hand-holding: \f4bd;
+$fa-var-hand-holding-heart: \f4be;
+$fa-var-hand-holding-usd: \f4c0;
+$fa-var-hand-lizard: \f258;
+$fa-var-hand-paper: \f256;
+$fa-var-hand-peace: \f25b;
+$fa-var-hand-point-down: \f0a7;
+$fa-var-hand-point-left: \f0a5;
+$fa-var-hand-point-right: \f0a4;
+$fa-var-hand-point-up: \f0a6;
+$fa-var-hand-pointer: \f25a;
+$fa-var-hand-rock: \f255;
+$fa-var-hand-scissors: \f257;
+$fa-var-hand-spock: \f259;
+$fa-var-hands: \f4c2;
+$fa-var-hands-helping: \f4c4;
+$fa-var-handshake: \f2b5;
+$fa-var-hanukiah: \f6e6;
+$fa-var-hashtag: \f292;
+$fa-var-hat-wizard: \f6e8;
+$fa-var-haykal: \f666;
+$fa-var-hdd: \f0a0;
+$fa-var-heading: \f1dc;
+$fa-var-headphones: \f025;
+$fa-var-headphones-alt: \f58f;
+$fa-var-headset: \f590;
+$fa-var-heart: \f004;
+$fa-var-heartbeat: \f21e;
+$fa-var-helicopter: \f533;
+$fa-var-highlighter: \f591;
+$fa-var-hiking: \f6ec;
+$fa-var-hippo: \f6ed;
+$fa-var-hips: \f452;
+$fa-var-hire-a-helper: \f3b0;
+$fa-var-history: \f1da;
+$fa-var-hockey-puck: \f453;
+$fa-var-home: \f015;
+$fa-var-hooli: \f427;
+$fa-var-hornbill: \f592;
+$fa-var-horse: \f6f0;
+$fa-var-hospital: \f0f8;
+$fa-var-hospital-alt: \f47d;
+$fa-var-hospital-symbol: \f47e;
+$fa-var-hot-tub: \f593;
+$fa-var-hotel: \f594;
+$fa-var-hotjar: \f3b1;
+$fa-var-hourglass: \f254;
+$fa-var-hourglass-end: \f253;
+$fa-var-hourglass-half: \f252;
+$fa-var-hourglass-start: \f251;
+$fa-var-house-damage: \f6f1;
+$fa-var-houzz: \f27c;
+$fa-var-hryvnia: \f6f2;
+$fa-var-html5: \f13b;
+$fa-var-hubspot: \f3b2;
+$fa-var-i-cursor: \f246;
+$fa-var-id-badge: \f2c1;
+$fa-var-id-card: \f2c2;
+$fa-var-id-card-alt: \f47f;
+$fa-var-image: \f03e;
+$fa-var-images: \f302;
+$fa-var-imdb: \f2d8;
+$fa-var-inbox: \f01c;
+$fa-var-indent: \f03c;
+$fa-var-industry: \f275;
+$fa-var-infinity: \f534;
+$fa-var-info: \f129;
+$fa-var-info-circle: \f05a;
+$fa-var-instagram: \f16d;
+$fa-var-internet-explorer: \f26b;
+$fa-var-ioxhost: \f208;
+$fa-var-italic: \f033;
+$fa-var-itunes: \f3b4;
+$fa-var-itunes-note: \f3b5;
+$fa-var-java: \f4e4;
+$fa-var-jedi: \f669;
+$fa-var-jedi-order: \f50e;
+$fa-var-jenkins: \f3b6;
+$fa-var-joget: \f3b7;
+$fa-var-joint: \f595;
+$fa-var-joomla: \f1aa;
+$fa-var-journal-whills: \f66a;
+$fa-var-js: \f3b8;
+$fa-var-js-square: \f3b9;
+$fa-var-jsfiddle: \f1cc;
+$fa-var-kaaba: \f66b;
+$fa-var-kaggle: \f5fa;
+$fa-var-key: \f084;
+$fa-var-keybase: \f4f5;
+$fa-var-keyboard: \f11c;
+$fa-var-keycdn: \f3ba;
+$fa-var-khanda: \f66d;
+$fa-var-kickstarter: \f3bb;
+$fa-var-kickstarter-k: \f3bc;
+$fa-var-kiss: \f596;
+$fa-var-kiss-beam: \f597;
+$fa-var-kiss-wink-heart: \f598;
+$fa-var-kiwi-bird: \f535;
+$fa-var-korvue: \f42f;
+$fa-var-landmark: \f66f;
+$fa-var-language: \f1ab;
+$fa-var-laptop: \f109;
+$fa-var-laptop-code: \f5fc;
+$fa-var-laravel: \f3bd;
+$fa-var-lastfm: \f202;
+$fa-var-lastfm-square: \f203;
+$fa-var-laugh: \f599;
+$fa-var-laugh-beam: \f59a;
+$fa-var-laugh-squint: \f59b;
+$fa-var-laugh-wink: \f59c;
+$fa-var-layer-group: \f5fd;
+$fa-var-leaf: \f06c;
+$fa-var-leanpub: \f212;
+$fa-var-lemon: \f094;
+$fa-var-less: \f41d;
+$fa-var-less-than: \f536;
+$fa-var-less-than-equal: \f537;
+$fa-var-level-down-alt: \f3be;
+$fa-var-level-up-alt: \f3bf;
+$fa-var-life-ring: \f1cd;
+$fa-var-lightbulb: \f0eb;
+$fa-var-line: \f3c0;
+$fa-var-link: \f0c1;
+$fa-var-linkedin: \f08c;
+$fa-var-linkedin-in: \f0e1;
+$fa-var-linode: \f2b8;
+$fa-var-linux: \f17c;
+$fa-var-lira-sign: \f195;
+$fa-var-list: \f03a;
+$fa-var-list-alt: \f022;
+$fa-var-list-ol: \f0cb;
+$fa-var-list-ul: \f0ca;
+$fa-var-location-arrow: \f124;
+$fa-var-lock: \f023;
+$fa-var-lock-open: \f3c1;
+$fa-var-long-arrow-alt-down: \f309;
+$fa-var-long-arrow-alt-left: \f30a;
+$fa-var-long-arrow-alt-right: \f30b;
+$fa-var-long-arrow-alt-up: \f30c;
+$fa-var-low-vision: \f2a8;
+$fa-var-luggage-cart: \f59d;
+$fa-var-lyft: \f3c3;
+$fa-var-magento: \f3c4;
+$fa-var-magic: \f0d0;
+$fa-var-magnet: \f076;
+$fa-var-mail-bulk: \f674;
+$fa-var-mailchimp: \f59e;
+$fa-var-male: \f183;
+$fa-var-mandalorian: \f50f;
+$fa-var-map: \f279;
+$fa-var-map-marked: \f59f;
+$fa-var-map-marked-alt: \f5a0;
+$fa-var-map-marker: \f041;
+$fa-var-map-marker-alt: \f3c5;
+$fa-var-map-pin: \f276;
+$fa-var-map-signs: \f277;
+$fa-var-markdown: \f60f;
+$fa-var-marker: \f5a1;
+$fa-var-mars: \f222;
+$fa-var-mars-double: \f227;
+$fa-var-mars-stroke: \f229;
+$fa-var-mars-stroke-h: \f22b;
+$fa-var-mars-stroke-v: \f22a;
+$fa-var-mask: \f6fa;
+$fa-var-mastodon: \f4f6;
+$fa-var-maxcdn: \f136;
+$fa-var-medal: \f5a2;
+$fa-var-medapps: \f3c6;
+$fa-var-medium: \f23a;
+$fa-var-medium-m: \f3c7;
+$fa-var-medkit: \f0fa;
+$fa-var-medrt: \f3c8;
+$fa-var-meetup: \f2e0;
+$fa-var-megaport: \f5a3;
+$fa-var-meh: \f11a;
+$fa-var-meh-blank: \f5a4;
+$fa-var-meh-rolling-eyes: \f5a5;
+$fa-var-memory: \f538;
+$fa-var-menorah: \f676;
+$fa-var-mercury: \f223;
+$fa-var-meteor: \f753;
+$fa-var-microchip: \f2db;
+$fa-var-microphone: \f130;
+$fa-var-microphone-alt: \f3c9;
+$fa-var-microphone-alt-slash: \f539;
+$fa-var-microphone-slash: \f131;
+$fa-var-microscope: \f610;
+$fa-var-microsoft: \f3ca;
+$fa-var-minus: \f068;
+$fa-var-minus-circle: \f056;
+$fa-var-minus-square: \f146;
+$fa-var-mix: \f3cb;
+$fa-var-mixcloud: \f289;
+$fa-var-mizuni: \f3cc;
+$fa-var-mobile: \f10b;
+$fa-var-mobile-alt: \f3cd;
+$fa-var-modx: \f285;
+$fa-var-monero: \f3d0;
+$fa-var-money-bill: \f0d6;
+$fa-var-money-bill-alt: \f3d1;
+$fa-var-money-bill-wave: \f53a;
+$fa-var-money-bill-wave-alt: \f53b;
+$fa-var-money-check: \f53c;
+$fa-var-money-check-alt: \f53d;
+$fa-var-monument: \f5a6;
+$fa-var-moon: \f186;
+$fa-var-mortar-pestle: \f5a7;
+$fa-var-mosque: \f678;
+$fa-var-motorcycle: \f21c;
+$fa-var-mountain: \f6fc;
+$fa-var-mouse-pointer: \f245;
+$fa-var-music: \f001;
+$fa-var-napster: \f3d2;
+$fa-var-neos: \f612;
+$fa-var-network-wired: \f6ff;
+$fa-var-neuter: \f22c;
+$fa-var-newspaper: \f1ea;
+$fa-var-nimblr: \f5a8;
+$fa-var-nintendo-switch: \f418;
+$fa-var-node: \f419;
+$fa-var-node-js: \f3d3;
+$fa-var-not-equal: \f53e;
+$fa-var-notes-medical: \f481;
+$fa-var-npm: \f3d4;
+$fa-var-ns8: \f3d5;
+$fa-var-nutritionix: \f3d6;
+$fa-var-object-group: \f247;
+$fa-var-object-ungroup: \f248;
+$fa-var-odnoklassniki: \f263;
+$fa-var-odnoklassniki-square: \f264;
+$fa-var-oil-can: \f613;
+$fa-var-old-republic: \f510;
+$fa-var-om: \f679;
+$fa-var-opencart: \f23d;
+$fa-var-openid: \f19b;
+$fa-var-opera: \f26a;
+$fa-var-optin-monster: \f23c;
+$fa-var-osi: \f41a;
+$fa-var-otter: \f700;
+$fa-var-outdent: \f03b;
+$fa-var-page4: \f3d7;
+$fa-var-pagelines: \f18c;
+$fa-var-paint-brush: \f1fc;
+$fa-var-paint-roller: \f5aa;
+$fa-var-palette: \f53f;
+$fa-var-palfed: \f3d8;
+$fa-var-pallet: \f482;
+$fa-var-paper-plane: \f1d8;
+$fa-var-paperclip: \f0c6;
+$fa-var-parachute-box: \f4cd;
+$fa-var-paragraph: \f1dd;
+$fa-var-parking: \f540;
+$fa-var-passport: \f5ab;
+$fa-var-pastafarianism: \f67b;
+$fa-var-paste: \f0ea;
+$fa-var-patreon: \f3d9;
+$fa-var-pause: \f04c;
+$fa-var-pause-circle: \f28b;
+$fa-var-paw: \f1b0;
+$fa-var-paypal: \f1ed;
+$fa-var-peace: \f67c;
+$fa-var-pen: \f304;
+$fa-var-pen-alt: \f305;
+$fa-var-pen-fancy: \f5ac;
+$fa-var-pen-nib: \f5ad;
+$fa-var-pen-square: \f14b;
+$fa-var-pencil-alt: \f303;
+$fa-var-pencil-ruler: \f5ae;
+$fa-var-penny-arcade: \f704;
+$fa-var-people-carry: \f4ce;
+$fa-var-percent: \f295;
+$fa-var-percentage: \f541;
+$fa-var-periscope: \f3da;
+$fa-var-person-booth: \f756;
+$fa-var-phabricator: \f3db;
+$fa-var-phoenix-framework: \f3dc;
+$fa-var-phoenix-squadron: \f511;
+$fa-var-phone: \f095;
+$fa-var-phone-slash: \f3dd;
+$fa-var-phone-square: \f098;
+$fa-var-phone-volume: \f2a0;
+$fa-var-php: \f457;
+$fa-var-pied-piper: \f2ae;
+$fa-var-pied-piper-alt: \f1a8;
+$fa-var-pied-piper-hat: \f4e5;
+$fa-var-pied-piper-pp: \f1a7;
+$fa-var-piggy-bank: \f4d3;
+$fa-var-pills: \f484;
+$fa-var-pinterest: \f0d2;
+$fa-var-pinterest-p: \f231;
+$fa-var-pinterest-square: \f0d3;
+$fa-var-place-of-worship: \f67f;
+$fa-var-plane: \f072;
+$fa-var-plane-arrival: \f5af;
+$fa-var-plane-departure: \f5b0;
+$fa-var-play: \f04b;
+$fa-var-play-circle: \f144;
+$fa-var-playstation: \f3df;
+$fa-var-plug: \f1e6;
+$fa-var-plus: \f067;
+$fa-var-plus-circle: \f055;
+$fa-var-plus-square: \f0fe;
+$fa-var-podcast: \f2ce;
+$fa-var-poll: \f681;
+$fa-var-poll-h: \f682;
+$fa-var-poo: \f2fe;
+$fa-var-poo-storm: \f75a;
+$fa-var-poop: \f619;
+$fa-var-portrait: \f3e0;
+$fa-var-pound-sign: \f154;
+$fa-var-power-off: \f011;
+$fa-var-pray: \f683;
+$fa-var-praying-hands: \f684;
+$fa-var-prescription: \f5b1;
+$fa-var-prescription-bottle: \f485;
+$fa-var-prescription-bottle-alt: \f486;
+$fa-var-print: \f02f;
+$fa-var-procedures: \f487;
+$fa-var-product-hunt: \f288;
+$fa-var-project-diagram: \f542;
+$fa-var-pushed: \f3e1;
+$fa-var-puzzle-piece: \f12e;
+$fa-var-python: \f3e2;
+$fa-var-qq: \f1d6;
+$fa-var-qrcode: \f029;
+$fa-var-question: \f128;
+$fa-var-question-circle: \f059;
+$fa-var-quidditch: \f458;
+$fa-var-quinscape: \f459;
+$fa-var-quora: \f2c4;
+$fa-var-quote-left: \f10d;
+$fa-var-quote-right: \f10e;
+$fa-var-quran: \f687;
+$fa-var-r-project: \f4f7;
+$fa-var-rainbow: \f75b;
+$fa-var-random: \f074;
+$fa-var-ravelry: \f2d9;
+$fa-var-react: \f41b;
+$fa-var-reacteurope: \f75d;
+$fa-var-readme: \f4d5;
+$fa-var-rebel: \f1d0;
+$fa-var-receipt: \f543;
+$fa-var-recycle: \f1b8;
+$fa-var-red-river: \f3e3;
+$fa-var-reddit: \f1a1;
+$fa-var-reddit-alien: \f281;
+$fa-var-reddit-square: \f1a2;
+$fa-var-redo: \f01e;
+$fa-var-redo-alt: \f2f9;
+$fa-var-registered: \f25d;
+$fa-var-renren: \f18b;
+$fa-var-reply: \f3e5;
+$fa-var-reply-all: \f122;
+$fa-var-replyd: \f3e6;
+$fa-var-republican: \f75e;
+$fa-var-researchgate: \f4f8;
+$fa-var-resolving: \f3e7;
+$fa-var-retweet: \f079;
+$fa-var-rev: \f5b2;
+$fa-var-ribbon: \f4d6;
+$fa-var-ring: \f70b;
+$fa-var-road: \f018;
+$fa-var-robot: \f544;
+$fa-var-rocket: \f135;
+$fa-var-rocketchat: \f3e8;
+$fa-var-rockrms: \f3e9;
+$fa-var-route: \f4d7;
+$fa-var-rss: \f09e;
+$fa-var-rss-square: \f143;
+$fa-var-ruble-sign: \f158;
+$fa-var-ruler: \f545;
+$fa-var-ruler-combined: \f546;
+$fa-var-ruler-horizontal: \f547;
+$fa-var-ruler-vertical: \f548;
+$fa-var-running: \f70c;
+$fa-var-rupee-sign: \f156;
+$fa-var-sad-cry: \f5b3;
+$fa-var-sad-tear: \f5b4;
+$fa-var-safari: \f267;
+$fa-var-sass: \f41e;
+$fa-var-save: \f0c7;
+$fa-var-schlix: \f3ea;
+$fa-var-school: \f549;
+$fa-var-screwdriver: \f54a;
+$fa-var-scribd: \f28a;
+$fa-var-scroll: \f70e;
+$fa-var-search: \f002;
+$fa-var-search-dollar: \f688;
+$fa-var-search-location: \f689;
+$fa-var-search-minus: \f010;
+$fa-var-search-plus: \f00e;
+$fa-var-searchengin: \f3eb;
+$fa-var-seedling: \f4d8;
+$fa-var-sellcast: \f2da;
+$fa-var-sellsy: \f213;
+$fa-var-server: \f233;
+$fa-var-servicestack: \f3ec;
+$fa-var-shapes: \f61f;
+$fa-var-share: \f064;
+$fa-var-share-alt: \f1e0;
+$fa-var-share-alt-square: \f1e1;
+$fa-var-share-square: \f14d;
+$fa-var-shekel-sign: \f20b;
+$fa-var-shield-alt: \f3ed;
+$fa-var-ship: \f21a;
+$fa-var-shipping-fast: \f48b;
+$fa-var-shirtsinbulk: \f214;
+$fa-var-shoe-prints: \f54b;
+$fa-var-shopping-bag: \f290;
+$fa-var-shopping-basket: \f291;
+$fa-var-shopping-cart: \f07a;
+$fa-var-shopware: \f5b5;
+$fa-var-shower: \f2cc;
+$fa-var-shuttle-van: \f5b6;
+$fa-var-sign: \f4d9;
+$fa-var-sign-in-alt: \f2f6;
+$fa-var-sign-language: \f2a7;
+$fa-var-sign-out-alt: \f2f5;
+$fa-var-signal: \f012;
+$fa-var-signature: \f5b7;
+$fa-var-simplybuilt: \f215;
+$fa-var-sistrix: \f3ee;
+$fa-var-sitemap: \f0e8;
+$fa-var-sith: \f512;
+$fa-var-skull: \f54c;
+$fa-var-skull-crossbones: \f714;
+$fa-var-skyatlas: \f216;
+$fa-var-skype: \f17e;
+$fa-var-slack: \f198;
+$fa-var-slack-hash: \f3ef;
+$fa-var-slash: \f715;
+$fa-var-sliders-h: \f1de;
+$fa-var-slideshare: \f1e7;
+$fa-var-smile: \f118;
+$fa-var-smile-beam: \f5b8;
+$fa-var-smile-wink: \f4da;
+$fa-var-smog: \f75f;
+$fa-var-smoking: \f48d;
+$fa-var-smoking-ban: \f54d;
+$fa-var-snapchat: \f2ab;
+$fa-var-snapchat-ghost: \f2ac;
+$fa-var-snapchat-square: \f2ad;
+$fa-var-snowflake: \f2dc;
+$fa-var-socks: \f696;
+$fa-var-solar-panel: \f5ba;
+$fa-var-sort: \f0dc;
+$fa-var-sort-alpha-down: \f15d;
+$fa-var-sort-alpha-up: \f15e;
+$fa-var-sort-amount-down: \f160;
+$fa-var-sort-amount-up: \f161;
+$fa-var-sort-down: \f0dd;
+$fa-var-sort-numeric-down: \f162;
+$fa-var-sort-numeric-up: \f163;
+$fa-var-sort-up: \f0de;
+$fa-var-soundcloud: \f1be;
+$fa-var-spa: \f5bb;
+$fa-var-space-shuttle: \f197;
+$fa-var-speakap: \f3f3;
+$fa-var-spider: \f717;
+$fa-var-spinner: \f110;
+$fa-var-splotch: \f5bc;
+$fa-var-spotify: \f1bc;
+$fa-var-spray-can: \f5bd;
+$fa-var-square: \f0c8;
+$fa-var-square-full: \f45c;
+$fa-var-square-root-alt: \f698;
+$fa-var-squarespace: \f5be;
+$fa-var-stack-exchange: \f18d;
+$fa-var-stack-overflow: \f16c;
+$fa-var-stamp: \f5bf;
+$fa-var-star: \f005;
+$fa-var-star-and-crescent: \f699;
+$fa-var-star-half: \f089;
+$fa-var-star-half-alt: \f5c0;
+$fa-var-star-of-david: \f69a;
+$fa-var-star-of-life: \f621;
+$fa-var-staylinked: \f3f5;
+$fa-var-steam: \f1b6;
+$fa-var-steam-square: \f1b7;
+$fa-var-steam-symbol: \f3f6;
+$fa-var-step-backward: \f048;
+$fa-var-step-forward: \f051;
+$fa-var-stethoscope: \f0f1;
+$fa-var-sticker-mule: \f3f7;
+$fa-var-sticky-note: \f249;
+$fa-var-stop: \f04d;
+$fa-var-stop-circle: \f28d;
+$fa-var-stopwatch: \f2f2;
+$fa-var-store: \f54e;
+$fa-var-store-alt: \f54f;
+$fa-var-strava: \f428;
+$fa-var-stream: \f550;
+$fa-var-street-view: \f21d;
+$fa-var-strikethrough: \f0cc;
+$fa-var-stripe: \f429;
+$fa-var-stripe-s: \f42a;
+$fa-var-stroopwafel: \f551;
+$fa-var-studiovinari: \f3f8;
+$fa-var-stumbleupon: \f1a4;
+$fa-var-stumbleupon-circle: \f1a3;
+$fa-var-subscript: \f12c;
+$fa-var-subway: \f239;
+$fa-var-suitcase: \f0f2;
+$fa-var-suitcase-rolling: \f5c1;
+$fa-var-sun: \f185;
+$fa-var-superpowers: \f2dd;
+$fa-var-superscript: \f12b;
+$fa-var-supple: \f3f9;
+$fa-var-surprise: \f5c2;
+$fa-var-swatchbook: \f5c3;
+$fa-var-swimmer: \f5c4;
+$fa-var-swimming-pool: \f5c5;
+$fa-var-synagogue: \f69b;
+$fa-var-sync: \f021;
+$fa-var-sync-alt: \f2f1;
+$fa-var-syringe: \f48e;
+$fa-var-table: \f0ce;
+$fa-var-table-tennis: \f45d;
+$fa-var-tablet: \f10a;
+$fa-var-tablet-alt: \f3fa;
+$fa-var-tablets: \f490;
+$fa-var-tachometer-alt: \f3fd;
+$fa-var-tag: \f02b;
+$fa-var-tags: \f02c;
+$fa-var-tape: \f4db;
+$fa-var-tasks: \f0ae;
+$fa-var-taxi: \f1ba;
+$fa-var-teamspeak: \f4f9;
+$fa-var-teeth: \f62e;
+$fa-var-teeth-open: \f62f;
+$fa-var-telegram: \f2c6;
+$fa-var-telegram-plane: \f3fe;
+$fa-var-temperature-high: \f769;
+$fa-var-temperature-low: \f76b;
+$fa-var-tencent-weibo: \f1d5;
+$fa-var-terminal: \f120;
+$fa-var-text-height: \f034;
+$fa-var-text-width: \f035;
+$fa-var-th: \f00a;
+$fa-var-th-large: \f009;
+$fa-var-th-list: \f00b;
+$fa-var-the-red-yeti: \f69d;
+$fa-var-theater-masks: \f630;
+$fa-var-themeco: \f5c6;
+$fa-var-themeisle: \f2b2;
+$fa-var-thermometer: \f491;
+$fa-var-thermometer-empty: \f2cb;
+$fa-var-thermometer-full: \f2c7;
+$fa-var-thermometer-half: \f2c9;
+$fa-var-thermometer-quarter: \f2ca;
+$fa-var-thermometer-three-quarters: \f2c8;
+$fa-var-think-peaks: \f731;
+$fa-var-thumbs-down: \f165;
+$fa-var-thumbs-up: \f164;
+$fa-var-thumbtack: \f08d;
+$fa-var-ticket-alt: \f3ff;
+$fa-var-times: \f00d;
+$fa-var-times-circle: \f057;
+$fa-var-tint: \f043;
+$fa-var-tint-slash: \f5c7;
+$fa-var-tired: \f5c8;
+$fa-var-toggle-off: \f204;
+$fa-var-toggle-on: \f205;
+$fa-var-toilet-paper: \f71e;
+$fa-var-toolbox: \f552;
+$fa-var-tooth: \f5c9;
+$fa-var-torah: \f6a0;
+$fa-var-torii-gate: \f6a1;
+$fa-var-tractor: \f722;
+$fa-var-trade-federation: \f513;
+$fa-var-trademark: \f25c;
+$fa-var-traffic-light: \f637;
+$fa-var-train: \f238;
+$fa-var-transgender: \f224;
+$fa-var-transgender-alt: \f225;
+$fa-var-trash: \f1f8;
+$fa-var-trash-alt: \f2ed;
+$fa-var-tree: \f1bb;
+$fa-var-trello: \f181;
+$fa-var-tripadvisor: \f262;
+$fa-var-trophy: \f091;
+$fa-var-truck: \f0d1;
+$fa-var-truck-loading: \f4de;
+$fa-var-truck-monster: \f63b;
+$fa-var-truck-moving: \f4df;
+$fa-var-truck-pickup: \f63c;
+$fa-var-tshirt: \f553;
+$fa-var-tty: \f1e4;
+$fa-var-tumblr: \f173;
+$fa-var-tumblr-square: \f174;
+$fa-var-tv: \f26c;
+$fa-var-twitch: \f1e8;
+$fa-var-twitter: \f099;
+$fa-var-twitter-square: \f081;
+$fa-var-typo3: \f42b;
+$fa-var-uber: \f402;
+$fa-var-uikit: \f403;
+$fa-var-umbrella: \f0e9;
+$fa-var-umbrella-beach: \f5ca;
+$fa-var-underline: \f0cd;
+$fa-var-undo: \f0e2;
+$fa-var-undo-alt: \f2ea;
+$fa-var-uniregistry: \f404;
+$fa-var-universal-access: \f29a;
+$fa-var-university: \f19c;
+$fa-var-unlink: \f127;
+$fa-var-unlock: \f09c;
+$fa-var-unlock-alt: \f13e;
+$fa-var-untappd: \f405;
+$fa-var-upload: \f093;
+$fa-var-usb: \f287;
+$fa-var-user: \f007;
+$fa-var-user-alt: \f406;
+$fa-var-user-alt-slash: \f4fa;
+$fa-var-user-astronaut: \f4fb;
+$fa-var-user-check: \f4fc;
+$fa-var-user-circle: \f2bd;
+$fa-var-user-clock: \f4fd;
+$fa-var-user-cog: \f4fe;
+$fa-var-user-edit: \f4ff;
+$fa-var-user-friends: \f500;
+$fa-var-user-graduate: \f501;
+$fa-var-user-injured: \f728;
+$fa-var-user-lock: \f502;
+$fa-var-user-md: \f0f0;
+$fa-var-user-minus: \f503;
+$fa-var-user-ninja: \f504;
+$fa-var-user-plus: \f234;
+$fa-var-user-secret: \f21b;
+$fa-var-user-shield: \f505;
+$fa-var-user-slash: \f506;
+$fa-var-user-tag: \f507;
+$fa-var-user-tie: \f508;
+$fa-var-user-times: \f235;
+$fa-var-users: \f0c0;
+$fa-var-users-cog: \f509;
+$fa-var-ussunnah: \f407;
+$fa-var-utensil-spoon: \f2e5;
+$fa-var-utensils: \f2e7;
+$fa-var-vaadin: \f408;
+$fa-var-vector-square: \f5cb;
+$fa-var-venus: \f221;
+$fa-var-venus-double: \f226;
+$fa-var-venus-mars: \f228;
+$fa-var-viacoin: \f237;
+$fa-var-viadeo: \f2a9;
+$fa-var-viadeo-square: \f2aa;
+$fa-var-vial: \f492;
+$fa-var-vials: \f493;
+$fa-var-viber: \f409;
+$fa-var-video: \f03d;
+$fa-var-video-slash: \f4e2;
+$fa-var-vihara: \f6a7;
+$fa-var-vimeo: \f40a;
+$fa-var-vimeo-square: \f194;
+$fa-var-vimeo-v: \f27d;
+$fa-var-vine: \f1ca;
+$fa-var-vk: \f189;
+$fa-var-vnv: \f40b;
+$fa-var-volleyball-ball: \f45f;
+$fa-var-volume-down: \f027;
+$fa-var-volume-mute: \f6a9;
+$fa-var-volume-off: \f026;
+$fa-var-volume-up: \f028;
+$fa-var-vote-yea: \f772;
+$fa-var-vr-cardboard: \f729;
+$fa-var-vuejs: \f41f;
+$fa-var-walking: \f554;
+$fa-var-wallet: \f555;
+$fa-var-warehouse: \f494;
+$fa-var-water: \f773;
+$fa-var-weebly: \f5cc;
+$fa-var-weibo: \f18a;
+$fa-var-weight: \f496;
+$fa-var-weight-hanging: \f5cd;
+$fa-var-weixin: \f1d7;
+$fa-var-whatsapp: \f232;
+$fa-var-whatsapp-square: \f40c;
+$fa-var-wheelchair: \f193;
+$fa-var-whmcs: \f40d;
+$fa-var-wifi: \f1eb;
+$fa-var-wikipedia-w: \f266;
+$fa-var-wind: \f72e;
+$fa-var-window-close: \f410;
+$fa-var-window-maximize: \f2d0;
+$fa-var-window-minimize: \f2d1;
+$fa-var-window-restore: \f2d2;
+$fa-var-windows: \f17a;
+$fa-var-wine-bottle: \f72f;
+$fa-var-wine-glass: \f4e3;
+$fa-var-wine-glass-alt: \f5ce;
+$fa-var-wix: \f5cf;
+$fa-var-wizards-of-the-coast: \f730;
+$fa-var-wolf-pack-battalion: \f514;
+$fa-var-won-sign: \f159;
+$fa-var-wordpress: \f19a;
+$fa-var-wordpress-simple: \f411;
+$fa-var-wpbeginner: \f297;
+$fa-var-wpexplorer: \f2de;
+$fa-var-wpforms: \f298;
+$fa-var-wpressr: \f3e4;
+$fa-var-wrench: \f0ad;
+$fa-var-x-ray: \f497;
+$fa-var-xbox: \f412;
+$fa-var-xing: \f168;
+$fa-var-xing-square: \f169;
+$fa-var-y-combinator: \f23b;
+$fa-var-yahoo: \f19e;
+$fa-var-yandex: \f413;
+$fa-var-yandex-international: \f414;
+$fa-var-yelp: \f1e9;
+$fa-var-yen-sign: \f157;
+$fa-var-yin-yang: \f6ad;
+$fa-var-yoast: \f2b1;
+$fa-var-youtube: \f167;
+$fa-var-youtube-square: \f431;
+$fa-var-zhihu: \f63f;
diff --git a/_sass/vendor/font-awesome/brands.scss b/_sass/vendor/font-awesome/brands.scss
new file mode 100644
index 0000000..6935d1f
--- /dev/null
+++ b/_sass/vendor/font-awesome/brands.scss
@@ -0,0 +1,21 @@
+/*!
+ * Font Awesome Free 5.5.0 by @fontawesome - https://fontawesome.com
+ * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
+ */
+@import 'variables';
+
+@font-face {
+ font-family: 'Font Awesome 5 Brands';
+ font-style: normal;
+ font-weight: normal;
+ src: url('#{$fa-font-path}/fa-brands-400.eot');
+ src: url('#{$fa-font-path}/fa-brands-400.eot?#iefix') format('embedded-opentype'),
+ url('#{$fa-font-path}/fa-brands-400.woff2') format('woff2'),
+ url('#{$fa-font-path}/fa-brands-400.woff') format('woff'),
+ url('#{$fa-font-path}/fa-brands-400.ttf') format('truetype'),
+ url('#{$fa-font-path}/fa-brands-400.svg#fontawesome') format('svg');
+}
+
+.fab {
+ font-family: 'Font Awesome 5 Brands';
+}
diff --git a/_sass/vendor/font-awesome/fontawesome.scss b/_sass/vendor/font-awesome/fontawesome.scss
new file mode 100644
index 0000000..2c0ea50
--- /dev/null
+++ b/_sass/vendor/font-awesome/fontawesome.scss
@@ -0,0 +1,16 @@
+/*!
+ * Font Awesome Free 5.5.0 by @fontawesome - https://fontawesome.com
+ * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
+ */
+@import 'variables';
+@import 'mixins';
+@import 'core';
+@import 'larger';
+@import 'fixed-width';
+@import 'list';
+@import 'bordered-pulled';
+@import 'animated';
+@import 'rotated-flipped';
+@import 'stacked';
+@import 'icons';
+@import 'screen-reader';
diff --git a/_sass/vendor/font-awesome/regular.scss b/_sass/vendor/font-awesome/regular.scss
new file mode 100644
index 0000000..4971616
--- /dev/null
+++ b/_sass/vendor/font-awesome/regular.scss
@@ -0,0 +1,22 @@
+/*!
+ * Font Awesome Free 5.5.0 by @fontawesome - https://fontawesome.com
+ * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
+ */
+@import 'variables';
+
+@font-face {
+ font-family: 'Font Awesome 5 Free';
+ font-style: normal;
+ font-weight: 400;
+ src: url('#{$fa-font-path}/fa-regular-400.eot');
+ src: url('#{$fa-font-path}/fa-regular-400.eot?#iefix') format('embedded-opentype'),
+ url('#{$fa-font-path}/fa-regular-400.woff2') format('woff2'),
+ url('#{$fa-font-path}/fa-regular-400.woff') format('woff'),
+ url('#{$fa-font-path}/fa-regular-400.ttf') format('truetype'),
+ url('#{$fa-font-path}/fa-regular-400.svg#fontawesome') format('svg');
+}
+
+.far {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 400;
+}
diff --git a/_sass/vendor/font-awesome/solid.scss b/_sass/vendor/font-awesome/solid.scss
new file mode 100644
index 0000000..8fba642
--- /dev/null
+++ b/_sass/vendor/font-awesome/solid.scss
@@ -0,0 +1,23 @@
+/*!
+ * Font Awesome Free 5.5.0 by @fontawesome - https://fontawesome.com
+ * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
+ */
+@import 'variables';
+
+@font-face {
+ font-family: 'Font Awesome 5 Free';
+ font-style: normal;
+ font-weight: 900;
+ src: url('#{$fa-font-path}/fa-solid-900.eot');
+ src: url('#{$fa-font-path}/fa-solid-900.eot?#iefix') format('embedded-opentype'),
+ url('#{$fa-font-path}/fa-solid-900.woff2') format('woff2'),
+ url('#{$fa-font-path}/fa-solid-900.woff') format('woff'),
+ url('#{$fa-font-path}/fa-solid-900.ttf') format('truetype'),
+ url('#{$fa-font-path}/fa-solid-900.svg#fontawesome') format('svg');
+}
+
+.fa,
+.fas {
+ font-family: 'Font Awesome 5 Free';
+ font-weight: 900;
+}
diff --git a/_sass/vendor/font-awesome/v4-shims.scss b/_sass/vendor/font-awesome/v4-shims.scss
new file mode 100644
index 0000000..64587fb
--- /dev/null
+++ b/_sass/vendor/font-awesome/v4-shims.scss
@@ -0,0 +1,6 @@
+/*!
+ * Font Awesome Free 5.5.0 by @fontawesome - https://fontawesome.com
+ * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
+ */
+@import 'variables';
+@import 'shims';
diff --git a/_sass/vendor/magnific-popup/_magnific-popup.scss b/_sass/vendor/magnific-popup/_magnific-popup.scss
new file mode 100644
index 0000000..27b27bc
--- /dev/null
+++ b/_sass/vendor/magnific-popup/_magnific-popup.scss
@@ -0,0 +1,649 @@
+/* Magnific Popup CSS */
+
+@import "settings";
+
+////////////////////////
+//
+// Contents:
+//
+// 1. Default Settings
+// 2. General styles
+// - Transluscent overlay
+// - Containers, wrappers
+// - Cursors
+// - Helper classes
+// 3. Appearance
+// - Preloader & text that displays error messages
+// - CSS reset for buttons
+// - Close icon
+// - "1 of X" counter
+// - Navigation (left/right) arrows
+// - Iframe content type styles
+// - Image content type styles
+// - Media query where size of arrows is reduced
+// - IE7 support
+//
+////////////////////////
+
+
+
+////////////////////////
+// 1. Default Settings
+////////////////////////
+
+$mfp-overlay-color: #0b0b0b !default;
+$mfp-overlay-opacity: 0.8 !default;
+$mfp-shadow: 0 0 8px rgba(0, 0, 0, 0.6) !default; // shadow on image or iframe
+$mfp-popup-padding-left: 8px !default; // Padding from left and from right side
+$mfp-popup-padding-left-mobile: 6px !default; // Same as above, but is applied when width of window is less than 800px
+
+$mfp-z-index-base: 1040 !default; // Base z-index of popup
+$mfp-include-arrows: true !default; // include styles for nav arrows
+$mfp-controls-opacity: 0.65 !default;
+$mfp-controls-color: #FFF !default;
+$mfp-controls-border-color: #3F3F3F !default;
+$mfp-inner-close-icon-color: #333 !default;
+$mfp-controls-text-color: #CCC !default; // Color of preloader and "1 of X" indicator
+$mfp-controls-text-color-hover: #FFF !default;
+$mfp-IE7support: true !default; // Very basic IE7 support
+
+// Iframe-type options
+$mfp-include-iframe-type: true !default;
+$mfp-iframe-padding-top: 40px !default;
+$mfp-iframe-background: #000 !default;
+$mfp-iframe-max-width: 900px !default;
+$mfp-iframe-ratio: 9/16 !default;
+
+// Image-type options
+$mfp-include-image-type: true !default;
+$mfp-image-background: #444 !default;
+$mfp-image-padding-top: 40px !default;
+$mfp-image-padding-bottom: 40px !default;
+$mfp-include-mobile-layout-for-image: true !default; // Removes paddings from top and bottom
+
+// Image caption options
+$mfp-caption-title-color: #F3F3F3 !default;
+$mfp-caption-subtitle-color: #BDBDBD !default;
+
+// A11y
+$mfp-use-visuallyhidden: false !default; // Hide content from browsers, but make it available for screen readers
+
+
+
+////////////////////////
+// 2. General styles
+////////////////////////
+
+// Transluscent overlay
+.mfp-bg {
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ z-index: $mfp-z-index-base + 2;
+ overflow: hidden;
+ position: fixed;
+
+ background: $mfp-overlay-color;
+ opacity: $mfp-overlay-opacity;
+ @if $mfp-IE7support {
+ filter: unquote("alpha(opacity=#{$mfp-overlay-opacity*100})");
+ }
+}
+
+// Wrapper for popup
+.mfp-wrap {
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ z-index: $mfp-z-index-base + 3;
+ position: fixed;
+ outline: none !important;
+ -webkit-backface-visibility: hidden; // fixes webkit bug that can cause "false" scrollbar
+}
+
+// Root container
+.mfp-container {
+ text-align: center;
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ left: 0;
+ top: 0;
+ padding: 0 $mfp-popup-padding-left;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+// Vertical centerer helper
+.mfp-container {
+ &:before {
+ content: '';
+ display: inline-block;
+ height: 100%;
+ vertical-align: middle;
+ }
+}
+
+// Remove vertical centering when popup has class `mfp-align-top`
+.mfp-align-top {
+ .mfp-container {
+ &:before {
+ display: none;
+ }
+ }
+}
+
+// Popup content holder
+.mfp-content {
+ position: relative;
+ display: inline-block;
+ vertical-align: middle;
+ margin: 0 auto;
+ text-align: left;
+ z-index: $mfp-z-index-base + 5;
+}
+.mfp-inline-holder,
+.mfp-ajax-holder {
+ .mfp-content {
+ width: 100%;
+ cursor: auto;
+ }
+}
+
+// Cursors
+.mfp-ajax-cur {
+ cursor: progress;
+}
+.mfp-zoom-out-cur {
+ &, .mfp-image-holder .mfp-close {
+ cursor: -moz-zoom-out;
+ cursor: -webkit-zoom-out;
+ cursor: zoom-out;
+ }
+}
+.mfp-zoom {
+ cursor: pointer;
+ cursor: -webkit-zoom-in;
+ cursor: -moz-zoom-in;
+ cursor: zoom-in;
+}
+.mfp-auto-cursor {
+ .mfp-content {
+ cursor: auto;
+ }
+}
+
+.mfp-close,
+.mfp-arrow,
+.mfp-preloader,
+.mfp-counter {
+ -webkit-user-select:none;
+ -moz-user-select: none;
+ user-select: none;
+}
+
+// Hide the image during the loading
+.mfp-loading {
+ &.mfp-figure {
+ display: none;
+ }
+}
+
+// Helper class that hides stuff
+@if $mfp-use-visuallyhidden {
+ // From HTML5 Boilerplate https://github.com/h5bp/html5-boilerplate/blob/v4.2.0/doc/css.md#visuallyhidden
+ .mfp-hide {
+ border: 0 !important;
+ clip: rect(0 0 0 0) !important;
+ height: 1px !important;
+ margin: -1px !important;
+ overflow: hidden !important;
+ padding: 0 !important;
+ position: absolute !important;
+ width: 1px !important;
+ }
+} @else {
+ .mfp-hide {
+ display: none !important;
+ }
+}
+
+
+////////////////////////
+// 3. Appearance
+////////////////////////
+
+// Preloader and text that displays error messages
+.mfp-preloader {
+ color: $mfp-controls-text-color;
+ position: absolute;
+ top: 50%;
+ width: auto;
+ text-align: center;
+ margin-top: -0.8em;
+ left: 8px;
+ right: 8px;
+ z-index: $mfp-z-index-base + 4;
+ a {
+ color: $mfp-controls-text-color;
+ &:hover {
+ color: $mfp-controls-text-color-hover;
+ }
+ }
+}
+
+// Hide preloader when content successfully loaded
+.mfp-s-ready {
+ .mfp-preloader {
+ display: none;
+ }
+}
+
+// Hide content when it was not loaded
+.mfp-s-error {
+ .mfp-content {
+ display: none;
+ }
+}
+
+// CSS-reset for buttons
+button {
+ &.mfp-close,
+ &.mfp-arrow {
+ overflow: visible;
+ cursor: pointer;
+ background: transparent;
+ border: 0;
+ -webkit-appearance: none;
+ display: block;
+ outline: none;
+ padding: 0;
+ z-index: $mfp-z-index-base + 6;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ }
+ &::-moz-focus-inner {
+ padding: 0;
+ border: 0
+ }
+}
+
+
+// Close icon
+.mfp-close {
+ width: 44px;
+ height: 44px;
+ line-height: 44px;
+
+ position: absolute;
+ right: 0;
+ top: 0;
+ text-decoration: none;
+ text-align: center;
+ opacity: $mfp-controls-opacity;
+ @if $mfp-IE7support {
+ filter: unquote("alpha(opacity=#{$mfp-controls-opacity*100})");
+ }
+ padding: 0 0 18px 10px;
+ color: $mfp-controls-color;
+
+ font-style: normal;
+ font-size: 28px;
+ font-family: $serif;
+
+ &:hover,
+ &:focus {
+ opacity: 1;
+ @if $mfp-IE7support {
+ filter: unquote("alpha(opacity=#{1*100})");
+ }
+ }
+
+ &:active {
+ top: 1px;
+ }
+}
+.mfp-close-btn-in {
+ .mfp-close {
+ color: $mfp-inner-close-icon-color;
+ }
+}
+.mfp-image-holder,
+.mfp-iframe-holder {
+ .mfp-close {
+ color: $mfp-controls-color;
+ right: -6px;
+ text-align: right;
+ padding-right: 6px;
+ width: 100%;
+ }
+}
+
+// "1 of X" counter
+.mfp-counter {
+ position: absolute;
+ top: 0;
+ right: 0;
+ color: $mfp-controls-text-color;
+ font-size: 12px;
+ line-height: 18px;
+}
+
+// Navigation arrows
+@if $mfp-include-arrows {
+ .mfp-arrow {
+ position: absolute;
+ opacity: $mfp-controls-opacity;
+ @if $mfp-IE7support {
+ filter: unquote("alpha(opacity=#{$mfp-controls-opacity*100})");
+ }
+ margin: 0;
+ top: 50%;
+ margin-top: -55px;
+ padding: 0;
+ width: 90px;
+ height: 110px;
+ -webkit-tap-highlight-color: rgba(0,0,0,0);
+ &:active {
+ margin-top: -54px;
+ }
+ &:hover,
+ &:focus {
+ opacity: 1;
+ @if $mfp-IE7support {
+ filter: unquote("alpha(opacity=#{1*100})");
+ }
+ }
+ &:before,
+ &:after,
+ .mfp-b,
+ .mfp-a {
+ content: '';
+ display: block;
+ width: 0;
+ height: 0;
+ position: absolute;
+ left: 0;
+ top: 0;
+ margin-top: 35px;
+ margin-left: 35px;
+ border: medium inset transparent;
+ }
+
+ &:after,
+ .mfp-a {
+
+ border-top-width: 13px;
+ border-bottom-width: 13px;
+ top:8px;
+ }
+
+ &:before,
+ .mfp-b {
+ border-top-width: 21px;
+ border-bottom-width: 21px;
+ opacity: 0.7;
+ }
+
+ }
+
+ .mfp-arrow-left {
+ left: 0;
+
+ &:after,
+ .mfp-a {
+ border-right: 17px solid $mfp-controls-color;
+ margin-left: 31px;
+ }
+ &:before,
+ .mfp-b {
+ margin-left: 25px;
+ border-right: 27px solid $mfp-controls-border-color;
+ }
+ }
+
+ .mfp-arrow-right {
+ right: 0;
+ &:after,
+ .mfp-a {
+ border-left: 17px solid $mfp-controls-color;
+ margin-left: 39px
+ }
+ &:before,
+ .mfp-b {
+ border-left: 27px solid $mfp-controls-border-color;
+ }
+ }
+}
+
+
+
+// Iframe content type
+@if $mfp-include-iframe-type {
+ .mfp-iframe-holder {
+ padding-top: $mfp-iframe-padding-top;
+ padding-bottom: $mfp-iframe-padding-top;
+ .mfp-content {
+ line-height: 0;
+ width: 100%;
+ max-width: $mfp-iframe-max-width;
+ }
+ .mfp-close {
+ top: -40px;
+ }
+ }
+ .mfp-iframe-scaler {
+ width: 100%;
+ height: 0;
+ overflow: hidden;
+ padding-top: $mfp-iframe-ratio * 100%;
+ iframe {
+ position: absolute;
+ display: block;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ box-shadow: $mfp-shadow;
+ background: $mfp-iframe-background;
+ }
+ }
+}
+
+
+
+// Image content type
+@if $mfp-include-image-type {
+
+ /* Main image in popup */
+ img {
+ &.mfp-img {
+ width: auto;
+ max-width: 100%;
+ height: auto;
+ display: block;
+ line-height: 0;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ padding: $mfp-image-padding-top 0 $mfp-image-padding-bottom;
+ margin: 0 auto;
+ }
+ }
+
+ /* The shadow behind the image */
+ .mfp-figure {
+ line-height: 0;
+ &:after {
+ content: '';
+ position: absolute;
+ left: 0;
+ top: $mfp-image-padding-top;
+ bottom: $mfp-image-padding-bottom;
+ display: block;
+ right: 0;
+ width: auto;
+ height: auto;
+ z-index: -1;
+ box-shadow: $mfp-shadow;
+ background: $mfp-image-background;
+ }
+ small {
+ color: $mfp-caption-subtitle-color;
+ display: block;
+ font-size: 12px;
+ line-height: 14px;
+ }
+ figure {
+ margin: 0;
+ }
+ figcaption {
+ margin-top: 0;
+ margin-bottom: 0; // reset for bottom spacing
+ }
+ }
+ .mfp-bottom-bar {
+ margin-top: -$mfp-image-padding-bottom + 4;
+ position: absolute;
+ top: 100%;
+ left: 0;
+ width: 100%;
+ cursor: auto;
+ }
+ .mfp-title {
+ text-align: left;
+ line-height: 18px;
+ color: $mfp-caption-title-color;
+ word-wrap: break-word;
+ padding-right: 36px; // leave some space for counter at right side
+ }
+
+ .mfp-image-holder {
+ .mfp-content {
+ max-width: 100%;
+ }
+ }
+
+ .mfp-gallery {
+ .mfp-image-holder {
+ .mfp-figure {
+ cursor: pointer;
+ }
+ }
+ }
+
+
+ @if $mfp-include-mobile-layout-for-image {
+ @media screen and (max-width: 800px) and (orientation:landscape), screen and (max-height: 300px) {
+ /**
+ * Remove all paddings around the image on small screen
+ */
+ .mfp-img-mobile {
+ .mfp-image-holder {
+ padding-left: 0;
+ padding-right: 0;
+ }
+ img {
+ &.mfp-img {
+ padding: 0;
+ }
+ }
+ .mfp-figure {
+ // The shadow behind the image
+ &:after {
+ top: 0;
+ bottom: 0;
+ }
+ small {
+ display: inline;
+ margin-left: 5px;
+ }
+ }
+ .mfp-bottom-bar {
+ background: rgba(0,0,0,0.6);
+ bottom: 0;
+ margin: 0;
+ top: auto;
+ padding: 3px 5px;
+ position: fixed;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ &:empty {
+ padding: 0;
+ }
+ }
+ .mfp-counter {
+ right: 5px;
+ top: 3px;
+ }
+ .mfp-close {
+ top: 0;
+ right: 0;
+ width: 35px;
+ height: 35px;
+ line-height: 35px;
+ background: rgba(0, 0, 0, 0.6);
+ position: fixed;
+ text-align: center;
+ padding: 0;
+ }
+ }
+ }
+ }
+}
+
+
+
+// Scale navigation arrows and reduce padding from sides
+@media all and (max-width: 900px) {
+ .mfp-arrow {
+ -webkit-transform: scale(0.75);
+ transform: scale(0.75);
+ }
+ .mfp-arrow-left {
+ -webkit-transform-origin: 0;
+ transform-origin: 0;
+ }
+ .mfp-arrow-right {
+ -webkit-transform-origin: 100%;
+ transform-origin: 100%;
+ }
+ .mfp-container {
+ padding-left: $mfp-popup-padding-left-mobile;
+ padding-right: $mfp-popup-padding-left-mobile;
+ }
+}
+
+
+
+// IE7 support
+// Styles that make popup look nicier in old IE
+@if $mfp-IE7support {
+ .mfp-ie7 {
+ .mfp-img {
+ padding: 0;
+ }
+ .mfp-bottom-bar {
+ width: 600px;
+ left: 50%;
+ margin-left: -300px;
+ margin-top: 5px;
+ padding-bottom: 5px;
+ }
+ .mfp-container {
+ padding: 0;
+ }
+ .mfp-content {
+ padding-top: 44px;
+ }
+ .mfp-close {
+ top: 0;
+ right: 0;
+ padding-top: 0;
+ }
+ }
+}
diff --git a/_sass/vendor/magnific-popup/_settings.scss b/_sass/vendor/magnific-popup/_settings.scss
new file mode 100644
index 0000000..caaca02
--- /dev/null
+++ b/_sass/vendor/magnific-popup/_settings.scss
@@ -0,0 +1,46 @@
+////////////////////////
+// Settings //
+////////////////////////
+
+// overlay
+$mfp-overlay-color: #000; // Color of overlay screen
+$mfp-overlay-opacity: 0.8; // Opacity of overlay screen
+$mfp-shadow: 0 0 8px rgba(0, 0, 0, 0.6); // Shadow on image or iframe
+
+// spacing
+$mfp-popup-padding-left: 8px; // Padding from left and from right side
+$mfp-popup-padding-left-mobile: 6px; // Same as above, but is applied when width of window is less than 800px
+
+$mfp-z-index-base: 1040; // Base z-index of popup
+
+// controls
+$mfp-include-arrows: true; // Include styles for nav arrows
+$mfp-controls-opacity: 1; // Opacity of controls
+$mfp-controls-color: #fff; // Color of controls
+$mfp-controls-border-color: #fff; // Border color of controls
+$mfp-inner-close-icon-color: #fff; // Color of close button when inside
+$mfp-controls-text-color: #ccc; // Color of preloader and "1 of X" indicator
+$mfp-controls-text-color-hover: #fff; // Hover color of preloader and "1 of X" indicator
+$mfp-IE7support: true; // Very basic IE7 support
+
+// Iframe-type options
+$mfp-include-iframe-type: true; // Enable Iframe-type popups
+$mfp-iframe-padding-top: 40px; // Iframe padding top
+$mfp-iframe-background: #000; // Background color of iframes
+$mfp-iframe-max-width: 900px; // Maximum width of iframes
+$mfp-iframe-ratio: 9/16; // Ratio of iframe (9/16 = widescreen, 3/4 = standard, etc.)
+
+// Image-type options
+$mfp-include-image-type: true; // Enable Image-type popups
+$mfp-image-background: #444 !default;
+$mfp-image-padding-top: 40px; // Image padding top
+$mfp-image-padding-bottom: 40px; // Image padding bottom
+$mfp-include-mobile-layout-for-image: true; // Removes paddings from top and bottom
+
+// Image caption options
+$mfp-caption-title-color: #f3f3f3; // Caption title color
+$mfp-caption-subtitle-color: #bdbdbd; // Caption subtitle color
+.mfp-counter { font-family: $serif; } // Caption font family
+
+// A11y
+$mfp-use-visuallyhidden: false;
diff --git a/_sass/vendor/susy/_su.scss b/_sass/vendor/susy/_su.scss
new file mode 100644
index 0000000..83386ad
--- /dev/null
+++ b/_sass/vendor/susy/_su.scss
@@ -0,0 +1,4 @@
+// Su
+// ==
+
+@import 'susy/su';
diff --git a/_sass/vendor/susy/_susy.scss b/_sass/vendor/susy/_susy.scss
new file mode 100644
index 0000000..224e98a
--- /dev/null
+++ b/_sass/vendor/susy/_susy.scss
@@ -0,0 +1,4 @@
+// Susy
+// ====
+
+@import 'susy/language/susy';
diff --git a/_sass/vendor/susy/_susyone.scss b/_sass/vendor/susy/_susyone.scss
new file mode 100644
index 0000000..5b934c6
--- /dev/null
+++ b/_sass/vendor/susy/_susyone.scss
@@ -0,0 +1,4 @@
+// Susy
+// ====
+
+@import 'susy/language/susyone';
diff --git a/_sass/vendor/susy/susy/_su.scss b/_sass/vendor/susy/susy/_su.scss
new file mode 100644
index 0000000..a145415
--- /dev/null
+++ b/_sass/vendor/susy/susy/_su.scss
@@ -0,0 +1,7 @@
+// Su
+// ==
+
+@import "su/utilities";
+@import "su/settings";
+@import "su/validation";
+@import "su/grid";
diff --git a/_sass/vendor/susy/susy/language/_susy.scss b/_sass/vendor/susy/susy/language/_susy.scss
new file mode 100644
index 0000000..0ee9cae
--- /dev/null
+++ b/_sass/vendor/susy/susy/language/_susy.scss
@@ -0,0 +1,24 @@
+// Susy Next Syntax
+// ================
+
+$susy-version: 2.1;
+
+@import "../su";
+@import "../output/float";
+
+@import "susy/settings";
+@import "susy/validation";
+@import "susy/grids";
+@import "susy/box-sizing";
+@import "susy/context";
+@import "susy/background";
+@import "susy/container";
+@import "susy/span";
+@import "susy/gutters";
+@import "susy/isolate";
+@import "susy/gallery";
+@import "susy/rows";
+@import "susy/margins";
+@import "susy/padding";
+@import "susy/bleed";
+@import "susy/breakpoint-plugin";
diff --git a/_sass/vendor/susy/susy/language/_susyone.scss b/_sass/vendor/susy/susy/language/_susyone.scss
new file mode 100644
index 0000000..a783d3a
--- /dev/null
+++ b/_sass/vendor/susy/susy/language/_susyone.scss
@@ -0,0 +1,13 @@
+// ---------------------------------------------------------------------------
+// Partials
+
+$susy-version: 1.5;
+
+@import "susyone/settings";
+@import "susyone/functions";
+@import "susyone/grid";
+@import "susyone/isolation";
+@import "susyone/padding";
+@import "susyone/margin";
+@import "susyone/media";
+@import "susyone/background";
diff --git a/_sass/vendor/susy/susy/language/susy/_background.scss b/_sass/vendor/susy/susy/language/susy/_background.scss
new file mode 100644
index 0000000..d39dc72
--- /dev/null
+++ b/_sass/vendor/susy/susy/language/susy/_background.scss
@@ -0,0 +1,385 @@
+// Background Grid Syntax
+// ======================
+
+$susy-overlay-grid-head-exists: false;
+
+
+// Show Grid/s
+// -----------
+// Show grid on any element using either background or overlay.
+// - [$grid] :
+@mixin show-grid(
+ $grid: $susy
+) {
+ $inspect: $grid;
+ $_output: debug-get(output, $grid);
+
+ @include susy-inspect(show-grid, $inspect);
+ @if $_output == overlay and susy-get(debug image, $grid) != hide {
+ @include overlay-grid($grid);
+ } @else {
+ @include background-grid($grid);
+ }
+}
+
+@mixin show-grids(
+ $grid: $susy
+) {
+ @include show-grid($grid);
+}
+
+// Background Grid
+// ---------------
+// Show a grid background on any element.
+// - [$grid] :
+@mixin background-grid(
+ $grid: $susy
+) {
+ $inspect : $grid;
+ $_output : get-background($grid);
+
+ @if length($_output) > 0 {
+ $_flow: susy-get(flow, $grid);
+
+ $_image: ();
+ @each $name, $layer in map-get($_output, image) {
+ $_direction: if($name == baseline, to bottom, to to($_flow));
+ $_image: append($_image, linear-gradient($_direction, $layer), comma);
+ }
+ $_output: map-merge($_output, (image: $_image));
+
+ @include background-grid-output($_output...);
+ @include susy-inspect(background-grid, $inspect);
+ }
+}
+
+
+// Overlay Grid
+// ------------
+// Generate an icon to trigger grid-overlays on any given elements.
+// $grids... : [] [, ]*
+@mixin overlay-grid (
+ $grid: $susy
+) {
+ @if not($susy-overlay-grid-head-exists) {
+ @at-root head { @include overlay-head($grid); }
+ @at-root head:before { @include overlay-trigger; }
+ @at-root head:hover { @include overlay-trigger-hover; }
+ $susy-overlay-grid-head-exists: true !global;
+ }
+
+ head:hover ~ &,
+ head:hover ~ body & {
+ position: relative;
+ &:before {
+ @include grid-overlay-base;
+ @include background-grid($grid);
+ }
+ }
+}
+
+
+// [Private] Overlay Trigger
+// -------------------------
+@mixin overlay-trigger {
+ content: "|||";
+ display: block;
+ padding: 5px 10px;
+ font: {
+ family: sans-serif;
+ size: 16px;
+ weight: bold;
+ }
+}
+
+
+// [Private] Overlay Trigger Hover
+// -------------------------------
+@mixin overlay-trigger-hover {
+ background: rgba(white, .5);
+ color: red;
+}
+
+
+// [Private] Overlay Head
+// ----------------------
+// styles to create grid overlay toggle
+@mixin overlay-head (
+ $grid: $susy
+) {
+ $_toggle: debug-get(toggle, $grid);
+ $_horz: null;
+ $_vert: null;
+
+ @each $side in $_toggle {
+ $_horz: if($side == left or $side == right, $side, $_horz);
+ $_vert: if($side == top or $side == bottom, $side, $_vert);
+ }
+
+ display: block;
+ position: fixed;
+ #{$_horz}: 10px;
+ #{$_vert}: 10px;
+ z-index: 999;
+ color: #333;
+ background: rgba(white, .25);
+}
+
+
+// [Private] Grid Overlay Base
+// ---------------------------
+// Base styles for generating a grid overlay
+@mixin grid-overlay-base() {
+ position: absolute;
+ top: 0;
+ left: 0;
+ bottom: 0;
+ right: 0;
+ content: " ";
+ z-index: 998;
+}
+
+
+// Get Symmetrical Background
+// --------------------------
+// - $grid:
+@function get-background-sym(
+ $grid
+) {
+ $grid : parse-grid($grid);
+ $_gutters : susy-get(gutters, $grid);
+ $_column-width : susy-get(column-width, $grid);
+ $_math : susy-get(math, $grid);
+
+ $_color : debug-get(color);
+ $_trans : transparent;
+ $_light : lighten($_color, 15%);
+
+ $_end : 1 + $_gutters;
+ $_after : percentage(1/$_end);
+ $_stops : ();
+ $_size : span(1 $grid wide);
+
+ @if is-inside($grid) {
+ $_stops: $_color, $_light;
+ } @else if is-split($grid) {
+ $_split: $_gutters/2;
+ $_before: percentage($_split/$_end);
+ $_after: percentage((1 + $_split)/$_end);
+ $_stops: $_trans $_before, $_color $_before, $_light $_after, $_trans $_after;
+ } @else {
+ $_stops: $_color, $_light $_after, $_trans $_after;
+ }
+
+ @if $_math == static {
+ $_size: valid-column-math($_math, $_column-width) * $_end;
+ }
+
+ $_output: (
+ image: (columns: $_stops),
+ size: $_size,
+ );
+
+ @return $_output;
+}
+
+
+// Get Asymmetrical Inside
+// -----------------------
+// - $grid:
+@function get-asym-inside(
+ $grid
+) {
+ $grid : parse-grid($grid);
+ $_columns : susy-get(columns, $grid);
+
+ $_color : debug-get(color);
+ $_light : lighten($_color, 15%);
+ $_stops : ();
+
+ @for $location from 1 through susy-count($_columns) {
+ $this-stop: ();
+
+ @if $location == 1 {
+ $this-stop: append($this-stop, $_color, comma);
+ } @else {
+ $start: parse-span(1 at $location $grid);
+ $start: get-isolation($start);
+ $this-stop: append($this-stop, $_color $start, comma);
+ }
+
+ @if $location == susy-count($_columns) {
+ $this-stop: append($this-stop, $_light, comma);
+ } @else {
+ $_end: parse-span(1 at ($location + 1) $grid);
+ $_end: get-isolation($_end);
+ $this-stop: append($this-stop, $_light $_end, comma);
+ }
+
+ $_stops: join($_stops, $this-stop, comma);
+ }
+
+ @return $_stops;
+}
+
+
+// Get Asymmetrical Split
+// ----------------------
+// - $grid:
+@function get-asym-split(
+ $grid
+) {
+ $grid : parse-grid($grid);
+ $_columns : susy-get(columns, $grid);
+
+ $_color : debug-get(color);
+ $_light : lighten($_color, 15%);
+ $_stops : ();
+
+ @for $location from 1 through susy-count($_columns) {
+ $this-stop: ();
+
+ $start: parse-span(1 at $location $grid);
+ $start: get-isolation($start);
+ $this-stop: append($this-stop, transparent $start, comma);
+ $this-stop: append($this-stop, $_color $start, comma);
+
+ $_end: $start + span(1 at $location $grid);
+ $this-stop: append($this-stop, $_light $_end, comma);
+ $this-stop: append($this-stop, transparent $_end, comma);
+
+ $_stops: join($_stops, $this-stop, comma);
+ }
+
+ @return $_stops;
+}
+
+
+// Get Asymmetrical Outside
+// ------------------------
+// - $grid:
+@function get-asym-outside(
+ $grid
+) {
+ $grid : parse-grid($grid);
+ $_columns : susy-get(columns, $grid);
+
+ $_color : debug-get(color);
+ $_light : lighten($_color, 15%);
+ $_trans : transparent;
+ $_stops : ();
+
+ @for $location from 1 through susy-count($_columns) {
+ $this-stop: ();
+
+ @if $location == 1 {
+ $this-stop: append($this-stop, $_color, comma);
+ } @else {
+ $start: parse-span(1 at $location $grid);
+ $start: get-isolation($start);
+ $this-stop: append($this-stop, $_color $start, comma);
+ }
+
+ @if $location == susy-count($_columns) {
+ $this-stop: append($this-stop, $_light, comma);
+ } @else {
+ $gutter: get-span-width(first $location $grid);
+
+ $_end: parse-span(1 at ($location + 1) $grid);
+ $_end: get-isolation($_end);
+
+ $gutter: $_light $gutter, $_trans $gutter, $_trans $_end;
+ $this-stop: join($this-stop, $gutter, comma);
+ }
+
+ $_stops: join($_stops, $this-stop, comma);
+ }
+
+ @return $_stops;
+}
+
+
+// Get Asymmetrical Background
+// ---------------------------
+// - $grid:
+@function get-background-asym(
+ $grid
+) {
+ $_stops: ();
+
+ @if is-inside($grid) {
+ $_stops: get-asym-inside($grid);
+ } @else if is-split($grid) {
+ $_stops: get-asym-split($grid);
+ } @else {
+ $_stops: get-asym-outside($grid);
+ }
+
+ @return (image: (columns: $_stops));
+}
+
+
+// Get Background
+// --------------
+// - $grid:
+@function get-background(
+ $grid
+) {
+ $grid : parse-grid($grid);
+ $_show : susy-get(debug image, $grid);
+ $_return : ();
+
+ @if $_show and $_show != 'hide' {
+ $_columns: susy-get(columns, $grid);
+
+ @if $_show != 'show-baseline' {
+ $_sym: is-symmetrical($_columns);
+ $_return: if($_sym, get-background-sym($grid), get-background-asym($grid));
+ $_return: map-merge($_return, (clip: content-box));
+ }
+
+ @if $_show != 'show-columns'
+ and global-variable-exists(base-line-height)
+ and type-of($base-line-height) == 'number'
+ and not unitless($base-line-height) {
+ $_color: variable-exists('grid-background-baseline-color');
+ $_color: if($_color, $grid-background-baseline-color, #000);
+
+ $_image: map-get($_return, image);
+ $_size: map-get($_return, size);
+ $_baseline: (baseline: ($_color 1px, transparent 1px));
+ $_baseline-size: 100% $base-line-height;
+
+ $_return: map-merge($_return, (
+ image: if($_image, map-merge($_image, $_baseline), $_baseline),
+ size: if($_size, ($_size, $_baseline-size), $_baseline-size),
+ ));
+
+ @if $_show == 'show' {
+ $_clip: map-get($_return, clip);
+ $_return: map-merge($_return, (clip: join($_clip, border-box, comma)));
+ }
+ } @else if $_show == 'show-baseline' {
+ @warn 'Please provide a $base-line-height with the desired height and units';
+ }
+ }
+
+ @if map-get($_return, image) {
+ $_return: map-merge($_return, (flow: susy-get(flow, $grid)));
+ }
+
+ @return $_return;
+}
+
+
+// Get Debug
+// ---------
+// Return the value of a debug setting
+// - $key:
+@function debug-get(
+ $key,
+ $grid: $susy
+) {
+ $key: join(debug, $key, space);
+ @return susy-get($key, $grid);
+}
diff --git a/_sass/vendor/susy/susy/language/susy/_bleed.scss b/_sass/vendor/susy/susy/language/susy/_bleed.scss
new file mode 100644
index 0000000..8ef5974
--- /dev/null
+++ b/_sass/vendor/susy/susy/language/susy/_bleed.scss
@@ -0,0 +1,200 @@
+// Bleed Syntax
+// ============
+
+// Bleed
+// -----
+// Add negative margins, and equal positive padding to create bleed.
+// - $bleed :
+@mixin bleed(
+ $bleed: 0 gutter()
+) {
+ $inspect : $bleed;
+ $output : get-bleed($bleed);
+
+ @if susy-get(global-box-sizing) != content-box {
+ $output: map-merge((box-sizing: content-box), $output);
+ }
+
+ @include susy-inspect(bleed, $inspect);
+ @include output($output);
+}
+
+
+// Bleed-x
+// -------
+// Shortcut for horizontal bleed.
+// - $bleed :
+@mixin bleed-x(
+ $bleed: gutter()
+) {
+ $bleed : parse-span($bleed);
+ $trbl : susy-get(span, $bleed);
+
+ @if length($trbl) == 1 {
+ $bleed: map-merge($bleed, (span: 0 nth($trbl, 1)));
+ } @else if length($trbl) == 2 {
+ $bleed: map-merge($bleed, (span: 0 nth($trbl, 2) 0 nth($trbl, 1)));
+ } @else {
+ @warn 'bleed-x only takes 2 lengths, but #{length($trbl)} were passed.';
+ }
+
+ @include bleed($bleed);
+}
+
+
+// Bleed-y
+// -------
+// Shortcut for vertical bleed.
+// - $bleed :
+@mixin bleed-y(
+ $bleed: if(function-exists(rhythm), rhythm(1), 1em)
+) {
+ $bleed : parse-span($bleed);
+ $trbl : susy-get(span, $bleed);
+
+ @if length($trbl) == 1 {
+ $bleed: map-merge($bleed, (span: nth($trbl, 1) 0));
+ } @else if length($trbl) == 2 {
+ $bleed: map-merge($bleed, (span: nth($trbl, 1) 0 nth($trbl, 2) 0));
+ } @else {
+ @warn 'bleed-y only takes 2 lengths, but #{length($trbl)} were passed.';
+ }
+
+ @include bleed($bleed);
+}
+
+
+// Get Bleed
+// ---------
+// Return bleed output values
+// - $bleed:
+@function get-bleed(
+ $bleed
+) {
+ $bleed : map-merge((spread: wide), parse-span($bleed));
+ $trbl : susy-get(span, $bleed);
+ $short : null;
+ $output : ();
+
+ @for $i from 1 through length($trbl) {
+ $this: nth($trbl, $i);
+ $new: ();
+ $margin: null;
+ $padding: null;
+ $padding-x: null;
+
+ @if $this > 0 {
+ $this: map-merge($bleed, (span: $this));
+ $margin: span($this);
+ $padding: $margin;
+ $padding-x: $padding;
+ }
+
+ @if $margin and $margin > 0 {
+ $margin: - $margin;
+
+ @if is-inside($this) {
+ $gutter: gutter($this);
+ $join: if($gutter and comparable($padding, $gutter), true, false);
+ $padding-x: if($join and $padding > 0, $padding + $gutter, $padding);
+ }
+ }
+
+ @if $i == 1 {
+ $new: (
+ margin-top: $margin,
+ padding-top: $padding,
+ margin-right: $margin,
+ padding-right: $padding-x,
+ margin-bottom: $margin,
+ padding-bottom: $padding,
+ margin-left: $margin,
+ padding-left: $padding-x,
+ );
+ } @else if $i == 2 {
+ $new: (
+ margin-right: $margin,
+ padding-right: $padding-x,
+ margin-left: $margin,
+ padding-left: $padding-x,
+ );
+ } @else if $i == 3 {
+ $new: (
+ margin-bottom: $margin,
+ padding-bottom: $padding,
+ );
+ } @else if $i == 4 {
+ $new: (
+ margin-left: $margin,
+ padding-left: $padding-x,
+ );
+ }
+
+ $output: map-merge($output, $new);
+ }
+
+ @each $prop, $value in $output {
+ $output: if($value == 0, map-merge($output, ($prop: null)), $output);
+ }
+
+ @return bleed-shorthand($output);
+}
+
+// Bleed Shorthand
+// ---------------
+// Convert bleed output into shorthand when possible.
+// - $bleed:
+@function bleed-shorthand(
+ $bleed
+) {
+ $margin: ();
+ $padding: ();
+ $return: ();
+
+ @each $key, $value in $bleed {
+ @if str-index($key, margin) {
+ $margin: map-merge($margin, ($key: $value));
+ } @else if str-index($key, padding) > 0 {
+ $padding: map-merge($padding, ($key: $value));
+ }
+ }
+
+ $props: (
+ margin: $margin,
+ padding: $padding,
+ );
+
+ @each $name, $map in $props {
+ $four: if(length(map-keys($map)) == 4, true, false);
+ $null: if(index(map-values($map), null), true, false);
+
+ @if $four and not($null) {
+ $top: map-get($map, '#{$name}-top');
+ $right: map-get($map, '#{$name}-right');
+ $bottom: map-get($map, '#{$name}-bottom');
+ $left: map-get($map, '#{$name}-left');
+
+ $tb: if($top == $bottom, $top, null);
+ $rl: if($right == $left, $right, null);
+ $all: if($tb == $rl, $tb, null);
+
+ $new: if($all, $all, null);
+
+ @if not($new) {
+ @if $tb and $rl {
+ $new: $tb $rl;
+ } @else if $rl {
+ $new: $top $rl $bottom;
+ } @else {
+ $new: $top $right $bottom $left;
+ }
+ }
+
+ $return: map-merge($return, ($name: $new));
+ } @else {
+ $return: map-merge($return, $map);
+ }
+ }
+
+ @return $return;
+}
diff --git a/_sass/vendor/susy/susy/language/susy/_box-sizing.scss b/_sass/vendor/susy/susy/language/susy/_box-sizing.scss
new file mode 100644
index 0000000..f551241
--- /dev/null
+++ b/_sass/vendor/susy/susy/language/susy/_box-sizing.scss
@@ -0,0 +1,47 @@
+// Susy Box Sizing
+// =================
+
+// Global Box Sizing
+// -----------------
+// Set a box model globally on all elements.
+// - [$box]: border-box | content-box
+// - [$inherit]: true | false
+@mixin global-box-sizing(
+ $box: susy-get(global-box-sizing),
+ $inherit: false
+) {
+ $inspect: $box;
+
+ @if $inherit {
+ @at-root {
+ html { @include output((box-sizing: $box)); }
+ *, *:before, *:after { box-sizing: inherit; }
+ }
+ } @else {
+ *, *:before, *:after { @include output((box-sizing: $box)); }
+ }
+
+ @include susy-inspect(global-box-sizing, $inspect);
+ @include update-box-model($box);
+}
+
+// Border Box Sizing
+// -----------------
+// A legacy shortcut...
+// - [$inherit]: true | false
+@mixin border-box-sizing(
+ $inherit: false
+) {
+ @include global-box-sizing(border-box, $inherit);
+}
+
+// Update Box Model
+// ----------------
+// PRIVATE: Updates global box model setting
+@mixin update-box-model(
+ $box
+) {
+ @if $box != susy-get(global-box-sizing) {
+ @include susy-set(global-box-sizing, $box);
+ }
+}
diff --git a/_sass/vendor/susy/susy/language/susy/_breakpoint-plugin.scss b/_sass/vendor/susy/susy/language/susy/_breakpoint-plugin.scss
new file mode 100644
index 0000000..30de288
--- /dev/null
+++ b/_sass/vendor/susy/susy/language/susy/_breakpoint-plugin.scss
@@ -0,0 +1,185 @@
+// Breakpoint Integration
+// ======================
+
+$susy-media: () !default;
+$susy-media-fallback: false !default;
+
+$_susy-media-context: ();
+
+
+// Susy Breakpoint
+// ---------------
+// Change grids at different media query breakpoints.
+// - $query : [] | |
+// - $layout :
+// - $no-query : |
+@mixin susy-breakpoint(
+ $query,
+ $layout: false,
+ $no-query: $susy-media-fallback
+) {
+ @include susy-media-router($query, $no-query) {
+ @if $layout {
+ @include with-layout($layout) {
+ @content;
+ }
+ } @else {
+ @content;
+ }
+ }
+}
+
+
+// Susy Media
+// ----------
+// - $query: [] |
+// - $no-query: |
+@mixin susy-media(
+ $query,
+ $no-query: $susy-media-fallback
+) {
+ $old-context: $_susy-media-context;
+ $name: if(map-has-key($susy-media, $query), $query, null);
+ $query: susy-get-media($query);
+ $query: susy-parse-media($query);
+
+ @include susy-media-context($query, $name);
+
+ @if $no-query and type-of($no-query) != string {
+ @content;
+ } @else {
+ @media #{susy-render-media($query)} {
+ @content;
+ }
+
+ @if type-of($no-query) == string {
+ #{$no-query} & {
+ @content;
+ }
+ }
+ }
+
+ @include susy-media-context($old-context, $clean: true);
+}
+
+
+// Media Router
+// ------------
+// Rout media arguments to the correct mixin.
+@mixin susy-media-router(
+ $query,
+ $no-query: $susy-media-fallback
+) {
+ @if susy-support(breakpoint, (mixin: breakpoint), $warn: false) {
+ @include breakpoint($query, $no-query) {
+ @content;
+ }
+ } @else {
+ @include susy-media($query, $no-query) {
+ @content;
+ }
+ }
+}
+
+
+// Update Context
+// -------------
+// Set the new media context
+@mixin susy-media-context(
+ $query,
+ $name: null,
+ $clean: false
+) {
+ $query: map-merge((name: $name), $query);
+
+ @if $clean {
+ $_susy-media-context: $query !global;
+ } @else {
+ $_susy-media-context: map-merge($_susy-media-context, $query) !global;
+ }
+}
+
+
+// Media Context
+// -------------
+// Return the full media context, or a single media property (e.g. min-width)
+@function susy-media-context(
+ $property: false
+) {
+ @if $property {
+ @return map-get($_susy-media-context, $property);
+ } @else {
+ @return $_susy-media-context;
+ }
+}
+
+
+// Get Media
+// ---------
+// Return a named media-query from $susy-media.
+// - $name:
+@function susy-get-media(
+ $name
+) {
+ @if map-has-key($susy-media, $name) {
+ $map-value: map-get($susy-media, $name);
+ @if ($name == $map-value) {
+ $name: $map-value;
+ } @else {
+ $name: susy-get-media($map-value);
+ }
+ }
+
+ @return $name;
+}
+
+
+// Render Media
+// ------------
+// Build a media-query string from various media settings
+@function susy-render-media(
+ $query
+) {
+ $output: null;
+ @each $property, $value in $query {
+ $string: null;
+
+ @if $property == media {
+ $string: $value;
+ } @else {
+ $string: '(#{$property}: #{$value})';
+ }
+
+ $output: if($output, '#{$output} and #{$string}', $string);
+ }
+
+ @return $output;
+}
+
+
+// Parse Media
+// -----------
+// Return parsed media-query settings based on shorthand
+@function susy-parse-media(
+ $query
+) {
+ $mq: null;
+ @if type-of($query) == map {
+ $mq: $query;
+ } @else if type-of($query) == number {
+ $mq: (min-width: $query);
+ } @else if type-of($query) == list and length($query) == 2 {
+ @if type-of(nth($query, 1)) == number {
+ $mq: (
+ min-width: min($query...),
+ max-width: max($query...),
+ );
+ } @else {
+ $mq: (nth($query, 1): nth($query, 2));
+ }
+ } @else {
+ $mq: (media: '#{$query}');
+ }
+
+ @return $mq;
+}
diff --git a/_sass/vendor/susy/susy/language/susy/_container.scss b/_sass/vendor/susy/susy/language/susy/_container.scss
new file mode 100644
index 0000000..e5f4a85
--- /dev/null
+++ b/_sass/vendor/susy/susy/language/susy/_container.scss
@@ -0,0 +1,81 @@
+// Container Syntax
+// ================
+
+// Container [mixin]
+// -----------------
+// Set a container element
+// - [$layout] :
+@mixin container(
+ $layout: $susy
+) {
+ $inspect : $layout;
+ $layout : parse-grid($layout);
+
+ $_width : get-container-width($layout);
+ $_justify : parse-container-position(susy-get(container-position, $layout));
+ $_property : if(susy-get(math, $layout) == static, width, max-width);
+
+ $_box : susy-get(box-sizing, $layout);
+
+ @if $_box {
+ @include output((box-sizing: $_box));
+ }
+
+ @include susy-inspect(container, $inspect);
+ @include float-container($_width, $_justify, $_property);
+ @include show-grid($layout);
+}
+
+// Container [function]
+// --------------------
+// Return container width
+// - [$layout] :
+@function container(
+ $layout: $susy
+) {
+ $layout: parse-grid($layout);
+ @return get-container-width($layout);
+}
+
+// Get Container Width
+// -------------------
+// Calculate the container width
+// - [$layout]:
+@function get-container-width(
+ $layout: $susy
+) {
+ $layout : parse-grid($layout);
+ $_width : susy-get(container, $layout);
+ $_column-width : susy-get(column-width, $layout);
+ $_math : susy-get(math, $layout);
+
+ @if not($_width) or $_width == auto {
+ @if valid-column-math($_math, $_column-width) {
+ $_columns : susy-get(columns, $layout);
+ $_gutters : susy-get(gutters, $layout);
+ $_spread : if(is-split($layout), wide, narrow);
+ $_width : susy-sum($_columns, $_gutters, $_spread) * $_column-width;
+ } @else {
+ $_width: 100%;
+ }
+ }
+
+ @return $_width;
+}
+
+// Parse Container Position
+// ------------------------
+// Parse the $container-position into margin values.
+// - [$justify] : left | center | right | []
+@function parse-container-position(
+ $justify: map-get($susy-defaults, container-position)
+) {
+ $_return: if($justify == left, 0, auto) if($justify == right, 0, auto);
+
+ @if not(index(left right center, $justify)) {
+ $_return: nth($justify, 1);
+ $_return: $_return if(length($justify) > 1, nth($justify, 2), $_return);
+ }
+
+ @return $_return;
+}
diff --git a/_sass/vendor/susy/susy/language/susy/_context.scss b/_sass/vendor/susy/susy/language/susy/_context.scss
new file mode 100644
index 0000000..52e12a6
--- /dev/null
+++ b/_sass/vendor/susy/susy/language/susy/_context.scss
@@ -0,0 +1,36 @@
+// Context Syntax
+// ==============
+
+// Nested [function]
+// -----------------
+// Return a subset grid for nested context.
+// - $context :
+@function nested(
+ $context
+) {
+ $context : parse-span($context);
+ $span : susy-get(span, $context);
+ $location : get-location($context);
+ $columns : susy-get(columns, $context);
+
+ @return susy-slice($span, $location, $columns);
+}
+
+// Nested [mixin]
+// --------------
+// Use a subset grid for a nested context
+// - $context :
+// - @content :
+@mixin nested(
+ $context
+) {
+ $inspect : $context;
+ $context : parse-span($context);
+ $old : susy-get(columns);
+ $susy : map-merge($susy, (columns: nested($context))) !global;
+
+ @include susy-inspect(nested, $inspect);
+ @content;
+
+ $susy : map-merge($susy, (columns: $old)) !global;
+}
diff --git a/_sass/vendor/susy/susy/language/susy/_gallery.scss b/_sass/vendor/susy/susy/language/susy/_gallery.scss
new file mode 100644
index 0000000..e59b9a0
--- /dev/null
+++ b/_sass/vendor/susy/susy/language/susy/_gallery.scss
@@ -0,0 +1,94 @@
+// Gallery Syntax
+// ==============
+
+// Gallery
+// -------
+// Create an isolated gallery
+// - $span :
+// - [$selector] : child | of-type
+@mixin gallery(
+ $span,
+ $selector: child
+) {
+ $inspect : $span;
+ $span : parse-span($span);
+ $span : map-merge($span, (location: 1));
+
+ $n : susy-get(span, $span);
+ $columns : susy-get(columns, $span);
+ $context : susy-count($columns);
+ $flow : susy-get(flow, $span);
+
+ $inside : is-inside($span);
+ $from : from($flow);
+ $line : floor($context / $n);
+ $symmetrical : is-symmetrical($columns);
+
+ $output: (
+ width : null,
+ float : from,
+ margin-before : null,
+ margin-after : null,
+ padding-before : null,
+ padding-after : null,
+ flow : $flow,
+ );
+
+ @if $inside {
+ $gutters: get-gutters($span);
+ $output: map-merge($output, (
+ padding-before: map-get($gutters, before),
+ padding-after: map-get($gutters, after),
+ ));
+ }
+
+ @if $symmetrical {
+ $output: map-merge($output, (width: get-span-width($span)));
+ }
+
+ $box : susy-get(box-sizing, $span);
+ $global-box : if(susy-get(global-box-sizing) == 'border-box', true, false);
+
+ @include susy-inspect(gallery, $inspect);
+
+ // Collective Output
+ @if $box == border-box or ($inside and not($box) and not($global-box)) {
+ @include output((box-sizing: border-box));
+ } @else if $box == content-box {
+ @include output((box-sizing: content-box));
+ }
+
+ @include float-span-output($output...);
+
+ // Individual Loop
+ @for $item from 1 through $line {
+ $nth: '#{$line}n + #{$item}';
+ &:nth-#{$selector}(#{$nth}) {
+ // Individual Prep
+ $output: (
+ width : if($symmetrical, null, get-span-width($span)),
+ float : null,
+ margin-before : get-isolation($span),
+ margin-after : -100%,
+ padding-before : null,
+ padding-after : null,
+ flow : $flow,
+ );
+
+ // Individual Output
+ @include float-span-output($output...);
+
+ @if get-edge($span) == first {
+ @include break;
+ @include first($span);
+ } @else {
+ @include nobreak;
+ }
+
+ // Individual Location Increment
+ $location: get-location($span) + $n;
+ $location: if($location > $context, 1, $location);
+ $span: map-merge($span, (location: $location));
+ }
+ }
+}
diff --git a/_sass/vendor/susy/susy/language/susy/_grids.scss b/_sass/vendor/susy/susy/language/susy/_grids.scss
new file mode 100644
index 0000000..4fa72ed
--- /dev/null
+++ b/_sass/vendor/susy/susy/language/susy/_grids.scss
@@ -0,0 +1,64 @@
+// Grid Syntax
+// ===========
+
+
+// Layout
+// ------
+// Set a new layout using a shorthand
+// - $layout:
+// - $clean: boolean
+@mixin layout(
+ $layout,
+ $clean: false
+) {
+ $inspect : $layout;
+ $susy : _get-layout($layout, $clean) !global;
+
+ @include susy-inspect(layout, $inspect);
+}
+
+
+// Use Grid
+// --------
+// Use an arbitrary layout for a section of code
+// - $layout:
+// - $clean: boolean
+@mixin with-layout(
+ $layout,
+ $clean: false
+) {
+ $inspect : $layout;
+ $old : $susy;
+ $susy : _get-layout($layout, $clean) !global;
+
+ @include susy-inspect(with-layout, $inspect);
+
+ @content;
+
+ $susy: $old !global;
+}
+
+
+// Layout
+// ------
+// Return a parsed layout map based on shorthand syntax
+// - $layout:
+@function layout(
+ $layout: $susy
+) {
+ @return parse-grid($layout);
+}
+
+
+// Get Layout
+// ----------
+// Return a new layout based on current and given settings
+// - $layout:
+// - $clean: boolean
+@function _get-layout(
+ $layout,
+ $clean: false
+) {
+ $layout: layout($layout);
+ @return if($clean, $layout, _susy-deep-merge($susy, $layout));
+}
diff --git a/_sass/vendor/susy/susy/language/susy/_gutters.scss b/_sass/vendor/susy/susy/language/susy/_gutters.scss
new file mode 100644
index 0000000..efe7ac2
--- /dev/null
+++ b/_sass/vendor/susy/susy/language/susy/_gutters.scss
@@ -0,0 +1,154 @@
+// Gutter Syntax
+// =============
+
+
+// Gutters
+// -------
+// Set gutters on an element.
+// - [$span] :
+@mixin gutters(
+ $span: $susy
+) {
+ $inspect : $span;
+ $span : parse-gutters($span);
+ $_gutters : get-gutters($span);
+
+ $_output: (
+ before: map-get($_gutters, before),
+ after: map-get($_gutters, after),
+ flow: susy-get(flow, $span),
+ );
+
+ @include susy-inspect(gutters, $inspect);
+
+ @if is-inside($span) {
+ @include padding-output($_output...);
+ } @else {
+ @include margin-output($_output...);
+ }
+}
+
+@mixin gutter(
+ $span: $susy
+) {
+ @include gutters($span);
+}
+
+
+// Gutter
+// ------
+// Return the width of a gutter.
+// - [$span] :
+@function gutter(
+ $span: $susy
+) {
+ $span: parse-gutters($span);
+
+ $_gutters: get-gutters($span);
+ $_gutters: map-get($_gutters, before) or map-get($_gutters, after);
+
+ @return $_gutters;
+}
+
+@function gutters(
+ $span: $susy
+) {
+ @return gutter($span);
+}
+
+
+// Get Gutter Width
+// ----------------
+// Return gutter width.
+// - [$context]:
+@function get-gutter-width(
+ $context: $susy
+) {
+ $context : parse-gutters($context);
+
+ $_gutters : susy-get(gutters, $context);
+ $_gutter : susy-get(gutter-override, $context);
+
+ @if $_gutters and ($_gutters > 0) and not($_gutter) {
+ $_column-width: susy-get(column-width, $context);
+ $_math: gutter-math($context);
+ @if $_math == static {
+ $_gutter: $_gutters * valid-column-math($_math, $_column-width);
+ } @else {
+ $_columns : susy-get(columns, $context);
+ $_spread : if(is-split($context), wide, susy-get(spread, $context));
+ $_gutter : percentage($_gutters / susy-sum($_columns, $_gutters, $_spread));
+ }
+ }
+
+ $_gutter: if($_gutter == 'no-gutters' or $_gutter == 'no-gutter', null, $_gutter);
+
+ @return $_gutter;
+}
+
+
+// Get Gutters
+// -----------
+// Return before and after gutter values.
+// - [$context]:
+@function get-gutters(
+ $context: $susy
+) {
+ $context : parse-gutters($context);
+
+ $_gutter-position : susy-get(gutter-position, $context);
+ $_gutter : get-gutter-width($context);
+
+ $_return : (before: null, after: null);
+
+ @if is-split($context) and $_gutter {
+ $_gutter: $_gutter / 2;
+ $_return: map-merge($_return, (before: $_gutter, after: $_gutter));
+ } @else {
+ $_return: map-merge($_return, ($_gutter-position: $_gutter));
+ }
+
+ @return $_return;
+}
+
+
+// Is Inside
+// ---------
+// Returns true if gutters are inside.
+// $context:
+@function is-inside(
+ $context
+) {
+ $_inside: inside inside-static;
+ $_gutter-position: susy-get(gutter-position, $context);
+
+ @return if(index($_inside, $_gutter-position), true, false);
+}
+
+
+// Is Split
+// --------
+// Returns true if gutters are split.
+// $context:
+@function is-split(
+ $context
+) {
+ $_split: split inside inside-static;
+ $_gutter-position: susy-get(gutter-position, $context);
+
+ @return if(index($_split, $_gutter-position), true, false);
+}
+
+
+// Gutter Math
+// -----------
+// Return the math to use for gutter calculations
+// $context:
+@function gutter-math(
+ $context: $susy
+) {
+ $_return : susy-get(math, $context);
+ $_return : if(susy-get(gutter-position, $context) == inside-static, static, $_return);
+
+ @return $_return;
+}
diff --git a/_sass/vendor/susy/susy/language/susy/_isolate.scss b/_sass/vendor/susy/susy/language/susy/_isolate.scss
new file mode 100644
index 0000000..7ddfd7f
--- /dev/null
+++ b/_sass/vendor/susy/susy/language/susy/_isolate.scss
@@ -0,0 +1,77 @@
+// Isolation Syntax
+// ================
+
+
+// Isolate [Mixin]
+// ---------------
+// Set isolation as an override.
+// - $location:
+@mixin isolate(
+ $isolate: 1
+) {
+ $inspect: $isolate;
+
+ $output: (
+ push: isolate($isolate),
+ flow: susy-get(flow, $isolate),
+ );
+
+ @include susy-inspect(isolate, $inspect);
+ @include isolate-output($output...);
+}
+
+
+// Isolate [function]
+// ------------------
+// Return an isolation offset width.
+// - $location:
+@function isolate(
+ $isolate: 1
+) {
+ $isolate: parse-span($isolate);
+ $isolation: susy-get(span, $isolate);
+
+ @if $isolation and not(get-location($isolate)) {
+ $new: (
+ span: null,
+ location: $isolation,
+ );
+ $isolate: map-merge($isolate, $new);
+ }
+
+ @return get-isolation($isolate);
+}
+
+
+// Get Isolation
+// -------------
+// Return the isolation offset width
+// - $input:
+@function get-isolation(
+ $input
+) {
+ $location : get-location($input);
+ $columns : susy-get(columns, $input);
+ $width : null;
+
+ @if type-of($location) == number and not(unitless($location)) {
+ $width: $location;
+ } @else if $location {
+ $push: $location - 1;
+ @if $push > 0 {
+ $push: map-merge($input, (
+ span: $push,
+ location: 1,
+ spread: wide,
+ ));
+ $width: get-span-width($push);
+ }
+ }
+
+ @if susy-get(gutter-position, $input) == split
+ and susy-get(gutters, $input) > 0 {
+ $width: if($width == null, gutters($input), $width + gutters($input));
+ }
+
+ @return $width or 0;
+}
diff --git a/_sass/vendor/susy/susy/language/susy/_margins.scss b/_sass/vendor/susy/susy/language/susy/_margins.scss
new file mode 100644
index 0000000..cb36839
--- /dev/null
+++ b/_sass/vendor/susy/susy/language/susy/_margins.scss
@@ -0,0 +1,94 @@
+// Margin Syntax
+// =============
+
+// Pre
+// ---
+// Add spanning-margins before an element.
+// - $span :
+@mixin pre(
+ $span
+) {
+ $inspect: $span;
+ $span : map-merge((spread: wide), parse-span($span));
+ $flow : susy-get(flow, $span);
+ $split : if(susy-get(gutter-position, $span) == split, true, false);
+ $gutter : gutter($span);
+ $span : span($span);
+ $width : if($split and $gutter, $span + $gutter, $span);
+
+ @include susy-inspect(pre, $inspect);
+ @include margin-output($width, null, $flow);
+}
+
+// Post
+// ----
+// Add spanning-margins after an element.
+// - $span :
+@mixin post(
+ $span
+) {
+ $inspect : $span;
+ $span : map-merge((spread: wide), parse-span($span));
+ $flow : susy-get(flow, $span);
+ $split : if(susy-get(gutter-position, $span) == split, true, false);
+ $width : if($split, span($span) + gutter($span), span($span));
+
+ @include susy-inspect(post, $inspect);
+ @include margin-output(null, $width, $flow);
+}
+
+// Push
+// ----
+// Simple synonymn for pre.
+// - $span :
+@mixin push(
+ $span
+) {
+ @include pre($span);
+}
+
+// Pull
+// ----
+// Add negative spanning-margins before an element.
+// - $span :
+@mixin pull(
+ $span
+) {
+ $inspect : $span;
+ $span : map-merge((spread: wide), parse-span($span));
+ $flow : susy-get(flow, $span);
+ $split : if(susy-get(gutter-position, $span) == split, true, false);
+ $width : if($split, 0 - span($span) + gutter($span), 0 - span($span));
+
+ @include susy-inspect(pull, $inspect);
+ @include margin-output($width, null, $flow);
+}
+
+// Squish
+// ------
+// Add spanning-margins before and after an element.
+// - $pre :
+// - [$post] :
+@mixin squish(
+ $pre,
+ $post: false
+) {
+ $inspect : ($pre, $post);
+ $pre : map-merge((spread: wide), parse-span($pre));
+
+ @if $post {
+ $post: map-merge((spread: wide), parse-span($post));
+ } @else {
+ $span: susy-get(span, $pre);
+ @if length($span) > 1 {
+ $pre: map-merge($pre, (span: nth($span, 1)));
+ $post: map-merge($pre, (span: nth($span, 2)));
+ } @else {
+ $post: $pre;
+ }
+ }
+
+ @include susy-inspect(squish, $inspect);
+ @include pre($pre);
+ @include post($post);
+}
diff --git a/_sass/vendor/susy/susy/language/susy/_padding.scss b/_sass/vendor/susy/susy/language/susy/_padding.scss
new file mode 100644
index 0000000..cdf75c8
--- /dev/null
+++ b/_sass/vendor/susy/susy/language/susy/_padding.scss
@@ -0,0 +1,74 @@
+// Padding Syntax
+// ==============
+
+// Prefix
+// ------
+// Add spanning-padding before an element.
+// - $span :
+@mixin prefix(
+ $span
+) {
+ $inspect : $span;
+ $span : map-merge((spread: wide), parse-span($span));
+ $flow : susy-get(flow, $span);
+ $width : span($span);
+
+ @if is-inside($span) {
+ $gutter: gutter($span);
+ $width: if($gutter and comparable($width, $gutter), $width + $gutter, $width);
+ }
+
+ @include susy-inspect(prefix, $inspect);
+ @include padding-output($width, null, $flow);
+}
+
+// Suffix
+// ------
+// Add spanning-padding after an element.
+// - $span :
+@mixin suffix(
+ $span
+) {
+ $inspect : $span;
+ $span : map-merge((spread: wide), parse-span($span));
+ $flow : susy-get(flow, $span);
+ $width : span($span);
+
+ @if is-inside($span) {
+ $gutter: gutter($span);
+ $width: if($gutter and comparable($width, $gutter), $width + $gutter, $width);
+ }
+
+ @include susy-inspect(suffix, $inspect);
+ @include padding-output(null, $width, $flow);
+}
+
+// Pad
+// ---
+// Add spanning-padding before and after an element.
+// - $pre :
+// - [$post] :
+@mixin pad(
+ $pre,
+ $post: false
+) {
+ $inspect : ($pre, $post);
+ $pre : map-merge((spread: wide), parse-span($pre));
+
+ @if $post {
+ $post: map-merge((spread: wide), parse-span($post));
+ } @else {
+ $span: susy-get(span, $pre);
+ @if length($span) > 1 {
+ $pre: map-merge($pre, (span: nth($span, 1)));
+ $post: map-merge($pre, (span: nth($span, 2)));
+ } @else {
+ $post: $pre;
+ }
+ }
+
+ @include susy-inspect(pad, $inspect);
+ @include prefix($pre);
+ @include suffix($post);
+
+}
diff --git a/_sass/vendor/susy/susy/language/susy/_rows.scss b/_sass/vendor/susy/susy/language/susy/_rows.scss
new file mode 100644
index 0000000..d726431
--- /dev/null
+++ b/_sass/vendor/susy/susy/language/susy/_rows.scss
@@ -0,0 +1,138 @@
+// Row Start & End
+// ===============
+
+// Break
+// -----
+// Apply to any element that should force a line break.
+@mixin break {
+ @include output((clear: both));
+}
+
+
+// NoBreak
+// -------
+// Cancel the break() effect, e.g. when using media queries.
+@mixin nobreak {
+ @include output((clear: none));
+}
+
+
+// Full
+// ----
+// - [$context]:
+@mixin full(
+ $context: $susy
+) {
+ $inspect : $context;
+ @include susy-inspect(full, $inspect);
+ @include span(full of parse-grid($context) break);
+}
+
+
+// First
+// -----
+// - [$context]:
+@mixin first(
+ $context: $susy
+) {
+ $inspect : $context;
+ $context : parse-grid($context);
+ $flow : susy-get(flow, $context);
+
+ @include susy-inspect(first, $inspect);
+ @if not(is-split($context)) {
+ @include float-first($flow);
+ }
+}
+
+@mixin alpha(
+ $context: $susy
+) {
+ @include first($context);
+}
+
+
+// Last
+// ----
+// - [$context]:
+@mixin last(
+ $context: $susy
+) {
+ $inspect : $context;
+ $context : parse-grid($context);
+
+ @include susy-inspect(last, $inspect);
+
+ $output: (
+ flow: susy-get(flow, $context),
+ last-flow: susy-get(last-flow, $context),
+ margin: if(is-split($context), null, 0),
+ );
+
+ @include float-last($output...);
+}
+
+@mixin omega(
+ $context: $susy
+) {
+ @include last($context);
+}
+
+
+// Get Edge
+// --------
+// Calculate edge value based on location, if possible
+@function get-edge(
+ $span
+) {
+ $span : parse-span($span);
+ $edge : susy-get(edge, $span);
+
+ @if not($edge) {
+ $count: susy-count(susy-get(columns, $span));
+ $location: susy-get(location, $span);
+ $n: susy-get(span, $span);
+
+ $number: if(type-of($location) == number, true, false);
+ $index: if($number and unitless($location), true, false);
+
+ @if $n == $count {
+ $edge: full;
+ } @else if $location and $n and $index {
+ @if $location == 1 {
+ $edge: if($n == $count, full, first);
+ } @else if $location + $n - 1 == $count {
+ $edge: last;
+ }
+ }
+ }
+
+ @if $edge == alpha or $edge == omega {
+ $edge: if($edge == alpha, first, last);
+ }
+
+ @return $edge;
+}
+
+
+// Get Location
+// ------------
+// Calculate location value based on edge, if possible
+@function get-location(
+ $span
+) {
+ $span : parse-span($span);
+ $location : susy-get(location, $span);
+ $edge : get-edge($span);
+ $n : susy-get(span, $span);
+
+ @if $edge and not($location) and type-of($n) == number and unitless($n) {
+ @if $edge == first {
+ $location: 1;
+ } @else if $edge == last {
+ $location: susy-count(susy-get(columns, $span)) - $n + 1;
+ }
+ }
+
+ @return $location
+}
diff --git a/_sass/vendor/susy/susy/language/susy/_settings.scss b/_sass/vendor/susy/susy/language/susy/_settings.scss
new file mode 100644
index 0000000..9b5d897
--- /dev/null
+++ b/_sass/vendor/susy/susy/language/susy/_settings.scss
@@ -0,0 +1,216 @@
+// Susy Settings
+// =============
+
+// Susy Language Defaults
+// ----------------------
+// - PRIVATE
+@include susy-defaults((
+ container: auto,
+ math: fluid,
+ output: float,
+ container-position: center,
+ gutter-position: after,
+ global-box-sizing: content-box,
+ debug: (
+ image: hide,
+ color: rgba(#66f, .25),
+ output: background,
+ toggle: top right,
+ ),
+));
+
+
+// Valid Keyword Values
+// --------------------
+// - PRIVATE: DONT'T TOUCH
+$susy-keywords: (
+ container: auto,
+ math: static fluid,
+ output: isolate float,
+ container-position: left center right,
+ flow: ltr rtl,
+ gutter-position: before after split inside inside-static,
+ box-sizing: border-box content-box,
+ span: full,
+ edge: first alpha last omega full,
+ spread: narrow wide wider,
+ gutter-override: no-gutters no-gutter,
+ role: nest,
+ clear: break nobreak,
+ debug image: show hide show-columns show-baseline,
+ debug output: background overlay,
+);
+
+
+// Parse Susy Keywords and Maps
+// ----------------------------
+@function parse-settings(
+ $short: $susy
+) {
+ $_return: ();
+
+ @if type-of($short) == map {
+ $_return: $short;
+ } @else {
+ @each $item in $short {
+ // strings
+ @if type-of($item) == string {
+ @each $key, $value in $susy-keywords {
+ @if index($value, $item) {
+ $_key-value: append($key, $item);
+ $_return: _susy-deep-set($_return, $_key-value...);
+ }
+ }
+ // maps
+ } @else if type-of($item) == map {
+ $_return: map-merge($_return, $item);
+ }
+ }
+ }
+
+ @return $_return;
+}
+
+
+// Parse Columns & Gutters
+// -----------------------
+@function parse-layout(
+ $short
+) {
+ $_return: ();
+ $_columns: ();
+ $_gutters: null;
+
+ @if not(unitless(nth(nth($short, 1), 1))) {
+ $_gutters: nth($short, 1);
+ } @else {
+ $_columns: (columns: nth($short, 1));
+ $_gutters: if(length($short) > 1, nth($short, 2), $_gutters);
+ }
+
+ @if type-of($_gutters) == list and length($_gutters) > 0 {
+ $_gutters: (
+ gutters: nth($_gutters, 2) / nth($_gutters, 1),
+ column-width: nth($_gutters, 1),
+ );
+ } @else {
+ $_gutters: if($_gutters, (gutters: $_gutters), ());
+ }
+
+ $_return: map-merge($_return, $_columns);
+ $_return: map-merge($_return, $_gutters);
+
+ @return $_return;
+}
+
+
+// Parse Grid/Context
+// ------------------
+@function parse-grid(
+ $short: $susy
+) {
+ $_return: parse-settings($short);
+ $_layout: ();
+
+ @if type-of($short) == map {
+ $_return: $short;
+ } @else {
+ @each $item in $short {
+ // number or list
+ @if type-of($item) == number or type-of($item) == list {
+ @if type-of($item) == list or unitless($item) {
+ $_layout: append($_layout, $item);
+ } @else {
+ $_return: map-merge($_return, (container: $item));
+ }
+ }
+ }
+
+ $_layout: if(length($_layout) > 0, parse-layout($_layout), $_layout);
+ }
+
+ @return map-merge($_return, $_layout);
+}
+
+
+// Parse Span
+// ----------
+@function parse-span(
+ $short,
+ $key: span
+) {
+ $_return: ();
+
+ @if type-of($short) == map {
+ $_return: $short;
+ } @else {
+ $_at: index($short, at);
+
+ @if $_at {
+ $_loci: $_at + 1;
+ $_location: nth($short, $_loci);
+ $_return: map-merge($_return, (location: $_location));
+ $short: set-nth($short, $_at, null);
+ $short: set-nth($short, $_loci, null);
+ }
+
+ $_i: 1;
+ $_span: ();
+
+ @while $_i <= length($short) {
+ $_this: nth($short, $_i);
+
+ @if type-of($_this) == number {
+ $_span: append($_span, $_this);
+ $short: set-nth($short, $_i, null);
+ } @else if $_this == of {
+ $short: set-nth($short, $_i, null);
+ $_i: length($short) + 1;
+ }
+
+ $_i: $_i + 1;
+ }
+
+ @if length($_span) > 0 {
+ $_span: if(length($_span) == 1, nth($_span, 1), $_span);
+ $_return: map-merge($_return, ($key: $_span));
+ }
+
+ $_return: map-merge($_return, parse-grid($short));
+ }
+
+ @return $_return;
+}
+
+
+// Parse Gutters
+// -------------
+@function parse-gutters(
+ $short: $susy
+) {
+ $_gutters: parse-span($short, gutter-override);
+ $_span: susy-get(gutter-override, $_gutters);
+
+ @if $_span and not(map-get($_gutters, columns)) {
+ $_context: ();
+ $_new: ();
+
+ @each $item in $_span {
+ @if type-of($item) == number and unitless($item) {
+ $_context: append($_context, $item);
+ } @else {
+ $_new: append($_new, $item);
+ }
+ }
+
+ $_context: parse-grid($_context);
+ $_new: if(length($_new) == 0, null, $_new);
+ $_new: if(length($_new) == 1, nth($_new, 1), $_new);
+ $_new: (gutter-override: if($_new != $_span, $_new, $_span));
+
+ $_gutters: map-merge($_gutters, $_new);
+ $_gutters: map-merge($_gutters, $_context);
+ }
+
+ @return $_gutters;
+}
diff --git a/_sass/vendor/susy/susy/language/susy/_span.scss b/_sass/vendor/susy/susy/language/susy/_span.scss
new file mode 100644
index 0000000..86ccda9
--- /dev/null
+++ b/_sass/vendor/susy/susy/language/susy/_span.scss
@@ -0,0 +1,163 @@
+// Span Syntax
+// ===========
+
+// Span [mixin]
+// ------------
+// Set a spanning element using shorthand syntax.
+// - $span :
+@mixin span(
+ $span
+) {
+ $inspect: $span;
+ $span: parse-span($span);
+ $output: span-math($span);
+ $nesting: susy-get(span, $span);
+ $clear: susy-get(clear, $span);
+
+ $box: susy-get(box-sizing, $span);
+ $content-box: if(susy-get(global-box-sizing) != 'border-box', true, false);
+ $box: $box or if(is-inside($span) and $content-box, border-box, null);
+
+ @if $clear == break {
+ @include break;
+ } @else if $clear == nobreak {
+ @include nobreak;
+ }
+
+ @include susy-inspect(span, $inspect);
+ @include output((box-sizing: $box));
+ @include float-span-output($output...);
+
+ @if valid-columns($nesting, silent) {
+ @include nested($span) { @content; }
+ } @else {
+ @content;
+ }
+}
+
+// Span [function]
+// ---------------
+// Return the width of a span.
+// - $span :
+@function span(
+ $span
+) {
+ @return get-span-width($span);
+}
+
+// Span Math
+// ---------
+// Get all the span results.
+// - $span:
+@function span-math(
+ $span
+) {
+ $nest : if(susy-get(role, $span) == nest, true, false);
+ $split-nest : if(is-split($span) and $nest, true, false);
+ $edge : get-edge($span);
+ $location : get-location($span);
+
+ $float : from;
+ $padding-before : null;
+ $padding-after : null;
+ $margin-before : null;
+ $margin-after : null;
+
+ // calculate widths
+ $spread: index(map-values($span), spread);
+ $span: if($split-nest and not($spread), map-merge($span, (spread: wide)), $span);
+ $width: get-span-width($span);
+ $gutters: get-gutters($span);
+
+ // apply gutters
+ @if is-inside($span) {
+ @if not(susy-get(role, $span)) {
+ $padding-before: map-get($gutters, before);
+ $padding-after: map-get($gutters, after);
+ }
+ } @else {
+ @if not($split-nest) {
+ $margin-before: map-get($gutters, before);
+ $margin-after: map-get($gutters, after);
+ }
+ }
+
+ // special margin handling
+ @if susy-get(output, $span) == isolate and $location {
+ $margin-before: get-isolation($span);
+ $margin-after: -100%;
+ } @else if $edge {
+ $is-split: is-split($span);
+ $pos: susy-get(gutter-position, $span);
+
+ @if $edge == last {
+ $float: susy-get(last-flow, $span);
+ }
+
+ @if not($is-split) {
+ @if $edge == full or ($edge == first and $pos == before) {
+ $margin-before: 0;
+ }
+ @if $edge == full or ($edge == last and $pos == after) {
+ $margin-after: 0;
+ }
+ }
+
+ }
+
+ @return (
+ width : $width,
+ float : $float,
+ margin-before : $margin-before,
+ margin-after : $margin-after,
+ padding-before : $padding-before,
+ padding-after : $padding-after,
+ flow : susy-get(flow, $span),
+ );
+}
+
+// Get Span Width
+// --------------
+// Return span width.
+// - $span:
+@function get-span-width(
+ $span
+) {
+ $span : parse-span($span);
+
+ $n : susy-get(span, $span);
+ $location : get-location($span);
+ $columns : susy-get(columns, $span);
+ $gutters : susy-get(gutters, $span);
+ $spread : susy-get(spread, $span);
+
+ $context : null;
+ $span-sum : null;
+ $width : null;
+
+ @if $n == 'full' {
+ $pos: susy-get(gutter-position, $span);
+ $role: susy-get(role, $span);
+ $n: if($pos == split and $role != nest, susy-count($columns), 100%);
+ }
+
+ @if type-of($n) != number {
+ @warn "(#{type-of($n)}) #{$n} is not a valid span.";
+ } @else if unitless($n) {
+ $context: susy-sum($columns, $gutters, if(is-split($span), wide, narrow));
+ $spread: if(is-inside($span), $spread or wide, $spread);
+ $span-sum: susy($n, $location, $columns, $gutters, $spread);
+
+ $_math: susy-get(math, $span);
+ $_column-width: susy-get(column-width, $span);
+ @if $_math == static {
+ $width: $span-sum * valid-column-math($_math, $_column-width);
+ } @else {
+ $width: percentage($span-sum / $context);
+ }
+ } @else {
+ $width: $n;
+ }
+
+ @return $width;
+}
diff --git a/_sass/vendor/susy/susy/language/susy/_validation.scss b/_sass/vendor/susy/susy/language/susy/_validation.scss
new file mode 100644
index 0000000..a235b17
--- /dev/null
+++ b/_sass/vendor/susy/susy/language/susy/_validation.scss
@@ -0,0 +1,16 @@
+// Validation
+// ==========
+
+
+// Validate Column Math
+// --------------------
+@function valid-column-math(
+ $math,
+ $column-width
+) {
+ @if $math == static and not($column-width) {
+ @error 'Static math requires a valid column-width setting.';
+ }
+
+ @return $column-width;
+}
diff --git a/_sass/vendor/susy/susy/language/susyone/_background.scss b/_sass/vendor/susy/susy/language/susyone/_background.scss
new file mode 100644
index 0000000..38c6726
--- /dev/null
+++ b/_sass/vendor/susy/susy/language/susyone/_background.scss
@@ -0,0 +1,18 @@
+// ---------------------------------------------------------------------------
+// Imports
+
+@import "compass/layout/grid-background";
+@import "compass/css3/background-origin";
+@import "compass/css3/background-clip";
+
+// ---------------------------------------------------------------------------
+// Susy Grid Background
+//
+// A wrapper for the compass "column-grid-background" mixin
+// Uses all your settings to create a grid background for a container element.
+// Note: Sub-pixel rounding can lead to several pixels of variation between browsers.
+@mixin susy-grid-background(){
+ @include column-grid-background($total-columns, column(), gutter(), 0);
+ @include background-origin(content-box);
+ @include background-clip(content-box);
+}
diff --git a/_sass/vendor/susy/susy/language/susyone/_functions.scss b/_sass/vendor/susy/susy/language/susyone/_functions.scss
new file mode 100644
index 0000000..6818458
--- /dev/null
+++ b/_sass/vendor/susy/susy/language/susyone/_functions.scss
@@ -0,0 +1,377 @@
+// ---------------------------------------------------------------------------
+// Imports
+
+// We need access to some basic font settings for handling media-queries.
+@import "compass/typography/vertical_rhythm";
+
+// For now, we also need this...
+$browser-default-font-size-px : 16px;
+$browser-default-font-size-percent : 100%;
+$browser-default-font-size-pt : 12pt;
+
+$rem-with-px-fallback : true !default;
+
+// ---------------------------------------------------------------------------
+// Sass list Functions
+
+// Return a list with specific items removed
+//
+// filter($list, $target)
+// - $list : The list to filter.
+// - $target : An item to be removed from the list.
+@function filter($list, $target) {
+ $clean: compact();
+ @if index($list, $target) {
+ @each $item in $list {
+ $clean: if($item == $target, $clean, append($clean, $item));
+ }
+ } @else { $clean: $list; }
+ @return $clean;
+}
+
+// ---------------------------------------------------------------------------
+// Don't use static output when it will break things
+
+// Switch element-level output to fluid, when container-width is wrong for static
+//
+// fix-static-misalignment([$style, $width])
+// - $style: $container-style.
+// - $width: $container-width.
+@function fix-static-misalignment(
+ $style: $container-style,
+ $width: $container-width
+) {
+ @if $container-width and $container-width != container-outer-width($width: false) {
+ $style: fluid;
+ }
+ @return $style;
+}
+
+// ---------------------------------------------------------------------------
+// Grid Functions
+
+// Returns the full width of a grid based on your grid settings.
+//
+// $columns : The number of columns to get width for.
+@function columns-width(
+ $columns : $total-columns
+) {
+ @if round($columns) != $columns {
+ @warn "Susy works best with integer column-spans." +
+ "For partial-columns, you may need to finesse the math by hand using functions directly.";
+ }
+ @return ($columns * $column-width) + (if($columns >= 1, ceil($columns - 1), 0) * $gutter-width);
+}
+
+// Return the grid width after adding or subtracting grid padding
+//
+// $width : the width of the grid without padding;
+// $operation : ( add | subtract ) if padding should be added or subtracted;
+@function handle-grid-padding(
+ $width,
+ $operation : subtract
+) {
+ $pad: $grid-padding*2;
+
+ @if comparable($width, $grid-padding) {
+ $width: if($operation == subtract, $width - $pad, $width + $pad);
+ } @else {
+ @warn "$grid-padding must be set in units comparable to the container width.";
+ }
+
+ @return $width;
+}
+
+// Return the full outer width of a Container element.
+//
+// $columns : The number of columns in the Grid Layout.
+@function container-outer-width(
+ $columns : $total-columns,
+ $width : $container-width
+) {
+ $outerwidth: if($width, $width, columns-width($columns));
+
+ @if $width {
+ @if not($border-box-sizing) { $outerwidth: handle-grid-padding($outerwidth, subtract); }
+ } @else {
+ @if $border-box-sizing { $outerwidth: handle-grid-padding($outerwidth, add); }
+ }
+
+ @return $outerwidth;
+}
+
+// Return the percentage width of a single column in a given 'context'.
+//
+// $context : The grid context in columns, if nested.
+// $style : The container style to use.
+@function column(
+ $context : $total-columns,
+ $style : fix-static-misalignment()
+) {
+ @return if($style == static, $column-width, relative-width($column-width, $context));
+}
+
+// Return the percentage width of multiple 'columns' in a given 'context'.
+//
+// $columns : The number of columns to get relative width for.
+// $context : The grid context in columns, if nested.
+// $style : The container style to use.
+@function columns(
+ $columns,
+ $context : $total-columns,
+ $style : fix-static-misalignment()
+) {
+ @return if($style == static, columns-width($columns), relative-width(columns-width($columns), $context));
+}
+
+// Return the percentage width of a single gutter in a given 'context'.
+//
+// $context : The grid context in columns, if nested.
+// $style : The container style to use.
+@function gutter(
+ $context : $total-columns,
+ $style : fix-static-misalignment()
+) {
+ @return if($style == static, $gutter-width, relative-width($gutter-width, $context));
+}
+
+// Return the percentage width of a given value in a given 'context'.
+//
+// $width : Any given width value.
+// $context : The grid context in columns, if nested.
+@function relative-width(
+ $width,
+ $context : $total-columns
+) {
+ @return percentage($width / columns-width($context));
+}
+
+// Return the total space occupied by multiple columns and associated gutters.
+// Useful for adding padding or margins (prefix, suffix, push, pull, etc.)
+//
+// $columns : The number of columns to get relative space for.
+// $context : The grid context in columns, if nested.
+// $style : The container style to use.
+@function space(
+ $columns,
+ $context : $total-columns,
+ $style : fix-static-misalignment()
+) {
+ @return columns($columns, $context, $style) + if($columns >= 1, gutter($context, $style), 0);
+}
+
+// Accept a list including column-count and (optional) position.
+// Return either the column count or the position alone.
+//
+// $columns : the list to split and interprate.
+// $request : The value to return, either 'columns' or 'position'.
+@function split-columns-value(
+ $columns,
+ $request : columns
+) {
+ $pos : false;
+ $cols : false;
+
+ @each $var in $columns {
+ @if (type-of($var) == 'string') {
+ $pos: $var;
+ } @else {
+ @if (type-of($var) == 'number') and (unitless($var)) {
+ $cols: $var;
+ } @else {
+ @warn '"#{$var}" is not a valid part of "$columns: #{$columns}" in the columns() mixin.';
+ }
+ }
+ }
+
+ @if $request == 'columns' {
+ @return $cols;
+ } @else {
+ @if $request == 'position' {
+ @return $pos;
+ } @else {
+ @warn '"#{$request}" is not a valid value for $request';
+ }
+ }
+}
+
+// Accept nth-selector variables, and format them as a valid CSS3 selector.
+//
+// $n : [first | only | last | ]
+// $selector : [child | last-child | of-type | last-of-type ]
+@function format-nth(
+ $n : last,
+ $selector : child
+) {
+ @if ($n == 'last') or ($n =='first') or ($n =='only') {
+ $selector: '#{$n}-#{$selector}';
+ } @else {
+ $selector: 'nth-#{$selector}(#{$n})';
+ }
+ @return $selector;
+}
+
+// ---------------------------------------------------------------------------
+// Media Functions
+
+// Return an em value adjusted to match the browser default font size.
+// Note: This only works if actual sizes are set relative to browser defaults.
+//
+// $ems : The initial value to be converted.
+// $font-size : The current font-size in.
+@function base-ems(
+ $ems,
+ $font-size: $base-font-size
+){
+ $font-size : if(unit($ems) == 'rem', $base-font-size, $font-size);
+ $unit : unit($font-size);
+ $mult : $ems / ($ems * 0 + 1);
+
+ @if $unit == 'px' {
+ @return $font-size / $browser-default-font-size-px * $mult * 1em;
+ }
+ @else if $unit == '%' {
+ @return $font-size / $browser-default-font-size-percent * $mult * 1em;
+ }
+ @else if $unit == 'em' {
+ @return $font-size / 1em * $mult * 1em;
+ }
+ @else if $unit == 'pt' {
+ @return $font-size / $browser-default-font-size-pt * $mult * 1em;
+ }
+ @else {
+ @warn 'Variable $base-font-size does not have a valid font unit. Valid units for fonts in CSS are px, pt, em, and %.';
+ }
+}
+
+// This name will be deprecated...
+@function absolute-ems(
+ $ems,
+ $font-size: $base-font-size
+){
+ @return base-ems( $ems, $font-size);
+ }
+
+// Return a length, after any em-values have been sent through absolute-ems().
+//
+// $length : The length value to be checked and adjusted if necessary.
+// $font-size : The current font-size in px.
+@function fix-ems(
+ $length,
+ $font-size: $base-font-size
+){
+ @if $length {
+ @if (unit($length) == 'em') or (unit($length) == 'rem') {
+ $length: absolute-ems($length,$font-size);
+ }
+ }
+ @return $length;
+}
+
+// Sort a list of arguments into "$min $layout $max $ie" order, and return the list.
+//
+// $media-layout : a list of values [$min $layout $max $ie] including...
+// : - one unitless number (columns in a layout)
+// : - two optional lengths (min and max-width media-query breakpoints).
+// : - one optional boolean or string to trigger fallback support for IE.
+// $font-size : [optional] The base font-size of your layout, if you are using ems.
+// : - defaults to $base-font-size
+@function medialayout(
+ $media-layout,
+ $font-size: $base-font-size
+) {
+ $media : false;
+ $min : false;
+ $layout : false;
+ $max : false;
+ $ie : false;
+ $has-layout : false;
+
+ @each $val in $media-layout {
+ @if (type-of($val) == "number") {
+ @if unitless($val) {
+ $layout : $val;
+ $has-layout : true;
+ } @else {
+ @if ($has-layout) and not($media) {
+ $max: $val;
+ } @else {
+ @if $media {
+ $media: join($media,$val);
+ } @else {
+ $media: $val;
+ }
+ }
+ }
+ } @else {
+ $ie: $val;
+ }
+ }
+ @if (length($media) > 0) {
+ @if (length($media) == 1) {
+ $min: nth($media,1);
+ } @else {
+ $min: nth($media,1);
+ $max: nth($media,2);
+ @if comparable($min, $max) {
+ @if ($min > $max) {
+ $max: nth($media,1);
+ $min: nth($media,2);
+ }
+ } @else {
+ @warn "Can't compare incompatible units." +
+ "Using #{$min} for min-width, and #{$max} for max-width";
+ }
+ @if (length($media) > 2) {
+ @warn "You can only send two lengths: a min-width and an (optional) max-width." +
+ "You sent #{length($media)}: #{$media}";
+ }
+ }
+ }
+
+ // media-queries must be set in ems relative to the browser default
+ // rather than the font-size set in CSS.
+ $min: fix-ems($min,$font-size);
+ $max: fix-ems($max,$font-size);
+
+ @return $min $layout $max $ie;
+}
+
+// Return the nearest layout (column-count) above a given breakpoint.
+//
+// $min : The min-width media-query breakpoint above which to establish a new layout.
+@function get-layout(
+ $min
+) {
+ $min : fix-ems($min);
+ $return : false;
+
+ @if comparable($min, $column-width) {
+ $return : ceil(($min + $gutter-width) / ($column-width + $gutter-width));
+ } @else {
+ @warn "Can't determine a layout, becuse #{$min} and #{$column-width} are not comparable.";
+ }
+
+ @return $return;
+}
+
+// Check to see if a given $media-layout list is simply the default.
+//
+// $media-layout : a list of values including -
+// : One unitless number (columns in a layout)
+// : Two optional lengths (min and max-width media-query breakpoints).
+// : One optional boolean or string to trigger fallback support for IE.
+@function is-default-layout(
+ $media-layout
+) {
+ $media-layout : medialayout($media-layout);
+ $min : nth($media-layout,1);
+ $layout-cols : nth($media-layout,2);
+ $max : nth($media-layout,3);
+
+ @if $min or $max {
+ @return false;
+ } @else {
+ @return if($layout-cols == $total-columns,true,false);
+ }
+}
diff --git a/_sass/vendor/susy/susy/language/susyone/_grid.scss b/_sass/vendor/susy/susy/language/susyone/_grid.scss
new file mode 100644
index 0000000..491c622
--- /dev/null
+++ b/_sass/vendor/susy/susy/language/susyone/_grid.scss
@@ -0,0 +1,312 @@
+// ---------------------------------------------------------------------------
+// Imports
+
+@import "compass/utilities/general/clearfix";
+@import "compass/css3/box-sizing";
+
+// ---------------------------------------------------------------------------
+// Border-Box Sizing
+
+// Apply the border-box sizing model to all elements
+// and adjust the grid math appropriately.
+@mixin border-box-sizing {
+ $border-box-sizing: true !global;
+ * { @include box-sizing(border-box); }
+}
+
+// ---------------------------------------------------------------------------
+// Container
+
+// Set the width of a container
+//
+// $columns : The number of columns in the Grid Layout.
+@mixin set-container-width(
+ $columns : $total-columns,
+ $style : $container-style,
+ $px-vals : $pixel-values-only
+){
+ $width: container-outer-width($columns);
+
+ @if $style == 'static' {
+ @if $px-vals == true {
+ width: round(convert-length($width, px));
+ } @else {
+ @include rem(width, $width);
+ }
+ } @else {
+ @if $style == 'fluid' {
+ @if unit($width) == '%' {
+ @if $px-vals == true {
+ width: round(convert-length($width, px));
+ } @else {
+ @include rem(width, $width);
+ }
+ }
+ } @else {
+ @if $px-vals == true {
+ max-width: round(convert-length($width, px));
+ } @else {
+ @include rem(max-width, $width);
+ }
+
+ @include for-legacy-browser(ie,"6") {
+ @if unit($width) == 'rem' {
+ _width: round(convert-length($width, px));
+ } @else {
+ _width: $width;
+ }
+ }
+ }
+ }
+}
+
+// Set the outer grid-containing element(s).
+//
+// $columns : The number of columns in the container.
+@mixin apply-container(
+ $columns : $total-columns,
+ $px-vals : $pixel-values-only
+){
+ @include pie-clearfix;
+ @include set-container-width($columns);
+ @if $px-vals == true {
+ padding-left: round(convert-length($grid-padding, px));
+ padding-right: round(convert-length($grid-padding, px));
+ } @else {
+ @include rem(padding-left, $grid-padding);
+ @include rem(padding-right, $grid-padding);
+ }
+ margin: { left: auto; right: auto; }
+}
+
+// Set one or more layouts on a grid-containing element at any number of media-query breakpoints.
+//
+// $media-layout-1 : [default:$total-columns] A list of values including -
+// : One unitless number (representing columns in a layout)
+// : Two optional lengths (representing min and max-width media-query breakpoints).
+// $media-layout-2 ...-10 : [optional] Same as $media-layout-1
+@mixin container(
+ $media-layouts...
+){
+ $media-layouts: if(length($media-layouts) > 0, $media-layouts, $total-columns);
+
+ @each $ml in $media-layouts {
+ @if is-default-layout($ml) {
+ @include apply-container;
+ } @else {
+ @include at-breakpoint($ml) {
+ @include apply-container;
+ }
+ }
+ }
+}
+
+// ---------------------------------------------------------------------------
+// Columns
+
+// Create a grid element spanning any number of 'columns' in a grid 'context'.
+// $columns : The number of columns to span.
+// $context : [optional] The context (columns spanned by parent).
+// : Context is required on any nested elements.
+// : Context MUST NOT be declared on a root element.
+// $padding : [optional] Padding applied to the inside of individual grid columns.
+// : Padding is only output if one or two values are specified (e.g. 1em or 10px 20px)
+// : Padding values are applied only on the horizontal axis in from-to order
+// $from : The start direction of your layout (e.g. 'left' for ltr languages)
+// $style : The container style to use.
+@mixin span-columns(
+ $columns,
+ $context : $total-columns,
+ $padding : false,
+ $from : $from-direction,
+ $style : fix-static-misalignment()
+) {
+ $from : unquote($from);
+ $to : opposite-position($from);
+ $pos : split-columns-value($columns,position);
+ $cols : split-columns-value($columns,columns);
+ $pad-from : if($style == static, 0 * $gutter-width, relative-width(0 * $gutter-width, $context));
+ $pad-to : if($style == static, 0 * $gutter-width, relative-width(0 * $gutter-width, $context));
+
+ @if $padding != false {
+ $pad-from : nth($padding, 1);
+
+ @if length($padding) > 1 {
+ $pad-to: nth($padding, 2);
+ } @else {
+ $pad-to: $pad-from;
+ }
+
+ $pad-from : if($style == static, $pad-from, relative-width($pad-from, $context));
+ $pad-to : if($style == static, $pad-to, relative-width($pad-to, $context));
+
+ padding-#{$from}: $pad-from;
+ padding-#{$to}: $pad-to;
+ }
+
+ width: columns($cols, $context, $style) - if($border-box-sizing, 0, $pad-to + $pad-from);
+
+ @if ($pos == 'omega') {
+ @include omega($from);
+ } @else {
+ float: $from;
+ margin-#{$to}: gutter($context, $style);
+ @include for-legacy-browser(ie, "6") {
+ display: inline;
+ }
+ }
+}
+
+// Apply to elements spanning the last column, to account for the page edge.
+// Only needed as an override. Normally 'omega' can just be called by `columns`.
+//
+// $from : The start-direction for your document.
+@mixin omega(
+ $from : $from-direction
+) {
+ $from : unquote($from);
+ $to : opposite-position($from);
+ $hack : opposite-position($omega-float);
+
+ float: $omega-float;
+ margin-#{$to}: 0;
+
+ @include for-legacy-browser(ie, "6", "7") {
+ *margin-#{$hack}: - $gutter-width;
+ @include for-legacy-browser(ie, "6") {
+ display: inline;
+ }
+ }
+}
+
+// Shortcut to apply omega to a specific subset of elements.
+//
+// $n : [first | only | last | ]
+// $selector : [child | last-child | of-type | last-of-type ]
+// $from : The start-direction for your document.
+@mixin nth-omega(
+ $n : last,
+ $selector : child,
+ $from : $from-direction
+) {
+ $from : unquote($from);
+
+ &:#{format-nth($n,$selector)} {
+ @if $n == "first" {
+ @include omega($from);
+ } @else {
+ @include with-browser-ranges(css-sel3) {
+ @include omega($from);
+ }
+ }
+ }
+}
+
+
+
+// ---------------------------------------------------------------------------
+// Resets
+
+// Reset a '+columns' grid element to default block behavior
+//
+// $from : The start direction of your layout (e.g. 'left' for ltr languages)
+@mixin reset-columns(
+ $from: $from-direction
+) {
+ $from : unquote($from);
+ $to : opposite-position($from);
+ $hack : opposite-position($omega-float);
+
+ float: none;
+ width: auto;
+ margin-#{$to}: auto;
+
+ @include for-legacy-browser(ie, "6", "7") {
+ *margin-#{$hack}: auto;
+ @include for-legacy-browser(ie, "6") {
+ display: block;
+ }
+ }
+}
+
+// Apply to elements previously set as omega.
+// This will return floats and margins back to non-omega settigns.
+//
+// $context : [optional] The context (columns spanned by parent).
+// $from : The start-direction for your document.
+// $style : The container style to use.
+@mixin remove-omega(
+ $context : $total-columns,
+ $from : $from-direction,
+ $style : fix-static-misalignment()
+) {
+ $from : unquote($from);
+ $to : opposite-position($from);
+ $hack : opposite-position($omega-float);
+
+ float: $from;
+ margin-#{$to}: gutter($context, $style);
+
+ @include for-legacy-browser(ie, "6", "7") {
+ *margin-#{$hack}: auto;
+ }
+}
+
+// Shortcut to apply remove-omega to a specific subset of elements.
+//
+// $n : [first | only | last | ]
+// $selector : [child | last-child | of-type | last-of-type ]
+// $context : [optional] The context (columns spanned by parent).
+// $from : The start-direction for your document.
+// $style : The container style to use.
+@mixin remove-nth-omega(
+ $n : last,
+ $selector : child,
+ $context : $total-columns,
+ $from : $from-direction,
+ $style : fix-static-misalignment()
+) {
+ $from : unquote($from);
+
+ &:#{format-nth($n,$selector)} {
+ @if $n == "first" {
+ @include remove-omega($context, $from, $style);
+ } @else {
+ @include with-browser-ranges(css-sel3) {
+ @include remove-omega($context, $from, $style);
+ }
+ }
+ }
+}
+
+
+// ---------------------------------------------------------------------------
+// Change Settings
+
+@mixin with-grid-settings(
+ $columns: $total-columns,
+ $width: $column-width,
+ $gutter: $gutter-width,
+ $padding: $grid-padding
+) {
+ // keep the defaults around
+ $default-columns: $total-columns;
+ $default-width: $column-width;
+ $default-gutter: $gutter-width;
+ $default-padding: $grid-padding;
+
+ // use the new settings
+ $total-columns: $columns !global;
+ $column-width: $width !global;
+ $gutter-width: $gutter !global;
+ $grid-padding: $padding !global;
+
+ // apply to contents
+ @content;
+
+ // re-instate the defaults
+ $total-columns: $default-columns !global;
+ $column-width: $default-width !global;
+ $gutter-width: $default-gutter !global;
+ $grid-padding: $default-padding !global;
+}
diff --git a/_sass/vendor/susy/susy/language/susyone/_isolation.scss b/_sass/vendor/susy/susy/language/susyone/_isolation.scss
new file mode 100644
index 0000000..2b70038
--- /dev/null
+++ b/_sass/vendor/susy/susy/language/susyone/_isolation.scss
@@ -0,0 +1,51 @@
+// ---------------------------------------------------------------------------
+// Isolation
+
+// Isolate the position of a grid element (use in addition to span-columns)
+//
+// $location : The grid column to isolate in, relative to the container;
+// $context : [optional] The context (columns spanned by parent).
+// $from : The start direction of your layout (e.g. 'left' for ltr languages)
+@mixin isolate(
+ $location,
+ $context: $total-columns,
+ $from: $from-direction,
+ $style: fix-static-misalignment()
+) {
+ $to: opposite-position($from);
+ margin-#{$to}: -100%;
+ margin-#{$from}: space($location - 1, $context, $style);
+}
+
+// Isolate a group of elements in a grid, using nth-child selectors
+//
+// $columns : The column-width of each item on the grid;
+// $context : [optional] The context (columns spanned by parent).
+// $selector : [child | of-type | last-of-type ] (default is 'child')
+// $from : The start direction of your layout (e.g. 'left' for ltr languages)
+@mixin isolate-grid(
+ $columns,
+ $context: $total-columns,
+ $selector: 'child',
+ $from: $from-direction,
+ $style: fix-static-misalignment()
+) {
+ $to: opposite-position($from);
+ $location: 1;
+ $line: floor($context / $columns);
+
+ @include span-columns($columns, $context, $from: $from, $style: $style);
+ margin-#{$to}: -100%;
+
+ @for $item from 1 through $line {
+ $nth: '#{$line}n + #{$item}';
+ &:#{format-nth($nth,$selector)} {
+ margin-#{$from}: space($location - 1, $context, $style);
+ @if $location == 1 { clear: $from; }
+ @else { clear: none; }
+
+ $location: $location + $columns;
+ @if $location > $context { $location: 1; }
+ }
+ }
+}
diff --git a/_sass/vendor/susy/susy/language/susyone/_margin.scss b/_sass/vendor/susy/susy/language/susyone/_margin.scss
new file mode 100644
index 0000000..accbbe6
--- /dev/null
+++ b/_sass/vendor/susy/susy/language/susyone/_margin.scss
@@ -0,0 +1,93 @@
+// ---------------------------------------------------------------------------
+// Margin Mixins
+
+// Apply 'columns' margin before an element to push it along the grid.
+//
+// $columns : The number of columns to span.
+// $context : [optional] The context (columns spanned by parent).
+// : Context is required on any nested elements.
+// : Context MUST NOT be declared on a root element.
+// $from : The start direction of your layout (e.g. 'left' for ltr languages)
+// $style : The container style to use.
+@mixin pre(
+ $columns,
+ $context : $total-columns,
+ $from : $from-direction,
+ $style : fix-static-misalignment()
+) {
+ $from : unquote($from);
+ margin-#{$from}: space($columns, $context, $style);
+}
+
+// 'push' is a synonymn for 'pre'
+@mixin push(
+ $columns,
+ $context : $total-columns,
+ $from : $from-direction,
+ $style : fix-static-misalignment()
+) {
+ $from : unquote($from);
+ @include pre($columns, $context, $from, $style);
+}
+
+// Apply negative 'columns' margin before an element to pull it along the grid.
+//
+// $columns : The number of columns to span.
+// $context : [optional] The context (columns spanned by parent).
+// : Context is required on any nested elements.
+// : Context MUST NOT be declared on a root element.
+// $from : The start direction of your layout (e.g. 'left' for ltr languages)
+// $style : The container style to use.
+@mixin pull(
+ $columns,
+ $context : $total-columns,
+ $from : $from-direction,
+ $style : fix-static-misalignment()
+) {
+ $from : unquote($from);
+ margin-#{$from}: 0 - space($columns, $context, $style);
+}
+
+// Apply 'columns' margin after an element to contain it in a grid.
+//
+// $columns : The number of columns to span.
+// $context : [optional] The context (columns spanned by parent).
+// : Context is required on any nested elements.
+// : Context MUST NOT be declared on a root element.
+// $from : The start direction of your layout (e.g. 'left' for ltr languages)
+// $style : The container style to use.
+@mixin post(
+ $columns,
+ $context : $total-columns,
+ $from : $from-direction,
+ $style : fix-static-misalignment()
+) {
+ $from : unquote($from);
+ $to : opposite-position($from);
+ margin-#{$to}: space($columns, $context, $style);
+}
+
+// Apply 'columns' before and/or after an element to contain it on a grid.
+//
+// $pre : The number of columns to add as margin before.
+// $post : The number of columns to add as margin after.
+// $context : [optional] The context (columns spanned by parent).
+// : Context is required on any nested elements.
+// : Context MUST NOT be declared on a root element.
+// $from : The start direction of your layout (e.g. 'left' for ltr languages)
+// $style : The container style to use.
+@mixin squish(
+ $pre : false,
+ $post : false,
+ $context : $total-columns,
+ $from : $from-direction,
+ $style : fix-static-misalignment()
+) {
+ $from : unquote($from);
+ @if $pre {
+ @include pre($pre, $context, $from, $style)
+ }
+ @if $post {
+ @include post($post, $context, $from, $style)
+ }
+}
diff --git a/_sass/vendor/susy/susy/language/susyone/_media.scss b/_sass/vendor/susy/susy/language/susyone/_media.scss
new file mode 100644
index 0000000..ca860fc
--- /dev/null
+++ b/_sass/vendor/susy/susy/language/susyone/_media.scss
@@ -0,0 +1,105 @@
+// ---------------------------------------------------------------------------
+// Media Mixins
+
+// Create a new layout context for (@content) descendants.
+//
+// $layout-cols : a (unitless) number of columns to use for this layout.
+@mixin layout(
+ $layout-cols
+) {
+ // store default $total-columns setting for later, then change it.
+ $default-layout : $total-columns;
+ $total-columns : $layout-cols !global;
+
+ // apply children in this new layout context.
+ @content;
+
+ // return to default $total-columns setting.
+ $total-columns : $default-layout !global;
+}
+
+// Nest a block of code inside a new media-query and layout context.
+//
+// $media-layout : a list of values [$min $layout $max $ie] including...
+// : - one unitless number (columns in a layout)
+// : - two optional lengths (min and max-width media-query breakpoints).
+// : - one optional boolean or string to trigger fallback support for IE.
+// $font-size : [optional] The base font-size of your layout, if you are using ems.
+// : - defaults to $base-font-size
+@mixin at-breakpoint(
+ $media-layout,
+ $font-size: $base-font-size
+) {
+ $media-layout : medialayout($media-layout,$font-size);
+ $min : nth($media-layout,1);
+ $layout : nth($media-layout,2);
+ $max : nth($media-layout,3);
+ $ie : nth($media-layout,4);
+
+ @if not($breakpoint-media-output) and not($breakpoint-ie-output) and not($breakpoint-raw-output) {
+ @warn "Either $breakpoint-media-output, $breakpoint-ie-output, or $breakpoint-raw-output must be true for at-breakpoint to work.";
+ }
+
+ // We need to have either a min-width breakpoint or a layout in order to proceed.
+ @if $min or $layout or $max {
+
+ // If we don't have a layout, we create one based on the min-width.
+ @if not($layout) {
+ $layout: get-layout($min);
+ }
+
+ // If we still don't have a layout, we have a problem.
+ @if $layout {
+ // Set our new layout context.
+ @include layout($layout) {
+ @if $breakpoint-media-output {
+ @include with-browser-ranges(css-mediaqueries) {
+ @if $min and $max {
+ // Both $min and $max
+ @media (min-width: $min) and (max-width: $max) {
+ @content;
+ }
+ } @else {
+ @if not($min) and not($max) {
+ // Neither $min nor $max:
+ // We can create a breakpoint based on the number of columns in the layout.
+ $min: fix-ems(container-outer-width($width: false));
+ }
+ @if $min {
+ // Min only:
+ @media (min-width: $min) {
+ @content;
+ }
+ } @else {
+ // Max only:
+ @media (max-width: $max) {
+ @content;
+ }
+ }
+ }
+ }
+ }
+ // Set an IE fallback
+ @if $ie and $breakpoint-ie-output {
+ @if (type-of($ie) == 'bool') {
+ $ie: 'lt-ie9';
+ }
+ .#{$ie} & {
+ @content;
+ }
+ }
+
+ @if $breakpoint-raw-output {
+ @content;
+ }
+ }
+ } @else {
+ @warn "We were unable to determine a layout for your breakpoint.";
+ }
+
+ } @else {
+ @warn "You need to provide either a valid layout (number of columns)"
+ + "or a valid media-query min-width breakpoint (length).";
+ }
+
+}
diff --git a/_sass/vendor/susy/susy/language/susyone/_padding.scss b/_sass/vendor/susy/susy/language/susyone/_padding.scss
new file mode 100644
index 0000000..8e6394a
--- /dev/null
+++ b/_sass/vendor/susy/susy/language/susyone/_padding.scss
@@ -0,0 +1,92 @@
+// ---------------------------------------------------------------------------
+// Padding Mixins
+
+// add empty colums as padding before an element.
+// $columns : The number of columns to prefix.
+// $context : [optional] The context (columns spanned by parent).
+// : Context is required on any nested elements.
+// : Context MUST NOT be declared on a root element.
+// $from : The start direction of your layout (e.g. 'left' for ltr languages)
+// $style : The container style to use.
+@mixin prefix(
+ $columns,
+ $context : $total-columns,
+ $from : $from-direction,
+ $style : fix-static-misalignment()
+) {
+ $from : unquote($from);
+ padding-#{$from}: space($columns, $context, $style);
+}
+
+// add empty colums as padding after an element.
+// $columns : The number of columns to suffix.
+// $context : [optional] The context (columns spanned by parent).
+// : Context is required on any nested elements.
+// : Context MUST NOT be declared on a root element.
+// $from : The start direction of your layout (e.g. 'left' for ltr languages)
+// $style : The container style to use.
+@mixin suffix(
+ $columns,
+ $context : $total-columns,
+ $from : $from-direction,
+ $style : fix-static-misalignment()
+) {
+ $from : unquote($from);
+ $to : opposite-position($from);
+ padding-#{$to}: space($columns, $context, $style);
+}
+
+// add empty colums as padding before and after an element.
+// $columns : The number of columns to pad.
+// $context : [optional] The context (columns spanned by parent).
+// : Context is required on any nested elements.
+// : Context MUST NOT be declared on a root element.
+// $from : The start direction of your layout (e.g. 'left' for ltr languages)
+// $style : The container style to use.
+@mixin pad(
+ $prefix : false,
+ $suffix : false,
+ $context : $total-columns,
+ $from : $from-direction,
+ $style : fix-static-misalignment()
+) {
+ $from : unquote($from);
+ @if $prefix {
+ @include prefix($prefix, $context, $from, $style);
+ }
+ @if $suffix {
+ @include suffix($suffix, $context, $from, $style);
+ }
+}
+
+// Bleed into colums with margin/padding on any side of an element.
+// $width : The side of the bleed.
+// : Any unit-length will be used directly.
+// : Any unitless number will be used as a column-count.
+// : Use "2 of 6" format to represent 2 cals in a 6-col nested context.
+// $sides : One or more sides to bleed [ top | right | bottom | left | all ].
+// $style : The container style to use.
+@mixin bleed(
+ $width: $grid-padding,
+ $sides: left right,
+ $style: fix-static-misalignment()
+) {
+ @if $border-box-sizing { @include box-sizing(content-box) }
+
+ @if type-of($width) == 'list' {
+ $width: filter($width, of);
+ $width: space(nth($width,1), nth($width,2), $style);
+ } @else if unitless($width) {
+ $width: space($width, $style: $style);
+ }
+
+ @if $sides == 'all' {
+ margin: - $width;
+ padding: $width;
+ } @else {
+ @each $side in $sides {
+ margin-#{$side}: - $width;
+ padding-#{$side}: $width;
+ }
+ }
+}
diff --git a/_sass/vendor/susy/susy/language/susyone/_settings.scss b/_sass/vendor/susy/susy/language/susyone/_settings.scss
new file mode 100644
index 0000000..e8ff9c8
--- /dev/null
+++ b/_sass/vendor/susy/susy/language/susyone/_settings.scss
@@ -0,0 +1,60 @@
+// ---------------------------------------------------------------------------
+// Susy Settings
+
+// The total number of columns in the grid
+$total-columns : 12 !default;
+
+// The width of columns and gutters.
+// These must all be set with the comparable units.
+$column-width : 4em !default;
+$gutter-width : 1em !default;
+
+// Padding on the left and right of a Grid Container.
+$grid-padding : $gutter-width !default;
+
+// ---------------------------------------------------------------------------
+// Advanced Settings
+
+// From Direction:
+// Controls for right-to-left or bi-directional sites.
+$from-direction : left !default;
+
+// Omega Float Direction:
+// The direction that +omega elements are floated by deafult.
+$omega-float : opposite-position($from-direction) !default;
+
+// Container Width:
+// Override the total width of your grid, using any length (50em, 75%, etc.)
+$container-width : false !default;
+
+// Container Style:
+// 'magic' - Static (fixed or elastic) when there's enough space,
+// fluid when there isn't. This is the SUSY MAGIC SAUCE(TM).
+// 'static' - Forces the grid container to remain static at all times.
+// 'fluid' - Forces the grid to remain fluid at all times.
+// (this will overrule any static $container-width settings)
+$container-style : magic !default;
+
+// Border-Box Sizing
+// Adjust the grid math appropriately for box-sizing: border-box;
+// Warning: This does not actually apply the new box model!
+// In most cases you can ignore this setting,
+// and simply apply the border-box-sizing mixin.
+$border-box-sizing : false !default;
+
+// Pixel Values only:
+// Make sure only pixel values are set for the container width.
+$pixel-values-only : false !default;
+
+// ---------------------------------------------------------------------------
+// IE Settings
+
+// When you are using a seperate IE stylesheet,
+// you can use these settings to control the output of at-breakpoint.
+// By default, at-breakpoint will output media-queries as well as
+// any defined ie-fallback classes.
+$breakpoint-media-output : true !default;
+$breakpoint-ie-output : true !default;
+
+// Danger Zone! Only set as 'true' in IE-specific style sheets.
+$breakpoint-raw-output : false !default;
diff --git a/_sass/vendor/susy/susy/output/_float.scss b/_sass/vendor/susy/susy/output/_float.scss
new file mode 100644
index 0000000..9c24051
--- /dev/null
+++ b/_sass/vendor/susy/susy/output/_float.scss
@@ -0,0 +1,9 @@
+// Float API
+// =========
+
+@import "shared";
+
+@import "float/container";
+@import "float/span";
+@import "float/end";
+@import "float/isolate";
diff --git a/_sass/vendor/susy/susy/output/_shared.scss b/_sass/vendor/susy/susy/output/_shared.scss
new file mode 100644
index 0000000..dd9df4e
--- /dev/null
+++ b/_sass/vendor/susy/susy/output/_shared.scss
@@ -0,0 +1,15 @@
+// Shared API
+// ==========
+
+@import "support";
+
+@import "shared/inspect";
+@import "shared/output";
+@import "shared/direction";
+@import "shared/background";
+@import "shared/container";
+@import "shared/margins";
+@import "shared/padding";
+
+
+
diff --git a/_sass/vendor/susy/susy/output/_support.scss b/_sass/vendor/susy/susy/output/_support.scss
new file mode 100644
index 0000000..53dbc9c
--- /dev/null
+++ b/_sass/vendor/susy/susy/output/_support.scss
@@ -0,0 +1,9 @@
+// Susy Browser Support
+// ====================
+
+@import "support/support";
+@import "support/prefix";
+@import "support/background";
+@import "support/box-sizing";
+@import "support/rem";
+@import "support/clearfix";
diff --git a/_sass/vendor/susy/susy/output/float/_container.scss b/_sass/vendor/susy/susy/output/float/_container.scss
new file mode 100644
index 0000000..121eb11
--- /dev/null
+++ b/_sass/vendor/susy/susy/output/float/_container.scss
@@ -0,0 +1,16 @@
+// Float Container API
+// ===================
+
+// Float Container
+// ---------------
+// - [$width] :
+// - [$justify] : left | center | right
+// - [$math] : fluid | static
+@mixin float-container(
+ $width,
+ $justify: auto auto,
+ $property: max-width
+) {
+ @include susy-clearfix;
+ @include container-output($width, $justify, $property);
+}
diff --git a/_sass/vendor/susy/susy/output/float/_end.scss b/_sass/vendor/susy/susy/output/float/_end.scss
new file mode 100644
index 0000000..3369997
--- /dev/null
+++ b/_sass/vendor/susy/susy/output/float/_end.scss
@@ -0,0 +1,40 @@
+// Float Ends API
+// ==============
+
+// Susy End Defaults
+// -----------------
+// - PRIVATE
+@include susy-defaults((
+ last-flow: to,
+));
+
+// Float Last
+// ----------
+// - [$flow] : ltr | rtl
+@mixin float-last(
+ $flow: map-get($susy-defaults, flow),
+ $last-flow: map-get($susy-defaults, last-flow),
+ $margin: 0
+) {
+ $to: to($flow);
+
+ $output: (
+ float: if($last-flow == to, $to, null),
+ margin-#{$to}: $margin,
+ );
+
+ @include output($output);
+}
+
+// Float First
+// -----------
+// - [$flow] : ltr | rtl
+@mixin float-first(
+ $flow: map-get($susy-defaults, flow)
+) {
+ $output: (
+ margin-#{from($flow)}: 0,
+ );
+
+ @include output($output);
+}
diff --git a/_sass/vendor/susy/susy/output/float/_isolate.scss b/_sass/vendor/susy/susy/output/float/_isolate.scss
new file mode 100644
index 0000000..4dd3c23
--- /dev/null
+++ b/_sass/vendor/susy/susy/output/float/_isolate.scss
@@ -0,0 +1,22 @@
+// Float Isolation API
+// ===================
+
+// Isolate Output
+// --------------
+// - $push :
+// - [$flow] : ltr | rtl
+@mixin isolate-output(
+ $push,
+ $flow: map-get($susy-defaults, flow)
+) {
+ $to: to($flow);
+ $from: from($flow);
+
+ $output: (
+ float: $from,
+ margin-#{$from}: $push,
+ margin-#{$to}: -100%,
+ );
+
+ @include output($output);
+}
diff --git a/_sass/vendor/susy/susy/output/float/_span.scss b/_sass/vendor/susy/susy/output/float/_span.scss
new file mode 100644
index 0000000..5b732cc
--- /dev/null
+++ b/_sass/vendor/susy/susy/output/float/_span.scss
@@ -0,0 +1,35 @@
+// Float Span API
+// ==============
+
+// Float Span Output
+// -----------------
+// - $width :
+// - [$float] : from | to
+// - [$margin-before] :
+// - [$margin-after] :
+// - [$padding-before] :
+// - [$padding-after] :
+// - [$flow] : ltr | rtl
+@mixin float-span-output(
+ $width,
+ $float : from,
+ $margin-before : null,
+ $margin-after : null,
+ $padding-before : null,
+ $padding-after : null,
+ $flow : map-get($susy-defaults, flow)
+) {
+ $to : to($flow);
+ $from : from($flow);
+
+ $output: (
+ width: $width,
+ float: if($float == to, $to, null) or if($float == from, $from, null),
+ margin-#{$from}: $margin-before,
+ margin-#{$to}: $margin-after,
+ padding-#{$from}: $padding-before,
+ padding-#{$to}: $padding-after,
+ );
+
+ @include output($output);
+}
diff --git a/_sass/vendor/susy/susy/output/shared/_background.scss b/_sass/vendor/susy/susy/output/shared/_background.scss
new file mode 100644
index 0000000..c230f61
--- /dev/null
+++ b/_sass/vendor/susy/susy/output/shared/_background.scss
@@ -0,0 +1,26 @@
+// Grid Background API
+// ===================
+// - Sub-pixel rounding can lead to several pixels variation between browsers.
+
+// Grid Background Output
+// ----------------------
+// - $image: background-image
+// - $size: background-size
+// - $clip: background-clip
+// - [$flow]: ltr | rtl
+@mixin background-grid-output (
+ $image,
+ $size: null,
+ $clip: null,
+ $flow: map-get($susy-defaults, flow)
+) {
+ $output: (
+ background-image: $image,
+ background-size: $size,
+ background-origin: $clip,
+ background-clip: $clip,
+ background-position: from($flow) top,
+ );
+
+ @include output($output);
+}
diff --git a/_sass/vendor/susy/susy/output/shared/_container.scss b/_sass/vendor/susy/susy/output/shared/_container.scss
new file mode 100644
index 0000000..7c7d4f1
--- /dev/null
+++ b/_sass/vendor/susy/susy/output/shared/_container.scss
@@ -0,0 +1,21 @@
+// Shared Container API
+// ====================
+
+// Container Output
+// ----------------
+// - [$width] :
+// - [$justify] : left | center | right
+// - [$math] : fluid | static
+@mixin container-output(
+ $width,
+ $justify: auto auto,
+ $property: max-width
+) {
+ $output: (
+ #{$property}: $width or 100%,
+ margin-left: nth($justify, 1),
+ margin-right: nth($justify, 2),
+ );
+
+ @include output($output);
+}
diff --git a/_sass/vendor/susy/susy/output/shared/_direction.scss b/_sass/vendor/susy/susy/output/shared/_direction.scss
new file mode 100644
index 0000000..abb9c36
--- /dev/null
+++ b/_sass/vendor/susy/susy/output/shared/_direction.scss
@@ -0,0 +1,42 @@
+// Direction Helpers
+// =================
+
+// Susy Flow Defaults
+// ------------------
+// - PRIVATE
+@include susy-defaults((
+ flow: ltr,
+));
+
+// Get Direction
+// -------------
+// Return the 'from' or 'to' direction of a ltr or rtl flow.
+// - [$flow] : ltr | rtl
+// - [$key] : from | to
+@function get-direction(
+ $flow: map-get($susy-defaults, flow),
+ $key: from
+) {
+ $return: if($flow == rtl, (from: right, to: left), (from: left, to: right));
+ @return map-get($return, $key);
+}
+
+// To
+// --
+// Return the 'to' direction of a flow
+// - [$flow] : ltr | rtl
+@function to(
+ $flow: map-get($susy-defaults, flow)
+) {
+ @return get-direction($flow, to);
+}
+
+// From
+// ----
+// Return the 'from' direction of a flow
+// - [$flow] : ltr | rtl
+@function from(
+ $flow: map-get($susy-defaults, flow)
+) {
+ @return get-direction($flow, from);
+}
diff --git a/_sass/vendor/susy/susy/output/shared/_inspect.scss b/_sass/vendor/susy/susy/output/shared/_inspect.scss
new file mode 100644
index 0000000..b0af9b6
--- /dev/null
+++ b/_sass/vendor/susy/susy/output/shared/_inspect.scss
@@ -0,0 +1,25 @@
+// Debugging
+// =========
+
+// Susy Inspect
+// ------------
+// Output arguments passed to a inspect.
+// - $mixin :
+// - $inspec :
+
+@mixin susy-inspect(
+ $mixin,
+ $inspect
+) {
+ $show: false;
+
+ @each $item in $inspect {
+ @if index($item, inspect) {
+ $show: true;
+ }
+ }
+
+ @if $show or susy-get(debug inspect) {
+ -susy-#{$mixin}: inspect($inspect);
+ }
+}
diff --git a/_sass/vendor/susy/susy/output/shared/_margins.scss b/_sass/vendor/susy/susy/output/shared/_margins.scss
new file mode 100644
index 0000000..cd73e8c
--- /dev/null
+++ b/_sass/vendor/susy/susy/output/shared/_margins.scss
@@ -0,0 +1,23 @@
+// Margins API
+// ===========
+
+// Margin Output
+// -------------
+// - $before :
+// - $after :
+// - [$flow] : ltr | rtl
+@mixin margin-output(
+ $before,
+ $after,
+ $flow: map-get($susy-defaults, flow)
+) {
+ $to: to($flow);
+ $from: from($flow);
+
+ $output: (
+ margin-#{$from}: $before,
+ margin-#{$to}: $after,
+ );
+
+ @include output($output);
+}
diff --git a/_sass/vendor/susy/susy/output/shared/_output.scss b/_sass/vendor/susy/susy/output/shared/_output.scss
new file mode 100644
index 0000000..20fc2d6
--- /dev/null
+++ b/_sass/vendor/susy/susy/output/shared/_output.scss
@@ -0,0 +1,14 @@
+// Output
+// ======
+
+// Output
+// ------
+// Output CSS with proper browser support.
+// - $styles :
+@mixin output(
+ $styles
+) {
+ @each $prop, $val in $styles {
+ @include susy-support($prop, $val);
+ }
+}
diff --git a/_sass/vendor/susy/susy/output/shared/_padding.scss b/_sass/vendor/susy/susy/output/shared/_padding.scss
new file mode 100644
index 0000000..5069d0c
--- /dev/null
+++ b/_sass/vendor/susy/susy/output/shared/_padding.scss
@@ -0,0 +1,23 @@
+// Padding API
+// ===========
+
+// Padding Output
+// --------------
+// - $before :
+// - $after :
+// - [$flow] : ltr | rtl
+@mixin padding-output(
+ $before,
+ $after,
+ $flow: map-get($susy-defaults, flow)
+) {
+ $to: to($flow);
+ $from: from($flow);
+
+ $output: (
+ padding-#{$from}: $before,
+ padding-#{$to}: $after,
+ );
+
+ @include output($output);
+}
diff --git a/_sass/vendor/susy/susy/output/support/_background.scss b/_sass/vendor/susy/susy/output/support/_background.scss
new file mode 100644
index 0000000..b141502
--- /dev/null
+++ b/_sass/vendor/susy/susy/output/support/_background.scss
@@ -0,0 +1,58 @@
+// Background Properties
+// =====================
+
+// Susy Background Image
+// ---------------------
+// Check for an existing support mixin, or provide a simple fallback.
+// - $image:
+@mixin susy-background-image(
+ $image
+) {
+ @if susy-support(background-image, (mixin: background-image), $warn: false) {
+ @include background-image($image...);
+ } @else {
+ background-image: $image;
+ }
+}
+
+// Susy Background Size
+// ---------------------
+// Check for an existing support mixin, or provide a simple fallback.
+// - $image:
+@mixin susy-background-size(
+ $size
+) {
+ @if susy-support(background-options, (mixin: background-size)) {
+ @include background-size($size);
+ } @else {
+ background-size: $size;
+ }
+}
+
+// Susy Background Origin
+// ----------------------
+// Check for an existing support mixin, or provide a simple fallback.
+// - $image:
+@mixin susy-background-origin(
+ $origin
+) {
+ @if susy-support(background-options, (mixin: background-origin)) {
+ @include background-origin($origin);
+ } @else {
+ background-origin: $origin;
+ }
+}
+
+// Susy Background Clip
+// --------------------
+// Check for an existing support mixin, or provide a simple fallback.
+// - $image:
+@mixin susy-background-clip(
+ $clip
+) {
+ @if susy-support(background-options, (mixin: background-clip)) {
+ @include background-clip($clip);
+ } @else {
+ background-clip: $clip;
+ }
+}
diff --git a/_sass/vendor/susy/susy/output/support/_box-sizing.scss b/_sass/vendor/susy/susy/output/support/_box-sizing.scss
new file mode 100644
index 0000000..bf50bbc
--- /dev/null
+++ b/_sass/vendor/susy/susy/output/support/_box-sizing.scss
@@ -0,0 +1,19 @@
+// Box Sizing
+// ==========
+
+// Box Sizing
+// ----------
+// Check for an existing support mixin, or provide a simple fallback.
+// - $model:
+@mixin susy-box-sizing(
+ $model: content-box
+) {
+ @if $model {
+ @if susy-support(box-sizing, (mixin: box-sizing), $warn: false) {
+ @include box-sizing($model);
+ } @else {
+ $prefix: (moz, webkit, official);
+ @include susy-prefix(box-sizing, $model, $prefix);
+ }
+ }
+}
diff --git a/_sass/vendor/susy/susy/output/support/_clearfix.scss b/_sass/vendor/susy/susy/output/support/_clearfix.scss
new file mode 100644
index 0000000..48c6e7b
--- /dev/null
+++ b/_sass/vendor/susy/susy/output/support/_clearfix.scss
@@ -0,0 +1,18 @@
+// Susy Fallback Clearfix
+// ======================
+
+
+// Clearfix
+// --------
+// Check for an existing support mixin, or provide a simple fallback.
+@mixin susy-clearfix {
+ @if susy-support(clearfix, (mixin: clearfix)) {
+ @include clearfix;
+ } @else {
+ &:after {
+ content: " ";
+ display: block;
+ clear: both;
+ }
+ }
+}
diff --git a/_sass/vendor/susy/susy/output/support/_prefix.scss b/_sass/vendor/susy/susy/output/support/_prefix.scss
new file mode 100644
index 0000000..f4e26ec
--- /dev/null
+++ b/_sass/vendor/susy/susy/output/support/_prefix.scss
@@ -0,0 +1,19 @@
+// Susy Prefix
+// ===========
+
+// Prefix
+// ------
+// Output simple prefixed properties.
+// - $prop :
+// - $val :
+// - [$prefix] :
+@mixin susy-prefix(
+ $prop,
+ $val,
+ $prefix: official
+) {
+ @each $fix in $prefix {
+ $fix: if($fix == official or not($fix), $prop, '-#{$fix}-#{$prop}');
+ @include susy-rem($fix, $val);
+ }
+}
diff --git a/_sass/vendor/susy/susy/output/support/_rem.scss b/_sass/vendor/susy/susy/output/support/_rem.scss
new file mode 100644
index 0000000..0a807f7
--- /dev/null
+++ b/_sass/vendor/susy/susy/output/support/_rem.scss
@@ -0,0 +1,22 @@
+// rem Support
+// ===========
+
+// rem
+// ---
+// Check for an existing support mixin, or output directly.
+// - $prop :
+// - $val :
+@mixin susy-rem(
+ $prop,
+ $val
+) {
+ $_reqs: (
+ variable: rhythm-unit rem-with-px-fallback,
+ mixin: rem,
+ );
+ @if susy-support(rem, $_reqs, $warn: false) and $rhythm-unit == rem {
+ @include rem($prop, $val);
+ } @else {
+ #{$prop}: $val;
+ }
+}
diff --git a/_sass/vendor/susy/susy/output/support/_support.scss b/_sass/vendor/susy/susy/output/support/_support.scss
new file mode 100644
index 0000000..30b41ad
--- /dev/null
+++ b/_sass/vendor/susy/susy/output/support/_support.scss
@@ -0,0 +1,85 @@
+// Browser Support
+// ===============
+
+// Susy Support Defaults
+// ---------------------
+@include susy-defaults((
+ use-custom: (
+ clearfix: false,
+ background-image: true,
+ background-options: false,
+ breakpoint: true,
+ box-sizing: true,
+ rem: true,
+ ),
+));
+
+
+// Susy Support [mixin]
+// --------------------
+// Send property-value pairs to the proper support modules.
+// - $prop :
+// - $val :
+@mixin susy-support(
+ $prop,
+ $val
+) {
+ // Background Support
+ @if $prop == background-image {
+ @include susy-background-image($val);
+ } @else if $prop == background-size {
+ @include susy-background-size($val);
+ } @else if $prop == background-origin {
+ @include susy-background-origin($val);
+ } @else if $prop == background-clip {
+ @include susy-background-clip($val);
+ }
+
+ // Box-Sizing Support
+ @else if $prop == box-sizing {
+ @include susy-box-sizing($val);
+ }
+
+ // Rem Support
+ @else {
+ @include susy-rem($prop, $val);
+ }
+}
+
+
+// Susy Support [function]
+// -----------------------
+// Check for support of a feature.
+// - $feature :
+// - e.g "rem" or "box-sizing"
+// - $requirements :
+// - e.g (variable: rem-with-px-fallback, mixin: rem)
+// - $warn :
+@function susy-support(
+ $feature,
+ $requirements: (),
+ $warn: true
+) {
+ $_support: susy-get(use-custom $feature);
+
+ @if $_support {
+ $_fail: false;
+
+ @each $_type, $_req in $requirements {
+ @each $_i in $_req {
+ $_pass: call(get-function(unquote("#{$_type}-exists")), $_i);
+
+ @if not($_pass) {
+ $_fail: true;
+ @if $warn {
+ @warn "You requested custom support of #{$feature}, but the #{$_i} #{$_type} is not available.";
+ }
+ }
+ }
+ }
+
+ $_support: if($_fail, false, $_support);
+ }
+
+ @return $_support;
+}
diff --git a/_sass/vendor/susy/susy/su/_grid.scss b/_sass/vendor/susy/susy/su/_grid.scss
new file mode 100644
index 0000000..7fe2a02
--- /dev/null
+++ b/_sass/vendor/susy/susy/su/_grid.scss
@@ -0,0 +1,103 @@
+// Column math
+// ===========
+
+
+// Is Symmetrical
+// --------------
+// Returns true if a grid is symmetrical.
+// - [$columns] : |
+@function is-symmetrical(
+ $columns: susy-get(columns)
+) {
+ $columns: valid-columns($columns);
+ @return if(type-of($columns) == number, $columns, null);
+}
+
+
+// Susy Count
+// ----------
+// Find the number of columns in a given layout
+// - [$columns] : |
+@function susy-count(
+ $columns: susy-get(columns)
+) {
+ $columns: valid-columns($columns);
+ @return is-symmetrical($columns) or length($columns);
+}
+
+
+// Susy Sum
+// --------
+// Find the total sum of column-units in a layout
+// - [$columns] : |
+// - [$gutters] :
+// - [$spread] : false/narrow | wide | wider
+@function susy-sum(
+ $columns : susy-get(columns),
+ $gutters : susy-get(gutters),
+ $spread : false
+) {
+ $columns: valid-columns($columns);
+ $gutters: valid-gutters($gutters);
+
+ $spread: if($spread == wide, 0, if($spread == wider, 1, -1));
+ $gutter-sum: (susy-count($columns) + $spread) * $gutters;
+ $column-sum: is-symmetrical($columns);
+
+ @if not($column-sum) {
+ @each $column in $columns {
+ $column-sum: ($column-sum or 0) + $column;
+ }
+ }
+
+ @return $column-sum + $gutter-sum;
+}
+
+
+// Susy Slice
+// ----------
+// Return a subset of columns at a given location.
+// - $span :
+// - $location :
+// - [$columns] : |
+@function susy-slice(
+ $span,
+ $location,
+ $columns: susy-get(columns)
+) {
+ $columns: valid-columns($columns);
+ $sub-columns: $span;
+
+ @if not(is-symmetrical($columns)) {
+ $location: $location or 1;
+ $sub-columns: ();
+ @for $i from $location to ($location + $span) {
+ $sub-columns: append($sub-columns, nth($columns, $i));
+ }
+ }
+
+ @return $sub-columns;
+}
+
+
+// Susy
+// ----
+// Find the sum of a column-span.
+// - $span :
+// - $location :
+// - [$columns] : |
+// - [$gutters] :
+// - [$spread] : false/narrow | wide | wider
+@function susy(
+ $span,
+ $location : false,
+ $columns : susy-get(columns),
+ $gutters : susy-get(gutters),
+ $spread : false
+) {
+ $columns: valid-columns($columns);
+ $gutters: valid-gutters($gutters);
+ $span: susy-slice($span, $location, $columns);
+
+ @return susy-sum($span, $gutters, $spread);
+}
diff --git a/_sass/vendor/susy/susy/su/_settings.scss b/_sass/vendor/susy/susy/su/_settings.scss
new file mode 100644
index 0000000..8b439aa
--- /dev/null
+++ b/_sass/vendor/susy/susy/su/_settings.scss
@@ -0,0 +1,73 @@
+// Settings
+// ========
+
+// Version
+// -------
+$su-version: 1.1;
+
+
+// Default Settings
+// ----------------
+// PRIVATE: The basic settings
+$susy-defaults: (
+ columns: 4,
+ gutters: .25,
+);
+
+
+// User Settings
+// -------------
+// - Define the $susy variable with a map of your own settings.
+// - Set EITHER $column-width OR $container
+// - Use $column-width for static layouts
+$susy: () !default;
+
+
+// Susy Defaults
+// -------------
+// PRIVATE: Add defaults to Susy
+@mixin susy-defaults(
+ $defaults
+) {
+ $susy-defaults: map-merge($susy-defaults, $defaults) !global;
+}
+
+
+// Susy Set
+// --------
+// Change one setting
+// - $key : setting name
+// - $value : setting value
+@mixin susy-set(
+ $key-value...
+) {
+ $susy: _susy-deep-set($susy, $key-value...) !global;
+}
+
+
+// Susy Get
+// --------
+// Return one setting from a grid
+// - $key :
+// - $layout :
+@function susy-get(
+ $key,
+ $layout: map-merge($susy-defaults, $susy)
+) {
+ $layout: parse-grid($layout);
+ $_options: $layout $susy $susy-defaults;
+ $_break: false;
+ $_return: null;
+
+ @each $opt in $_options {
+ @if type-of($opt) == map and not($_break) {
+ $_keyset: _susy-deep-has-key($opt, $key...);
+ @if $_keyset {
+ $_return: _susy-deep-get($opt, $key...);
+ $_break: true;
+ }
+ }
+ }
+
+ @return $_return;
+}
diff --git a/_sass/vendor/susy/susy/su/_utilities.scss b/_sass/vendor/susy/susy/su/_utilities.scss
new file mode 100644
index 0000000..b737f21
--- /dev/null
+++ b/_sass/vendor/susy/susy/su/_utilities.scss
@@ -0,0 +1,111 @@
+// Map Functions
+// =============
+
+
+// Truncate List
+// -------------
+// - Return a list, truncated to a given length
+@function _susy-truncate-list(
+ $list,
+ $length
+) {
+ $_return: ();
+
+ @for $i from 1 through length($list) {
+ $_return: if($i <= $length, append($_return, nth($list, $i)), $_return);
+ }
+
+ @return $_return;
+}
+
+
+// Deep Get
+// --------
+// - Return a value deep in nested maps
+@function _susy-deep-get(
+ $map,
+ $keys...
+) {
+ $_return: $map;
+
+ @each $key in $keys {
+ @if type-of($_return) == map {
+ $_return: map-get($_return, $key);
+ }
+ }
+
+ @return $_return;
+}
+
+
+// Deep Set
+// --------
+// - Set a value deep in nested maps
+@function _susy-deep-set(
+ $map,
+ $keys-value...
+) {
+ $_value: nth($keys-value, -1);
+ $_keys: _susy-truncate-list($keys-value, length($keys-value) - 1);
+ $_length: length($_keys);
+ $_return: ();
+
+ @for $i from 1 through $_length {
+ $_n: 0 - $i;
+ $_level: _susy-truncate-list($_keys, $_length + $_n);
+ $_level: _susy-deep-get($map, $_level...);
+ $_merge: nth($_keys, $_n);
+ $_merge: ($_merge: $_value);
+ $_return: if($_level, map-merge($_level, $_merge), $_merge);
+ $_value: $_return;
+ }
+
+ @return $_return;
+}
+
+
+// Deep Merge
+// ----------
+// Return 2 objects of any depth, merged
+@function _susy-deep-merge(
+ $map1,
+ $map2
+) {
+
+ @if type-of($map1) != map or type-of($map2) != map {
+ $map1: $map2;
+ } @else {
+ @each $key, $value in $map2 {
+ $_new: ($key: _susy_deep-merge(map-get($map1, $key), $value));
+ $map1: map-merge($map1, $_new);
+ }
+ }
+
+ @return $map1;
+}
+
+
+// Deep Has-Key
+// ------------
+// - Return true if a deep key exists
+@function _susy-deep-has-key(
+ $map,
+ $keys...
+) {
+ $_return: null;
+ $_stop: false;
+
+ @each $key in $keys {
+ @if not($_stop) {
+ $_return: map-has-key($map, $key);
+ }
+
+ @if $_return {
+ $map: map-get($map, $key);
+ } @else {
+ $_stop: true;
+ }
+ }
+
+ @return $_return;
+}
diff --git a/_sass/vendor/susy/susy/su/_validation.scss b/_sass/vendor/susy/susy/su/_validation.scss
new file mode 100644
index 0000000..4c6ab8d
--- /dev/null
+++ b/_sass/vendor/susy/susy/su/_validation.scss
@@ -0,0 +1,57 @@
+// Math Validation
+// ===============
+
+
+// Valid Columns
+// -------------
+// Check that a column setting is valid.
+@function valid-columns(
+ $columns,
+ $silent: false
+) {
+ $type: type-of($columns);
+ $return: null;
+
+ @if $type == number and unitless($columns) {
+ $return: $columns;
+ } @else if $type == list {
+ $fail: null;
+ @each $col in $columns {
+ @if type-of($col) == number {
+ $fail: $fail or if(unitless($col), null, true);
+ } @else {
+ $fail: true;
+ }
+ }
+ $return: if($fail, $return, $columns);
+ }
+
+ @if $return != $columns and not($silent) {
+ $return: null;
+ $warn: '$columns must be a unitless number or list of unitless numbers.';
+ @warn $warn + ' Current value [#{$type}]: #{$columns}';
+ }
+
+ @return $return;
+}
+
+
+// Valid Gutters
+// -------------
+// Check that a gutter setting is valid.
+@function valid-gutters(
+ $gutters,
+ $silent: false
+) {
+ $type: type-of($gutters);
+ $return: null;
+
+ @if $type == number and unitless($gutters) {
+ $return: $gutters;
+ } @else if not($silent) {
+ $warn: '$gutters must be a unitless number.';
+ @warn $warn + ' Current value [#{$type}]: #{$gutters}';
+ }
+
+ @return $return;
+}
diff --git a/_site/404.html b/_site/404.html
new file mode 100644
index 0000000..627a012
--- /dev/null
+++ b/_site/404.html
@@ -0,0 +1,319 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Page Not Found - Yuchen Lei
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Page Not Found
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Sorry, but the page you were trying to view does not exist — perhaps you can try searching for it below.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/_site/CONTRIBUTING.md b/_site/CONTRIBUTING.md
new file mode 100644
index 0000000..803b63d
--- /dev/null
+++ b/_site/CONTRIBUTING.md
@@ -0,0 +1,5 @@
+Contributions are welcome! Please add issues and make pull requests. There are no stupid questions. All ideas are welcome. This is a volunteer project. Be excellent to each other.
+
+Fork from master and go from there. This repository is intended to remain a generic, ready-to-fork template that demonstrates the features of academicpages.
+
+If you make a pull request and change code, please make sure there is a closed issue tagged with 'code change' that has some comment linking to either the single commit (if the change was just one commit) or a diff comparing before/after the change (see [issue 21](https://github.com/academicpages/academicpages.github.io/issues/21) for example). This is so that those who have forked this repo and modified it for their purposes can more easily patch bugs and new features.
diff --git a/_site/Dockerfile b/_site/Dockerfile
new file mode 100644
index 0000000..8ec8863
--- /dev/null
+++ b/_site/Dockerfile
@@ -0,0 +1,3 @@
+FROM alpine
+RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories
+RUN apk add --no-cache ruby-bundler libstdc++
diff --git a/_site/about.html b/_site/about.html
new file mode 100644
index 0000000..bfc9c61
--- /dev/null
+++ b/_site/about.html
@@ -0,0 +1,11 @@
+
+
+
+ Redirecting…
+
+
+
+
+ Redirecting…
+ Click here if you are not redirected.
+
diff --git a/_site/about/index.html b/_site/about/index.html
new file mode 100644
index 0000000..bfc9c61
--- /dev/null
+++ b/_site/about/index.html
@@ -0,0 +1,11 @@
+
+
+
+ Redirecting…
+
+
+
+
+ Redirecting…
+ Click here if you are not redirected.
+
diff --git a/_site/assets/css/academicons.css b/_site/assets/css/academicons.css
new file mode 100755
index 0000000..beb9b07
--- /dev/null
+++ b/_site/assets/css/academicons.css
@@ -0,0 +1,327 @@
+/*
+ * Academicons 1.8.0 by James Walsh - https://github.com/jpswalsh
+ * Fonts generated using the IcoMoon app - http://icomoon.io/app
+ * Square icons designed to be used alongside Font Awesome square icons - https://fortawesome.github.io/Font-Awesome/
+ * Licenses - Font: SIL OFL 1.1, CSS: MIT License
+ */
+@font-face {
+ font-family: 'Academicons';
+ src:url('../fonts/academicons.eot?v=1.8.0');
+ src:url('../fonts/academicons.eot?v=1.8.0') format('embedded-opentype'),
+ url('../fonts/academicons.ttf?v=1.8.0') format('truetype'),
+ url('../fonts/academicons.woff?v=1.8.0') format('woff'),
+ url('../fonts/academicons.svg?v=1.8.0#academicons') format('svg');
+ font-weight: normal;
+ font-style: normal;
+}
+.ai {
+ display:inline-block;
+ font:normal normal normal 14px/1 Academicons;
+ font-size:inherit;
+ text-rendering:auto;
+ -webkit-font-smoothing:antialiased;
+ -moz-osx-font-smoothing:grayscale;
+}
+.ai-academia:before {
+ content: "\e800";
+}
+.ai-academia-square:before {
+ content: "\e801";
+}
+.ai-acclaim:before {
+ content: "\e802";
+}
+.ai-acclaim-square:before {
+ content: "\e803";
+}
+.ai-acm:before {
+ content: "\e804";
+}
+.ai-acm-square:before {
+ content: "\e805";
+}
+.ai-ads:before {
+ content: "\e806";
+}
+.ai-ads-square:before {
+ content: "\e807";
+}
+.ai-arxiv:before {
+ content: "\e808";
+}
+.ai-arxiv-square:before {
+ content: "\e809";
+}
+.ai-biorxiv:before {
+ content: "\e810";
+}
+.ai-biorxiv-square:before {
+ content: "\e811";
+}
+.ai-ceur:before {
+ content: "\e812";
+}
+.ai-ceur-box:before {
+ content: "\e813";
+}
+.ai-courser:before {
+ content: "\e814";
+}
+.ai-courser-square:before {
+ content: "\e815";
+}
+.ai-dataverse:before {
+ content: "\e816";
+}
+.ai-dataverse-box:before {
+ content: "\e817";
+}
+.ai-dblp:before {
+ content: "\e818";
+}
+.ai-dblp-square:before {
+ content: "\e819";
+}
+.ai-depsy:before {
+ content: "\e820";
+}
+.ai-depsy-square:before {
+ content: "\e821";
+}
+.ai-doi:before {
+ content: "\e822";
+}
+.ai-doi-square:before {
+ content: "\e823";
+}
+.ai-dryad:before {
+ content: "\e824";
+}
+.ai-dryad-square:before {
+ content: "\e825";
+}
+.ai-figshare:before {
+ content: "\e826";
+}
+.ai-figshare-square:before {
+ content: "\e827";
+}
+.ai-google-scholar:before {
+ content: "\e828";
+}
+.ai-google-scholar-square:before {
+ content: "\e829";
+}
+.ai-ieee:before {
+ content: "\e830";
+}
+.ai-ieee-square:before {
+ content: "\e831";
+}
+.ai-impactstory:before {
+ content: "\e832";
+}
+.ai-impactstory-square:before {
+ content: "\e833";
+}
+.ai-inspire:before {
+ content: "\e834";
+}
+.ai-inspire-square:before {
+ content: "\e835";
+}
+.ai-mendeley:before {
+ content: "\e836";
+}
+.ai-mendeley-square:before {
+ content: "\e837";
+}
+.ai-open-access:before {
+ content: "\e838";
+}
+.ai-open-access-square:before {
+ content: "\e839";
+}
+.ai-orcid:before {
+ content: "\e840";
+}
+.ai-orcid-square:before {
+ content: "\e841";
+}
+.ai-osf:before {
+ content: "\e842";
+}
+.ai-osf-square:before {
+ content: "\e843";
+}
+.ai-overleaf:before {
+ content: "\e844";
+}
+.ai-overleaf-square:before {
+ content: "\e845";
+}
+.ai-philpapers:before {
+ content: "\e846";
+}
+.ai-philpapers-square:before {
+ content: "\e847";
+}
+.ai-piazza:before {
+ content: "\e848";
+}
+.ai-piazza-square:before {
+ content: "\e849";
+}
+.ai-publons:before {
+ content: "\e850";
+}
+.ai-publons-square:before {
+ content: "\e851";
+}
+.ai-pubmed:before {
+ content: "\e852";
+}
+.ai-pubmed-square:before {
+ content: "\e853";
+}
+.ai-researchgate:before {
+ content: "\e854";
+}
+.ai-researchgate-square:before {
+ content: "\e855";
+}
+.ai-scirate:before {
+ content: "\e856";
+}
+.ai-scirate-square:before {
+ content: "\e857";
+}
+.ai-springer:before {
+ content: "\e858";
+}
+.ai-springer-square:before {
+ content: "\e859";
+}
+.ai-zotero:before {
+ content: "\e860";
+}
+.ai-zotero-square:before {
+ content: "\e861";
+}
+/* Duplication of the FontAwesome style classes using 'ai' in place of 'fa'. */
+.ai-lg {
+ font-size: 1.33333333em;
+ line-height: 0.75em;
+ vertical-align: -15%;
+}
+.ai-2x {
+ font-size: 2em;
+}
+.ai-3x {
+ font-size: 3em;
+}
+.ai-4x {
+ font-size: 4em;
+}
+.ai-5x {
+ font-size: 5em;
+}
+.ai-fw {
+ width: 1.28571429em;
+ text-align: center;
+}
+.ai-ul {
+ padding-left: 0;
+ margin-left: 2.14285714em;
+ list-style-type: none;
+}
+.ai-ul > li {
+ position: relative;
+}
+.ai-li {
+ position: absolute;
+ left: -2.14285714em;
+ width: 2.14285714em;
+ top: 0.14285714em;
+ text-align: center;
+}
+.ai-li.fa-lg {
+ left: -1.85714286em;
+}
+.ai-border {
+ padding: .2em .25em .15em;
+ border: solid 0.08em #eeeeee;
+ border-radius: .1em;
+}
+.ai-pull-left {
+ float: left;
+}
+.ai-pull-right {
+ float: right;
+}
+.ai.fa-pull-left {
+ margin-right: .3em;
+}
+.ai.fa-pull-right {
+ margin-left: .3em;
+}
+/*
+ * Repeat of the FontAwesome style classes to prevent override if academicons.css
+ * is called after font-awesome.css.
+ */
+.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;
+}
\ No newline at end of file
diff --git a/_site/assets/css/academicons.min.css b/_site/assets/css/academicons.min.css
new file mode 100755
index 0000000..9275e82
--- /dev/null
+++ b/_site/assets/css/academicons.min.css
@@ -0,0 +1 @@
+.ai-ul,.fa-ul{list-style-type:none}.ai-li,.fa-li{top:.14285714em;text-align:center}.ai-fw,.ai-li,.fa-fw,.fa-li{text-align:center}.ai.fa-pull-left,.fa.fa-pull-left{margin-right:.3em}@font-face{font-family:Academicons;src:url(../fonts/academicons.eot?v=1.8.0);src:url(../fonts/academicons.eot?v=1.8.0) format('embedded-opentype'),url(../fonts/academicons.ttf?v=1.8.0) format('truetype'),url(../fonts/academicons.woff?v=1.8.0) format('woff'),url(../fonts/academicons.svg?v=1.8.0#academicons) format('svg');font-weight:400;font-style:normal}.ai{display:inline-block;font:normal normal normal 14px/1 Academicons;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.ai-lg,.fa-lg{line-height:.75em;vertical-align:-15%}.ai-academia:before{content:"\e800"}.ai-academia-square:before{content:"\e801"}.ai-acclaim:before{content:"\e802"}.ai-acclaim-square:before{content:"\e803"}.ai-acm:before{content:"\e804"}.ai-acm-square:before{content:"\e805"}.ai-ads:before{content:"\e806"}.ai-ads-square:before{content:"\e807"}.ai-arxiv:before{content:"\e808"}.ai-arxiv-square:before{content:"\e809"}.ai-biorxiv:before{content:"\e810"}.ai-biorxiv-square:before{content:"\e811"}.ai-ceur:before{content:"\e812"}.ai-ceur-box:before{content:"\e813"}.ai-courser:before{content:"\e814"}.ai-courser-square:before{content:"\e815"}.ai-dataverse:before{content:"\e816"}.ai-dataverse-box:before{content:"\e817"}.ai-dblp:before{content:"\e818"}.ai-dblp-square:before{content:"\e819"}.ai-depsy:before{content:"\e820"}.ai-depsy-square:before{content:"\e821"}.ai-doi:before{content:"\e822"}.ai-doi-square:before{content:"\e823"}.ai-dryad:before{content:"\e824"}.ai-dryad-square:before{content:"\e825"}.ai-figshare:before{content:"\e826"}.ai-figshare-square:before{content:"\e827"}.ai-google-scholar:before{content:"\e828"}.ai-google-scholar-square:before{content:"\e829"}.ai-ieee:before{content:"\e830"}.ai-ieee-square:before{content:"\e831"}.ai-impactstory:before{content:"\e832"}.ai-impactstory-square:before{content:"\e833"}.ai-inspire:before{content:"\e834"}.ai-inspire-square:before{content:"\e835"}.ai-mendeley:before{content:"\e836"}.ai-mendeley-square:before{content:"\e837"}.ai-open-access:before{content:"\e838"}.ai-open-access-square:before{content:"\e839"}.ai-orcid:before{content:"\e840"}.ai-orcid-square:before{content:"\e841"}.ai-osf:before{content:"\e842"}.ai-osf-square:before{content:"\e843"}.ai-overleaf:before{content:"\e844"}.ai-overleaf-square:before{content:"\e845"}.ai-philpapers:before{content:"\e846"}.ai-philpapers-square:before{content:"\e847"}.ai-piazza:before{content:"\e848"}.ai-piazza-square:before{content:"\e849"}.ai-publons:before{content:"\e850"}.ai-publons-square:before{content:"\e851"}.ai-pubmed:before{content:"\e852"}.ai-pubmed-square:before{content:"\e853"}.ai-researchgate:before{content:"\e854"}.ai-researchgate-square:before{content:"\e855"}.ai-scirate:before{content:"\e856"}.ai-scirate-square:before{content:"\e857"}.ai-springer:before{content:"\e858"}.ai-springer-square:before{content:"\e859"}.ai-zotero:before{content:"\e860"}.ai-zotero-square:before{content:"\e861"}.ai-lg{font-size:1.33333333em}.ai-2x{font-size:2em}.ai-3x{font-size:3em}.ai-4x{font-size:4em}.ai-5x{font-size:5em}.ai-fw{width:1.28571429em}.ai-ul{padding-left:0;margin-left:2.14285714em}.ai-ul>li{position:relative}.ai-li{position:absolute;left:-2.14285714em;width:2.14285714em}.ai-li.fa-lg{left:-1.85714286em}.ai-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.ai-pull-left{float:left}.ai-pull-right{float:right}.ai.fa-pull-right{margin-left:.3em}.fa-lg{font-size:1.33333333em}.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}.fa-ul{padding-left:0;margin-left:2.14285714em}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-right{margin-left:.3em}
\ No newline at end of file
diff --git a/_site/assets/css/collapse.css b/_site/assets/css/collapse.css
new file mode 100644
index 0000000..f6540bc
--- /dev/null
+++ b/_site/assets/css/collapse.css
@@ -0,0 +1,16 @@
+.container {
+ width:100%;
+ border:1px solid #d3d3d3;
+}
+.container div {
+ width:100%;
+}
+.container .header {
+ background-color:#d3d3d3;
+ padding: 2px;
+ cursor: pointer;
+ font-weight: bold;
+}
+.container .content {
+ display: none;
+ padding : 5px;
diff --git a/_site/assets/css/main.css b/_site/assets/css/main.css
new file mode 100644
index 0000000..d802e93
--- /dev/null
+++ b/_site/assets/css/main.css
@@ -0,0 +1,10 @@
+a:focus{outline:thin dotted #f89406;outline:5px auto #f89406;outline-offset:-2px}*,*:before,*:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}html{box-sizing:border-box;background-color:#fff;font-size:16px;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}@media (min-width: 48em){html{font-size:18px}}body{margin:0}::-moz-selection{color:#fff;background:#000}::selection{color:#fff;background:#000}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}audio:not([controls]){display:none}a{color:#52adc8}a:hover,a:active{outline:0}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{max-width:100%;width:auto\9;height:auto;vertical-align:middle;border:0;-ms-interpolation-mode:bicubic}#map_canvas img,.google-maps img{max-width:none}button,input,select,textarea{margin:0;font-size:100%;vertical-align:middle}button,input{*overflow:visible;line-height:normal}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}label,select,button,input[type="button"],input[type="reset"],input[type="submit"],input[type="radio"],input[type="checkbox"]{cursor:pointer}input[type="search"]{box-sizing:content-box;-webkit-appearance:textfield}input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none}textarea{overflow:auto;vertical-align:top}html{position:relative;min-height:100%}body{margin:0;padding:0;padding-bottom:9em;color:#494e52;font-family:-apple-system,".SFNSText-Regular","San Francisco","Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;line-height:1.5}body.overflow--hidden{overflow:hidden}h1,h2,h3,h4,h5,h6{margin:2em 0 0.5em;line-height:1.2;font-family:-apple-system,".SFNSText-Regular","San Francisco","Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-weight:bold}h1{margin-top:0;font-size:1.563em}h2{font-size:1.25em}h3{font-size:1em}h4{font-size:.75em}h5{font-size:.75em}h6{font-size:.75em}small,.small{font-size:.75em}p{margin-bottom:1.3em}u,ins{text-decoration:none;border-bottom:1px solid #494e52}u a,ins a{color:inherit}del a{color:inherit}p,pre,blockquote,ul,ol,dl,figure,table,fieldset{orphans:3;widows:3}abbr[title],abbr[data-original-title]{text-decoration:none;cursor:help;border-bottom:1px dotted #494e52}blockquote{margin:2em 1em 2em 0;padding-left:1em;padding-right:1em;font-style:italic;border-left:0.25em solid #7a8288}blockquote cite{font-style:italic}blockquote cite:before{content:"\2014";padding-right:5px}a:hover,a:active{outline:0}tt,code,kbd,samp,pre{font-family:Monaco,Consolas,"Lucida Console",monospace}pre{overflow-x:auto}p>code,a>code,li>code,figcaption>code,td>code{padding-top:0.1rem;padding-bottom:0.1rem;font-size:.75em;background:#fafafa;border:1px solid #f2f3f3;border-radius:4px;box-shadow:0 1px 1px rgba(0,0,0,0.125)}p>code:before,p>code:after,a>code:before,a>code:after,li>code:before,li>code:after,figcaption>code:before,figcaption>code:after,td>code:before,td>code:after{letter-spacing:-0.2em;content:"\00a0"}hr{display:block;margin:1em 0;border:0;border-top:1px solid #f2f3f3}ul li,ol li{margin-bottom:0.5em}li ul,li ol{margin-top:0.5em}figure{display:-webkit-box;display:flex;-webkit-box-pack:justify;justify-content:space-between;-webkit-box-align:start;align-items:flex-start;flex-wrap:wrap;margin:2em 0}figure img,figure iframe,figure .fluid-width-video-wrapper{margin-bottom:1em}figure img{width:100%;border-radius:4px;-webkit-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out}figure>a{display:block}@media (min-width: 37.5em){figure.half>a,figure.half>img{width:calc(50% - 0.5em)}}figure.half figcaption{width:100%}@media (min-width: 37.5em){figure.third>a,figure.third>img{width:calc(33.3333% - 0.5em)}}figure.third figcaption{width:100%}figcaption{margin-bottom:0.5em;color:#777a7d;font-family:Georgia,Times,serif;font-size:.75em}figcaption a{color:inherit;text-decoration:none;border-bottom:1px solid #bdc1c4;-webkit-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out}figcaption a:hover{color:#000;border-bottom-color:#000}svg:not(:root){overflow:hidden}nav ul{margin:0;padding:0}nav li{list-style:none}nav a{text-decoration:none}nav ul li,nav ol li{margin-bottom:0}nav li ul,nav li ol{margin-top:0}b,i,strong,em,blockquote,p,q,span,figure,img,h1,h2,header,input,a,tr,td,form button,input[type="submit"],.btn,#goog-wm-sb,.highlight,.archive__item-teaser{-webkit-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out}.hidden{display:none;visibility:hidden}.load{display:none}.transparent{opacity:0}.visually-hidden,.screen-reader-text,.screen-reader-text span,.screen-reader-shortcut{position:absolute !important;clip:rect(1px, 1px, 1px, 1px);height:1px !important;width:1px !important;border:0 !important;overflow:hidden}body:hover .visually-hidden a,body:hover .visually-hidden input,body:hover .visually-hidden button{display:none !important}.screen-reader-text:focus,.screen-reader-shortcut:focus{clip:auto !important;height:auto !important;width:auto !important;display:block;font-size:1em;font-weight:bold;padding:15px 23px 14px;background:#fff;z-index:100000;text-decoration:none;box-shadow:0 0 2px 2px rgba(0,0,0,0.6)}.skip-link{position:fixed;z-index:20;margin:0;font-family:-apple-system,".SFNSText-Regular","San Francisco","Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;white-space:nowrap}.skip-link li{height:0;width:0;list-style:none}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.cf{clear:both}.wrapper{max-width:925px;margin-left:auto;margin-right:auto}.wrapper:after{content:" ";display:block;clear:both}.align-left{display:block;margin-left:auto;margin-right:auto}@media (min-width: 37.5em){.align-left{float:left;margin-right:1em}}.align-right{display:block;margin-left:auto;margin-right:auto}@media (min-width: 37.5em){.align-right{float:right;margin-left:1em}}.align-center{display:block;margin-left:auto;margin-right:auto}@media (min-width: 57.8125em){.full{margin-right:-19.4915254237% !important}}.icon{display:inline-block;fill:currentColor;width:1em;height:1.1em;line-height:1;position:relative;top:-0.1em;vertical-align:middle}.social-icons .fa{color:#000}.social-icons .fa-behance,.social-icons .fa-behance-square{color:#1769FF}.social-icons .fa-dribbble{color:#ea4c89}.social-icons .fa-facebook,.social-icons .fa-facebook-square{color:#3b5998}.social-icons .fa-flickr{color:#ff0084}.social-icons .fa-foursquare{color:#0072b1}.social-icons .fa-github,.social-icons .fa-github-alt,.social-icons .fa-github-square{color:#171516}.social-icons .fa-google-plus,.social-icons .fa-google-plus-square{color:#dd4b39}.social-icons .fa-instagram{color:#517fa4}.social-icons .fa-lastfm,.social-icons .fa-lastfm-square{color:#d51007}.social-icons .fa-linkedin,.social-icons .fa-linkedin-square{color:#007bb6}.social-icons .fa-pinterest,.social-icons .fa-pinterest-p,.social-icons .fa-pinterest-square{color:#cb2027}.social-icons .fa-rss,.social-icons .fa-rss-square{color:#fa9b39}.social-icons .fa-soundcloud{color:#f30}.social-icons .fa-stack-exchange,.social-icons .fa-stack-overflow{color:#fe7a15}.social-icons .fa-tumblr,.social-icons .fa-tumblr-square{color:#32506d}.social-icons .fa-twitter,.social-icons .fa-twitter-square{color:#55acee}.social-icons .fa-vimeo,.social-icons .fa-vimeo-square{color:#1ab7ea}.social-icons .fa-vine{color:#00bf8f}.social-icons .fa-youtube,.social-icons .fa-youtube-square,.social-icons .fa-youtube-play{color:#b00}.social-icons .fa-xing,.social-icons .fa-xing-square{color:#006567}.navicon{position:relative;width:28px;height:4px;background:#fff;margin:auto;-webkit-transition:0.3s;transition:0.3s}.navicon:before,.navicon:after{content:"";position:absolute;left:0;width:28px;height:4px;background:#fff;-webkit-transition:0.3s;transition:0.3s}.navicon:before{top:-8px}.navicon:after{bottom:-8px}.close .navicon{background:transparent}.close .navicon:before,.close .navicon:after{-webkit-transform-origin:50% 50%;-ms-transform-origin:50% 50%;transform-origin:50% 50%;top:0;width:28px}.close .navicon:before{-webkit-transform:rotate3d(0, 0, 1, 45deg);transform:rotate3d(0, 0, 1, 45deg)}.close .navicon:after{-webkit-transform:rotate3d(0, 0, 1, -45deg);transform:rotate3d(0, 0, 1, -45deg)}@media (min-width: 57.8125em){.sticky{clear:both;position:-webkit-sticky;position:sticky;top:2em}.sticky::after{clear:both;content:"";display:table}.sticky>*{display:block}}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.show-modal{overflow:hidden;position:relative}.show-modal:before{position:absolute;content:"";top:0;left:0;width:100%;height:100%;z-index:999;background-color:rgba(255,255,255,0.85)}.show-modal .modal{display:block}.modal{display:none;position:fixed;width:300px;top:50%;left:50%;margin-left:-150px;margin-top:-150px;min-height:0;z-index:9999;background:#fff;border:1px solid #f2f3f3;border-radius:4px;box-shadow:0 1px 1px rgba(0,0,0,0.125)}.modal__title{margin:0;padding:0.5em 1em}.modal__supporting-text{padding:0 1em 0.5em 1em}.modal__actions{padding:0.5em 1em;border-top:1px solid #f2f3f3}.footnote{color:#9ba1a6;text-decoration:none}.footnotes{color:#9ba1a6}.footnotes ol,.footnotes li,.footnotes p{margin-bottom:0;font-size:.75em}a.reversefootnote{color:#7a8288;text-decoration:none}a.reversefootnote:hover{text-decoration:underline}.required{color:#ee5f5b;font-weight:bold}@-webkit-keyframes intro{0%{opacity:0}100%{opacity:1}}@keyframes intro{0%{opacity:0}100%{opacity:1}}table{margin-bottom:1em;width:100%;font-family:-apple-system,".SFNSText-Regular","San Francisco","Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:.75em;border-collapse:collapse;border:1px solid #bdc1c4}table+table{margin-top:1em}thead{background-color:#f2f3f3;border-bottom:1px solid #bdc1c4}th{padding:0.5em;font-weight:bold;text-align:left;border-right:1px solid #bdc1c4}td{padding:0.5em;border-bottom:1px solid #bdc1c4;border-right:1px solid #bdc1c4}tr,td,th{vertical-align:middle}.btn,#goog-wm-sb{display:inline-block;margin-bottom:0.25em;padding:0.5em 1em;color:#fff !important;font-family:-apple-system,".SFNSText-Regular","San Francisco","Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:.75em;font-weight:bold;text-align:center;text-decoration:none;background-color:#7a8288;border:0 !important;border-radius:4px;cursor:pointer}.btn:hover,#goog-wm-sb:hover{background-color:#333}.btn .icon,#goog-wm-sb .icon{margin-right:0.5em}.btn .icon+.hidden,#goog-wm-sb .icon+.hidden{margin-left:-0.5em}.btn--block{display:block;width:100%}.btn--block+.btn--block{margin-top:0.25em}.btn--inverse{color:#7a8288 !important;border:1px solid #bdc1c4 !important;background-color:#fff}.btn--inverse:hover{color:#fff !important;border-color:#7a8288}.btn--light-outline{border:1px solid #fff !important;background-color:transparent}.btn--info{background-color:#52adc8}.btn--info:hover{background-color:#428aa0}.btn--warning{background-color:#f89406}.btn--warning:hover{background-color:#c67605}.btn--success{background-color:#62c462}.btn--success:hover{background-color:#4e9d4e}.btn--danger{background-color:#ee5f5b}.btn--danger:hover{background-color:#be4c49}.btn--disabled{pointer-events:none;cursor:not-allowed;filter:alpha(opacity=65);box-shadow:none;opacity:0.65}.btn--facebook{background-color:#3b5998}.btn--facebook:hover{background-color:#2f477a}.btn--twitter{background-color:#55acee}.btn--twitter:hover{background-color:#448abe}.btn--google-plus{background-color:#dd4b39}.btn--google-plus:hover{background-color:#b13c2e}.btn--linkedin{background-color:#007bb6}.btn--linkedin:hover{background-color:#006292}.btn--x-large{font-size:1.25em}.btn--large{font-size:1em}.btn--small{font-size:.6875em}.notice{margin:2em 0 !important;padding:1em;font-family:-apple-system,".SFNSText-Regular","San Francisco","Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:.75em !important;text-indent:initial;background-color:#f8f9f9;border-radius:4px;box-shadow:0 1px 1px rgba(189,193,196,0.25)}.notice h4{margin-top:0 !important;margin-bottom:0.75em}.page__content .notice h4{margin-bottom:0;font-size:1em}.notice p:last-child{margin-bottom:0 !important}.notice h4+p{margin-top:0;padding-top:0}.notice a{color:#bdc1c4}.notice a:hover{color:#717476}.notice code{background-color:#fcfcfc}.notice ul:last-child{margin-bottom:0}.notice--primary{margin:2em 0 !important;padding:1em;font-family:-apple-system,".SFNSText-Regular","San Francisco","Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:.75em !important;text-indent:initial;background-color:#f2f3f3;border-radius:4px;box-shadow:0 1px 1px rgba(122,130,136,0.25)}.notice--primary h4{margin-top:0 !important;margin-bottom:0.75em}.page__content .notice--primary h4{margin-bottom:0;font-size:1em}.notice--primary p:last-child{margin-bottom:0 !important}.notice--primary h4+p{margin-top:0;padding-top:0}.notice--primary a{color:#7a8288}.notice--primary a:hover{color:#494e52}.notice--primary code{background-color:#f8f9f9}.notice--primary ul:last-child{margin-bottom:0}.notice--info{margin:2em 0 !important;padding:1em;font-family:-apple-system,".SFNSText-Regular","San Francisco","Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:.75em !important;text-indent:initial;background-color:#eef7fa;border-radius:4px;box-shadow:0 1px 1px rgba(82,173,200,0.25)}.notice--info h4{margin-top:0 !important;margin-bottom:0.75em}.page__content .notice--info h4{margin-bottom:0;font-size:1em}.notice--info p:last-child{margin-bottom:0 !important}.notice--info h4+p{margin-top:0;padding-top:0}.notice--info a{color:#52adc8}.notice--info a:hover{color:#316878}.notice--info code{background-color:#f6fbfc}.notice--info ul:last-child{margin-bottom:0}.notice--warning{margin:2em 0 !important;padding:1em;font-family:-apple-system,".SFNSText-Regular","San Francisco","Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:.75em !important;text-indent:initial;background-color:#fef4e6;border-radius:4px;box-shadow:0 1px 1px rgba(248,148,6,0.25)}.notice--warning h4{margin-top:0 !important;margin-bottom:0.75em}.page__content .notice--warning h4{margin-bottom:0;font-size:1em}.notice--warning p:last-child{margin-bottom:0 !important}.notice--warning h4+p{margin-top:0;padding-top:0}.notice--warning a{color:#f89406}.notice--warning a:hover{color:#955904}.notice--warning code{background-color:#fffaf3}.notice--warning ul:last-child{margin-bottom:0}.notice--success{margin:2em 0 !important;padding:1em;font-family:-apple-system,".SFNSText-Regular","San Francisco","Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:.75em !important;text-indent:initial;background-color:#eff9ef;border-radius:4px;box-shadow:0 1px 1px rgba(98,196,98,0.25)}.notice--success h4{margin-top:0 !important;margin-bottom:0.75em}.page__content .notice--success h4{margin-bottom:0;font-size:1em}.notice--success p:last-child{margin-bottom:0 !important}.notice--success h4+p{margin-top:0;padding-top:0}.notice--success a{color:#62c462}.notice--success a:hover{color:#3b763b}.notice--success code{background-color:#f7fcf7}.notice--success ul:last-child{margin-bottom:0}.notice--danger{margin:2em 0 !important;padding:1em;font-family:-apple-system,".SFNSText-Regular","San Francisco","Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:.75em !important;text-indent:initial;background-color:#fdefef;border-radius:4px;box-shadow:0 1px 1px rgba(238,95,91,0.25)}.notice--danger h4{margin-top:0 !important;margin-bottom:0.75em}.page__content .notice--danger h4{margin-bottom:0;font-size:1em}.notice--danger p:last-child{margin-bottom:0 !important}.notice--danger h4+p{margin-top:0;padding-top:0}.notice--danger a{color:#ee5f5b}.notice--danger a:hover{color:#8f3937}.notice--danger code{background-color:#fef7f7}.notice--danger ul:last-child{margin-bottom:0}.masthead{position:relative;border-bottom:1px solid #f2f3f3;-webkit-animation:intro 0.3s both;animation:intro 0.3s both;-webkit-animation-delay:0.15s;animation-delay:0.15s;z-index:20}.masthead__inner-wrap{max-width:925px;margin-left:auto;margin-right:auto;clear:both;padding:1em 1em 1em;font-family:-apple-system,".SFNSText-Regular","San Francisco","Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif}.masthead__inner-wrap:after{content:" ";display:block;clear:both}.masthead__inner-wrap::after{clear:both;content:"";display:table}@media (min-width: 80em){.masthead__inner-wrap{max-width:1280px}}.masthead__inner-wrap nav{z-index:10}.masthead__inner-wrap a{text-decoration:none}.masthead__menu ul{margin:0;padding:0;clear:both;list-style-type:none}.masthead__menu-item{display:block;list-style-type:none;white-space:nowrap}.masthead__menu-item--lg{padding-right:2em;font-weight:700}.breadcrumbs{max-width:925px;margin-left:auto;margin-right:auto;clear:both;margin-top:0;margin-bottom:0;padding-left:2em;padding-right:2em;font-family:-apple-system,".SFNSText-Regular","San Francisco","Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;-webkit-animation:intro 0.3s both;animation:intro 0.3s both;-webkit-animation-delay:0.30s;animation-delay:0.30s}.breadcrumbs:after{content:" ";display:block;clear:both}.breadcrumbs::after{clear:both;content:"";display:table}@media (min-width: 57.8125em){.breadcrumbs{padding-left:1em;padding-right:1em}}@media (min-width: 80em){.breadcrumbs{max-width:1280px}}.breadcrumbs ol{padding:0;list-style:none;font-size:.75em}@media (min-width: 57.8125em){.breadcrumbs ol{width:83.0508474576%;float:right;margin-right:0}}@media (min-width: 80em){.breadcrumbs ol{padding-left:4.2372881356%}}.breadcrumbs li{display:inline}.breadcrumbs .current{font-weight:bold}.pagination{clear:both;width:100%;float:left;margin-left:0;margin-right:0;clear:both;margin-top:1em;padding-top:1em}.pagination::after{clear:both;content:"";display:table}.pagination ul{margin:0;padding:0;list-style-type:none;font-family:-apple-system,".SFNSText-Regular","San Francisco","Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif}.pagination li{display:block;float:left;margin-left:-1px}.pagination li a{margin-bottom:0.25em;padding:0.5em 1em;font-family:-apple-system,".SFNSText-Regular","San Francisco","Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:14px;font-weight:bold;line-height:1.5;text-align:center;text-decoration:none;color:#9ba1a6;border:1px solid #bdc1c4;border-radius:0}.pagination li a:hover{color:#3e8296}.pagination li a.current{color:#fff;background:#7a8288}.pagination li a.disabled{color:#dee0e1;pointer-events:none;cursor:not-allowed}.pagination li:first-child{margin-left:0}.pagination li:first-child a{border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination li:last-child a{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination--pager{display:block;padding:1em 2em;float:left;width:50%;font-family:-apple-system,".SFNSText-Regular","San Francisco","Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:1em;font-weight:bold;text-align:center;text-decoration:none;color:#bdc1c4;border:1px solid #bdc1c4;border-radius:4px}.pagination--pager:hover{color:#3e8296}.pagination--pager:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.pagination--pager:last-child{margin-left:-1px;border-top-left-radius:0;border-bottom-left-radius:0}.pagination--pager.disabled{color:#dee0e1;pointer-events:none;cursor:not-allowed}.page__content+.pagination,.page__meta+.pagination,.comment__date+.pagination,.page__share+.pagination,.page__comments+.pagination{margin-top:2em;padding-top:2em;border-top:1px solid #f2f3f3}.greedy-nav{position:relative;min-width:250px;background:#fff}.greedy-nav a{display:block;margin:0 1rem;padding:0.5rem 0;color:#7a8288;text-decoration:none}.greedy-nav a:hover{color:#5c6266}.greedy-nav button{position:absolute;height:100%;right:0;padding:0 0.5rem;border:0;outline:none;background-color:#7a8288;color:#fff;cursor:pointer}.greedy-nav .visible-links{display:table}.greedy-nav .visible-links li{display:table-cell;vertical-align:middle}.greedy-nav .visible-links li:first-child{font-weight:bold}.greedy-nav .visible-links li:first-child a{margin-left:0}.greedy-nav .visible-links li:last-child a{margin-right:0}.greedy-nav .visible-links a{position:relative}.greedy-nav .visible-links a:before{content:"";position:absolute;left:0;bottom:0;height:4px;background:#bdc1c4;width:100%;-webkit-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out;-webkit-transform:scaleX(0);-ms-transform:scaleX(0);transform:scaleX(0)}.greedy-nav .visible-links a:hover:before{-webkit-transform:scaleX(1);-ms-transform:scaleX(1);transform:scaleX(1)}.greedy-nav .hidden-links{position:absolute;top:100%;right:0;margin-top:15px;padding:5px;border:1px solid #f2f3f3;border-radius:4px;background:#fff;box-shadow:0 0 10px rgba(0,0,0,0.25)}.greedy-nav .hidden-links a{margin:0;padding:10px 20px;font-size:1em}.greedy-nav .hidden-links a:hover{color:#5c6266;background:#dee0e1}.greedy-nav .hidden-links:before{content:"";position:absolute;top:-11px;right:10px;width:0;border-style:solid;border-width:0 10px 10px;border-color:#f2f3f3 transparent;display:block;z-index:0}.greedy-nav .hidden-links:after{content:"";position:absolute;top:-10px;right:10px;width:0;border-style:solid;border-width:0 10px 10px;border-color:#fff transparent;display:block;z-index:1}.greedy-nav .hidden-links li{display:block;border-bottom:1px solid #f2f3f3}.greedy-nav .hidden-links li:last-child{border-bottom:none}.nav__list{font-size:1.25rem}.nav__list ul{margin-bottom:1em}.nav__list a{display:block;padding:0.125em 0;color:inherit}.nav__list a:hover{text-decoration:underline}.nav__list .active{margin-left:-0.5em;padding-left:0.5em;padding-right:0.5em;color:#fff;font-weight:bold;background:#7a8288;border-radius:4px}.nav__list .active:hover{color:#fff}.nav__title{margin:0;padding:0.5rem 1rem;font-family:-apple-system,".SFNSText-Regular","San Francisco","Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:1em;font-weight:bold}.nav__sub-title{display:block;margin:0.5rem 0;padding:0.5rem 0;font-family:-apple-system,".SFNSText-Regular","San Francisco","Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:.75em;font-weight:bold;text-transform:uppercase;border-bottom:1px solid #f2f3f3}.toc{font-family:-apple-system,".SFNSText-Regular","San Francisco","Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;color:#7a8288;text-transform:uppercase;letter-spacing:1px;background-color:#fff;border:1px solid #f2f3f3;border-radius:4px;box-shadow:0 1px 1px rgba(0,0,0,0.125)}.toc .nav__title{color:#fff;font-size:.75em;background:#7a8288;border-top-left-radius:4px;border-top-right-radius:4px}.toc__menu{margin:0;padding:0;width:100%;list-style:none;font-size:0.8rem}.toc__menu a{display:block;padding:0.5rem 1rem;color:#7a8288;font-size:.6875em;font-weight:bold;line-height:1.5;border-bottom:1px solid #f2f3f3}.toc__menu a:hover{color:#000;background:#f2f3f3}.toc__menu>li:last-child a{border-bottom:none}.toc__menu li ul>li a{padding-left:2rem;font-weight:normal}.toc__menu li>ul li{display:none}@media (min-width: 48em){.toc__menu li>ul li{display:block}}.page__footer{clear:both;float:left;margin-left:0;margin-right:0;width:100%;clear:both;position:absolute;bottom:0em;height:auto;margin-top:3em;color:#9ba1a6;-webkit-animation:intro 0.3s both;animation:intro 0.3s both;-webkit-animation-delay:0.45s;animation-delay:0.45s;background-color:#f2f3f3;border-top:1px solid #bdc1c4}.page__footer::after{clear:both;content:"";display:table}.page__footer footer{clear:both;margin-left:auto;margin-right:auto;margin-top:2em;max-width:100%;padding:0 1em 2em}.page__footer footer::after{clear:both;content:"";display:table}@media (min-width: 80em){.page__footer footer{max-width:1280px}}.page__footer a{color:inherit;text-decoration:none}.page__footer a:hover{text-decoration:underline}.page__footer .fas,.page__footer .fab,.page__footer .far,.page__footer .fal{color:#9ba1a6}.page__footer-copyright{font-family:-apple-system,".SFNSText-Regular","San Francisco","Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:.6875em}.page__footer-follow ul{margin:0;padding:0;list-style-type:none}.page__footer-follow li{display:inline-block;padding-top:5px;padding-bottom:5px;font-family:-apple-system,".SFNSText-Regular","San Francisco","Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:.75em;text-transform:uppercase}.page__footer-follow li+li:before{content:"";padding-right:5px}.page__footer-follow a{padding-right:10px;font-weight:bold}.page__footer-follow .social-icons a{white-space:nowrap}div.highlighter-rouge,figure.highlight{position:relative;margin-bottom:1em;padding:1em;border:1px solid #f2f3f3;border-radius:4px;background-color:#fafafa;box-shadow:0 1px 1px rgba(0,0,0,0.125)}div.highlighter-rouge:before,figure.highlight:before{position:absolute;top:0;right:0;padding:0.5em;background-color:#f2f3f3;content:"\f121";font-family:"fontawesome" !important;font-size:.75em;line-height:1;text-transform:none;speak:none}div.highlighter-rouge .highlight,figure.highlight .highlight{margin:0;font-family:Monaco,Consolas,"Lucida Console",monospace;font-size:.6875em;line-height:1.8}.highlight table td{padding:5px}.highlight table pre{margin:0}.highlight .c{color:#93a1a1}.highlight .err{color:#586e75}.highlight .g{color:#586e75}.highlight .k{color:#859900}.highlight .l{color:#586e75}.highlight .n{color:#586e75}.highlight .o{color:#859900}.highlight .x{color:#cb4b16}.highlight .p{color:#586e75}.highlight .cm{color:#93a1a1}.highlight .cp{color:#859900}.highlight .c1{color:#93a1a1}.highlight .cs{color:#859900}.highlight .gd{color:#2aa198}.highlight .ge{color:#586e75;font-style:italic}.highlight .gr{color:#dc322f}.highlight .gh{color:#cb4b16}.highlight .gi{color:#859900}.highlight .go{color:#586e75}.highlight .gp{color:#586e75}.highlight .gs{color:#586e75;font-weight:bold}.highlight .gu{color:#cb4b16}.highlight .gt{color:#586e75}.highlight .kc{color:#cb4b16}.highlight .kd{color:#22b3eb}.highlight .kn{color:#859900}.highlight .kp{color:#859900}.highlight .kr{color:#22b3eb}.highlight .kt{color:#dc322f}.highlight .ld{color:#586e75}.highlight .m{color:#2aa198}.highlight .s{color:#2aa198}.highlight .na{color:#586e75}.highlight .nb{color:#B58900}.highlight .nc{color:#22b3eb}.highlight .no{color:#cb4b16}.highlight .nd{color:#22b3eb}.highlight .ni{color:#cb4b16}.highlight .ne{color:#cb4b16}.highlight .nf{color:#22b3eb}.highlight .nl{color:#586e75}.highlight .nn{color:#586e75}.highlight .nx{color:#586e75}.highlight .py{color:#586e75}.highlight .nt{color:#22b3eb}.highlight .nv{color:#22b3eb}.highlight .ow{color:#859900}.highlight .w{color:#586e75}.highlight .mf{color:#2aa198}.highlight .mh{color:#2aa198}.highlight .mi{color:#2aa198}.highlight .mo{color:#2aa198}.highlight .sb{color:#93a1a1}.highlight .sc{color:#2aa198}.highlight .sd{color:#586e75}.highlight .s2{color:#2aa198}.highlight .se{color:#cb4b16}.highlight .sh{color:#586e75}.highlight .si{color:#2aa198}.highlight .sx{color:#2aa198}.highlight .sr{color:#dc322f}.highlight .s1{color:#2aa198}.highlight .ss{color:#2aa198}.highlight .bp{color:#22b3eb}.highlight .vc{color:#22b3eb}.highlight .vg{color:#22b3eb}.highlight .vi{color:#22b3eb}.highlight .il{color:#2aa198}form{margin:0 0 5px 0}form fieldset{margin-bottom:5px;padding:0;border-width:0}form legend{display:block;width:100%;margin-bottom:10px;*margin-left:-7px;padding:0;color:#494e52;border:0;border-bottom:1px solid #ccc;white-space:normal}form p{margin-bottom:5px / 2}form ul{list-style-type:none;margin:0 0 5px 0;padding:0}form br{display:none}label,input,button,select,textarea{vertical-align:baseline;*vertical-align:middle}input,button,select,textarea{box-sizing:border-box;font-family:-apple-system,".SFNSText-Regular","San Francisco","Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif}label{display:block;margin-bottom:0.25em;color:#494e52;cursor:pointer}label small{font-size:.75em}label input,label textarea,label select{display:block}input,textarea,select{display:inline-block;width:100%;padding:0.25em;margin-bottom:0.5em;color:#494e52;background-color:#fff;border:1px solid #ccc;border-radius:4px;box-shadow:0 1px 1px rgba(0,0,0,0.125)}input:hover,textarea:hover,select:hover{border-color:#bdc1c4}.input-mini{width:60px}.input-small{width:90px}input[type="image"],input[type="checkbox"],input[type="radio"]{width:auto;height:auto;padding:0;margin:3px 0;*margin-top:0;line-height:normal;cursor:pointer;border-radius:0;border:0 \9}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0;*width:13px;*height:13px}input[type="image"]{border:0;box-shadow:none}input[type="file"]{width:auto;padding:initial;line-height:initial;border:initial;background-color:transparent;background-color:initial;box-shadow:none}input[type="button"],input[type="reset"],input[type="submit"]{width:auto;height:auto;cursor:pointer;*overflow:visible}select,input[type="file"]{*margin-top:4px}select{width:auto;background-color:#fff}select[multiple],select[size]{height:auto}textarea{resize:vertical;height:auto;overflow:auto;vertical-align:top}input[type="hidden"]{display:none}.form{position:relative}.radio,.checkbox{padding-left:18px;font-weight:normal}.radio input[type="radio"],.checkbox input[type="checkbox"]{float:left;margin-left:-18px}.radio.inline,.checkbox.inline{display:inline-block;padding-top:5px;margin-bottom:0;vertical-align:middle}.radio.inline+.radio.inline,.checkbox.inline+.checkbox.inline{margin-left:10px}input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{opacity:0.5;cursor:not-allowed}input:focus,textarea:focus{border-color:#7a8288;outline:0;outline:thin dotted \9}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus,select:focus{box-shadow:none}.help-block,.help-inline{color:#52adc8}.help-block{display:block;margin-bottom:1em;line-height:1em}.help-inline{display:inline-block;vertical-align:middle;padding-left:5px}.form-inline input,.form-inline textarea,.form-inline select{display:inline-block;margin-bottom:0}.form-inline label{display:inline-block}.form-inline .radio,.form-inline .checkbox,.form-inline .radio{padding-left:0;margin-bottom:0;vertical-align:middle}.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:left;margin-left:0;margin-right:3px}.form-search input,.form-search textarea,.form-search select{display:inline-block;margin-bottom:0}.form-search .search-query{padding-left:14px;padding-right:14px;margin-bottom:0;border-radius:14px}.form-search label{display:inline-block}.form-search .radio,.form-search .checkbox,.form-inline .radio{padding-left:0;margin-bottom:0;vertical-align:middle}.form-search .radio input[type="radio"],.form-search .checkbox input[type="checkbox"]{float:left;margin-left:0;margin-right:3px}.form--loading:before{content:''}.form--loading .form__spinner{display:block}.form:before{position:absolute;top:0;left:0;width:100%;height:100%;background-color:rgba(255,255,255,0.7);z-index:10}.form__spinner{display:none;position:absolute;top:50%;left:50%;z-index:11}#goog-fixurl ul{list-style:none;margin-left:0;padding-left:0}#goog-fixurl ul li{list-style-type:none}#goog-wm-qt{width:auto;margin-right:10px;margin-bottom:20px;padding:8px 20px;display:inline-block;font-size:.75em;background-color:#fff;color:#000;border-width:2px !important;border-style:solid !important;border-color:gray;border-radius:4px}#main{max-width:925px;margin-left:auto;margin-right:auto;clear:both;margin-top:2em;padding-left:1em;padding-right:1em;animation:intro 0.3s both;animation-delay:0.35s}#main:after{content:" ";display:block;clear:both}#main::after{clear:both;content:"";display:table}@media (min-width: 80em){#main{max-width:1280px}}@media (min-width: 57.8125em){.page{width:83.0508474576%;float:right;margin-right:0;padding-left:4.2372881356%;padding-right:16.9491525424%}}.page .page__inner-wrap{clear:both;width:100%;float:left;margin-left:0;margin-right:0}.page .page__inner-wrap .page__content,.page .page__inner-wrap .page__meta,.page .page__inner-wrap .comment__date,.page .page__inner-wrap .page__share{clear:both;width:100%;float:left;margin-left:0;margin-right:0}.page__title{margin-top:0;line-height:1}.page__title+.page__meta,.page__title+.comment__date{margin-top:-0.5em}.page__lead{font-family:-apple-system,".SFNSText-Regular","San Francisco","Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:1.25em}.page__content h2{padding-bottom:0.5em;border-bottom:1px solid #f2f3f3}.page__content p,.page__content li,.page__content dl{font-size:1em}.page__content p{margin:0 0 1.3em}.page__content a{text-decoration:underline}.page__content a:hover{text-decoration:underline}.page__content a:hover img{box-shadow:0 0 10px rgba(0,0,0,0.25)}.page__content dt{margin-top:1em;font-family:-apple-system,".SFNSText-Regular","San Francisco","Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-weight:bold}.page__content dd{margin-left:1em;font-family:-apple-system,".SFNSText-Regular","San Francisco","Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:.75em}.page__content .small{font-size:.75em}.page__content blockquote+.small{margin-top:-1.5em;padding-left:1.25rem}.page__hero{position:relative;margin-bottom:2em;clear:both;animation:intro 0.3s both;animation-delay:0.25s}.page__hero::after{clear:both;content:"";display:table}.page__hero--overlay{position:relative;margin-bottom:2em;padding:3em 0;clear:both;background-size:cover;background-repeat:no-repeat;background-position:center;animation:intro 0.3s both;animation-delay:0.25s}.page__hero--overlay::after{clear:both;content:"";display:table}.page__hero--overlay a{color:#fff}.page__hero--overlay .wrapper{padding-left:1em;padding-right:1em}@media (min-width: 80em){.page__hero--overlay .wrapper{max-width:1280px}}.page__hero--overlay .page__title,.page__hero--overlay .page__meta,.page__hero--overlay .comment__date,.page__hero--overlay .page__lead,.page__hero--overlay .btn,.page__hero--overlay #goog-wm-sb{color:#fff;text-shadow:1px 1px 4px rgba(0,0,0,0.5)}.page__hero--overlay .page__lead{max-width:768px}.page__hero--overlay .page__title{font-size:1.953em}@media (min-width: 37.5em){.page__hero--overlay .page__title{font-size:2.441em}}.page__hero-image{width:100%;height:auto;-ms-interpolation-mode:bicubic}.page__hero-caption{position:absolute;bottom:0;right:0;margin:0 auto;padding:2px 5px;color:#fff;font-family:Georgia,Times,serif;font-size:.6875em;background:#000;text-align:right;z-index:5;opacity:0.5;border-radius:4px 0 4px 0}@media (min-width: 57.8125em){.page__hero-caption{padding:5px 10px}}.page__hero-caption a{color:#fff;text-decoration:none}.page__share{margin-top:2em;padding-top:1em;border-top:1px solid #f2f3f3}@media (max-width: 37.5em){.page__share .btn span,.page__share #goog-wm-sb span{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}}.page__share-title{margin-bottom:10px;font-size:.75em;text-transform:uppercase}.page__meta,.comment__date{margin-top:2em;color:#9ba1a6;font-family:-apple-system,".SFNSText-Regular","San Francisco","Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:.75em}.page__meta p,.comment__date p{margin:0}.page__meta a,.comment__date a{color:inherit}.page__meta-title{margin-bottom:10px;font-size:.75em;text-transform:uppercase}.page__taxonomy .sep{display:none}.page__taxonomy strong{margin-right:10px}.page__taxonomy-item{display:inline-block;margin-right:5px;margin-bottom:8px;padding:5px 10px;text-decoration:none;border:1px solid #bdc1c4;border-radius:4px}.page__taxonomy-item:hover{text-decoration:none;color:#3e8296}.page__comments{clear:both;width:100%;float:left;margin-left:0;margin-right:0}.page__comments-title{margin-top:2rem;margin-bottom:10px;padding-top:2rem;font-size:.75em;border-top:1px solid #f2f3f3;text-transform:uppercase}.page__comments-form{padding:1em;background:#f2f3f3;transition:all 0.2s ease-in-out}.page__comments-form.disabled input,.page__comments-form.disabled button,.page__comments-form.disabled textarea,.page__comments-form.disabled label{pointer-events:none;cursor:not-allowed;filter:alpha(opacity=65);box-shadow:none;opacity:0.65}.comment{clear:both;margin:1em 0}.comment::after{clear:both;content:"";display:table}.comment:not(:last-child){border-bottom:1px solid #f2f3f3}.comment__avatar-wrapper{float:left;width:60px;height:60px}@media (min-width: 57.8125em){.comment__avatar-wrapper{width:100px;height:100px}}.comment__avatar{width:40px;height:40px;border-radius:50%}@media (min-width: 57.8125em){.comment__avatar{width:80px;height:80px;padding:5px;border:1px solid #f2f3f3}}.comment__content-wrapper{float:right;width:calc(100% - 60px)}@media (min-width: 57.8125em){.comment__content-wrapper{width:calc(100% - 100px)}}.comment__author{margin:0}.comment__author a{text-decoration:none}.comment__date{margin:0}.comment__date a{text-decoration:none}.page__related{margin-top:2em;padding-top:1em;border-top:1px solid #f2f3f3;clear:both;float:left}.page__related::after{clear:both;content:"";display:table}@media (min-width: 57.8125em){.page__related{margin-left:21.186440678%}}.page__related a{color:inherit;text-decoration:none}.page__related-title{margin-bottom:10px;font-size:.75em;text-transform:uppercase}.archive{margin-bottom:2em}@media (min-width: 48em){.archive{width:100%;float:left;margin-left:0;margin-right:0}}@media (min-width: 57.8125em){.archive{width:83.0508474576%;float:right;margin-right:0;padding-left:4.2372881356%}}.archive a{text-decoration:underline}.archive a:hover{text-decoration:underline}.archive a:hover img{box-shadow:0 0 10px rgba(0,0,0,0.25)}.archive__subtitle{margin:1.414em 0 0;padding-bottom:0.5em;font-size:1em;color:#9ba1a6;border-bottom:1px solid #f2f3f3}.archive__subtitle+.list__item .archive__item-title{margin-top:0.5em}.archive__item-title{margin-bottom:0.25em;font-family:-apple-system,".SFNSText-Regular","San Francisco","Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif}.archive__item-title a+a{opacity:0.5}.page__content .archive__item-title{margin-top:1em;border-bottom:none}.archive__item-excerpt{margin-top:0;font-size:.75em}.archive__item-excerpt+p{text-indent:0}.archive__item-teaser{border-radius:4px;overflow:hidden}.archive__item-teaser img{width:100%}.archive__item:hover .archive__item-teaser{box-shadow:0 0 10px rgba(0,0,0,0.25)}.archive__item:hover .archive__item-title{text-decoration:underline}@media (min-width: 48em){.list__item{padding-right:0px}}@media (min-width: 57.8125em){.list__item{padding-right:0px}}@media (min-width: 80em){.list__item{padding-right:0px}}.list__item .page__meta,.list__item .comment__date{margin:0 0 4px}.grid__item{margin-bottom:2em}.grid__item .page__meta,.grid__item .comment__date{margin:0 0 4px}.grid__item .archive__item-title{margin-top:0.5em;font-size:1em}.grid__item .archive__item-excerpt{display:none}@media (min-width: 37.5em){.grid__item{width:48.9795918367%;float:left}.grid__item:nth-child(2n+1){margin-left:0;margin-right:-100%;clear:both;margin-left:0}.grid__item:nth-child(2n+2){margin-left:51.0204081633%;margin-right:-100%;clear:none}.grid__item .archive__item-teaser{max-height:200px}}@media (min-width: 48em){.grid__item{margin-left:0;margin-right:0;width:23.4693877551%;float:left}.grid__item:nth-child(4n+1){margin-left:0;margin-right:-100%;clear:both;margin-left:0}.grid__item:nth-child(4n+2){margin-left:25.5102040816%;margin-right:-100%;clear:none}.grid__item:nth-child(4n+3){margin-left:51.0204081633%;margin-right:-100%;clear:none}.grid__item:nth-child(4n+4){margin-left:76.5306122449%;margin-right:-100%;clear:none}.grid__item .archive__item-teaser{max-height:120px}.grid__item .archive__item-excerpt{display:block;font-size:.75em}}.feature__wrapper{clear:both;margin-bottom:2em;border-bottom:1px solid #f2f3f3}.feature__wrapper::after{clear:both;content:"";display:table}.feature__item{margin-bottom:2em;font-size:1.25rem}@media (min-width: 37.5em){.feature__item{margin-bottom:0;width:32.2033898305%;float:left}.feature__item:nth-child(3n+1){margin-left:0;margin-right:-100%;clear:both;margin-left:0}.feature__item:nth-child(3n+2){margin-left:33.8983050847%;margin-right:-100%;clear:none}.feature__item:nth-child(3n+3){margin-left:67.7966101695%;margin-right:-100%;clear:none}.feature__item .feature__item-teaser{max-height:200px;overflow:hidden}}.feature__item--left{clear:both;width:100%;float:left;margin-left:0;margin-right:0;font-size:1.25rem}.feature__item--left .archive__item-teaser{margin-bottom:2em}@media (min-width: 37.5em){.feature__item--left .archive__item-teaser{width:40.6779661017%;float:left;margin-right:1.6949152542%}.feature__item--left .archive__item-body{width:57.6271186441%;float:right;margin-right:0;padding-left:4.2372881356%;padding-right:8.4745762712%}}.feature__item--right{clear:both;width:100%;float:left;margin-left:0;margin-right:0;font-size:1.25rem}.feature__item--right .archive__item-teaser{margin-bottom:2em}@media (min-width: 37.5em){.feature__item--right{text-align:right}.feature__item--right .archive__item-teaser{width:40.6779661017%;float:right;margin-left:1.6949152542%}.feature__item--right .archive__item-body{width:57.6271186441%;float:left;margin-left:0;padding-left:4.2372881356%;padding-right:8.4745762712%}}.feature__item--center{clear:both;width:100%;float:left;margin-left:0;margin-right:0;font-size:1.25rem}.feature__item--center .archive__item-teaser{margin-bottom:2em}@media (min-width: 37.5em){.feature__item--center{text-align:center}.feature__item--center .archive__item-teaser{margin:0 auto;width:40.6779661017%}.feature__item--center .archive__item-body{margin:0 auto;width:57.6271186441%}}.sidebar{-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0);clear:both;margin-bottom:1em}.sidebar::after{clear:both;content:"";display:table}@media (min-width: 57.8125em){.sidebar{width:15.2542372881%;float:left;margin-right:1.6949152542%;opacity:1;-webkit-transition:opacity 0.2s ease-in-out;transition:opacity 0.2s ease-in-out}.sidebar:hover{opacity:1}}@media (min-width: 80em){.sidebar{padding-right:0}}.sidebar h2,.sidebar h3,.sidebar h4,.sidebar h5,.sidebar h6{margin-bottom:0;font-family:-apple-system,".SFNSText-Regular","San Francisco","Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif}.sidebar h3,.sidebar h4{font-size:1em}.sidebar p,.sidebar li{font-family:-apple-system,".SFNSText-Regular","San Francisco","Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:.75em;line-height:1.5}.sidebar img{width:100%}.sidebar__right{margin-bottom:1em}@media (min-width: 57.8125em){.sidebar__right{position:relative;float:right;width:0px;margin-left:2.5423728814%;z-index:10}}@media (min-width: 80em){.sidebar__right{width:0px}}.author__avatar{display:table-cell;vertical-align:top;width:36px}@media (min-width: 57.8125em){.author__avatar{display:block;width:auto;height:auto}}.author__avatar img{max-width:175px}@media (min-width: 57.8125em){.author__avatar img{padding:5px;border:1px solid #f2f3f3}}.author__content{display:table-cell;vertical-align:top;padding-left:15px;padding-right:25px;line-height:1}@media (min-width: 57.8125em){.author__content{display:block;width:100%;padding-left:0;padding-right:0}}.author__name{margin:0}@media (min-width: 57.8125em){.author__name{margin-top:10px;margin-bottom:10px}}.sidebar .author__name{font-family:-apple-system,".SFNSText-Regular","San Francisco","Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:1em}.author__bio{margin:0}@media (min-width: 57.8125em){.author__bio{margin-top:10px;margin-bottom:20px}}.author__urls-wrapper{position:relative;display:table-cell;vertical-align:middle;font-family:-apple-system,".SFNSText-Regular","San Francisco","Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;z-index:10;position:relative;cursor:pointer}.author__urls-wrapper li:last-child a{margin-bottom:0}@media (min-width: 57.8125em){.author__urls-wrapper{display:block}}.author__urls-wrapper button{margin-bottom:0}@media (min-width: 57.8125em){.author__urls-wrapper button{display:none}}.author__urls{display:none;position:absolute;right:0;margin-top:15px;padding:10px;list-style-type:none;border:1px solid #f2f3f3;border-radius:4px;background:#fff;z-index:-1;box-shadow:0 0 10px rgba(0,0,0,0.25);cursor:default}@media (min-width: 57.8125em){.author__urls{display:block;position:relative;margin:0;padding:0;border:0;background:transparent;box-shadow:none}}.author__urls:before{display:block;content:"";position:absolute;top:-11px;left:calc(50% - 10px);width:0;border-style:solid;border-width:0 10px 10px;border-color:#f2f3f3 transparent;z-index:0}@media (min-width: 57.8125em){.author__urls:before{display:none}}.author__urls:after{display:block;content:"";position:absolute;top:-10px;left:calc(50% - 10px);width:0;border-style:solid;border-width:0 10px 10px;border-color:#fff transparent;z-index:1}@media (min-width: 57.8125em){.author__urls:after{display:none}}.author__urls li{white-space:nowrap}.author__urls a{display:block;margin-bottom:5px;padding-right:5px;padding-top:2px;padding-bottom:2px;color:inherit;font-size:1em;text-decoration:none}.author__urls a:hover{text-decoration:underline}/*!
+ * Font Awesome Free 5.5.0 by @fontawesome - https://fontawesome.com
+ * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
+ */.fa,.fas,.far,.fal,.fab{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-lg{font-size:1.3333333333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:solid 0.08em #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fas.fa-pull-left,.far.fa-pull-left,.fal.fa-pull-left,.fab.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fas.fa-pull-right,.far.fa-pull-right,.fal.fa-pull-right,.fab.fa-pull-right{margin-left:.3em}.fa-spin{animation:fa-spin 2s infinite linear}.fa-pulse{animation:fa-spin 1s infinite steps(8)}@keyframes fa-spin{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";transform:scale(1, -1)}.fa-flip-horizontal.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=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{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-500px:before{content:""}.fa-accessible-icon:before{content:""}.fa-accusoft:before{content:""}.fa-acquisitions-incorporated:before{content:""}.fa-ad:before{content:""}.fa-address-book:before{content:""}.fa-address-card:before{content:""}.fa-adjust:before{content:""}.fa-adn:before{content:""}.fa-adversal:before{content:""}.fa-affiliatetheme:before{content:""}.fa-air-freshener:before{content:""}.fa-algolia:before{content:""}.fa-align-center:before{content:""}.fa-align-justify:before{content:""}.fa-align-left:before{content:""}.fa-align-right:before{content:""}.fa-alipay:before{content:""}.fa-allergies:before{content:""}.fa-amazon:before{content:""}.fa-amazon-pay:before{content:""}.fa-ambulance:before{content:""}.fa-american-sign-language-interpreting:before{content:""}.fa-amilia:before{content:""}.fa-anchor:before{content:""}.fa-android:before{content:""}.fa-angellist:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angry:before{content:""}.fa-angrycreative:before{content:""}.fa-angular:before{content:""}.fa-ankh:before{content:""}.fa-app-store:before{content:""}.fa-app-store-ios:before{content:""}.fa-apper:before{content:""}.fa-apple:before{content:""}.fa-apple-alt:before{content:""}.fa-apple-pay:before{content:""}.fa-archive:before{content:""}.fa-archway:before{content:""}.fa-arrow-alt-circle-down:before{content:""}.fa-arrow-alt-circle-left:before{content:""}.fa-arrow-alt-circle-right:before{content:""}.fa-arrow-alt-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-arrow-circle-left:before{content:""}.fa-arrow-circle-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-down:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrows-alt:before{content:""}.fa-arrows-alt-h:before{content:""}.fa-arrows-alt-v:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-asterisk:before{content:""}.fa-asymmetrik:before{content:""}.fa-at:before{content:""}.fa-atlas:before{content:""}.fa-atom:before{content:""}.fa-audible:before{content:""}.fa-audio-description:before{content:""}.fa-autoprefixer:before{content:""}.fa-avianex:before{content:""}.fa-aviato:before{content:""}.fa-award:before{content:""}.fa-aws:before{content:""}.fa-backspace:before{content:""}.fa-backward:before{content:""}.fa-balance-scale:before{content:""}.fa-ban:before{content:""}.fa-band-aid:before{content:""}.fa-bandcamp:before{content:""}.fa-barcode:before{content:""}.fa-bars:before{content:""}.fa-baseball-ball:before{content:""}.fa-basketball-ball:before{content:""}.fa-bath:before{content:""}.fa-battery-empty:before{content:""}.fa-battery-full:before{content:""}.fa-battery-half:before{content:""}.fa-battery-quarter:before{content:""}.fa-battery-three-quarters:before{content:""}.fa-bed:before{content:""}.fa-beer:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-bell:before{content:""}.fa-bell-slash:before{content:""}.fa-bezier-curve:before{content:""}.fa-bible:before{content:""}.fa-bicycle:before{content:""}.fa-bimobject:before{content:""}.fa-binoculars:before{content:""}.fa-birthday-cake:before{content:""}.fa-bitbucket:before{content:""}.fa-bitcoin:before{content:""}.fa-bity:before{content:""}.fa-black-tie:before{content:""}.fa-blackberry:before{content:""}.fa-blender:before{content:""}.fa-blender-phone:before{content:""}.fa-blind:before{content:""}.fa-blogger:before{content:""}.fa-blogger-b:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-bold:before{content:""}.fa-bolt:before{content:""}.fa-bomb:before{content:""}.fa-bone:before{content:""}.fa-bong:before{content:""}.fa-book:before{content:""}.fa-book-dead:before{content:""}.fa-book-open:before{content:""}.fa-book-reader:before{content:""}.fa-bookmark:before{content:""}.fa-bowling-ball:before{content:""}.fa-box:before{content:""}.fa-box-open:before{content:""}.fa-boxes:before{content:""}.fa-braille:before{content:""}.fa-brain:before{content:""}.fa-briefcase:before{content:""}.fa-briefcase-medical:before{content:""}.fa-broadcast-tower:before{content:""}.fa-broom:before{content:""}.fa-brush:before{content:""}.fa-btc:before{content:""}.fa-bug:before{content:""}.fa-building:before{content:""}.fa-bullhorn:before{content:""}.fa-bullseye:before{content:""}.fa-burn:before{content:""}.fa-buromobelexperte:before{content:""}.fa-bus:before{content:""}.fa-bus-alt:before{content:""}.fa-business-time:before{content:""}.fa-buysellads:before{content:""}.fa-calculator:before{content:""}.fa-calendar:before{content:""}.fa-calendar-alt:before{content:""}.fa-calendar-check:before{content:""}.fa-calendar-minus:before{content:""}.fa-calendar-plus:before{content:""}.fa-calendar-times:before{content:""}.fa-camera:before{content:""}.fa-camera-retro:before{content:""}.fa-campground:before{content:""}.fa-cannabis:before{content:""}.fa-capsules:before{content:""}.fa-car:before{content:""}.fa-car-alt:before{content:""}.fa-car-battery:before{content:""}.fa-car-crash:before{content:""}.fa-car-side:before{content:""}.fa-caret-down:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-caret-square-down:before{content:""}.fa-caret-square-left:before{content:""}.fa-caret-square-right:before{content:""}.fa-caret-square-up:before{content:""}.fa-caret-up:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-cart-plus:before{content:""}.fa-cat:before{content:""}.fa-cc-amazon-pay:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-apple-pay:before{content:""}.fa-cc-diners-club:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-cc-visa:before{content:""}.fa-centercode:before{content:""}.fa-certificate:before{content:""}.fa-chair:before{content:""}.fa-chalkboard:before{content:""}.fa-chalkboard-teacher:before{content:""}.fa-charging-station:before{content:""}.fa-chart-area:before{content:""}.fa-chart-bar:before{content:""}.fa-chart-line:before{content:""}.fa-chart-pie:before{content:""}.fa-check:before{content:""}.fa-check-circle:before{content:""}.fa-check-double:before{content:""}.fa-check-square:before{content:""}.fa-chess:before{content:""}.fa-chess-bishop:before{content:""}.fa-chess-board:before{content:""}.fa-chess-king:before{content:""}.fa-chess-knight:before{content:""}.fa-chess-pawn:before{content:""}.fa-chess-queen:before{content:""}.fa-chess-rook:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-down:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-chevron-up:before{content:""}.fa-child:before{content:""}.fa-chrome:before{content:""}.fa-church:before{content:""}.fa-circle:before{content:""}.fa-circle-notch:before{content:""}.fa-city:before{content:""}.fa-clipboard:before{content:""}.fa-clipboard-check:before{content:""}.fa-clipboard-list:before{content:""}.fa-clock:before{content:""}.fa-clone:before{content:""}.fa-closed-captioning:before{content:""}.fa-cloud:before{content:""}.fa-cloud-download-alt:before{content:""}.fa-cloud-meatball:before{content:""}.fa-cloud-moon:before{content:""}.fa-cloud-moon-rain:before{content:""}.fa-cloud-rain:before{content:""}.fa-cloud-showers-heavy:before{content:""}.fa-cloud-sun:before{content:""}.fa-cloud-sun-rain:before{content:""}.fa-cloud-upload-alt:before{content:""}.fa-cloudscale:before{content:""}.fa-cloudsmith:before{content:""}.fa-cloudversify:before{content:""}.fa-cocktail:before{content:""}.fa-code:before{content:""}.fa-code-branch:before{content:""}.fa-codepen:before{content:""}.fa-codiepie:before{content:""}.fa-coffee:before{content:""}.fa-cog:before{content:""}.fa-cogs:before{content:""}.fa-coins:before{content:""}.fa-columns:before{content:""}.fa-comment:before{content:""}.fa-comment-alt:before{content:""}.fa-comment-dollar:before{content:""}.fa-comment-dots:before{content:""}.fa-comment-slash:before{content:""}.fa-comments:before{content:""}.fa-comments-dollar:before{content:""}.fa-compact-disc:before{content:""}.fa-compass:before{content:""}.fa-compress:before{content:""}.fa-concierge-bell:before{content:""}.fa-connectdevelop:before{content:""}.fa-contao:before{content:""}.fa-cookie:before{content:""}.fa-cookie-bite:before{content:""}.fa-copy:before{content:""}.fa-copyright:before{content:""}.fa-couch:before{content:""}.fa-cpanel:before{content:""}.fa-creative-commons:before{content:""}.fa-creative-commons-by:before{content:""}.fa-creative-commons-nc:before{content:""}.fa-creative-commons-nc-eu:before{content:""}.fa-creative-commons-nc-jp:before{content:""}.fa-creative-commons-nd:before{content:""}.fa-creative-commons-pd:before{content:""}.fa-creative-commons-pd-alt:before{content:""}.fa-creative-commons-remix:before{content:""}.fa-creative-commons-sa:before{content:""}.fa-creative-commons-sampling:before{content:""}.fa-creative-commons-sampling-plus:before{content:""}.fa-creative-commons-share:before{content:""}.fa-creative-commons-zero:before{content:""}.fa-credit-card:before{content:""}.fa-critical-role:before{content:""}.fa-crop:before{content:""}.fa-crop-alt:before{content:""}.fa-cross:before{content:""}.fa-crosshairs:before{content:""}.fa-crow:before{content:""}.fa-crown:before{content:""}.fa-css3:before{content:""}.fa-css3-alt:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-cut:before{content:""}.fa-cuttlefish:before{content:""}.fa-d-and-d:before{content:""}.fa-d-and-d-beyond:before{content:""}.fa-dashcube:before{content:""}.fa-database:before{content:""}.fa-deaf:before{content:""}.fa-delicious:before{content:""}.fa-democrat:before{content:""}.fa-deploydog:before{content:""}.fa-deskpro:before{content:""}.fa-desktop:before{content:""}.fa-dev:before{content:""}.fa-deviantart:before{content:""}.fa-dharmachakra:before{content:""}.fa-diagnoses:before{content:""}.fa-dice:before{content:""}.fa-dice-d20:before{content:""}.fa-dice-d6:before{content:""}.fa-dice-five:before{content:""}.fa-dice-four:before{content:""}.fa-dice-one:before{content:""}.fa-dice-six:before{content:""}.fa-dice-three:before{content:""}.fa-dice-two:before{content:""}.fa-digg:before{content:""}.fa-digital-ocean:before{content:""}.fa-digital-tachograph:before{content:""}.fa-directions:before{content:""}.fa-discord:before{content:""}.fa-discourse:before{content:""}.fa-divide:before{content:""}.fa-dizzy:before{content:""}.fa-dna:before{content:""}.fa-dochub:before{content:""}.fa-docker:before{content:""}.fa-dog:before{content:""}.fa-dollar-sign:before{content:""}.fa-dolly:before{content:""}.fa-dolly-flatbed:before{content:""}.fa-donate:before{content:""}.fa-door-closed:before{content:""}.fa-door-open:before{content:""}.fa-dot-circle:before{content:""}.fa-dove:before{content:""}.fa-download:before{content:""}.fa-draft2digital:before{content:""}.fa-drafting-compass:before{content:""}.fa-dragon:before{content:""}.fa-draw-polygon:before{content:""}.fa-dribbble:before{content:""}.fa-dribbble-square:before{content:""}.fa-dropbox:before{content:""}.fa-drum:before{content:""}.fa-drum-steelpan:before{content:""}.fa-drumstick-bite:before{content:""}.fa-drupal:before{content:""}.fa-dumbbell:before{content:""}.fa-dungeon:before{content:""}.fa-dyalog:before{content:""}.fa-earlybirds:before{content:""}.fa-ebay:before{content:""}.fa-edge:before{content:""}.fa-edit:before{content:""}.fa-eject:before{content:""}.fa-elementor:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-ello:before{content:""}.fa-ember:before{content:""}.fa-empire:before{content:""}.fa-envelope:before{content:""}.fa-envelope-open:before{content:""}.fa-envelope-open-text:before{content:""}.fa-envelope-square:before{content:""}.fa-envira:before{content:""}.fa-equals:before{content:""}.fa-eraser:before{content:""}.fa-erlang:before{content:""}.fa-ethereum:before{content:""}.fa-etsy:before{content:""}.fa-euro-sign:before{content:""}.fa-exchange-alt:before{content:""}.fa-exclamation:before{content:""}.fa-exclamation-circle:before{content:""}.fa-exclamation-triangle:before{content:""}.fa-expand:before{content:""}.fa-expand-arrows-alt:before{content:""}.fa-expeditedssl:before{content:""}.fa-external-link-alt:before{content:""}.fa-external-link-square-alt:before{content:""}.fa-eye:before{content:""}.fa-eye-dropper:before{content:""}.fa-eye-slash:before{content:""}.fa-facebook:before{content:""}.fa-facebook-f:before{content:""}.fa-facebook-messenger:before{content:""}.fa-facebook-square:before{content:""}.fa-fantasy-flight-games:before{content:""}.fa-fast-backward:before{content:""}.fa-fast-forward:before{content:""}.fa-fax:before{content:""}.fa-feather:before{content:""}.fa-feather-alt:before{content:""}.fa-female:before{content:""}.fa-fighter-jet:before{content:""}.fa-file:before{content:""}.fa-file-alt:before{content:""}.fa-file-archive:before{content:""}.fa-file-audio:before{content:""}.fa-file-code:before{content:""}.fa-file-contract:before{content:""}.fa-file-csv:before{content:""}.fa-file-download:before{content:""}.fa-file-excel:before{content:""}.fa-file-export:before{content:""}.fa-file-image:before{content:""}.fa-file-import:before{content:""}.fa-file-invoice:before{content:""}.fa-file-invoice-dollar:before{content:""}.fa-file-medical:before{content:""}.fa-file-medical-alt:before{content:""}.fa-file-pdf:before{content:""}.fa-file-powerpoint:before{content:""}.fa-file-prescription:before{content:""}.fa-file-signature:before{content:""}.fa-file-upload:before{content:""}.fa-file-video:before{content:""}.fa-file-word:before{content:""}.fa-fill:before{content:""}.fa-fill-drip:before{content:""}.fa-film:before{content:""}.fa-filter:before{content:""}.fa-fingerprint:before{content:""}.fa-fire:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-firefox:before{content:""}.fa-first-aid:before{content:""}.fa-first-order:before{content:""}.fa-first-order-alt:before{content:""}.fa-firstdraft:before{content:""}.fa-fish:before{content:""}.fa-fist-raised:before{content:""}.fa-flag:before{content:""}.fa-flag-checkered:before{content:""}.fa-flag-usa:before{content:""}.fa-flask:before{content:""}.fa-flickr:before{content:""}.fa-flipboard:before{content:""}.fa-flushed:before{content:""}.fa-fly:before{content:""}.fa-folder:before{content:""}.fa-folder-minus:before{content:""}.fa-folder-open:before{content:""}.fa-folder-plus:before{content:""}.fa-font:before{content:""}.fa-font-awesome:before{content:""}.fa-font-awesome-alt:before{content:""}.fa-font-awesome-flag:before{content:""}.fa-font-awesome-logo-full:before{content:""}.fa-fonticons:before{content:""}.fa-fonticons-fi:before{content:""}.fa-football-ball:before{content:""}.fa-fort-awesome:before{content:""}.fa-fort-awesome-alt:before{content:""}.fa-forumbee:before{content:""}.fa-forward:before{content:""}.fa-foursquare:before{content:""}.fa-free-code-camp:before{content:""}.fa-freebsd:before{content:""}.fa-frog:before{content:""}.fa-frown:before{content:""}.fa-frown-open:before{content:""}.fa-fulcrum:before{content:""}.fa-funnel-dollar:before{content:""}.fa-futbol:before{content:""}.fa-galactic-republic:before{content:""}.fa-galactic-senate:before{content:""}.fa-gamepad:before{content:""}.fa-gas-pump:before{content:""}.fa-gavel:before{content:""}.fa-gem:before{content:""}.fa-genderless:before{content:""}.fa-get-pocket:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-ghost:before{content:""}.fa-gift:before{content:""}.fa-git:before{content:""}.fa-git-square:before{content:""}.fa-github:before{content:""}.fa-github-alt:before{content:""}.fa-github-square:before{content:""}.fa-gitkraken:before{content:""}.fa-gitlab:before{content:""}.fa-gitter:before{content:""}.fa-glass-martini:before{content:""}.fa-glass-martini-alt:before{content:""}.fa-glasses:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-globe:before{content:""}.fa-globe-africa:before{content:""}.fa-globe-americas:before{content:""}.fa-globe-asia:before{content:""}.fa-gofore:before{content:""}.fa-golf-ball:before{content:""}.fa-goodreads:before{content:""}.fa-goodreads-g:before{content:""}.fa-google:before{content:""}.fa-google-drive:before{content:""}.fa-google-play:before{content:""}.fa-google-plus:before{content:""}.fa-google-plus-g:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-wallet:before{content:""}.fa-gopuram:before{content:""}.fa-graduation-cap:before{content:""}.fa-gratipay:before{content:""}.fa-grav:before{content:""}.fa-greater-than:before{content:""}.fa-greater-than-equal:before{content:""}.fa-grimace:before{content:""}.fa-grin:before{content:""}.fa-grin-alt:before{content:""}.fa-grin-beam:before{content:""}.fa-grin-beam-sweat:before{content:""}.fa-grin-hearts:before{content:""}.fa-grin-squint:before{content:""}.fa-grin-squint-tears:before{content:""}.fa-grin-stars:before{content:""}.fa-grin-tears:before{content:""}.fa-grin-tongue:before{content:""}.fa-grin-tongue-squint:before{content:""}.fa-grin-tongue-wink:before{content:""}.fa-grin-wink:before{content:""}.fa-grip-horizontal:before{content:""}.fa-grip-vertical:before{content:""}.fa-gripfire:before{content:""}.fa-grunt:before{content:""}.fa-gulp:before{content:""}.fa-h-square:before{content:""}.fa-hacker-news:before{content:""}.fa-hacker-news-square:before{content:""}.fa-hackerrank:before{content:""}.fa-hammer:before{content:""}.fa-hamsa:before{content:""}.fa-hand-holding:before{content:""}.fa-hand-holding-heart:before{content:""}.fa-hand-holding-usd:before{content:""}.fa-hand-lizard:before{content:""}.fa-hand-paper:before{content:""}.fa-hand-peace:before{content:""}.fa-hand-point-down:before{content:""}.fa-hand-point-left:before{content:""}.fa-hand-point-right:before{content:""}.fa-hand-point-up:before{content:""}.fa-hand-pointer:before{content:""}.fa-hand-rock:before{content:""}.fa-hand-scissors:before{content:""}.fa-hand-spock:before{content:""}.fa-hands:before{content:""}.fa-hands-helping:before{content:""}.fa-handshake:before{content:""}.fa-hanukiah:before{content:""}.fa-hashtag:before{content:""}.fa-hat-wizard:before{content:""}.fa-haykal:before{content:""}.fa-hdd:before{content:""}.fa-heading:before{content:""}.fa-headphones:before{content:""}.fa-headphones-alt:before{content:""}.fa-headset:before{content:""}.fa-heart:before{content:""}.fa-heartbeat:before{content:""}.fa-helicopter:before{content:""}.fa-highlighter:before{content:""}.fa-hiking:before{content:""}.fa-hippo:before{content:""}.fa-hips:before{content:""}.fa-hire-a-helper:before{content:""}.fa-history:before{content:""}.fa-hockey-puck:before{content:""}.fa-home:before{content:""}.fa-hooli:before{content:""}.fa-hornbill:before{content:""}.fa-horse:before{content:""}.fa-hospital:before{content:""}.fa-hospital-alt:before{content:""}.fa-hospital-symbol:before{content:""}.fa-hot-tub:before{content:""}.fa-hotel:before{content:""}.fa-hotjar:before{content:""}.fa-hourglass:before{content:""}.fa-hourglass-end:before{content:""}.fa-hourglass-half:before{content:""}.fa-hourglass-start:before{content:""}.fa-house-damage:before{content:""}.fa-houzz:before{content:""}.fa-hryvnia:before{content:""}.fa-html5:before{content:""}.fa-hubspot:before{content:""}.fa-i-cursor:before{content:""}.fa-id-badge:before{content:""}.fa-id-card:before{content:""}.fa-id-card-alt:before{content:""}.fa-image:before{content:""}.fa-images:before{content:""}.fa-imdb:before{content:""}.fa-inbox:before{content:""}.fa-indent:before{content:""}.fa-industry:before{content:""}.fa-infinity:before{content:""}.fa-info:before{content:""}.fa-info-circle:before{content:""}.fa-instagram:before{content:""}.fa-internet-explorer:before{content:""}.fa-ioxhost:before{content:""}.fa-italic:before{content:""}.fa-itunes:before{content:""}.fa-itunes-note:before{content:""}.fa-java:before{content:""}.fa-jedi:before{content:""}.fa-jedi-order:before{content:""}.fa-jenkins:before{content:""}.fa-joget:before{content:""}.fa-joint:before{content:""}.fa-joomla:before{content:""}.fa-journal-whills:before{content:""}.fa-js:before{content:""}.fa-js-square:before{content:""}.fa-jsfiddle:before{content:""}.fa-kaaba:before{content:""}.fa-kaggle:before{content:""}.fa-key:before{content:""}.fa-keybase:before{content:""}.fa-keyboard:before{content:""}.fa-keycdn:before{content:""}.fa-khanda:before{content:""}.fa-kickstarter:before{content:""}.fa-kickstarter-k:before{content:""}.fa-kiss:before{content:""}.fa-kiss-beam:before{content:""}.fa-kiss-wink-heart:before{content:""}.fa-kiwi-bird:before{content:""}.fa-korvue:before{content:""}.fa-landmark:before{content:""}.fa-language:before{content:""}.fa-laptop:before{content:""}.fa-laptop-code:before{content:""}.fa-laravel:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-laugh:before{content:""}.fa-laugh-beam:before{content:""}.fa-laugh-squint:before{content:""}.fa-laugh-wink:before{content:""}.fa-layer-group:before{content:""}.fa-leaf:before{content:""}.fa-leanpub:before{content:""}.fa-lemon:before{content:""}.fa-less:before{content:""}.fa-less-than:before{content:""}.fa-less-than-equal:before{content:""}.fa-level-down-alt:before{content:""}.fa-level-up-alt:before{content:""}.fa-life-ring:before{content:""}.fa-lightbulb:before{content:""}.fa-line:before{content:""}.fa-link:before{content:""}.fa-linkedin:before{content:""}.fa-linkedin-in:before{content:""}.fa-linode:before{content:""}.fa-linux:before{content:""}.fa-lira-sign:before{content:""}.fa-list:before{content:""}.fa-list-alt:before{content:""}.fa-list-ol:before{content:""}.fa-list-ul:before{content:""}.fa-location-arrow:before{content:""}.fa-lock:before{content:""}.fa-lock-open:before{content:""}.fa-long-arrow-alt-down:before{content:""}.fa-long-arrow-alt-left:before{content:""}.fa-long-arrow-alt-right:before{content:""}.fa-long-arrow-alt-up:before{content:""}.fa-low-vision:before{content:""}.fa-luggage-cart:before{content:""}.fa-lyft:before{content:""}.fa-magento:before{content:""}.fa-magic:before{content:""}.fa-magnet:before{content:""}.fa-mail-bulk:before{content:""}.fa-mailchimp:before{content:""}.fa-male:before{content:""}.fa-mandalorian:before{content:""}.fa-map:before{content:""}.fa-map-marked:before{content:""}.fa-map-marked-alt:before{content:""}.fa-map-marker:before{content:""}.fa-map-marker-alt:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-markdown:before{content:""}.fa-marker:before{content:""}.fa-mars:before{content:""}.fa-mars-double:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mask:before{content:""}.fa-mastodon:before{content:""}.fa-maxcdn:before{content:""}.fa-medal:before{content:""}.fa-medapps:before{content:""}.fa-medium:before{content:""}.fa-medium-m:before{content:""}.fa-medkit:before{content:""}.fa-medrt:before{content:""}.fa-meetup:before{content:""}.fa-megaport:before{content:""}.fa-meh:before{content:""}.fa-meh-blank:before{content:""}.fa-meh-rolling-eyes:before{content:""}.fa-memory:before{content:""}.fa-menorah:before{content:""}.fa-mercury:before{content:""}.fa-meteor:before{content:""}.fa-microchip:before{content:""}.fa-microphone:before{content:""}.fa-microphone-alt:before{content:""}.fa-microphone-alt-slash:before{content:""}.fa-microphone-slash:before{content:""}.fa-microscope:before{content:""}.fa-microsoft:before{content:""}.fa-minus:before{content:""}.fa-minus-circle:before{content:""}.fa-minus-square:before{content:""}.fa-mix:before{content:""}.fa-mixcloud:before{content:""}.fa-mizuni:before{content:""}.fa-mobile:before{content:""}.fa-mobile-alt:before{content:""}.fa-modx:before{content:""}.fa-monero:before{content:""}.fa-money-bill:before{content:""}.fa-money-bill-alt:before{content:""}.fa-money-bill-wave:before{content:""}.fa-money-bill-wave-alt:before{content:""}.fa-money-check:before{content:""}.fa-money-check-alt:before{content:""}.fa-monument:before{content:""}.fa-moon:before{content:""}.fa-mortar-pestle:before{content:""}.fa-mosque:before{content:""}.fa-motorcycle:before{content:""}.fa-mountain:before{content:""}.fa-mouse-pointer:before{content:""}.fa-music:before{content:""}.fa-napster:before{content:""}.fa-neos:before{content:""}.fa-network-wired:before{content:""}.fa-neuter:before{content:""}.fa-newspaper:before{content:""}.fa-nimblr:before{content:""}.fa-nintendo-switch:before{content:""}.fa-node:before{content:""}.fa-node-js:before{content:""}.fa-not-equal:before{content:""}.fa-notes-medical:before{content:""}.fa-npm:before{content:""}.fa-ns8:before{content:""}.fa-nutritionix:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-oil-can:before{content:""}.fa-old-republic:before{content:""}.fa-om:before{content:""}.fa-opencart:before{content:""}.fa-openid:before{content:""}.fa-opera:before{content:""}.fa-optin-monster:before{content:""}.fa-osi:before{content:""}.fa-otter:before{content:""}.fa-outdent:before{content:""}.fa-page4:before{content:""}.fa-pagelines:before{content:""}.fa-paint-brush:before{content:""}.fa-paint-roller:before{content:""}.fa-palette:before{content:""}.fa-palfed:before{content:""}.fa-pallet:before{content:""}.fa-paper-plane:before{content:""}.fa-paperclip:before{content:""}.fa-parachute-box:before{content:""}.fa-paragraph:before{content:""}.fa-parking:before{content:""}.fa-passport:before{content:""}.fa-pastafarianism:before{content:""}.fa-paste:before{content:""}.fa-patreon:before{content:""}.fa-pause:before{content:""}.fa-pause-circle:before{content:""}.fa-paw:before{content:""}.fa-paypal:before{content:""}.fa-peace:before{content:""}.fa-pen:before{content:""}.fa-pen-alt:before{content:""}.fa-pen-fancy:before{content:""}.fa-pen-nib:before{content:""}.fa-pen-square:before{content:""}.fa-pencil-alt:before{content:""}.fa-pencil-ruler:before{content:""}.fa-penny-arcade:before{content:""}.fa-people-carry:before{content:""}.fa-percent:before{content:""}.fa-percentage:before{content:""}.fa-periscope:before{content:""}.fa-person-booth:before{content:""}.fa-phabricator:before{content:""}.fa-phoenix-framework:before{content:""}.fa-phoenix-squadron:before{content:""}.fa-phone:before{content:""}.fa-phone-slash:before{content:""}.fa-phone-square:before{content:""}.fa-phone-volume:before{content:""}.fa-php:before{content:""}.fa-pied-piper:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-pied-piper-hat:before{content:""}.fa-pied-piper-pp:before{content:""}.fa-piggy-bank:before{content:""}.fa-pills:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-p:before{content:""}.fa-pinterest-square:before{content:""}.fa-place-of-worship:before{content:""}.fa-plane:before{content:""}.fa-plane-arrival:before{content:""}.fa-plane-departure:before{content:""}.fa-play:before{content:""}.fa-play-circle:before{content:""}.fa-playstation:before{content:""}.fa-plug:before{content:""}.fa-plus:before{content:""}.fa-plus-circle:before{content:""}.fa-plus-square:before{content:""}.fa-podcast:before{content:""}.fa-poll:before{content:""}.fa-poll-h:before{content:""}.fa-poo:before{content:""}.fa-poo-storm:before{content:""}.fa-poop:before{content:""}.fa-portrait:before{content:""}.fa-pound-sign:before{content:""}.fa-power-off:before{content:""}.fa-pray:before{content:""}.fa-praying-hands:before{content:""}.fa-prescription:before{content:""}.fa-prescription-bottle:before{content:""}.fa-prescription-bottle-alt:before{content:""}.fa-print:before{content:""}.fa-procedures:before{content:""}.fa-product-hunt:before{content:""}.fa-project-diagram:before{content:""}.fa-pushed:before{content:""}.fa-puzzle-piece:before{content:""}.fa-python:before{content:""}.fa-qq:before{content:""}.fa-qrcode:before{content:""}.fa-question:before{content:""}.fa-question-circle:before{content:""}.fa-quidditch:before{content:""}.fa-quinscape:before{content:""}.fa-quora:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-quran:before{content:""}.fa-r-project:before{content:""}.fa-rainbow:before{content:""}.fa-random:before{content:""}.fa-ravelry:before{content:""}.fa-react:before{content:""}.fa-reacteurope:before{content:""}.fa-readme:before{content:""}.fa-rebel:before{content:""}.fa-receipt:before{content:""}.fa-recycle:before{content:""}.fa-red-river:before{content:""}.fa-reddit:before{content:""}.fa-reddit-alien:before{content:""}.fa-reddit-square:before{content:""}.fa-redo:before{content:""}.fa-redo-alt:before{content:""}.fa-registered:before{content:""}.fa-renren:before{content:""}.fa-reply:before{content:""}.fa-reply-all:before{content:""}.fa-replyd:before{content:""}.fa-republican:before{content:""}.fa-researchgate:before{content:""}.fa-resolving:before{content:""}.fa-retweet:before{content:""}.fa-rev:before{content:""}.fa-ribbon:before{content:""}.fa-ring:before{content:""}.fa-road:before{content:""}.fa-robot:before{content:""}.fa-rocket:before{content:""}.fa-rocketchat:before{content:""}.fa-rockrms:before{content:""}.fa-route:before{content:""}.fa-rss:before{content:""}.fa-rss-square:before{content:""}.fa-ruble-sign:before{content:""}.fa-ruler:before{content:""}.fa-ruler-combined:before{content:""}.fa-ruler-horizontal:before{content:""}.fa-ruler-vertical:before{content:""}.fa-running:before{content:""}.fa-rupee-sign:before{content:""}.fa-sad-cry:before{content:""}.fa-sad-tear:before{content:""}.fa-safari:before{content:""}.fa-sass:before{content:""}.fa-save:before{content:""}.fa-schlix:before{content:""}.fa-school:before{content:""}.fa-screwdriver:before{content:""}.fa-scribd:before{content:""}.fa-scroll:before{content:""}.fa-search:before{content:""}.fa-search-dollar:before{content:""}.fa-search-location:before{content:""}.fa-search-minus:before{content:""}.fa-search-plus:before{content:""}.fa-searchengin:before{content:""}.fa-seedling:before{content:""}.fa-sellcast:before{content:""}.fa-sellsy:before{content:""}.fa-server:before{content:""}.fa-servicestack:before{content:""}.fa-shapes:before{content:""}.fa-share:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-share-square:before{content:""}.fa-shekel-sign:before{content:""}.fa-shield-alt:before{content:""}.fa-ship:before{content:""}.fa-shipping-fast:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-shoe-prints:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-shopping-cart:before{content:""}.fa-shopware:before{content:""}.fa-shower:before{content:""}.fa-shuttle-van:before{content:""}.fa-sign:before{content:""}.fa-sign-in-alt:before{content:""}.fa-sign-language:before{content:""}.fa-sign-out-alt:before{content:""}.fa-signal:before{content:""}.fa-signature:before{content:""}.fa-simplybuilt:before{content:""}.fa-sistrix:before{content:""}.fa-sitemap:before{content:""}.fa-sith:before{content:""}.fa-skull:before{content:""}.fa-skull-crossbones:before{content:""}.fa-skyatlas:before{content:""}.fa-skype:before{content:""}.fa-slack:before{content:""}.fa-slack-hash:before{content:""}.fa-slash:before{content:""}.fa-sliders-h:before{content:""}.fa-slideshare:before{content:""}.fa-smile:before{content:""}.fa-smile-beam:before{content:""}.fa-smile-wink:before{content:""}.fa-smog:before{content:""}.fa-smoking:before{content:""}.fa-smoking-ban:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-snowflake:before{content:""}.fa-socks:before{content:""}.fa-solar-panel:before{content:""}.fa-sort:before{content:""}.fa-sort-alpha-down:before{content:""}.fa-sort-alpha-up:before{content:""}.fa-sort-amount-down:before{content:""}.fa-sort-amount-up:before{content:""}.fa-sort-down:before{content:""}.fa-sort-numeric-down:before{content:""}.fa-sort-numeric-up:before{content:""}.fa-sort-up:before{content:""}.fa-soundcloud:before{content:""}.fa-spa:before{content:""}.fa-space-shuttle:before{content:""}.fa-speakap:before{content:""}.fa-spider:before{content:""}.fa-spinner:before{content:""}.fa-splotch:before{content:""}.fa-spotify:before{content:""}.fa-spray-can:before{content:""}.fa-square:before{content:""}.fa-square-full:before{content:""}.fa-square-root-alt:before{content:""}.fa-squarespace:before{content:""}.fa-stack-exchange:before{content:""}.fa-stack-overflow:before{content:""}.fa-stamp:before{content:""}.fa-star:before{content:""}.fa-star-and-crescent:before{content:""}.fa-star-half:before{content:""}.fa-star-half-alt:before{content:""}.fa-star-of-david:before{content:""}.fa-star-of-life:before{content:""}.fa-staylinked:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-steam-symbol:before{content:""}.fa-step-backward:before{content:""}.fa-step-forward:before{content:""}.fa-stethoscope:before{content:""}.fa-sticker-mule:before{content:""}.fa-sticky-note:before{content:""}.fa-stop:before{content:""}.fa-stop-circle:before{content:""}.fa-stopwatch:before{content:""}.fa-store:before{content:""}.fa-store-alt:before{content:""}.fa-strava:before{content:""}.fa-stream:before{content:""}.fa-street-view:before{content:""}.fa-strikethrough:before{content:""}.fa-stripe:before{content:""}.fa-stripe-s:before{content:""}.fa-stroopwafel:before{content:""}.fa-studiovinari:before{content:""}.fa-stumbleupon:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-subscript:before{content:""}.fa-subway:before{content:""}.fa-suitcase:before{content:""}.fa-suitcase-rolling:before{content:""}.fa-sun:before{content:""}.fa-superpowers:before{content:""}.fa-superscript:before{content:""}.fa-supple:before{content:""}.fa-surprise:before{content:""}.fa-swatchbook:before{content:""}.fa-swimmer:before{content:""}.fa-swimming-pool:before{content:""}.fa-synagogue:before{content:""}.fa-sync:before{content:""}.fa-sync-alt:before{content:""}.fa-syringe:before{content:""}.fa-table:before{content:""}.fa-table-tennis:before{content:""}.fa-tablet:before{content:""}.fa-tablet-alt:before{content:""}.fa-tablets:before{content:""}.fa-tachometer-alt:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-tape:before{content:""}.fa-tasks:before{content:""}.fa-taxi:before{content:""}.fa-teamspeak:before{content:""}.fa-teeth:before{content:""}.fa-teeth-open:before{content:""}.fa-telegram:before{content:""}.fa-telegram-plane:before{content:""}.fa-temperature-high:before{content:""}.fa-temperature-low:before{content:""}.fa-tencent-weibo:before{content:""}.fa-terminal:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-th:before{content:""}.fa-th-large:before{content:""}.fa-th-list:before{content:""}.fa-the-red-yeti:before{content:""}.fa-theater-masks:before{content:""}.fa-themeco:before{content:""}.fa-themeisle:before{content:""}.fa-thermometer:before{content:""}.fa-thermometer-empty:before{content:""}.fa-thermometer-full:before{content:""}.fa-thermometer-half:before{content:""}.fa-thermometer-quarter:before{content:""}.fa-thermometer-three-quarters:before{content:""}.fa-think-peaks:before{content:""}.fa-thumbs-down:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbtack:before{content:""}.fa-ticket-alt:before{content:""}.fa-times:before{content:""}.fa-times-circle:before{content:""}.fa-tint:before{content:""}.fa-tint-slash:before{content:""}.fa-tired:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-toilet-paper:before{content:""}.fa-toolbox:before{content:""}.fa-tooth:before{content:""}.fa-torah:before{content:""}.fa-torii-gate:before{content:""}.fa-tractor:before{content:""}.fa-trade-federation:before{content:""}.fa-trademark:before{content:""}.fa-traffic-light:before{content:""}.fa-train:before{content:""}.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-trash:before{content:""}.fa-trash-alt:before{content:""}.fa-tree:before{content:""}.fa-trello:before{content:""}.fa-tripadvisor:before{content:""}.fa-trophy:before{content:""}.fa-truck:before{content:""}.fa-truck-loading:before{content:""}.fa-truck-monster:before{content:""}.fa-truck-moving:before{content:""}.fa-truck-pickup:before{content:""}.fa-tshirt:before{content:""}.fa-tty:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-tv:before{content:""}.fa-twitch:before{content:""}.fa-twitter:before{content:""}.fa-twitter-square:before{content:""}.fa-typo3:before{content:""}.fa-uber:before{content:""}.fa-uikit:before{content:""}.fa-umbrella:before{content:""}.fa-umbrella-beach:before{content:""}.fa-underline:before{content:""}.fa-undo:before{content:""}.fa-undo-alt:before{content:""}.fa-uniregistry:before{content:""}.fa-universal-access:before{content:""}.fa-university:before{content:""}.fa-unlink:before{content:""}.fa-unlock:before{content:""}.fa-unlock-alt:before{content:""}.fa-untappd:before{content:""}.fa-upload:before{content:""}.fa-usb:before{content:""}.fa-user:before{content:""}.fa-user-alt:before{content:""}.fa-user-alt-slash:before{content:""}.fa-user-astronaut:before{content:""}.fa-user-check:before{content:""}.fa-user-circle:before{content:""}.fa-user-clock:before{content:""}.fa-user-cog:before{content:""}.fa-user-edit:before{content:""}.fa-user-friends:before{content:""}.fa-user-graduate:before{content:""}.fa-user-injured:before{content:""}.fa-user-lock:before{content:""}.fa-user-md:before{content:""}.fa-user-minus:before{content:""}.fa-user-ninja:before{content:""}.fa-user-plus:before{content:""}.fa-user-secret:before{content:""}.fa-user-shield:before{content:""}.fa-user-slash:before{content:""}.fa-user-tag:before{content:""}.fa-user-tie:before{content:""}.fa-user-times:before{content:""}.fa-users:before{content:""}.fa-users-cog:before{content:""}.fa-ussunnah:before{content:""}.fa-utensil-spoon:before{content:""}.fa-utensils:before{content:""}.fa-vaadin:before{content:""}.fa-vector-square:before{content:""}.fa-venus:before{content:""}.fa-venus-double:before{content:""}.fa-venus-mars:before{content:""}.fa-viacoin:before{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-vial:before{content:""}.fa-vials:before{content:""}.fa-viber:before{content:""}.fa-video:before{content:""}.fa-video-slash:before{content:""}.fa-vihara:before{content:""}.fa-vimeo:before{content:""}.fa-vimeo-square:before{content:""}.fa-vimeo-v:before{content:""}.fa-vine:before{content:""}.fa-vk:before{content:""}.fa-vnv:before{content:""}.fa-volleyball-ball:before{content:""}.fa-volume-down:before{content:""}.fa-volume-mute:before{content:""}.fa-volume-off:before{content:""}.fa-volume-up:before{content:""}.fa-vote-yea:before{content:""}.fa-vr-cardboard:before{content:""}.fa-vuejs:before{content:""}.fa-walking:before{content:""}.fa-wallet:before{content:""}.fa-warehouse:before{content:""}.fa-water:before{content:""}.fa-weebly:before{content:""}.fa-weibo:before{content:""}.fa-weight:before{content:""}.fa-weight-hanging:before{content:""}.fa-weixin:before{content:""}.fa-whatsapp:before{content:""}.fa-whatsapp-square:before{content:""}.fa-wheelchair:before{content:""}.fa-whmcs:before{content:""}.fa-wifi:before{content:""}.fa-wikipedia-w:before{content:""}.fa-wind:before{content:""}.fa-window-close:before{content:""}.fa-window-maximize:before{content:""}.fa-window-minimize:before{content:""}.fa-window-restore:before{content:""}.fa-windows:before{content:""}.fa-wine-bottle:before{content:""}.fa-wine-glass:before{content:""}.fa-wine-glass-alt:before{content:""}.fa-wix:before{content:""}.fa-wizards-of-the-coast:before{content:""}.fa-wolf-pack-battalion:before{content:""}.fa-won-sign:before{content:""}.fa-wordpress:before{content:""}.fa-wordpress-simple:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpexplorer:before{content:""}.fa-wpforms:before{content:""}.fa-wpressr:before{content:""}.fa-wrench:before{content:""}.fa-x-ray:before{content:""}.fa-xbox:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-y-combinator:before{content:""}.fa-yahoo:before{content:""}.fa-yandex:before{content:""}.fa-yandex-international:before{content:""}.fa-yelp:before{content:""}.fa-yen-sign:before{content:""}.fa-yin-yang:before{content:""}.fa-yoast:before{content:""}.fa-youtube:before{content:""}.fa-youtube-square:before{content:""}.fa-zhihu:before{content:""}.sr-only{border:0;clip:rect(0, 0, 0, 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}/*!
+ * Font Awesome Free 5.5.0 by @fontawesome - https://fontawesome.com
+ * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
+ */@font-face{font-family:'Font Awesome 5 Free';font-style:normal;font-weight:900;src:url("../fonts/fa-solid-900.eot");src:url("../fonts/fa-solid-900.eot?#iefix") format("embedded-opentype"),url("../fonts/fa-solid-900.woff2") format("woff2"),url("../fonts/fa-solid-900.woff") format("woff"),url("../fonts/fa-solid-900.ttf") format("truetype"),url("../fonts/fa-solid-900.svg#fontawesome") format("svg")}.fa,.fas{font-family:'Font Awesome 5 Free';font-weight:900}/*!
+ * Font Awesome Free 5.5.0 by @fontawesome - https://fontawesome.com
+ * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
+ */@font-face{font-family:'Font Awesome 5 Brands';font-style:normal;font-weight:normal;src:url("../fonts/fa-brands-400.eot");src:url("../fonts/fa-brands-400.eot?#iefix") format("embedded-opentype"),url("../fonts/fa-brands-400.woff2") format("woff2"),url("../fonts/fa-brands-400.woff") format("woff"),url("../fonts/fa-brands-400.ttf") format("truetype"),url("../fonts/fa-brands-400.svg#fontawesome") format("svg")}.fab{font-family:'Font Awesome 5 Brands'}.mfp-counter{font-family:Georgia,Times,serif}.mfp-bg{top:0;left:0;width:100%;height:100%;z-index:1042;overflow:hidden;position:fixed;background:#000;opacity:.8;filter:alpha(opacity=80)}.mfp-wrap{top:0;left:0;width:100%;height:100%;z-index:1043;position:fixed;outline:none !important;-webkit-backface-visibility:hidden}.mfp-container{text-align:center;position:absolute;width:100%;height:100%;left:0;top:0;padding:0 8px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.mfp-container:before{content:'';display:inline-block;height:100%;vertical-align:middle}.mfp-align-top .mfp-container:before{display:none}.mfp-content{position:relative;display:inline-block;vertical-align:middle;margin:0 auto;text-align:left;z-index:1045}.mfp-inline-holder .mfp-content,.mfp-ajax-holder .mfp-content{width:100%;cursor:auto}.mfp-ajax-cur{cursor:progress}.mfp-zoom-out-cur,.mfp-zoom-out-cur .mfp-image-holder .mfp-close{cursor:-moz-zoom-out;cursor:-webkit-zoom-out;cursor:zoom-out}.mfp-zoom{cursor:pointer;cursor:-webkit-zoom-in;cursor:-moz-zoom-in;cursor:zoom-in}.mfp-auto-cursor .mfp-content{cursor:auto}.mfp-close,.mfp-arrow,.mfp-preloader,.mfp-counter{-webkit-user-select:none;-moz-user-select:none;user-select:none}.mfp-loading.mfp-figure{display:none}.mfp-hide{display:none !important}.mfp-preloader{color:#ccc;position:absolute;top:50%;width:auto;text-align:center;margin-top:-0.8em;left:8px;right:8px;z-index:1044}.mfp-preloader a{color:#ccc}.mfp-preloader a:hover{color:#fff}.mfp-s-ready .mfp-preloader{display:none}.mfp-s-error .mfp-content{display:none}button.mfp-close,button.mfp-arrow{overflow:visible;cursor:pointer;background:transparent;border:0;-webkit-appearance:none;display:block;outline:none;padding:0;z-index:1046;-webkit-box-shadow:none;box-shadow:none}button::-moz-focus-inner{padding:0;border:0}.mfp-close{width:44px;height:44px;line-height:44px;position:absolute;right:0;top:0;text-decoration:none;text-align:center;opacity:1;filter:alpha(opacity=100);padding:0 0 18px 10px;color:#fff;font-style:normal;font-size:28px;font-family:Georgia,Times,serif}.mfp-close:hover,.mfp-close:focus{opacity:1;filter:alpha(opacity=100)}.mfp-close:active{top:1px}.mfp-close-btn-in .mfp-close{color:#fff}.mfp-image-holder .mfp-close,.mfp-iframe-holder .mfp-close{color:#fff;right:-6px;text-align:right;padding-right:6px;width:100%}.mfp-counter{position:absolute;top:0;right:0;color:#ccc;font-size:12px;line-height:18px}.mfp-arrow{position:absolute;opacity:1;filter:alpha(opacity=100);margin:0;top:50%;margin-top:-55px;padding:0;width:90px;height:110px;-webkit-tap-highlight-color:transparent}.mfp-arrow:active{margin-top:-54px}.mfp-arrow:hover,.mfp-arrow:focus{opacity:1;filter:alpha(opacity=100)}.mfp-arrow:before,.mfp-arrow:after,.mfp-arrow .mfp-b,.mfp-arrow .mfp-a{content:'';display:block;width:0;height:0;position:absolute;left:0;top:0;margin-top:35px;margin-left:35px;border:medium inset transparent}.mfp-arrow:after,.mfp-arrow .mfp-a{border-top-width:13px;border-bottom-width:13px;top:8px}.mfp-arrow:before,.mfp-arrow .mfp-b{border-top-width:21px;border-bottom-width:21px;opacity:0.7}.mfp-arrow-left{left:0}.mfp-arrow-left:after,.mfp-arrow-left .mfp-a{border-right:17px solid #fff;margin-left:31px}.mfp-arrow-left:before,.mfp-arrow-left .mfp-b{margin-left:25px;border-right:27px solid #fff}.mfp-arrow-right{right:0}.mfp-arrow-right:after,.mfp-arrow-right .mfp-a{border-left:17px solid #fff;margin-left:39px}.mfp-arrow-right:before,.mfp-arrow-right .mfp-b{border-left:27px solid #fff}.mfp-iframe-holder{padding-top:40px;padding-bottom:40px}.mfp-iframe-holder .mfp-content{line-height:0;width:100%;max-width:900px}.mfp-iframe-holder .mfp-close{top:-40px}.mfp-iframe-scaler{width:100%;height:0;overflow:hidden;padding-top:56.25%}.mfp-iframe-scaler iframe{position:absolute;display:block;top:0;left:0;width:100%;height:100%;box-shadow:0 0 8px rgba(0,0,0,0.6);background:#000}img.mfp-img{width:auto;max-width:100%;height:auto;display:block;line-height:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:40px 0 40px;margin:0 auto}.mfp-figure{line-height:0}.mfp-figure:after{content:'';position:absolute;left:0;top:40px;bottom:40px;display:block;right:0;width:auto;height:auto;z-index:-1;box-shadow:0 0 8px rgba(0,0,0,0.6);background:#444}.mfp-figure small{color:#bdbdbd;display:block;font-size:12px;line-height:14px}.mfp-figure figure{margin:0}.mfp-figure figcaption{margin-top:0;margin-bottom:0}.mfp-bottom-bar{margin-top:-36px;position:absolute;top:100%;left:0;width:100%;cursor:auto}.mfp-title{text-align:left;line-height:18px;color:#f3f3f3;word-wrap:break-word;padding-right:36px}.mfp-image-holder .mfp-content{max-width:100%}.mfp-gallery .mfp-image-holder .mfp-figure{cursor:pointer}@media screen and (max-width: 800px) and (orientation: landscape), screen and (max-height: 300px){.mfp-img-mobile .mfp-image-holder{padding-left:0;padding-right:0}.mfp-img-mobile img.mfp-img{padding:0}.mfp-img-mobile .mfp-figure:after{top:0;bottom:0}.mfp-img-mobile .mfp-figure small{display:inline;margin-left:5px}.mfp-img-mobile .mfp-bottom-bar{background:rgba(0,0,0,0.6);bottom:0;margin:0;top:auto;padding:3px 5px;position:fixed;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.mfp-img-mobile .mfp-bottom-bar:empty{padding:0}.mfp-img-mobile .mfp-counter{right:5px;top:3px}.mfp-img-mobile .mfp-close{top:0;right:0;width:35px;height:35px;line-height:35px;background:rgba(0,0,0,0.6);position:fixed;text-align:center;padding:0}}@media all and (max-width: 900px){.mfp-arrow{-webkit-transform:scale(0.75);transform:scale(0.75)}.mfp-arrow-left{-webkit-transform-origin:0;transform-origin:0}.mfp-arrow-right{-webkit-transform-origin:100%;transform-origin:100%}.mfp-container{padding-left:6px;padding-right:6px}}.mfp-ie7 .mfp-img{padding:0}.mfp-ie7 .mfp-bottom-bar{width:600px;left:50%;margin-left:-300px;margin-top:5px;padding-bottom:5px}.mfp-ie7 .mfp-container{padding:0}.mfp-ie7 .mfp-content{padding-top:44px}.mfp-ie7 .mfp-close{top:0;right:0;padding-top:0}@media print{.masthead,.toc,.page__share,.page__related,.ads,.page__footer{display:none}}
diff --git a/_site/assets/css/style.css b/_site/assets/css/style.css
new file mode 100644
index 0000000..2440b2e
--- /dev/null
+++ b/_site/assets/css/style.css
@@ -0,0 +1 @@
+/*! normalize.css v4.1.1 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,main,menu,nav,section{display:block}summary{display:list-item}audio,canvas,progress,video{display:inline-block}audio:not([controls]){display:none;height:0}progress{vertical-align:baseline}template,[hidden]{display:none !important}a{background-color:transparent}a:active,a:hover{outline-width:0}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:inherit}b,strong{font-weight:bolder}dfn{font-style:italic}h1{font-size:2em;margin:0.67em 0}mark{background-color:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}img{border-style:none}svg:not(:root){overflow:hidden}code,kbd,pre,samp{font-family:monospace, monospace;font-size:1em}figure{margin:1em 40px}hr{box-sizing:content-box;height:0;overflow:visible}button,input,select,textarea{font:inherit;margin:0}optgroup{font-weight:bold}button,input{overflow:visible}button,select{text-transform:none}button,html [type="button"],[type="reset"],[type="submit"]{-webkit-appearance:button}button::-moz-focus-inner,[type="button"]::-moz-focus-inner,[type="reset"]::-moz-focus-inner,[type="submit"]::-moz-focus-inner{border-style:none;padding:0}button:-moz-focusring,[type="button"]:-moz-focusring,[type="reset"]:-moz-focusring,[type="submit"]:-moz-focusring{outline:1px dotted ButtonText}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:0.35em 0.625em 0.75em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}textarea{overflow:auto}[type="checkbox"],[type="radio"]{box-sizing:border-box;padding:0}[type="number"]::-webkit-inner-spin-button,[type="number"]::-webkit-outer-spin-button{height:auto}[type="search"]{-webkit-appearance:textfield;outline-offset:-2px}[type="search"]::-webkit-search-cancel-button,[type="search"]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-input-placeholder{color:inherit;opacity:0.54}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}*{box-sizing:border-box}input,select,textarea,button{font-family:inherit;font-size:inherit;line-height:inherit}body{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-size:14px;line-height:1.5;color:#24292e;background-color:#fff}a{color:#0366d6;text-decoration:none}a:hover{text-decoration:underline}b,strong{font-weight:600}hr,.rule{height:0;margin:15px 0;overflow:hidden;background:transparent;border:0;border-bottom:1px solid #dfe2e5}hr::before,.rule::before{display:table;content:""}hr::after,.rule::after{display:table;clear:both;content:""}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}button{cursor:pointer;border-radius:0}[hidden][hidden]{display:none !important}details summary{cursor:pointer}details:not([open])>*:not(summary){display:none !important}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:0}h1{font-size:32px;font-weight:600}h2{font-size:24px;font-weight:600}h3{font-size:20px;font-weight:600}h4{font-size:16px;font-weight:600}h5{font-size:14px;font-weight:600}h6{font-size:12px;font-weight:600}p{margin-top:0;margin-bottom:10px}small{font-size:90%}blockquote{margin:0}ul,ol{padding-left:0;margin-top:0;margin-bottom:0}ol ol,ul ol{list-style-type:lower-roman}ul ul ol,ul ol ol,ol ul ol,ol ol ol{list-style-type:lower-alpha}dd{margin-left:0}tt,code{font-family:"SFMono-Regular",Consolas,"Liberation Mono",Menlo,Courier,monospace;font-size:12px}pre{margin-top:0;margin-bottom:0;font-family:"SFMono-Regular",Consolas,"Liberation Mono",Menlo,Courier,monospace;font-size:12px}.octicon{vertical-align:text-bottom}.anim-fade-in{animation-name:fade-in;animation-duration:1s;animation-timing-function:ease-in-out}.anim-fade-in.fast{animation-duration:300ms}@keyframes fade-in{0%{opacity:0}100%{opacity:1}}.anim-fade-out{animation-name:fade-out;animation-duration:1s;animation-timing-function:ease-out}.anim-fade-out.fast{animation-duration:0.3s}@keyframes fade-out{0%{opacity:1}100%{opacity:0}}.anim-fade-up{opacity:0;animation-name:fade-up;animation-duration:0.3s;animation-fill-mode:forwards;animation-timing-function:ease-out;animation-delay:1s}@keyframes fade-up{0%{opacity:0.8;transform:translateY(100%)}100%{opacity:1;transform:translateY(0)}}.anim-fade-down{animation-name:fade-down;animation-duration:0.3s;animation-fill-mode:forwards;animation-timing-function:ease-in}@keyframes fade-down{0%{opacity:1;transform:translateY(0)}100%{opacity:0.5;transform:translateY(100%)}}.anim-grow-x{width:0%;animation-name:grow-x;animation-duration:0.3s;animation-fill-mode:forwards;animation-timing-function:ease;animation-delay:0.5s}@keyframes grow-x{to{width:100%}}.anim-shrink-x{animation-name:shrink-x;animation-duration:0.3s;animation-fill-mode:forwards;animation-timing-function:ease-in-out;animation-delay:0.5s}@keyframes shrink-x{to{width:0%}}.anim-scale-in{animation-name:scale-in;animation-duration:0.15s;animation-timing-function:cubic-bezier(0.2, 0, 0.13, 1.5)}@keyframes scale-in{0%{opacity:0;transform:scale(0.5)}100%{opacity:1;transform:scale(1)}}.anim-pulse{animation-name:pulse;animation-duration:2s;animation-timing-function:linear;animation-iteration-count:infinite}@keyframes pulse{0%{opacity:0.3}10%{opacity:1}100%{opacity:0.3}}.anim-pulse-in{animation-name:pulse-in;animation-duration:0.5s}@keyframes pulse-in{0%{transform:scale3d(1, 1, 1)}50%{transform:scale3d(1.1, 1.1, 1.1)}100%{transform:scale3d(1, 1, 1)}}.hover-grow{transition:transform 0.3s;backface-visibility:hidden}.hover-grow:hover{transform:scale(1.025)}.border{border:1px #e1e4e8 solid !important}.border-y{border-top:1px #e1e4e8 solid !important;border-bottom:1px #e1e4e8 solid !important}.border-0{border:0 !important}.border-dashed{border-style:dashed !important}.border-blue{border-color:#0366d6 !important}.border-blue-light{border-color:#c8e1ff !important}.border-green{border-color:#34d058 !important}.border-green-light{border-color:#a2cbac !important}.border-red{border-color:#d73a49 !important}.border-red-light{border-color:#cea0a5 !important}.border-purple{border-color:#6f42c1 !important}.border-yellow{border-color:#d9d0a5 !important}.border-gray-light{border-color:#eaecef !important}.border-gray-dark{border-color:#d1d5da !important}.border-black-fade{border-color:rgba(27,31,35,0.15) !important}.border-top{border-top:1px #e1e4e8 solid !important}.border-right{border-right:1px #e1e4e8 solid !important}.border-bottom{border-bottom:1px #e1e4e8 solid !important}.border-left{border-left:1px #e1e4e8 solid !important}.border-top-0{border-top:0 !important}.border-right-0{border-right:0 !important}.border-bottom-0{border-bottom:0 !important}.border-left-0{border-left:0 !important}.rounded-0{border-radius:0 !important}.rounded-1{border-radius:3px !important}.rounded-2{border-radius:6px !important}.rounded-top-0{border-top-left-radius:0 !important;border-top-right-radius:0 !important}.rounded-top-1{border-top-left-radius:3px !important;border-top-right-radius:3px !important}.rounded-top-2{border-top-left-radius:6px !important;border-top-right-radius:6px !important}.rounded-right-0{border-top-right-radius:0 !important;border-bottom-right-radius:0 !important}.rounded-right-1{border-top-right-radius:3px !important;border-bottom-right-radius:3px !important}.rounded-right-2{border-top-right-radius:6px !important;border-bottom-right-radius:6px !important}.rounded-bottom-0{border-bottom-right-radius:0 !important;border-bottom-left-radius:0 !important}.rounded-bottom-1{border-bottom-right-radius:3px !important;border-bottom-left-radius:3px !important}.rounded-bottom-2{border-bottom-right-radius:6px !important;border-bottom-left-radius:6px !important}.rounded-left-0{border-bottom-left-radius:0 !important;border-top-left-radius:0 !important}.rounded-left-1{border-bottom-left-radius:3px !important;border-top-left-radius:3px !important}.rounded-left-2{border-bottom-left-radius:6px !important;border-top-left-radius:6px !important}@media (min-width: 544px){.border-sm-top{border-top:1px #e1e4e8 solid !important}.border-sm-right{border-right:1px #e1e4e8 solid !important}.border-sm-bottom{border-bottom:1px #e1e4e8 solid !important}.border-sm-left{border-left:1px #e1e4e8 solid !important}.border-sm-top-0{border-top:0 !important}.border-sm-right-0{border-right:0 !important}.border-sm-bottom-0{border-bottom:0 !important}.border-sm-left-0{border-left:0 !important}.rounded-sm-0{border-radius:0 !important}.rounded-sm-1{border-radius:3px !important}.rounded-sm-2{border-radius:6px !important}.rounded-sm-top-0{border-top-left-radius:0 !important;border-top-right-radius:0 !important}.rounded-sm-top-1{border-top-left-radius:3px !important;border-top-right-radius:3px !important}.rounded-sm-top-2{border-top-left-radius:6px !important;border-top-right-radius:6px !important}.rounded-sm-right-0{border-top-right-radius:0 !important;border-bottom-right-radius:0 !important}.rounded-sm-right-1{border-top-right-radius:3px !important;border-bottom-right-radius:3px !important}.rounded-sm-right-2{border-top-right-radius:6px !important;border-bottom-right-radius:6px !important}.rounded-sm-bottom-0{border-bottom-right-radius:0 !important;border-bottom-left-radius:0 !important}.rounded-sm-bottom-1{border-bottom-right-radius:3px !important;border-bottom-left-radius:3px !important}.rounded-sm-bottom-2{border-bottom-right-radius:6px !important;border-bottom-left-radius:6px !important}.rounded-sm-left-0{border-bottom-left-radius:0 !important;border-top-left-radius:0 !important}.rounded-sm-left-1{border-bottom-left-radius:3px !important;border-top-left-radius:3px !important}.rounded-sm-left-2{border-bottom-left-radius:6px !important;border-top-left-radius:6px !important}}@media (min-width: 768px){.border-md-top{border-top:1px #e1e4e8 solid !important}.border-md-right{border-right:1px #e1e4e8 solid !important}.border-md-bottom{border-bottom:1px #e1e4e8 solid !important}.border-md-left{border-left:1px #e1e4e8 solid !important}.border-md-top-0{border-top:0 !important}.border-md-right-0{border-right:0 !important}.border-md-bottom-0{border-bottom:0 !important}.border-md-left-0{border-left:0 !important}.rounded-md-0{border-radius:0 !important}.rounded-md-1{border-radius:3px !important}.rounded-md-2{border-radius:6px !important}.rounded-md-top-0{border-top-left-radius:0 !important;border-top-right-radius:0 !important}.rounded-md-top-1{border-top-left-radius:3px !important;border-top-right-radius:3px !important}.rounded-md-top-2{border-top-left-radius:6px !important;border-top-right-radius:6px !important}.rounded-md-right-0{border-top-right-radius:0 !important;border-bottom-right-radius:0 !important}.rounded-md-right-1{border-top-right-radius:3px !important;border-bottom-right-radius:3px !important}.rounded-md-right-2{border-top-right-radius:6px !important;border-bottom-right-radius:6px !important}.rounded-md-bottom-0{border-bottom-right-radius:0 !important;border-bottom-left-radius:0 !important}.rounded-md-bottom-1{border-bottom-right-radius:3px !important;border-bottom-left-radius:3px !important}.rounded-md-bottom-2{border-bottom-right-radius:6px !important;border-bottom-left-radius:6px !important}.rounded-md-left-0{border-bottom-left-radius:0 !important;border-top-left-radius:0 !important}.rounded-md-left-1{border-bottom-left-radius:3px !important;border-top-left-radius:3px !important}.rounded-md-left-2{border-bottom-left-radius:6px !important;border-top-left-radius:6px !important}}@media (min-width: 1012px){.border-lg-top{border-top:1px #e1e4e8 solid !important}.border-lg-right{border-right:1px #e1e4e8 solid !important}.border-lg-bottom{border-bottom:1px #e1e4e8 solid !important}.border-lg-left{border-left:1px #e1e4e8 solid !important}.border-lg-top-0{border-top:0 !important}.border-lg-right-0{border-right:0 !important}.border-lg-bottom-0{border-bottom:0 !important}.border-lg-left-0{border-left:0 !important}.rounded-lg-0{border-radius:0 !important}.rounded-lg-1{border-radius:3px !important}.rounded-lg-2{border-radius:6px !important}.rounded-lg-top-0{border-top-left-radius:0 !important;border-top-right-radius:0 !important}.rounded-lg-top-1{border-top-left-radius:3px !important;border-top-right-radius:3px !important}.rounded-lg-top-2{border-top-left-radius:6px !important;border-top-right-radius:6px !important}.rounded-lg-right-0{border-top-right-radius:0 !important;border-bottom-right-radius:0 !important}.rounded-lg-right-1{border-top-right-radius:3px !important;border-bottom-right-radius:3px !important}.rounded-lg-right-2{border-top-right-radius:6px !important;border-bottom-right-radius:6px !important}.rounded-lg-bottom-0{border-bottom-right-radius:0 !important;border-bottom-left-radius:0 !important}.rounded-lg-bottom-1{border-bottom-right-radius:3px !important;border-bottom-left-radius:3px !important}.rounded-lg-bottom-2{border-bottom-right-radius:6px !important;border-bottom-left-radius:6px !important}.rounded-lg-left-0{border-bottom-left-radius:0 !important;border-top-left-radius:0 !important}.rounded-lg-left-1{border-bottom-left-radius:3px !important;border-top-left-radius:3px !important}.rounded-lg-left-2{border-bottom-left-radius:6px !important;border-top-left-radius:6px !important}}@media (min-width: 1280px){.border-xl-top{border-top:1px #e1e4e8 solid !important}.border-xl-right{border-right:1px #e1e4e8 solid !important}.border-xl-bottom{border-bottom:1px #e1e4e8 solid !important}.border-xl-left{border-left:1px #e1e4e8 solid !important}.border-xl-top-0{border-top:0 !important}.border-xl-right-0{border-right:0 !important}.border-xl-bottom-0{border-bottom:0 !important}.border-xl-left-0{border-left:0 !important}.rounded-xl-0{border-radius:0 !important}.rounded-xl-1{border-radius:3px !important}.rounded-xl-2{border-radius:6px !important}.rounded-xl-top-0{border-top-left-radius:0 !important;border-top-right-radius:0 !important}.rounded-xl-top-1{border-top-left-radius:3px !important;border-top-right-radius:3px !important}.rounded-xl-top-2{border-top-left-radius:6px !important;border-top-right-radius:6px !important}.rounded-xl-right-0{border-top-right-radius:0 !important;border-bottom-right-radius:0 !important}.rounded-xl-right-1{border-top-right-radius:3px !important;border-bottom-right-radius:3px !important}.rounded-xl-right-2{border-top-right-radius:6px !important;border-bottom-right-radius:6px !important}.rounded-xl-bottom-0{border-bottom-right-radius:0 !important;border-bottom-left-radius:0 !important}.rounded-xl-bottom-1{border-bottom-right-radius:3px !important;border-bottom-left-radius:3px !important}.rounded-xl-bottom-2{border-bottom-right-radius:6px !important;border-bottom-left-radius:6px !important}.rounded-xl-left-0{border-bottom-left-radius:0 !important;border-top-left-radius:0 !important}.rounded-xl-left-1{border-bottom-left-radius:3px !important;border-top-left-radius:3px !important}.rounded-xl-left-2{border-bottom-left-radius:6px !important;border-top-left-radius:6px !important}}.circle{border-radius:50% !important}.box-shadow{box-shadow:0 1px 1px rgba(27,31,35,0.1) !important}.box-shadow-medium{box-shadow:0 1px 5px rgba(27,31,35,0.15) !important}.box-shadow-large{box-shadow:0 1px 15px rgba(27,31,35,0.15) !important}.box-shadow-extra-large{box-shadow:0 10px 50px rgba(27,31,35,0.07) !important}.box-shadow-none{box-shadow:none !important}.bg-white{background-color:#fff !important}.bg-blue{background-color:#0366d6 !important}.bg-blue-light{background-color:#f1f8ff !important}.bg-gray-dark{background-color:#24292e !important}.bg-gray{background-color:#f6f8fa !important}.bg-gray-light{background-color:#fafbfc !important}.bg-green{background-color:#28a745 !important}.bg-green-light{background-color:#dcffe4 !important}.bg-red{background-color:#d73a49 !important}.bg-red-light{background-color:#ffdce0 !important}.bg-yellow{background-color:#ffd33d !important}.bg-yellow-light{background-color:#fff5b1 !important}.bg-purple{background-color:#6f42c1 !important}.bg-purple-light{background-color:#f5f0ff !important}.bg-shade-gradient{background-image:linear-gradient(180deg, rgba(27,31,35,0.065), rgba(27,31,35,0)) !important;background-repeat:no-repeat !important;background-size:100% 200px !important}.text-blue{color:#0366d6 !important}.text-red{color:#cb2431 !important}.text-gray-light{color:#6a737d !important}.text-gray{color:#586069 !important}.text-gray-dark{color:#24292e !important}.text-green{color:#28a745 !important}.text-orange{color:#a04100 !important}.text-orange-light{color:#e36209 !important}.text-purple{color:#6f42c1 !important}.text-white{color:#fff !important}.text-inherit{color:inherit !important}.text-pending{color:#b08800 !important}.bg-pending{color:#dbab09 !important}.link-gray{color:#586069 !important}.link-gray:hover{color:#0366d6 !important}.link-gray-dark{color:#24292e !important}.link-gray-dark:hover{color:#0366d6 !important}.link-hover-blue:hover{color:#0366d6 !important}.muted-link{color:#586069 !important}.muted-link:hover{color:#0366d6 !important;text-decoration:none}.details-overlay[open]>summary::before{position:fixed;top:0;right:0;bottom:0;left:0;z-index:80;display:block;cursor:default;content:" ";background:transparent}.details-overlay-dark[open]>summary::before{z-index:99;background:rgba(27,31,35,0.5)}.flex-row{flex-direction:row !important}.flex-row-reverse{flex-direction:row-reverse !important}.flex-column{flex-direction:column !important}.flex-wrap{flex-wrap:wrap !important}.flex-nowrap{flex-wrap:nowrap !important}.flex-justify-start{justify-content:flex-start !important}.flex-justify-end{justify-content:flex-end !important}.flex-justify-center{justify-content:center !important}.flex-justify-between{justify-content:space-between !important}.flex-justify-around{justify-content:space-around !important}.flex-items-start{align-items:flex-start !important}.flex-items-end{align-items:flex-end !important}.flex-items-center{align-items:center !important}.flex-items-baseline{align-items:baseline !important}.flex-items-stretch{align-items:stretch !important}.flex-content-start{align-content:flex-start !important}.flex-content-end{align-content:flex-end !important}.flex-content-center{align-content:center !important}.flex-content-between{align-content:space-between !important}.flex-content-around{align-content:space-around !important}.flex-content-stretch{align-content:stretch !important}.flex-auto{flex:1 1 auto !important}.flex-shrink-0{flex-shrink:0 !important}.flex-self-auto{align-self:auto !important}.flex-self-start{align-self:flex-start !important}.flex-self-end{align-self:flex-end !important}.flex-self-center{align-self:center !important}.flex-self-baseline{align-self:baseline !important}.flex-self-stretch{align-self:stretch !important}.flex-item-equal{flex-grow:1;flex-basis:0}@media (min-width: 544px){.flex-sm-row{flex-direction:row !important}.flex-sm-row-reverse{flex-direction:row-reverse !important}.flex-sm-column{flex-direction:column !important}.flex-sm-wrap{flex-wrap:wrap !important}.flex-sm-nowrap{flex-wrap:nowrap !important}.flex-sm-justify-start{justify-content:flex-start !important}.flex-sm-justify-end{justify-content:flex-end !important}.flex-sm-justify-center{justify-content:center !important}.flex-sm-justify-between{justify-content:space-between !important}.flex-sm-justify-around{justify-content:space-around !important}.flex-sm-items-start{align-items:flex-start !important}.flex-sm-items-end{align-items:flex-end !important}.flex-sm-items-center{align-items:center !important}.flex-sm-items-baseline{align-items:baseline !important}.flex-sm-items-stretch{align-items:stretch !important}.flex-sm-content-start{align-content:flex-start !important}.flex-sm-content-end{align-content:flex-end !important}.flex-sm-content-center{align-content:center !important}.flex-sm-content-between{align-content:space-between !important}.flex-sm-content-around{align-content:space-around !important}.flex-sm-content-stretch{align-content:stretch !important}.flex-sm-auto{flex:1 1 auto !important}.flex-sm-shrink-0{flex-shrink:0 !important}.flex-sm-self-auto{align-self:auto !important}.flex-sm-self-start{align-self:flex-start !important}.flex-sm-self-end{align-self:flex-end !important}.flex-sm-self-center{align-self:center !important}.flex-sm-self-baseline{align-self:baseline !important}.flex-sm-self-stretch{align-self:stretch !important}.flex-sm-item-equal{flex-grow:1;flex-basis:0}}@media (min-width: 768px){.flex-md-row{flex-direction:row !important}.flex-md-row-reverse{flex-direction:row-reverse !important}.flex-md-column{flex-direction:column !important}.flex-md-wrap{flex-wrap:wrap !important}.flex-md-nowrap{flex-wrap:nowrap !important}.flex-md-justify-start{justify-content:flex-start !important}.flex-md-justify-end{justify-content:flex-end !important}.flex-md-justify-center{justify-content:center !important}.flex-md-justify-between{justify-content:space-between !important}.flex-md-justify-around{justify-content:space-around !important}.flex-md-items-start{align-items:flex-start !important}.flex-md-items-end{align-items:flex-end !important}.flex-md-items-center{align-items:center !important}.flex-md-items-baseline{align-items:baseline !important}.flex-md-items-stretch{align-items:stretch !important}.flex-md-content-start{align-content:flex-start !important}.flex-md-content-end{align-content:flex-end !important}.flex-md-content-center{align-content:center !important}.flex-md-content-between{align-content:space-between !important}.flex-md-content-around{align-content:space-around !important}.flex-md-content-stretch{align-content:stretch !important}.flex-md-auto{flex:1 1 auto !important}.flex-md-shrink-0{flex-shrink:0 !important}.flex-md-self-auto{align-self:auto !important}.flex-md-self-start{align-self:flex-start !important}.flex-md-self-end{align-self:flex-end !important}.flex-md-self-center{align-self:center !important}.flex-md-self-baseline{align-self:baseline !important}.flex-md-self-stretch{align-self:stretch !important}.flex-md-item-equal{flex-grow:1;flex-basis:0}}@media (min-width: 1012px){.flex-lg-row{flex-direction:row !important}.flex-lg-row-reverse{flex-direction:row-reverse !important}.flex-lg-column{flex-direction:column !important}.flex-lg-wrap{flex-wrap:wrap !important}.flex-lg-nowrap{flex-wrap:nowrap !important}.flex-lg-justify-start{justify-content:flex-start !important}.flex-lg-justify-end{justify-content:flex-end !important}.flex-lg-justify-center{justify-content:center !important}.flex-lg-justify-between{justify-content:space-between !important}.flex-lg-justify-around{justify-content:space-around !important}.flex-lg-items-start{align-items:flex-start !important}.flex-lg-items-end{align-items:flex-end !important}.flex-lg-items-center{align-items:center !important}.flex-lg-items-baseline{align-items:baseline !important}.flex-lg-items-stretch{align-items:stretch !important}.flex-lg-content-start{align-content:flex-start !important}.flex-lg-content-end{align-content:flex-end !important}.flex-lg-content-center{align-content:center !important}.flex-lg-content-between{align-content:space-between !important}.flex-lg-content-around{align-content:space-around !important}.flex-lg-content-stretch{align-content:stretch !important}.flex-lg-auto{flex:1 1 auto !important}.flex-lg-shrink-0{flex-shrink:0 !important}.flex-lg-self-auto{align-self:auto !important}.flex-lg-self-start{align-self:flex-start !important}.flex-lg-self-end{align-self:flex-end !important}.flex-lg-self-center{align-self:center !important}.flex-lg-self-baseline{align-self:baseline !important}.flex-lg-self-stretch{align-self:stretch !important}.flex-lg-item-equal{flex-grow:1;flex-basis:0}}@media (min-width: 1280px){.flex-xl-row{flex-direction:row !important}.flex-xl-row-reverse{flex-direction:row-reverse !important}.flex-xl-column{flex-direction:column !important}.flex-xl-wrap{flex-wrap:wrap !important}.flex-xl-nowrap{flex-wrap:nowrap !important}.flex-xl-justify-start{justify-content:flex-start !important}.flex-xl-justify-end{justify-content:flex-end !important}.flex-xl-justify-center{justify-content:center !important}.flex-xl-justify-between{justify-content:space-between !important}.flex-xl-justify-around{justify-content:space-around !important}.flex-xl-items-start{align-items:flex-start !important}.flex-xl-items-end{align-items:flex-end !important}.flex-xl-items-center{align-items:center !important}.flex-xl-items-baseline{align-items:baseline !important}.flex-xl-items-stretch{align-items:stretch !important}.flex-xl-content-start{align-content:flex-start !important}.flex-xl-content-end{align-content:flex-end !important}.flex-xl-content-center{align-content:center !important}.flex-xl-content-between{align-content:space-between !important}.flex-xl-content-around{align-content:space-around !important}.flex-xl-content-stretch{align-content:stretch !important}.flex-xl-auto{flex:1 1 auto !important}.flex-xl-shrink-0{flex-shrink:0 !important}.flex-xl-self-auto{align-self:auto !important}.flex-xl-self-start{align-self:flex-start !important}.flex-xl-self-end{align-self:flex-end !important}.flex-xl-self-center{align-self:center !important}.flex-xl-self-baseline{align-self:baseline !important}.flex-xl-self-stretch{align-self:stretch !important}.flex-xl-item-equal{flex-grow:1;flex-basis:0}}.position-static{position:static !important}.position-relative{position:relative !important}.position-absolute{position:absolute !important}.position-fixed{position:fixed !important}.top-0{top:0 !important}.right-0{right:0 !important}.bottom-0{bottom:0 !important}.left-0{left:0 !important}.v-align-middle{vertical-align:middle !important}.v-align-top{vertical-align:top !important}.v-align-bottom{vertical-align:bottom !important}.v-align-text-top{vertical-align:text-top !important}.v-align-text-bottom{vertical-align:text-bottom !important}.v-align-baseline{vertical-align:baseline !important}.overflow-hidden{overflow:hidden !important}.overflow-scroll{overflow:scroll !important}.overflow-auto{overflow:auto !important}.clearfix::before{display:table;content:""}.clearfix::after{display:table;clear:both;content:""}.float-left{float:left !important}.float-right{float:right !important}.float-none{float:none !important}@media (min-width: 544px){.float-sm-left{float:left !important}.float-sm-right{float:right !important}.float-sm-none{float:none !important}}@media (min-width: 768px){.float-md-left{float:left !important}.float-md-right{float:right !important}.float-md-none{float:none !important}}@media (min-width: 1012px){.float-lg-left{float:left !important}.float-lg-right{float:right !important}.float-lg-none{float:none !important}}@media (min-width: 1280px){.float-xl-left{float:left !important}.float-xl-right{float:right !important}.float-xl-none{float:none !important}}.width-fit{max-width:100% !important}.width-full{width:100% !important}.height-fit{max-height:100% !important}.height-full{height:100% !important}.min-width-0{min-width:0 !important}.direction-rtl{direction:rtl !important}.direction-ltr{direction:ltr !important}@media (min-width: 544px){.direction-sm-rtl{direction:rtl !important}.direction-sm-ltr{direction:ltr !important}}@media (min-width: 768px){.direction-md-rtl{direction:rtl !important}.direction-md-ltr{direction:ltr !important}}@media (min-width: 1012px){.direction-lg-rtl{direction:rtl !important}.direction-lg-ltr{direction:ltr !important}}@media (min-width: 1280px){.direction-xl-rtl{direction:rtl !important}.direction-xl-ltr{direction:ltr !important}}.m-0{margin:0 !important}.mt-0{margin-top:0 !important}.mr-0{margin-right:0 !important}.mb-0{margin-bottom:0 !important}.ml-0{margin-left:0 !important}.mx-0{margin-right:0 !important;margin-left:0 !important}.my-0{margin-top:0 !important;margin-bottom:0 !important}.m-1{margin:4px !important}.mt-1{margin-top:4px !important}.mr-1{margin-right:4px !important}.mb-1{margin-bottom:4px !important}.ml-1{margin-left:4px !important}.mt-n1{margin-top:-4px !important}.mr-n1{margin-right:-4px !important}.mb-n1{margin-bottom:-4px !important}.ml-n1{margin-left:-4px !important}.mx-1{margin-right:4px !important;margin-left:4px !important}.my-1{margin-top:4px !important;margin-bottom:4px !important}.m-2{margin:8px !important}.mt-2{margin-top:8px !important}.mr-2{margin-right:8px !important}.mb-2{margin-bottom:8px !important}.ml-2{margin-left:8px !important}.mt-n2{margin-top:-8px !important}.mr-n2{margin-right:-8px !important}.mb-n2{margin-bottom:-8px !important}.ml-n2{margin-left:-8px !important}.mx-2{margin-right:8px !important;margin-left:8px !important}.my-2{margin-top:8px !important;margin-bottom:8px !important}.m-3{margin:16px !important}.mt-3{margin-top:16px !important}.mr-3{margin-right:16px !important}.mb-3{margin-bottom:16px !important}.ml-3{margin-left:16px !important}.mt-n3{margin-top:-16px !important}.mr-n3{margin-right:-16px !important}.mb-n3{margin-bottom:-16px !important}.ml-n3{margin-left:-16px !important}.mx-3{margin-right:16px !important;margin-left:16px !important}.my-3{margin-top:16px !important;margin-bottom:16px !important}.m-4{margin:24px !important}.mt-4{margin-top:24px !important}.mr-4{margin-right:24px !important}.mb-4{margin-bottom:24px !important}.ml-4{margin-left:24px !important}.mt-n4{margin-top:-24px !important}.mr-n4{margin-right:-24px !important}.mb-n4{margin-bottom:-24px !important}.ml-n4{margin-left:-24px !important}.mx-4{margin-right:24px !important;margin-left:24px !important}.my-4{margin-top:24px !important;margin-bottom:24px !important}.m-5{margin:32px !important}.mt-5{margin-top:32px !important}.mr-5{margin-right:32px !important}.mb-5{margin-bottom:32px !important}.ml-5{margin-left:32px !important}.mt-n5{margin-top:-32px !important}.mr-n5{margin-right:-32px !important}.mb-n5{margin-bottom:-32px !important}.ml-n5{margin-left:-32px !important}.mx-5{margin-right:32px !important;margin-left:32px !important}.my-5{margin-top:32px !important;margin-bottom:32px !important}.m-6{margin:40px !important}.mt-6{margin-top:40px !important}.mr-6{margin-right:40px !important}.mb-6{margin-bottom:40px !important}.ml-6{margin-left:40px !important}.mt-n6{margin-top:-40px !important}.mr-n6{margin-right:-40px !important}.mb-n6{margin-bottom:-40px !important}.ml-n6{margin-left:-40px !important}.mx-6{margin-right:40px !important;margin-left:40px !important}.my-6{margin-top:40px !important;margin-bottom:40px !important}.mx-auto{margin-right:auto !important;margin-left:auto !important}@media (min-width: 544px){.m-sm-0{margin:0 !important}.mt-sm-0{margin-top:0 !important}.mr-sm-0{margin-right:0 !important}.mb-sm-0{margin-bottom:0 !important}.ml-sm-0{margin-left:0 !important}.mx-sm-0{margin-right:0 !important;margin-left:0 !important}.my-sm-0{margin-top:0 !important;margin-bottom:0 !important}.m-sm-1{margin:4px !important}.mt-sm-1{margin-top:4px !important}.mr-sm-1{margin-right:4px !important}.mb-sm-1{margin-bottom:4px !important}.ml-sm-1{margin-left:4px !important}.mt-sm-n1{margin-top:-4px !important}.mr-sm-n1{margin-right:-4px !important}.mb-sm-n1{margin-bottom:-4px !important}.ml-sm-n1{margin-left:-4px !important}.mx-sm-1{margin-right:4px !important;margin-left:4px !important}.my-sm-1{margin-top:4px !important;margin-bottom:4px !important}.m-sm-2{margin:8px !important}.mt-sm-2{margin-top:8px !important}.mr-sm-2{margin-right:8px !important}.mb-sm-2{margin-bottom:8px !important}.ml-sm-2{margin-left:8px !important}.mt-sm-n2{margin-top:-8px !important}.mr-sm-n2{margin-right:-8px !important}.mb-sm-n2{margin-bottom:-8px !important}.ml-sm-n2{margin-left:-8px !important}.mx-sm-2{margin-right:8px !important;margin-left:8px !important}.my-sm-2{margin-top:8px !important;margin-bottom:8px !important}.m-sm-3{margin:16px !important}.mt-sm-3{margin-top:16px !important}.mr-sm-3{margin-right:16px !important}.mb-sm-3{margin-bottom:16px !important}.ml-sm-3{margin-left:16px !important}.mt-sm-n3{margin-top:-16px !important}.mr-sm-n3{margin-right:-16px !important}.mb-sm-n3{margin-bottom:-16px !important}.ml-sm-n3{margin-left:-16px !important}.mx-sm-3{margin-right:16px !important;margin-left:16px !important}.my-sm-3{margin-top:16px !important;margin-bottom:16px !important}.m-sm-4{margin:24px !important}.mt-sm-4{margin-top:24px !important}.mr-sm-4{margin-right:24px !important}.mb-sm-4{margin-bottom:24px !important}.ml-sm-4{margin-left:24px !important}.mt-sm-n4{margin-top:-24px !important}.mr-sm-n4{margin-right:-24px !important}.mb-sm-n4{margin-bottom:-24px !important}.ml-sm-n4{margin-left:-24px !important}.mx-sm-4{margin-right:24px !important;margin-left:24px !important}.my-sm-4{margin-top:24px !important;margin-bottom:24px !important}.m-sm-5{margin:32px !important}.mt-sm-5{margin-top:32px !important}.mr-sm-5{margin-right:32px !important}.mb-sm-5{margin-bottom:32px !important}.ml-sm-5{margin-left:32px !important}.mt-sm-n5{margin-top:-32px !important}.mr-sm-n5{margin-right:-32px !important}.mb-sm-n5{margin-bottom:-32px !important}.ml-sm-n5{margin-left:-32px !important}.mx-sm-5{margin-right:32px !important;margin-left:32px !important}.my-sm-5{margin-top:32px !important;margin-bottom:32px !important}.m-sm-6{margin:40px !important}.mt-sm-6{margin-top:40px !important}.mr-sm-6{margin-right:40px !important}.mb-sm-6{margin-bottom:40px !important}.ml-sm-6{margin-left:40px !important}.mt-sm-n6{margin-top:-40px !important}.mr-sm-n6{margin-right:-40px !important}.mb-sm-n6{margin-bottom:-40px !important}.ml-sm-n6{margin-left:-40px !important}.mx-sm-6{margin-right:40px !important;margin-left:40px !important}.my-sm-6{margin-top:40px !important;margin-bottom:40px !important}.mx-sm-auto{margin-right:auto !important;margin-left:auto !important}}@media (min-width: 768px){.m-md-0{margin:0 !important}.mt-md-0{margin-top:0 !important}.mr-md-0{margin-right:0 !important}.mb-md-0{margin-bottom:0 !important}.ml-md-0{margin-left:0 !important}.mx-md-0{margin-right:0 !important;margin-left:0 !important}.my-md-0{margin-top:0 !important;margin-bottom:0 !important}.m-md-1{margin:4px !important}.mt-md-1{margin-top:4px !important}.mr-md-1{margin-right:4px !important}.mb-md-1{margin-bottom:4px !important}.ml-md-1{margin-left:4px !important}.mt-md-n1{margin-top:-4px !important}.mr-md-n1{margin-right:-4px !important}.mb-md-n1{margin-bottom:-4px !important}.ml-md-n1{margin-left:-4px !important}.mx-md-1{margin-right:4px !important;margin-left:4px !important}.my-md-1{margin-top:4px !important;margin-bottom:4px !important}.m-md-2{margin:8px !important}.mt-md-2{margin-top:8px !important}.mr-md-2{margin-right:8px !important}.mb-md-2{margin-bottom:8px !important}.ml-md-2{margin-left:8px !important}.mt-md-n2{margin-top:-8px !important}.mr-md-n2{margin-right:-8px !important}.mb-md-n2{margin-bottom:-8px !important}.ml-md-n2{margin-left:-8px !important}.mx-md-2{margin-right:8px !important;margin-left:8px !important}.my-md-2{margin-top:8px !important;margin-bottom:8px !important}.m-md-3{margin:16px !important}.mt-md-3{margin-top:16px !important}.mr-md-3{margin-right:16px !important}.mb-md-3{margin-bottom:16px !important}.ml-md-3{margin-left:16px !important}.mt-md-n3{margin-top:-16px !important}.mr-md-n3{margin-right:-16px !important}.mb-md-n3{margin-bottom:-16px !important}.ml-md-n3{margin-left:-16px !important}.mx-md-3{margin-right:16px !important;margin-left:16px !important}.my-md-3{margin-top:16px !important;margin-bottom:16px !important}.m-md-4{margin:24px !important}.mt-md-4{margin-top:24px !important}.mr-md-4{margin-right:24px !important}.mb-md-4{margin-bottom:24px !important}.ml-md-4{margin-left:24px !important}.mt-md-n4{margin-top:-24px !important}.mr-md-n4{margin-right:-24px !important}.mb-md-n4{margin-bottom:-24px !important}.ml-md-n4{margin-left:-24px !important}.mx-md-4{margin-right:24px !important;margin-left:24px !important}.my-md-4{margin-top:24px !important;margin-bottom:24px !important}.m-md-5{margin:32px !important}.mt-md-5{margin-top:32px !important}.mr-md-5{margin-right:32px !important}.mb-md-5{margin-bottom:32px !important}.ml-md-5{margin-left:32px !important}.mt-md-n5{margin-top:-32px !important}.mr-md-n5{margin-right:-32px !important}.mb-md-n5{margin-bottom:-32px !important}.ml-md-n5{margin-left:-32px !important}.mx-md-5{margin-right:32px !important;margin-left:32px !important}.my-md-5{margin-top:32px !important;margin-bottom:32px !important}.m-md-6{margin:40px !important}.mt-md-6{margin-top:40px !important}.mr-md-6{margin-right:40px !important}.mb-md-6{margin-bottom:40px !important}.ml-md-6{margin-left:40px !important}.mt-md-n6{margin-top:-40px !important}.mr-md-n6{margin-right:-40px !important}.mb-md-n6{margin-bottom:-40px !important}.ml-md-n6{margin-left:-40px !important}.mx-md-6{margin-right:40px !important;margin-left:40px !important}.my-md-6{margin-top:40px !important;margin-bottom:40px !important}.mx-md-auto{margin-right:auto !important;margin-left:auto !important}}@media (min-width: 1012px){.m-lg-0{margin:0 !important}.mt-lg-0{margin-top:0 !important}.mr-lg-0{margin-right:0 !important}.mb-lg-0{margin-bottom:0 !important}.ml-lg-0{margin-left:0 !important}.mx-lg-0{margin-right:0 !important;margin-left:0 !important}.my-lg-0{margin-top:0 !important;margin-bottom:0 !important}.m-lg-1{margin:4px !important}.mt-lg-1{margin-top:4px !important}.mr-lg-1{margin-right:4px !important}.mb-lg-1{margin-bottom:4px !important}.ml-lg-1{margin-left:4px !important}.mt-lg-n1{margin-top:-4px !important}.mr-lg-n1{margin-right:-4px !important}.mb-lg-n1{margin-bottom:-4px !important}.ml-lg-n1{margin-left:-4px !important}.mx-lg-1{margin-right:4px !important;margin-left:4px !important}.my-lg-1{margin-top:4px !important;margin-bottom:4px !important}.m-lg-2{margin:8px !important}.mt-lg-2{margin-top:8px !important}.mr-lg-2{margin-right:8px !important}.mb-lg-2{margin-bottom:8px !important}.ml-lg-2{margin-left:8px !important}.mt-lg-n2{margin-top:-8px !important}.mr-lg-n2{margin-right:-8px !important}.mb-lg-n2{margin-bottom:-8px !important}.ml-lg-n2{margin-left:-8px !important}.mx-lg-2{margin-right:8px !important;margin-left:8px !important}.my-lg-2{margin-top:8px !important;margin-bottom:8px !important}.m-lg-3{margin:16px !important}.mt-lg-3{margin-top:16px !important}.mr-lg-3{margin-right:16px !important}.mb-lg-3{margin-bottom:16px !important}.ml-lg-3{margin-left:16px !important}.mt-lg-n3{margin-top:-16px !important}.mr-lg-n3{margin-right:-16px !important}.mb-lg-n3{margin-bottom:-16px !important}.ml-lg-n3{margin-left:-16px !important}.mx-lg-3{margin-right:16px !important;margin-left:16px !important}.my-lg-3{margin-top:16px !important;margin-bottom:16px !important}.m-lg-4{margin:24px !important}.mt-lg-4{margin-top:24px !important}.mr-lg-4{margin-right:24px !important}.mb-lg-4{margin-bottom:24px !important}.ml-lg-4{margin-left:24px !important}.mt-lg-n4{margin-top:-24px !important}.mr-lg-n4{margin-right:-24px !important}.mb-lg-n4{margin-bottom:-24px !important}.ml-lg-n4{margin-left:-24px !important}.mx-lg-4{margin-right:24px !important;margin-left:24px !important}.my-lg-4{margin-top:24px !important;margin-bottom:24px !important}.m-lg-5{margin:32px !important}.mt-lg-5{margin-top:32px !important}.mr-lg-5{margin-right:32px !important}.mb-lg-5{margin-bottom:32px !important}.ml-lg-5{margin-left:32px !important}.mt-lg-n5{margin-top:-32px !important}.mr-lg-n5{margin-right:-32px !important}.mb-lg-n5{margin-bottom:-32px !important}.ml-lg-n5{margin-left:-32px !important}.mx-lg-5{margin-right:32px !important;margin-left:32px !important}.my-lg-5{margin-top:32px !important;margin-bottom:32px !important}.m-lg-6{margin:40px !important}.mt-lg-6{margin-top:40px !important}.mr-lg-6{margin-right:40px !important}.mb-lg-6{margin-bottom:40px !important}.ml-lg-6{margin-left:40px !important}.mt-lg-n6{margin-top:-40px !important}.mr-lg-n6{margin-right:-40px !important}.mb-lg-n6{margin-bottom:-40px !important}.ml-lg-n6{margin-left:-40px !important}.mx-lg-6{margin-right:40px !important;margin-left:40px !important}.my-lg-6{margin-top:40px !important;margin-bottom:40px !important}.mx-lg-auto{margin-right:auto !important;margin-left:auto !important}}@media (min-width: 1280px){.m-xl-0{margin:0 !important}.mt-xl-0{margin-top:0 !important}.mr-xl-0{margin-right:0 !important}.mb-xl-0{margin-bottom:0 !important}.ml-xl-0{margin-left:0 !important}.mx-xl-0{margin-right:0 !important;margin-left:0 !important}.my-xl-0{margin-top:0 !important;margin-bottom:0 !important}.m-xl-1{margin:4px !important}.mt-xl-1{margin-top:4px !important}.mr-xl-1{margin-right:4px !important}.mb-xl-1{margin-bottom:4px !important}.ml-xl-1{margin-left:4px !important}.mt-xl-n1{margin-top:-4px !important}.mr-xl-n1{margin-right:-4px !important}.mb-xl-n1{margin-bottom:-4px !important}.ml-xl-n1{margin-left:-4px !important}.mx-xl-1{margin-right:4px !important;margin-left:4px !important}.my-xl-1{margin-top:4px !important;margin-bottom:4px !important}.m-xl-2{margin:8px !important}.mt-xl-2{margin-top:8px !important}.mr-xl-2{margin-right:8px !important}.mb-xl-2{margin-bottom:8px !important}.ml-xl-2{margin-left:8px !important}.mt-xl-n2{margin-top:-8px !important}.mr-xl-n2{margin-right:-8px !important}.mb-xl-n2{margin-bottom:-8px !important}.ml-xl-n2{margin-left:-8px !important}.mx-xl-2{margin-right:8px !important;margin-left:8px !important}.my-xl-2{margin-top:8px !important;margin-bottom:8px !important}.m-xl-3{margin:16px !important}.mt-xl-3{margin-top:16px !important}.mr-xl-3{margin-right:16px !important}.mb-xl-3{margin-bottom:16px !important}.ml-xl-3{margin-left:16px !important}.mt-xl-n3{margin-top:-16px !important}.mr-xl-n3{margin-right:-16px !important}.mb-xl-n3{margin-bottom:-16px !important}.ml-xl-n3{margin-left:-16px !important}.mx-xl-3{margin-right:16px !important;margin-left:16px !important}.my-xl-3{margin-top:16px !important;margin-bottom:16px !important}.m-xl-4{margin:24px !important}.mt-xl-4{margin-top:24px !important}.mr-xl-4{margin-right:24px !important}.mb-xl-4{margin-bottom:24px !important}.ml-xl-4{margin-left:24px !important}.mt-xl-n4{margin-top:-24px !important}.mr-xl-n4{margin-right:-24px !important}.mb-xl-n4{margin-bottom:-24px !important}.ml-xl-n4{margin-left:-24px !important}.mx-xl-4{margin-right:24px !important;margin-left:24px !important}.my-xl-4{margin-top:24px !important;margin-bottom:24px !important}.m-xl-5{margin:32px !important}.mt-xl-5{margin-top:32px !important}.mr-xl-5{margin-right:32px !important}.mb-xl-5{margin-bottom:32px !important}.ml-xl-5{margin-left:32px !important}.mt-xl-n5{margin-top:-32px !important}.mr-xl-n5{margin-right:-32px !important}.mb-xl-n5{margin-bottom:-32px !important}.ml-xl-n5{margin-left:-32px !important}.mx-xl-5{margin-right:32px !important;margin-left:32px !important}.my-xl-5{margin-top:32px !important;margin-bottom:32px !important}.m-xl-6{margin:40px !important}.mt-xl-6{margin-top:40px !important}.mr-xl-6{margin-right:40px !important}.mb-xl-6{margin-bottom:40px !important}.ml-xl-6{margin-left:40px !important}.mt-xl-n6{margin-top:-40px !important}.mr-xl-n6{margin-right:-40px !important}.mb-xl-n6{margin-bottom:-40px !important}.ml-xl-n6{margin-left:-40px !important}.mx-xl-6{margin-right:40px !important;margin-left:40px !important}.my-xl-6{margin-top:40px !important;margin-bottom:40px !important}.mx-xl-auto{margin-right:auto !important;margin-left:auto !important}}.p-0{padding:0 !important}.pt-0{padding-top:0 !important}.pr-0{padding-right:0 !important}.pb-0{padding-bottom:0 !important}.pl-0{padding-left:0 !important}.px-0{padding-right:0 !important;padding-left:0 !important}.py-0{padding-top:0 !important;padding-bottom:0 !important}.p-1{padding:4px !important}.pt-1{padding-top:4px !important}.pr-1{padding-right:4px !important}.pb-1{padding-bottom:4px !important}.pl-1{padding-left:4px !important}.px-1{padding-right:4px !important;padding-left:4px !important}.py-1{padding-top:4px !important;padding-bottom:4px !important}.p-2{padding:8px !important}.pt-2{padding-top:8px !important}.pr-2{padding-right:8px !important}.pb-2{padding-bottom:8px !important}.pl-2{padding-left:8px !important}.px-2{padding-right:8px !important;padding-left:8px !important}.py-2{padding-top:8px !important;padding-bottom:8px !important}.p-3{padding:16px !important}.pt-3{padding-top:16px !important}.pr-3{padding-right:16px !important}.pb-3{padding-bottom:16px !important}.pl-3{padding-left:16px !important}.px-3{padding-right:16px !important;padding-left:16px !important}.py-3{padding-top:16px !important;padding-bottom:16px !important}.p-4{padding:24px !important}.pt-4{padding-top:24px !important}.pr-4{padding-right:24px !important}.pb-4{padding-bottom:24px !important}.pl-4{padding-left:24px !important}.px-4{padding-right:24px !important;padding-left:24px !important}.py-4{padding-top:24px !important;padding-bottom:24px !important}.p-5{padding:32px !important}.pt-5{padding-top:32px !important}.pr-5{padding-right:32px !important}.pb-5{padding-bottom:32px !important}.pl-5{padding-left:32px !important}.px-5{padding-right:32px !important;padding-left:32px !important}.py-5{padding-top:32px !important;padding-bottom:32px !important}.p-6{padding:40px !important}.pt-6{padding-top:40px !important}.pr-6{padding-right:40px !important}.pb-6{padding-bottom:40px !important}.pl-6{padding-left:40px !important}.px-6{padding-right:40px !important;padding-left:40px !important}.py-6{padding-top:40px !important;padding-bottom:40px !important}@media (min-width: 544px){.p-sm-0{padding:0 !important}.pt-sm-0{padding-top:0 !important}.pr-sm-0{padding-right:0 !important}.pb-sm-0{padding-bottom:0 !important}.pl-sm-0{padding-left:0 !important}.px-sm-0{padding-right:0 !important;padding-left:0 !important}.py-sm-0{padding-top:0 !important;padding-bottom:0 !important}.p-sm-1{padding:4px !important}.pt-sm-1{padding-top:4px !important}.pr-sm-1{padding-right:4px !important}.pb-sm-1{padding-bottom:4px !important}.pl-sm-1{padding-left:4px !important}.px-sm-1{padding-right:4px !important;padding-left:4px !important}.py-sm-1{padding-top:4px !important;padding-bottom:4px !important}.p-sm-2{padding:8px !important}.pt-sm-2{padding-top:8px !important}.pr-sm-2{padding-right:8px !important}.pb-sm-2{padding-bottom:8px !important}.pl-sm-2{padding-left:8px !important}.px-sm-2{padding-right:8px !important;padding-left:8px !important}.py-sm-2{padding-top:8px !important;padding-bottom:8px !important}.p-sm-3{padding:16px !important}.pt-sm-3{padding-top:16px !important}.pr-sm-3{padding-right:16px !important}.pb-sm-3{padding-bottom:16px !important}.pl-sm-3{padding-left:16px !important}.px-sm-3{padding-right:16px !important;padding-left:16px !important}.py-sm-3{padding-top:16px !important;padding-bottom:16px !important}.p-sm-4{padding:24px !important}.pt-sm-4{padding-top:24px !important}.pr-sm-4{padding-right:24px !important}.pb-sm-4{padding-bottom:24px !important}.pl-sm-4{padding-left:24px !important}.px-sm-4{padding-right:24px !important;padding-left:24px !important}.py-sm-4{padding-top:24px !important;padding-bottom:24px !important}.p-sm-5{padding:32px !important}.pt-sm-5{padding-top:32px !important}.pr-sm-5{padding-right:32px !important}.pb-sm-5{padding-bottom:32px !important}.pl-sm-5{padding-left:32px !important}.px-sm-5{padding-right:32px !important;padding-left:32px !important}.py-sm-5{padding-top:32px !important;padding-bottom:32px !important}.p-sm-6{padding:40px !important}.pt-sm-6{padding-top:40px !important}.pr-sm-6{padding-right:40px !important}.pb-sm-6{padding-bottom:40px !important}.pl-sm-6{padding-left:40px !important}.px-sm-6{padding-right:40px !important;padding-left:40px !important}.py-sm-6{padding-top:40px !important;padding-bottom:40px !important}}@media (min-width: 768px){.p-md-0{padding:0 !important}.pt-md-0{padding-top:0 !important}.pr-md-0{padding-right:0 !important}.pb-md-0{padding-bottom:0 !important}.pl-md-0{padding-left:0 !important}.px-md-0{padding-right:0 !important;padding-left:0 !important}.py-md-0{padding-top:0 !important;padding-bottom:0 !important}.p-md-1{padding:4px !important}.pt-md-1{padding-top:4px !important}.pr-md-1{padding-right:4px !important}.pb-md-1{padding-bottom:4px !important}.pl-md-1{padding-left:4px !important}.px-md-1{padding-right:4px !important;padding-left:4px !important}.py-md-1{padding-top:4px !important;padding-bottom:4px !important}.p-md-2{padding:8px !important}.pt-md-2{padding-top:8px !important}.pr-md-2{padding-right:8px !important}.pb-md-2{padding-bottom:8px !important}.pl-md-2{padding-left:8px !important}.px-md-2{padding-right:8px !important;padding-left:8px !important}.py-md-2{padding-top:8px !important;padding-bottom:8px !important}.p-md-3{padding:16px !important}.pt-md-3{padding-top:16px !important}.pr-md-3{padding-right:16px !important}.pb-md-3{padding-bottom:16px !important}.pl-md-3{padding-left:16px !important}.px-md-3{padding-right:16px !important;padding-left:16px !important}.py-md-3{padding-top:16px !important;padding-bottom:16px !important}.p-md-4{padding:24px !important}.pt-md-4{padding-top:24px !important}.pr-md-4{padding-right:24px !important}.pb-md-4{padding-bottom:24px !important}.pl-md-4{padding-left:24px !important}.px-md-4{padding-right:24px !important;padding-left:24px !important}.py-md-4{padding-top:24px !important;padding-bottom:24px !important}.p-md-5{padding:32px !important}.pt-md-5{padding-top:32px !important}.pr-md-5{padding-right:32px !important}.pb-md-5{padding-bottom:32px !important}.pl-md-5{padding-left:32px !important}.px-md-5{padding-right:32px !important;padding-left:32px !important}.py-md-5{padding-top:32px !important;padding-bottom:32px !important}.p-md-6{padding:40px !important}.pt-md-6{padding-top:40px !important}.pr-md-6{padding-right:40px !important}.pb-md-6{padding-bottom:40px !important}.pl-md-6{padding-left:40px !important}.px-md-6{padding-right:40px !important;padding-left:40px !important}.py-md-6{padding-top:40px !important;padding-bottom:40px !important}}@media (min-width: 1012px){.p-lg-0{padding:0 !important}.pt-lg-0{padding-top:0 !important}.pr-lg-0{padding-right:0 !important}.pb-lg-0{padding-bottom:0 !important}.pl-lg-0{padding-left:0 !important}.px-lg-0{padding-right:0 !important;padding-left:0 !important}.py-lg-0{padding-top:0 !important;padding-bottom:0 !important}.p-lg-1{padding:4px !important}.pt-lg-1{padding-top:4px !important}.pr-lg-1{padding-right:4px !important}.pb-lg-1{padding-bottom:4px !important}.pl-lg-1{padding-left:4px !important}.px-lg-1{padding-right:4px !important;padding-left:4px !important}.py-lg-1{padding-top:4px !important;padding-bottom:4px !important}.p-lg-2{padding:8px !important}.pt-lg-2{padding-top:8px !important}.pr-lg-2{padding-right:8px !important}.pb-lg-2{padding-bottom:8px !important}.pl-lg-2{padding-left:8px !important}.px-lg-2{padding-right:8px !important;padding-left:8px !important}.py-lg-2{padding-top:8px !important;padding-bottom:8px !important}.p-lg-3{padding:16px !important}.pt-lg-3{padding-top:16px !important}.pr-lg-3{padding-right:16px !important}.pb-lg-3{padding-bottom:16px !important}.pl-lg-3{padding-left:16px !important}.px-lg-3{padding-right:16px !important;padding-left:16px !important}.py-lg-3{padding-top:16px !important;padding-bottom:16px !important}.p-lg-4{padding:24px !important}.pt-lg-4{padding-top:24px !important}.pr-lg-4{padding-right:24px !important}.pb-lg-4{padding-bottom:24px !important}.pl-lg-4{padding-left:24px !important}.px-lg-4{padding-right:24px !important;padding-left:24px !important}.py-lg-4{padding-top:24px !important;padding-bottom:24px !important}.p-lg-5{padding:32px !important}.pt-lg-5{padding-top:32px !important}.pr-lg-5{padding-right:32px !important}.pb-lg-5{padding-bottom:32px !important}.pl-lg-5{padding-left:32px !important}.px-lg-5{padding-right:32px !important;padding-left:32px !important}.py-lg-5{padding-top:32px !important;padding-bottom:32px !important}.p-lg-6{padding:40px !important}.pt-lg-6{padding-top:40px !important}.pr-lg-6{padding-right:40px !important}.pb-lg-6{padding-bottom:40px !important}.pl-lg-6{padding-left:40px !important}.px-lg-6{padding-right:40px !important;padding-left:40px !important}.py-lg-6{padding-top:40px !important;padding-bottom:40px !important}}@media (min-width: 1280px){.p-xl-0{padding:0 !important}.pt-xl-0{padding-top:0 !important}.pr-xl-0{padding-right:0 !important}.pb-xl-0{padding-bottom:0 !important}.pl-xl-0{padding-left:0 !important}.px-xl-0{padding-right:0 !important;padding-left:0 !important}.py-xl-0{padding-top:0 !important;padding-bottom:0 !important}.p-xl-1{padding:4px !important}.pt-xl-1{padding-top:4px !important}.pr-xl-1{padding-right:4px !important}.pb-xl-1{padding-bottom:4px !important}.pl-xl-1{padding-left:4px !important}.px-xl-1{padding-right:4px !important;padding-left:4px !important}.py-xl-1{padding-top:4px !important;padding-bottom:4px !important}.p-xl-2{padding:8px !important}.pt-xl-2{padding-top:8px !important}.pr-xl-2{padding-right:8px !important}.pb-xl-2{padding-bottom:8px !important}.pl-xl-2{padding-left:8px !important}.px-xl-2{padding-right:8px !important;padding-left:8px !important}.py-xl-2{padding-top:8px !important;padding-bottom:8px !important}.p-xl-3{padding:16px !important}.pt-xl-3{padding-top:16px !important}.pr-xl-3{padding-right:16px !important}.pb-xl-3{padding-bottom:16px !important}.pl-xl-3{padding-left:16px !important}.px-xl-3{padding-right:16px !important;padding-left:16px !important}.py-xl-3{padding-top:16px !important;padding-bottom:16px !important}.p-xl-4{padding:24px !important}.pt-xl-4{padding-top:24px !important}.pr-xl-4{padding-right:24px !important}.pb-xl-4{padding-bottom:24px !important}.pl-xl-4{padding-left:24px !important}.px-xl-4{padding-right:24px !important;padding-left:24px !important}.py-xl-4{padding-top:24px !important;padding-bottom:24px !important}.p-xl-5{padding:32px !important}.pt-xl-5{padding-top:32px !important}.pr-xl-5{padding-right:32px !important}.pb-xl-5{padding-bottom:32px !important}.pl-xl-5{padding-left:32px !important}.px-xl-5{padding-right:32px !important;padding-left:32px !important}.py-xl-5{padding-top:32px !important;padding-bottom:32px !important}.p-xl-6{padding:40px !important}.pt-xl-6{padding-top:40px !important}.pr-xl-6{padding-right:40px !important}.pb-xl-6{padding-bottom:40px !important}.pl-xl-6{padding-left:40px !important}.px-xl-6{padding-right:40px !important;padding-left:40px !important}.py-xl-6{padding-top:40px !important;padding-bottom:40px !important}}.p-responsive{padding-right:16px !important;padding-left:16px !important}@media (min-width: 544px){.p-responsive{padding-right:40px !important;padding-left:40px !important}}@media (min-width: 1012px){.p-responsive{padding-right:16px !important;padding-left:16px !important}}.h1{font-size:26px !important}@media (min-width: 768px){.h1{font-size:32px !important}}.h2{font-size:22px !important}@media (min-width: 768px){.h2{font-size:24px !important}}.h3{font-size:18px !important}@media (min-width: 768px){.h3{font-size:20px !important}}.h4{font-size:16px !important}.h5{font-size:14px !important}.h6{font-size:12px !important}.h1,.h2,.h3,.h4,.h5,.h6{font-weight:600 !important}.f1{font-size:26px !important}@media (min-width: 768px){.f1{font-size:32px !important}}.f2{font-size:22px !important}@media (min-width: 768px){.f2{font-size:24px !important}}.f3{font-size:18px !important}@media (min-width: 768px){.f3{font-size:20px !important}}.f4{font-size:16px !important}@media (min-width: 768px){.f4{font-size:16px !important}}.f5{font-size:14px !important}.f6{font-size:12px !important}.f00-light{font-size:40px !important;font-weight:300 !important}@media (min-width: 768px){.f00-light{font-size:48px !important}}.f0-light{font-size:32px !important;font-weight:300 !important}@media (min-width: 768px){.f0-light{font-size:40px !important}}.f1-light{font-size:26px !important;font-weight:300 !important}@media (min-width: 768px){.f1-light{font-size:32px !important}}.f2-light{font-size:22px !important;font-weight:300 !important}@media (min-width: 768px){.f2-light{font-size:24px !important}}.f3-light{font-size:18px !important;font-weight:300 !important}@media (min-width: 768px){.f3-light{font-size:20px !important}}.text-small{font-size:12px !important}.lead{margin-bottom:30px;font-size:20px;font-weight:300;color:#586069}.lh-condensed-ultra{line-height:1 !important}.lh-condensed{line-height:1.25 !important}.lh-default{line-height:1.5 !important}.lh-0{line-height:0 !important}.text-right{text-align:right !important}.text-left{text-align:left !important}.text-center{text-align:center !important}@media (min-width: 544px){.text-sm-right{text-align:right !important}.text-sm-left{text-align:left !important}.text-sm-center{text-align:center !important}}@media (min-width: 768px){.text-md-right{text-align:right !important}.text-md-left{text-align:left !important}.text-md-center{text-align:center !important}}@media (min-width: 1012px){.text-lg-right{text-align:right !important}.text-lg-left{text-align:left !important}.text-lg-center{text-align:center !important}}@media (min-width: 1280px){.text-xl-right{text-align:right !important}.text-xl-left{text-align:left !important}.text-xl-center{text-align:center !important}}.text-normal{font-weight:400 !important}.text-bold{font-weight:600 !important}.text-italic{font-style:italic !important}.text-uppercase{text-transform:uppercase !important}.text-underline{text-decoration:underline !important}.no-underline{text-decoration:none !important}.no-wrap{white-space:nowrap !important}.ws-normal{white-space:normal !important}.wb-break-all{word-break:break-all !important}.text-emphasized{font-weight:600;color:#24292e}.list-style-none{list-style:none !important}.text-shadow-dark{text-shadow:0 1px 1px rgba(27,31,35,0.25),0 1px 25px rgba(27,31,35,0.75)}.text-shadow-light{text-shadow:0 1px 0 rgba(255,255,255,0.5)}.text-mono{font-family:"SFMono-Regular",Consolas,"Liberation Mono",Menlo,Courier,monospace}.user-select-none{user-select:none !important}.d-block{display:block !important}.d-flex{display:flex !important}.d-inline{display:inline !important}.d-inline-block{display:inline-block !important}.d-inline-flex{display:inline-flex !important}.d-none{display:none !important}.d-table{display:table !important}.d-table-cell{display:table-cell !important}@media (min-width: 544px){.d-sm-block{display:block !important}.d-sm-flex{display:flex !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-inline-flex{display:inline-flex !important}.d-sm-none{display:none !important}.d-sm-table{display:table !important}.d-sm-table-cell{display:table-cell !important}}@media (min-width: 768px){.d-md-block{display:block !important}.d-md-flex{display:flex !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-inline-flex{display:inline-flex !important}.d-md-none{display:none !important}.d-md-table{display:table !important}.d-md-table-cell{display:table-cell !important}}@media (min-width: 1012px){.d-lg-block{display:block !important}.d-lg-flex{display:flex !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-inline-flex{display:inline-flex !important}.d-lg-none{display:none !important}.d-lg-table{display:table !important}.d-lg-table-cell{display:table-cell !important}}@media (min-width: 1280px){.d-xl-block{display:block !important}.d-xl-flex{display:flex !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-inline-flex{display:inline-flex !important}.d-xl-none{display:none !important}.d-xl-table{display:table !important}.d-xl-table-cell{display:table-cell !important}}.v-hidden{visibility:hidden !important}.v-visible{visibility:visible !important}@media (max-width: 544px){.hide-sm{display:none !important}}@media (min-width: 544px) and (max-width: 768px){.hide-md{display:none !important}}@media (min-width: 768px) and (max-width: 1012px){.hide-lg{display:none !important}}@media (min-width: 1012px){.hide-xl{display:none !important}}.table-fixed{table-layout:fixed !important}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);word-wrap:normal;border:0}.show-on-focus{position:absolute;width:1px;height:1px;margin:0;overflow:hidden;clip:rect(1px, 1px, 1px, 1px)}.show-on-focus:focus{z-index:20;width:auto;height:auto;clip:auto}.container{width:980px;margin-right:auto;margin-left:auto}.container::before{display:table;content:""}.container::after{display:table;clear:both;content:""}.container-md{max-width:768px;margin-right:auto;margin-left:auto}.container-lg{max-width:1012px;margin-right:auto;margin-left:auto}.container-xl{max-width:1280px;margin-right:auto;margin-left:auto}.columns{margin-right:-10px;margin-left:-10px}.columns::before{display:table;content:""}.columns::after{display:table;clear:both;content:""}.column{float:left;padding-right:10px;padding-left:10px}.one-third{width:33.333333%}.two-thirds{width:66.666667%}.one-fourth{width:25%}.one-half{width:50%}.three-fourths{width:75%}.one-fifth{width:20%}.four-fifths{width:80%}.centered{display:block;float:none;margin-right:auto;margin-left:auto}.col-1{width:8.3333333333%}.col-2{width:16.6666666667%}.col-3{width:25%}.col-4{width:33.3333333333%}.col-5{width:41.6666666667%}.col-6{width:50%}.col-7{width:58.3333333333%}.col-8{width:66.6666666667%}.col-9{width:75%}.col-10{width:83.3333333333%}.col-11{width:91.6666666667%}.col-12{width:100%}@media (min-width: 544px){.col-sm-1{width:8.3333333333%}.col-sm-2{width:16.6666666667%}.col-sm-3{width:25%}.col-sm-4{width:33.3333333333%}.col-sm-5{width:41.6666666667%}.col-sm-6{width:50%}.col-sm-7{width:58.3333333333%}.col-sm-8{width:66.6666666667%}.col-sm-9{width:75%}.col-sm-10{width:83.3333333333%}.col-sm-11{width:91.6666666667%}.col-sm-12{width:100%}}@media (min-width: 768px){.col-md-1{width:8.3333333333%}.col-md-2{width:16.6666666667%}.col-md-3{width:25%}.col-md-4{width:33.3333333333%}.col-md-5{width:41.6666666667%}.col-md-6{width:50%}.col-md-7{width:58.3333333333%}.col-md-8{width:66.6666666667%}.col-md-9{width:75%}.col-md-10{width:83.3333333333%}.col-md-11{width:91.6666666667%}.col-md-12{width:100%}}@media (min-width: 1012px){.col-lg-1{width:8.3333333333%}.col-lg-2{width:16.6666666667%}.col-lg-3{width:25%}.col-lg-4{width:33.3333333333%}.col-lg-5{width:41.6666666667%}.col-lg-6{width:50%}.col-lg-7{width:58.3333333333%}.col-lg-8{width:66.6666666667%}.col-lg-9{width:75%}.col-lg-10{width:83.3333333333%}.col-lg-11{width:91.6666666667%}.col-lg-12{width:100%}}@media (min-width: 1280px){.col-xl-1{width:8.3333333333%}.col-xl-2{width:16.6666666667%}.col-xl-3{width:25%}.col-xl-4{width:33.3333333333%}.col-xl-5{width:41.6666666667%}.col-xl-6{width:50%}.col-xl-7{width:58.3333333333%}.col-xl-8{width:66.6666666667%}.col-xl-9{width:75%}.col-xl-10{width:83.3333333333%}.col-xl-11{width:91.6666666667%}.col-xl-12{width:100%}}.gutter{margin-right:-16px;margin-left:-16px}.gutter>[class*="col-"]{padding-right:16px !important;padding-left:16px !important}.gutter-condensed{margin-right:-8px;margin-left:-8px}.gutter-condensed>[class*="col-"]{padding-right:8px !important;padding-left:8px !important}.gutter-spacious{margin-right:-24px;margin-left:-24px}.gutter-spacious>[class*="col-"]{padding-right:24px !important;padding-left:24px !important}@media (min-width: 544px){.gutter-sm{margin-right:-16px;margin-left:-16px}.gutter-sm>[class*="col-"]{padding-right:16px !important;padding-left:16px !important}.gutter-sm-condensed{margin-right:-8px;margin-left:-8px}.gutter-sm-condensed>[class*="col-"]{padding-right:8px !important;padding-left:8px !important}.gutter-sm-spacious{margin-right:-24px;margin-left:-24px}.gutter-sm-spacious>[class*="col-"]{padding-right:24px !important;padding-left:24px !important}}@media (min-width: 768px){.gutter-md{margin-right:-16px;margin-left:-16px}.gutter-md>[class*="col-"]{padding-right:16px !important;padding-left:16px !important}.gutter-md-condensed{margin-right:-8px;margin-left:-8px}.gutter-md-condensed>[class*="col-"]{padding-right:8px !important;padding-left:8px !important}.gutter-md-spacious{margin-right:-24px;margin-left:-24px}.gutter-md-spacious>[class*="col-"]{padding-right:24px !important;padding-left:24px !important}}@media (min-width: 1012px){.gutter-lg{margin-right:-16px;margin-left:-16px}.gutter-lg>[class*="col-"]{padding-right:16px !important;padding-left:16px !important}.gutter-lg-condensed{margin-right:-8px;margin-left:-8px}.gutter-lg-condensed>[class*="col-"]{padding-right:8px !important;padding-left:8px !important}.gutter-lg-spacious{margin-right:-24px;margin-left:-24px}.gutter-lg-spacious>[class*="col-"]{padding-right:24px !important;padding-left:24px !important}}@media (min-width: 1280px){.gutter-xl{margin-right:-16px;margin-left:-16px}.gutter-xl>[class*="col-"]{padding-right:16px !important;padding-left:16px !important}.gutter-xl-condensed{margin-right:-8px;margin-left:-8px}.gutter-xl-condensed>[class*="col-"]{padding-right:8px !important;padding-left:8px !important}.gutter-xl-spacious{margin-right:-24px;margin-left:-24px}.gutter-xl-spacious>[class*="col-"]{padding-right:24px !important;padding-left:24px !important}}.offset-1{margin-left:8.3333333333% !important}.offset-2{margin-left:16.6666666667% !important}.offset-3{margin-left:25% !important}.offset-4{margin-left:33.3333333333% !important}.offset-5{margin-left:41.6666666667% !important}.offset-6{margin-left:50% !important}.offset-7{margin-left:58.3333333333% !important}.offset-8{margin-left:66.6666666667% !important}.offset-9{margin-left:75% !important}.offset-10{margin-left:83.3333333333% !important}.offset-11{margin-left:91.6666666667% !important}@media (min-width: 544px){.offset-sm-1{margin-left:8.3333333333% !important}.offset-sm-2{margin-left:16.6666666667% !important}.offset-sm-3{margin-left:25% !important}.offset-sm-4{margin-left:33.3333333333% !important}.offset-sm-5{margin-left:41.6666666667% !important}.offset-sm-6{margin-left:50% !important}.offset-sm-7{margin-left:58.3333333333% !important}.offset-sm-8{margin-left:66.6666666667% !important}.offset-sm-9{margin-left:75% !important}.offset-sm-10{margin-left:83.3333333333% !important}.offset-sm-11{margin-left:91.6666666667% !important}}@media (min-width: 768px){.offset-md-1{margin-left:8.3333333333% !important}.offset-md-2{margin-left:16.6666666667% !important}.offset-md-3{margin-left:25% !important}.offset-md-4{margin-left:33.3333333333% !important}.offset-md-5{margin-left:41.6666666667% !important}.offset-md-6{margin-left:50% !important}.offset-md-7{margin-left:58.3333333333% !important}.offset-md-8{margin-left:66.6666666667% !important}.offset-md-9{margin-left:75% !important}.offset-md-10{margin-left:83.3333333333% !important}.offset-md-11{margin-left:91.6666666667% !important}}@media (min-width: 1012px){.offset-lg-1{margin-left:8.3333333333% !important}.offset-lg-2{margin-left:16.6666666667% !important}.offset-lg-3{margin-left:25% !important}.offset-lg-4{margin-left:33.3333333333% !important}.offset-lg-5{margin-left:41.6666666667% !important}.offset-lg-6{margin-left:50% !important}.offset-lg-7{margin-left:58.3333333333% !important}.offset-lg-8{margin-left:66.6666666667% !important}.offset-lg-9{margin-left:75% !important}.offset-lg-10{margin-left:83.3333333333% !important}.offset-lg-11{margin-left:91.6666666667% !important}}@media (min-width: 1280px){.offset-xl-1{margin-left:8.3333333333% !important}.offset-xl-2{margin-left:16.6666666667% !important}.offset-xl-3{margin-left:25% !important}.offset-xl-4{margin-left:33.3333333333% !important}.offset-xl-5{margin-left:41.6666666667% !important}.offset-xl-6{margin-left:50% !important}.offset-xl-7{margin-left:58.3333333333% !important}.offset-xl-8{margin-left:66.6666666667% !important}.offset-xl-9{margin-left:75% !important}.offset-xl-10{margin-left:83.3333333333% !important}.offset-xl-11{margin-left:91.6666666667% !important}}.markdown-body{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-size:16px;line-height:1.5;word-wrap:break-word}.markdown-body::before{display:table;content:""}.markdown-body::after{display:table;clear:both;content:""}.markdown-body>*:first-child{margin-top:0 !important}.markdown-body>*:last-child{margin-bottom:0 !important}.markdown-body a:not([href]){color:inherit;text-decoration:none}.markdown-body .absent{color:#cb2431}.markdown-body .anchor{float:left;padding-right:4px;margin-left:-20px;line-height:1}.markdown-body .anchor:focus{outline:none}.markdown-body p,.markdown-body blockquote,.markdown-body ul,.markdown-body ol,.markdown-body dl,.markdown-body table,.markdown-body pre{margin-top:0;margin-bottom:16px}.markdown-body hr{height:.25em;padding:0;margin:24px 0;background-color:#e1e4e8;border:0}.markdown-body blockquote{padding:0 1em;color:#6a737d;border-left:0.25em solid #dfe2e5}.markdown-body blockquote>:first-child{margin-top:0}.markdown-body blockquote>:last-child{margin-bottom:0}.markdown-body kbd{display:inline-block;padding:3px 5px;font-size:11px;line-height:10px;color:#444d56;vertical-align:middle;background-color:#fafbfc;border:solid 1px #c6cbd1;border-bottom-color:#959da5;border-radius:3px;box-shadow:inset 0 -1px 0 #959da5}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{margin-top:24px;margin-bottom:16px;font-weight:600;line-height:1.25}.markdown-body h1 .octicon-link,.markdown-body h2 .octicon-link,.markdown-body h3 .octicon-link,.markdown-body h4 .octicon-link,.markdown-body h5 .octicon-link,.markdown-body h6 .octicon-link{color:#1b1f23;vertical-align:middle;visibility:hidden}.markdown-body h1:hover .anchor,.markdown-body h2:hover .anchor,.markdown-body h3:hover .anchor,.markdown-body h4:hover .anchor,.markdown-body h5:hover .anchor,.markdown-body h6:hover .anchor{text-decoration:none}.markdown-body h1:hover .anchor .octicon-link,.markdown-body h2:hover .anchor .octicon-link,.markdown-body h3:hover .anchor .octicon-link,.markdown-body h4:hover .anchor .octicon-link,.markdown-body h5:hover .anchor .octicon-link,.markdown-body h6:hover .anchor .octicon-link{visibility:visible}.markdown-body h1 tt,.markdown-body h1 code,.markdown-body h2 tt,.markdown-body h2 code,.markdown-body h3 tt,.markdown-body h3 code,.markdown-body h4 tt,.markdown-body h4 code,.markdown-body h5 tt,.markdown-body h5 code,.markdown-body h6 tt,.markdown-body h6 code{font-size:inherit}.markdown-body h1{padding-bottom:0.3em;font-size:2em;border-bottom:1px solid #eaecef}.markdown-body h2{padding-bottom:0.3em;font-size:1.5em;border-bottom:1px solid #eaecef}.markdown-body h3{font-size:1.25em}.markdown-body h4{font-size:1em}.markdown-body h5{font-size:0.875em}.markdown-body h6{font-size:0.85em;color:#6a737d}.markdown-body ul,.markdown-body ol{padding-left:2em}.markdown-body ul.no-list,.markdown-body ol.no-list{padding:0;list-style-type:none}.markdown-body ul ul,.markdown-body ul ol,.markdown-body ol ol,.markdown-body ol ul{margin-top:0;margin-bottom:0}.markdown-body li{word-wrap:break-all}.markdown-body li>p{margin-top:16px}.markdown-body li+li{margin-top:.25em}.markdown-body dl{padding:0}.markdown-body dl dt{padding:0;margin-top:16px;font-size:1em;font-style:italic;font-weight:600}.markdown-body dl dd{padding:0 16px;margin-bottom:16px}.markdown-body table{display:block;width:100%;overflow:auto}.markdown-body table th{font-weight:600}.markdown-body table th,.markdown-body table td{padding:6px 13px;border:1px solid #dfe2e5}.markdown-body table tr{background-color:#fff;border-top:1px solid #c6cbd1}.markdown-body table tr:nth-child(2n){background-color:#f6f8fa}.markdown-body table img{background-color:transparent}.markdown-body img{max-width:100%;box-sizing:content-box;background-color:#fff}.markdown-body img[align=right]{padding-left:20px}.markdown-body img[align=left]{padding-right:20px}.markdown-body .emoji{max-width:none;vertical-align:text-top;background-color:transparent}.markdown-body span.frame{display:block;overflow:hidden}.markdown-body span.frame>span{display:block;float:left;width:auto;padding:7px;margin:13px 0 0;overflow:hidden;border:1px solid #dfe2e5}.markdown-body span.frame span img{display:block;float:left}.markdown-body span.frame span span{display:block;padding:5px 0 0;clear:both;color:#24292e}.markdown-body span.align-center{display:block;overflow:hidden;clear:both}.markdown-body span.align-center>span{display:block;margin:13px auto 0;overflow:hidden;text-align:center}.markdown-body span.align-center span img{margin:0 auto;text-align:center}.markdown-body span.align-right{display:block;overflow:hidden;clear:both}.markdown-body span.align-right>span{display:block;margin:13px 0 0;overflow:hidden;text-align:right}.markdown-body span.align-right span img{margin:0;text-align:right}.markdown-body span.float-left{display:block;float:left;margin-right:13px;overflow:hidden}.markdown-body span.float-left span{margin:13px 0 0}.markdown-body span.float-right{display:block;float:right;margin-left:13px;overflow:hidden}.markdown-body span.float-right>span{display:block;margin:13px auto 0;overflow:hidden;text-align:right}.markdown-body code,.markdown-body tt{padding:0.2em 0.4em;margin:0;font-size:85%;background-color:rgba(27,31,35,0.05);border-radius:3px}.markdown-body code br,.markdown-body tt br{display:none}.markdown-body del code{text-decoration:inherit}.markdown-body pre{word-wrap:normal}.markdown-body pre>code{padding:0;margin:0;font-size:100%;word-break:normal;white-space:pre;background:transparent;border:0}.markdown-body .highlight{margin-bottom:16px}.markdown-body .highlight pre{margin-bottom:0;word-break:normal}.markdown-body .highlight pre,.markdown-body pre{padding:16px;overflow:auto;font-size:85%;line-height:1.45;background-color:#f6f8fa;border-radius:3px}.markdown-body pre code,.markdown-body pre tt{display:inline;max-width:auto;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}.markdown-body .csv-data td,.markdown-body .csv-data th{padding:5px;overflow:hidden;font-size:12px;line-height:1;text-align:left;white-space:nowrap}.markdown-body .csv-data .blob-num{padding:10px 8px 9px;text-align:right;background:#fff;border:0}.markdown-body .csv-data tr{border-top:0}.markdown-body .csv-data th{font-weight:600;background:#f6f8fa;border-top:0}.highlight table td{padding:5px}.highlight table pre{margin:0}.highlight .cm{color:#999988;font-style:italic}.highlight .cp{color:#999999;font-weight:bold}.highlight .c1{color:#999988;font-style:italic}.highlight .cs{color:#999999;font-weight:bold;font-style:italic}.highlight .c,.highlight .cd{color:#999988;font-style:italic}.highlight .err{color:#a61717;background-color:#e3d2d2}.highlight .gd{color:#000000;background-color:#ffdddd}.highlight .ge{color:#000000;font-style:italic}.highlight .gr{color:#aa0000}.highlight .gh{color:#999999}.highlight .gi{color:#000000;background-color:#ddffdd}.highlight .go{color:#888888}.highlight .gp{color:#555555}.highlight .gs{font-weight:bold}.highlight .gu{color:#aaaaaa}.highlight .gt{color:#aa0000}.highlight .kc{color:#000000;font-weight:bold}.highlight .kd{color:#000000;font-weight:bold}.highlight .kn{color:#000000;font-weight:bold}.highlight .kp{color:#000000;font-weight:bold}.highlight .kr{color:#000000;font-weight:bold}.highlight .kt{color:#445588;font-weight:bold}.highlight .k,.highlight .kv{color:#000000;font-weight:bold}.highlight .mf{color:#009999}.highlight .mh{color:#009999}.highlight .il{color:#009999}.highlight .mi{color:#009999}.highlight .mo{color:#009999}.highlight .m,.highlight .mb,.highlight .mx{color:#009999}.highlight .sb{color:#d14}.highlight .sc{color:#d14}.highlight .sd{color:#d14}.highlight .s2{color:#d14}.highlight .se{color:#d14}.highlight .sh{color:#d14}.highlight .si{color:#d14}.highlight .sx{color:#d14}.highlight .sr{color:#009926}.highlight .s1{color:#d14}.highlight .ss{color:#990073}.highlight .s{color:#d14}.highlight .na{color:#008080}.highlight .bp{color:#999999}.highlight .nb{color:#0086B3}.highlight .nc{color:#445588;font-weight:bold}.highlight .no{color:#008080}.highlight .nd{color:#3c5d5d;font-weight:bold}.highlight .ni{color:#800080}.highlight .ne{color:#990000;font-weight:bold}.highlight .nf{color:#990000;font-weight:bold}.highlight .nl{color:#990000;font-weight:bold}.highlight .nn{color:#555555}.highlight .nt{color:#000080}.highlight .vc{color:#008080}.highlight .vg{color:#008080}.highlight .vi{color:#008080}.highlight .nv{color:#008080}.highlight .ow{color:#000000;font-weight:bold}.highlight .o{color:#000000;font-weight:bold}.highlight .w{color:#bbbbbb}.highlight{background-color:#f8f8f8}
diff --git a/_site/assets/fonts/academicons.eot b/_site/assets/fonts/academicons.eot
new file mode 100755
index 0000000..92ef4af
Binary files /dev/null and b/_site/assets/fonts/academicons.eot differ
diff --git a/_site/assets/fonts/academicons.svg b/_site/assets/fonts/academicons.svg
new file mode 100755
index 0000000..86b51a3
--- /dev/null
+++ b/_site/assets/fonts/academicons.svg
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/_site/assets/fonts/academicons.ttf b/_site/assets/fonts/academicons.ttf
new file mode 100755
index 0000000..330b150
Binary files /dev/null and b/_site/assets/fonts/academicons.ttf differ
diff --git a/_site/assets/fonts/academicons.woff b/_site/assets/fonts/academicons.woff
new file mode 100755
index 0000000..ba4de09
Binary files /dev/null and b/_site/assets/fonts/academicons.woff differ
diff --git a/_site/assets/fonts/fa-brands-400.eot b/_site/assets/fonts/fa-brands-400.eot
new file mode 100644
index 0000000..1a675a4
Binary files /dev/null and b/_site/assets/fonts/fa-brands-400.eot differ
diff --git a/_site/assets/fonts/fa-brands-400.svg b/_site/assets/fonts/fa-brands-400.svg
new file mode 100644
index 0000000..5b60e84
--- /dev/null
+++ b/_site/assets/fonts/fa-brands-400.svg
@@ -0,0 +1,1184 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/_site/assets/fonts/fa-brands-400.ttf b/_site/assets/fonts/fa-brands-400.ttf
new file mode 100644
index 0000000..953d567
Binary files /dev/null and b/_site/assets/fonts/fa-brands-400.ttf differ
diff --git a/_site/assets/fonts/fa-brands-400.woff b/_site/assets/fonts/fa-brands-400.woff
new file mode 100644
index 0000000..1ae5263
Binary files /dev/null and b/_site/assets/fonts/fa-brands-400.woff differ
diff --git a/_site/assets/fonts/fa-brands-400.woff2 b/_site/assets/fonts/fa-brands-400.woff2
new file mode 100644
index 0000000..4a07e40
Binary files /dev/null and b/_site/assets/fonts/fa-brands-400.woff2 differ
diff --git a/_site/assets/fonts/fa-regular-400.eot b/_site/assets/fonts/fa-regular-400.eot
new file mode 100644
index 0000000..db3ed40
Binary files /dev/null and b/_site/assets/fonts/fa-regular-400.eot differ
diff --git a/_site/assets/fonts/fa-regular-400.svg b/_site/assets/fonts/fa-regular-400.svg
new file mode 100644
index 0000000..cf3d065
--- /dev/null
+++ b/_site/assets/fonts/fa-regular-400.svg
@@ -0,0 +1,467 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/_site/assets/fonts/fa-regular-400.ttf b/_site/assets/fonts/fa-regular-400.ttf
new file mode 100644
index 0000000..235101c
Binary files /dev/null and b/_site/assets/fonts/fa-regular-400.ttf differ
diff --git a/_site/assets/fonts/fa-regular-400.woff b/_site/assets/fonts/fa-regular-400.woff
new file mode 100644
index 0000000..9058e29
Binary files /dev/null and b/_site/assets/fonts/fa-regular-400.woff differ
diff --git a/_site/assets/fonts/fa-regular-400.woff2 b/_site/assets/fonts/fa-regular-400.woff2
new file mode 100644
index 0000000..1489f64
Binary files /dev/null and b/_site/assets/fonts/fa-regular-400.woff2 differ
diff --git a/_site/assets/fonts/fa-solid-900.eot b/_site/assets/fonts/fa-solid-900.eot
new file mode 100644
index 0000000..cb8d3f0
Binary files /dev/null and b/_site/assets/fonts/fa-solid-900.eot differ
diff --git a/_site/assets/fonts/fa-solid-900.svg b/_site/assets/fonts/fa-solid-900.svg
new file mode 100644
index 0000000..bd7565a
--- /dev/null
+++ b/_site/assets/fonts/fa-solid-900.svg
@@ -0,0 +1,2618 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/_site/assets/fonts/fa-solid-900.ttf b/_site/assets/fonts/fa-solid-900.ttf
new file mode 100644
index 0000000..7c92e98
Binary files /dev/null and b/_site/assets/fonts/fa-solid-900.ttf differ
diff --git a/_site/assets/fonts/fa-solid-900.woff b/_site/assets/fonts/fa-solid-900.woff
new file mode 100644
index 0000000..b7d52cf
Binary files /dev/null and b/_site/assets/fonts/fa-solid-900.woff differ
diff --git a/_site/assets/fonts/fa-solid-900.woff2 b/_site/assets/fonts/fa-solid-900.woff2
new file mode 100644
index 0000000..59d92b2
Binary files /dev/null and b/_site/assets/fonts/fa-solid-900.woff2 differ
diff --git a/_site/assets/js/collapse.js b/_site/assets/js/collapse.js
new file mode 100644
index 0000000..d182863
--- /dev/null
+++ b/_site/assets/js/collapse.js
@@ -0,0 +1,16 @@
+$(".header").click(function () {
+
+ $header = $(this);
+ //getting the next element
+ $content = $header.next();
+ //open up the content needed - toggle the slide- if visible, slide up, if not slidedown.
+ $content.slideToggle(500, function () {
+ //execute this after slideToggle is done
+ //change text of header based on visibility of content div
+ $header.text(function () {
+ //change text based on condition
+ return $content.is(":visible") ? "Collapse" : "Expand";
+ });
+ });
+
+});
diff --git a/_site/assets/js/main.min.js b/_site/assets/js/main.min.js
new file mode 100644
index 0000000..e44be7f
--- /dev/null
+++ b/_site/assets/js/main.min.js
@@ -0,0 +1,5 @@
+function updateNav(){var e=$btn.hasClass("hidden")?$nav.width():$nav.width()-$btn.width()-30;$vlinks.width()>e?(breaks.push($vlinks.width()),$vlinks.children().last().prependTo($hlinks),$btn.hasClass("hidden")&&$btn.removeClass("hidden")):(e>breaks[breaks.length-1]&&($hlinks.children().first().appendTo($vlinks),breaks.pop()),breaks.length<1&&($btn.addClass("hidden"),$hlinks.addClass("hidden"))),$btn.attr("count",breaks.length),$vlinks.width()>e&&updateNav()}!function(e,t){"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(e,t){function n(e){var t=!!e&&"length"in e&&e.length,n=pe.type(e);return"function"!==n&&!pe.isWindow(e)&&("array"===n||0===t||"number"==typeof t&&t>0&&t-1 in e)}function i(e,t,n){if(pe.isFunction(t))return pe.grep(e,function(e,i){return!!t.call(e,i,e)!==n});if(t.nodeType)return pe.grep(e,function(e){return e===t!==n});if("string"==typeof t){if(Te.test(t))return pe.filter(t,e,n);t=pe.filter(t,e)}return pe.grep(e,function(e){return pe.inArray(e,t)>-1!==n})}function r(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}function o(e){var t={};return pe.each(e.match(Ae)||[],function(e,n){t[n]=!0}),t}function a(){ie.addEventListener?(ie.removeEventListener("DOMContentLoaded",s),e.removeEventListener("load",s)):(ie.detachEvent("onreadystatechange",s),e.detachEvent("onload",s))}function s(){(ie.addEventListener||"load"===e.event.type||"complete"===ie.readyState)&&(a(),pe.ready())}function l(e,t,n){if(void 0===n&&1===e.nodeType){var i="data-"+t.replace(He,"-$1").toLowerCase();if(n=e.getAttribute(i),"string"==typeof n){try{n="true"===n||"false"!==n&&("null"===n?null:+n+""===n?+n:Ie.test(n)?pe.parseJSON(n):n)}catch(e){}pe.data(e,t,n)}else n=void 0}return n}function u(e){var t;for(t in e)if(("data"!==t||!pe.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}function c(e,t,n,i){if(De(e)){var r,o,a=pe.expando,s=e.nodeType,l=s?pe.cache:e,u=s?e[a]:e[a]&&a;if(u&&l[u]&&(i||l[u].data)||void 0!==n||"string"!=typeof t)return u||(u=s?e[a]=ne.pop()||pe.guid++:a),l[u]||(l[u]=s?{}:{toJSON:pe.noop}),"object"!=typeof t&&"function"!=typeof t||(i?l[u]=pe.extend(l[u],t):l[u].data=pe.extend(l[u].data,t)),o=l[u],i||(o.data||(o.data={}),o=o.data),void 0!==n&&(o[pe.camelCase(t)]=n),"string"==typeof t?(r=o[t],null==r&&(r=o[pe.camelCase(t)])):r=o,r}}function d(e,t,n){if(De(e)){var i,r,o=e.nodeType,a=o?pe.cache:e,s=o?e[pe.expando]:pe.expando;if(a[s]){if(t&&(i=n?a[s]:a[s].data)){pe.isArray(t)?t=t.concat(pe.map(t,pe.camelCase)):t in i?t=[t]:(t=pe.camelCase(t),t=t in i?[t]:t.split(" ")),r=t.length;for(;r--;)delete i[t[r]];if(n?!u(i):!pe.isEmptyObject(i))return}(n||(delete a[s].data,u(a[s])))&&(o?pe.cleanData([e],!0):de.deleteExpando||a!=a.window?delete a[s]:a[s]=void 0)}}}function f(e,t,n,i){var r,o=1,a=20,s=i?function(){return i.cur()}:function(){return pe.css(e,t,"")},l=s(),u=n&&n[3]||(pe.cssNumber[t]?"":"px"),c=(pe.cssNumber[t]||"px"!==u&&+l)&&Me.exec(pe.css(e,t));if(c&&c[3]!==u){u=u||c[3],n=n||[],c=+l||1;do o=o||".5",c/=o,pe.style(e,t,c+u);while(o!==(o=s()/l)&&1!==o&&--a)}return n&&(c=+c||+l||0,r=n[1]?c+(n[1]+1)*n[2]:+n[2],i&&(i.unit=u,i.start=c,i.end=r)),r}function p(e){var t=We.split("|"),n=e.createDocumentFragment();if(n.createElement)for(;t.length;)n.createElement(t.pop());return n}function h(e,t){var n,i,r=0,o="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):void 0;if(!o)for(o=[],n=e.childNodes||e;null!=(i=n[r]);r++)!t||pe.nodeName(i,t)?o.push(i):pe.merge(o,h(i,t));return void 0===t||t&&pe.nodeName(e,t)?pe.merge([e],o):o}function m(e,t){for(var n,i=0;null!=(n=e[i]);i++)pe._data(n,"globalEval",!t||pe._data(t[i],"globalEval"))}function g(e){qe.test(e.type)&&(e.defaultChecked=e.checked)}function v(e,t,n,i,r){for(var o,a,s,l,u,c,d,f=e.length,v=p(t),y=[],b=0;f>b;b++)if(a=e[b],a||0===a)if("object"===pe.type(a))pe.merge(y,a.nodeType?[a]:a);else if(Ye.test(a)){for(l=l||v.appendChild(t.createElement("div")),u=($e.exec(a)||["",""])[1].toLowerCase(),d=Xe[u]||Xe._default,l.innerHTML=d[1]+pe.htmlPrefilter(a)+d[2],o=d[0];o--;)l=l.lastChild;if(!de.leadingWhitespace&&Re.test(a)&&y.push(t.createTextNode(Re.exec(a)[0])),!de.tbody)for(a="table"!==u||Ue.test(a)?""!==d[1]||Ue.test(a)?0:l:l.firstChild,o=a&&a.childNodes.length;o--;)pe.nodeName(c=a.childNodes[o],"tbody")&&!c.childNodes.length&&a.removeChild(c);for(pe.merge(y,l.childNodes),l.textContent="";l.firstChild;)l.removeChild(l.firstChild);l=v.lastChild}else y.push(t.createTextNode(a));for(l&&v.removeChild(l),de.appendChecked||pe.grep(h(y,"input"),g),b=0;a=y[b++];)if(i&&pe.inArray(a,i)>-1)r&&r.push(a);else if(s=pe.contains(a.ownerDocument,a),l=h(v.appendChild(a),"script"),s&&m(l),n)for(o=0;a=l[o++];)ze.test(a.type||"")&&n.push(a);return l=null,v}function y(){return!0}function b(){return!1}function x(){try{return ie.activeElement}catch(e){}}function w(e,t,n,i,r,o){var a,s;if("object"==typeof t){"string"!=typeof n&&(i=i||n,n=void 0);for(s in t)w(e,s,n,i,t[s],o);return e}if(null==i&&null==r?(r=n,i=n=void 0):null==r&&("string"==typeof n?(r=i,i=void 0):(r=i,i=n,n=void 0)),r===!1)r=b;else if(!r)return e;return 1===o&&(a=r,r=function(e){return pe().off(e),a.apply(this,arguments)},r.guid=a.guid||(a.guid=pe.guid++)),e.each(function(){pe.event.add(this,t,r,i,n)})}function C(e,t){return pe.nodeName(e,"table")&&pe.nodeName(11!==t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function T(e){return e.type=(null!==pe.find.attr(e,"type"))+"/"+e.type,e}function k(e){var t=rt.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function E(e,t){if(1===t.nodeType&&pe.hasData(e)){var n,i,r,o=pe._data(e),a=pe._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(i=0,r=s[n].length;r>i;i++)pe.event.add(t,n,s[n][i])}a.data&&(a.data=pe.extend({},a.data))}}function S(e,t){var n,i,r;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!de.noCloneEvent&&t[pe.expando]){r=pe._data(t);for(i in r.events)pe.removeEvent(t,i,r.handle);t.removeAttribute(pe.expando)}"script"===n&&t.text!==e.text?(T(t).text=e.text,k(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),de.html5Clone&&e.innerHTML&&!pe.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"===n&&qe.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):"option"===n?t.defaultSelected=t.selected=e.defaultSelected:"input"!==n&&"textarea"!==n||(t.defaultValue=e.defaultValue)}}function N(e,t,n,i){t=oe.apply([],t);var r,o,a,s,l,u,c=0,d=e.length,f=d-1,p=t[0],m=pe.isFunction(p);if(m||d>1&&"string"==typeof p&&!de.checkClone&&it.test(p))return e.each(function(r){var o=e.eq(r);m&&(t[0]=p.call(this,r,o.html())),N(o,t,n,i)});if(d&&(u=v(t,e[0].ownerDocument,!1,e,i),r=u.firstChild,1===u.childNodes.length&&(u=r),r||i)){for(s=pe.map(h(u,"script"),T),a=s.length;d>c;c++)o=u,c!==f&&(o=pe.clone(o,!0,!0),a&&pe.merge(s,h(o,"script"))),n.call(e[c],o,c);if(a)for(l=s[s.length-1].ownerDocument,pe.map(s,k),c=0;a>c;c++)o=s[c],ze.test(o.type||"")&&!pe._data(o,"globalEval")&&pe.contains(l,o)&&(o.src?pe._evalUrl&&pe._evalUrl(o.src):pe.globalEval((o.text||o.textContent||o.innerHTML||"").replace(ot,"")));u=r=null}return e}function L(e,t,n){for(var i,r=t?pe.filter(t,e):e,o=0;null!=(i=r[o]);o++)n||1!==i.nodeType||pe.cleanData(h(i)),i.parentNode&&(n&&pe.contains(i.ownerDocument,i)&&m(h(i,"script")),i.parentNode.removeChild(i));return e}function A(e,t){var n=pe(t.createElement(e)).appendTo(t.body),i=pe.css(n[0],"display");return n.detach(),i}function j(e){var t=ie,n=ut[e];return n||(n=A(e,t),"none"!==n&&n||(lt=(lt||pe("")).appendTo(t.documentElement),t=(lt[0].contentWindow||lt[0].contentDocument).document,t.write(),t.close(),n=A(e,t),lt.detach()),ut[e]=n),n}function _(e,t){return{get:function(){return e()?void delete this.get:(this.get=t).apply(this,arguments)}}}function D(e){if(e in kt)return e;for(var t=e.charAt(0).toUpperCase()+e.slice(1),n=Tt.length;n--;)if(e=Tt[n]+t,e in kt)return e}function I(e,t){for(var n,i,r,o=[],a=0,s=e.length;s>a;a++)i=e[a],i.style&&(o[a]=pe._data(i,"olddisplay"),n=i.style.display,t?(o[a]||"none"!==n||(i.style.display=""),""===i.style.display&&Be(i)&&(o[a]=pe._data(i,"olddisplay",j(i.nodeName)))):(r=Be(i),(n&&"none"!==n||!r)&&pe._data(i,"olddisplay",r?n:pe.css(i,"display"))));for(a=0;s>a;a++)i=e[a],i.style&&(t&&"none"!==i.style.display&&""!==i.style.display||(i.style.display=t?o[a]||"":"none"));return e}function H(e,t,n){var i=xt.exec(t);return i?Math.max(0,i[1]-(n||0))+(i[2]||"px"):t}function O(e,t,n,i,r){for(var o=n===(i?"border":"content")?4:"width"===t?1:0,a=0;4>o;o+=2)"margin"===n&&(a+=pe.css(e,n+Pe[o],!0,r)),i?("content"===n&&(a-=pe.css(e,"padding"+Pe[o],!0,r)),"margin"!==n&&(a-=pe.css(e,"border"+Pe[o]+"Width",!0,r))):(a+=pe.css(e,"padding"+Pe[o],!0,r),"padding"!==n&&(a+=pe.css(e,"border"+Pe[o]+"Width",!0,r)));return a}function M(e,t,n){var i=!0,r="width"===t?e.offsetWidth:e.offsetHeight,o=ht(e),a=de.boxSizing&&"border-box"===pe.css(e,"boxSizing",!1,o);if(0>=r||null==r){if(r=mt(e,t,o),(0>r||null==r)&&(r=e.style[t]),dt.test(r))return r;i=a&&(de.boxSizingReliable()||r===e.style[t]),r=parseFloat(r)||0}return r+O(e,t,n||(a?"border":"content"),i,o)+"px"}function P(e,t,n,i,r){return new P.prototype.init(e,t,n,i,r)}function B(){return e.setTimeout(function(){Et=void 0}),Et=pe.now()}function F(e,t){var n,i={height:e},r=0;for(t=t?1:0;4>r;r+=2-t)n=Pe[r],i["margin"+n]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function q(e,t,n){for(var i,r=(R.tweeners[t]||[]).concat(R.tweeners["*"]),o=0,a=r.length;a>o;o++)if(i=r[o].call(n,t,e))return i}function $(e,t,n){var i,r,o,a,s,l,u,c,d=this,f={},p=e.style,h=e.nodeType&&Be(e),m=pe._data(e,"fxshow");n.queue||(s=pe._queueHooks(e,"fx"),null==s.unqueued&&(s.unqueued=0,l=s.empty.fire,s.empty.fire=function(){s.unqueued||l()}),s.unqueued++,d.always(function(){d.always(function(){s.unqueued--,pe.queue(e,"fx").length||s.empty.fire()})})),1===e.nodeType&&("height"in t||"width"in t)&&(n.overflow=[p.overflow,p.overflowX,p.overflowY],u=pe.css(e,"display"),c="none"===u?pe._data(e,"olddisplay")||j(e.nodeName):u,"inline"===c&&"none"===pe.css(e,"float")&&(de.inlineBlockNeedsLayout&&"inline"!==j(e.nodeName)?p.zoom=1:p.display="inline-block")),n.overflow&&(p.overflow="hidden",de.shrinkWrapBlocks()||d.always(function(){p.overflow=n.overflow[0],p.overflowX=n.overflow[1],p.overflowY=n.overflow[2]}));for(i in t)if(r=t[i],Nt.exec(r)){if(delete t[i],o=o||"toggle"===r,r===(h?"hide":"show")){if("show"!==r||!m||void 0===m[i])continue;h=!0}f[i]=m&&m[i]||pe.style(e,i)}else u=void 0;if(pe.isEmptyObject(f))"inline"===("none"===u?j(e.nodeName):u)&&(p.display=u);else{m?"hidden"in m&&(h=m.hidden):m=pe._data(e,"fxshow",{}),o&&(m.hidden=!h),h?pe(e).show():d.done(function(){pe(e).hide()}),d.done(function(){var t;pe._removeData(e,"fxshow");for(t in f)pe.style(e,t,f[t])});for(i in f)a=q(h?m[i]:0,i,d),i in m||(m[i]=a.start,h&&(a.end=a.start,a.start="width"===i||"height"===i?1:0))}}function z(e,t){var n,i,r,o,a;for(n in e)if(i=pe.camelCase(n),r=t[i],o=e[n],pe.isArray(o)&&(r=o[1],o=e[n]=o[0]),n!==i&&(e[i]=o,delete e[n]),a=pe.cssHooks[i],a&&"expand"in a){o=a.expand(o),delete e[i];for(n in o)n in e||(e[n]=o[n],t[n]=r)}else t[i]=r}function R(e,t,n){var i,r,o=0,a=R.prefilters.length,s=pe.Deferred().always(function(){delete l.elem}),l=function(){if(r)return!1;for(var t=Et||B(),n=Math.max(0,u.startTime+u.duration-t),i=n/u.duration||0,o=1-i,a=0,l=u.tweens.length;l>a;a++)u.tweens[a].run(o);return s.notifyWith(e,[u,o,n]),1>o&&l?n:(s.resolveWith(e,[u]),!1)},u=s.promise({elem:e,props:pe.extend({},t),opts:pe.extend(!0,{specialEasing:{},easing:pe.easing._default},n),originalProperties:t,originalOptions:n,startTime:Et||B(),duration:n.duration,tweens:[],createTween:function(t,n){var i=pe.Tween(e,u.opts,t,n,u.opts.specialEasing[t]||u.opts.easing);return u.tweens.push(i),i},stop:function(t){var n=0,i=t?u.tweens.length:0;if(r)return this;for(r=!0;i>n;n++)u.tweens[n].run(1);return t?(s.notifyWith(e,[u,1,0]),s.resolveWith(e,[u,t])):s.rejectWith(e,[u,t]),this}}),c=u.props;for(z(c,u.opts.specialEasing);a>o;o++)if(i=R.prefilters[o].call(u,e,c,u.opts))return pe.isFunction(i.stop)&&(pe._queueHooks(u.elem,u.opts.queue).stop=pe.proxy(i.stop,i)),i;return pe.map(c,q,u),pe.isFunction(u.opts.start)&&u.opts.start.call(e,u),pe.fx.timer(pe.extend(l,{elem:e,anim:u,queue:u.opts.queue})),u.progress(u.opts.progress).done(u.opts.done,u.opts.complete).fail(u.opts.fail).always(u.opts.always)}function W(e){return pe.attr(e,"class")||""}function X(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var i,r=0,o=t.toLowerCase().match(Ae)||[];if(pe.isFunction(n))for(;i=o[r++];)"+"===i.charAt(0)?(i=i.slice(1)||"*",(e[i]=e[i]||[]).unshift(n)):(e[i]=e[i]||[]).push(n)}}function Y(e,t,n,i){function r(s){var l;return o[s]=!0,pe.each(e[s]||[],function(e,s){var u=s(t,n,i);return"string"!=typeof u||a||o[u]?a?!(l=u):void 0:(t.dataTypes.unshift(u),r(u),!1)}),l}var o={},a=e===Jt;return r(t.dataTypes[0])||!o["*"]&&r("*")}function U(e,t){var n,i,r=pe.ajaxSettings.flatOptions||{};for(i in t)void 0!==t[i]&&((r[i]?e:n||(n={}))[i]=t[i]);return n&&pe.extend(!0,e,n),e}function V(e,t,n){for(var i,r,o,a,s=e.contents,l=e.dataTypes;"*"===l[0];)l.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(a in s)if(s[a]&&s[a].test(r)){l.unshift(a);break}if(l[0]in n)o=l[0];else{for(a in n){if(!l[0]||e.converters[a+" "+l[0]]){o=a;break}i||(i=a)}o=o||i}return o?(o!==l[0]&&l.unshift(o),n[o]):void 0}function G(e,t,n,i){var r,o,a,s,l,u={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)u[a.toLowerCase()]=e.converters[a];for(o=c.shift();o;)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!l&&i&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),l=o,o=c.shift())if("*"===o)o=l;else if("*"!==l&&l!==o){if(a=u[l+" "+o]||u["* "+o],!a)for(r in u)if(s=r.split(" "),s[1]===o&&(a=u[l+" "+s[0]]||u["* "+s[0]])){a===!0?a=u[r]:u[r]!==!0&&(o=s[0],c.unshift(s[1]));break}if(a!==!0)if(a&&e.throws)t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+l+" to "+o}}}return{state:"success",data:t}}function Q(e){return e.style&&e.style.display||pe.css(e,"display")}function Z(e){if(!pe.contains(e.ownerDocument||ie,e))return!0;for(;e&&1===e.nodeType;){if("none"===Q(e)||"hidden"===e.type)return!0;e=e.parentNode}return!1}function J(e,t,n,i){var r;if(pe.isArray(t))pe.each(t,function(t,r){n||rn.test(e)?i(e,r):J(e+"["+("object"==typeof r&&null!=r?t:"")+"]",r,n,i)});else if(n||"object"!==pe.type(t))i(e,t);else for(r in t)J(e+"["+r+"]",t[r],n,i)}function K(){try{return new e.XMLHttpRequest}catch(e){}}function ee(){try{return new e.ActiveXObject("Microsoft.XMLHTTP")}catch(e){}}function te(e){return pe.isWindow(e)?e:9===e.nodeType&&(e.defaultView||e.parentWindow)}var ne=[],ie=e.document,re=ne.slice,oe=ne.concat,ae=ne.push,se=ne.indexOf,le={},ue=le.toString,ce=le.hasOwnProperty,de={},fe="1.12.4",pe=function(e,t){return new pe.fn.init(e,t)},he=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,me=/^-ms-/,ge=/-([\da-z])/gi,ve=function(e,t){return t.toUpperCase()};pe.fn=pe.prototype={jquery:fe,constructor:pe,selector:"",length:0,toArray:function(){return re.call(this)},get:function(e){return null!=e?0>e?this[e+this.length]:this[e]:re.call(this)},pushStack:function(e){var t=pe.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e){return pe.each(this,e)},map:function(e){return this.pushStack(pe.map(this,function(t,n){return e.call(t,n,t)}))},slice:function(){return this.pushStack(re.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:ae,sort:ne.sort,splice:ne.splice},pe.extend=pe.fn.extend=function(){var e,t,n,i,r,o,a=arguments[0]||{},s=1,l=arguments.length,u=!1;for("boolean"==typeof a&&(u=a,a=arguments[s]||{},s++),"object"==typeof a||pe.isFunction(a)||(a={}),s===l&&(a=this,s--);l>s;s++)if(null!=(r=arguments[s]))for(i in r)e=a[i],n=r[i],a!==n&&(u&&n&&(pe.isPlainObject(n)||(t=pe.isArray(n)))?(t?(t=!1,o=e&&pe.isArray(e)?e:[]):o=e&&pe.isPlainObject(e)?e:{},a[i]=pe.extend(u,o,n)):void 0!==n&&(a[i]=n));return a},pe.extend({expando:"jQuery"+(fe+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isFunction:function(e){return"function"===pe.type(e)},isArray:Array.isArray||function(e){return"array"===pe.type(e)},isWindow:function(e){return null!=e&&e==e.window},isNumeric:function(e){var t=e&&e.toString();return!pe.isArray(e)&&t-parseFloat(t)+1>=0},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},isPlainObject:function(e){var t;if(!e||"object"!==pe.type(e)||e.nodeType||pe.isWindow(e))return!1;try{if(e.constructor&&!ce.call(e,"constructor")&&!ce.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(e){return!1}if(!de.ownFirst)for(t in e)return ce.call(e,t);for(t in e);return void 0===t||ce.call(e,t)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?le[ue.call(e)]||"object":typeof e},globalEval:function(t){t&&pe.trim(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(me,"ms-").replace(ge,ve)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t){var i,r=0;if(n(e))for(i=e.length;i>r&&t.call(e[r],r,e[r])!==!1;r++);else for(r in e)if(t.call(e[r],r,e[r])===!1)break;return e},trim:function(e){return null==e?"":(e+"").replace(he,"")},makeArray:function(e,t){var i=t||[];return null!=e&&(n(Object(e))?pe.merge(i,"string"==typeof e?[e]:e):ae.call(i,e)),i},inArray:function(e,t,n){var i;if(t){if(se)return se.call(t,e,n);for(i=t.length,n=n?0>n?Math.max(0,i+n):n:0;i>n;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,t){for(var n=+t.length,i=0,r=e.length;n>i;)e[r++]=t[i++];if(n!==n)for(;void 0!==t[i];)e[r++]=t[i++];return e.length=r,e},grep:function(e,t,n){for(var i,r=[],o=0,a=e.length,s=!n;a>o;o++)i=!t(e[o],o),i!==s&&r.push(e[o]);return r},map:function(e,t,i){var r,o,a=0,s=[];if(n(e))for(r=e.length;r>a;a++)o=t(e[a],a,i),null!=o&&s.push(o);else for(a in e)o=t(e[a],a,i),null!=o&&s.push(o);return oe.apply([],s)},guid:1,proxy:function(e,t){var n,i,r;return"string"==typeof t&&(r=e[t],t=e,e=r),pe.isFunction(e)?(n=re.call(arguments,2),i=function(){return e.apply(t||this,n.concat(re.call(arguments)))},i.guid=e.guid=e.guid||pe.guid++,i):void 0},now:function(){return+new Date},support:de}),"function"==typeof Symbol&&(pe.fn[Symbol.iterator]=ne[Symbol.iterator]),pe.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){le["[object "+t+"]"]=t.toLowerCase()});var ye=function(e){function t(e,t,n,i){var r,o,a,s,l,u,d,p,h=t&&t.ownerDocument,m=t?t.nodeType:9;if(n=n||[],"string"!=typeof e||!e||1!==m&&9!==m&&11!==m)return n;if(!i&&((t?t.ownerDocument||t:q)!==D&&_(t),t=t||D,H)){if(11!==m&&(u=ve.exec(e)))if(r=u[1]){if(9===m){if(!(a=t.getElementById(r)))return n;if(a.id===r)return n.push(a),n}else if(h&&(a=h.getElementById(r))&&B(t,a)&&a.id===r)return n.push(a),n}else{if(u[2])return J.apply(n,t.getElementsByTagName(e)),n;if((r=u[3])&&w.getElementsByClassName&&t.getElementsByClassName)return J.apply(n,t.getElementsByClassName(r)),n}if(w.qsa&&!X[e+" "]&&(!O||!O.test(e))){if(1!==m)h=t,p=e;else if("object"!==t.nodeName.toLowerCase()){for((s=t.getAttribute("id"))?s=s.replace(be,"\\$&"):t.setAttribute("id",s=F),d=E(e),o=d.length,l=fe.test(s)?"#"+s:"[id='"+s+"']";o--;)d[o]=l+" "+f(d[o]);p=d.join(","),h=ye.test(e)&&c(t.parentNode)||t}if(p)try{return J.apply(n,h.querySelectorAll(p)),n}catch(e){}finally{s===F&&t.removeAttribute("id")}}}return N(e.replace(se,"$1"),t,n,i)}function n(){function e(n,i){return t.push(n+" ")>C.cacheLength&&delete e[t.shift()],e[n+" "]=i}var t=[];return e}function i(e){return e[F]=!0,e}function r(e){var t=D.createElement("div");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function o(e,t){for(var n=e.split("|"),i=n.length;i--;)C.attrHandle[n[i]]=t}function a(e,t){var n=t&&e,i=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||U)-(~e.sourceIndex||U);if(i)return i;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function s(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function l(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function u(e){return i(function(t){return t=+t,i(function(n,i){for(var r,o=e([],n.length,t),a=o.length;a--;)n[r=o[a]]&&(n[r]=!(i[r]=n[r]))})})}function c(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}function d(){}function f(e){for(var t=0,n=e.length,i="";n>t;t++)i+=e[t].value;return i}function p(e,t,n){var i=t.dir,r=n&&"parentNode"===i,o=z++;return t.first?function(t,n,o){for(;t=t[i];)if(1===t.nodeType||r)return e(t,n,o)}:function(t,n,a){var s,l,u,c=[$,o];if(a){for(;t=t[i];)if((1===t.nodeType||r)&&e(t,n,a))return!0}else for(;t=t[i];)if(1===t.nodeType||r){if(u=t[F]||(t[F]={}),l=u[t.uniqueID]||(u[t.uniqueID]={}),(s=l[i])&&s[0]===$&&s[1]===o)return c[2]=s[2];if(l[i]=c,c[2]=e(t,n,a))return!0}}}function h(e){return e.length>1?function(t,n,i){for(var r=e.length;r--;)if(!e[r](t,n,i))return!1;return!0}:e[0]}function m(e,n,i){for(var r=0,o=n.length;o>r;r++)t(e,n[r],i);return i}function g(e,t,n,i,r){for(var o,a=[],s=0,l=e.length,u=null!=t;l>s;s++)(o=e[s])&&(n&&!n(o,i,r)||(a.push(o),u&&t.push(s)));return a}function v(e,t,n,r,o,a){return r&&!r[F]&&(r=v(r)),o&&!o[F]&&(o=v(o,a)),i(function(i,a,s,l){var u,c,d,f=[],p=[],h=a.length,v=i||m(t||"*",s.nodeType?[s]:s,[]),y=!e||!i&&t?v:g(v,f,e,s,l),b=n?o||(i?e:h||r)?[]:a:y;if(n&&n(y,b,s,l),r)for(u=g(b,p),r(u,[],s,l),c=u.length;c--;)(d=u[c])&&(b[p[c]]=!(y[p[c]]=d));if(i){if(o||e){if(o){for(u=[],c=b.length;c--;)(d=b[c])&&u.push(y[c]=d);o(null,b=[],u,l)}for(c=b.length;c--;)(d=b[c])&&(u=o?ee(i,d):f[c])>-1&&(i[u]=!(a[u]=d))}}else b=g(b===a?b.splice(h,b.length):b),o?o(null,a,b,l):J.apply(a,b)})}function y(e){for(var t,n,i,r=e.length,o=C.relative[e[0].type],a=o||C.relative[" "],s=o?1:0,l=p(function(e){return e===t},a,!0),u=p(function(e){return ee(t,e)>-1},a,!0),c=[function(e,n,i){var r=!o&&(i||n!==L)||((t=n).nodeType?l(e,n,i):u(e,n,i));return t=null,r}];r>s;s++)if(n=C.relative[e[s].type])c=[p(h(c),n)];else{if(n=C.filter[e[s].type].apply(null,e[s].matches),n[F]){for(i=++s;r>i&&!C.relative[e[i].type];i++);return v(s>1&&h(c),s>1&&f(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace(se,"$1"),n,i>s&&y(e.slice(s,i)),r>i&&y(e=e.slice(i)),r>i&&f(e))}c.push(n)}return h(c)}function b(e,n){var r=n.length>0,o=e.length>0,a=function(i,a,s,l,u){var c,d,f,p=0,h="0",m=i&&[],v=[],y=L,b=i||o&&C.find.TAG("*",u),x=$+=null==y?1:Math.random()||.1,w=b.length;for(u&&(L=a===D||a||u);h!==w&&null!=(c=b[h]);h++){if(o&&c){for(d=0,a||c.ownerDocument===D||(_(c),s=!H);f=e[d++];)if(f(c,a||D,s)){l.push(c);break}u&&($=x)}r&&((c=!f&&c)&&p--,i&&m.push(c))}if(p+=h,r&&h!==p){for(d=0;f=n[d++];)f(m,v,a,s);if(i){if(p>0)for(;h--;)m[h]||v[h]||(v[h]=Q.call(l));v=g(v)}J.apply(l,v),u&&!i&&v.length>0&&p+n.length>1&&t.uniqueSort(l)}return u&&($=x,L=y),m};return r?i(a):a}var x,w,C,T,k,E,S,N,L,A,j,_,D,I,H,O,M,P,B,F="sizzle"+1*new Date,q=e.document,$=0,z=0,R=n(),W=n(),X=n(),Y=function(e,t){return e===t&&(j=!0),0},U=1<<31,V={}.hasOwnProperty,G=[],Q=G.pop,Z=G.push,J=G.push,K=G.slice,ee=function(e,t){for(var n=0,i=e.length;i>n;n++)if(e[n]===t)return n;return-1},te="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",ne="[\\x20\\t\\r\\n\\f]",ie="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",re="\\["+ne+"*("+ie+")(?:"+ne+"*([*^$|!~]?=)"+ne+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+ie+"))|)"+ne+"*\\]",oe=":("+ie+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+re+")*)|.*)\\)|)",ae=new RegExp(ne+"+","g"),se=new RegExp("^"+ne+"+|((?:^|[^\\\\])(?:\\\\.)*)"+ne+"+$","g"),le=new RegExp("^"+ne+"*,"+ne+"*"),ue=new RegExp("^"+ne+"*([>+~]|"+ne+")"+ne+"*"),ce=new RegExp("="+ne+"*([^\\]'\"]*?)"+ne+"*\\]","g"),de=new RegExp(oe),fe=new RegExp("^"+ie+"$"),pe={ID:new RegExp("^#("+ie+")"),CLASS:new RegExp("^\\.("+ie+")"),TAG:new RegExp("^("+ie+"|[*])"),ATTR:new RegExp("^"+re),PSEUDO:new RegExp("^"+oe),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ne+"*(even|odd|(([+-]|)(\\d*)n|)"+ne+"*(?:([+-]|)"+ne+"*(\\d+)|))"+ne+"*\\)|)","i"),bool:new RegExp("^(?:"+te+")$","i"),needsContext:new RegExp("^"+ne+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ne+"*((?:-\\d)?\\d*)"+ne+"*\\)|)(?=[^-]|$)","i")},he=/^(?:input|select|textarea|button)$/i,me=/^h\d$/i,ge=/^[^{]+\{\s*\[native \w/,ve=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ye=/[+~]/,be=/'|\\/g,xe=new RegExp("\\\\([\\da-f]{1,6}"+ne+"?|("+ne+")|.)","ig"),we=function(e,t,n){var i="0x"+t-65536;return i!==i||n?t:0>i?String.fromCharCode(i+65536):String.fromCharCode(i>>10|55296,1023&i|56320)},Ce=function(){_()};try{J.apply(G=K.call(q.childNodes),q.childNodes),G[q.childNodes.length].nodeType}catch(e){J={apply:G.length?function(e,t){Z.apply(e,K.call(t))}:function(e,t){for(var n=e.length,i=0;e[n++]=t[i++];);e.length=n-1}}}w=t.support={},k=t.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},_=t.setDocument=function(e){var t,n,i=e?e.ownerDocument||e:q;return i!==D&&9===i.nodeType&&i.documentElement?(D=i,I=D.documentElement,H=!k(D),(n=D.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",Ce,!1):n.attachEvent&&n.attachEvent("onunload",Ce)),w.attributes=r(function(e){return e.className="i",!e.getAttribute("className")}),w.getElementsByTagName=r(function(e){return e.appendChild(D.createComment("")),!e.getElementsByTagName("*").length}),w.getElementsByClassName=ge.test(D.getElementsByClassName),w.getById=r(function(e){return I.appendChild(e).id=F,!D.getElementsByName||!D.getElementsByName(F).length}),w.getById?(C.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&H){var n=t.getElementById(e);return n?[n]:[]}},C.filter.ID=function(e){var t=e.replace(xe,we);return function(e){return e.getAttribute("id")===t}}):(delete C.find.ID,C.filter.ID=function(e){var t=e.replace(xe,we);return function(e){var n="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}}),C.find.TAG=w.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):w.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,i=[],r=0,o=t.getElementsByTagName(e);if("*"===e){for(;n=o[r++];)1===n.nodeType&&i.push(n);return i}return o},C.find.CLASS=w.getElementsByClassName&&function(e,t){return"undefined"!=typeof t.getElementsByClassName&&H?t.getElementsByClassName(e):void 0},M=[],O=[],(w.qsa=ge.test(D.querySelectorAll))&&(r(function(e){I.appendChild(e).innerHTML=" ",e.querySelectorAll("[msallowcapture^='']").length&&O.push("[*^$]="+ne+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||O.push("\\["+ne+"*(?:value|"+te+")"),e.querySelectorAll("[id~="+F+"-]").length||O.push("~="),e.querySelectorAll(":checked").length||O.push(":checked"),e.querySelectorAll("a#"+F+"+*").length||O.push(".#.+[+~]")}),r(function(e){var t=D.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&O.push("name"+ne+"*[*^$|!~]?="),e.querySelectorAll(":enabled").length||O.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),O.push(",.*:")})),(w.matchesSelector=ge.test(P=I.matches||I.webkitMatchesSelector||I.mozMatchesSelector||I.oMatchesSelector||I.msMatchesSelector))&&r(function(e){w.disconnectedMatch=P.call(e,"div"),P.call(e,"[s!='']:x"),M.push("!=",oe)}),O=O.length&&new RegExp(O.join("|")),M=M.length&&new RegExp(M.join("|")),t=ge.test(I.compareDocumentPosition),B=t||ge.test(I.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,i=t&&t.parentNode;return e===i||!(!i||1!==i.nodeType||!(n.contains?n.contains(i):e.compareDocumentPosition&&16&e.compareDocumentPosition(i)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},Y=t?function(e,t){if(e===t)return j=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n?n:(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1,1&n||!w.sortDetached&&t.compareDocumentPosition(e)===n?e===D||e.ownerDocument===q&&B(q,e)?-1:t===D||t.ownerDocument===q&&B(q,t)?1:A?ee(A,e)-ee(A,t):0:4&n?-1:1)}:function(e,t){if(e===t)return j=!0,0;var n,i=0,r=e.parentNode,o=t.parentNode,s=[e],l=[t];if(!r||!o)return e===D?-1:t===D?1:r?-1:o?1:A?ee(A,e)-ee(A,t):0;if(r===o)return a(e,t);for(n=e;n=n.parentNode;)s.unshift(n);for(n=t;n=n.parentNode;)l.unshift(n);for(;s[i]===l[i];)i++;return i?a(s[i],l[i]):s[i]===q?-1:l[i]===q?1:0},D):D},t.matches=function(e,n){return t(e,null,null,n)},t.matchesSelector=function(e,n){if((e.ownerDocument||e)!==D&&_(e),n=n.replace(ce,"='$1']"),w.matchesSelector&&H&&!X[n+" "]&&(!M||!M.test(n))&&(!O||!O.test(n)))try{var i=P.call(e,n);if(i||w.disconnectedMatch||e.document&&11!==e.document.nodeType)return i}catch(e){}return t(n,D,null,[e]).length>0},t.contains=function(e,t){return(e.ownerDocument||e)!==D&&_(e),B(e,t)},t.attr=function(e,t){(e.ownerDocument||e)!==D&&_(e);var n=C.attrHandle[t.toLowerCase()],i=n&&V.call(C.attrHandle,t.toLowerCase())?n(e,t,!H):void 0;return void 0!==i?i:w.attributes||!H?e.getAttribute(t):(i=e.getAttributeNode(t))&&i.specified?i.value:null},t.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},t.uniqueSort=function(e){var t,n=[],i=0,r=0;if(j=!w.detectDuplicates,A=!w.sortStable&&e.slice(0),e.sort(Y),j){for(;t=e[r++];)t===e[r]&&(i=n.push(r));for(;i--;)e.splice(n[i],1)}return A=null,e},T=t.getText=function(e){var t,n="",i=0,r=e.nodeType;if(r){if(1===r||9===r||11===r){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=T(e)}else if(3===r||4===r)return e.nodeValue}else for(;t=e[i++];)n+=T(t);return n},C=t.selectors={cacheLength:50,createPseudo:i,match:pe,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(xe,we),e[3]=(e[3]||e[4]||e[5]||"").replace(xe,we),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||t.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&t.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return pe.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&de.test(n)&&(t=E(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(xe,we).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=R[e+" "];return t||(t=new RegExp("(^|"+ne+")"+e+"("+ne+"|$)"))&&R(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(e,n,i){return function(r){var o=t.attr(r,e);return null==o?"!="===n:!n||(o+="","="===n?o===i:"!="===n?o!==i:"^="===n?i&&0===o.indexOf(i):"*="===n?i&&o.indexOf(i)>-1:"$="===n?i&&o.slice(-i.length)===i:"~="===n?(" "+o.replace(ae," ")+" ").indexOf(i)>-1:"|="===n&&(o===i||o.slice(0,i.length+1)===i+"-"))}},CHILD:function(e,t,n,i,r){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;
+return 1===i&&0===r?function(e){return!!e.parentNode}:function(t,n,l){var u,c,d,f,p,h,m=o!==a?"nextSibling":"previousSibling",g=t.parentNode,v=s&&t.nodeName.toLowerCase(),y=!l&&!s,b=!1;if(g){if(o){for(;m;){for(f=t;f=f[m];)if(s?f.nodeName.toLowerCase()===v:1===f.nodeType)return!1;h=m="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?g.firstChild:g.lastChild],a&&y){for(f=g,d=f[F]||(f[F]={}),c=d[f.uniqueID]||(d[f.uniqueID]={}),u=c[e]||[],p=u[0]===$&&u[1],b=p&&u[2],f=p&&g.childNodes[p];f=++p&&f&&f[m]||(b=p=0)||h.pop();)if(1===f.nodeType&&++b&&f===t){c[e]=[$,p,b];break}}else if(y&&(f=t,d=f[F]||(f[F]={}),c=d[f.uniqueID]||(d[f.uniqueID]={}),u=c[e]||[],p=u[0]===$&&u[1],b=p),b===!1)for(;(f=++p&&f&&f[m]||(b=p=0)||h.pop())&&((s?f.nodeName.toLowerCase()!==v:1!==f.nodeType)||!++b||(y&&(d=f[F]||(f[F]={}),c=d[f.uniqueID]||(d[f.uniqueID]={}),c[e]=[$,b]),f!==t)););return b-=r,b===i||b%i===0&&b/i>=0}}},PSEUDO:function(e,n){var r,o=C.pseudos[e]||C.setFilters[e.toLowerCase()]||t.error("unsupported pseudo: "+e);return o[F]?o(n):o.length>1?(r=[e,e,"",n],C.setFilters.hasOwnProperty(e.toLowerCase())?i(function(e,t){for(var i,r=o(e,n),a=r.length;a--;)i=ee(e,r[a]),e[i]=!(t[i]=r[a])}):function(e){return o(e,0,r)}):o}},pseudos:{not:i(function(e){var t=[],n=[],r=S(e.replace(se,"$1"));return r[F]?i(function(e,t,n,i){for(var o,a=r(e,null,i,[]),s=e.length;s--;)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),t[0]=null,!n.pop()}}),has:i(function(e){return function(n){return t(e,n).length>0}}),contains:i(function(e){return e=e.replace(xe,we),function(t){return(t.textContent||t.innerText||T(t)).indexOf(e)>-1}}),lang:i(function(e){return fe.test(e||"")||t.error("unsupported lang: "+e),e=e.replace(xe,we).toLowerCase(),function(t){var n;do if(n=H?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===I},focus:function(e){return e===D.activeElement&&(!D.hasFocus||D.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!C.pseudos.empty(e)},header:function(e){return me.test(e.nodeName)},input:function(e){return he.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:u(function(){return[0]}),last:u(function(e,t){return[t-1]}),eq:u(function(e,t,n){return[0>n?n+t:n]}),even:u(function(e,t){for(var n=0;t>n;n+=2)e.push(n);return e}),odd:u(function(e,t){for(var n=1;t>n;n+=2)e.push(n);return e}),lt:u(function(e,t,n){for(var i=0>n?n+t:n;--i>=0;)e.push(i);return e}),gt:u(function(e,t,n){for(var i=0>n?n+t:n;++i2&&"ID"===(a=o[0]).type&&w.getById&&9===t.nodeType&&H&&C.relative[o[1].type]){if(t=(C.find.ID(a.matches[0].replace(xe,we),t)||[])[0],!t)return n;u&&(t=t.parentNode),e=e.slice(o.shift().value.length)}for(r=pe.needsContext.test(e)?0:o.length;r--&&(a=o[r],!C.relative[s=a.type]);)if((l=C.find[s])&&(i=l(a.matches[0].replace(xe,we),ye.test(o[0].type)&&c(t.parentNode)||t))){if(o.splice(r,1),e=i.length&&f(o),!e)return J.apply(n,i),n;break}}return(u||S(e,d))(i,t,!H,n,!t||ye.test(e)&&c(t.parentNode)||t),n},w.sortStable=F.split("").sort(Y).join("")===F,w.detectDuplicates=!!j,_(),w.sortDetached=r(function(e){return 1&e.compareDocumentPosition(D.createElement("div"))}),r(function(e){return e.innerHTML=" ","#"===e.firstChild.getAttribute("href")})||o("type|href|height|width",function(e,t,n){return n?void 0:e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),w.attributes&&r(function(e){return e.innerHTML=" ",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||o("value",function(e,t,n){return n||"input"!==e.nodeName.toLowerCase()?void 0:e.defaultValue}),r(function(e){return null==e.getAttribute("disabled")})||o(te,function(e,t,n){var i;return n?void 0:e[t]===!0?t.toLowerCase():(i=e.getAttributeNode(t))&&i.specified?i.value:null}),t}(e);pe.find=ye,pe.expr=ye.selectors,pe.expr[":"]=pe.expr.pseudos,pe.uniqueSort=pe.unique=ye.uniqueSort,pe.text=ye.getText,pe.isXMLDoc=ye.isXML,pe.contains=ye.contains;var be=function(e,t,n){for(var i=[],r=void 0!==n;(e=e[t])&&9!==e.nodeType;)if(1===e.nodeType){if(r&&pe(e).is(n))break;i.push(e)}return i},xe=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},we=pe.expr.match.needsContext,Ce=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,Te=/^.[^:#\[\.,]*$/;pe.filter=function(e,t,n){var i=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===i.nodeType?pe.find.matchesSelector(i,e)?[i]:[]:pe.find.matches(e,pe.grep(t,function(e){return 1===e.nodeType}))},pe.fn.extend({find:function(e){var t,n=[],i=this,r=i.length;if("string"!=typeof e)return this.pushStack(pe(e).filter(function(){for(t=0;r>t;t++)if(pe.contains(i[t],this))return!0}));for(t=0;r>t;t++)pe.find(e,i[t],n);return n=this.pushStack(r>1?pe.unique(n):n),n.selector=this.selector?this.selector+" "+e:e,n},filter:function(e){return this.pushStack(i(this,e||[],!1))},not:function(e){return this.pushStack(i(this,e||[],!0))},is:function(e){return!!i(this,"string"==typeof e&&we.test(e)?pe(e):e||[],!1).length}});var ke,Ee=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,Se=pe.fn.init=function(e,t,n){var i,r;if(!e)return this;if(n=n||ke,"string"==typeof e){if(i="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:Ee.exec(e),!i||!i[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(i[1]){if(t=t instanceof pe?t[0]:t,pe.merge(this,pe.parseHTML(i[1],t&&t.nodeType?t.ownerDocument||t:ie,!0)),Ce.test(i[1])&&pe.isPlainObject(t))for(i in t)pe.isFunction(this[i])?this[i](t[i]):this.attr(i,t[i]);return this}if(r=ie.getElementById(i[2]),r&&r.parentNode){if(r.id!==i[2])return ke.find(e);this.length=1,this[0]=r}return this.context=ie,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):pe.isFunction(e)?"undefined"!=typeof n.ready?n.ready(e):e(pe):(void 0!==e.selector&&(this.selector=e.selector,this.context=e.context),pe.makeArray(e,this))};Se.prototype=pe.fn,ke=pe(ie);var Ne=/^(?:parents|prev(?:Until|All))/,Le={children:!0,contents:!0,next:!0,prev:!0};pe.fn.extend({has:function(e){var t,n=pe(e,this),i=n.length;return this.filter(function(){for(t=0;i>t;t++)if(pe.contains(this,n[t]))return!0})},closest:function(e,t){for(var n,i=0,r=this.length,o=[],a=we.test(e)||"string"!=typeof e?pe(e,t||this.context):0;r>i;i++)for(n=this[i];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?a.index(n)>-1:1===n.nodeType&&pe.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(o.length>1?pe.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?pe.inArray(this[0],pe(e)):pe.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(pe.uniqueSort(pe.merge(this.get(),pe(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),pe.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return be(e,"parentNode")},parentsUntil:function(e,t,n){return be(e,"parentNode",n)},next:function(e){return r(e,"nextSibling")},prev:function(e){return r(e,"previousSibling")},nextAll:function(e){return be(e,"nextSibling")},prevAll:function(e){return be(e,"previousSibling")},nextUntil:function(e,t,n){return be(e,"nextSibling",n)},prevUntil:function(e,t,n){return be(e,"previousSibling",n)},siblings:function(e){return xe((e.parentNode||{}).firstChild,e)},children:function(e){return xe(e.firstChild)},contents:function(e){return pe.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:pe.merge([],e.childNodes)}},function(e,t){pe.fn[e]=function(n,i){var r=pe.map(this,t,n);return"Until"!==e.slice(-5)&&(i=n),i&&"string"==typeof i&&(r=pe.filter(i,r)),this.length>1&&(Le[e]||(r=pe.uniqueSort(r)),Ne.test(e)&&(r=r.reverse())),this.pushStack(r)}});var Ae=/\S+/g;pe.Callbacks=function(e){e="string"==typeof e?o(e):pe.extend({},e);var t,n,i,r,a=[],s=[],l=-1,u=function(){for(r=e.once,i=t=!0;s.length;l=-1)for(n=s.shift();++l-1;)a.splice(n,1),l>=n&&l--}),this},has:function(e){return e?pe.inArray(e,a)>-1:a.length>0},empty:function(){return a&&(a=[]),this},disable:function(){return r=s=[],a=n="",this},disabled:function(){return!a},lock:function(){return r=!0,n||c.disable(),this},locked:function(){return!!r},fireWith:function(e,n){return r||(n=n||[],n=[e,n.slice?n.slice():n],s.push(n),t||u()),this},fire:function(){return c.fireWith(this,arguments),this},fired:function(){return!!i}};return c},pe.extend({Deferred:function(e){var t=[["resolve","done",pe.Callbacks("once memory"),"resolved"],["reject","fail",pe.Callbacks("once memory"),"rejected"],["notify","progress",pe.Callbacks("memory")]],n="pending",i={state:function(){return n},always:function(){return r.done(arguments).fail(arguments),this},then:function(){var e=arguments;return pe.Deferred(function(n){pe.each(t,function(t,o){var a=pe.isFunction(e[t])&&e[t];r[o[1]](function(){var e=a&&a.apply(this,arguments);e&&pe.isFunction(e.promise)?e.promise().progress(n.notify).done(n.resolve).fail(n.reject):n[o[0]+"With"](this===i?n.promise():this,a?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?pe.extend(e,i):i}},r={};return i.pipe=i.then,pe.each(t,function(e,o){var a=o[2],s=o[3];i[o[1]]=a.add,s&&a.add(function(){n=s},t[1^e][2].disable,t[2][2].lock),r[o[0]]=function(){return r[o[0]+"With"](this===r?i:this,arguments),this},r[o[0]+"With"]=a.fireWith}),i.promise(r),e&&e.call(r,r),r},when:function(e){var t,n,i,r=0,o=re.call(arguments),a=o.length,s=1!==a||e&&pe.isFunction(e.promise)?a:0,l=1===s?e:pe.Deferred(),u=function(e,n,i){return function(r){n[e]=this,i[e]=arguments.length>1?re.call(arguments):r,i===t?l.notifyWith(n,i):--s||l.resolveWith(n,i)}};if(a>1)for(t=new Array(a),n=new Array(a),i=new Array(a);a>r;r++)o[r]&&pe.isFunction(o[r].promise)?o[r].promise().progress(u(r,n,t)).done(u(r,i,o)).fail(l.reject):--s;return s||l.resolveWith(i,o),l.promise()}});var je;pe.fn.ready=function(e){return pe.ready.promise().done(e),this},pe.extend({isReady:!1,readyWait:1,holdReady:function(e){e?pe.readyWait++:pe.ready(!0)},ready:function(e){(e===!0?--pe.readyWait:pe.isReady)||(pe.isReady=!0,e!==!0&&--pe.readyWait>0||(je.resolveWith(ie,[pe]),pe.fn.triggerHandler&&(pe(ie).triggerHandler("ready"),pe(ie).off("ready"))))}}),pe.ready.promise=function(t){if(!je)if(je=pe.Deferred(),"complete"===ie.readyState||"loading"!==ie.readyState&&!ie.documentElement.doScroll)e.setTimeout(pe.ready);else if(ie.addEventListener)ie.addEventListener("DOMContentLoaded",s),e.addEventListener("load",s);else{ie.attachEvent("onreadystatechange",s),e.attachEvent("onload",s);var n=!1;try{n=null==e.frameElement&&ie.documentElement}catch(e){}n&&n.doScroll&&!function t(){if(!pe.isReady){try{n.doScroll("left")}catch(n){return e.setTimeout(t,50)}a(),pe.ready()}}()}return je.promise(t)},pe.ready.promise();var _e;for(_e in pe(de))break;de.ownFirst="0"===_e,de.inlineBlockNeedsLayout=!1,pe(function(){var e,t,n,i;n=ie.getElementsByTagName("body")[0],n&&n.style&&(t=ie.createElement("div"),i=ie.createElement("div"),i.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",n.appendChild(i).appendChild(t),"undefined"!=typeof t.style.zoom&&(t.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",de.inlineBlockNeedsLayout=e=3===t.offsetWidth,e&&(n.style.zoom=1)),n.removeChild(i))}),function(){var e=ie.createElement("div");de.deleteExpando=!0;try{delete e.test}catch(e){de.deleteExpando=!1}e=null}();var De=function(e){var t=pe.noData[(e.nodeName+" ").toLowerCase()],n=+e.nodeType||1;return(1===n||9===n)&&(!t||t!==!0&&e.getAttribute("classid")===t)},Ie=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,He=/([A-Z])/g;pe.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(e){return e=e.nodeType?pe.cache[e[pe.expando]]:e[pe.expando],!!e&&!u(e)},data:function(e,t,n){return c(e,t,n)},removeData:function(e,t){return d(e,t)},_data:function(e,t,n){return c(e,t,n,!0)},_removeData:function(e,t){return d(e,t,!0)}}),pe.fn.extend({data:function(e,t){var n,i,r,o=this[0],a=o&&o.attributes;if(void 0===e){if(this.length&&(r=pe.data(o),1===o.nodeType&&!pe._data(o,"parsedAttrs"))){for(n=a.length;n--;)a[n]&&(i=a[n].name,0===i.indexOf("data-")&&(i=pe.camelCase(i.slice(5)),l(o,i,r[i])));pe._data(o,"parsedAttrs",!0)}return r}return"object"==typeof e?this.each(function(){pe.data(this,e)}):arguments.length>1?this.each(function(){pe.data(this,e,t)}):o?l(o,e,pe.data(o,e)):void 0},removeData:function(e){return this.each(function(){pe.removeData(this,e)})}}),pe.extend({queue:function(e,t,n){var i;return e?(t=(t||"fx")+"queue",i=pe._data(e,t),n&&(!i||pe.isArray(n)?i=pe._data(e,t,pe.makeArray(n)):i.push(n)),i||[]):void 0},dequeue:function(e,t){t=t||"fx";var n=pe.queue(e,t),i=n.length,r=n.shift(),o=pe._queueHooks(e,t),a=function(){pe.dequeue(e,t)};"inprogress"===r&&(r=n.shift(),i--),r&&("fx"===t&&n.unshift("inprogress"),delete o.stop,r.call(e,a,o)),!i&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return pe._data(e,n)||pe._data(e,n,{empty:pe.Callbacks("once memory").add(function(){pe._removeData(e,t+"queue"),pe._removeData(e,n)})})}}),pe.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.lengths;s++)t(e[s],n,a?i:i.call(e[s],s,t(e[s],n)));return r?e:u?t.call(e):l?t(e[0],n):o},qe=/^(?:checkbox|radio)$/i,$e=/<([\w:-]+)/,ze=/^$|\/(?:java|ecma)script/i,Re=/^\s+/,We="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";!function(){var e=ie.createElement("div"),t=ie.createDocumentFragment(),n=ie.createElement("input");e.innerHTML=" a ",de.leadingWhitespace=3===e.firstChild.nodeType,de.tbody=!e.getElementsByTagName("tbody").length,de.htmlSerialize=!!e.getElementsByTagName("link").length,de.html5Clone="<:nav>"!==ie.createElement("nav").cloneNode(!0).outerHTML,n.type="checkbox",n.checked=!0,t.appendChild(n),de.appendChecked=n.checked,e.innerHTML="",de.noCloneChecked=!!e.cloneNode(!0).lastChild.defaultValue,t.appendChild(e),n=ie.createElement("input"),n.setAttribute("type","radio"),n.setAttribute("checked","checked"),n.setAttribute("name","t"),e.appendChild(n),de.checkClone=e.cloneNode(!0).cloneNode(!0).lastChild.checked,de.noCloneEvent=!!e.addEventListener,e[pe.expando]=1,de.attributes=!e.getAttribute(pe.expando)}();var Xe={option:[1,""," "],legend:[1,""," "],area:[1,""," "],param:[1,""," "],thead:[1,""],tr:[2,""],col:[2,""],td:[3,""],_default:de.htmlSerialize?[0,"",""]:[1,"X","
"]};Xe.optgroup=Xe.option,Xe.tbody=Xe.tfoot=Xe.colgroup=Xe.caption=Xe.thead,Xe.th=Xe.td;var Ye=/<|?\w+;/,Ue=/-1&&(h=p.split("."),p=h.shift(),h.sort()),a=p.indexOf(":")<0&&"on"+p,t=t[pe.expando]?t:new pe.Event(p,"object"==typeof t&&t),t.isTrigger=r?2:3,t.namespace=h.join("."),t.rnamespace=t.namespace?new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=i),n=null==n?[t]:pe.makeArray(n,[t]),u=pe.event.special[p]||{},r||!u.trigger||u.trigger.apply(i,n)!==!1)){if(!r&&!u.noBubble&&!pe.isWindow(i)){for(l=u.delegateType||p,Ze.test(l+p)||(s=s.parentNode);s;s=s.parentNode)f.push(s),c=s;c===(i.ownerDocument||ie)&&f.push(c.defaultView||c.parentWindow||e)}for(d=0;(s=f[d++])&&!t.isPropagationStopped();)t.type=d>1?l:u.bindType||p,o=(pe._data(s,"events")||{})[t.type]&&pe._data(s,"handle"),o&&o.apply(s,n),o=a&&s[a],o&&o.apply&&De(s)&&(t.result=o.apply(s,n),t.result===!1&&t.preventDefault());if(t.type=p,!r&&!t.isDefaultPrevented()&&(!u._default||u._default.apply(f.pop(),n)===!1)&&De(i)&&a&&i[p]&&!pe.isWindow(i)){c=i[a],c&&(i[a]=null),pe.event.triggered=p;try{i[p]()}catch(e){}pe.event.triggered=void 0,c&&(i[a]=c)}return t.result}},dispatch:function(e){e=pe.event.fix(e);var t,n,i,r,o,a=[],s=re.call(arguments),l=(pe._data(this,"events")||{})[e.type]||[],u=pe.event.special[e.type]||{};if(s[0]=e,e.delegateTarget=this,!u.preDispatch||u.preDispatch.call(this,e)!==!1){for(a=pe.event.handlers.call(this,e,l),t=0;(r=a[t++])&&!e.isPropagationStopped();)for(e.currentTarget=r.elem,n=0;(o=r.handlers[n++])&&!e.isImmediatePropagationStopped();)e.rnamespace&&!e.rnamespace.test(o.namespace)||(e.handleObj=o,e.data=o.data,i=((pe.event.special[o.origType]||{}).handle||o.handler).apply(r.elem,s),void 0!==i&&(e.result=i)===!1&&(e.preventDefault(),e.stopPropagation()));return u.postDispatch&&u.postDispatch.call(this,e),e.result}},handlers:function(e,t){var n,i,r,o,a=[],s=t.delegateCount,l=e.target;if(s&&l.nodeType&&("click"!==e.type||isNaN(e.button)||e.button<1))for(;l!=this;l=l.parentNode||this)if(1===l.nodeType&&(l.disabled!==!0||"click"!==e.type)){for(i=[],n=0;s>n;n++)o=t[n],r=o.selector+" ",void 0===i[r]&&(i[r]=o.needsContext?pe(r,this).index(l)>-1:pe.find(r,this,null,[l]).length),i[r]&&i.push(o);i.length&&a.push({elem:l,handlers:i})}return s ]","i"),tt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,nt=/
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Posts by Category
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/_site/collection-archive/index.html b/_site/collection-archive/index.html
new file mode 100644
index 0000000..cd5382b
--- /dev/null
+++ b/_site/collection-archive/index.html
@@ -0,0 +1,409 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Posts by Collection - Yuchen Lei
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Posts by Collection
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
publications
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Published in IEEE Transactions on Information Forensics and Security , 2023
+
+
+
+
Cryptocurrencies have dramatically increased adoption in mainstream applications in various fields such as financial and online services, however, there are still a few amounts of cryptocurrency transactions that involve illicit or criminal activities. It is essential to identify and monitor addresses associated with illegal behaviors to ensure the security and stability of the cryptocurrency ecosystem. In this paper, we propose a framework to build a dataset comprising Bitcoin transactions between 12 July 2019 and 26 May 2021. This dataset (hereafter referred to as BABD-13) contains 13 types of Bitcoin addresses, 5 categories of indicators with 148 features, and 544,462 labeled data, which is the largest labeled Bitcoin address behavior dataset publicly available to our knowledge. We also propose a novel and efficient subgraph generation algorithm called BTC-SubGen to extract a k -hop subgraph from the entire Bitcoin transaction graph constructed by the directed heterogeneous multigraph starting from a specific Bitcoin address node. We then conduct 13-class classification tasks on BABD-13 by five machine learning models namely k -nearest neighbors algorithm, decision tree, random forest, multilayer perceptron, and XGBoost, the results show that the accuracy rates are between 93.24% and 97.13%. In addition, we study the relations and importance of the proposed features and analyze how they affect the effect of machine learning models. Finally, we conduct a preliminary analysis of the behavior patterns of different types of Bitcoin addresses using concrete features and find several meaningful and explainable modes.
+
+
+
+
+ Recommended citation: "BABD: A Bitcoin Address Behavior Dataset for Pattern Analysis," in IEEE Transactions on Information Forensics and Security, vol. 19, pp. 2171-2185, 2024, doi: 10.1109/TIFS.2023.3347894. https://ieeexplore.ieee.org/document/10375557/
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Published in IEEE Wireless Communications and Networking Conference (WCNC) , 2024
+
+
+
+
The Internet of Vehicles (IoV) has witnessed a significant growth in the number of participants. This rapid expansion has increased demands for computing resources and quality of service (QoS), posing challenges for mobile edge computing (MEC) in the IoV domain. Efficiently allocating computing power to meet these service demands has become a crucial concern. Therefore, joint optimization of offloading decisions and power allocation is required to achieve the tradeoff between task latency and energy consumption. To address the above challenge, we propose a multi-agent reinforcement learning (MARL) method called multi-agent twin delayed deep deterministic policy gradient (MA-TD3) in this paper. Compared to its predecessor, multi-agent deep deterministic policy gradient (MADDPG), this algorithm improves performance and execution speed. It solves the slow convergence problem caused by Q-value overestimation and reduces the computational cost. The experimental results illustrate that the proposed algorithm reaches an observable performance improvement.
+
+
+
+
+ Recommended citation: "Multi-Agent Reinforcement Learning for Cooperative Task Offloading in Internet-of-Vehicles," 2024 IEEE Wireless Communications and Networking Conference (WCNC), Dubai, United Arab Emirates, 2024, pp. 1-6, doi: 10.1109/WCNC57260.2024.10571109. https://ieeexplore.ieee.org/document/10571109
+
+
+
+
+
+
+
+
+
+
+
+
teaching
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Undergraduate course, Wuhan University, CSE , 2023
+
+
+
+
Supervise undergraduate students in completing experiments, review lab reports, and provide grade references
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/_site/cv/index.html b/_site/cv/index.html
new file mode 100644
index 0000000..113776c
--- /dev/null
+++ b/_site/cv/index.html
@@ -0,0 +1,380 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+CV - Yuchen Lei
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
CV
+
+
+
Education
+
+ B.S. in GitHub, China University of Geoscience, 2022
+ M.S. in Jekyll, Wuhan University, 2025 (expected)
+
+
+
Work experience
+
+ Summer 2015: Research Assistant
+
+ Github University
+ Duties included: Tagging issues
+ Supervisor: Professor Git
+
+
+ Fall 2015: Research Assistant
+
+ Github University
+ Duties included: Merging pull requests
+ Supervisor: Professor Hub
+
+
+
+
+
Skills
+
+ Skill 1
+ Skill 2
+
+ Sub-skill 2.1
+ Sub-skill 2.2
+ Sub-skill 2.3
+
+
+ Skill 3
+
+
+
Publications
+
+
+
+
+
+
+
+
+
+
+
+
+
+ "BABD: A Bitcoin Address Behavior Dataset for Pattern Analysis," in IEEE Transactions on Information Forensics and Security, vol. 19, pp. 2171-2185, 2024, doi: 10.1109/TIFS.2023.3347894.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ "Multi-Agent Reinforcement Learning for Cooperative Task Offloading in Internet-of-Vehicles," 2024 IEEE Wireless Communications and Networking Conference (WCNC), Dubai, United Arab Emirates, 2024, pp. 1-6, doi: 10.1109/WCNC57260.2024.10571109.
+
+
+
+
+
+
+
Teaching
+
+
+
Service and leadership
+
+ Currently signed in to 43 different slack teams
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/_site/feed.xml b/_site/feed.xml
new file mode 100644
index 0000000..93f23ac
--- /dev/null
+++ b/_site/feed.xml
@@ -0,0 +1,25 @@
+Jekyll 2025-03-26T11:11:52-07:00 /feed.xml Yuchen Lei personal description Yuchen Lei Future Blog Post 2199-01-01T00:00:00-08:00 2199-01-01T00:00:00-08:00 /posts/2012/08/future-post <p>This post will show up by default. To disable scheduling of future posts, edit <code class="language-plaintext highlighter-rouge">config.yml</code> and set <code class="language-plaintext highlighter-rouge">future: false</code>.</p> Yuchen Lei This post will show up by default. To disable scheduling of future posts, edit config.yml and set future: false. Blog Post number 4 2015-08-14T00:00:00-07:00 2015-08-14T00:00:00-07:00 /posts/2012/08/blog-post-4 <p>This is a sample blog post. Lorem ipsum I can’t remember the rest of lorem ipsum and don’t have an internet connection right now. Testing testing testing this blog post. Blog posts are cool.</p>
+
+<h1 id="headings-are-cool">Headings are cool</h1>
+
+<h1 id="you-can-have-many-headings">You can have many headings</h1>
+
+<h2 id="arent-headings-cool">Aren’t headings cool?</h2> Yuchen Lei This is a sample blog post. Lorem ipsum I can’t remember the rest of lorem ipsum and don’t have an internet connection right now. Testing testing testing this blog post. Blog posts are cool. Blog Post number 3 2014-08-14T00:00:00-07:00 2014-08-14T00:00:00-07:00 /posts/2014/08/blog-post-3 <p>This is a sample blog post. Lorem ipsum I can’t remember the rest of lorem ipsum and don’t have an internet connection right now. Testing testing testing this blog post. Blog posts are cool.</p>
+
+<h1 id="headings-are-cool">Headings are cool</h1>
+
+<h1 id="you-can-have-many-headings">You can have many headings</h1>
+
+<h2 id="arent-headings-cool">Aren’t headings cool?</h2> Yuchen Lei This is a sample blog post. Lorem ipsum I can’t remember the rest of lorem ipsum and don’t have an internet connection right now. Testing testing testing this blog post. Blog posts are cool. Blog Post number 2 2013-08-14T00:00:00-07:00 2013-08-14T00:00:00-07:00 /posts/2013/08/blog-post-2 <p>This is a sample blog post. Lorem ipsum I can’t remember the rest of lorem ipsum and don’t have an internet connection right now. Testing testing testing this blog post. Blog posts are cool.</p>
+
+<h1 id="headings-are-cool">Headings are cool</h1>
+
+<h1 id="you-can-have-many-headings">You can have many headings</h1>
+
+<h2 id="arent-headings-cool">Aren’t headings cool?</h2> Yuchen Lei This is a sample blog post. Lorem ipsum I can’t remember the rest of lorem ipsum and don’t have an internet connection right now. Testing testing testing this blog post. Blog posts are cool. Blog Post number 1 2012-08-14T00:00:00-07:00 2012-08-14T00:00:00-07:00 /posts/2012/08/blog-post-1 <p>This is a sample blog post. Lorem ipsum I can’t remember the rest of lorem ipsum and don’t have an internet connection right now. Testing testing testing this blog post. Blog posts are cool.</p>
+
+<h1 id="headings-are-cool">Headings are cool</h1>
+
+<h1 id="you-can-have-many-headings">You can have many headings</h1>
+
+<h2 id="arent-headings-cool">Aren’t headings cool?</h2> Yuchen Lei This is a sample blog post. Lorem ipsum I can’t remember the rest of lorem ipsum and don’t have an internet connection right now. Testing testing testing this blog post. Blog posts are cool.
\ No newline at end of file
diff --git a/_site/files/paper1.pdf b/_site/files/paper1.pdf
new file mode 100644
index 0000000..7ce878f
Binary files /dev/null and b/_site/files/paper1.pdf differ
diff --git a/_site/files/paper2.pdf b/_site/files/paper2.pdf
new file mode 100644
index 0000000..c583836
Binary files /dev/null and b/_site/files/paper2.pdf differ
diff --git a/_site/files/paper3.pdf b/_site/files/paper3.pdf
new file mode 100644
index 0000000..9503e9e
Binary files /dev/null and b/_site/files/paper3.pdf differ
diff --git a/_site/images/3953273590_704e3899d5_m.jpg b/_site/images/3953273590_704e3899d5_m.jpg
new file mode 100644
index 0000000..50d2155
Binary files /dev/null and b/_site/images/3953273590_704e3899d5_m.jpg differ
diff --git a/_site/images/500x300.png b/_site/images/500x300.png
new file mode 100644
index 0000000..f9fba92
Binary files /dev/null and b/_site/images/500x300.png differ
diff --git a/_site/images/bio-photo-2.jpg b/_site/images/bio-photo-2.jpg
new file mode 100644
index 0000000..a6f2035
Binary files /dev/null and b/_site/images/bio-photo-2.jpg differ
diff --git a/_site/images/bio-photo.jpg b/_site/images/bio-photo.jpg
new file mode 100644
index 0000000..0008451
Binary files /dev/null and b/_site/images/bio-photo.jpg differ
diff --git a/_site/images/browserconfig.xml b/_site/images/browserconfig.xml
new file mode 100644
index 0000000..ff77e23
--- /dev/null
+++ b/_site/images/browserconfig.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+ #000000
+
+
+
diff --git a/_site/images/editing-talk.png b/_site/images/editing-talk.png
new file mode 100644
index 0000000..9f15183
Binary files /dev/null and b/_site/images/editing-talk.png differ
diff --git a/_site/images/foo-bar-identity-th.jpg b/_site/images/foo-bar-identity-th.jpg
new file mode 100644
index 0000000..49906ac
Binary files /dev/null and b/_site/images/foo-bar-identity-th.jpg differ
diff --git a/_site/images/foo-bar-identity.jpg b/_site/images/foo-bar-identity.jpg
new file mode 100644
index 0000000..d946815
Binary files /dev/null and b/_site/images/foo-bar-identity.jpg differ
diff --git a/_site/images/image-alignment-1200x4002.jpg b/_site/images/image-alignment-1200x4002.jpg
new file mode 100644
index 0000000..8e3137c
Binary files /dev/null and b/_site/images/image-alignment-1200x4002.jpg differ
diff --git a/_site/images/image-alignment-150x150.jpg b/_site/images/image-alignment-150x150.jpg
new file mode 100644
index 0000000..d3b0e48
Binary files /dev/null and b/_site/images/image-alignment-150x150.jpg differ
diff --git a/_site/images/image-alignment-300x200.jpg b/_site/images/image-alignment-300x200.jpg
new file mode 100644
index 0000000..3921878
Binary files /dev/null and b/_site/images/image-alignment-300x200.jpg differ
diff --git a/_site/images/image-alignment-580x300.jpg b/_site/images/image-alignment-580x300.jpg
new file mode 100644
index 0000000..75bf08e
Binary files /dev/null and b/_site/images/image-alignment-580x300.jpg differ
diff --git a/_site/images/manifest.json b/_site/images/manifest.json
new file mode 100644
index 0000000..d641c30
--- /dev/null
+++ b/_site/images/manifest.json
@@ -0,0 +1,41 @@
+{
+ "name": "Minimal Mistakes",
+ "icons": [
+ {
+ "src": "\/images\/android-chrome-36x36.png?v=M44lzPylqQ",
+ "sizes": "36x36",
+ "type": "image\/png",
+ "density": 0.75
+ },
+ {
+ "src": "\/images\/android-chrome-48x48.png?v=M44lzPylqQ",
+ "sizes": "48x48",
+ "type": "image\/png",
+ "density": 1
+ },
+ {
+ "src": "\/images\/android-chrome-72x72.png?v=M44lzPylqQ",
+ "sizes": "72x72",
+ "type": "image\/png",
+ "density": 1.5
+ },
+ {
+ "src": "\/images\/android-chrome-96x96.png?v=M44lzPylqQ",
+ "sizes": "96x96",
+ "type": "image\/png",
+ "density": 2
+ },
+ {
+ "src": "\/images\/android-chrome-144x144.png?v=M44lzPylqQ",
+ "sizes": "144x144",
+ "type": "image\/png",
+ "density": 3
+ },
+ {
+ "src": "\/images\/android-chrome-192x192.png?v=M44lzPylqQ",
+ "sizes": "192x192",
+ "type": "image\/png",
+ "density": 4
+ }
+ ]
+}
diff --git a/_site/images/mstile-144x144.png b/_site/images/mstile-144x144.png
new file mode 100644
index 0000000..c3d8317
Binary files /dev/null and b/_site/images/mstile-144x144.png differ
diff --git a/_site/images/mstile-150x150.png b/_site/images/mstile-150x150.png
new file mode 100644
index 0000000..c7a3c08
Binary files /dev/null and b/_site/images/mstile-150x150.png differ
diff --git a/_site/images/mstile-310x150.png b/_site/images/mstile-310x150.png
new file mode 100644
index 0000000..25fd7ba
Binary files /dev/null and b/_site/images/mstile-310x150.png differ
diff --git a/_site/images/mstile-310x310.png b/_site/images/mstile-310x310.png
new file mode 100644
index 0000000..1a75b7f
Binary files /dev/null and b/_site/images/mstile-310x310.png differ
diff --git a/_site/images/mstile-70x70.png b/_site/images/mstile-70x70.png
new file mode 100644
index 0000000..88b5c25
Binary files /dev/null and b/_site/images/mstile-70x70.png differ
diff --git a/_site/images/paragraph-indent.png b/_site/images/paragraph-indent.png
new file mode 100644
index 0000000..b4a2c48
Binary files /dev/null and b/_site/images/paragraph-indent.png differ
diff --git a/_site/images/paragraph-no-indent.png b/_site/images/paragraph-no-indent.png
new file mode 100644
index 0000000..3e0f9d2
Binary files /dev/null and b/_site/images/paragraph-no-indent.png differ
diff --git a/_site/images/profile.png b/_site/images/profile.png
new file mode 100644
index 0000000..0dd3377
Binary files /dev/null and b/_site/images/profile.png differ
diff --git a/_site/images/safari-pinned-tab.svg b/_site/images/safari-pinned-tab.svg
new file mode 100644
index 0000000..d517ee1
--- /dev/null
+++ b/_site/images/safari-pinned-tab.svg
@@ -0,0 +1,34 @@
+
+
+
+
+Created by potrace 1.11, written by Peter Selinger 2001-2013
+
+
+
+
+
+
+
diff --git a/_site/images/site-logo.png b/_site/images/site-logo.png
new file mode 100644
index 0000000..251dd22
Binary files /dev/null and b/_site/images/site-logo.png differ
diff --git a/_site/index.html b/_site/index.html
new file mode 100644
index 0000000..16b0a4f
--- /dev/null
+++ b/_site/index.html
@@ -0,0 +1,363 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Yuchen Lei
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Education
+
+ M.S. in Cyber Science and Engineering, Wuhan University, 2025 (expected)
+ B.S. in Information Security, China University of Geoscience, 2022
+
+
+Publications
+
+
+
+
+
+
+
+
+
+
+
+
+
+ "BABD: A Bitcoin Address Behavior Dataset for Pattern Analysis," in IEEE Transactions on Information Forensics and Security, vol. 19, pp. 2171-2185, 2024, doi: 10.1109/TIFS.2023.3347894.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ "Multi-Agent Reinforcement Learning for Cooperative Task Offloading in Internet-of-Vehicles," 2024 IEEE Wireless Communications and Networking Conference (WCNC), Dubai, United Arab Emirates, 2024, pp. 1-6, doi: 10.1109/WCNC57260.2024.10571109.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/_site/markdown.html b/_site/markdown.html
new file mode 100644
index 0000000..06ae192
--- /dev/null
+++ b/_site/markdown.html
@@ -0,0 +1,11 @@
+
+
+
+ Redirecting…
+
+
+
+
+ Redirecting…
+ Click here if you are not redirected.
+
diff --git a/_site/markdown/index.html b/_site/markdown/index.html
new file mode 100644
index 0000000..7077100
--- /dev/null
+++ b/_site/markdown/index.html
@@ -0,0 +1,578 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Markdown - Yuchen Lei
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Markdown
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Locations of key files/directories
+
+
+ Basic config options: _config.yml
+ Top navigation bar config: _data/navigation.yml
+ Single pages: _pages/
+ Collections of pages are .md or .html files in:
+
+ _publications/
+ _portfolio/
+ _posts/
+ _teaching/
+ _talks/
+
+
+ Footer: _includes/footer.html
+ Static files (like PDFs): /files/
+ Profile image (can set in _config.yml): images/profile.png
+
+
+Tips and hints
+
+
+ Name a file “.md” to have it render in markdown, name it “.html” to render in HTML.
+ Go to the commit list (on your repo) to find the last version Github built with Jekyll.
+
+ Green check: successful build
+ Orange circle: building
+ Red X: error
+ No icon: not built
+
+
+
+
+Resources
+
+
+Markdown guide
+
+
+
+
+
+
+
+
+
+Blockquotes
+
+Single line blockquote:
+
+
+ Quotes are cool.
+
+
+Tables
+
+Table 1
+
+
+
+
+ Entry
+ Item
+
+
+
+
+
+ John Doe
+ 2016
+ Description of the item in the list
+
+
+ Jane Doe
+ 2019
+ Description of the item in the list
+
+
+ Doe Doe
+ 2022
+ Description of the item in the list
+
+
+
+
+Table 2
+
+
+
+
+ Header1
+ Header2
+ Header3
+
+
+
+
+ cell1
+ cell2
+ cell3
+
+
+ cell4
+ cell5
+ cell6
+
+
+
+
+ cell1
+ cell2
+ cell3
+
+
+ cell4
+ cell5
+ cell6
+
+
+
+
+ Foot1
+ Foot2
+ Foot3
+
+
+
+
+Definition Lists
+
+
+ Definition List Title
+ Definition list division.
+ Startup
+ A startup company or startup is a company or temporary organization designed to search for a repeatable and scalable business model.
+ #dowork
+ Coined by Rob Dyrdek and his personal body guard Christopher “Big Black” Boykins, “Do Work” works as a self motivator, to motivating your friends.
+ Do It Live
+ I’ll let Bill O’Reilly explain this one.
+
+
+Unordered Lists (Nested)
+
+
+ List item one
+
+ List item one
+
+ List item one
+ List item two
+ List item three
+ List item four
+
+
+ List item two
+ List item three
+ List item four
+
+
+ List item two
+ List item three
+ List item four
+
+
+Ordered List (Nested)
+
+
+ List item one
+
+ List item one
+
+ List item one
+ List item two
+ List item three
+ List item four
+
+
+ List item two
+ List item three
+ List item four
+
+
+ List item two
+ List item three
+ List item four
+
+
+
+
+Make any link standout more when applying the .btn class.
+
+Notices
+
+Watch out! You can also add notices by appending {: .notice} to a paragraph.
+
+
+
+Address Tag
+
+
+ 1 Infinite Loop Cupertino, CA 95014 United States
+
+
+Anchor Tag (aka. Link)
+
+This is an example of a link .
+
+Abbreviation Tag
+
+The abbreviation CSS stands for “Cascading Style Sheets”.
+
+Cite Tag
+
+“Code is poetry.” —Automattic
+
+Code Tag
+
+You will learn later on in these tests that word-wrap: break-word; will be your best friend.
+
+Strike Tag
+
+This tag will let you strikeout text .
+
+Emphasize Tag
+
+The emphasize tag should italicize text.
+
+Insert Tag
+
+This tag should denote inserted text.
+
+Keyboard Tag
+
+This scarcely known tag emulates keyboard text , which is usually styled like the <code> tag.
+
+
+
+This tag styles large blocks of code.
+
+
+.post-title {
+ margin: 0 0 5px;
+ font-weight: bold;
+ font-size: 38px;
+ line-height: 1.2;
+ and here's a line of some really, really, really, really long text, just to see how the PRE tag handles it and to find out how it overflows;
+}
+
+
+Quote Tag
+
+Developers, developers, developers… –Steve Ballmer
+
+Strong Tag
+
+This tag shows bold text .
+
+Subscript Tag
+
+Getting our science styling on with H2 O, which should push the “2” down.
+
+Superscript Tag
+
+Still sticking with science and Isaac Newton’s E = MC2 , which should lift the 2 up.
+
+Variable Tag
+
+This allows you to denote variables .
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/_site/markdown_generator/PubsFromBib.ipynb b/_site/markdown_generator/PubsFromBib.ipynb
new file mode 100644
index 0000000..df898a7
--- /dev/null
+++ b/_site/markdown_generator/PubsFromBib.ipynb
@@ -0,0 +1,223 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Publications markdown generator for academicpages\n",
+ "\n",
+ "Takes a set of bibtex of publications and converts them for use with [academicpages.github.io](academicpages.github.io). This is an interactive Jupyter notebook ([see more info here](http://jupyter-notebook-beginner-guide.readthedocs.io/en/latest/what_is_jupyter.html)). \n",
+ "\n",
+ "The core python code is also in `pubsFromBibs.py`. \n",
+ "Run either from the `markdown_generator` folder after replacing updating the publist dictionary with:\n",
+ "* bib file names\n",
+ "* specific venue keys based on your bib file preferences\n",
+ "* any specific pre-text for specific files\n",
+ "* Collection Name (future feature)\n",
+ "\n",
+ "TODO: Make this work with other databases of citations, \n",
+ "TODO: Merge this with the existing TSV parsing solution"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from pybtex.database.input import bibtex\n",
+ "import pybtex.database.input.bibtex \n",
+ "from time import strptime\n",
+ "import string\n",
+ "import html\n",
+ "import os\n",
+ "import re"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#todo: incorporate different collection types rather than a catch all publications, requires other changes to template\n",
+ "publist = {\n",
+ " \"proceeding\": {\n",
+ " \"file\" : \"proceedings.bib\",\n",
+ " \"venuekey\": \"booktitle\",\n",
+ " \"venue-pretext\": \"In the proceedings of \",\n",
+ " \"collection\" : {\"name\":\"publications\",\n",
+ " \"permalink\":\"/publication/\"}\n",
+ " \n",
+ " },\n",
+ " \"journal\":{\n",
+ " \"file\": \"pubs.bib\",\n",
+ " \"venuekey\" : \"journal\",\n",
+ " \"venue-pretext\" : \"\",\n",
+ " \"collection\" : {\"name\":\"publications\",\n",
+ " \"permalink\":\"/publication/\"}\n",
+ " } \n",
+ "}"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "html_escape_table = {\n",
+ " \"&\": \"&\",\n",
+ " '\"': \""\",\n",
+ " \"'\": \"'\"\n",
+ " }\n",
+ "\n",
+ "def html_escape(text):\n",
+ " \"\"\"Produce entities within text.\"\"\"\n",
+ " return \"\".join(html_escape_table.get(c,c) for c in text)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "scrolled": false
+ },
+ "outputs": [],
+ "source": [
+ "for pubsource in publist:\n",
+ " parser = bibtex.Parser()\n",
+ " bibdata = parser.parse_file(publist[pubsource][\"file\"])\n",
+ "\n",
+ " #loop through the individual references in a given bibtex file\n",
+ " for bib_id in bibdata.entries:\n",
+ " #reset default date\n",
+ " pub_year = \"1900\"\n",
+ " pub_month = \"01\"\n",
+ " pub_day = \"01\"\n",
+ " \n",
+ " b = bibdata.entries[bib_id].fields\n",
+ " \n",
+ " try:\n",
+ " pub_year = f'{b[\"year\"]}'\n",
+ "\n",
+ " #todo: this hack for month and day needs some cleanup\n",
+ " if \"month\" in b.keys(): \n",
+ " if(len(b[\"month\"])<3):\n",
+ " pub_month = \"0\"+b[\"month\"]\n",
+ " pub_month = pub_month[-2:]\n",
+ " elif(b[\"month\"] not in range(12)):\n",
+ " tmnth = strptime(b[\"month\"][:3],'%b').tm_mon \n",
+ " pub_month = \"{:02d}\".format(tmnth) \n",
+ " else:\n",
+ " pub_month = str(b[\"month\"])\n",
+ " if \"day\" in b.keys(): \n",
+ " pub_day = str(b[\"day\"])\n",
+ "\n",
+ " \n",
+ " pub_date = pub_year+\"-\"+pub_month+\"-\"+pub_day\n",
+ " \n",
+ " #strip out {} as needed (some bibtex entries that maintain formatting)\n",
+ " clean_title = b[\"title\"].replace(\"{\", \"\").replace(\"}\",\"\").replace(\"\\\\\",\"\").replace(\" \",\"-\") \n",
+ "\n",
+ " url_slug = re.sub(\"\\\\[.*\\\\]|[^a-zA-Z0-9_-]\", \"\", clean_title)\n",
+ " url_slug = url_slug.replace(\"--\",\"-\")\n",
+ "\n",
+ " md_filename = (str(pub_date) + \"-\" + url_slug + \".md\").replace(\"--\",\"-\")\n",
+ " html_filename = (str(pub_date) + \"-\" + url_slug).replace(\"--\",\"-\")\n",
+ "\n",
+ " #Build Citation from text\n",
+ " citation = \"\"\n",
+ "\n",
+ " #citation authors - todo - add highlighting for primary author?\n",
+ " for author in bibdata.entries[bib_id].persons[\"author\"]:\n",
+ " citation = citation+\" \"+author.first_names[0]+\" \"+author.last_names[0]+\", \"\n",
+ "\n",
+ " #citation title\n",
+ " citation = citation + \"\\\"\" + html_escape(b[\"title\"].replace(\"{\", \"\").replace(\"}\",\"\").replace(\"\\\\\",\"\")) + \".\\\"\"\n",
+ "\n",
+ " #add venue logic depending on citation type\n",
+ " venue = publist[pubsource][\"venue-pretext\"]+b[publist[pubsource][\"venuekey\"]].replace(\"{\", \"\").replace(\"}\",\"\").replace(\"\\\\\",\"\")\n",
+ "\n",
+ " citation = citation + \" \" + html_escape(venue)\n",
+ " citation = citation + \", \" + pub_year + \".\"\n",
+ "\n",
+ " \n",
+ " ## YAML variables\n",
+ " md = \"---\\ntitle: \\\"\" + html_escape(b[\"title\"].replace(\"{\", \"\").replace(\"}\",\"\").replace(\"\\\\\",\"\")) + '\"\\n'\n",
+ " \n",
+ " md += \"\"\"collection: \"\"\" + publist[pubsource][\"collection\"][\"name\"]\n",
+ "\n",
+ " md += \"\"\"\\npermalink: \"\"\" + publist[pubsource][\"collection\"][\"permalink\"] + html_filename\n",
+ " \n",
+ " note = False\n",
+ " if \"note\" in b.keys():\n",
+ " if len(str(b[\"note\"])) > 5:\n",
+ " md += \"\\nexcerpt: '\" + html_escape(b[\"note\"]) + \"'\"\n",
+ " note = True\n",
+ "\n",
+ " md += \"\\ndate: \" + str(pub_date) \n",
+ "\n",
+ " md += \"\\nvenue: '\" + html_escape(venue) + \"'\"\n",
+ " \n",
+ " url = False\n",
+ " if \"url\" in b.keys():\n",
+ " if len(str(b[\"url\"])) > 5:\n",
+ " md += \"\\npaperurl: '\" + b[\"url\"] + \"'\"\n",
+ " url = True\n",
+ "\n",
+ " md += \"\\ncitation: '\" + html_escape(citation) + \"'\"\n",
+ "\n",
+ " md += \"\\n---\"\n",
+ "\n",
+ " \n",
+ " ## Markdown description for individual page\n",
+ " if note:\n",
+ " md += \"\\n\" + html_escape(b[\"note\"]) + \"\\n\"\n",
+ "\n",
+ " if url:\n",
+ " md += \"\\n[Access paper here](\" + b[\"url\"] + \"){:target=\\\"_blank\\\"}\\n\" \n",
+ " else:\n",
+ " md += \"\\nUse [Google Scholar](https://scholar.google.com/scholar?q=\"+html.escape(clean_title.replace(\"-\",\"+\"))+\"){:target=\\\"_blank\\\"} for full citation\"\n",
+ "\n",
+ " md_filename = os.path.basename(md_filename)\n",
+ "\n",
+ " with open(\"../_publications/\" + md_filename, 'w') as f:\n",
+ " f.write(md)\n",
+ " print(f'SUCESSFULLY PARSED {bib_id}: \\\"', b[\"title\"][:60],\"...\"*(len(b['title'])>60),\"\\\"\")\n",
+ " # field may not exist for a reference\n",
+ " except KeyError as e:\n",
+ " print(f'WARNING Missing Expected Field {e} from entry {bib_id}: \\\"', b[\"title\"][:30],\"...\"*(len(b['title'])>30),\"\\\"\")\n",
+ " continue\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.7.1"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/_site/markdown_generator/index.html b/_site/markdown_generator/index.html
new file mode 100644
index 0000000..62a1d80
--- /dev/null
+++ b/_site/markdown_generator/index.html
@@ -0,0 +1,311 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Jupyter notebook markdown generator - Yuchen Lei
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Jupyter notebook markdown generator
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Jupyter notebook markdown generator
+
+These .ipynb files are Jupyter notebook files that convert a TSV containing structured data about talks (talks.tsv) or presentations (presentations.tsv) into individual markdown files that will be properly formatted for the academicpages template. The notebooks contain a lot of documentation about the process. The .py files are pure python that do the same things if they are executed in a terminal, they just don’t have pretty documentation.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/_site/markdown_generator/publications.ipynb b/_site/markdown_generator/publications.ipynb
new file mode 100644
index 0000000..8657e10
--- /dev/null
+++ b/_site/markdown_generator/publications.ipynb
@@ -0,0 +1,371 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "deletable": true,
+ "editable": true
+ },
+ "source": [
+ "# Publications markdown generator for academicpages\n",
+ "\n",
+ "Takes a TSV of publications with metadata and converts them for use with [academicpages.github.io](academicpages.github.io). This is an interactive Jupyter notebook ([see more info here](http://jupyter-notebook-beginner-guide.readthedocs.io/en/latest/what_is_jupyter.html)). The core python code is also in `publications.py`. Run either from the `markdown_generator` folder after replacing `publications.tsv` with one containing your data.\n",
+ "\n",
+ "TODO: Make this work with BibTex and other databases of citations, rather than Stuart's non-standard TSV format and citation style.\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Data format\n",
+ "\n",
+ "The TSV needs to have the following columns: pub_date, title, venue, excerpt, citation, site_url, and paper_url, with a header at the top. \n",
+ "\n",
+ "- `excerpt` and `paper_url` can be blank, but the others must have values. \n",
+ "- `pub_date` must be formatted as YYYY-MM-DD.\n",
+ "- `url_slug` will be the descriptive part of the .md file and the permalink URL for the page about the paper. The .md file will be `YYYY-MM-DD-[url_slug].md` and the permalink will be `https://[yourdomain]/publications/YYYY-MM-DD-[url_slug]`\n",
+ "\n",
+ "This is how the raw file looks (it doesn't look pretty, use a spreadsheet or other program to edit and create)."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "pub_date\ttitle\tvenue\texcerpt\tcitation\turl_slug\tpaper_url\r\n",
+ "2009-10-01\tPaper Title Number 1\tJournal 1\tThis paper is about the number 1. The number 2 is left for future work.\tYour Name, You. (2009). \"Paper Title Number 1.\" Journal 1 . 1(1).\tpaper-title-number-1\thttp://academicpages.github.io/files/paper1.pdf\r\n",
+ "2010-10-01\tPaper Title Number 2\tJournal 1\tThis paper is about the number 2. The number 3 is left for future work.\tYour Name, You. (2010). \"Paper Title Number 2.\" Journal 1 . 1(2).\tpaper-title-number-2\thttp://academicpages.github.io/files/paper2.pdf\r\n",
+ "2015-10-01\tPaper Title Number 3\tJournal 1\tThis paper is about the number 3. The number 4 is left for future work.\tYour Name, You. (2015). \"Paper Title Number 3.\" Journal 1 . 1(3).\tpaper-title-number-3\thttp://academicpages.github.io/files/paper3.pdf"
+ ]
+ }
+ ],
+ "source": [
+ "!cat publications.tsv"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Import pandas\n",
+ "\n",
+ "We are using the very handy pandas library for dataframes."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {
+ "collapsed": true,
+ "deletable": true,
+ "editable": true
+ },
+ "outputs": [],
+ "source": [
+ "import pandas as pd"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Import TSV\n",
+ "\n",
+ "Pandas makes this easy with the read_csv function. We are using a TSV, so we specify the separator as a tab, or `\\t`.\n",
+ "\n",
+ "I found it important to put this data in a tab-separated values format, because there are a lot of commas in this kind of data and comma-separated values can get messed up. However, you can modify the import statement, as pandas also has read_excel(), read_json(), and others."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {
+ "collapsed": false,
+ "deletable": true,
+ "editable": true
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " pub_date \n",
+ " title \n",
+ " venue \n",
+ " excerpt \n",
+ " citation \n",
+ " url_slug \n",
+ " paper_url \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 \n",
+ " 2009-10-01 \n",
+ " Paper Title Number 1 \n",
+ " Journal 1 \n",
+ " This paper is about the number 1. The number 2... \n",
+ " Your Name, You. (2009). \"Paper Title Number 1.... \n",
+ " paper-title-number-1 \n",
+ " http://academicpages.github.io/files/paper1.pdf \n",
+ " \n",
+ " \n",
+ " 1 \n",
+ " 2010-10-01 \n",
+ " Paper Title Number 2 \n",
+ " Journal 1 \n",
+ " This paper is about the number 2. The number 3... \n",
+ " Your Name, You. (2010). \"Paper Title Number 2.... \n",
+ " paper-title-number-2 \n",
+ " http://academicpages.github.io/files/paper2.pdf \n",
+ " \n",
+ " \n",
+ " 2 \n",
+ " 2015-10-01 \n",
+ " Paper Title Number 3 \n",
+ " Journal 1 \n",
+ " This paper is about the number 3. The number 4... \n",
+ " Your Name, You. (2015). \"Paper Title Number 3.... \n",
+ " paper-title-number-3 \n",
+ " http://academicpages.github.io/files/paper3.pdf \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " pub_date title venue \\\n",
+ "0 2009-10-01 Paper Title Number 1 Journal 1 \n",
+ "1 2010-10-01 Paper Title Number 2 Journal 1 \n",
+ "2 2015-10-01 Paper Title Number 3 Journal 1 \n",
+ "\n",
+ " excerpt \\\n",
+ "0 This paper is about the number 1. The number 2... \n",
+ "1 This paper is about the number 2. The number 3... \n",
+ "2 This paper is about the number 3. The number 4... \n",
+ "\n",
+ " citation url_slug \\\n",
+ "0 Your Name, You. (2009). \"Paper Title Number 1.... paper-title-number-1 \n",
+ "1 Your Name, You. (2010). \"Paper Title Number 2.... paper-title-number-2 \n",
+ "2 Your Name, You. (2015). \"Paper Title Number 3.... paper-title-number-3 \n",
+ "\n",
+ " paper_url \n",
+ "0 http://academicpages.github.io/files/paper1.pdf \n",
+ "1 http://academicpages.github.io/files/paper2.pdf \n",
+ "2 http://academicpages.github.io/files/paper3.pdf "
+ ]
+ },
+ "execution_count": 3,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "publications = pd.read_csv(\"publications.tsv\", sep=\"\\t\", header=0)\n",
+ "publications\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Escape special characters\n",
+ "\n",
+ "YAML is very picky about how it takes a valid string, so we are replacing single and double quotes (and ampersands) with their HTML encoded equivilents. This makes them look not so readable in raw format, but they are parsed and rendered nicely."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {
+ "collapsed": true,
+ "deletable": true,
+ "editable": true
+ },
+ "outputs": [],
+ "source": [
+ "html_escape_table = {\n",
+ " \"&\": \"&\",\n",
+ " '\"': \""\",\n",
+ " \"'\": \"'\"\n",
+ " }\n",
+ "\n",
+ "def html_escape(text):\n",
+ " \"\"\"Produce entities within text.\"\"\"\n",
+ " return \"\".join(html_escape_table.get(c,c) for c in text)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Creating the markdown files\n",
+ "\n",
+ "This is where the heavy lifting is done. This loops through all the rows in the TSV dataframe, then starts to concatentate a big string (```md```) that contains the markdown for each type. It does the YAML metadata first, then does the description for the individual page."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {
+ "collapsed": false,
+ "deletable": true,
+ "editable": true
+ },
+ "outputs": [],
+ "source": [
+ "import os\n",
+ "for row, item in publications.iterrows():\n",
+ " \n",
+ " md_filename = str(item.pub_date) + \"-\" + item.url_slug + \".md\"\n",
+ " html_filename = str(item.pub_date) + \"-\" + item.url_slug\n",
+ " year = item.pub_date[:4]\n",
+ " \n",
+ " ## YAML variables\n",
+ " \n",
+ " md = \"---\\ntitle: \\\"\" + item.title + '\"\\n'\n",
+ " \n",
+ " md += \"\"\"collection: publications\"\"\"\n",
+ " \n",
+ " md += \"\"\"\\npermalink: /publication/\"\"\" + html_filename\n",
+ " \n",
+ " if len(str(item.excerpt)) > 5:\n",
+ " md += \"\\nexcerpt: '\" + html_escape(item.excerpt) + \"'\"\n",
+ " \n",
+ " md += \"\\ndate: \" + str(item.pub_date) \n",
+ " \n",
+ " md += \"\\nvenue: '\" + html_escape(item.venue) + \"'\"\n",
+ " \n",
+ " if len(str(item.paper_url)) > 5:\n",
+ " md += \"\\npaperurl: '\" + item.paper_url + \"'\"\n",
+ " \n",
+ " md += \"\\ncitation: '\" + html_escape(item.citation) + \"'\"\n",
+ " \n",
+ " md += \"\\n---\"\n",
+ " \n",
+ " ## Markdown description for individual page\n",
+ " \n",
+ " if len(str(item.excerpt)) > 5:\n",
+ " md += \"\\n\" + html_escape(item.excerpt) + \"\\n\"\n",
+ " \n",
+ " if len(str(item.paper_url)) > 5:\n",
+ " md += \"\\n[Download paper here](\" + item.paper_url + \")\\n\" \n",
+ " \n",
+ " md += \"\\nRecommended citation: \" + item.citation\n",
+ " \n",
+ " md_filename = os.path.basename(md_filename)\n",
+ " \n",
+ " with open(\"../_publications/\" + md_filename, 'w') as f:\n",
+ " f.write(md)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "These files are in the publications directory, one directory below where we're working from."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {
+ "collapsed": false,
+ "deletable": true,
+ "editable": true
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "2009-10-01-paper-title-number-1.md 2015-10-01-paper-title-number-3.md\r\n",
+ "2010-10-01-paper-title-number-2.md\r\n"
+ ]
+ }
+ ],
+ "source": [
+ "!ls ../_publications/"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "metadata": {
+ "collapsed": false,
+ "deletable": true,
+ "editable": true
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "---\r\n",
+ "title: \"Paper Title Number 1\"\r\n",
+ "collection: publications\r\n",
+ "permalink: /publication/2009-10-01-paper-title-number-1\r\n",
+ "excerpt: 'This paper is about the number 1. The number 2 is left for future work.'\r\n",
+ "date: 2009-10-01\r\n",
+ "venue: 'Journal 1'\r\n",
+ "paperurl: 'http://academicpages.github.io/files/paper1.pdf'\r\n",
+ "citation: 'Your Name, You. (2009). "Paper Title Number 1." Journal 1 . 1(1).'\r\n",
+ "---\r\n",
+ "This paper is about the number 1. The number 2 is left for future work.\r\n",
+ "\r\n",
+ "[Download paper here](http://academicpages.github.io/files/paper1.pdf)\r\n",
+ "\r\n",
+ "Recommended citation: Your Name, You. (2009). \"Paper Title Number 1.\" Journal 1 . 1(1)."
+ ]
+ }
+ ],
+ "source": [
+ "!cat ../_publications/2009-10-01-paper-title-number-1.md"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": true,
+ "deletable": true,
+ "editable": true
+ },
+ "outputs": [],
+ "source": []
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.6.1"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 0
+}
diff --git a/_site/markdown_generator/publications.py b/_site/markdown_generator/publications.py
new file mode 100644
index 0000000..2d0b102
--- /dev/null
+++ b/_site/markdown_generator/publications.py
@@ -0,0 +1,108 @@
+
+# coding: utf-8
+
+# # Publications markdown generator for academicpages
+#
+# Takes a TSV of publications with metadata and converts them for use with [academicpages.github.io](academicpages.github.io). This is an interactive Jupyter notebook, with the core python code in publications.py. Run either from the `markdown_generator` folder after replacing `publications.tsv` with one that fits your format.
+#
+# TODO: Make this work with BibTex and other databases of citations, rather than Stuart's non-standard TSV format and citation style.
+#
+
+# ## Data format
+#
+# The TSV needs to have the following columns: pub_date, title, venue, excerpt, citation, site_url, and paper_url, with a header at the top.
+#
+# - `excerpt` and `paper_url` can be blank, but the others must have values.
+# - `pub_date` must be formatted as YYYY-MM-DD.
+# - `url_slug` will be the descriptive part of the .md file and the permalink URL for the page about the paper. The .md file will be `YYYY-MM-DD-[url_slug].md` and the permalink will be `https://[yourdomain]/publications/YYYY-MM-DD-[url_slug]`
+
+
+# ## Import pandas
+#
+# We are using the very handy pandas library for dataframes.
+
+# In[2]:
+
+import pandas as pd
+
+
+# ## Import TSV
+#
+# Pandas makes this easy with the read_csv function. We are using a TSV, so we specify the separator as a tab, or `\t`.
+#
+# I found it important to put this data in a tab-separated values format, because there are a lot of commas in this kind of data and comma-separated values can get messed up. However, you can modify the import statement, as pandas also has read_excel(), read_json(), and others.
+
+# In[3]:
+
+publications = pd.read_csv("publications.tsv", sep="\t", header=0)
+publications
+
+
+# ## Escape special characters
+#
+# YAML is very picky about how it takes a valid string, so we are replacing single and double quotes (and ampersands) with their HTML encoded equivilents. This makes them look not so readable in raw format, but they are parsed and rendered nicely.
+
+# In[4]:
+
+html_escape_table = {
+ "&": "&",
+ '"': """,
+ "'": "'"
+ }
+
+def html_escape(text):
+ """Produce entities within text."""
+ return "".join(html_escape_table.get(c,c) for c in text)
+
+
+# ## Creating the markdown files
+#
+# This is where the heavy lifting is done. This loops through all the rows in the TSV dataframe, then starts to concatentate a big string (```md```) that contains the markdown for each type. It does the YAML metadata first, then does the description for the individual page. If you don't want something to appear (like the "Recommended citation")
+
+# In[5]:
+
+import os
+for row, item in publications.iterrows():
+
+ md_filename = str(item.pub_date) + "-" + item.url_slug + ".md"
+ html_filename = str(item.pub_date) + "-" + item.url_slug
+ year = item.pub_date[:4]
+
+ ## YAML variables
+
+ md = "---\ntitle: \"" + item.title + '"\n'
+
+ md += """collection: publications"""
+
+ md += """\npermalink: /publication/""" + html_filename
+
+ if len(str(item.excerpt)) > 5:
+ md += "\nexcerpt: '" + html_escape(item.excerpt) + "'"
+
+ md += "\ndate: " + str(item.pub_date)
+
+ md += "\nvenue: '" + html_escape(item.venue) + "'"
+
+ if len(str(item.paper_url)) > 5:
+ md += "\npaperurl: '" + item.paper_url + "'"
+
+ md += "\ncitation: '" + html_escape(item.citation) + "'"
+
+ md += "\n---"
+
+ ## Markdown description for individual page
+
+ if len(str(item.paper_url)) > 5:
+ md += "\n\nDownload paper here \n"
+
+ if len(str(item.excerpt)) > 5:
+ md += "\n" + html_escape(item.excerpt) + "\n"
+
+ md += "\nRecommended citation: " + item.citation
+
+ md_filename = os.path.basename(md_filename)
+
+ with open("../_publications/" + md_filename, 'w') as f:
+ f.write(md)
+
+
diff --git a/_site/markdown_generator/publications.tsv b/_site/markdown_generator/publications.tsv
new file mode 100644
index 0000000..49e7963
--- /dev/null
+++ b/_site/markdown_generator/publications.tsv
@@ -0,0 +1,4 @@
+pub_date title venue excerpt citation url_slug paper_url
+2009-10-01 Paper Title Number 1 Journal 1 This paper is about the number 1. The number 2 is left for future work. Your Name, You. (2009). "Paper Title Number 1." Journal 1 . 1(1). paper-title-number-1 http://academicpages.github.io/files/paper1.pdf
+2010-10-01 Paper Title Number 2 Journal 1 This paper is about the number 2. The number 3 is left for future work. Your Name, You. (2010). "Paper Title Number 2." Journal 1 . 1(2). paper-title-number-2 http://academicpages.github.io/files/paper2.pdf
+2015-10-01 Paper Title Number 3 Journal 1 This paper is about the number 3. The number 4 is left for future work. Your Name, You. (2015). "Paper Title Number 3." Journal 1 . 1(3). paper-title-number-3 http://academicpages.github.io/files/paper3.pdf
\ No newline at end of file
diff --git a/_site/markdown_generator/pubsFromBib.py b/_site/markdown_generator/pubsFromBib.py
new file mode 100644
index 0000000..92b4d02
--- /dev/null
+++ b/_site/markdown_generator/pubsFromBib.py
@@ -0,0 +1,160 @@
+#!/usr/bin/env python
+# coding: utf-8
+
+# # Publications markdown generator for academicpages
+#
+# Takes a set of bibtex of publications and converts them for use with [academicpages.github.io](academicpages.github.io). This is an interactive Jupyter notebook ([see more info here](http://jupyter-notebook-beginner-guide.readthedocs.io/en/latest/what_is_jupyter.html)).
+#
+# The core python code is also in `pubsFromBibs.py`.
+# Run either from the `markdown_generator` folder after replacing updating the publist dictionary with:
+# * bib file names
+# * specific venue keys based on your bib file preferences
+# * any specific pre-text for specific files
+# * Collection Name (future feature)
+#
+# TODO: Make this work with other databases of citations,
+# TODO: Merge this with the existing TSV parsing solution
+
+
+from pybtex.database.input import bibtex
+import pybtex.database.input.bibtex
+from time import strptime
+import string
+import html
+import os
+import re
+
+#todo: incorporate different collection types rather than a catch all publications, requires other changes to template
+publist = {
+ "proceeding": {
+ "file" : "proceedings.bib",
+ "venuekey": "booktitle",
+ "venue-pretext": "In the proceedings of ",
+ "collection" : {"name":"publications",
+ "permalink":"/publication/"}
+
+ },
+ "journal":{
+ "file": "pubs.bib",
+ "venuekey" : "journal",
+ "venue-pretext" : "",
+ "collection" : {"name":"publications",
+ "permalink":"/publication/"}
+ }
+}
+
+html_escape_table = {
+ "&": "&",
+ '"': """,
+ "'": "'"
+ }
+
+def html_escape(text):
+ """Produce entities within text."""
+ return "".join(html_escape_table.get(c,c) for c in text)
+
+
+for pubsource in publist:
+ parser = bibtex.Parser()
+ bibdata = parser.parse_file(publist[pubsource]["file"])
+
+ #loop through the individual references in a given bibtex file
+ for bib_id in bibdata.entries:
+ #reset default date
+ pub_year = "1900"
+ pub_month = "01"
+ pub_day = "01"
+
+ b = bibdata.entries[bib_id].fields
+
+ try:
+ pub_year = f'{b["year"]}'
+
+ #todo: this hack for month and day needs some cleanup
+ if "month" in b.keys():
+ if(len(b["month"])<3):
+ pub_month = "0"+b["month"]
+ pub_month = pub_month[-2:]
+ elif(b["month"] not in range(12)):
+ tmnth = strptime(b["month"][:3],'%b').tm_mon
+ pub_month = "{:02d}".format(tmnth)
+ else:
+ pub_month = str(b["month"])
+ if "day" in b.keys():
+ pub_day = str(b["day"])
+
+
+ pub_date = pub_year+"-"+pub_month+"-"+pub_day
+
+ #strip out {} as needed (some bibtex entries that maintain formatting)
+ clean_title = b["title"].replace("{", "").replace("}","").replace("\\","").replace(" ","-")
+
+ url_slug = re.sub("\\[.*\\]|[^a-zA-Z0-9_-]", "", clean_title)
+ url_slug = url_slug.replace("--","-")
+
+ md_filename = (str(pub_date) + "-" + url_slug + ".md").replace("--","-")
+ html_filename = (str(pub_date) + "-" + url_slug).replace("--","-")
+
+ #Build Citation from text
+ citation = ""
+
+ #citation authors - todo - add highlighting for primary author?
+ for author in bibdata.entries[bib_id].persons["author"]:
+ citation = citation+" "+author.first_names[0]+" "+author.last_names[0]+", "
+
+ #citation title
+ citation = citation + "\"" + html_escape(b["title"].replace("{", "").replace("}","").replace("\\","")) + ".\""
+
+ #add venue logic depending on citation type
+ venue = publist[pubsource]["venue-pretext"]+b[publist[pubsource]["venuekey"]].replace("{", "").replace("}","").replace("\\","")
+
+ citation = citation + " " + html_escape(venue)
+ citation = citation + ", " + pub_year + "."
+
+
+ ## YAML variables
+ md = "---\ntitle: \"" + html_escape(b["title"].replace("{", "").replace("}","").replace("\\","")) + '"\n'
+
+ md += """collection: """ + publist[pubsource]["collection"]["name"]
+
+ md += """\npermalink: """ + publist[pubsource]["collection"]["permalink"] + html_filename
+
+ note = False
+ if "note" in b.keys():
+ if len(str(b["note"])) > 5:
+ md += "\nexcerpt: '" + html_escape(b["note"]) + "'"
+ note = True
+
+ md += "\ndate: " + str(pub_date)
+
+ md += "\nvenue: '" + html_escape(venue) + "'"
+
+ url = False
+ if "url" in b.keys():
+ if len(str(b["url"])) > 5:
+ md += "\npaperurl: '" + b["url"] + "'"
+ url = True
+
+ md += "\ncitation: '" + html_escape(citation) + "'"
+
+ md += "\n---"
+
+
+ ## Markdown description for individual page
+ if note:
+ md += "\n" + html_escape(b["note"]) + "\n"
+
+ if url:
+ md += "\n[Access paper here](" + b["url"] + "){:target=\"_blank\"}\n"
+ else:
+ md += "\nUse [Google Scholar](https://scholar.google.com/scholar?q="+html.escape(clean_title.replace("-","+"))+"){:target=\"_blank\"} for full citation"
+
+ md_filename = os.path.basename(md_filename)
+
+ with open("../_publications/" + md_filename, 'w') as f:
+ f.write(md)
+ print(f'SUCESSFULLY PARSED {bib_id}: \"', b["title"][:60],"..."*(len(b['title'])>60),"\"")
+ # field may not exist for a reference
+ except KeyError as e:
+ print(f'WARNING Missing Expected Field {e} from entry {bib_id}: \"', b["title"][:30],"..."*(len(b['title'])>30),"\"")
+ continue
diff --git a/_site/markdown_generator/readme.md b/_site/markdown_generator/readme.md
new file mode 100644
index 0000000..013aa73
--- /dev/null
+++ b/_site/markdown_generator/readme.md
@@ -0,0 +1,7 @@
+# Jupyter notebook markdown generator
+
+These .ipynb files are Jupyter notebook files that convert a TSV containing structured data about talks (`talks.tsv`) or presentations (`presentations.tsv`) into individual markdown files that will be properly formatted for the academicpages template. The notebooks contain a lot of documentation about the process. The .py files are pure python that do the same things if they are executed in a terminal, they just don't have pretty documentation.
+
+
+
+
diff --git a/_site/markdown_generator/talks.ipynb b/_site/markdown_generator/talks.ipynb
new file mode 100644
index 0000000..f7e2347
--- /dev/null
+++ b/_site/markdown_generator/talks.ipynb
@@ -0,0 +1,380 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "deletable": true,
+ "editable": true
+ },
+ "source": [
+ "# Talks markdown generator for academicpages\n",
+ "\n",
+ "Takes a TSV of talks with metadata and converts them for use with [academicpages.github.io](academicpages.github.io). This is an interactive Jupyter notebook ([see more info here](http://jupyter-notebook-beginner-guide.readthedocs.io/en/latest/what_is_jupyter.html)). The core python code is also in `talks.py`. Run either from the `markdown_generator` folder after replacing `talks.tsv` with one containing your data.\n",
+ "\n",
+ "TODO: Make this work with BibTex and other databases, rather than Stuart's non-standard TSV format and citation style."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {
+ "collapsed": false,
+ "deletable": true,
+ "editable": true
+ },
+ "outputs": [],
+ "source": [
+ "import pandas as pd\n",
+ "import os"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Data format\n",
+ "\n",
+ "The TSV needs to have the following columns: title, type, url_slug, venue, date, location, talk_url, description, with a header at the top. Many of these fields can be blank, but the columns must be in the TSV.\n",
+ "\n",
+ "- Fields that cannot be blank: `title`, `url_slug`, `date`. All else can be blank. `type` defaults to \"Talk\" \n",
+ "- `date` must be formatted as YYYY-MM-DD.\n",
+ "- `url_slug` will be the descriptive part of the .md file and the permalink URL for the page about the paper. \n",
+ " - The .md file will be `YYYY-MM-DD-[url_slug].md` and the permalink will be `https://[yourdomain]/talks/YYYY-MM-DD-[url_slug]`\n",
+ " - The combination of `url_slug` and `date` must be unique, as it will be the basis for your filenames\n",
+ "\n",
+ "This is how the raw file looks (it doesn't look pretty, use a spreadsheet or other program to edit and create)."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "title\ttype\turl_slug\tvenue\tdate\tlocation\ttalk_url\tdescription\r\n",
+ "Talk 1 on Relevant Topic in Your Field\tTalk\ttalk-1\tUC San Francisco, Department of Testing\t2012-03-01\tSan Francisco, California\t\tThis is a description of your talk, which is a markdown files that can be all markdown-ified like any other post. Yay markdown!\r\n",
+ "Tutorial 1 on Relevant Topic in Your Field\tTutorial\ttutorial-1\tUC-Berkeley Institute for Testing Science\t2013-03-01\tBerkeley CA, USA\thttp://exampleurl.com\tThis is a description of your tutorial, note the different field in type. This is a markdown files that can be all markdown-ified like any other post. Yay markdown!\r\n",
+ "Talk 2 on Relevant Topic in Your Field\tTalk\ttalk-2\tLondon School of Testing\t2014-02-01\tLondon, UK\thttp://example2.com\tThis is a description of your talk, which is a markdown files that can be all markdown-ified like any other post. Yay markdown!\r\n",
+ "Conference Proceeding talk 3 on Relevant Topic in Your Field\tConference proceedings talk\ttalk-3\tTesting Institute of America 2014 Annual Conference\t2014-03-01\tLos Angeles, CA\t\tThis is a description of your conference proceedings talk, note the different field in type. You can put anything in this field."
+ ]
+ }
+ ],
+ "source": [
+ "!cat talks.tsv"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Import TSV\n",
+ "\n",
+ "Pandas makes this easy with the read_csv function. We are using a TSV, so we specify the separator as a tab, or `\\t`.\n",
+ "\n",
+ "I found it important to put this data in a tab-separated values format, because there are a lot of commas in this kind of data and comma-separated values can get messed up. However, you can modify the import statement, as pandas also has read_excel(), read_json(), and others."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {
+ "collapsed": false,
+ "deletable": true,
+ "editable": true
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " title \n",
+ " type \n",
+ " url_slug \n",
+ " venue \n",
+ " date \n",
+ " location \n",
+ " talk_url \n",
+ " description \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 \n",
+ " Talk 1 on Relevant Topic in Your Field \n",
+ " Talk \n",
+ " talk-1 \n",
+ " UC San Francisco, Department of Testing \n",
+ " 2012-03-01 \n",
+ " San Francisco, California \n",
+ " NaN \n",
+ " This is a description of your talk, which is a... \n",
+ " \n",
+ " \n",
+ " 1 \n",
+ " Tutorial 1 on Relevant Topic in Your Field \n",
+ " Tutorial \n",
+ " tutorial-1 \n",
+ " UC-Berkeley Institute for Testing Science \n",
+ " 2013-03-01 \n",
+ " Berkeley CA, USA \n",
+ " http://exampleurl.com \n",
+ " This is a description of your tutorial, note t... \n",
+ " \n",
+ " \n",
+ " 2 \n",
+ " Talk 2 on Relevant Topic in Your Field \n",
+ " Talk \n",
+ " talk-2 \n",
+ " London School of Testing \n",
+ " 2014-02-01 \n",
+ " London, UK \n",
+ " http://example2.com \n",
+ " This is a description of your talk, which is a... \n",
+ " \n",
+ " \n",
+ " 3 \n",
+ " Conference Proceeding talk 3 on Relevant Topic... \n",
+ " Conference proceedings talk \n",
+ " talk-3 \n",
+ " Testing Institute of America 2014 Annual Confe... \n",
+ " 2014-03-01 \n",
+ " Los Angeles, CA \n",
+ " NaN \n",
+ " This is a description of your conference proce... \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " title \\\n",
+ "0 Talk 1 on Relevant Topic in Your Field \n",
+ "1 Tutorial 1 on Relevant Topic in Your Field \n",
+ "2 Talk 2 on Relevant Topic in Your Field \n",
+ "3 Conference Proceeding talk 3 on Relevant Topic... \n",
+ "\n",
+ " type url_slug \\\n",
+ "0 Talk talk-1 \n",
+ "1 Tutorial tutorial-1 \n",
+ "2 Talk talk-2 \n",
+ "3 Conference proceedings talk talk-3 \n",
+ "\n",
+ " venue date \\\n",
+ "0 UC San Francisco, Department of Testing 2012-03-01 \n",
+ "1 UC-Berkeley Institute for Testing Science 2013-03-01 \n",
+ "2 London School of Testing 2014-02-01 \n",
+ "3 Testing Institute of America 2014 Annual Confe... 2014-03-01 \n",
+ "\n",
+ " location talk_url \\\n",
+ "0 San Francisco, California NaN \n",
+ "1 Berkeley CA, USA http://exampleurl.com \n",
+ "2 London, UK http://example2.com \n",
+ "3 Los Angeles, CA NaN \n",
+ "\n",
+ " description \n",
+ "0 This is a description of your talk, which is a... \n",
+ "1 This is a description of your tutorial, note t... \n",
+ "2 This is a description of your talk, which is a... \n",
+ "3 This is a description of your conference proce... "
+ ]
+ },
+ "execution_count": 3,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "talks = pd.read_csv(\"talks.tsv\", sep=\"\\t\", header=0)\n",
+ "talks"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Escape special characters\n",
+ "\n",
+ "YAML is very picky about how it takes a valid string, so we are replacing single and double quotes (and ampersands) with their HTML encoded equivilents. This makes them look not so readable in raw format, but they are parsed and rendered nicely."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {
+ "collapsed": false,
+ "deletable": true,
+ "editable": true
+ },
+ "outputs": [],
+ "source": [
+ "html_escape_table = {\n",
+ " \"&\": \"&\",\n",
+ " '\"': \""\",\n",
+ " \"'\": \"'\"\n",
+ " }\n",
+ "\n",
+ "def html_escape(text):\n",
+ " if type(text) is str:\n",
+ " return \"\".join(html_escape_table.get(c,c) for c in text)\n",
+ " else:\n",
+ " return \"False\""
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Creating the markdown files\n",
+ "\n",
+ "This is where the heavy lifting is done. This loops through all the rows in the TSV dataframe, then starts to concatentate a big string (```md```) that contains the markdown for each type. It does the YAML metadata first, then does the description for the individual page."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {
+ "collapsed": false,
+ "deletable": true,
+ "editable": true
+ },
+ "outputs": [],
+ "source": [
+ "loc_dict = {}\n",
+ "\n",
+ "for row, item in talks.iterrows():\n",
+ " \n",
+ " md_filename = str(item.date) + \"-\" + item.url_slug + \".md\"\n",
+ " html_filename = str(item.date) + \"-\" + item.url_slug \n",
+ " year = item.date[:4]\n",
+ " \n",
+ " md = \"---\\ntitle: \\\"\" + item.title + '\"\\n'\n",
+ " md += \"collection: talks\" + \"\\n\"\n",
+ " \n",
+ " if len(str(item.type)) > 3:\n",
+ " md += 'type: \"' + item.type + '\"\\n'\n",
+ " else:\n",
+ " md += 'type: \"Talk\"\\n'\n",
+ " \n",
+ " md += \"permalink: /talks/\" + html_filename + \"\\n\"\n",
+ " \n",
+ " if len(str(item.venue)) > 3:\n",
+ " md += 'venue: \"' + item.venue + '\"\\n'\n",
+ " \n",
+ " if len(str(item.location)) > 3:\n",
+ " md += \"date: \" + str(item.date) + \"\\n\"\n",
+ " \n",
+ " if len(str(item.location)) > 3:\n",
+ " md += 'location: \"' + str(item.location) + '\"\\n'\n",
+ " \n",
+ " md += \"---\\n\"\n",
+ " \n",
+ " \n",
+ " if len(str(item.talk_url)) > 3:\n",
+ " md += \"\\n[More information here](\" + item.talk_url + \")\\n\" \n",
+ " \n",
+ " \n",
+ " if len(str(item.description)) > 3:\n",
+ " md += \"\\n\" + html_escape(item.description) + \"\\n\"\n",
+ " \n",
+ " \n",
+ " md_filename = os.path.basename(md_filename)\n",
+ " #print(md)\n",
+ " \n",
+ " with open(\"../_talks/\" + md_filename, 'w') as f:\n",
+ " f.write(md)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "These files are in the talks directory, one directory below where we're working from."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {
+ "collapsed": false,
+ "deletable": true,
+ "editable": true
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "2012-03-01-talk-1.md\t 2014-02-01-talk-2.md\r\n",
+ "2013-03-01-tutorial-1.md 2014-03-01-talk-3.md\r\n"
+ ]
+ }
+ ],
+ "source": [
+ "!ls ../_talks"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "metadata": {
+ "collapsed": false,
+ "deletable": true,
+ "editable": true
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "---\r\n",
+ "title: \"Tutorial 1 on Relevant Topic in Your Field\"\r\n",
+ "collection: talks\r\n",
+ "type: \"Tutorial\"\r\n",
+ "permalink: /talks/2013-03-01-tutorial-1\r\n",
+ "venue: \"UC-Berkeley Institute for Testing Science\"\r\n",
+ "date: 2013-03-01\r\n",
+ "location: \"Berkeley CA, USA\"\r\n",
+ "---\r\n",
+ "\r\n",
+ "[More information here](http://exampleurl.com)\r\n",
+ "\r\n",
+ "This is a description of your tutorial, note the different field in type. This is a markdown files that can be all markdown-ified like any other post. Yay markdown!\r\n"
+ ]
+ }
+ ],
+ "source": [
+ "!cat ../_talks/2013-03-01-tutorial-1.md"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.6.1"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 0
+}
diff --git a/_site/markdown_generator/talks.py b/_site/markdown_generator/talks.py
new file mode 100644
index 0000000..818fd28
--- /dev/null
+++ b/_site/markdown_generator/talks.py
@@ -0,0 +1,111 @@
+
+# coding: utf-8
+
+# # Talks markdown generator for academicpages
+#
+# Takes a TSV of talks with metadata and converts them for use with [academicpages.github.io](academicpages.github.io). This is an interactive Jupyter notebook ([see more info here](http://jupyter-notebook-beginner-guide.readthedocs.io/en/latest/what_is_jupyter.html)). The core python code is also in `talks.py`. Run either from the `markdown_generator` folder after replacing `talks.tsv` with one containing your data.
+#
+# TODO: Make this work with BibTex and other databases, rather than Stuart's non-standard TSV format and citation style.
+
+# In[1]:
+
+import pandas as pd
+import os
+
+
+# ## Data format
+#
+# The TSV needs to have the following columns: title, type, url_slug, venue, date, location, talk_url, description, with a header at the top. Many of these fields can be blank, but the columns must be in the TSV.
+#
+# - Fields that cannot be blank: `title`, `url_slug`, `date`. All else can be blank. `type` defaults to "Talk"
+# - `date` must be formatted as YYYY-MM-DD.
+# - `url_slug` will be the descriptive part of the .md file and the permalink URL for the page about the paper.
+# - The .md file will be `YYYY-MM-DD-[url_slug].md` and the permalink will be `https://[yourdomain]/talks/YYYY-MM-DD-[url_slug]`
+# - The combination of `url_slug` and `date` must be unique, as it will be the basis for your filenames
+#
+
+
+# ## Import TSV
+#
+# Pandas makes this easy with the read_csv function. We are using a TSV, so we specify the separator as a tab, or `\t`.
+#
+# I found it important to put this data in a tab-separated values format, because there are a lot of commas in this kind of data and comma-separated values can get messed up. However, you can modify the import statement, as pandas also has read_excel(), read_json(), and others.
+
+# In[3]:
+
+talks = pd.read_csv("talks.tsv", sep="\t", header=0)
+talks
+
+
+# ## Escape special characters
+#
+# YAML is very picky about how it takes a valid string, so we are replacing single and double quotes (and ampersands) with their HTML encoded equivilents. This makes them look not so readable in raw format, but they are parsed and rendered nicely.
+
+# In[4]:
+
+html_escape_table = {
+ "&": "&",
+ '"': """,
+ "'": "'"
+ }
+
+def html_escape(text):
+ if type(text) is str:
+ return "".join(html_escape_table.get(c,c) for c in text)
+ else:
+ return "False"
+
+
+# ## Creating the markdown files
+#
+# This is where the heavy lifting is done. This loops through all the rows in the TSV dataframe, then starts to concatentate a big string (```md```) that contains the markdown for each type. It does the YAML metadata first, then does the description for the individual page.
+
+# In[5]:
+
+loc_dict = {}
+
+for row, item in talks.iterrows():
+
+ md_filename = str(item.date) + "-" + item.url_slug + ".md"
+ html_filename = str(item.date) + "-" + item.url_slug
+ year = item.date[:4]
+
+ md = "---\ntitle: \"" + item.title + '"\n'
+ md += "collection: talks" + "\n"
+
+ if len(str(item.type)) > 3:
+ md += 'type: "' + item.type + '"\n'
+ else:
+ md += 'type: "Talk"\n'
+
+ md += "permalink: /talks/" + html_filename + "\n"
+
+ if len(str(item.venue)) > 3:
+ md += 'venue: "' + item.venue + '"\n'
+
+ if len(str(item.location)) > 3:
+ md += "date: " + str(item.date) + "\n"
+
+ if len(str(item.location)) > 3:
+ md += 'location: "' + str(item.location) + '"\n'
+
+ md += "---\n"
+
+
+ if len(str(item.talk_url)) > 3:
+ md += "\n[More information here](" + item.talk_url + ")\n"
+
+
+ if len(str(item.description)) > 3:
+ md += "\n" + html_escape(item.description) + "\n"
+
+
+ md_filename = os.path.basename(md_filename)
+ #print(md)
+
+ with open("../_talks/" + md_filename, 'w') as f:
+ f.write(md)
+
+
+# These files are in the talks directory, one directory below where we're working from.
+
diff --git a/_site/markdown_generator/talks.tsv b/_site/markdown_generator/talks.tsv
new file mode 100644
index 0000000..4e4b0d2
--- /dev/null
+++ b/_site/markdown_generator/talks.tsv
@@ -0,0 +1,5 @@
+title type url_slug venue date location talk_url description
+Talk 1 on Relevant Topic in Your Field Talk talk-1 UC San Francisco, Department of Testing 2012-03-01 San Francisco, California This is a description of your talk, which is a markdown files that can be all markdown-ified like any other post. Yay markdown!
+Tutorial 1 on Relevant Topic in Your Field Tutorial tutorial-1 UC-Berkeley Institute for Testing Science 2013-03-01 Berkeley CA, USA http://exampleurl.com This is a description of your tutorial, note the different field in type. This is a markdown files that can be all markdown-ified like any other post. Yay markdown!
+Talk 2 on Relevant Topic in Your Field Talk talk-2 London School of Testing 2014-02-01 London, UK http://example2.com This is a description of your talk, which is a markdown files that can be all markdown-ified like any other post. Yay markdown!
+Conference Proceeding talk 3 on Relevant Topic in Your Field Conference proceedings talk talk-3 Testing Institute of America 2014 Annual Conference 2014-03-01 Los Angeles, CA This is a description of your conference proceedings talk, note the different field in type. You can put anything in this field.
\ No newline at end of file
diff --git a/_site/md/index.html b/_site/md/index.html
new file mode 100644
index 0000000..06ae192
--- /dev/null
+++ b/_site/md/index.html
@@ -0,0 +1,11 @@
+
+
+
+ Redirecting…
+
+
+
+
+ Redirecting…
+ Click here if you are not redirected.
+
diff --git a/_site/page-archive/index.html b/_site/page-archive/index.html
new file mode 100644
index 0000000..b0402a8
--- /dev/null
+++ b/_site/page-archive/index.html
@@ -0,0 +1,954 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Page Archive - Yuchen Lei
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Page Archive
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Page not found. Your pixels are in another canvas.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
About me
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CV
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/_site/posts/2012/08/blog-post-1/index.html b/_site/posts/2012/08/blog-post-1/index.html
new file mode 100644
index 0000000..6b63570
--- /dev/null
+++ b/_site/posts/2012/08/blog-post-1/index.html
@@ -0,0 +1,560 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Blog Post number 1 - Yuchen Lei
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Blog Post number 1
+
+
+
+
+
+
+ less than 1 minute read
+
+
+
+
+
+
+ Published: August 14, 2012
+
+
+
+
+
+
+
+
+
+ This is a sample blog post. Lorem ipsum I can’t remember the rest of lorem ipsum and don’t have an internet connection right now. Testing testing testing this blog post. Blog posts are cool.
+
+Headings are cool
+
+You can have many headings
+
+Aren’t headings cool?
+
+
+
+
+
+
+
+
+
+
+ Share on
+
+
+
+
+ Facebook
+
+ LinkedIn
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
You May Also Enjoy
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ less than 1 minute read
+
+
+
+
+
+ Published: January 01, 2199
+
+
+
+
This post will show up by default. To disable scheduling of future posts, edit config.yml and set future: false.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ less than 1 minute read
+
+
+
+
+
+ Published: August 14, 2015
+
+
+
+
This is a sample blog post. Lorem ipsum I can’t remember the rest of lorem ipsum and don’t have an internet connection right now. Testing testing testing this blog post. Blog posts are cool.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ less than 1 minute read
+
+
+
+
+
+ Published: August 14, 2014
+
+
+
+
This is a sample blog post. Lorem ipsum I can’t remember the rest of lorem ipsum and don’t have an internet connection right now. Testing testing testing this blog post. Blog posts are cool.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ less than 1 minute read
+
+
+
+
+
+ Published: August 14, 2013
+
+
+
+
This is a sample blog post. Lorem ipsum I can’t remember the rest of lorem ipsum and don’t have an internet connection right now. Testing testing testing this blog post. Blog posts are cool.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/_site/posts/2012/08/blog-post-4/index.html b/_site/posts/2012/08/blog-post-4/index.html
new file mode 100644
index 0000000..acbe2f8
--- /dev/null
+++ b/_site/posts/2012/08/blog-post-4/index.html
@@ -0,0 +1,555 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Future Blog Post - Yuchen Lei
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Future Blog Post
+
+
+
+
+
+
+ less than 1 minute read
+
+
+
+
+
+
+ Published: January 01, 2199
+
+
+
+
+
+
+
+
+
+ This post will show up by default. To disable scheduling of future posts, edit config.yml and set future: false.
+
+
+
+
+
+
+
+
+
+
+ Share on
+
+
+
+
+ Facebook
+
+ LinkedIn
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
You May Also Enjoy
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ less than 1 minute read
+
+
+
+
+
+ Published: August 14, 2015
+
+
+
+
This is a sample blog post. Lorem ipsum I can’t remember the rest of lorem ipsum and don’t have an internet connection right now. Testing testing testing this blog post. Blog posts are cool.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ less than 1 minute read
+
+
+
+
+
+ Published: August 14, 2014
+
+
+
+
This is a sample blog post. Lorem ipsum I can’t remember the rest of lorem ipsum and don’t have an internet connection right now. Testing testing testing this blog post. Blog posts are cool.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ less than 1 minute read
+
+
+
+
+
+ Published: August 14, 2013
+
+
+
+
This is a sample blog post. Lorem ipsum I can’t remember the rest of lorem ipsum and don’t have an internet connection right now. Testing testing testing this blog post. Blog posts are cool.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ less than 1 minute read
+
+
+
+
+
+ Published: August 14, 2012
+
+
+
+
This is a sample blog post. Lorem ipsum I can’t remember the rest of lorem ipsum and don’t have an internet connection right now. Testing testing testing this blog post. Blog posts are cool.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/_site/posts/2013/08/blog-post-2/index.html b/_site/posts/2013/08/blog-post-2/index.html
new file mode 100644
index 0000000..603e396
--- /dev/null
+++ b/_site/posts/2013/08/blog-post-2/index.html
@@ -0,0 +1,561 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Blog Post number 2 - Yuchen Lei
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Blog Post number 2
+
+
+
+
+
+
+ less than 1 minute read
+
+
+
+
+
+
+ Published: August 14, 2013
+
+
+
+
+
+
+
+
+
+ This is a sample blog post. Lorem ipsum I can’t remember the rest of lorem ipsum and don’t have an internet connection right now. Testing testing testing this blog post. Blog posts are cool.
+
+Headings are cool
+
+You can have many headings
+
+Aren’t headings cool?
+
+
+
+
+
+
+
+
+
+
+ Share on
+
+
+
+
+ Facebook
+
+ LinkedIn
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
You May Also Enjoy
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ less than 1 minute read
+
+
+
+
+
+ Published: January 01, 2199
+
+
+
+
This post will show up by default. To disable scheduling of future posts, edit config.yml and set future: false.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ less than 1 minute read
+
+
+
+
+
+ Published: August 14, 2015
+
+
+
+
This is a sample blog post. Lorem ipsum I can’t remember the rest of lorem ipsum and don’t have an internet connection right now. Testing testing testing this blog post. Blog posts are cool.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ less than 1 minute read
+
+
+
+
+
+ Published: August 14, 2014
+
+
+
+
This is a sample blog post. Lorem ipsum I can’t remember the rest of lorem ipsum and don’t have an internet connection right now. Testing testing testing this blog post. Blog posts are cool.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ less than 1 minute read
+
+
+
+
+
+ Published: August 14, 2012
+
+
+
+
This is a sample blog post. Lorem ipsum I can’t remember the rest of lorem ipsum and don’t have an internet connection right now. Testing testing testing this blog post. Blog posts are cool.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/_site/posts/2014/08/blog-post-3/index.html b/_site/posts/2014/08/blog-post-3/index.html
new file mode 100644
index 0000000..07bf8d0
--- /dev/null
+++ b/_site/posts/2014/08/blog-post-3/index.html
@@ -0,0 +1,561 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Blog Post number 3 - Yuchen Lei
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Blog Post number 3
+
+
+
+
+
+
+ less than 1 minute read
+
+
+
+
+
+
+ Published: August 14, 2014
+
+
+
+
+
+
+
+
+
+ This is a sample blog post. Lorem ipsum I can’t remember the rest of lorem ipsum and don’t have an internet connection right now. Testing testing testing this blog post. Blog posts are cool.
+
+Headings are cool
+
+You can have many headings
+
+Aren’t headings cool?
+
+
+
+
+
+
+
+
+
+
+ Share on
+
+
+
+
+ Facebook
+
+ LinkedIn
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
You May Also Enjoy
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ less than 1 minute read
+
+
+
+
+
+ Published: January 01, 2199
+
+
+
+
This post will show up by default. To disable scheduling of future posts, edit config.yml and set future: false.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ less than 1 minute read
+
+
+
+
+
+ Published: August 14, 2015
+
+
+
+
This is a sample blog post. Lorem ipsum I can’t remember the rest of lorem ipsum and don’t have an internet connection right now. Testing testing testing this blog post. Blog posts are cool.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ less than 1 minute read
+
+
+
+
+
+ Published: August 14, 2013
+
+
+
+
This is a sample blog post. Lorem ipsum I can’t remember the rest of lorem ipsum and don’t have an internet connection right now. Testing testing testing this blog post. Blog posts are cool.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ less than 1 minute read
+
+
+
+
+
+ Published: August 14, 2012
+
+
+
+
This is a sample blog post. Lorem ipsum I can’t remember the rest of lorem ipsum and don’t have an internet connection right now. Testing testing testing this blog post. Blog posts are cool.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/_site/publication/01-2023-babd.html b/_site/publication/01-2023-babd.html
new file mode 100644
index 0000000..bff7981
--- /dev/null
+++ b/_site/publication/01-2023-babd.html
@@ -0,0 +1,339 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+BABD: A Bitcoin Address Behavior Dataset for Pattern Analysis - Yuchen Lei
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ BABD: A Bitcoin Address Behavior Dataset for Pattern Analysis
+
+
+
+
+
+ Published in IEEE Transactions on Information Forensics and Security , 2023
+
+
+
+
+ Recommended citation: "BABD: A Bitcoin Address Behavior Dataset for Pattern Analysis," in IEEE Transactions on Information Forensics and Security, vol. 19, pp. 2171-2185, 2024, doi: 10.1109/TIFS.2023.3347894. https://ieeexplore.ieee.org/document/10375557/
+
+
+
+
+
+
+ Cryptocurrencies have dramatically increased adoption in mainstream applications in various fields such as financial and online services, however, there are still a few amounts of cryptocurrency transactions that involve illicit or criminal activities. It is essential to identify and monitor addresses associated with illegal behaviors to ensure the security and stability of the cryptocurrency ecosystem. In this paper, we propose a framework to build a dataset comprising Bitcoin transactions between 12 July 2019 and 26 May 2021. This dataset (hereafter referred to as BABD-13) contains 13 types of Bitcoin addresses, 5 categories of indicators with 148 features, and 544,462 labeled data, which is the largest labeled Bitcoin address behavior dataset publicly available to our knowledge. We also propose a novel and efficient subgraph generation algorithm called BTC-SubGen to extract a k -hop subgraph from the entire Bitcoin transaction graph constructed by the directed heterogeneous multigraph starting from a specific Bitcoin address node. We then conduct 13-class classification tasks on BABD-13 by five machine learning models namely k -nearest neighbors algorithm, decision tree, random forest, multilayer perceptron, and XGBoost, the results show that the accuracy rates are between 93.24% and 97.13%. In addition, we study the relations and importance of the proposed features and analyze how they affect the effect of machine learning models. Finally, we conduct a preliminary analysis of the behavior patterns of different types of Bitcoin addresses using concrete features and find several meaningful and explainable modes.
+
+
+
+
+
+
+
+
+
+
+ Share on
+
+
+
+
+ Facebook
+
+ LinkedIn
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/_site/publication/02-2024-matd3.html b/_site/publication/02-2024-matd3.html
new file mode 100644
index 0000000..a8cdb39
--- /dev/null
+++ b/_site/publication/02-2024-matd3.html
@@ -0,0 +1,339 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Multi-Agent Reinforcement Learning for Cooperative Task Offloading in Internet-of-Vehicles - Yuchen Lei
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Multi-Agent Reinforcement Learning for Cooperative Task Offloading in Internet-of-Vehicles
+
+
+
+
+
+ Published in IEEE Wireless Communications and Networking Conference (WCNC) , 2024
+
+
+
+
+ Recommended citation: "Multi-Agent Reinforcement Learning for Cooperative Task Offloading in Internet-of-Vehicles," 2024 IEEE Wireless Communications and Networking Conference (WCNC), Dubai, United Arab Emirates, 2024, pp. 1-6, doi: 10.1109/WCNC57260.2024.10571109. https://ieeexplore.ieee.org/document/10571109
+
+
+
+
+
+
+ The Internet of Vehicles (IoV) has witnessed a significant growth in the number of participants. This rapid expansion has increased demands for computing resources and quality of service (QoS), posing challenges for mobile edge computing (MEC) in the IoV domain. Efficiently allocating computing power to meet these service demands has become a crucial concern. Therefore, joint optimization of offloading decisions and power allocation is required to achieve the tradeoff between task latency and energy consumption. To address the above challenge, we propose a multi-agent reinforcement learning (MARL) method called multi-agent twin delayed deep deterministic policy gradient (MA-TD3) in this paper. Compared to its predecessor, multi-agent deep deterministic policy gradient (MADDPG), this algorithm improves performance and execution speed. It solves the slow convergence problem caused by Q-value overestimation and reduces the computational cost. The experimental results illustrate that the proposed algorithm reaches an observable performance improvement.
+
+
+
+
+
+
+
+
+
+
+ Share on
+
+
+
+
+ Facebook
+
+ LinkedIn
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/_site/publications/index.html b/_site/publications/index.html
new file mode 100644
index 0000000..12ddd86
--- /dev/null
+++ b/_site/publications/index.html
@@ -0,0 +1,322 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Publications - Yuchen Lei
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Publications
+
+
+
+
+
+
+
+
+
+
+
+ Published in IEEE Wireless Communications and Networking Conference (WCNC) , 2024
+
+
+
+
The Internet of Vehicles (IoV) has witnessed a significant growth in the number of participants. This rapid expansion has increased demands for computing resources and quality of service (QoS), posing challenges for mobile edge computing (MEC) in the IoV domain. Efficiently allocating computing power to meet these service demands has become a crucial concern. Therefore, joint optimization of offloading decisions and power allocation is required to achieve the tradeoff between task latency and energy consumption. To address the above challenge, we propose a multi-agent reinforcement learning (MARL) method called multi-agent twin delayed deep deterministic policy gradient (MA-TD3) in this paper. Compared to its predecessor, multi-agent deep deterministic policy gradient (MADDPG), this algorithm improves performance and execution speed. It solves the slow convergence problem caused by Q-value overestimation and reduces the computational cost. The experimental results illustrate that the proposed algorithm reaches an observable performance improvement.
+
+
+
+
+ Recommended citation: "Multi-Agent Reinforcement Learning for Cooperative Task Offloading in Internet-of-Vehicles," 2024 IEEE Wireless Communications and Networking Conference (WCNC), Dubai, United Arab Emirates, 2024, pp. 1-6, doi: 10.1109/WCNC57260.2024.10571109. https://ieeexplore.ieee.org/document/10571109
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Published in IEEE Transactions on Information Forensics and Security , 2023
+
+
+
+
Cryptocurrencies have dramatically increased adoption in mainstream applications in various fields such as financial and online services, however, there are still a few amounts of cryptocurrency transactions that involve illicit or criminal activities. It is essential to identify and monitor addresses associated with illegal behaviors to ensure the security and stability of the cryptocurrency ecosystem. In this paper, we propose a framework to build a dataset comprising Bitcoin transactions between 12 July 2019 and 26 May 2021. This dataset (hereafter referred to as BABD-13) contains 13 types of Bitcoin addresses, 5 categories of indicators with 148 features, and 544,462 labeled data, which is the largest labeled Bitcoin address behavior dataset publicly available to our knowledge. We also propose a novel and efficient subgraph generation algorithm called BTC-SubGen to extract a k -hop subgraph from the entire Bitcoin transaction graph constructed by the directed heterogeneous multigraph starting from a specific Bitcoin address node. We then conduct 13-class classification tasks on BABD-13 by five machine learning models namely k -nearest neighbors algorithm, decision tree, random forest, multilayer perceptron, and XGBoost, the results show that the accuracy rates are between 93.24% and 97.13%. In addition, we study the relations and importance of the proposed features and analyze how they affect the effect of machine learning models. Finally, we conduct a preliminary analysis of the behavior patterns of different types of Bitcoin addresses using concrete features and find several meaningful and explainable modes.
+
+
+
+
+ Recommended citation: "BABD: A Bitcoin Address Behavior Dataset for Pattern Analysis," in IEEE Transactions on Information Forensics and Security, vol. 19, pp. 2171-2185, 2024, doi: 10.1109/TIFS.2023.3347894. https://ieeexplore.ieee.org/document/10375557/
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/_site/redirects.json b/_site/redirects.json
new file mode 100644
index 0000000..97135a2
--- /dev/null
+++ b/_site/redirects.json
@@ -0,0 +1 @@
+{"/about/":"/","/about.html":"/","/resume":"/cv/","/md/":"/markdown/","/markdown.html":"/markdown/","/wordpress/blog-posts/":"/year-archive/"}
\ No newline at end of file
diff --git a/_site/resume.html b/_site/resume.html
new file mode 100644
index 0000000..c058d90
--- /dev/null
+++ b/_site/resume.html
@@ -0,0 +1,11 @@
+
+
+
+ Redirecting…
+
+
+
+
+ Redirecting…
+ Click here if you are not redirected.
+
diff --git a/_site/robots.txt b/_site/robots.txt
new file mode 100644
index 0000000..e087884
--- /dev/null
+++ b/_site/robots.txt
@@ -0,0 +1 @@
+Sitemap: /sitemap.xml
diff --git a/_site/sitemap.xml b/_site/sitemap.xml
new file mode 100644
index 0000000..b35cd7d
--- /dev/null
+++ b/_site/sitemap.xml
@@ -0,0 +1,93 @@
+
+
+
+/posts/2012/08/blog-post-1/
+2012-08-14T00:00:00-07:00
+
+
+/posts/2013/08/blog-post-2/
+2013-08-14T00:00:00-07:00
+
+
+/posts/2014/08/blog-post-3/
+2014-08-14T00:00:00-07:00
+
+
+/posts/2012/08/blog-post-4/
+2015-08-14T00:00:00-07:00
+
+
+/posts/2012/08/blog-post-4/
+2199-01-01T00:00:00-08:00
+
+
+/publication/01-2023-babd
+2023-12-28T00:00:00-08:00
+
+
+/publication/02-2024-matd3
+2024-07-03T00:00:00-07:00
+
+
+/teaching/2023-spring-ta.html
+2023-06-01T00:00:00-07:00
+
+
+/
+
+
+/categories/
+
+
+/collection-archive/
+
+
+/cv/
+
+
+/markdown/
+
+
+/page-archive/
+
+
+/publications/
+
+
+/sitemap/
+
+
+/tags/
+
+
+/talkmap.html
+
+
+/teaching/
+
+
+/terms/
+
+
+/year-archive/
+
+
+/markdown_generator/
+
+
+/files/paper1.pdf
+2024-01-10T00:28:34-08:00
+
+
+/files/paper2.pdf
+2024-01-10T00:28:35-08:00
+
+
+/files/paper3.pdf
+2024-01-10T00:28:35-08:00
+
+
+/talkmap/map.html
+2024-01-10T00:28:43-08:00
+
+
diff --git a/_site/sitemap/index.html b/_site/sitemap/index.html
new file mode 100644
index 0000000..bf50947
--- /dev/null
+++ b/_site/sitemap/index.html
@@ -0,0 +1,1337 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Sitemap - Yuchen Lei
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Sitemap
+
+
+
A list of all the posts and pages found on the site. For you robots out there is an XML version available for digesting as well.
+
+
+
+
+
+
publications
+
+
+
+
+
+
+
+
+
+
+ Published in IEEE Transactions on Information Forensics and Security , 2023
+
+
+
+
Cryptocurrencies have dramatically increased adoption in mainstream applications in various fields such as financial and online services, however, there are still a few amounts of cryptocurrency transactions that involve illicit or criminal activities. It is essential to identify and monitor addresses associated with illegal behaviors to ensure the security and stability of the cryptocurrency ecosystem. In this paper, we propose a framework to build a dataset comprising Bitcoin transactions between 12 July 2019 and 26 May 2021. This dataset (hereafter referred to as BABD-13) contains 13 types of Bitcoin addresses, 5 categories of indicators with 148 features, and 544,462 labeled data, which is the largest labeled Bitcoin address behavior dataset publicly available to our knowledge. We also propose a novel and efficient subgraph generation algorithm called BTC-SubGen to extract a k -hop subgraph from the entire Bitcoin transaction graph constructed by the directed heterogeneous multigraph starting from a specific Bitcoin address node. We then conduct 13-class classification tasks on BABD-13 by five machine learning models namely k -nearest neighbors algorithm, decision tree, random forest, multilayer perceptron, and XGBoost, the results show that the accuracy rates are between 93.24% and 97.13%. In addition, we study the relations and importance of the proposed features and analyze how they affect the effect of machine learning models. Finally, we conduct a preliminary analysis of the behavior patterns of different types of Bitcoin addresses using concrete features and find several meaningful and explainable modes.
+
+
+
+
+ Recommended citation: "BABD: A Bitcoin Address Behavior Dataset for Pattern Analysis," in IEEE Transactions on Information Forensics and Security, vol. 19, pp. 2171-2185, 2024, doi: 10.1109/TIFS.2023.3347894. https://ieeexplore.ieee.org/document/10375557/
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Published in IEEE Wireless Communications and Networking Conference (WCNC) , 2024
+
+
+
+
The Internet of Vehicles (IoV) has witnessed a significant growth in the number of participants. This rapid expansion has increased demands for computing resources and quality of service (QoS), posing challenges for mobile edge computing (MEC) in the IoV domain. Efficiently allocating computing power to meet these service demands has become a crucial concern. Therefore, joint optimization of offloading decisions and power allocation is required to achieve the tradeoff between task latency and energy consumption. To address the above challenge, we propose a multi-agent reinforcement learning (MARL) method called multi-agent twin delayed deep deterministic policy gradient (MA-TD3) in this paper. Compared to its predecessor, multi-agent deep deterministic policy gradient (MADDPG), this algorithm improves performance and execution speed. It solves the slow convergence problem caused by Q-value overestimation and reduces the computational cost. The experimental results illustrate that the proposed algorithm reaches an observable performance improvement.
+
+
+
+
+ Recommended citation: "Multi-Agent Reinforcement Learning for Cooperative Task Offloading in Internet-of-Vehicles," 2024 IEEE Wireless Communications and Networking Conference (WCNC), Dubai, United Arab Emirates, 2024, pp. 1-6, doi: 10.1109/WCNC57260.2024.10571109. https://ieeexplore.ieee.org/document/10571109
+
+
+
+
+
+
teaching
+
+
+
+
+
+
+
+
+
+
+ Undergraduate course, Wuhan University, CSE , 2023
+
+
+
+
Supervise undergraduate students in completing experiments, review lab reports, and provide grade references
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/_site/tags/index.html b/_site/tags/index.html
new file mode 100644
index 0000000..dd7a151
--- /dev/null
+++ b/_site/tags/index.html
@@ -0,0 +1,1070 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Posts by Tags - Yuchen Lei
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Posts by Tags
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
category1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ less than 1 minute read
+
+
+
+
+
+ Published: January 01, 2199
+
+
+
+
This post will show up by default. To disable scheduling of future posts, edit config.yml and set future: false.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ less than 1 minute read
+
+
+
+
+
+ Published: August 14, 2015
+
+
+
+
This is a sample blog post. Lorem ipsum I can’t remember the rest of lorem ipsum and don’t have an internet connection right now. Testing testing testing this blog post. Blog posts are cool.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ less than 1 minute read
+
+
+
+
+
+ Published: August 14, 2014
+
+
+
+
This is a sample blog post. Lorem ipsum I can’t remember the rest of lorem ipsum and don’t have an internet connection right now. Testing testing testing this blog post. Blog posts are cool.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ less than 1 minute read
+
+
+
+
+
+ Published: August 14, 2013
+
+
+
+
This is a sample blog post. Lorem ipsum I can’t remember the rest of lorem ipsum and don’t have an internet connection right now. Testing testing testing this blog post. Blog posts are cool.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ less than 1 minute read
+
+
+
+
+
+ Published: August 14, 2012
+
+
+
+
This is a sample blog post. Lorem ipsum I can’t remember the rest of lorem ipsum and don’t have an internet connection right now. Testing testing testing this blog post. Blog posts are cool.
+
+
+
+
+
+
+
+
+
+
+
+
+
category2
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ less than 1 minute read
+
+
+
+
+
+ Published: January 01, 2199
+
+
+
+
This post will show up by default. To disable scheduling of future posts, edit config.yml and set future: false.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ less than 1 minute read
+
+
+
+
+
+ Published: August 14, 2015
+
+
+
+
This is a sample blog post. Lorem ipsum I can’t remember the rest of lorem ipsum and don’t have an internet connection right now. Testing testing testing this blog post. Blog posts are cool.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ less than 1 minute read
+
+
+
+
+
+ Published: August 14, 2014
+
+
+
+
This is a sample blog post. Lorem ipsum I can’t remember the rest of lorem ipsum and don’t have an internet connection right now. Testing testing testing this blog post. Blog posts are cool.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ less than 1 minute read
+
+
+
+
+
+ Published: August 14, 2013
+
+
+
+
This is a sample blog post. Lorem ipsum I can’t remember the rest of lorem ipsum and don’t have an internet connection right now. Testing testing testing this blog post. Blog posts are cool.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ less than 1 minute read
+
+
+
+
+
+ Published: August 14, 2012
+
+
+
+
This is a sample blog post. Lorem ipsum I can’t remember the rest of lorem ipsum and don’t have an internet connection right now. Testing testing testing this blog post. Blog posts are cool.
+
+
+
+
+
+
+
+
+
+
+
+
+
cool posts
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ less than 1 minute read
+
+
+
+
+
+ Published: January 01, 2199
+
+
+
+
This post will show up by default. To disable scheduling of future posts, edit config.yml and set future: false.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ less than 1 minute read
+
+
+
+
+
+ Published: August 14, 2015
+
+
+
+
This is a sample blog post. Lorem ipsum I can’t remember the rest of lorem ipsum and don’t have an internet connection right now. Testing testing testing this blog post. Blog posts are cool.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ less than 1 minute read
+
+
+
+
+
+ Published: August 14, 2014
+
+
+
+
This is a sample blog post. Lorem ipsum I can’t remember the rest of lorem ipsum and don’t have an internet connection right now. Testing testing testing this blog post. Blog posts are cool.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ less than 1 minute read
+
+
+
+
+
+ Published: August 14, 2013
+
+
+
+
This is a sample blog post. Lorem ipsum I can’t remember the rest of lorem ipsum and don’t have an internet connection right now. Testing testing testing this blog post. Blog posts are cool.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ less than 1 minute read
+
+
+
+
+
+ Published: August 14, 2012
+
+
+
+
This is a sample blog post. Lorem ipsum I can’t remember the rest of lorem ipsum and don’t have an internet connection right now. Testing testing testing this blog post. Blog posts are cool.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/_site/talkmap.html b/_site/talkmap.html
new file mode 100644
index 0000000..d720082
--- /dev/null
+++ b/_site/talkmap.html
@@ -0,0 +1,265 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Talk map - Yuchen Lei
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Talk map
+
+
This map is generated from a Jupyter Notebook file in /_talks/talkmap.ipynb , which mines the location fields in the .md files in _talks/.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/_site/talkmap.ipynb b/_site/talkmap.ipynb
new file mode 100644
index 0000000..f3aa57c
--- /dev/null
+++ b/_site/talkmap.ipynb
@@ -0,0 +1,158 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Leaflet cluster map of talk locations\n",
+ "\n",
+ "Run this from the _talks/ directory, which contains .md files of all your talks. This scrapes the location YAML field from each .md file, geolocates it with geopy/Nominatim, and uses the getorg library to output data, HTML, and Javascript for a standalone cluster map."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Requirement already up-to-date: getorg in /home/vm/anaconda3/lib/python3.5/site-packages\n",
+ "Requirement already up-to-date: geopy in /home/vm/.local/lib/python3.5/site-packages (from getorg)\n",
+ "Requirement already up-to-date: retrying in /home/vm/.local/lib/python3.5/site-packages (from getorg)\n",
+ "Requirement already up-to-date: pygithub in /home/vm/anaconda3/lib/python3.5/site-packages (from getorg)\n",
+ "Requirement already up-to-date: six>=1.7.0 in /home/vm/.local/lib/python3.5/site-packages (from retrying->getorg)\n",
+ "IPywidgets and ipyleaflet support enabled.\n"
+ ]
+ }
+ ],
+ "source": [
+ "!pip install getorg --upgrade\n",
+ "import glob\n",
+ "import getorg\n",
+ "from geopy import Nominatim"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [],
+ "source": [
+ "g = glob.glob(\"*.md\")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {
+ "collapsed": true
+ },
+ "outputs": [],
+ "source": [
+ "geocoder = Nominatim()\n",
+ "location_dict = {}\n",
+ "location = \"\"\n",
+ "permalink = \"\"\n",
+ "title = \"\""
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Berkeley CA, USA \n",
+ " Berkeley, Alameda County, California, United States of America\n",
+ "Los Angeles, CA \n",
+ " LA, Los Angeles County, California, United States of America\n",
+ "London, UK \n",
+ " London, Greater London, England, UK\n",
+ "San Francisco, California \n",
+ " SF, California, United States of America\n"
+ ]
+ }
+ ],
+ "source": [
+ "\n",
+ "for file in g:\n",
+ " with open(file, 'r') as f:\n",
+ " lines = f.read()\n",
+ " if lines.find('location: \"') > 1:\n",
+ " loc_start = lines.find('location: \"') + 11\n",
+ " lines_trim = lines[loc_start:]\n",
+ " loc_end = lines_trim.find('\"')\n",
+ " location = lines_trim[:loc_end]\n",
+ " \n",
+ " \n",
+ " location_dict[location] = geocoder.geocode(location)\n",
+ " print(location, \"\\n\", location_dict[location])\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "'Written map to ../talkmap/'"
+ ]
+ },
+ "execution_count": 5,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "m = getorg.orgmap.create_map_obj()\n",
+ "getorg.orgmap.output_html_cluster_map(location_dict, folder_name=\"../talkmap\", hashed_usernames=False)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": true
+ },
+ "outputs": [],
+ "source": []
+ }
+ ],
+ "metadata": {
+ "anaconda-cloud": {},
+ "kernelspec": {
+ "display_name": "Python [Root]",
+ "language": "python",
+ "name": "Python [Root]"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.5.2"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 0
+}
diff --git a/_site/talkmap.py b/_site/talkmap.py
new file mode 100644
index 0000000..803c5f4
--- /dev/null
+++ b/_site/talkmap.py
@@ -0,0 +1,47 @@
+
+
+# # Leaflet cluster map of talk locations
+#
+# (c) 2016-2017 R. Stuart Geiger, released under the MIT license
+#
+# Run this from the _talks/ directory, which contains .md files of all your talks.
+# This scrapes the location YAML field from each .md file, geolocates it with
+# geopy/Nominatim, and uses the getorg library to output data, HTML,
+# and Javascript for a standalone cluster map.
+#
+# Requires: glob, getorg, geopy
+
+import glob
+import getorg
+from geopy import Nominatim
+
+g = glob.glob("*.md")
+
+
+geocoder = Nominatim()
+location_dict = {}
+location = ""
+permalink = ""
+title = ""
+
+
+for file in g:
+ with open(file, 'r') as f:
+ lines = f.read()
+ if lines.find('location: "') > 1:
+ loc_start = lines.find('location: "') + 11
+ lines_trim = lines[loc_start:]
+ loc_end = lines_trim.find('"')
+ location = lines_trim[:loc_end]
+
+
+ location_dict[location] = geocoder.geocode(location)
+ print(location, "\n", location_dict[location])
+
+
+m = getorg.orgmap.create_map_obj()
+getorg.orgmap.output_html_cluster_map(location_dict, folder_name="../talkmap", hashed_usernames=False)
+
+
+
+
diff --git a/_site/talkmap/leaflet_dist/MarkerCluster.Default.css b/_site/talkmap/leaflet_dist/MarkerCluster.Default.css
new file mode 100644
index 0000000..47d5954
--- /dev/null
+++ b/_site/talkmap/leaflet_dist/MarkerCluster.Default.css
@@ -0,0 +1,62 @@
+
+ .marker-cluster-small {
+ background-color: rgba(181, 226, 140, 0.6);
+ }
+ .marker-cluster-small div {
+ background-color: rgba(110, 204, 57, 0.6);
+ }
+
+ .marker-cluster-medium {
+ background-color: rgba(241, 211, 87, 0.6);
+ }
+ .marker-cluster-medium div {
+ background-color: rgba(240, 194, 12, 0.6);
+ }
+
+ .marker-cluster-large {
+ background-color: rgba(253, 156, 115, 0.6);
+ }
+ .marker-cluster-large div {
+ background-color: rgba(241, 128, 23, 0.6);
+ }
+
+ /* IE 6-8 fallback colors */
+ .leaflet-oldie .marker-cluster-small {
+ background-color: rgb(181, 226, 140);
+ }
+ .leaflet-oldie .marker-cluster-small div {
+ background-color: rgb(110, 204, 57);
+ }
+
+ .leaflet-oldie .marker-cluster-medium {
+ background-color: rgb(241, 211, 87);
+ }
+ .leaflet-oldie .marker-cluster-medium div {
+ background-color: rgb(240, 194, 12);
+ }
+
+ .leaflet-oldie .marker-cluster-large {
+ background-color: rgb(253, 156, 115);
+ }
+ .leaflet-oldie .marker-cluster-large div {
+ background-color: rgb(241, 128, 23);
+ }
+
+ .marker-cluster {
+ background-clip: padding-box;
+ border-radius: 20px;
+ }
+ .marker-cluster div {
+ width: 30px;
+ height: 30px;
+ margin-left: 5px;
+ margin-top: 5px;
+
+ text-align: center;
+ border-radius: 15px;
+ font: 12px "Helvetica Neue", Arial, Helvetica, sans-serif;
+ }
+ .marker-cluster span {
+ line-height: 30px;
+ }
+
\ No newline at end of file
diff --git a/_site/talkmap/leaflet_dist/MarkerCluster.css b/_site/talkmap/leaflet_dist/MarkerCluster.css
new file mode 100644
index 0000000..dac8d41
--- /dev/null
+++ b/_site/talkmap/leaflet_dist/MarkerCluster.css
@@ -0,0 +1,16 @@
+
+ .leaflet-cluster-anim .leaflet-marker-icon, .leaflet-cluster-anim .leaflet-marker-shadow {
+ -webkit-transition: -webkit-transform 0.3s ease-out, opacity 0.3s ease-in;
+ -moz-transition: -moz-transform 0.3s ease-out, opacity 0.3s ease-in;
+ -o-transition: -o-transform 0.3s ease-out, opacity 0.3s ease-in;
+ transition: transform 0.3s ease-out, opacity 0.3s ease-in;
+ }
+
+ .leaflet-cluster-spider-leg {
+ /* stroke-dashoffset (duration and function) should match with leaflet-marker-icon transform in order to track it exactly */
+ -webkit-transition: -webkit-stroke-dashoffset 0.3s ease-out, -webkit-stroke-opacity 0.3s ease-in;
+ -moz-transition: -moz-stroke-dashoffset 0.3s ease-out, -moz-stroke-opacity 0.3s ease-in;
+ -o-transition: -o-stroke-dashoffset 0.3s ease-out, -o-stroke-opacity 0.3s ease-in;
+ transition: stroke-dashoffset 0.3s ease-out, stroke-opacity 0.3s ease-in;
+ }
+
\ No newline at end of file
diff --git a/_site/talkmap/leaflet_dist/leaflet.markercluster-src.js b/_site/talkmap/leaflet_dist/leaflet.markercluster-src.js
new file mode 100644
index 0000000..5b477c0
--- /dev/null
+++ b/_site/talkmap/leaflet_dist/leaflet.markercluster-src.js
@@ -0,0 +1,2627 @@
+
+ /*
+ Leaflet.markercluster, Provides Beautiful Animated Marker Clustering functionality for Leaflet, a JS library for interactive maps.
+ https://github.com/Leaflet/Leaflet.markercluster
+ (c) 2012-2013, Dave Leaver, smartrak
+ */
+ (function (window, document, undefined) {/*
+ * L.MarkerClusterGroup extends L.FeatureGroup by clustering the markers contained within
+ */
+
+ L.MarkerClusterGroup = L.FeatureGroup.extend({
+
+ options: {
+ maxClusterRadius: 80, //A cluster will cover at most this many pixels from its center
+ iconCreateFunction: null,
+
+ spiderfyOnMaxZoom: true,
+ showCoverageOnHover: true,
+ zoomToBoundsOnClick: true,
+ singleMarkerMode: false,
+
+ disableClusteringAtZoom: null,
+
+ // Setting this to false prevents the removal of any clusters outside of the viewpoint, which
+ // is the default behaviour for performance reasons.
+ removeOutsideVisibleBounds: true,
+
+ // Set to false to disable all animations (zoom and spiderfy).
+ // If false, option animateAddingMarkers below has no effect.
+ // If L.DomUtil.TRANSITION is falsy, this option has no effect.
+ animate: true,
+
+ //Whether to animate adding markers after adding the MarkerClusterGroup to the map
+ // If you are adding individual markers set to true, if adding bulk markers leave false for massive performance gains.
+ animateAddingMarkers: false,
+
+ //Increase to increase the distance away that spiderfied markers appear from the center
+ spiderfyDistanceMultiplier: 1,
+
+ // Make it possible to specify a polyline options on a spider leg
+ spiderLegPolylineOptions: { weight: 1.5, color: '#222', opacity: 0.5 },
+
+ // When bulk adding layers, adds markers in chunks. Means addLayers may not add all the layers in the call, others will be loaded during setTimeouts
+ chunkedLoading: false,
+ chunkInterval: 200, // process markers for a maximum of ~ n milliseconds (then trigger the chunkProgress callback)
+ chunkDelay: 50, // at the end of each interval, give n milliseconds back to system/browser
+ chunkProgress: null, // progress callback: function(processed, total, elapsed) (e.g. for a progress indicator)
+
+ //Options to pass to the L.Polygon constructor
+ polygonOptions: {}
+ },
+
+ initialize: function (options) {
+ L.Util.setOptions(this, options);
+ if (!this.options.iconCreateFunction) {
+ this.options.iconCreateFunction = this._defaultIconCreateFunction;
+ }
+
+ this._featureGroup = L.featureGroup();
+ this._featureGroup.addEventParent(this);
+
+ this._nonPointGroup = L.featureGroup();
+ this._nonPointGroup.addEventParent(this);
+
+ this._inZoomAnimation = 0;
+ this._needsClustering = [];
+ this._needsRemoving = []; //Markers removed while we aren't on the map need to be kept track of
+ //The bounds of the currently shown area (from _getExpandedVisibleBounds) Updated on zoom/move
+ this._currentShownBounds = null;
+
+ this._queue = [];
+
+ // Hook the appropriate animation methods.
+ var animate = L.DomUtil.TRANSITION && this.options.animate;
+ L.extend(this, animate ? this._withAnimation : this._noAnimation);
+ // Remember which MarkerCluster class to instantiate (animated or not).
+ this._markerCluster = animate ? L.MarkerCluster : L.MarkerClusterNonAnimated;
+ },
+
+ addLayer: function (layer) {
+
+ if (layer instanceof L.LayerGroup) {
+ return this.addLayers([layer]);
+ }
+
+ //Don't cluster non point data
+ if (!layer.getLatLng) {
+ this._nonPointGroup.addLayer(layer);
+ return this;
+ }
+
+ if (!this._map) {
+ this._needsClustering.push(layer);
+ return this;
+ }
+
+ if (this.hasLayer(layer)) {
+ return this;
+ }
+
+
+ //If we have already clustered we'll need to add this one to a cluster
+
+ if (this._unspiderfy) {
+ this._unspiderfy();
+ }
+
+ this._addLayer(layer, this._maxZoom);
+
+ // Refresh bounds and weighted positions.
+ this._topClusterLevel._recalculateBounds();
+
+ this._refreshClustersIcons();
+
+ //Work out what is visible
+ var visibleLayer = layer,
+ currentZoom = this._map.getZoom();
+ if (layer.__parent) {
+ while (visibleLayer.__parent._zoom >= currentZoom) {
+ visibleLayer = visibleLayer.__parent;
+ }
+ }
+
+ if (this._currentShownBounds.contains(visibleLayer.getLatLng())) {
+ if (this.options.animateAddingMarkers) {
+ this._animationAddLayer(layer, visibleLayer);
+ } else {
+ this._animationAddLayerNonAnimated(layer, visibleLayer);
+ }
+ }
+ return this;
+ },
+
+ removeLayer: function (layer) {
+
+ if (layer instanceof L.LayerGroup) {
+ return this.removeLayers([layer]);
+ }
+
+ //Non point layers
+ if (!layer.getLatLng) {
+ this._nonPointGroup.removeLayer(layer);
+ return this;
+ }
+
+ if (!this._map) {
+ if (!this._arraySplice(this._needsClustering, layer) && this.hasLayer(layer)) {
+ this._needsRemoving.push(layer);
+ }
+ return this;
+ }
+
+ if (!layer.__parent) {
+ return this;
+ }
+
+ if (this._unspiderfy) {
+ this._unspiderfy();
+ this._unspiderfyLayer(layer);
+ }
+
+ //Remove the marker from clusters
+ this._removeLayer(layer, true);
+
+ // Refresh bounds and weighted positions.
+ this._topClusterLevel._recalculateBounds();
+
+ this._refreshClustersIcons();
+
+ layer.off('move', this._childMarkerMoved, this);
+
+ if (this._featureGroup.hasLayer(layer)) {
+ this._featureGroup.removeLayer(layer);
+ if (layer.clusterShow) {
+ layer.clusterShow();
+ }
+ }
+
+ return this;
+ },
+
+ //Takes an array of markers and adds them in bulk
+ addLayers: function (layersArray) {
+ if (!L.Util.isArray(layersArray)) {
+ return this.addLayer(layersArray);
+ }
+
+ var fg = this._featureGroup,
+ npg = this._nonPointGroup,
+ chunked = this.options.chunkedLoading,
+ chunkInterval = this.options.chunkInterval,
+ chunkProgress = this.options.chunkProgress,
+ l = layersArray.length,
+ offset = 0,
+ originalArray = true,
+ m;
+
+ if (this._map) {
+ var started = (new Date()).getTime();
+ var process = L.bind(function () {
+ var start = (new Date()).getTime();
+ for (; offset < l; offset++) {
+ if (chunked && offset % 200 === 0) {
+ // every couple hundred markers, instrument the time elapsed since processing started:
+ var elapsed = (new Date()).getTime() - start;
+ if (elapsed > chunkInterval) {
+ break; // been working too hard, time to take a break :-)
+ }
+ }
+
+ m = layersArray[offset];
+
+ // Group of layers, append children to layersArray and skip.
+ // Side effects:
+ // - Total increases, so chunkProgress ratio jumps backward.
+ // - Groups are not included in this group, only their non-group child layers (hasLayer).
+ // Changing array length while looping does not affect performance in current browsers:
+ // http://jsperf.com/for-loop-changing-length/6
+ if (m instanceof L.LayerGroup) {
+ if (originalArray) {
+ layersArray = layersArray.slice();
+ originalArray = false;
+ }
+ this._extractNonGroupLayers(m, layersArray);
+ l = layersArray.length;
+ continue;
+ }
+
+ //Not point data, can't be clustered
+ if (!m.getLatLng) {
+ npg.addLayer(m);
+ continue;
+ }
+
+ if (this.hasLayer(m)) {
+ continue;
+ }
+
+ this._addLayer(m, this._maxZoom);
+
+ //If we just made a cluster of size 2 then we need to remove the other marker from the map (if it is) or we never will
+ if (m.__parent) {
+ if (m.__parent.getChildCount() === 2) {
+ var markers = m.__parent.getAllChildMarkers(),
+ otherMarker = markers[0] === m ? markers[1] : markers[0];
+ fg.removeLayer(otherMarker);
+ }
+ }
+ }
+
+ if (chunkProgress) {
+ // report progress and time elapsed:
+ chunkProgress(offset, l, (new Date()).getTime() - started);
+ }
+
+ // Completed processing all markers.
+ if (offset === l) {
+
+ // Refresh bounds and weighted positions.
+ this._topClusterLevel._recalculateBounds();
+
+ this._refreshClustersIcons();
+
+ this._topClusterLevel._recursivelyAddChildrenToMap(null, this._zoom, this._currentShownBounds);
+ } else {
+ setTimeout(process, this.options.chunkDelay);
+ }
+ }, this);
+
+ process();
+ } else {
+ var needsClustering = this._needsClustering;
+
+ for (; offset < l; offset++) {
+ m = layersArray[offset];
+
+ // Group of layers, append children to layersArray and skip.
+ if (m instanceof L.LayerGroup) {
+ if (originalArray) {
+ layersArray = layersArray.slice();
+ originalArray = false;
+ }
+ this._extractNonGroupLayers(m, layersArray);
+ l = layersArray.length;
+ continue;
+ }
+
+ //Not point data, can't be clustered
+ if (!m.getLatLng) {
+ npg.addLayer(m);
+ continue;
+ }
+
+ if (this.hasLayer(m)) {
+ continue;
+ }
+
+ needsClustering.push(m);
+ }
+ }
+ return this;
+ },
+
+ //Takes an array of markers and removes them in bulk
+ removeLayers: function (layersArray) {
+ var i, m,
+ l = layersArray.length,
+ fg = this._featureGroup,
+ npg = this._nonPointGroup,
+ originalArray = true;
+
+ if (!this._map) {
+ for (i = 0; i < l; i++) {
+ m = layersArray[i];
+
+ // Group of layers, append children to layersArray and skip.
+ if (m instanceof L.LayerGroup) {
+ if (originalArray) {
+ layersArray = layersArray.slice();
+ originalArray = false;
+ }
+ this._extractNonGroupLayers(m, layersArray);
+ l = layersArray.length;
+ continue;
+ }
+
+ this._arraySplice(this._needsClustering, m);
+ npg.removeLayer(m);
+ if (this.hasLayer(m)) {
+ this._needsRemoving.push(m);
+ }
+ }
+ return this;
+ }
+
+ if (this._unspiderfy) {
+ this._unspiderfy();
+
+ // Work on a copy of the array, so that next loop is not affected.
+ var layersArray2 = layersArray.slice(),
+ l2 = l;
+ for (i = 0; i < l2; i++) {
+ m = layersArray2[i];
+
+ // Group of layers, append children to layersArray and skip.
+ if (m instanceof L.LayerGroup) {
+ this._extractNonGroupLayers(m, layersArray2);
+ l2 = layersArray2.length;
+ continue;
+ }
+
+ this._unspiderfyLayer(m);
+ }
+ }
+
+ for (i = 0; i < l; i++) {
+ m = layersArray[i];
+
+ // Group of layers, append children to layersArray and skip.
+ if (m instanceof L.LayerGroup) {
+ if (originalArray) {
+ layersArray = layersArray.slice();
+ originalArray = false;
+ }
+ this._extractNonGroupLayers(m, layersArray);
+ l = layersArray.length;
+ continue;
+ }
+
+ if (!m.__parent) {
+ npg.removeLayer(m);
+ continue;
+ }
+
+ this._removeLayer(m, true, true);
+
+ if (fg.hasLayer(m)) {
+ fg.removeLayer(m);
+ if (m.clusterShow) {
+ m.clusterShow();
+ }
+ }
+ }
+
+ // Refresh bounds and weighted positions.
+ this._topClusterLevel._recalculateBounds();
+
+ this._refreshClustersIcons();
+
+ //Fix up the clusters and markers on the map
+ this._topClusterLevel._recursivelyAddChildrenToMap(null, this._zoom, this._currentShownBounds);
+
+ return this;
+ },
+
+ //Removes all layers from the MarkerClusterGroup
+ clearLayers: function () {
+ //Need our own special implementation as the LayerGroup one doesn't work for us
+
+ //If we aren't on the map (yet), blow away the markers we know of
+ if (!this._map) {
+ this._needsClustering = [];
+ delete this._gridClusters;
+ delete this._gridUnclustered;
+ }
+
+ if (this._noanimationUnspiderfy) {
+ this._noanimationUnspiderfy();
+ }
+
+ //Remove all the visible layers
+ this._featureGroup.clearLayers();
+ this._nonPointGroup.clearLayers();
+
+ this.eachLayer(function (marker) {
+ marker.off('move', this._childMarkerMoved, this);
+ delete marker.__parent;
+ });
+
+ if (this._map) {
+ //Reset _topClusterLevel and the DistanceGrids
+ this._generateInitialClusters();
+ }
+
+ return this;
+ },
+
+ //Override FeatureGroup.getBounds as it doesn't work
+ getBounds: function () {
+ var bounds = new L.LatLngBounds();
+
+ if (this._topClusterLevel) {
+ bounds.extend(this._topClusterLevel._bounds);
+ }
+
+ for (var i = this._needsClustering.length - 1; i >= 0; i--) {
+ bounds.extend(this._needsClustering[i].getLatLng());
+ }
+
+ bounds.extend(this._nonPointGroup.getBounds());
+
+ return bounds;
+ },
+
+ //Overrides LayerGroup.eachLayer
+ eachLayer: function (method, context) {
+ var markers = this._needsClustering.slice(),
+ needsRemoving = this._needsRemoving,
+ i;
+
+ if (this._topClusterLevel) {
+ this._topClusterLevel.getAllChildMarkers(markers);
+ }
+
+ for (i = markers.length - 1; i >= 0; i--) {
+ if (needsRemoving.indexOf(markers[i]) === -1) {
+ method.call(context, markers[i]);
+ }
+ }
+
+ this._nonPointGroup.eachLayer(method, context);
+ },
+
+ //Overrides LayerGroup.getLayers
+ getLayers: function () {
+ var layers = [];
+ this.eachLayer(function (l) {
+ layers.push(l);
+ });
+ return layers;
+ },
+
+ //Overrides LayerGroup.getLayer, WARNING: Really bad performance
+ getLayer: function (id) {
+ var result = null;
+
+ id = parseInt(id, 10);
+
+ this.eachLayer(function (l) {
+ if (L.stamp(l) === id) {
+ result = l;
+ }
+ });
+
+ return result;
+ },
+
+ //Returns true if the given layer is in this MarkerClusterGroup
+ hasLayer: function (layer) {
+ if (!layer) {
+ return false;
+ }
+
+ var i, anArray = this._needsClustering;
+
+ for (i = anArray.length - 1; i >= 0; i--) {
+ if (anArray[i] === layer) {
+ return true;
+ }
+ }
+
+ anArray = this._needsRemoving;
+ for (i = anArray.length - 1; i >= 0; i--) {
+ if (anArray[i] === layer) {
+ return false;
+ }
+ }
+
+ return !!(layer.__parent && layer.__parent._group === this) || this._nonPointGroup.hasLayer(layer);
+ },
+
+ //Zoom down to show the given layer (spiderfying if necessary) then calls the callback
+ zoomToShowLayer: function (layer, callback) {
+
+ if (typeof callback !== 'function') {
+ callback = function () {};
+ }
+
+ var showMarker = function () {
+ if ((layer._icon || layer.__parent._icon) && !this._inZoomAnimation) {
+ this._map.off('moveend', showMarker, this);
+ this.off('animationend', showMarker, this);
+
+ if (layer._icon) {
+ callback();
+ } else if (layer.__parent._icon) {
+ this.once('spiderfied', callback, this);
+ layer.__parent.spiderfy();
+ }
+ }
+ };
+
+ if (layer._icon && this._map.getBounds().contains(layer.getLatLng())) {
+ //Layer is visible ond on screen, immediate return
+ callback();
+ } else if (layer.__parent._zoom < this._map.getZoom()) {
+ //Layer should be visible at this zoom level. It must not be on screen so just pan over to it
+ this._map.on('moveend', showMarker, this);
+ this._map.panTo(layer.getLatLng());
+ } else {
+ var moveStart = function () {
+ this._map.off('movestart', moveStart, this);
+ moveStart = null;
+ };
+
+ this._map.on('movestart', moveStart, this);
+ this._map.on('moveend', showMarker, this);
+ this.on('animationend', showMarker, this);
+ layer.__parent.zoomToBounds();
+
+ if (moveStart) {
+ //Never started moving, must already be there, probably need clustering however
+ showMarker.call(this);
+ }
+ }
+ },
+
+ //Overrides FeatureGroup.onAdd
+ onAdd: function (map) {
+ this._map = map;
+ var i, l, layer;
+
+ if (!isFinite(this._map.getMaxZoom())) {
+ throw "Map has no maxZoom specified";
+ }
+
+ this._featureGroup.addTo(map);
+ this._nonPointGroup.addTo(map);
+
+ if (!this._gridClusters) {
+ this._generateInitialClusters();
+ }
+
+ this._maxLat = map.options.crs.projection.MAX_LATITUDE;
+
+ for (i = 0, l = this._needsRemoving.length; i < l; i++) {
+ layer = this._needsRemoving[i];
+ this._removeLayer(layer, true);
+ }
+ this._needsRemoving = [];
+
+ //Remember the current zoom level and bounds
+ this._zoom = this._map.getZoom();
+ this._currentShownBounds = this._getExpandedVisibleBounds();
+
+ this._map.on('zoomend', this._zoomEnd, this);
+ this._map.on('moveend', this._moveEnd, this);
+
+ if (this._spiderfierOnAdd) { //TODO FIXME: Not sure how to have spiderfier add something on here nicely
+ this._spiderfierOnAdd();
+ }
+
+ this._bindEvents();
+
+ //Actually add our markers to the map:
+ l = this._needsClustering;
+ this._needsClustering = [];
+ this.addLayers(l);
+ },
+
+ //Overrides FeatureGroup.onRemove
+ onRemove: function (map) {
+ map.off('zoomend', this._zoomEnd, this);
+ map.off('moveend', this._moveEnd, this);
+
+ this._unbindEvents();
+
+ //In case we are in a cluster animation
+ this._map._mapPane.className = this._map._mapPane.className.replace(' leaflet-cluster-anim', '');
+
+ if (this._spiderfierOnRemove) { //TODO FIXME: Not sure how to have spiderfier add something on here nicely
+ this._spiderfierOnRemove();
+ }
+
+ delete this._maxLat;
+
+ //Clean up all the layers we added to the map
+ this._hideCoverage();
+ this._featureGroup.remove();
+ this._nonPointGroup.remove();
+
+ this._featureGroup.clearLayers();
+
+ this._map = null;
+ },
+
+ getVisibleParent: function (marker) {
+ var vMarker = marker;
+ while (vMarker && !vMarker._icon) {
+ vMarker = vMarker.__parent;
+ }
+ return vMarker || null;
+ },
+
+ //Remove the given object from the given array
+ _arraySplice: function (anArray, obj) {
+ for (var i = anArray.length - 1; i >= 0; i--) {
+ if (anArray[i] === obj) {
+ anArray.splice(i, 1);
+ return true;
+ }
+ }
+ },
+
+ /**
+ * Removes a marker from all _gridUnclustered zoom levels, starting at the supplied zoom.
+ * @param marker to be removed from _gridUnclustered.
+ * @param z integer bottom start zoom level (included)
+ * @private
+ */
+ _removeFromGridUnclustered: function (marker, z) {
+ var map = this._map,
+ gridUnclustered = this._gridUnclustered;
+
+ for (; z >= 0; z--) {
+ if (!gridUnclustered[z].removeObject(marker, map.project(marker.getLatLng(), z))) {
+ break;
+ }
+ }
+ },
+
+ _childMarkerMoved: function (e) {
+ if (!this._ignoreMove) {
+ e.target._latlng = e.oldLatLng;
+ this.removeLayer(e.target);
+
+ e.target._latlng = e.latlng;
+ this.addLayer(e.target);
+ }
+ },
+
+ //Internal function for removing a marker from everything.
+ //dontUpdateMap: set to true if you will handle updating the map manually (for bulk functions)
+ _removeLayer: function (marker, removeFromDistanceGrid, dontUpdateMap) {
+ var gridClusters = this._gridClusters,
+ gridUnclustered = this._gridUnclustered,
+ fg = this._featureGroup,
+ map = this._map;
+
+ //Remove the marker from distance clusters it might be in
+ if (removeFromDistanceGrid) {
+ this._removeFromGridUnclustered(marker, this._maxZoom);
+ }
+
+ //Work our way up the clusters removing them as we go if required
+ var cluster = marker.__parent,
+ markers = cluster._markers,
+ otherMarker;
+
+ //Remove the marker from the immediate parents marker list
+ this._arraySplice(markers, marker);
+
+ while (cluster) {
+ cluster._childCount--;
+ cluster._boundsNeedUpdate = true;
+
+ if (cluster._zoom < 0) {
+ //Top level, do nothing
+ break;
+ } else if (removeFromDistanceGrid && cluster._childCount <= 1) { //Cluster no longer required
+ //We need to push the other marker up to the parent
+ otherMarker = cluster._markers[0] === marker ? cluster._markers[1] : cluster._markers[0];
+
+ //Update distance grid
+ gridClusters[cluster._zoom].removeObject(cluster, map.project(cluster._cLatLng, cluster._zoom));
+ gridUnclustered[cluster._zoom].addObject(otherMarker, map.project(otherMarker.getLatLng(), cluster._zoom));
+
+ //Move otherMarker up to parent
+ this._arraySplice(cluster.__parent._childClusters, cluster);
+ cluster.__parent._markers.push(otherMarker);
+ otherMarker.__parent = cluster.__parent;
+
+ if (cluster._icon) {
+ //Cluster is currently on the map, need to put the marker on the map instead
+ fg.removeLayer(cluster);
+ if (!dontUpdateMap) {
+ fg.addLayer(otherMarker);
+ }
+ }
+ } else {
+ cluster._iconNeedsUpdate = true;
+ }
+
+ cluster = cluster.__parent;
+ }
+
+ delete marker.__parent;
+ },
+
+ _isOrIsParent: function (el, oel) {
+ while (oel) {
+ if (el === oel) {
+ return true;
+ }
+ oel = oel.parentNode;
+ }
+ return false;
+ },
+
+ //Override L.Evented.fire
+ fire: function (type, data, propagate) {
+ if (data && data.layer instanceof L.MarkerCluster) {
+ //Prevent multiple clustermouseover/off events if the icon is made up of stacked divs (Doesn't work in ie <= 8, no relatedTarget)
+ if (data.originalEvent && this._isOrIsParent(data.layer._icon, data.originalEvent.relatedTarget)) {
+ return;
+ }
+ type = 'cluster' + type;
+ }
+
+ L.FeatureGroup.prototype.fire.call(this, type, data, propagate);
+ },
+
+ //Override L.Evented.listens
+ listens: function (type, propagate) {
+ return L.FeatureGroup.prototype.listens.call(this, type, propagate) || L.FeatureGroup.prototype.listens.call(this, 'cluster' + type, propagate);
+ },
+
+ //Default functionality
+ _defaultIconCreateFunction: function (cluster) {
+ var childCount = cluster.getChildCount();
+
+ var c = ' marker-cluster-';
+ if (childCount < 10) {
+ c += 'small';
+ } else if (childCount < 100) {
+ c += 'medium';
+ } else {
+ c += 'large';
+ }
+
+ return new L.DivIcon({ html: '' + childCount + '
', className: 'marker-cluster' + c, iconSize: new L.Point(40, 40) });
+ },
+
+ _bindEvents: function () {
+ var map = this._map,
+ spiderfyOnMaxZoom = this.options.spiderfyOnMaxZoom,
+ showCoverageOnHover = this.options.showCoverageOnHover,
+ zoomToBoundsOnClick = this.options.zoomToBoundsOnClick;
+
+ //Zoom on cluster click or spiderfy if we are at the lowest level
+ if (spiderfyOnMaxZoom || zoomToBoundsOnClick) {
+ this.on('clusterclick', this._zoomOrSpiderfy, this);
+ }
+
+ //Show convex hull (boundary) polygon on mouse over
+ if (showCoverageOnHover) {
+ this.on('clustermouseover', this._showCoverage, this);
+ this.on('clustermouseout', this._hideCoverage, this);
+ map.on('zoomend', this._hideCoverage, this);
+ }
+ },
+
+ _zoomOrSpiderfy: function (e) {
+ var cluster = e.layer,
+ bottomCluster = cluster;
+
+ while (bottomCluster._childClusters.length === 1) {
+ bottomCluster = bottomCluster._childClusters[0];
+ }
+
+ if (bottomCluster._zoom === this._maxZoom &&
+ bottomCluster._childCount === cluster._childCount &&
+ this.options.spiderfyOnMaxZoom) {
+
+ // All child markers are contained in a single cluster from this._maxZoom to this cluster.
+ cluster.spiderfy();
+ } else if (this.options.zoomToBoundsOnClick) {
+ cluster.zoomToBounds();
+ }
+
+ // Focus the map again for keyboard users.
+ if (e.originalEvent && e.originalEvent.keyCode === 13) {
+ this._map._container.focus();
+ }
+ },
+
+ _showCoverage: function (e) {
+ var map = this._map;
+ if (this._inZoomAnimation) {
+ return;
+ }
+ if (this._shownPolygon) {
+ map.removeLayer(this._shownPolygon);
+ }
+ if (e.layer.getChildCount() > 2 && e.layer !== this._spiderfied) {
+ this._shownPolygon = new L.Polygon(e.layer.getConvexHull(), this.options.polygonOptions);
+ map.addLayer(this._shownPolygon);
+ }
+ },
+
+ _hideCoverage: function () {
+ if (this._shownPolygon) {
+ this._map.removeLayer(this._shownPolygon);
+ this._shownPolygon = null;
+ }
+ },
+
+ _unbindEvents: function () {
+ var spiderfyOnMaxZoom = this.options.spiderfyOnMaxZoom,
+ showCoverageOnHover = this.options.showCoverageOnHover,
+ zoomToBoundsOnClick = this.options.zoomToBoundsOnClick,
+ map = this._map;
+
+ if (spiderfyOnMaxZoom || zoomToBoundsOnClick) {
+ this.off('clusterclick', this._zoomOrSpiderfy, this);
+ }
+ if (showCoverageOnHover) {
+ this.off('clustermouseover', this._showCoverage, this);
+ this.off('clustermouseout', this._hideCoverage, this);
+ map.off('zoomend', this._hideCoverage, this);
+ }
+ },
+
+ _zoomEnd: function () {
+ if (!this._map) { //May have been removed from the map by a zoomEnd handler
+ return;
+ }
+ this._mergeSplitClusters();
+
+ this._zoom = Math.round(this._map._zoom);
+ this._currentShownBounds = this._getExpandedVisibleBounds();
+ },
+
+ _moveEnd: function () {
+ if (this._inZoomAnimation) {
+ return;
+ }
+
+ var newBounds = this._getExpandedVisibleBounds();
+
+ this._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds, this._zoom, newBounds);
+ this._topClusterLevel._recursivelyAddChildrenToMap(null, Math.round(this._map._zoom), newBounds);
+
+ this._currentShownBounds = newBounds;
+ return;
+ },
+
+ _generateInitialClusters: function () {
+ var maxZoom = this._map.getMaxZoom(),
+ radius = this.options.maxClusterRadius,
+ radiusFn = radius;
+
+ //If we just set maxClusterRadius to a single number, we need to create
+ //a simple function to return that number. Otherwise, we just have to
+ //use the function we've passed in.
+ if (typeof radius !== "function") {
+ radiusFn = function () { return radius; };
+ }
+
+ if (this.options.disableClusteringAtZoom) {
+ maxZoom = this.options.disableClusteringAtZoom - 1;
+ }
+ this._maxZoom = maxZoom;
+ this._gridClusters = {};
+ this._gridUnclustered = {};
+
+ //Set up DistanceGrids for each zoom
+ for (var zoom = maxZoom; zoom >= 0; zoom--) {
+ this._gridClusters[zoom] = new L.DistanceGrid(radiusFn(zoom));
+ this._gridUnclustered[zoom] = new L.DistanceGrid(radiusFn(zoom));
+ }
+
+ // Instantiate the appropriate L.MarkerCluster class (animated or not).
+ this._topClusterLevel = new this._markerCluster(this, -1);
+ },
+
+ //Zoom: Zoom to start adding at (Pass this._maxZoom to start at the bottom)
+ _addLayer: function (layer, zoom) {
+ var gridClusters = this._gridClusters,
+ gridUnclustered = this._gridUnclustered,
+ markerPoint, z;
+
+ if (this.options.singleMarkerMode) {
+ this._overrideMarkerIcon(layer);
+ }
+
+ layer.on('move', this._childMarkerMoved, this);
+
+ //Find the lowest zoom level to slot this one in
+ for (; zoom >= 0; zoom--) {
+ markerPoint = this._map.project(layer.getLatLng(), zoom); // calculate pixel position
+
+ //Try find a cluster close by
+ var closest = gridClusters[zoom].getNearObject(markerPoint);
+ if (closest) {
+ closest._addChild(layer);
+ layer.__parent = closest;
+ return;
+ }
+
+ //Try find a marker close by to form a new cluster with
+ closest = gridUnclustered[zoom].getNearObject(markerPoint);
+ if (closest) {
+ var parent = closest.__parent;
+ if (parent) {
+ this._removeLayer(closest, false);
+ }
+
+ //Create new cluster with these 2 in it
+
+ var newCluster = new this._markerCluster(this, zoom, closest, layer);
+ gridClusters[zoom].addObject(newCluster, this._map.project(newCluster._cLatLng, zoom));
+ closest.__parent = newCluster;
+ layer.__parent = newCluster;
+
+ //First create any new intermediate parent clusters that don't exist
+ var lastParent = newCluster;
+ for (z = zoom - 1; z > parent._zoom; z--) {
+ lastParent = new this._markerCluster(this, z, lastParent);
+ gridClusters[z].addObject(lastParent, this._map.project(closest.getLatLng(), z));
+ }
+ parent._addChild(lastParent);
+
+ //Remove closest from this zoom level and any above that it is in, replace with newCluster
+ this._removeFromGridUnclustered(closest, zoom);
+
+ return;
+ }
+
+ //Didn't manage to cluster in at this zoom, record us as a marker here and continue upwards
+ gridUnclustered[zoom].addObject(layer, markerPoint);
+ }
+
+ //Didn't get in anything, add us to the top
+ this._topClusterLevel._addChild(layer);
+ layer.__parent = this._topClusterLevel;
+ return;
+ },
+
+ /**
+ * Refreshes the icon of all "dirty" visible clusters.
+ * Non-visible "dirty" clusters will be updated when they are added to the map.
+ * @private
+ */
+ _refreshClustersIcons: function () {
+ this._featureGroup.eachLayer(function (c) {
+ if (c instanceof L.MarkerCluster && c._iconNeedsUpdate) {
+ c._updateIcon();
+ }
+ });
+ },
+
+ //Enqueue code to fire after the marker expand/contract has happened
+ _enqueue: function (fn) {
+ this._queue.push(fn);
+ if (!this._queueTimeout) {
+ this._queueTimeout = setTimeout(L.bind(this._processQueue, this), 300);
+ }
+ },
+ _processQueue: function () {
+ for (var i = 0; i < this._queue.length; i++) {
+ this._queue[i].call(this);
+ }
+ this._queue.length = 0;
+ clearTimeout(this._queueTimeout);
+ this._queueTimeout = null;
+ },
+
+ //Merge and split any existing clusters that are too big or small
+ _mergeSplitClusters: function () {
+ var mapZoom = Math.round(this._map._zoom);
+
+ //In case we are starting to split before the animation finished
+ this._processQueue();
+
+ if (this._zoom < mapZoom && this._currentShownBounds.intersects(this._getExpandedVisibleBounds())) { //Zoom in, split
+ this._animationStart();
+ //Remove clusters now off screen
+ this._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds, this._zoom, this._getExpandedVisibleBounds());
+
+ this._animationZoomIn(this._zoom, mapZoom);
+
+ } else if (this._zoom > mapZoom) { //Zoom out, merge
+ this._animationStart();
+
+ this._animationZoomOut(this._zoom, mapZoom);
+ } else {
+ this._moveEnd();
+ }
+ },
+
+ //Gets the maps visible bounds expanded in each direction by the size of the screen (so the user cannot see an area we do not cover in one pan)
+ _getExpandedVisibleBounds: function () {
+ if (!this.options.removeOutsideVisibleBounds) {
+ return this._mapBoundsInfinite;
+ } else if (L.Browser.mobile) {
+ return this._checkBoundsMaxLat(this._map.getBounds());
+ }
+
+ return this._checkBoundsMaxLat(this._map.getBounds().pad(1)); // Padding expands the bounds by its own dimensions but scaled with the given factor.
+ },
+
+ /**
+ * Expands the latitude to Infinity (or -Infinity) if the input bounds reach the map projection maximum defined latitude
+ * (in the case of Web/Spherical Mercator, it is 85.0511287798 / see https://en.wikipedia.org/wiki/Web_Mercator#Formulas).
+ * Otherwise, the removeOutsideVisibleBounds option will remove markers beyond that limit, whereas the same markers without
+ * this option (or outside MCG) will have their position floored (ceiled) by the projection and rendered at that limit,
+ * making the user think that MCG "eats" them and never displays them again.
+ * @param bounds L.LatLngBounds
+ * @returns {L.LatLngBounds}
+ * @private
+ */
+ _checkBoundsMaxLat: function (bounds) {
+ var maxLat = this._maxLat;
+
+ if (maxLat !== undefined) {
+ if (bounds.getNorth() >= maxLat) {
+ bounds._northEast.lat = Infinity;
+ }
+ if (bounds.getSouth() <= -maxLat) {
+ bounds._southWest.lat = -Infinity;
+ }
+ }
+
+ return bounds;
+ },
+
+ //Shared animation code
+ _animationAddLayerNonAnimated: function (layer, newCluster) {
+ if (newCluster === layer) {
+ this._featureGroup.addLayer(layer);
+ } else if (newCluster._childCount === 2) {
+ newCluster._addToMap();
+
+ var markers = newCluster.getAllChildMarkers();
+ this._featureGroup.removeLayer(markers[0]);
+ this._featureGroup.removeLayer(markers[1]);
+ } else {
+ newCluster._updateIcon();
+ }
+ },
+
+ /**
+ * Extracts individual (i.e. non-group) layers from a Layer Group.
+ * @param group to extract layers from.
+ * @param output {Array} in which to store the extracted layers.
+ * @returns {*|Array}
+ * @private
+ */
+ _extractNonGroupLayers: function (group, output) {
+ var layers = group.getLayers(),
+ i = 0,
+ layer;
+
+ output = output || [];
+
+ for (; i < layers.length; i++) {
+ layer = layers[i];
+
+ if (layer instanceof L.LayerGroup) {
+ this._extractNonGroupLayers(layer, output);
+ continue;
+ }
+
+ output.push(layer);
+ }
+
+ return output;
+ },
+
+ /**
+ * Implements the singleMarkerMode option.
+ * @param layer Marker to re-style using the Clusters iconCreateFunction.
+ * @returns {L.Icon} The newly created icon.
+ * @private
+ */
+ _overrideMarkerIcon: function (layer) {
+ var icon = layer.options.icon = this.options.iconCreateFunction({
+ getChildCount: function () {
+ return 1;
+ },
+ getAllChildMarkers: function () {
+ return [layer];
+ }
+ });
+
+ return icon;
+ }
+ });
+
+ // Constant bounds used in case option "removeOutsideVisibleBounds" is set to false.
+ L.MarkerClusterGroup.include({
+ _mapBoundsInfinite: new L.LatLngBounds(new L.LatLng(-Infinity, -Infinity), new L.LatLng(Infinity, Infinity))
+ });
+
+ L.MarkerClusterGroup.include({
+ _noAnimation: {
+ //Non Animated versions of everything
+ _animationStart: function () {
+ //Do nothing...
+ },
+ _animationZoomIn: function (previousZoomLevel, newZoomLevel) {
+ this._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds, previousZoomLevel);
+ this._topClusterLevel._recursivelyAddChildrenToMap(null, newZoomLevel, this._getExpandedVisibleBounds());
+
+ //We didn't actually animate, but we use this event to mean "clustering animations have finished"
+ this.fire('animationend');
+ },
+ _animationZoomOut: function (previousZoomLevel, newZoomLevel) {
+ this._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds, previousZoomLevel);
+ this._topClusterLevel._recursivelyAddChildrenToMap(null, newZoomLevel, this._getExpandedVisibleBounds());
+
+ //We didn't actually animate, but we use this event to mean "clustering animations have finished"
+ this.fire('animationend');
+ },
+ _animationAddLayer: function (layer, newCluster) {
+ this._animationAddLayerNonAnimated(layer, newCluster);
+ }
+ },
+
+ _withAnimation: {
+ //Animated versions here
+ _animationStart: function () {
+ this._map._mapPane.className += ' leaflet-cluster-anim';
+ this._inZoomAnimation++;
+ },
+
+ _animationZoomIn: function (previousZoomLevel, newZoomLevel) {
+ var bounds = this._getExpandedVisibleBounds(),
+ fg = this._featureGroup,
+ i;
+
+ this._ignoreMove = true;
+
+ //Add all children of current clusters to map and remove those clusters from map
+ this._topClusterLevel._recursively(bounds, previousZoomLevel, 0, function (c) {
+ var startPos = c._latlng,
+ markers = c._markers,
+ m;
+
+ if (!bounds.contains(startPos)) {
+ startPos = null;
+ }
+
+ if (c._isSingleParent() && previousZoomLevel + 1 === newZoomLevel) { //Immediately add the new child and remove us
+ fg.removeLayer(c);
+ c._recursivelyAddChildrenToMap(null, newZoomLevel, bounds);
+ } else {
+ //Fade out old cluster
+ c.clusterHide();
+ c._recursivelyAddChildrenToMap(startPos, newZoomLevel, bounds);
+ }
+
+ //Remove all markers that aren't visible any more
+ //TODO: Do we actually need to do this on the higher levels too?
+ for (i = markers.length - 1; i >= 0; i--) {
+ m = markers[i];
+ if (!bounds.contains(m._latlng)) {
+ fg.removeLayer(m);
+ }
+ }
+
+ });
+
+ this._forceLayout();
+
+ //Update opacities
+ this._topClusterLevel._recursivelyBecomeVisible(bounds, newZoomLevel);
+ //TODO Maybe? Update markers in _recursivelyBecomeVisible
+ fg.eachLayer(function (n) {
+ if (!(n instanceof L.MarkerCluster) && n._icon) {
+ n.clusterShow();
+ }
+ });
+
+ //update the positions of the just added clusters/markers
+ this._topClusterLevel._recursively(bounds, previousZoomLevel, newZoomLevel, function (c) {
+ c._recursivelyRestoreChildPositions(newZoomLevel);
+ });
+
+ this._ignoreMove = false;
+
+ //Remove the old clusters and close the zoom animation
+ this._enqueue(function () {
+ //update the positions of the just added clusters/markers
+ this._topClusterLevel._recursively(bounds, previousZoomLevel, 0, function (c) {
+ fg.removeLayer(c);
+ c.clusterShow();
+ });
+
+ this._animationEnd();
+ });
+ },
+
+ _animationZoomOut: function (previousZoomLevel, newZoomLevel) {
+ this._animationZoomOutSingle(this._topClusterLevel, previousZoomLevel - 1, newZoomLevel);
+
+ //Need to add markers for those that weren't on the map before but are now
+ this._topClusterLevel._recursivelyAddChildrenToMap(null, newZoomLevel, this._getExpandedVisibleBounds());
+ //Remove markers that were on the map before but won't be now
+ this._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds, previousZoomLevel, this._getExpandedVisibleBounds());
+ },
+
+ _animationAddLayer: function (layer, newCluster) {
+ var me = this,
+ fg = this._featureGroup;
+
+ fg.addLayer(layer);
+ if (newCluster !== layer) {
+ if (newCluster._childCount > 2) { //Was already a cluster
+
+ newCluster._updateIcon();
+ this._forceLayout();
+ this._animationStart();
+
+ layer._setPos(this._map.latLngToLayerPoint(newCluster.getLatLng()));
+ layer.clusterHide();
+
+ this._enqueue(function () {
+ fg.removeLayer(layer);
+ layer.clusterShow();
+
+ me._animationEnd();
+ });
+
+ } else { //Just became a cluster
+ this._forceLayout();
+
+ me._animationStart();
+ me._animationZoomOutSingle(newCluster, this._map.getMaxZoom(), this._map.getZoom());
+ }
+ }
+ }
+ },
+
+ // Private methods for animated versions.
+ _animationZoomOutSingle: function (cluster, previousZoomLevel, newZoomLevel) {
+ var bounds = this._getExpandedVisibleBounds();
+
+ //Animate all of the markers in the clusters to move to their cluster center point
+ cluster._recursivelyAnimateChildrenInAndAddSelfToMap(bounds, previousZoomLevel + 1, newZoomLevel);
+
+ var me = this;
+
+ //Update the opacity (If we immediately set it they won't animate)
+ this._forceLayout();
+ cluster._recursivelyBecomeVisible(bounds, newZoomLevel);
+
+ //TODO: Maybe use the transition timing stuff to make this more reliable
+ //When the animations are done, tidy up
+ this._enqueue(function () {
+
+ //This cluster stopped being a cluster before the timeout fired
+ if (cluster._childCount === 1) {
+ var m = cluster._markers[0];
+ //If we were in a cluster animation at the time then the opacity and position of our child could be wrong now, so fix it
+ this._ignoreMove = true;
+ m.setLatLng(m.getLatLng());
+ this._ignoreMove = false;
+ if (m.clusterShow) {
+ m.clusterShow();
+ }
+ } else {
+ cluster._recursively(bounds, newZoomLevel, 0, function (c) {
+ c._recursivelyRemoveChildrenFromMap(bounds, previousZoomLevel + 1);
+ });
+ }
+ me._animationEnd();
+ });
+ },
+
+ _animationEnd: function () {
+ if (this._map) {
+ this._map._mapPane.className = this._map._mapPane.className.replace(' leaflet-cluster-anim', '');
+ }
+ this._inZoomAnimation--;
+ this.fire('animationend');
+ },
+
+ //Force a browser layout of stuff in the map
+ // Should apply the current opacity and location to all elements so we can update them again for an animation
+ _forceLayout: function () {
+ //In my testing this works, infact offsetWidth of any element seems to work.
+ //Could loop all this._layers and do this for each _icon if it stops working
+
+ L.Util.falseFn(document.body.offsetWidth);
+ }
+ });
+
+ L.markerClusterGroup = function (options) {
+ return new L.MarkerClusterGroup(options);
+ };
+
+
+ L.MarkerCluster = L.Marker.extend({
+ initialize: function (group, zoom, a, b) {
+
+ L.Marker.prototype.initialize.call(this, a ? (a._cLatLng || a.getLatLng()) : new L.LatLng(0, 0), { icon: this });
+
+
+ this._group = group;
+ this._zoom = zoom;
+
+ this._markers = [];
+ this._childClusters = [];
+ this._childCount = 0;
+ this._iconNeedsUpdate = true;
+ this._boundsNeedUpdate = true;
+
+ this._bounds = new L.LatLngBounds();
+
+ if (a) {
+ this._addChild(a);
+ }
+ if (b) {
+ this._addChild(b);
+ }
+ },
+
+ //Recursively retrieve all child markers of this cluster
+ getAllChildMarkers: function (storageArray) {
+ storageArray = storageArray || [];
+
+ for (var i = this._childClusters.length - 1; i >= 0; i--) {
+ this._childClusters[i].getAllChildMarkers(storageArray);
+ }
+
+ for (var j = this._markers.length - 1; j >= 0; j--) {
+ storageArray.push(this._markers[j]);
+ }
+
+ return storageArray;
+ },
+
+ //Returns the count of how many child markers we have
+ getChildCount: function () {
+ return this._childCount;
+ },
+
+ //Zoom to the minimum of showing all of the child markers, or the extents of this cluster
+ zoomToBounds: function () {
+ var childClusters = this._childClusters.slice(),
+ map = this._group._map,
+ boundsZoom = map.getBoundsZoom(this._bounds),
+ zoom = this._zoom + 1,
+ mapZoom = map.getZoom(),
+ i;
+
+ //calculate how far we need to zoom down to see all of the markers
+ while (childClusters.length > 0 && boundsZoom > zoom) {
+ zoom++;
+ var newClusters = [];
+ for (i = 0; i < childClusters.length; i++) {
+ newClusters = newClusters.concat(childClusters[i]._childClusters);
+ }
+ childClusters = newClusters;
+ }
+
+ if (boundsZoom > zoom) {
+ this._group._map.setView(this._latlng, zoom);
+ } else if (boundsZoom <= mapZoom) { //If fitBounds wouldn't zoom us down, zoom us down instead
+ this._group._map.setView(this._latlng, mapZoom + 1);
+ } else {
+ this._group._map.fitBounds(this._bounds);
+ }
+ },
+
+ getBounds: function () {
+ var bounds = new L.LatLngBounds();
+ bounds.extend(this._bounds);
+ return bounds;
+ },
+
+ _updateIcon: function () {
+ this._iconNeedsUpdate = true;
+ if (this._icon) {
+ this.setIcon(this);
+ }
+ },
+
+ //Cludge for Icon, we pretend to be an icon for performance
+ createIcon: function () {
+ if (this._iconNeedsUpdate) {
+ this._iconObj = this._group.options.iconCreateFunction(this);
+ this._iconNeedsUpdate = false;
+ }
+ return this._iconObj.createIcon();
+ },
+ createShadow: function () {
+ return this._iconObj.createShadow();
+ },
+
+
+ _addChild: function (new1, isNotificationFromChild) {
+
+ this._iconNeedsUpdate = true;
+
+ this._boundsNeedUpdate = true;
+ this._setClusterCenter(new1);
+
+ if (new1 instanceof L.MarkerCluster) {
+ if (!isNotificationFromChild) {
+ this._childClusters.push(new1);
+ new1.__parent = this;
+ }
+ this._childCount += new1._childCount;
+ } else {
+ if (!isNotificationFromChild) {
+ this._markers.push(new1);
+ }
+ this._childCount++;
+ }
+
+ if (this.__parent) {
+ this.__parent._addChild(new1, true);
+ }
+ },
+
+ /**
+ * Makes sure the cluster center is set. If not, uses the child center if it is a cluster, or the marker position.
+ * @param child L.MarkerCluster|L.Marker that will be used as cluster center if not defined yet.
+ * @private
+ */
+ _setClusterCenter: function (child) {
+ if (!this._cLatLng) {
+ // when clustering, take position of the first point as the cluster center
+ this._cLatLng = child._cLatLng || child._latlng;
+ }
+ },
+
+ /**
+ * Assigns impossible bounding values so that the next extend entirely determines the new bounds.
+ * This method avoids having to trash the previous L.LatLngBounds object and to create a new one, which is much slower for this class.
+ * As long as the bounds are not extended, most other methods would probably fail, as they would with bounds initialized but not extended.
+ * @private
+ */
+ _resetBounds: function () {
+ var bounds = this._bounds;
+
+ if (bounds._southWest) {
+ bounds._southWest.lat = Infinity;
+ bounds._southWest.lng = Infinity;
+ }
+ if (bounds._northEast) {
+ bounds._northEast.lat = -Infinity;
+ bounds._northEast.lng = -Infinity;
+ }
+ },
+
+ _recalculateBounds: function () {
+ var markers = this._markers,
+ childClusters = this._childClusters,
+ latSum = 0,
+ lngSum = 0,
+ totalCount = this._childCount,
+ i, child, childLatLng, childCount;
+
+ // Case where all markers are removed from the map and we are left with just an empty _topClusterLevel.
+ if (totalCount === 0) {
+ return;
+ }
+
+ // Reset rather than creating a new object, for performance.
+ this._resetBounds();
+
+ // Child markers.
+ for (i = 0; i < markers.length; i++) {
+ childLatLng = markers[i]._latlng;
+
+ this._bounds.extend(childLatLng);
+
+ latSum += childLatLng.lat;
+ lngSum += childLatLng.lng;
+ }
+
+ // Child clusters.
+ for (i = 0; i < childClusters.length; i++) {
+ child = childClusters[i];
+
+ // Re-compute child bounds and weighted position first if necessary.
+ if (child._boundsNeedUpdate) {
+ child._recalculateBounds();
+ }
+
+ this._bounds.extend(child._bounds);
+
+ childLatLng = child._wLatLng;
+ childCount = child._childCount;
+
+ latSum += childLatLng.lat * childCount;
+ lngSum += childLatLng.lng * childCount;
+ }
+
+ this._latlng = this._wLatLng = new L.LatLng(latSum / totalCount, lngSum / totalCount);
+
+ // Reset dirty flag.
+ this._boundsNeedUpdate = false;
+ },
+
+ //Set our markers position as given and add it to the map
+ _addToMap: function (startPos) {
+ if (startPos) {
+ this._backupLatlng = this._latlng;
+ this.setLatLng(startPos);
+ }
+ this._group._featureGroup.addLayer(this);
+ },
+
+ _recursivelyAnimateChildrenIn: function (bounds, center, maxZoom) {
+ this._recursively(bounds, 0, maxZoom - 1,
+ function (c) {
+ var markers = c._markers,
+ i, m;
+ for (i = markers.length - 1; i >= 0; i--) {
+ m = markers[i];
+
+ //Only do it if the icon is still on the map
+ if (m._icon) {
+ m._setPos(center);
+ m.clusterHide();
+ }
+ }
+ },
+ function (c) {
+ var childClusters = c._childClusters,
+ j, cm;
+ for (j = childClusters.length - 1; j >= 0; j--) {
+ cm = childClusters[j];
+ if (cm._icon) {
+ cm._setPos(center);
+ cm.clusterHide();
+ }
+ }
+ }
+ );
+ },
+
+ _recursivelyAnimateChildrenInAndAddSelfToMap: function (bounds, previousZoomLevel, newZoomLevel) {
+ this._recursively(bounds, newZoomLevel, 0,
+ function (c) {
+ c._recursivelyAnimateChildrenIn(bounds, c._group._map.latLngToLayerPoint(c.getLatLng()).round(), previousZoomLevel);
+
+ //TODO: depthToAnimateIn affects _isSingleParent, if there is a multizoom we may/may not be.
+ //As a hack we only do a animation free zoom on a single level zoom, if someone does multiple levels then we always animate
+ if (c._isSingleParent() && previousZoomLevel - 1 === newZoomLevel) {
+ c.clusterShow();
+ c._recursivelyRemoveChildrenFromMap(bounds, previousZoomLevel); //Immediately remove our children as we are replacing them. TODO previousBounds not bounds
+ } else {
+ c.clusterHide();
+ }
+
+ c._addToMap();
+ }
+ );
+ },
+
+ _recursivelyBecomeVisible: function (bounds, zoomLevel) {
+ this._recursively(bounds, 0, zoomLevel, null, function (c) {
+ c.clusterShow();
+ });
+ },
+
+ _recursivelyAddChildrenToMap: function (startPos, zoomLevel, bounds) {
+ this._recursively(bounds, -1, zoomLevel,
+ function (c) {
+ if (zoomLevel === c._zoom) {
+ return;
+ }
+
+ //Add our child markers at startPos (so they can be animated out)
+ for (var i = c._markers.length - 1; i >= 0; i--) {
+ var nm = c._markers[i];
+
+ if (!bounds.contains(nm._latlng)) {
+ continue;
+ }
+
+ if (startPos) {
+ nm._backupLatlng = nm.getLatLng();
+
+ nm.setLatLng(startPos);
+ if (nm.clusterHide) {
+ nm.clusterHide();
+ }
+ }
+
+ c._group._featureGroup.addLayer(nm);
+ }
+ },
+ function (c) {
+ c._addToMap(startPos);
+ }
+ );
+ },
+
+ _recursivelyRestoreChildPositions: function (zoomLevel) {
+ //Fix positions of child markers
+ for (var i = this._markers.length - 1; i >= 0; i--) {
+ var nm = this._markers[i];
+ if (nm._backupLatlng) {
+ nm.setLatLng(nm._backupLatlng);
+ delete nm._backupLatlng;
+ }
+ }
+
+ if (zoomLevel - 1 === this._zoom) {
+ //Reposition child clusters
+ for (var j = this._childClusters.length - 1; j >= 0; j--) {
+ this._childClusters[j]._restorePosition();
+ }
+ } else {
+ for (var k = this._childClusters.length - 1; k >= 0; k--) {
+ this._childClusters[k]._recursivelyRestoreChildPositions(zoomLevel);
+ }
+ }
+ },
+
+ _restorePosition: function () {
+ if (this._backupLatlng) {
+ this.setLatLng(this._backupLatlng);
+ delete this._backupLatlng;
+ }
+ },
+
+ //exceptBounds: If set, don't remove any markers/clusters in it
+ _recursivelyRemoveChildrenFromMap: function (previousBounds, zoomLevel, exceptBounds) {
+ var m, i;
+ this._recursively(previousBounds, -1, zoomLevel - 1,
+ function (c) {
+ //Remove markers at every level
+ for (i = c._markers.length - 1; i >= 0; i--) {
+ m = c._markers[i];
+ if (!exceptBounds || !exceptBounds.contains(m._latlng)) {
+ c._group._featureGroup.removeLayer(m);
+ if (m.clusterShow) {
+ m.clusterShow();
+ }
+ }
+ }
+ },
+ function (c) {
+ //Remove child clusters at just the bottom level
+ for (i = c._childClusters.length - 1; i >= 0; i--) {
+ m = c._childClusters[i];
+ if (!exceptBounds || !exceptBounds.contains(m._latlng)) {
+ c._group._featureGroup.removeLayer(m);
+ if (m.clusterShow) {
+ m.clusterShow();
+ }
+ }
+ }
+ }
+ );
+ },
+
+ //Run the given functions recursively to this and child clusters
+ // boundsToApplyTo: a L.LatLngBounds representing the bounds of what clusters to recurse in to
+ // zoomLevelToStart: zoom level to start running functions (inclusive)
+ // zoomLevelToStop: zoom level to stop running functions (inclusive)
+ // runAtEveryLevel: function that takes an L.MarkerCluster as an argument that should be applied on every level
+ // runAtBottomLevel: function that takes an L.MarkerCluster as an argument that should be applied at only the bottom level
+ _recursively: function (boundsToApplyTo, zoomLevelToStart, zoomLevelToStop, runAtEveryLevel, runAtBottomLevel) {
+ var childClusters = this._childClusters,
+ zoom = this._zoom,
+ i, c;
+
+ if (zoomLevelToStart > zoom) { //Still going down to required depth, just recurse to child clusters
+ for (i = childClusters.length - 1; i >= 0; i--) {
+ c = childClusters[i];
+ if (boundsToApplyTo.intersects(c._bounds)) {
+ c._recursively(boundsToApplyTo, zoomLevelToStart, zoomLevelToStop, runAtEveryLevel, runAtBottomLevel);
+ }
+ }
+ } else { //In required depth
+
+ if (runAtEveryLevel) {
+ runAtEveryLevel(this);
+ }
+ if (runAtBottomLevel && this._zoom === zoomLevelToStop) {
+ runAtBottomLevel(this);
+ }
+
+ //TODO: This loop is almost the same as above
+ if (zoomLevelToStop > zoom) {
+ for (i = childClusters.length - 1; i >= 0; i--) {
+ c = childClusters[i];
+ if (boundsToApplyTo.intersects(c._bounds)) {
+ c._recursively(boundsToApplyTo, zoomLevelToStart, zoomLevelToStop, runAtEveryLevel, runAtBottomLevel);
+ }
+ }
+ }
+ }
+ },
+
+ //Returns true if we are the parent of only one cluster and that cluster is the same as us
+ _isSingleParent: function () {
+ //Don't need to check this._markers as the rest won't work if there are any
+ return this._childClusters.length > 0 && this._childClusters[0]._childCount === this._childCount;
+ }
+ });
+
+
+
+ /*
+ * Extends L.Marker to include two extra methods: clusterHide and clusterShow.
+ *
+ * They work as setOpacity(0) and setOpacity(1) respectively, but
+ * they will remember the marker's opacity when hiding and showing it again.
+ *
+ */
+
+
+ L.Marker.include({
+
+ clusterHide: function () {
+ this.options.opacityWhenUnclustered = this.options.opacity || 1;
+ return this.setOpacity(0);
+ },
+
+ clusterShow: function () {
+ var ret = this.setOpacity(this.options.opacity || this.options.opacityWhenUnclustered);
+ delete this.options.opacityWhenUnclustered;
+ return ret;
+ }
+
+ });
+
+
+
+
+
+ L.DistanceGrid = function (cellSize) {
+ this._cellSize = cellSize;
+ this._sqCellSize = cellSize * cellSize;
+ this._grid = {};
+ this._objectPoint = { };
+ };
+
+ L.DistanceGrid.prototype = {
+
+ addObject: function (obj, point) {
+ var x = this._getCoord(point.x),
+ y = this._getCoord(point.y),
+ grid = this._grid,
+ row = grid[y] = grid[y] || {},
+ cell = row[x] = row[x] || [],
+ stamp = L.Util.stamp(obj);
+
+ this._objectPoint[stamp] = point;
+
+ cell.push(obj);
+ },
+
+ updateObject: function (obj, point) {
+ this.removeObject(obj);
+ this.addObject(obj, point);
+ },
+
+ //Returns true if the object was found
+ removeObject: function (obj, point) {
+ var x = this._getCoord(point.x),
+ y = this._getCoord(point.y),
+ grid = this._grid,
+ row = grid[y] = grid[y] || {},
+ cell = row[x] = row[x] || [],
+ i, len;
+
+ delete this._objectPoint[L.Util.stamp(obj)];
+
+ for (i = 0, len = cell.length; i < len; i++) {
+ if (cell[i] === obj) {
+
+ cell.splice(i, 1);
+
+ if (len === 1) {
+ delete row[x];
+ }
+
+ return true;
+ }
+ }
+
+ },
+
+ eachObject: function (fn, context) {
+ var i, j, k, len, row, cell, removed,
+ grid = this._grid;
+
+ for (i in grid) {
+ row = grid[i];
+
+ for (j in row) {
+ cell = row[j];
+
+ for (k = 0, len = cell.length; k < len; k++) {
+ removed = fn.call(context, cell[k]);
+ if (removed) {
+ k--;
+ len--;
+ }
+ }
+ }
+ }
+ },
+
+ getNearObject: function (point) {
+ var x = this._getCoord(point.x),
+ y = this._getCoord(point.y),
+ i, j, k, row, cell, len, obj, dist,
+ objectPoint = this._objectPoint,
+ closestDistSq = this._sqCellSize,
+ closest = null;
+
+ for (i = y - 1; i <= y + 1; i++) {
+ row = this._grid[i];
+ if (row) {
+
+ for (j = x - 1; j <= x + 1; j++) {
+ cell = row[j];
+ if (cell) {
+
+ for (k = 0, len = cell.length; k < len; k++) {
+ obj = cell[k];
+ dist = this._sqDist(objectPoint[L.Util.stamp(obj)], point);
+ if (dist < closestDistSq) {
+ closestDistSq = dist;
+ closest = obj;
+ }
+ }
+ }
+ }
+ }
+ }
+ return closest;
+ },
+
+ _getCoord: function (x) {
+ return Math.floor(x / this._cellSize);
+ },
+
+ _sqDist: function (p, p2) {
+ var dx = p2.x - p.x,
+ dy = p2.y - p.y;
+ return dx * dx + dy * dy;
+ }
+ };
+
+
+ /* Copyright (c) 2012 the authors listed at the following URL, and/or
+ the authors of referenced articles or incorporated external code:
+ http://en.literateprograms.org/Quickhull_(Javascript)?action=history&offset=20120410175256
+
+ 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.
+
+ Retrieved from: http://en.literateprograms.org/Quickhull_(Javascript)?oldid=18434
+ */
+
+ (function () {
+ L.QuickHull = {
+
+ /*
+ * @param {Object} cpt a point to be measured from the baseline
+ * @param {Array} bl the baseline, as represented by a two-element
+ * array of latlng objects.
+ * @returns {Number} an approximate distance measure
+ */
+ getDistant: function (cpt, bl) {
+ var vY = bl[1].lat - bl[0].lat,
+ vX = bl[0].lng - bl[1].lng;
+ return (vX * (cpt.lat - bl[0].lat) + vY * (cpt.lng - bl[0].lng));
+ },
+
+ /*
+ * @param {Array} baseLine a two-element array of latlng objects
+ * representing the baseline to project from
+ * @param {Array} latLngs an array of latlng objects
+ * @returns {Object} the maximum point and all new points to stay
+ * in consideration for the hull.
+ */
+ findMostDistantPointFromBaseLine: function (baseLine, latLngs) {
+ var maxD = 0,
+ maxPt = null,
+ newPoints = [],
+ i, pt, d;
+
+ for (i = latLngs.length - 1; i >= 0; i--) {
+ pt = latLngs[i];
+ d = this.getDistant(pt, baseLine);
+
+ if (d > 0) {
+ newPoints.push(pt);
+ } else {
+ continue;
+ }
+
+ if (d > maxD) {
+ maxD = d;
+ maxPt = pt;
+ }
+ }
+
+ return { maxPoint: maxPt, newPoints: newPoints };
+ },
+
+
+ /*
+ * Given a baseline, compute the convex hull of latLngs as an array
+ * of latLngs.
+ *
+ * @param {Array} latLngs
+ * @returns {Array}
+ */
+ buildConvexHull: function (baseLine, latLngs) {
+ var convexHullBaseLines = [],
+ t = this.findMostDistantPointFromBaseLine(baseLine, latLngs);
+
+ if (t.maxPoint) { // if there is still a point "outside" the base line
+ convexHullBaseLines =
+ convexHullBaseLines.concat(
+ this.buildConvexHull([baseLine[0], t.maxPoint], t.newPoints)
+ );
+ convexHullBaseLines =
+ convexHullBaseLines.concat(
+ this.buildConvexHull([t.maxPoint, baseLine[1]], t.newPoints)
+ );
+ return convexHullBaseLines;
+ } else { // if there is no more point "outside" the base line, the current base line is part of the convex hull
+ return [baseLine[0]];
+ }
+ },
+
+ /*
+ * Given an array of latlngs, compute a convex hull as an array
+ * of latlngs
+ *
+ * @param {Array} latLngs
+ * @returns {Array}
+ */
+ getConvexHull: function (latLngs) {
+ // find first baseline
+ var maxLat = false, minLat = false,
+ maxLng = false, minLng = false,
+ maxLatPt = null, minLatPt = null,
+ maxLngPt = null, minLngPt = null,
+ maxPt = null, minPt = null,
+ i;
+
+ for (i = latLngs.length - 1; i >= 0; i--) {
+ var pt = latLngs[i];
+ if (maxLat === false || pt.lat > maxLat) {
+ maxLatPt = pt;
+ maxLat = pt.lat;
+ }
+ if (minLat === false || pt.lat < minLat) {
+ minLatPt = pt;
+ minLat = pt.lat;
+ }
+ if (maxLng === false || pt.lng > maxLng) {
+ maxLngPt = pt;
+ maxLng = pt.lng;
+ }
+ if (minLng === false || pt.lng < minLng) {
+ minLngPt = pt;
+ minLng = pt.lng;
+ }
+ }
+
+ if (minLat !== maxLat) {
+ minPt = minLatPt;
+ maxPt = maxLatPt;
+ } else {
+ minPt = minLngPt;
+ maxPt = maxLngPt;
+ }
+
+ var ch = [].concat(this.buildConvexHull([minPt, maxPt], latLngs),
+ this.buildConvexHull([maxPt, minPt], latLngs));
+ return ch;
+ }
+ };
+ }());
+
+ L.MarkerCluster.include({
+ getConvexHull: function () {
+ var childMarkers = this.getAllChildMarkers(),
+ points = [],
+ p, i;
+
+ for (i = childMarkers.length - 1; i >= 0; i--) {
+ p = childMarkers[i].getLatLng();
+ points.push(p);
+ }
+
+ return L.QuickHull.getConvexHull(points);
+ }
+ });
+
+
+ //This code is 100% based on https://github.com/jawj/OverlappingMarkerSpiderfier-Leaflet
+ //Huge thanks to jawj for implementing it first to make my job easy :-)
+
+ L.MarkerCluster.include({
+
+ _2PI: Math.PI * 2,
+ _circleFootSeparation: 25, //related to circumference of circle
+ _circleStartAngle: Math.PI / 6,
+
+ _spiralFootSeparation: 28, //related to size of spiral (experiment!)
+ _spiralLengthStart: 11,
+ _spiralLengthFactor: 5,
+
+ _circleSpiralSwitchover: 9, //show spiral instead of circle from this marker count upwards.
+ // 0 -> always spiral; Infinity -> always circle
+
+ spiderfy: function () {
+ if (this._group._spiderfied === this || this._group._inZoomAnimation) {
+ return;
+ }
+
+ var childMarkers = this.getAllChildMarkers(),
+ group = this._group,
+ map = group._map,
+ center = map.latLngToLayerPoint(this._latlng),
+ positions;
+
+ this._group._unspiderfy();
+ this._group._spiderfied = this;
+
+ //TODO Maybe: childMarkers order by distance to center
+
+ if (childMarkers.length >= this._circleSpiralSwitchover) {
+ positions = this._generatePointsSpiral(childMarkers.length, center);
+ } else {
+ center.y += 10; // Otherwise circles look wrong => hack for standard blue icon, renders differently for other icons.
+ positions = this._generatePointsCircle(childMarkers.length, center);
+ }
+
+ this._animationSpiderfy(childMarkers, positions);
+ },
+
+ unspiderfy: function (zoomDetails) {
+ /// Argument from zoomanim if being called in a zoom animation or null otherwise
+ if (this._group._inZoomAnimation) {
+ return;
+ }
+ this._animationUnspiderfy(zoomDetails);
+
+ this._group._spiderfied = null;
+ },
+
+ _generatePointsCircle: function (count, centerPt) {
+ var circumference = this._group.options.spiderfyDistanceMultiplier * this._circleFootSeparation * (2 + count),
+ legLength = circumference / this._2PI, //radius from circumference
+ angleStep = this._2PI / count,
+ res = [],
+ i, angle;
+
+ res.length = count;
+
+ for (i = count - 1; i >= 0; i--) {
+ angle = this._circleStartAngle + i * angleStep;
+ res[i] = new L.Point(centerPt.x + legLength * Math.cos(angle), centerPt.y + legLength * Math.sin(angle))._round();
+ }
+
+ return res;
+ },
+
+ _generatePointsSpiral: function (count, centerPt) {
+ var spiderfyDistanceMultiplier = this._group.options.spiderfyDistanceMultiplier,
+ legLength = spiderfyDistanceMultiplier * this._spiralLengthStart,
+ separation = spiderfyDistanceMultiplier * this._spiralFootSeparation,
+ lengthFactor = spiderfyDistanceMultiplier * this._spiralLengthFactor * this._2PI,
+ angle = 0,
+ res = [],
+ i;
+
+ res.length = count;
+
+ // Higher index, closer position to cluster center.
+ for (i = count - 1; i >= 0; i--) {
+ angle += separation / legLength + i * 0.0005;
+ res[i] = new L.Point(centerPt.x + legLength * Math.cos(angle), centerPt.y + legLength * Math.sin(angle))._round();
+ legLength += lengthFactor / angle;
+ }
+ return res;
+ },
+
+ _noanimationUnspiderfy: function () {
+ var group = this._group,
+ map = group._map,
+ fg = group._featureGroup,
+ childMarkers = this.getAllChildMarkers(),
+ m, i;
+
+ group._ignoreMove = true;
+
+ this.setOpacity(1);
+ for (i = childMarkers.length - 1; i >= 0; i--) {
+ m = childMarkers[i];
+
+ fg.removeLayer(m);
+
+ if (m._preSpiderfyLatlng) {
+ m.setLatLng(m._preSpiderfyLatlng);
+ delete m._preSpiderfyLatlng;
+ }
+ if (m.setZIndexOffset) {
+ m.setZIndexOffset(0);
+ }
+
+ if (m._spiderLeg) {
+ map.removeLayer(m._spiderLeg);
+ delete m._spiderLeg;
+ }
+ }
+
+ group.fire('unspiderfied', {
+ cluster: this,
+ markers: childMarkers
+ });
+ group._ignoreMove = false;
+ group._spiderfied = null;
+ }
+ });
+
+ //Non Animated versions of everything
+ L.MarkerClusterNonAnimated = L.MarkerCluster.extend({
+ _animationSpiderfy: function (childMarkers, positions) {
+ var group = this._group,
+ map = group._map,
+ fg = group._featureGroup,
+ legOptions = this._group.options.spiderLegPolylineOptions,
+ i, m, leg, newPos;
+
+ group._ignoreMove = true;
+
+ // Traverse in ascending order to make sure that inner circleMarkers are on top of further legs. Normal markers are re-ordered by newPosition.
+ // The reverse order trick no longer improves performance on modern browsers.
+ for (i = 0; i < childMarkers.length; i++) {
+ newPos = map.layerPointToLatLng(positions[i]);
+ m = childMarkers[i];
+
+ // Add the leg before the marker, so that in case the latter is a circleMarker, the leg is behind it.
+ leg = new L.Polyline([this._latlng, newPos], legOptions);
+ map.addLayer(leg);
+ m._spiderLeg = leg;
+
+ // Now add the marker.
+ m._preSpiderfyLatlng = m._latlng;
+ m.setLatLng(newPos);
+ if (m.setZIndexOffset) {
+ m.setZIndexOffset(1000000); //Make these appear on top of EVERYTHING
+ }
+
+ fg.addLayer(m);
+ }
+ this.setOpacity(0.3);
+
+ group._ignoreMove = false;
+ group.fire('spiderfied', {
+ cluster: this,
+ markers: childMarkers
+ });
+ },
+
+ _animationUnspiderfy: function () {
+ this._noanimationUnspiderfy();
+ }
+ });
+
+ //Animated versions here
+ L.MarkerCluster.include({
+
+ _animationSpiderfy: function (childMarkers, positions) {
+ var me = this,
+ group = this._group,
+ map = group._map,
+ fg = group._featureGroup,
+ thisLayerLatLng = this._latlng,
+ thisLayerPos = map.latLngToLayerPoint(thisLayerLatLng),
+ svg = L.Path.SVG,
+ legOptions = L.extend({}, this._group.options.spiderLegPolylineOptions), // Copy the options so that we can modify them for animation.
+ finalLegOpacity = legOptions.opacity,
+ i, m, leg, legPath, legLength, newPos;
+
+ if (finalLegOpacity === undefined) {
+ finalLegOpacity = L.MarkerClusterGroup.prototype.options.spiderLegPolylineOptions.opacity;
+ }
+
+ if (svg) {
+ // If the initial opacity of the spider leg is not 0 then it appears before the animation starts.
+ legOptions.opacity = 0;
+
+ // Add the class for CSS transitions.
+ legOptions.className = (legOptions.className || '') + ' leaflet-cluster-spider-leg';
+ } else {
+ // Make sure we have a defined opacity.
+ legOptions.opacity = finalLegOpacity;
+ }
+
+ group._ignoreMove = true;
+
+ // Add markers and spider legs to map, hidden at our center point.
+ // Traverse in ascending order to make sure that inner circleMarkers are on top of further legs. Normal markers are re-ordered by newPosition.
+ // The reverse order trick no longer improves performance on modern browsers.
+ for (i = 0; i < childMarkers.length; i++) {
+ m = childMarkers[i];
+
+ newPos = map.layerPointToLatLng(positions[i]);
+
+ // Add the leg before the marker, so that in case the latter is a circleMarker, the leg is behind it.
+ leg = new L.Polyline([thisLayerLatLng, newPos], legOptions);
+ map.addLayer(leg);
+ m._spiderLeg = leg;
+
+ // Explanations: https://jakearchibald.com/2013/animated-line-drawing-svg/
+ // In our case the transition property is declared in the CSS file.
+ if (svg) {
+ legPath = leg._path;
+ legLength = legPath.getTotalLength() + 0.1; // Need a small extra length to avoid remaining dot in Firefox.
+ legPath.style.strokeDasharray = legLength; // Just 1 length is enough, it will be duplicated.
+ legPath.style.strokeDashoffset = legLength;
+ }
+
+ // If it is a marker, add it now and we'll animate it out
+ if (m.setZIndexOffset) {
+ m.setZIndexOffset(1000000); // Make normal markers appear on top of EVERYTHING
+ }
+ if (m.clusterHide) {
+ m.clusterHide();
+ }
+
+ // Vectors just get immediately added
+ fg.addLayer(m);
+
+ if (m._setPos) {
+ m._setPos(thisLayerPos);
+ }
+ }
+
+ group._forceLayout();
+ group._animationStart();
+
+ // Reveal markers and spider legs.
+ for (i = childMarkers.length - 1; i >= 0; i--) {
+ newPos = map.layerPointToLatLng(positions[i]);
+ m = childMarkers[i];
+
+ //Move marker to new position
+ m._preSpiderfyLatlng = m._latlng;
+ m.setLatLng(newPos);
+
+ if (m.clusterShow) {
+ m.clusterShow();
+ }
+
+ // Animate leg (animation is actually delegated to CSS transition).
+ if (svg) {
+ leg = m._spiderLeg;
+ legPath = leg._path;
+ legPath.style.strokeDashoffset = 0;
+ //legPath.style.strokeOpacity = finalLegOpacity;
+ leg.setStyle({opacity: finalLegOpacity});
+ }
+ }
+ this.setOpacity(0.3);
+
+ group._ignoreMove = false;
+
+ setTimeout(function () {
+ group._animationEnd();
+ group.fire('spiderfied', {
+ cluster: me,
+ markers: childMarkers
+ });
+ }, 200);
+ },
+
+ _animationUnspiderfy: function (zoomDetails) {
+ var me = this,
+ group = this._group,
+ map = group._map,
+ fg = group._featureGroup,
+ thisLayerPos = zoomDetails ? map._latLngToNewLayerPoint(this._latlng, zoomDetails.zoom, zoomDetails.center) : map.latLngToLayerPoint(this._latlng),
+ childMarkers = this.getAllChildMarkers(),
+ svg = L.Path.SVG,
+ m, i, leg, legPath, legLength, nonAnimatable;
+
+ group._ignoreMove = true;
+ group._animationStart();
+
+ //Make us visible and bring the child markers back in
+ this.setOpacity(1);
+ for (i = childMarkers.length - 1; i >= 0; i--) {
+ m = childMarkers[i];
+
+ //Marker was added to us after we were spiderfied
+ if (!m._preSpiderfyLatlng) {
+ continue;
+ }
+
+ //Fix up the location to the real one
+ m.setLatLng(m._preSpiderfyLatlng);
+ delete m._preSpiderfyLatlng;
+
+ //Hack override the location to be our center
+ nonAnimatable = true;
+ if (m._setPos) {
+ m._setPos(thisLayerPos);
+ nonAnimatable = false;
+ }
+ if (m.clusterHide) {
+ m.clusterHide();
+ nonAnimatable = false;
+ }
+ if (nonAnimatable) {
+ fg.removeLayer(m);
+ }
+
+ // Animate the spider leg back in (animation is actually delegated to CSS transition).
+ if (svg) {
+ leg = m._spiderLeg;
+ legPath = leg._path;
+ legLength = legPath.getTotalLength() + 0.1;
+ legPath.style.strokeDashoffset = legLength;
+ leg.setStyle({opacity: 0});
+ }
+ }
+
+ group._ignoreMove = false;
+
+ setTimeout(function () {
+ //If we have only <= one child left then that marker will be shown on the map so don't remove it!
+ var stillThereChildCount = 0;
+ for (i = childMarkers.length - 1; i >= 0; i--) {
+ m = childMarkers[i];
+ if (m._spiderLeg) {
+ stillThereChildCount++;
+ }
+ }
+
+
+ for (i = childMarkers.length - 1; i >= 0; i--) {
+ m = childMarkers[i];
+
+ if (!m._spiderLeg) { //Has already been unspiderfied
+ continue;
+ }
+
+ if (m.clusterShow) {
+ m.clusterShow();
+ }
+ if (m.setZIndexOffset) {
+ m.setZIndexOffset(0);
+ }
+
+ if (stillThereChildCount > 1) {
+ fg.removeLayer(m);
+ }
+
+ map.removeLayer(m._spiderLeg);
+ delete m._spiderLeg;
+ }
+ group._animationEnd();
+ group.fire('unspiderfied', {
+ cluster: me,
+ markers: childMarkers
+ });
+ }, 200);
+ }
+ });
+
+
+ L.MarkerClusterGroup.include({
+ //The MarkerCluster currently spiderfied (if any)
+ _spiderfied: null,
+
+ unspiderfy: function () {
+ this._unspiderfy.apply(this, arguments);
+ },
+
+ _spiderfierOnAdd: function () {
+ this._map.on('click', this._unspiderfyWrapper, this);
+
+ if (this._map.options.zoomAnimation) {
+ this._map.on('zoomstart', this._unspiderfyZoomStart, this);
+ }
+ //Browsers without zoomAnimation or a big zoom don't fire zoomstart
+ this._map.on('zoomend', this._noanimationUnspiderfy, this);
+
+ if (!L.Browser.touch) {
+ this._map.getRenderer(this);
+ //Needs to happen in the pageload, not after, or animations don't work in webkit
+ // http://stackoverflow.com/questions/8455200/svg-animate-with-dynamically-added-elements
+ //Disable on touch browsers as the animation messes up on a touch zoom and isn't very noticable
+ }
+ },
+
+ _spiderfierOnRemove: function () {
+ this._map.off('click', this._unspiderfyWrapper, this);
+ this._map.off('zoomstart', this._unspiderfyZoomStart, this);
+ this._map.off('zoomanim', this._unspiderfyZoomAnim, this);
+ this._map.off('zoomend', this._noanimationUnspiderfy, this);
+
+ //Ensure that markers are back where they should be
+ // Use no animation to avoid a sticky leaflet-cluster-anim class on mapPane
+ this._noanimationUnspiderfy();
+ },
+
+ //On zoom start we add a zoomanim handler so that we are guaranteed to be last (after markers are animated)
+ //This means we can define the animation they do rather than Markers doing an animation to their actual location
+ _unspiderfyZoomStart: function () {
+ if (!this._map) { //May have been removed from the map by a zoomEnd handler
+ return;
+ }
+
+ this._map.on('zoomanim', this._unspiderfyZoomAnim, this);
+ },
+
+ _unspiderfyZoomAnim: function (zoomDetails) {
+ //Wait until the first zoomanim after the user has finished touch-zooming before running the animation
+ if (L.DomUtil.hasClass(this._map._mapPane, 'leaflet-touching')) {
+ return;
+ }
+
+ this._map.off('zoomanim', this._unspiderfyZoomAnim, this);
+ this._unspiderfy(zoomDetails);
+ },
+
+ _unspiderfyWrapper: function () {
+ /// _unspiderfy but passes no arguments
+ this._unspiderfy();
+ },
+
+ _unspiderfy: function (zoomDetails) {
+ if (this._spiderfied) {
+ this._spiderfied.unspiderfy(zoomDetails);
+ }
+ },
+
+ _noanimationUnspiderfy: function () {
+ if (this._spiderfied) {
+ this._spiderfied._noanimationUnspiderfy();
+ }
+ },
+
+ //If the given layer is currently being spiderfied then we unspiderfy it so it isn't on the map anymore etc
+ _unspiderfyLayer: function (layer) {
+ if (layer._spiderLeg) {
+ this._featureGroup.removeLayer(layer);
+
+ if (layer.clusterShow) {
+ layer.clusterShow();
+ }
+ //Position will be fixed up immediately in _animationUnspiderfy
+ if (layer.setZIndexOffset) {
+ layer.setZIndexOffset(0);
+ }
+
+ this._map.removeLayer(layer._spiderLeg);
+ delete layer._spiderLeg;
+ }
+ }
+ });
+
+
+ /**
+ * Adds 1 public method to MCG and 1 to L.Marker to facilitate changing
+ * markers' icon options and refreshing their icon and their parent clusters
+ * accordingly (case where their iconCreateFunction uses data of childMarkers
+ * to make up the cluster icon).
+ */
+
+
+ L.MarkerClusterGroup.include({
+ /**
+ * Updates the icon of all clusters which are parents of the given marker(s).
+ * In singleMarkerMode, also updates the given marker(s) icon.
+ * @param layers L.MarkerClusterGroup|L.LayerGroup|Array(L.Marker)|Map(L.Marker)|
+ * L.MarkerCluster|L.Marker (optional) list of markers (or single marker) whose parent
+ * clusters need to be updated. If not provided, retrieves all child markers of this.
+ * @returns {L.MarkerClusterGroup}
+ */
+ refreshClusters: function (layers) {
+ if (!layers) {
+ layers = this._topClusterLevel.getAllChildMarkers();
+ } else if (layers instanceof L.MarkerClusterGroup) {
+ layers = layers._topClusterLevel.getAllChildMarkers();
+ } else if (layers instanceof L.LayerGroup) {
+ layers = layers._layers;
+ } else if (layers instanceof L.MarkerCluster) {
+ layers = layers.getAllChildMarkers();
+ } else if (layers instanceof L.Marker) {
+ layers = [layers];
+ } // else: must be an Array(L.Marker)|Map(L.Marker)
+ this._flagParentsIconsNeedUpdate(layers);
+ this._refreshClustersIcons();
+
+ // In case of singleMarkerMode, also re-draw the markers.
+ if (this.options.singleMarkerMode) {
+ this._refreshSingleMarkerModeMarkers(layers);
+ }
+
+ return this;
+ },
+
+ /**
+ * Simply flags all parent clusters of the given markers as having a "dirty" icon.
+ * @param layers Array(L.Marker)|Map(L.Marker) list of markers.
+ * @private
+ */
+ _flagParentsIconsNeedUpdate: function (layers) {
+ var id, parent;
+
+ // Assumes layers is an Array or an Object whose prototype is non-enumerable.
+ for (id in layers) {
+ // Flag parent clusters' icon as "dirty", all the way up.
+ // Dumb process that flags multiple times upper parents, but still
+ // much more efficient than trying to be smart and make short lists,
+ // at least in the case of a hierarchy following a power law:
+ // http://jsperf.com/flag-nodes-in-power-hierarchy/2
+ parent = layers[id].__parent;
+ while (parent) {
+ parent._iconNeedsUpdate = true;
+ parent = parent.__parent;
+ }
+ }
+ },
+
+ /**
+ * Re-draws the icon of the supplied markers.
+ * To be used in singleMarkerMode only.
+ * @param layers Array(L.Marker)|Map(L.Marker) list of markers.
+ * @private
+ */
+ _refreshSingleMarkerModeMarkers: function (layers) {
+ var id, layer;
+
+ for (id in layers) {
+ layer = layers[id];
+
+ // Make sure we do not override markers that do not belong to THIS group.
+ if (this.hasLayer(layer)) {
+ // Need to re-create the icon first, then re-draw the marker.
+ layer.setIcon(this._overrideMarkerIcon(layer));
+ }
+ }
+ }
+ });
+
+ L.Marker.include({
+ /**
+ * Updates the given options in the marker's icon and refreshes the marker.
+ * @param options map object of icon options.
+ * @param directlyRefreshClusters boolean (optional) true to trigger
+ * MCG.refreshClustersOf() right away with this single marker.
+ * @returns {L.Marker}
+ */
+ refreshIconOptions: function (options, directlyRefreshClusters) {
+ var icon = this.options.icon;
+
+ L.setOptions(icon, options);
+
+ this.setIcon(icon);
+
+ // Shortcut to refresh the associated MCG clusters right away.
+ // To be used when refreshing a single marker.
+ // Otherwise, better use MCG.refreshClusters() once at the end with
+ // the list of modified markers.
+ if (directlyRefreshClusters && this.__parent) {
+ this.__parent._group.refreshClusters(this);
+ }
+
+ return this;
+ }
+ });
+
+
+ }(window, document));
+
\ No newline at end of file
diff --git a/_site/talkmap/leaflet_dist/leaflet.markercluster.js b/_site/talkmap/leaflet_dist/leaflet.markercluster.js
new file mode 100644
index 0000000..452d04a
--- /dev/null
+++ b/_site/talkmap/leaflet_dist/leaflet.markercluster.js
@@ -0,0 +1,8 @@
+
+ /*
+ Leaflet.markercluster, Provides Beautiful Animated Marker Clustering functionality for Leaflet, a JS library for interactive maps.
+ https://github.com/Leaflet/Leaflet.markercluster
+ (c) 2012-2013, Dave Leaver, smartrak
+ */
+ !function(e,t,i){L.MarkerClusterGroup=L.FeatureGroup.extend({options:{maxClusterRadius:80,iconCreateFunction:null,spiderfyOnMaxZoom:!0,showCoverageOnHover:!0,zoomToBoundsOnClick:!0,singleMarkerMode:!1,disableClusteringAtZoom:null,removeOutsideVisibleBounds:!0,animate:!0,animateAddingMarkers:!1,spiderfyDistanceMultiplier:1,spiderLegPolylineOptions:{weight:1.5,color:"#222",opacity:.5},chunkedLoading:!1,chunkInterval:200,chunkDelay:50,chunkProgress:null,polygonOptions:{}},initialize:function(e){L.Util.setOptions(this,e),this.options.iconCreateFunction||(this.options.iconCreateFunction=this._defaultIconCreateFunction),this._featureGroup=L.featureGroup(),this._featureGroup.addEventParent(this),this._nonPointGroup=L.featureGroup(),this._nonPointGroup.addEventParent(this),this._inZoomAnimation=0,this._needsClustering=[],this._needsRemoving=[],this._currentShownBounds=null,this._queue=[];var t=L.DomUtil.TRANSITION&&this.options.animate;L.extend(this,t?this._withAnimation:this._noAnimation),this._markerCluster=t?L.MarkerCluster:L.MarkerClusterNonAnimated},addLayer:function(e){if(e instanceof L.LayerGroup)return this.addLayers([e]);if(!e.getLatLng)return this._nonPointGroup.addLayer(e),this;if(!this._map)return this._needsClustering.push(e),this;if(this.hasLayer(e))return this;this._unspiderfy&&this._unspiderfy(),this._addLayer(e,this._maxZoom),this._topClusterLevel._recalculateBounds(),this._refreshClustersIcons();var t=e,i=this._map.getZoom();if(e.__parent)for(;t.__parent._zoom>=i;)t=t.__parent;return this._currentShownBounds.contains(t.getLatLng())&&(this.options.animateAddingMarkers?this._animationAddLayer(e,t):this._animationAddLayerNonAnimated(e,t)),this},removeLayer:function(e){return e instanceof L.LayerGroup?this.removeLayers([e]):e.getLatLng?this._map?e.__parent?(this._unspiderfy&&(this._unspiderfy(),this._unspiderfyLayer(e)),this._removeLayer(e,!0),this._topClusterLevel._recalculateBounds(),this._refreshClustersIcons(),e.off("move",this._childMarkerMoved,this),this._featureGroup.hasLayer(e)&&(this._featureGroup.removeLayer(e),e.clusterShow&&e.clusterShow()),this):this:(!this._arraySplice(this._needsClustering,e)&&this.hasLayer(e)&&this._needsRemoving.push(e),this):(this._nonPointGroup.removeLayer(e),this)},addLayers:function(e){if(!L.Util.isArray(e))return this.addLayer(e);var t,i=this._featureGroup,n=this._nonPointGroup,s=this.options.chunkedLoading,r=this.options.chunkInterval,o=this.options.chunkProgress,a=e.length,h=0,u=!0;if(this._map){var l=(new Date).getTime(),_=L.bind(function(){for(var d=(new Date).getTime();a>h;h++){if(s&&0===h%200){var c=(new Date).getTime()-d;if(c>r)break}if(t=e[h],t instanceof L.LayerGroup)u&&(e=e.slice(),u=!1),this._extractNonGroupLayers(t,e),a=e.length;else if(t.getLatLng){if(!this.hasLayer(t)&&(this._addLayer(t,this._maxZoom),t.__parent&&2===t.__parent.getChildCount())){var p=t.__parent.getAllChildMarkers(),f=p[0]===t?p[1]:p[0];i.removeLayer(f)}}else n.addLayer(t)}o&&o(h,a,(new Date).getTime()-l),h===a?(this._topClusterLevel._recalculateBounds(),this._refreshClustersIcons(),this._topClusterLevel._recursivelyAddChildrenToMap(null,this._zoom,this._currentShownBounds)):setTimeout(_,this.options.chunkDelay)},this);_()}else for(var d=this._needsClustering;a>h;h++)t=e[h],t instanceof L.LayerGroup?(u&&(e=e.slice(),u=!1),this._extractNonGroupLayers(t,e),a=e.length):t.getLatLng?this.hasLayer(t)||d.push(t):n.addLayer(t);return this},removeLayers:function(e){var t,i,n=e.length,s=this._featureGroup,r=this._nonPointGroup,o=!0;if(!this._map){for(t=0;n>t;t++)i=e[t],i instanceof L.LayerGroup?(o&&(e=e.slice(),o=!1),this._extractNonGroupLayers(i,e),n=e.length):(this._arraySplice(this._needsClustering,i),r.removeLayer(i),this.hasLayer(i)&&this._needsRemoving.push(i));return this}if(this._unspiderfy){this._unspiderfy();var a=e.slice(),h=n;for(t=0;h>t;t++)i=a[t],i instanceof L.LayerGroup?(this._extractNonGroupLayers(i,a),h=a.length):this._unspiderfyLayer(i)}for(t=0;n>t;t++)i=e[t],i instanceof L.LayerGroup?(o&&(e=e.slice(),o=!1),this._extractNonGroupLayers(i,e),n=e.length):i.__parent?(this._removeLayer(i,!0,!0),s.hasLayer(i)&&(s.removeLayer(i),i.clusterShow&&i.clusterShow())):r.removeLayer(i);return this._topClusterLevel._recalculateBounds(),this._refreshClustersIcons(),this._topClusterLevel._recursivelyAddChildrenToMap(null,this._zoom,this._currentShownBounds),this},clearLayers:function(){return this._map||(this._needsClustering=[],delete this._gridClusters,delete this._gridUnclustered),this._noanimationUnspiderfy&&this._noanimationUnspiderfy(),this._featureGroup.clearLayers(),this._nonPointGroup.clearLayers(),this.eachLayer(function(e){e.off("move",this._childMarkerMoved,this),delete e.__parent}),this._map&&this._generateInitialClusters(),this},getBounds:function(){var e=new L.LatLngBounds;this._topClusterLevel&&e.extend(this._topClusterLevel._bounds);for(var t=this._needsClustering.length-1;t>=0;t--)e.extend(this._needsClustering[t].getLatLng());return e.extend(this._nonPointGroup.getBounds()),e},eachLayer:function(e,t){var i,n=this._needsClustering.slice(),s=this._needsRemoving;for(this._topClusterLevel&&this._topClusterLevel.getAllChildMarkers(n),i=n.length-1;i>=0;i--)-1===s.indexOf(n[i])&&e.call(t,n[i]);this._nonPointGroup.eachLayer(e,t)},getLayers:function(){var e=[];return this.eachLayer(function(t){e.push(t)}),e},getLayer:function(e){var t=null;return e=parseInt(e,10),this.eachLayer(function(i){L.stamp(i)===e&&(t=i)}),t},hasLayer:function(e){if(!e)return!1;var t,i=this._needsClustering;for(t=i.length-1;t>=0;t--)if(i[t]===e)return!0;for(i=this._needsRemoving,t=i.length-1;t>=0;t--)if(i[t]===e)return!1;return!(!e.__parent||e.__parent._group!==this)||this._nonPointGroup.hasLayer(e)},zoomToShowLayer:function(e,t){"function"!=typeof t&&(t=function(){});var i=function(){!e._icon&&!e.__parent._icon||this._inZoomAnimation||(this._map.off("moveend",i,this),this.off("animationend",i,this),e._icon?t():e.__parent._icon&&(this.once("spiderfied",t,this),e.__parent.spiderfy()))};if(e._icon&&this._map.getBounds().contains(e.getLatLng()))t();else if(e.__parent._zoomt;t++)n=this._needsRemoving[t],this._removeLayer(n,!0);this._needsRemoving=[],this._zoom=this._map.getZoom(),this._currentShownBounds=this._getExpandedVisibleBounds(),this._map.on("zoomend",this._zoomEnd,this),this._map.on("moveend",this._moveEnd,this),this._spiderfierOnAdd&&this._spiderfierOnAdd(),this._bindEvents(),i=this._needsClustering,this._needsClustering=[],this.addLayers(i)},onRemove:function(e){e.off("zoomend",this._zoomEnd,this),e.off("moveend",this._moveEnd,this),this._unbindEvents(),this._map._mapPane.className=this._map._mapPane.className.replace(" leaflet-cluster-anim",""),this._spiderfierOnRemove&&this._spiderfierOnRemove(),delete this._maxLat,this._hideCoverage(),this._featureGroup.remove(),this._nonPointGroup.remove(),this._featureGroup.clearLayers(),this._map=null},getVisibleParent:function(e){for(var t=e;t&&!t._icon;)t=t.__parent;return t||null},_arraySplice:function(e,t){for(var i=e.length-1;i>=0;i--)if(e[i]===t)return e.splice(i,1),!0},_removeFromGridUnclustered:function(e,t){for(var i=this._map,n=this._gridUnclustered;t>=0&&n[t].removeObject(e,i.project(e.getLatLng(),t));t--);},_childMarkerMoved:function(e){this._ignoreMove||(e.target._latlng=e.oldLatLng,this.removeLayer(e.target),e.target._latlng=e.latlng,this.addLayer(e.target))},_removeLayer:function(e,t,i){var n=this._gridClusters,s=this._gridUnclustered,r=this._featureGroup,o=this._map;t&&this._removeFromGridUnclustered(e,this._maxZoom);var a,h=e.__parent,u=h._markers;for(this._arraySplice(u,e);h&&(h._childCount--,h._boundsNeedUpdate=!0,!(h._zoom<0));)t&&h._childCount<=1?(a=h._markers[0]===e?h._markers[1]:h._markers[0],n[h._zoom].removeObject(h,o.project(h._cLatLng,h._zoom)),s[h._zoom].addObject(a,o.project(a.getLatLng(),h._zoom)),this._arraySplice(h.__parent._childClusters,h),h.__parent._markers.push(a),a.__parent=h.__parent,h._icon&&(r.removeLayer(h),i||r.addLayer(a))):h._iconNeedsUpdate=!0,h=h.__parent;delete e.__parent},_isOrIsParent:function(e,t){for(;t;){if(e===t)return!0;t=t.parentNode}return!1},fire:function(e,t,i){if(t&&t.layer instanceof L.MarkerCluster){if(t.originalEvent&&this._isOrIsParent(t.layer._icon,t.originalEvent.relatedTarget))return;e="cluster"+e}L.FeatureGroup.prototype.fire.call(this,e,t,i)},listens:function(e,t){return L.FeatureGroup.prototype.listens.call(this,e,t)||L.FeatureGroup.prototype.listens.call(this,"cluster"+e,t)},_defaultIconCreateFunction:function(e){var t=e.getChildCount(),i=" marker-cluster-";return i+=10>t?"small":100>t?"medium":"large",new L.DivIcon({html:""+t+"
",className:"marker-cluster"+i,iconSize:new L.Point(40,40)})},_bindEvents:function(){var e=this._map,t=this.options.spiderfyOnMaxZoom,i=this.options.showCoverageOnHover,n=this.options.zoomToBoundsOnClick;(t||n)&&this.on("clusterclick",this._zoomOrSpiderfy,this),i&&(this.on("clustermouseover",this._showCoverage,this),this.on("clustermouseout",this._hideCoverage,this),e.on("zoomend",this._hideCoverage,this))},_zoomOrSpiderfy:function(e){for(var t=e.layer,i=t;1===i._childClusters.length;)i=i._childClusters[0];i._zoom===this._maxZoom&&i._childCount===t._childCount&&this.options.spiderfyOnMaxZoom?t.spiderfy():this.options.zoomToBoundsOnClick&&t.zoomToBounds(),e.originalEvent&&13===e.originalEvent.keyCode&&this._map._container.focus()},_showCoverage:function(e){var t=this._map;this._inZoomAnimation||(this._shownPolygon&&t.removeLayer(this._shownPolygon),e.layer.getChildCount()>2&&e.layer!==this._spiderfied&&(this._shownPolygon=new L.Polygon(e.layer.getConvexHull(),this.options.polygonOptions),t.addLayer(this._shownPolygon)))},_hideCoverage:function(){this._shownPolygon&&(this._map.removeLayer(this._shownPolygon),this._shownPolygon=null)},_unbindEvents:function(){var e=this.options.spiderfyOnMaxZoom,t=this.options.showCoverageOnHover,i=this.options.zoomToBoundsOnClick,n=this._map;(e||i)&&this.off("clusterclick",this._zoomOrSpiderfy,this),t&&(this.off("clustermouseover",this._showCoverage,this),this.off("clustermouseout",this._hideCoverage,this),n.off("zoomend",this._hideCoverage,this))},_zoomEnd:function(){this._map&&(this._mergeSplitClusters(),this._zoom=Math.round(this._map._zoom),this._currentShownBounds=this._getExpandedVisibleBounds())},_moveEnd:function(){if(!this._inZoomAnimation){var e=this._getExpandedVisibleBounds();this._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds,this._zoom,e),this._topClusterLevel._recursivelyAddChildrenToMap(null,Math.round(this._map._zoom),e),this._currentShownBounds=e}},_generateInitialClusters:function(){var e=this._map.getMaxZoom(),t=this.options.maxClusterRadius,i=t;"function"!=typeof t&&(i=function(){return t}),this.options.disableClusteringAtZoom&&(e=this.options.disableClusteringAtZoom-1),this._maxZoom=e,this._gridClusters={},this._gridUnclustered={};for(var n=e;n>=0;n--)this._gridClusters[n]=new L.DistanceGrid(i(n)),this._gridUnclustered[n]=new L.DistanceGrid(i(n));this._topClusterLevel=new this._markerCluster(this,-1)},_addLayer:function(e,t){var i,n,s=this._gridClusters,r=this._gridUnclustered;for(this.options.singleMarkerMode&&this._overrideMarkerIcon(e),e.on("move",this._childMarkerMoved,this);t>=0;t--){i=this._map.project(e.getLatLng(),t);var o=s[t].getNearObject(i);if(o)return o._addChild(e),e.__parent=o,void 0;if(o=r[t].getNearObject(i)){var a=o.__parent;a&&this._removeLayer(o,!1);var h=new this._markerCluster(this,t,o,e);s[t].addObject(h,this._map.project(h._cLatLng,t)),o.__parent=h,e.__parent=h;var u=h;for(n=t-1;n>a._zoom;n--)u=new this._markerCluster(this,n,u),s[n].addObject(u,this._map.project(o.getLatLng(),n));return a._addChild(u),this._removeFromGridUnclustered(o,t),void 0}r[t].addObject(e,i)}this._topClusterLevel._addChild(e),e.__parent=this._topClusterLevel},_refreshClustersIcons:function(){this._featureGroup.eachLayer(function(e){e instanceof L.MarkerCluster&&e._iconNeedsUpdate&&e._updateIcon()})},_enqueue:function(e){this._queue.push(e),this._queueTimeout||(this._queueTimeout=setTimeout(L.bind(this._processQueue,this),300))},_processQueue:function(){for(var e=0;ee?(this._animationStart(),this._animationZoomOut(this._zoom,e)):this._moveEnd()},_getExpandedVisibleBounds:function(){return this.options.removeOutsideVisibleBounds?L.Browser.mobile?this._checkBoundsMaxLat(this._map.getBounds()):this._checkBoundsMaxLat(this._map.getBounds().pad(1)):this._mapBoundsInfinite},_checkBoundsMaxLat:function(e){var t=this._maxLat;return t!==i&&(e.getNorth()>=t&&(e._northEast.lat=1/0),e.getSouth()<=-t&&(e._southWest.lat=-1/0)),e},_animationAddLayerNonAnimated:function(e,t){if(t===e)this._featureGroup.addLayer(e);else if(2===t._childCount){t._addToMap();var i=t.getAllChildMarkers();this._featureGroup.removeLayer(i[0]),this._featureGroup.removeLayer(i[1])}else t._updateIcon()},_extractNonGroupLayers:function(e,t){var i,n=e.getLayers(),s=0;for(t=t||[];s=0;i--)o=h[i],n.contains(o._latlng)||s.removeLayer(o)}),this._forceLayout(),this._topClusterLevel._recursivelyBecomeVisible(n,t),s.eachLayer(function(e){e instanceof L.MarkerCluster||!e._icon||e.clusterShow()}),this._topClusterLevel._recursively(n,e,t,function(e){e._recursivelyRestoreChildPositions(t)}),this._ignoreMove=!1,this._enqueue(function(){this._topClusterLevel._recursively(n,e,0,function(e){s.removeLayer(e),e.clusterShow()}),this._animationEnd()})},_animationZoomOut:function(e,t){this._animationZoomOutSingle(this._topClusterLevel,e-1,t),this._topClusterLevel._recursivelyAddChildrenToMap(null,t,this._getExpandedVisibleBounds()),this._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds,e,this._getExpandedVisibleBounds())},_animationAddLayer:function(e,t){var i=this,n=this._featureGroup;n.addLayer(e),t!==e&&(t._childCount>2?(t._updateIcon(),this._forceLayout(),this._animationStart(),e._setPos(this._map.latLngToLayerPoint(t.getLatLng())),e.clusterHide(),this._enqueue(function(){n.removeLayer(e),e.clusterShow(),i._animationEnd()})):(this._forceLayout(),i._animationStart(),i._animationZoomOutSingle(t,this._map.getMaxZoom(),this._map.getZoom())))}},_animationZoomOutSingle:function(e,t,i){var n=this._getExpandedVisibleBounds();e._recursivelyAnimateChildrenInAndAddSelfToMap(n,t+1,i);var s=this;this._forceLayout(),e._recursivelyBecomeVisible(n,i),this._enqueue(function(){if(1===e._childCount){var r=e._markers[0];this._ignoreMove=!0,r.setLatLng(r.getLatLng()),this._ignoreMove=!1,r.clusterShow&&r.clusterShow()}else e._recursively(n,i,0,function(e){e._recursivelyRemoveChildrenFromMap(n,t+1)});s._animationEnd()})},_animationEnd:function(){this._map&&(this._map._mapPane.className=this._map._mapPane.className.replace(" leaflet-cluster-anim","")),this._inZoomAnimation--,this.fire("animationend")},_forceLayout:function(){L.Util.falseFn(t.body.offsetWidth)}}),L.markerClusterGroup=function(e){return new L.MarkerClusterGroup(e)},L.MarkerCluster=L.Marker.extend({initialize:function(e,t,i,n){L.Marker.prototype.initialize.call(this,i?i._cLatLng||i.getLatLng():new L.LatLng(0,0),{icon:this}),this._group=e,this._zoom=t,this._markers=[],this._childClusters=[],this._childCount=0,this._iconNeedsUpdate=!0,this._boundsNeedUpdate=!0,this._bounds=new L.LatLngBounds,i&&this._addChild(i),n&&this._addChild(n)},getAllChildMarkers:function(e){e=e||[];for(var t=this._childClusters.length-1;t>=0;t--)this._childClusters[t].getAllChildMarkers(e);for(var i=this._markers.length-1;i>=0;i--)e.push(this._markers[i]);return e},getChildCount:function(){return this._childCount},zoomToBounds:function(){for(var e,t=this._childClusters.slice(),i=this._group._map,n=i.getBoundsZoom(this._bounds),s=this._zoom+1,r=i.getZoom();t.length>0&&n>s;){s++;var o=[];for(e=0;es?this._group._map.setView(this._latlng,s):r>=n?this._group._map.setView(this._latlng,r+1):this._group._map.fitBounds(this._bounds)},getBounds:function(){var e=new L.LatLngBounds;return e.extend(this._bounds),e},_updateIcon:function(){this._iconNeedsUpdate=!0,this._icon&&this.setIcon(this)},createIcon:function(){return this._iconNeedsUpdate&&(this._iconObj=this._group.options.iconCreateFunction(this),this._iconNeedsUpdate=!1),this._iconObj.createIcon()},createShadow:function(){return this._iconObj.createShadow()},_addChild:function(e,t){this._iconNeedsUpdate=!0,this._boundsNeedUpdate=!0,this._setClusterCenter(e),e instanceof L.MarkerCluster?(t||(this._childClusters.push(e),e.__parent=this),this._childCount+=e._childCount):(t||this._markers.push(e),this._childCount++),this.__parent&&this.__parent._addChild(e,!0)},_setClusterCenter:function(e){this._cLatLng||(this._cLatLng=e._cLatLng||e._latlng)},_resetBounds:function(){var e=this._bounds;e._southWest&&(e._southWest.lat=1/0,e._southWest.lng=1/0),e._northEast&&(e._northEast.lat=-1/0,e._northEast.lng=-1/0)},_recalculateBounds:function(){var e,t,i,n,s=this._markers,r=this._childClusters,o=0,a=0,h=this._childCount;if(0!==h){for(this._resetBounds(),e=0;e=0;i--)n=s[i],n._icon&&(n._setPos(t),n.clusterHide())},function(e){var i,n,s=e._childClusters;for(i=s.length-1;i>=0;i--)n=s[i],n._icon&&(n._setPos(t),n.clusterHide())})},_recursivelyAnimateChildrenInAndAddSelfToMap:function(e,t,i){this._recursively(e,i,0,function(n){n._recursivelyAnimateChildrenIn(e,n._group._map.latLngToLayerPoint(n.getLatLng()).round(),t),n._isSingleParent()&&t-1===i?(n.clusterShow(),n._recursivelyRemoveChildrenFromMap(e,t)):n.clusterHide(),n._addToMap()})},_recursivelyBecomeVisible:function(e,t){this._recursively(e,0,t,null,function(e){e.clusterShow()})},_recursivelyAddChildrenToMap:function(e,t,i){this._recursively(i,-1,t,function(n){if(t!==n._zoom)for(var s=n._markers.length-1;s>=0;s--){var r=n._markers[s];i.contains(r._latlng)&&(e&&(r._backupLatlng=r.getLatLng(),r.setLatLng(e),r.clusterHide&&r.clusterHide()),n._group._featureGroup.addLayer(r))}},function(t){t._addToMap(e)})},_recursivelyRestoreChildPositions:function(e){for(var t=this._markers.length-1;t>=0;t--){var i=this._markers[t];i._backupLatlng&&(i.setLatLng(i._backupLatlng),delete i._backupLatlng)}if(e-1===this._zoom)for(var n=this._childClusters.length-1;n>=0;n--)this._childClusters[n]._restorePosition();else for(var s=this._childClusters.length-1;s>=0;s--)this._childClusters[s]._recursivelyRestoreChildPositions(e)},_restorePosition:function(){this._backupLatlng&&(this.setLatLng(this._backupLatlng),delete this._backupLatlng)},_recursivelyRemoveChildrenFromMap:function(e,t,i){var n,s;this._recursively(e,-1,t-1,function(e){for(s=e._markers.length-1;s>=0;s--)n=e._markers[s],i&&i.contains(n._latlng)||(e._group._featureGroup.removeLayer(n),n.clusterShow&&n.clusterShow())},function(e){for(s=e._childClusters.length-1;s>=0;s--)n=e._childClusters[s],i&&i.contains(n._latlng)||(e._group._featureGroup.removeLayer(n),n.clusterShow&&n.clusterShow())})},_recursively:function(e,t,i,n,s){var r,o,a=this._childClusters,h=this._zoom;if(t>h)for(r=a.length-1;r>=0;r--)o=a[r],e.intersects(o._bounds)&&o._recursively(e,t,i,n,s);else if(n&&n(this),s&&this._zoom===i&&s(this),i>h)for(r=a.length-1;r>=0;r--)o=a[r],e.intersects(o._bounds)&&o._recursively(e,t,i,n,s)},_isSingleParent:function(){return this._childClusters.length>0&&this._childClusters[0]._childCount===this._childCount}}),L.Marker.include({clusterHide:function(){return this.options.opacityWhenUnclustered=this.options.opacity||1,this.setOpacity(0)},clusterShow:function(){var e=this.setOpacity(this.options.opacity||this.options.opacityWhenUnclustered);return delete this.options.opacityWhenUnclustered,e}}),L.DistanceGrid=function(e){this._cellSize=e,this._sqCellSize=e*e,this._grid={},this._objectPoint={}},L.DistanceGrid.prototype={addObject:function(e,t){var i=this._getCoord(t.x),n=this._getCoord(t.y),s=this._grid,r=s[n]=s[n]||{},o=r[i]=r[i]||[],a=L.Util.stamp(e);this._objectPoint[a]=t,o.push(e)},updateObject:function(e,t){this.removeObject(e),this.addObject(e,t)},removeObject:function(e,t){var i,n,s=this._getCoord(t.x),r=this._getCoord(t.y),o=this._grid,a=o[r]=o[r]||{},h=a[s]=a[s]||[];for(delete this._objectPoint[L.Util.stamp(e)],i=0,n=h.length;n>i;i++)if(h[i]===e)return h.splice(i,1),1===n&&delete a[s],!0},eachObject:function(e,t){var i,n,s,r,o,a,h,u=this._grid;for(i in u){o=u[i];for(n in o)for(a=o[n],s=0,r=a.length;r>s;s++)h=e.call(t,a[s]),h&&(s--,r--)}},getNearObject:function(e){var t,i,n,s,r,o,a,h,u=this._getCoord(e.x),l=this._getCoord(e.y),_=this._objectPoint,d=this._sqCellSize,c=null;for(t=l-1;l+1>=t;t++)if(s=this._grid[t])for(i=u-1;u+1>=i;i++)if(r=s[i])for(n=0,o=r.length;o>n;n++)a=r[n],h=this._sqDist(_[L.Util.stamp(a)],e),d>h&&(d=h,c=a);return c},_getCoord:function(e){return Math.floor(e/this._cellSize)},_sqDist:function(e,t){var i=t.x-e.x,n=t.y-e.y;return i*i+n*n}},function(){L.QuickHull={getDistant:function(e,t){var i=t[1].lat-t[0].lat,n=t[0].lng-t[1].lng;return n*(e.lat-t[0].lat)+i*(e.lng-t[0].lng)},findMostDistantPointFromBaseLine:function(e,t){var i,n,s,r=0,o=null,a=[];for(i=t.length-1;i>=0;i--)n=t[i],s=this.getDistant(n,e),s>0&&(a.push(n),s>r&&(r=s,o=n));return{maxPoint:o,newPoints:a}},buildConvexHull:function(e,t){var i=[],n=this.findMostDistantPointFromBaseLine(e,t);return n.maxPoint?(i=i.concat(this.buildConvexHull([e[0],n.maxPoint],n.newPoints)),i=i.concat(this.buildConvexHull([n.maxPoint,e[1]],n.newPoints))):[e[0]]},getConvexHull:function(e){var t,i=!1,n=!1,s=!1,r=!1,o=null,a=null,h=null,u=null,l=null,_=null;for(t=e.length-1;t>=0;t--){var d=e[t];(i===!1||d.lat>i)&&(o=d,i=d.lat),(n===!1||d.lats)&&(h=d,s=d.lng),(r===!1||d.lng=0;t--)e=i[t].getLatLng(),n.push(e);return L.QuickHull.getConvexHull(n)}}),L.MarkerCluster.include({_2PI:2*Math.PI,_circleFootSeparation:25,_circleStartAngle:Math.PI/6,_spiralFootSeparation:28,_spiralLengthStart:11,_spiralLengthFactor:5,_circleSpiralSwitchover:9,spiderfy:function(){if(this._group._spiderfied!==this&&!this._group._inZoomAnimation){var e,t=this.getAllChildMarkers(),i=this._group,n=i._map,s=n.latLngToLayerPoint(this._latlng);this._group._unspiderfy(),this._group._spiderfied=this,t.length>=this._circleSpiralSwitchover?e=this._generatePointsSpiral(t.length,s):(s.y+=10,e=this._generatePointsCircle(t.length,s)),this._animationSpiderfy(t,e)}},unspiderfy:function(e){this._group._inZoomAnimation||(this._animationUnspiderfy(e),this._group._spiderfied=null)},_generatePointsCircle:function(e,t){var i,n,s=this._group.options.spiderfyDistanceMultiplier*this._circleFootSeparation*(2+e),r=s/this._2PI,o=this._2PI/e,a=[];for(a.length=e,i=e-1;i>=0;i--)n=this._circleStartAngle+i*o,a[i]=new L.Point(t.x+r*Math.cos(n),t.y+r*Math.sin(n))._round();return a},_generatePointsSpiral:function(e,t){var i,n=this._group.options.spiderfyDistanceMultiplier,s=n*this._spiralLengthStart,r=n*this._spiralFootSeparation,o=n*this._spiralLengthFactor*this._2PI,a=0,h=[];for(h.length=e,i=e-1;i>=0;i--)a+=r/s+5e-4*i,h[i]=new L.Point(t.x+s*Math.cos(a),t.y+s*Math.sin(a))._round(),s+=o/a;return h},_noanimationUnspiderfy:function(){var e,t,i=this._group,n=i._map,s=i._featureGroup,r=this.getAllChildMarkers();for(i._ignoreMove=!0,this.setOpacity(1),t=r.length-1;t>=0;t--)e=r[t],s.removeLayer(e),e._preSpiderfyLatlng&&(e.setLatLng(e._preSpiderfyLatlng),delete e._preSpiderfyLatlng),e.setZIndexOffset&&e.setZIndexOffset(0),e._spiderLeg&&(n.removeLayer(e._spiderLeg),delete e._spiderLeg);i.fire("unspiderfied",{cluster:this,markers:r}),i._ignoreMove=!1,i._spiderfied=null}}),L.MarkerClusterNonAnimated=L.MarkerCluster.extend({_animationSpiderfy:function(e,t){var i,n,s,r,o=this._group,a=o._map,h=o._featureGroup,u=this._group.options.spiderLegPolylineOptions;for(o._ignoreMove=!0,i=0;i=0;n--)h=_.layerPointToLatLng(t[n]),s=e[n],s._preSpiderfyLatlng=s._latlng,s.setLatLng(h),s.clusterShow&&s.clusterShow(),f&&(r=s._spiderLeg,o=r._path,o.style.strokeDashoffset=0,r.setStyle({opacity:g}));this.setOpacity(.3),l._ignoreMove=!1,setTimeout(function(){l._animationEnd(),l.fire("spiderfied",{cluster:u,markers:e})},200)},_animationUnspiderfy:function(e){var t,i,n,s,r,o,a=this,h=this._group,u=h._map,l=h._featureGroup,_=e?u._latLngToNewLayerPoint(this._latlng,e.zoom,e.center):u.latLngToLayerPoint(this._latlng),d=this.getAllChildMarkers(),c=L.Path.SVG;for(h._ignoreMove=!0,h._animationStart(),this.setOpacity(1),i=d.length-1;i>=0;i--)t=d[i],t._preSpiderfyLatlng&&(t.setLatLng(t._preSpiderfyLatlng),delete t._preSpiderfyLatlng,o=!0,t._setPos&&(t._setPos(_),o=!1),t.clusterHide&&(t.clusterHide(),o=!1),o&&l.removeLayer(t),c&&(n=t._spiderLeg,s=n._path,r=s.getTotalLength()+.1,s.style.strokeDashoffset=r,n.setStyle({opacity:0})));h._ignoreMove=!1,setTimeout(function(){var e=0;for(i=d.length-1;i>=0;i--)t=d[i],t._spiderLeg&&e++;for(i=d.length-1;i>=0;i--)t=d[i],t._spiderLeg&&(t.clusterShow&&t.clusterShow(),t.setZIndexOffset&&t.setZIndexOffset(0),e>1&&l.removeLayer(t),u.removeLayer(t._spiderLeg),delete t._spiderLeg);h._animationEnd(),h.fire("unspiderfied",{cluster:a,markers:d})},200)}}),L.MarkerClusterGroup.include({_spiderfied:null,unspiderfy:function(){this._unspiderfy.apply(this,arguments)},_spiderfierOnAdd:function(){this._map.on("click",this._unspiderfyWrapper,this),this._map.options.zoomAnimation&&this._map.on("zoomstart",this._unspiderfyZoomStart,this),this._map.on("zoomend",this._noanimationUnspiderfy,this),L.Browser.touch||this._map.getRenderer(this)},_spiderfierOnRemove:function(){this._map.off("click",this._unspiderfyWrapper,this),this._map.off("zoomstart",this._unspiderfyZoomStart,this),this._map.off("zoomanim",this._unspiderfyZoomAnim,this),this._map.off("zoomend",this._noanimationUnspiderfy,this),this._noanimationUnspiderfy()},_unspiderfyZoomStart:function(){this._map&&this._map.on("zoomanim",this._unspiderfyZoomAnim,this)},_unspiderfyZoomAnim:function(e){L.DomUtil.hasClass(this._map._mapPane,"leaflet-touching")||(this._map.off("zoomanim",this._unspiderfyZoomAnim,this),this._unspiderfy(e))},_unspiderfyWrapper:function(){this._unspiderfy()},_unspiderfy:function(e){this._spiderfied&&this._spiderfied.unspiderfy(e)},_noanimationUnspiderfy:function(){this._spiderfied&&this._spiderfied._noanimationUnspiderfy()},_unspiderfyLayer:function(e){e._spiderLeg&&(this._featureGroup.removeLayer(e),e.clusterShow&&e.clusterShow(),e.setZIndexOffset&&e.setZIndexOffset(0),this._map.removeLayer(e._spiderLeg),delete e._spiderLeg)}}),L.MarkerClusterGroup.include({refreshClusters:function(e){return e?e instanceof L.MarkerClusterGroup?e=e._topClusterLevel.getAllChildMarkers():e instanceof L.LayerGroup?e=e._layers:e instanceof L.MarkerCluster?e=e.getAllChildMarkers():e instanceof L.Marker&&(e=[e]):e=this._topClusterLevel.getAllChildMarkers(),this._flagParentsIconsNeedUpdate(e),this._refreshClustersIcons(),this.options.singleMarkerMode&&this._refreshSingleMarkerModeMarkers(e),this},_flagParentsIconsNeedUpdate:function(e){var t,i;for(t in e)for(i=e[t].__parent;i;)i._iconNeedsUpdate=!0,i=i.__parent},_refreshSingleMarkerModeMarkers:function(e){var t,i;for(t in e)i=e[t],this.hasLayer(i)&&i.setIcon(this._overrideMarkerIcon(i))}}),L.Marker.include({refreshIconOptions:function(e,t){var i=this.options.icon;return L.setOptions(i,e),this.setIcon(i),t&&this.__parent&&this.__parent._group.refreshClusters(this),this}})}(window,document);
+
\ No newline at end of file
diff --git a/_site/talkmap/leaflet_dist/screen.css b/_site/talkmap/leaflet_dist/screen.css
new file mode 100644
index 0000000..5fa6794
--- /dev/null
+++ b/_site/talkmap/leaflet_dist/screen.css
@@ -0,0 +1,30 @@
+
+ #map {
+ width: 800px;
+ height: 600px;
+ border: 1px solid #ccc;
+ }
+
+ #progress {
+ display: none;
+ position: absolute;
+ z-index: 1000;
+ left: 400px;
+ top: 300px;
+ width: 200px;
+ height: 20px;
+ margin-top: -20px;
+ margin-left: -100px;
+ background-color: #fff;
+ background-color: rgba(255, 255, 255, 0.7);
+ border-radius: 4px;
+ padding: 2px;
+ }
+
+ #progress-bar {
+ width: 0;
+ height: 100%;
+ background-color: #76A6FC;
+ border-radius: 4px;
+ }
+
\ No newline at end of file
diff --git a/_site/talkmap/map.html b/_site/talkmap/map.html
new file mode 100644
index 0000000..6a81aab
--- /dev/null
+++ b/_site/talkmap/map.html
@@ -0,0 +1,45 @@
+
+
+
+
+ Leaflet debug page
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Mouse over a cluster to see the bounds of its children and click a cluster to zoom to those bounds
+
+
+
+
\ No newline at end of file
diff --git a/_site/talkmap/org-locations.js b/_site/talkmap/org-locations.js
new file mode 100644
index 0000000..8662d8b
--- /dev/null
+++ b/_site/talkmap/org-locations.js
@@ -0,0 +1,22 @@
+var addressPoints = [
+ [
+ "Berkeley CA, USA",
+ 37.8708393,
+ -122.2728638
+ ],
+ [
+ "London, UK",
+ 51.5073219,
+ -0.1276473
+ ],
+ [
+ "San Francisco, California",
+ 37.7792808,
+ -122.4192362
+ ],
+ [
+ "Los Angeles, CA",
+ 34.0543942,
+ -118.2439408
+ ]
+];
\ No newline at end of file
diff --git a/_site/teaching/2023-spring-ta.html b/_site/teaching/2023-spring-ta.html
new file mode 100644
index 0000000..92d0d84
--- /dev/null
+++ b/_site/teaching/2023-spring-ta.html
@@ -0,0 +1,327 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+TA of Network Security Experiment - Yuchen Lei
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ TA of Network Security Experiment
+
+
+
+
+
+ Undergraduate course, Wuhan University, CSE , 2023
+
+
+
+
+
+
+
+
+
+ Supervise undergraduate students in completing experiments, review lab reports, and provide grade references
+
+
+
+
+
+
+
+
+
+
+ Share on
+
+
+
+
+ Facebook
+
+ LinkedIn
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/_site/teaching/index.html b/_site/teaching/index.html
new file mode 100644
index 0000000..7964c76
--- /dev/null
+++ b/_site/teaching/index.html
@@ -0,0 +1,300 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Teaching - Yuchen Lei
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Teaching
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Undergraduate course, Wuhan University, CSE , 2023
+
+
+
+
Supervise undergraduate students in completing experiments, review lab reports, and provide grade references
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/_site/terms/index.html b/_site/terms/index.html
new file mode 100644
index 0000000..dfdbc48
--- /dev/null
+++ b/_site/terms/index.html
@@ -0,0 +1,359 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Terms and Privacy Policy - Yuchen Lei
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Terms and Privacy Policy
+
+
+
+ Published: June 06, 2016
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Privacy Policy
+
+The privacy of my visitors is extremely important. This Privacy Policy outlines the types of personal information that is received and collected and how it is used.
+
+First and foremost, I will never share your email address or any other personal information to anyone without your direct consent.
+
+Log Files
+
+Like many other websites, this site uses log files to help learn about when, from where, and how often traffic flows to this site. The information in these log files include:
+
+
+ Internet Protocol addresses (IP)
+ Types of browser
+ Internet Service Provider (ISP)
+ Date and time stamp
+ Referring and exit pages
+ Number of clicks
+
+
+All of this information is not linked to anything that is personally identifiable.
+
+Cookies and Web Beacons
+
+When you visit this site “convenience” cookies are stored on your computer when you submit a comment to help you log in faster to Disqus the next time you leave a comment.
+
+Third-party advertisers may also place and read cookies on your browser and/or use web beacons to collect information. This site has no access or control over these cookies. You should review the respective privacy policies on any and all third-party ad servers for more information regarding their practices and how to opt-out.
+
+If you wish to disable cookies, you may do so through your web browser options. Instructions for doing so can be found on the specific web browsers’ websites.
+
+Google Analytics
+
+Google Analytics is a web analytics tool I use to help understand how visitors engage with this website. It reports website trends using cookies and web beacons without identifying individual visitors. You can read Google Analytics Privacy Policy .
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/_site/wordpress/blog-posts/index.html b/_site/wordpress/blog-posts/index.html
new file mode 100644
index 0000000..79e8390
--- /dev/null
+++ b/_site/wordpress/blog-posts/index.html
@@ -0,0 +1,11 @@
+
+
+
+ Redirecting…
+
+
+
+
+ Redirecting…
+ Click here if you are not redirected.
+
diff --git a/_site/year-archive/index.html b/_site/year-archive/index.html
new file mode 100644
index 0000000..73ba53e
--- /dev/null
+++ b/_site/year-archive/index.html
@@ -0,0 +1,505 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Blog posts - Yuchen Lei
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Blog posts
+
+
+
+
+
+
+
2199
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ less than 1 minute read
+
+
+
+
+
+ Published: January 01, 2199
+
+
+
+
This post will show up by default. To disable scheduling of future posts, edit config.yml and set future: false.
+
+
+
+
+
+
+
+
+
+
+
+
2015
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ less than 1 minute read
+
+
+
+
+
+ Published: August 14, 2015
+
+
+
+
This is a sample blog post. Lorem ipsum I can’t remember the rest of lorem ipsum and don’t have an internet connection right now. Testing testing testing this blog post. Blog posts are cool.
+
+
+
+
+
+
+
+
+
+
+
+
+
2014
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ less than 1 minute read
+
+
+
+
+
+ Published: August 14, 2014
+
+
+
+
This is a sample blog post. Lorem ipsum I can’t remember the rest of lorem ipsum and don’t have an internet connection right now. Testing testing testing this blog post. Blog posts are cool.
+
+
+
+
+
+
+
+
+
+
+
+
+
2013
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ less than 1 minute read
+
+
+
+
+
+ Published: August 14, 2013
+
+
+
+
This is a sample blog post. Lorem ipsum I can’t remember the rest of lorem ipsum and don’t have an internet connection right now. Testing testing testing this blog post. Blog posts are cool.
+
+
+
+
+
+
+
+
+
+
+
+
+
2012
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ less than 1 minute read
+
+
+
+
+
+ Published: August 14, 2012
+
+
+
+
This is a sample blog post. Lorem ipsum I can’t remember the rest of lorem ipsum and don’t have an internet connection right now. Testing testing testing this blog post. Blog posts are cool.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/_teaching/2023-spring-ta.md b/_teaching/2023-spring-ta.md
new file mode 100644
index 0000000..64daed0
--- /dev/null
+++ b/_teaching/2023-spring-ta.md
@@ -0,0 +1,11 @@
+---
+title: "TA of Network Security Experiment"
+collection: teaching
+type: "Undergraduate course"
+permalink: /teaching/2023-spring-ta.html
+venue: "Wuhan University, CSE"
+date: 2023-06-01
+location: "Wuhan, China"
+---
+
+Supervise undergraduate students in completing experiments, review lab reports, and provide grade references
\ No newline at end of file
diff --git a/assets/css/academicons.css b/assets/css/academicons.css
new file mode 100755
index 0000000..beb9b07
--- /dev/null
+++ b/assets/css/academicons.css
@@ -0,0 +1,327 @@
+/*
+ * Academicons 1.8.0 by James Walsh - https://github.com/jpswalsh
+ * Fonts generated using the IcoMoon app - http://icomoon.io/app
+ * Square icons designed to be used alongside Font Awesome square icons - https://fortawesome.github.io/Font-Awesome/
+ * Licenses - Font: SIL OFL 1.1, CSS: MIT License
+ */
+@font-face {
+ font-family: 'Academicons';
+ src:url('../fonts/academicons.eot?v=1.8.0');
+ src:url('../fonts/academicons.eot?v=1.8.0') format('embedded-opentype'),
+ url('../fonts/academicons.ttf?v=1.8.0') format('truetype'),
+ url('../fonts/academicons.woff?v=1.8.0') format('woff'),
+ url('../fonts/academicons.svg?v=1.8.0#academicons') format('svg');
+ font-weight: normal;
+ font-style: normal;
+}
+.ai {
+ display:inline-block;
+ font:normal normal normal 14px/1 Academicons;
+ font-size:inherit;
+ text-rendering:auto;
+ -webkit-font-smoothing:antialiased;
+ -moz-osx-font-smoothing:grayscale;
+}
+.ai-academia:before {
+ content: "\e800";
+}
+.ai-academia-square:before {
+ content: "\e801";
+}
+.ai-acclaim:before {
+ content: "\e802";
+}
+.ai-acclaim-square:before {
+ content: "\e803";
+}
+.ai-acm:before {
+ content: "\e804";
+}
+.ai-acm-square:before {
+ content: "\e805";
+}
+.ai-ads:before {
+ content: "\e806";
+}
+.ai-ads-square:before {
+ content: "\e807";
+}
+.ai-arxiv:before {
+ content: "\e808";
+}
+.ai-arxiv-square:before {
+ content: "\e809";
+}
+.ai-biorxiv:before {
+ content: "\e810";
+}
+.ai-biorxiv-square:before {
+ content: "\e811";
+}
+.ai-ceur:before {
+ content: "\e812";
+}
+.ai-ceur-box:before {
+ content: "\e813";
+}
+.ai-courser:before {
+ content: "\e814";
+}
+.ai-courser-square:before {
+ content: "\e815";
+}
+.ai-dataverse:before {
+ content: "\e816";
+}
+.ai-dataverse-box:before {
+ content: "\e817";
+}
+.ai-dblp:before {
+ content: "\e818";
+}
+.ai-dblp-square:before {
+ content: "\e819";
+}
+.ai-depsy:before {
+ content: "\e820";
+}
+.ai-depsy-square:before {
+ content: "\e821";
+}
+.ai-doi:before {
+ content: "\e822";
+}
+.ai-doi-square:before {
+ content: "\e823";
+}
+.ai-dryad:before {
+ content: "\e824";
+}
+.ai-dryad-square:before {
+ content: "\e825";
+}
+.ai-figshare:before {
+ content: "\e826";
+}
+.ai-figshare-square:before {
+ content: "\e827";
+}
+.ai-google-scholar:before {
+ content: "\e828";
+}
+.ai-google-scholar-square:before {
+ content: "\e829";
+}
+.ai-ieee:before {
+ content: "\e830";
+}
+.ai-ieee-square:before {
+ content: "\e831";
+}
+.ai-impactstory:before {
+ content: "\e832";
+}
+.ai-impactstory-square:before {
+ content: "\e833";
+}
+.ai-inspire:before {
+ content: "\e834";
+}
+.ai-inspire-square:before {
+ content: "\e835";
+}
+.ai-mendeley:before {
+ content: "\e836";
+}
+.ai-mendeley-square:before {
+ content: "\e837";
+}
+.ai-open-access:before {
+ content: "\e838";
+}
+.ai-open-access-square:before {
+ content: "\e839";
+}
+.ai-orcid:before {
+ content: "\e840";
+}
+.ai-orcid-square:before {
+ content: "\e841";
+}
+.ai-osf:before {
+ content: "\e842";
+}
+.ai-osf-square:before {
+ content: "\e843";
+}
+.ai-overleaf:before {
+ content: "\e844";
+}
+.ai-overleaf-square:before {
+ content: "\e845";
+}
+.ai-philpapers:before {
+ content: "\e846";
+}
+.ai-philpapers-square:before {
+ content: "\e847";
+}
+.ai-piazza:before {
+ content: "\e848";
+}
+.ai-piazza-square:before {
+ content: "\e849";
+}
+.ai-publons:before {
+ content: "\e850";
+}
+.ai-publons-square:before {
+ content: "\e851";
+}
+.ai-pubmed:before {
+ content: "\e852";
+}
+.ai-pubmed-square:before {
+ content: "\e853";
+}
+.ai-researchgate:before {
+ content: "\e854";
+}
+.ai-researchgate-square:before {
+ content: "\e855";
+}
+.ai-scirate:before {
+ content: "\e856";
+}
+.ai-scirate-square:before {
+ content: "\e857";
+}
+.ai-springer:before {
+ content: "\e858";
+}
+.ai-springer-square:before {
+ content: "\e859";
+}
+.ai-zotero:before {
+ content: "\e860";
+}
+.ai-zotero-square:before {
+ content: "\e861";
+}
+/* Duplication of the FontAwesome style classes using 'ai' in place of 'fa'. */
+.ai-lg {
+ font-size: 1.33333333em;
+ line-height: 0.75em;
+ vertical-align: -15%;
+}
+.ai-2x {
+ font-size: 2em;
+}
+.ai-3x {
+ font-size: 3em;
+}
+.ai-4x {
+ font-size: 4em;
+}
+.ai-5x {
+ font-size: 5em;
+}
+.ai-fw {
+ width: 1.28571429em;
+ text-align: center;
+}
+.ai-ul {
+ padding-left: 0;
+ margin-left: 2.14285714em;
+ list-style-type: none;
+}
+.ai-ul > li {
+ position: relative;
+}
+.ai-li {
+ position: absolute;
+ left: -2.14285714em;
+ width: 2.14285714em;
+ top: 0.14285714em;
+ text-align: center;
+}
+.ai-li.fa-lg {
+ left: -1.85714286em;
+}
+.ai-border {
+ padding: .2em .25em .15em;
+ border: solid 0.08em #eeeeee;
+ border-radius: .1em;
+}
+.ai-pull-left {
+ float: left;
+}
+.ai-pull-right {
+ float: right;
+}
+.ai.fa-pull-left {
+ margin-right: .3em;
+}
+.ai.fa-pull-right {
+ margin-left: .3em;
+}
+/*
+ * Repeat of the FontAwesome style classes to prevent override if academicons.css
+ * is called after font-awesome.css.
+ */
+.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;
+}
\ No newline at end of file
diff --git a/assets/css/academicons.min.css b/assets/css/academicons.min.css
new file mode 100755
index 0000000..9275e82
--- /dev/null
+++ b/assets/css/academicons.min.css
@@ -0,0 +1 @@
+.ai-ul,.fa-ul{list-style-type:none}.ai-li,.fa-li{top:.14285714em;text-align:center}.ai-fw,.ai-li,.fa-fw,.fa-li{text-align:center}.ai.fa-pull-left,.fa.fa-pull-left{margin-right:.3em}@font-face{font-family:Academicons;src:url(../fonts/academicons.eot?v=1.8.0);src:url(../fonts/academicons.eot?v=1.8.0) format('embedded-opentype'),url(../fonts/academicons.ttf?v=1.8.0) format('truetype'),url(../fonts/academicons.woff?v=1.8.0) format('woff'),url(../fonts/academicons.svg?v=1.8.0#academicons) format('svg');font-weight:400;font-style:normal}.ai{display:inline-block;font:normal normal normal 14px/1 Academicons;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.ai-lg,.fa-lg{line-height:.75em;vertical-align:-15%}.ai-academia:before{content:"\e800"}.ai-academia-square:before{content:"\e801"}.ai-acclaim:before{content:"\e802"}.ai-acclaim-square:before{content:"\e803"}.ai-acm:before{content:"\e804"}.ai-acm-square:before{content:"\e805"}.ai-ads:before{content:"\e806"}.ai-ads-square:before{content:"\e807"}.ai-arxiv:before{content:"\e808"}.ai-arxiv-square:before{content:"\e809"}.ai-biorxiv:before{content:"\e810"}.ai-biorxiv-square:before{content:"\e811"}.ai-ceur:before{content:"\e812"}.ai-ceur-box:before{content:"\e813"}.ai-courser:before{content:"\e814"}.ai-courser-square:before{content:"\e815"}.ai-dataverse:before{content:"\e816"}.ai-dataverse-box:before{content:"\e817"}.ai-dblp:before{content:"\e818"}.ai-dblp-square:before{content:"\e819"}.ai-depsy:before{content:"\e820"}.ai-depsy-square:before{content:"\e821"}.ai-doi:before{content:"\e822"}.ai-doi-square:before{content:"\e823"}.ai-dryad:before{content:"\e824"}.ai-dryad-square:before{content:"\e825"}.ai-figshare:before{content:"\e826"}.ai-figshare-square:before{content:"\e827"}.ai-google-scholar:before{content:"\e828"}.ai-google-scholar-square:before{content:"\e829"}.ai-ieee:before{content:"\e830"}.ai-ieee-square:before{content:"\e831"}.ai-impactstory:before{content:"\e832"}.ai-impactstory-square:before{content:"\e833"}.ai-inspire:before{content:"\e834"}.ai-inspire-square:before{content:"\e835"}.ai-mendeley:before{content:"\e836"}.ai-mendeley-square:before{content:"\e837"}.ai-open-access:before{content:"\e838"}.ai-open-access-square:before{content:"\e839"}.ai-orcid:before{content:"\e840"}.ai-orcid-square:before{content:"\e841"}.ai-osf:before{content:"\e842"}.ai-osf-square:before{content:"\e843"}.ai-overleaf:before{content:"\e844"}.ai-overleaf-square:before{content:"\e845"}.ai-philpapers:before{content:"\e846"}.ai-philpapers-square:before{content:"\e847"}.ai-piazza:before{content:"\e848"}.ai-piazza-square:before{content:"\e849"}.ai-publons:before{content:"\e850"}.ai-publons-square:before{content:"\e851"}.ai-pubmed:before{content:"\e852"}.ai-pubmed-square:before{content:"\e853"}.ai-researchgate:before{content:"\e854"}.ai-researchgate-square:before{content:"\e855"}.ai-scirate:before{content:"\e856"}.ai-scirate-square:before{content:"\e857"}.ai-springer:before{content:"\e858"}.ai-springer-square:before{content:"\e859"}.ai-zotero:before{content:"\e860"}.ai-zotero-square:before{content:"\e861"}.ai-lg{font-size:1.33333333em}.ai-2x{font-size:2em}.ai-3x{font-size:3em}.ai-4x{font-size:4em}.ai-5x{font-size:5em}.ai-fw{width:1.28571429em}.ai-ul{padding-left:0;margin-left:2.14285714em}.ai-ul>li{position:relative}.ai-li{position:absolute;left:-2.14285714em;width:2.14285714em}.ai-li.fa-lg{left:-1.85714286em}.ai-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.ai-pull-left{float:left}.ai-pull-right{float:right}.ai.fa-pull-right{margin-left:.3em}.fa-lg{font-size:1.33333333em}.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}.fa-ul{padding-left:0;margin-left:2.14285714em}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-right{margin-left:.3em}
\ No newline at end of file
diff --git a/assets/css/collapse.css b/assets/css/collapse.css
new file mode 100644
index 0000000..f6540bc
--- /dev/null
+++ b/assets/css/collapse.css
@@ -0,0 +1,16 @@
+.container {
+ width:100%;
+ border:1px solid #d3d3d3;
+}
+.container div {
+ width:100%;
+}
+.container .header {
+ background-color:#d3d3d3;
+ padding: 2px;
+ cursor: pointer;
+ font-weight: bold;
+}
+.container .content {
+ display: none;
+ padding : 5px;
diff --git a/assets/css/main.scss b/assets/css/main.scss
new file mode 100644
index 0000000..a9399e5
--- /dev/null
+++ b/assets/css/main.scss
@@ -0,0 +1,41 @@
+---
+---
+
+/*
+ * Minimal Mistakes Jekyll Theme
+ *
+ * - Michael Rose
+ * - mademistakes.com
+ * - https://twitter.com/mmistakes
+ *
+*/
+
+@import "vendor/breakpoint/breakpoint"; // media query mixins
+@import "variables";
+@import "mixins";
+@import "vendor/susy/susy";
+
+@import "reset";
+@import "base";
+
+@import "utilities";
+@import "animations";
+@import "tables";
+@import "buttons";
+@import "notices";
+@import "masthead";
+@import "navigation";
+@import "footer";
+@import "syntax";
+
+@import "forms";
+
+@import "page";
+@import "archive";
+@import "sidebar";
+
+@import "vendor/font-awesome/fontawesome";
+@import "vendor/font-awesome/solid";
+@import "vendor/font-awesome/brands";
+@import "vendor/magnific-popup/magnific-popup";
+@import "print";
\ No newline at end of file
diff --git a/assets/fonts/academicons.eot b/assets/fonts/academicons.eot
new file mode 100755
index 0000000..92ef4af
Binary files /dev/null and b/assets/fonts/academicons.eot differ
diff --git a/assets/fonts/academicons.svg b/assets/fonts/academicons.svg
new file mode 100755
index 0000000..86b51a3
--- /dev/null
+++ b/assets/fonts/academicons.svg
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/assets/fonts/academicons.ttf b/assets/fonts/academicons.ttf
new file mode 100755
index 0000000..330b150
Binary files /dev/null and b/assets/fonts/academicons.ttf differ
diff --git a/assets/fonts/academicons.woff b/assets/fonts/academicons.woff
new file mode 100755
index 0000000..ba4de09
Binary files /dev/null and b/assets/fonts/academicons.woff differ
diff --git a/assets/fonts/fa-brands-400.eot b/assets/fonts/fa-brands-400.eot
new file mode 100644
index 0000000..1a675a4
Binary files /dev/null and b/assets/fonts/fa-brands-400.eot differ
diff --git a/assets/fonts/fa-brands-400.svg b/assets/fonts/fa-brands-400.svg
new file mode 100644
index 0000000..5b60e84
--- /dev/null
+++ b/assets/fonts/fa-brands-400.svg
@@ -0,0 +1,1184 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/fonts/fa-brands-400.ttf b/assets/fonts/fa-brands-400.ttf
new file mode 100644
index 0000000..953d567
Binary files /dev/null and b/assets/fonts/fa-brands-400.ttf differ
diff --git a/assets/fonts/fa-brands-400.woff b/assets/fonts/fa-brands-400.woff
new file mode 100644
index 0000000..1ae5263
Binary files /dev/null and b/assets/fonts/fa-brands-400.woff differ
diff --git a/assets/fonts/fa-brands-400.woff2 b/assets/fonts/fa-brands-400.woff2
new file mode 100644
index 0000000..4a07e40
Binary files /dev/null and b/assets/fonts/fa-brands-400.woff2 differ
diff --git a/assets/fonts/fa-regular-400.eot b/assets/fonts/fa-regular-400.eot
new file mode 100644
index 0000000..db3ed40
Binary files /dev/null and b/assets/fonts/fa-regular-400.eot differ
diff --git a/assets/fonts/fa-regular-400.svg b/assets/fonts/fa-regular-400.svg
new file mode 100644
index 0000000..cf3d065
--- /dev/null
+++ b/assets/fonts/fa-regular-400.svg
@@ -0,0 +1,467 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/fonts/fa-regular-400.ttf b/assets/fonts/fa-regular-400.ttf
new file mode 100644
index 0000000..235101c
Binary files /dev/null and b/assets/fonts/fa-regular-400.ttf differ
diff --git a/assets/fonts/fa-regular-400.woff b/assets/fonts/fa-regular-400.woff
new file mode 100644
index 0000000..9058e29
Binary files /dev/null and b/assets/fonts/fa-regular-400.woff differ
diff --git a/assets/fonts/fa-regular-400.woff2 b/assets/fonts/fa-regular-400.woff2
new file mode 100644
index 0000000..1489f64
Binary files /dev/null and b/assets/fonts/fa-regular-400.woff2 differ
diff --git a/assets/fonts/fa-solid-900.eot b/assets/fonts/fa-solid-900.eot
new file mode 100644
index 0000000..cb8d3f0
Binary files /dev/null and b/assets/fonts/fa-solid-900.eot differ
diff --git a/assets/fonts/fa-solid-900.svg b/assets/fonts/fa-solid-900.svg
new file mode 100644
index 0000000..bd7565a
--- /dev/null
+++ b/assets/fonts/fa-solid-900.svg
@@ -0,0 +1,2618 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/fonts/fa-solid-900.ttf b/assets/fonts/fa-solid-900.ttf
new file mode 100644
index 0000000..7c92e98
Binary files /dev/null and b/assets/fonts/fa-solid-900.ttf differ
diff --git a/assets/fonts/fa-solid-900.woff b/assets/fonts/fa-solid-900.woff
new file mode 100644
index 0000000..b7d52cf
Binary files /dev/null and b/assets/fonts/fa-solid-900.woff differ
diff --git a/assets/fonts/fa-solid-900.woff2 b/assets/fonts/fa-solid-900.woff2
new file mode 100644
index 0000000..59d92b2
Binary files /dev/null and b/assets/fonts/fa-solid-900.woff2 differ
diff --git a/assets/js/_main.js b/assets/js/_main.js
new file mode 100644
index 0000000..68aca5c
--- /dev/null
+++ b/assets/js/_main.js
@@ -0,0 +1,98 @@
+/* ==========================================================================
+ jQuery plugin settings and other scripts
+ ========================================================================== */
+
+$(document).ready(function(){
+ // Sticky footer
+ var bumpIt = function() {
+ $("body").css("margin-bottom", $(".page__footer").outerHeight(true));
+ },
+ didResize = false;
+
+ bumpIt();
+
+ $(window).resize(function() {
+ didResize = true;
+ });
+ setInterval(function() {
+ if (didResize) {
+ didResize = false;
+ bumpIt();
+ }
+ }, 250);
+ // FitVids init
+ $("#main").fitVids();
+
+ // init sticky sidebar
+ $(".sticky").Stickyfill();
+
+ var stickySideBar = function(){
+ var show = $(".author__urls-wrapper button").length === 0 ? $(window).width() > 1024 : !$(".author__urls-wrapper button").is(":visible");
+ // console.log("has button: " + $(".author__urls-wrapper button").length === 0);
+ // console.log("Window Width: " + windowWidth);
+ // console.log("show: " + show);
+ //old code was if($(window).width() > 1024)
+ if (show) {
+ // fix
+ Stickyfill.rebuild();
+ Stickyfill.init();
+ $(".author__urls").show();
+ } else {
+ // unfix
+ Stickyfill.stop();
+ $(".author__urls").hide();
+ }
+ };
+
+ stickySideBar();
+
+ $(window).resize(function(){
+ stickySideBar();
+ });
+
+ // Follow menu drop down
+
+ $(".author__urls-wrapper button").on("click", function() {
+ $(".author__urls").fadeToggle("fast", function() {});
+ $(".author__urls-wrapper button").toggleClass("open");
+ });
+
+ // init smooth scroll
+ $("a").smoothScroll({offset: -20});
+
+ // add lightbox class to all image links
+ $("a[href$='.jpg'],a[href$='.jpeg'],a[href$='.JPG'],a[href$='.png'],a[href$='.gif']").addClass("image-popup");
+
+ // Magnific-Popup options
+ $(".image-popup").magnificPopup({
+ // disableOn: function() {
+ // if( $(window).width() < 500 ) {
+ // return false;
+ // }
+ // return true;
+ // },
+ type: 'image',
+ tLoading: 'Loading image #%curr%...',
+ gallery: {
+ enabled: true,
+ navigateByImgClick: true,
+ preload: [0,1] // Will preload 0 - before current, and 1 after the current image
+ },
+ image: {
+ tError: 'Image #%curr% could not be loaded.',
+ },
+ removalDelay: 500, // Delay in milliseconds before popup is removed
+ // Class that is added to body when popup is open.
+ // make it unique to apply your CSS animations just to this exact popup
+ mainClass: 'mfp-zoom-in',
+ callbacks: {
+ beforeOpen: function() {
+ // just a hack that adds mfp-anim class to markup
+ this.st.image.markup = this.st.image.markup.replace('mfp-figure', 'mfp-figure mfp-with-anim');
+ }
+ },
+ closeOnContentClick: true,
+ midClick: true // allow opening popup on middle mouse click. Always set it to true if you don't provide alternative source.
+ });
+
+});
diff --git a/assets/js/collapse.js b/assets/js/collapse.js
new file mode 100644
index 0000000..d182863
--- /dev/null
+++ b/assets/js/collapse.js
@@ -0,0 +1,16 @@
+$(".header").click(function () {
+
+ $header = $(this);
+ //getting the next element
+ $content = $header.next();
+ //open up the content needed - toggle the slide- if visible, slide up, if not slidedown.
+ $content.slideToggle(500, function () {
+ //execute this after slideToggle is done
+ //change text of header based on visibility of content div
+ $header.text(function () {
+ //change text based on condition
+ return $content.is(":visible") ? "Collapse" : "Expand";
+ });
+ });
+
+});
diff --git a/assets/js/main.min.js b/assets/js/main.min.js
new file mode 100644
index 0000000..e44be7f
--- /dev/null
+++ b/assets/js/main.min.js
@@ -0,0 +1,5 @@
+function updateNav(){var e=$btn.hasClass("hidden")?$nav.width():$nav.width()-$btn.width()-30;$vlinks.width()>e?(breaks.push($vlinks.width()),$vlinks.children().last().prependTo($hlinks),$btn.hasClass("hidden")&&$btn.removeClass("hidden")):(e>breaks[breaks.length-1]&&($hlinks.children().first().appendTo($vlinks),breaks.pop()),breaks.length<1&&($btn.addClass("hidden"),$hlinks.addClass("hidden"))),$btn.attr("count",breaks.length),$vlinks.width()>e&&updateNav()}!function(e,t){"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(e,t){function n(e){var t=!!e&&"length"in e&&e.length,n=pe.type(e);return"function"!==n&&!pe.isWindow(e)&&("array"===n||0===t||"number"==typeof t&&t>0&&t-1 in e)}function i(e,t,n){if(pe.isFunction(t))return pe.grep(e,function(e,i){return!!t.call(e,i,e)!==n});if(t.nodeType)return pe.grep(e,function(e){return e===t!==n});if("string"==typeof t){if(Te.test(t))return pe.filter(t,e,n);t=pe.filter(t,e)}return pe.grep(e,function(e){return pe.inArray(e,t)>-1!==n})}function r(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}function o(e){var t={};return pe.each(e.match(Ae)||[],function(e,n){t[n]=!0}),t}function a(){ie.addEventListener?(ie.removeEventListener("DOMContentLoaded",s),e.removeEventListener("load",s)):(ie.detachEvent("onreadystatechange",s),e.detachEvent("onload",s))}function s(){(ie.addEventListener||"load"===e.event.type||"complete"===ie.readyState)&&(a(),pe.ready())}function l(e,t,n){if(void 0===n&&1===e.nodeType){var i="data-"+t.replace(He,"-$1").toLowerCase();if(n=e.getAttribute(i),"string"==typeof n){try{n="true"===n||"false"!==n&&("null"===n?null:+n+""===n?+n:Ie.test(n)?pe.parseJSON(n):n)}catch(e){}pe.data(e,t,n)}else n=void 0}return n}function u(e){var t;for(t in e)if(("data"!==t||!pe.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}function c(e,t,n,i){if(De(e)){var r,o,a=pe.expando,s=e.nodeType,l=s?pe.cache:e,u=s?e[a]:e[a]&&a;if(u&&l[u]&&(i||l[u].data)||void 0!==n||"string"!=typeof t)return u||(u=s?e[a]=ne.pop()||pe.guid++:a),l[u]||(l[u]=s?{}:{toJSON:pe.noop}),"object"!=typeof t&&"function"!=typeof t||(i?l[u]=pe.extend(l[u],t):l[u].data=pe.extend(l[u].data,t)),o=l[u],i||(o.data||(o.data={}),o=o.data),void 0!==n&&(o[pe.camelCase(t)]=n),"string"==typeof t?(r=o[t],null==r&&(r=o[pe.camelCase(t)])):r=o,r}}function d(e,t,n){if(De(e)){var i,r,o=e.nodeType,a=o?pe.cache:e,s=o?e[pe.expando]:pe.expando;if(a[s]){if(t&&(i=n?a[s]:a[s].data)){pe.isArray(t)?t=t.concat(pe.map(t,pe.camelCase)):t in i?t=[t]:(t=pe.camelCase(t),t=t in i?[t]:t.split(" ")),r=t.length;for(;r--;)delete i[t[r]];if(n?!u(i):!pe.isEmptyObject(i))return}(n||(delete a[s].data,u(a[s])))&&(o?pe.cleanData([e],!0):de.deleteExpando||a!=a.window?delete a[s]:a[s]=void 0)}}}function f(e,t,n,i){var r,o=1,a=20,s=i?function(){return i.cur()}:function(){return pe.css(e,t,"")},l=s(),u=n&&n[3]||(pe.cssNumber[t]?"":"px"),c=(pe.cssNumber[t]||"px"!==u&&+l)&&Me.exec(pe.css(e,t));if(c&&c[3]!==u){u=u||c[3],n=n||[],c=+l||1;do o=o||".5",c/=o,pe.style(e,t,c+u);while(o!==(o=s()/l)&&1!==o&&--a)}return n&&(c=+c||+l||0,r=n[1]?c+(n[1]+1)*n[2]:+n[2],i&&(i.unit=u,i.start=c,i.end=r)),r}function p(e){var t=We.split("|"),n=e.createDocumentFragment();if(n.createElement)for(;t.length;)n.createElement(t.pop());return n}function h(e,t){var n,i,r=0,o="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):void 0;if(!o)for(o=[],n=e.childNodes||e;null!=(i=n[r]);r++)!t||pe.nodeName(i,t)?o.push(i):pe.merge(o,h(i,t));return void 0===t||t&&pe.nodeName(e,t)?pe.merge([e],o):o}function m(e,t){for(var n,i=0;null!=(n=e[i]);i++)pe._data(n,"globalEval",!t||pe._data(t[i],"globalEval"))}function g(e){qe.test(e.type)&&(e.defaultChecked=e.checked)}function v(e,t,n,i,r){for(var o,a,s,l,u,c,d,f=e.length,v=p(t),y=[],b=0;f>b;b++)if(a=e[b],a||0===a)if("object"===pe.type(a))pe.merge(y,a.nodeType?[a]:a);else if(Ye.test(a)){for(l=l||v.appendChild(t.createElement("div")),u=($e.exec(a)||["",""])[1].toLowerCase(),d=Xe[u]||Xe._default,l.innerHTML=d[1]+pe.htmlPrefilter(a)+d[2],o=d[0];o--;)l=l.lastChild;if(!de.leadingWhitespace&&Re.test(a)&&y.push(t.createTextNode(Re.exec(a)[0])),!de.tbody)for(a="table"!==u||Ue.test(a)?""!==d[1]||Ue.test(a)?0:l:l.firstChild,o=a&&a.childNodes.length;o--;)pe.nodeName(c=a.childNodes[o],"tbody")&&!c.childNodes.length&&a.removeChild(c);for(pe.merge(y,l.childNodes),l.textContent="";l.firstChild;)l.removeChild(l.firstChild);l=v.lastChild}else y.push(t.createTextNode(a));for(l&&v.removeChild(l),de.appendChecked||pe.grep(h(y,"input"),g),b=0;a=y[b++];)if(i&&pe.inArray(a,i)>-1)r&&r.push(a);else if(s=pe.contains(a.ownerDocument,a),l=h(v.appendChild(a),"script"),s&&m(l),n)for(o=0;a=l[o++];)ze.test(a.type||"")&&n.push(a);return l=null,v}function y(){return!0}function b(){return!1}function x(){try{return ie.activeElement}catch(e){}}function w(e,t,n,i,r,o){var a,s;if("object"==typeof t){"string"!=typeof n&&(i=i||n,n=void 0);for(s in t)w(e,s,n,i,t[s],o);return e}if(null==i&&null==r?(r=n,i=n=void 0):null==r&&("string"==typeof n?(r=i,i=void 0):(r=i,i=n,n=void 0)),r===!1)r=b;else if(!r)return e;return 1===o&&(a=r,r=function(e){return pe().off(e),a.apply(this,arguments)},r.guid=a.guid||(a.guid=pe.guid++)),e.each(function(){pe.event.add(this,t,r,i,n)})}function C(e,t){return pe.nodeName(e,"table")&&pe.nodeName(11!==t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function T(e){return e.type=(null!==pe.find.attr(e,"type"))+"/"+e.type,e}function k(e){var t=rt.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function E(e,t){if(1===t.nodeType&&pe.hasData(e)){var n,i,r,o=pe._data(e),a=pe._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(i=0,r=s[n].length;r>i;i++)pe.event.add(t,n,s[n][i])}a.data&&(a.data=pe.extend({},a.data))}}function S(e,t){var n,i,r;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!de.noCloneEvent&&t[pe.expando]){r=pe._data(t);for(i in r.events)pe.removeEvent(t,i,r.handle);t.removeAttribute(pe.expando)}"script"===n&&t.text!==e.text?(T(t).text=e.text,k(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),de.html5Clone&&e.innerHTML&&!pe.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"===n&&qe.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):"option"===n?t.defaultSelected=t.selected=e.defaultSelected:"input"!==n&&"textarea"!==n||(t.defaultValue=e.defaultValue)}}function N(e,t,n,i){t=oe.apply([],t);var r,o,a,s,l,u,c=0,d=e.length,f=d-1,p=t[0],m=pe.isFunction(p);if(m||d>1&&"string"==typeof p&&!de.checkClone&&it.test(p))return e.each(function(r){var o=e.eq(r);m&&(t[0]=p.call(this,r,o.html())),N(o,t,n,i)});if(d&&(u=v(t,e[0].ownerDocument,!1,e,i),r=u.firstChild,1===u.childNodes.length&&(u=r),r||i)){for(s=pe.map(h(u,"script"),T),a=s.length;d>c;c++)o=u,c!==f&&(o=pe.clone(o,!0,!0),a&&pe.merge(s,h(o,"script"))),n.call(e[c],o,c);if(a)for(l=s[s.length-1].ownerDocument,pe.map(s,k),c=0;a>c;c++)o=s[c],ze.test(o.type||"")&&!pe._data(o,"globalEval")&&pe.contains(l,o)&&(o.src?pe._evalUrl&&pe._evalUrl(o.src):pe.globalEval((o.text||o.textContent||o.innerHTML||"").replace(ot,"")));u=r=null}return e}function L(e,t,n){for(var i,r=t?pe.filter(t,e):e,o=0;null!=(i=r[o]);o++)n||1!==i.nodeType||pe.cleanData(h(i)),i.parentNode&&(n&&pe.contains(i.ownerDocument,i)&&m(h(i,"script")),i.parentNode.removeChild(i));return e}function A(e,t){var n=pe(t.createElement(e)).appendTo(t.body),i=pe.css(n[0],"display");return n.detach(),i}function j(e){var t=ie,n=ut[e];return n||(n=A(e,t),"none"!==n&&n||(lt=(lt||pe("")).appendTo(t.documentElement),t=(lt[0].contentWindow||lt[0].contentDocument).document,t.write(),t.close(),n=A(e,t),lt.detach()),ut[e]=n),n}function _(e,t){return{get:function(){return e()?void delete this.get:(this.get=t).apply(this,arguments)}}}function D(e){if(e in kt)return e;for(var t=e.charAt(0).toUpperCase()+e.slice(1),n=Tt.length;n--;)if(e=Tt[n]+t,e in kt)return e}function I(e,t){for(var n,i,r,o=[],a=0,s=e.length;s>a;a++)i=e[a],i.style&&(o[a]=pe._data(i,"olddisplay"),n=i.style.display,t?(o[a]||"none"!==n||(i.style.display=""),""===i.style.display&&Be(i)&&(o[a]=pe._data(i,"olddisplay",j(i.nodeName)))):(r=Be(i),(n&&"none"!==n||!r)&&pe._data(i,"olddisplay",r?n:pe.css(i,"display"))));for(a=0;s>a;a++)i=e[a],i.style&&(t&&"none"!==i.style.display&&""!==i.style.display||(i.style.display=t?o[a]||"":"none"));return e}function H(e,t,n){var i=xt.exec(t);return i?Math.max(0,i[1]-(n||0))+(i[2]||"px"):t}function O(e,t,n,i,r){for(var o=n===(i?"border":"content")?4:"width"===t?1:0,a=0;4>o;o+=2)"margin"===n&&(a+=pe.css(e,n+Pe[o],!0,r)),i?("content"===n&&(a-=pe.css(e,"padding"+Pe[o],!0,r)),"margin"!==n&&(a-=pe.css(e,"border"+Pe[o]+"Width",!0,r))):(a+=pe.css(e,"padding"+Pe[o],!0,r),"padding"!==n&&(a+=pe.css(e,"border"+Pe[o]+"Width",!0,r)));return a}function M(e,t,n){var i=!0,r="width"===t?e.offsetWidth:e.offsetHeight,o=ht(e),a=de.boxSizing&&"border-box"===pe.css(e,"boxSizing",!1,o);if(0>=r||null==r){if(r=mt(e,t,o),(0>r||null==r)&&(r=e.style[t]),dt.test(r))return r;i=a&&(de.boxSizingReliable()||r===e.style[t]),r=parseFloat(r)||0}return r+O(e,t,n||(a?"border":"content"),i,o)+"px"}function P(e,t,n,i,r){return new P.prototype.init(e,t,n,i,r)}function B(){return e.setTimeout(function(){Et=void 0}),Et=pe.now()}function F(e,t){var n,i={height:e},r=0;for(t=t?1:0;4>r;r+=2-t)n=Pe[r],i["margin"+n]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function q(e,t,n){for(var i,r=(R.tweeners[t]||[]).concat(R.tweeners["*"]),o=0,a=r.length;a>o;o++)if(i=r[o].call(n,t,e))return i}function $(e,t,n){var i,r,o,a,s,l,u,c,d=this,f={},p=e.style,h=e.nodeType&&Be(e),m=pe._data(e,"fxshow");n.queue||(s=pe._queueHooks(e,"fx"),null==s.unqueued&&(s.unqueued=0,l=s.empty.fire,s.empty.fire=function(){s.unqueued||l()}),s.unqueued++,d.always(function(){d.always(function(){s.unqueued--,pe.queue(e,"fx").length||s.empty.fire()})})),1===e.nodeType&&("height"in t||"width"in t)&&(n.overflow=[p.overflow,p.overflowX,p.overflowY],u=pe.css(e,"display"),c="none"===u?pe._data(e,"olddisplay")||j(e.nodeName):u,"inline"===c&&"none"===pe.css(e,"float")&&(de.inlineBlockNeedsLayout&&"inline"!==j(e.nodeName)?p.zoom=1:p.display="inline-block")),n.overflow&&(p.overflow="hidden",de.shrinkWrapBlocks()||d.always(function(){p.overflow=n.overflow[0],p.overflowX=n.overflow[1],p.overflowY=n.overflow[2]}));for(i in t)if(r=t[i],Nt.exec(r)){if(delete t[i],o=o||"toggle"===r,r===(h?"hide":"show")){if("show"!==r||!m||void 0===m[i])continue;h=!0}f[i]=m&&m[i]||pe.style(e,i)}else u=void 0;if(pe.isEmptyObject(f))"inline"===("none"===u?j(e.nodeName):u)&&(p.display=u);else{m?"hidden"in m&&(h=m.hidden):m=pe._data(e,"fxshow",{}),o&&(m.hidden=!h),h?pe(e).show():d.done(function(){pe(e).hide()}),d.done(function(){var t;pe._removeData(e,"fxshow");for(t in f)pe.style(e,t,f[t])});for(i in f)a=q(h?m[i]:0,i,d),i in m||(m[i]=a.start,h&&(a.end=a.start,a.start="width"===i||"height"===i?1:0))}}function z(e,t){var n,i,r,o,a;for(n in e)if(i=pe.camelCase(n),r=t[i],o=e[n],pe.isArray(o)&&(r=o[1],o=e[n]=o[0]),n!==i&&(e[i]=o,delete e[n]),a=pe.cssHooks[i],a&&"expand"in a){o=a.expand(o),delete e[i];for(n in o)n in e||(e[n]=o[n],t[n]=r)}else t[i]=r}function R(e,t,n){var i,r,o=0,a=R.prefilters.length,s=pe.Deferred().always(function(){delete l.elem}),l=function(){if(r)return!1;for(var t=Et||B(),n=Math.max(0,u.startTime+u.duration-t),i=n/u.duration||0,o=1-i,a=0,l=u.tweens.length;l>a;a++)u.tweens[a].run(o);return s.notifyWith(e,[u,o,n]),1>o&&l?n:(s.resolveWith(e,[u]),!1)},u=s.promise({elem:e,props:pe.extend({},t),opts:pe.extend(!0,{specialEasing:{},easing:pe.easing._default},n),originalProperties:t,originalOptions:n,startTime:Et||B(),duration:n.duration,tweens:[],createTween:function(t,n){var i=pe.Tween(e,u.opts,t,n,u.opts.specialEasing[t]||u.opts.easing);return u.tweens.push(i),i},stop:function(t){var n=0,i=t?u.tweens.length:0;if(r)return this;for(r=!0;i>n;n++)u.tweens[n].run(1);return t?(s.notifyWith(e,[u,1,0]),s.resolveWith(e,[u,t])):s.rejectWith(e,[u,t]),this}}),c=u.props;for(z(c,u.opts.specialEasing);a>o;o++)if(i=R.prefilters[o].call(u,e,c,u.opts))return pe.isFunction(i.stop)&&(pe._queueHooks(u.elem,u.opts.queue).stop=pe.proxy(i.stop,i)),i;return pe.map(c,q,u),pe.isFunction(u.opts.start)&&u.opts.start.call(e,u),pe.fx.timer(pe.extend(l,{elem:e,anim:u,queue:u.opts.queue})),u.progress(u.opts.progress).done(u.opts.done,u.opts.complete).fail(u.opts.fail).always(u.opts.always)}function W(e){return pe.attr(e,"class")||""}function X(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var i,r=0,o=t.toLowerCase().match(Ae)||[];if(pe.isFunction(n))for(;i=o[r++];)"+"===i.charAt(0)?(i=i.slice(1)||"*",(e[i]=e[i]||[]).unshift(n)):(e[i]=e[i]||[]).push(n)}}function Y(e,t,n,i){function r(s){var l;return o[s]=!0,pe.each(e[s]||[],function(e,s){var u=s(t,n,i);return"string"!=typeof u||a||o[u]?a?!(l=u):void 0:(t.dataTypes.unshift(u),r(u),!1)}),l}var o={},a=e===Jt;return r(t.dataTypes[0])||!o["*"]&&r("*")}function U(e,t){var n,i,r=pe.ajaxSettings.flatOptions||{};for(i in t)void 0!==t[i]&&((r[i]?e:n||(n={}))[i]=t[i]);return n&&pe.extend(!0,e,n),e}function V(e,t,n){for(var i,r,o,a,s=e.contents,l=e.dataTypes;"*"===l[0];)l.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(a in s)if(s[a]&&s[a].test(r)){l.unshift(a);break}if(l[0]in n)o=l[0];else{for(a in n){if(!l[0]||e.converters[a+" "+l[0]]){o=a;break}i||(i=a)}o=o||i}return o?(o!==l[0]&&l.unshift(o),n[o]):void 0}function G(e,t,n,i){var r,o,a,s,l,u={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)u[a.toLowerCase()]=e.converters[a];for(o=c.shift();o;)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!l&&i&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),l=o,o=c.shift())if("*"===o)o=l;else if("*"!==l&&l!==o){if(a=u[l+" "+o]||u["* "+o],!a)for(r in u)if(s=r.split(" "),s[1]===o&&(a=u[l+" "+s[0]]||u["* "+s[0]])){a===!0?a=u[r]:u[r]!==!0&&(o=s[0],c.unshift(s[1]));break}if(a!==!0)if(a&&e.throws)t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+l+" to "+o}}}return{state:"success",data:t}}function Q(e){return e.style&&e.style.display||pe.css(e,"display")}function Z(e){if(!pe.contains(e.ownerDocument||ie,e))return!0;for(;e&&1===e.nodeType;){if("none"===Q(e)||"hidden"===e.type)return!0;e=e.parentNode}return!1}function J(e,t,n,i){var r;if(pe.isArray(t))pe.each(t,function(t,r){n||rn.test(e)?i(e,r):J(e+"["+("object"==typeof r&&null!=r?t:"")+"]",r,n,i)});else if(n||"object"!==pe.type(t))i(e,t);else for(r in t)J(e+"["+r+"]",t[r],n,i)}function K(){try{return new e.XMLHttpRequest}catch(e){}}function ee(){try{return new e.ActiveXObject("Microsoft.XMLHTTP")}catch(e){}}function te(e){return pe.isWindow(e)?e:9===e.nodeType&&(e.defaultView||e.parentWindow)}var ne=[],ie=e.document,re=ne.slice,oe=ne.concat,ae=ne.push,se=ne.indexOf,le={},ue=le.toString,ce=le.hasOwnProperty,de={},fe="1.12.4",pe=function(e,t){return new pe.fn.init(e,t)},he=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,me=/^-ms-/,ge=/-([\da-z])/gi,ve=function(e,t){return t.toUpperCase()};pe.fn=pe.prototype={jquery:fe,constructor:pe,selector:"",length:0,toArray:function(){return re.call(this)},get:function(e){return null!=e?0>e?this[e+this.length]:this[e]:re.call(this)},pushStack:function(e){var t=pe.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e){return pe.each(this,e)},map:function(e){return this.pushStack(pe.map(this,function(t,n){return e.call(t,n,t)}))},slice:function(){return this.pushStack(re.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:ae,sort:ne.sort,splice:ne.splice},pe.extend=pe.fn.extend=function(){var e,t,n,i,r,o,a=arguments[0]||{},s=1,l=arguments.length,u=!1;for("boolean"==typeof a&&(u=a,a=arguments[s]||{},s++),"object"==typeof a||pe.isFunction(a)||(a={}),s===l&&(a=this,s--);l>s;s++)if(null!=(r=arguments[s]))for(i in r)e=a[i],n=r[i],a!==n&&(u&&n&&(pe.isPlainObject(n)||(t=pe.isArray(n)))?(t?(t=!1,o=e&&pe.isArray(e)?e:[]):o=e&&pe.isPlainObject(e)?e:{},a[i]=pe.extend(u,o,n)):void 0!==n&&(a[i]=n));return a},pe.extend({expando:"jQuery"+(fe+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isFunction:function(e){return"function"===pe.type(e)},isArray:Array.isArray||function(e){return"array"===pe.type(e)},isWindow:function(e){return null!=e&&e==e.window},isNumeric:function(e){var t=e&&e.toString();return!pe.isArray(e)&&t-parseFloat(t)+1>=0},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},isPlainObject:function(e){var t;if(!e||"object"!==pe.type(e)||e.nodeType||pe.isWindow(e))return!1;try{if(e.constructor&&!ce.call(e,"constructor")&&!ce.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(e){return!1}if(!de.ownFirst)for(t in e)return ce.call(e,t);for(t in e);return void 0===t||ce.call(e,t)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?le[ue.call(e)]||"object":typeof e},globalEval:function(t){t&&pe.trim(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(me,"ms-").replace(ge,ve)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t){var i,r=0;if(n(e))for(i=e.length;i>r&&t.call(e[r],r,e[r])!==!1;r++);else for(r in e)if(t.call(e[r],r,e[r])===!1)break;return e},trim:function(e){return null==e?"":(e+"").replace(he,"")},makeArray:function(e,t){var i=t||[];return null!=e&&(n(Object(e))?pe.merge(i,"string"==typeof e?[e]:e):ae.call(i,e)),i},inArray:function(e,t,n){var i;if(t){if(se)return se.call(t,e,n);for(i=t.length,n=n?0>n?Math.max(0,i+n):n:0;i>n;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,t){for(var n=+t.length,i=0,r=e.length;n>i;)e[r++]=t[i++];if(n!==n)for(;void 0!==t[i];)e[r++]=t[i++];return e.length=r,e},grep:function(e,t,n){for(var i,r=[],o=0,a=e.length,s=!n;a>o;o++)i=!t(e[o],o),i!==s&&r.push(e[o]);return r},map:function(e,t,i){var r,o,a=0,s=[];if(n(e))for(r=e.length;r>a;a++)o=t(e[a],a,i),null!=o&&s.push(o);else for(a in e)o=t(e[a],a,i),null!=o&&s.push(o);return oe.apply([],s)},guid:1,proxy:function(e,t){var n,i,r;return"string"==typeof t&&(r=e[t],t=e,e=r),pe.isFunction(e)?(n=re.call(arguments,2),i=function(){return e.apply(t||this,n.concat(re.call(arguments)))},i.guid=e.guid=e.guid||pe.guid++,i):void 0},now:function(){return+new Date},support:de}),"function"==typeof Symbol&&(pe.fn[Symbol.iterator]=ne[Symbol.iterator]),pe.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){le["[object "+t+"]"]=t.toLowerCase()});var ye=function(e){function t(e,t,n,i){var r,o,a,s,l,u,d,p,h=t&&t.ownerDocument,m=t?t.nodeType:9;if(n=n||[],"string"!=typeof e||!e||1!==m&&9!==m&&11!==m)return n;if(!i&&((t?t.ownerDocument||t:q)!==D&&_(t),t=t||D,H)){if(11!==m&&(u=ve.exec(e)))if(r=u[1]){if(9===m){if(!(a=t.getElementById(r)))return n;if(a.id===r)return n.push(a),n}else if(h&&(a=h.getElementById(r))&&B(t,a)&&a.id===r)return n.push(a),n}else{if(u[2])return J.apply(n,t.getElementsByTagName(e)),n;if((r=u[3])&&w.getElementsByClassName&&t.getElementsByClassName)return J.apply(n,t.getElementsByClassName(r)),n}if(w.qsa&&!X[e+" "]&&(!O||!O.test(e))){if(1!==m)h=t,p=e;else if("object"!==t.nodeName.toLowerCase()){for((s=t.getAttribute("id"))?s=s.replace(be,"\\$&"):t.setAttribute("id",s=F),d=E(e),o=d.length,l=fe.test(s)?"#"+s:"[id='"+s+"']";o--;)d[o]=l+" "+f(d[o]);p=d.join(","),h=ye.test(e)&&c(t.parentNode)||t}if(p)try{return J.apply(n,h.querySelectorAll(p)),n}catch(e){}finally{s===F&&t.removeAttribute("id")}}}return N(e.replace(se,"$1"),t,n,i)}function n(){function e(n,i){return t.push(n+" ")>C.cacheLength&&delete e[t.shift()],e[n+" "]=i}var t=[];return e}function i(e){return e[F]=!0,e}function r(e){var t=D.createElement("div");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function o(e,t){for(var n=e.split("|"),i=n.length;i--;)C.attrHandle[n[i]]=t}function a(e,t){var n=t&&e,i=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||U)-(~e.sourceIndex||U);if(i)return i;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function s(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function l(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function u(e){return i(function(t){return t=+t,i(function(n,i){for(var r,o=e([],n.length,t),a=o.length;a--;)n[r=o[a]]&&(n[r]=!(i[r]=n[r]))})})}function c(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}function d(){}function f(e){for(var t=0,n=e.length,i="";n>t;t++)i+=e[t].value;return i}function p(e,t,n){var i=t.dir,r=n&&"parentNode"===i,o=z++;return t.first?function(t,n,o){for(;t=t[i];)if(1===t.nodeType||r)return e(t,n,o)}:function(t,n,a){var s,l,u,c=[$,o];if(a){for(;t=t[i];)if((1===t.nodeType||r)&&e(t,n,a))return!0}else for(;t=t[i];)if(1===t.nodeType||r){if(u=t[F]||(t[F]={}),l=u[t.uniqueID]||(u[t.uniqueID]={}),(s=l[i])&&s[0]===$&&s[1]===o)return c[2]=s[2];if(l[i]=c,c[2]=e(t,n,a))return!0}}}function h(e){return e.length>1?function(t,n,i){for(var r=e.length;r--;)if(!e[r](t,n,i))return!1;return!0}:e[0]}function m(e,n,i){for(var r=0,o=n.length;o>r;r++)t(e,n[r],i);return i}function g(e,t,n,i,r){for(var o,a=[],s=0,l=e.length,u=null!=t;l>s;s++)(o=e[s])&&(n&&!n(o,i,r)||(a.push(o),u&&t.push(s)));return a}function v(e,t,n,r,o,a){return r&&!r[F]&&(r=v(r)),o&&!o[F]&&(o=v(o,a)),i(function(i,a,s,l){var u,c,d,f=[],p=[],h=a.length,v=i||m(t||"*",s.nodeType?[s]:s,[]),y=!e||!i&&t?v:g(v,f,e,s,l),b=n?o||(i?e:h||r)?[]:a:y;if(n&&n(y,b,s,l),r)for(u=g(b,p),r(u,[],s,l),c=u.length;c--;)(d=u[c])&&(b[p[c]]=!(y[p[c]]=d));if(i){if(o||e){if(o){for(u=[],c=b.length;c--;)(d=b[c])&&u.push(y[c]=d);o(null,b=[],u,l)}for(c=b.length;c--;)(d=b[c])&&(u=o?ee(i,d):f[c])>-1&&(i[u]=!(a[u]=d))}}else b=g(b===a?b.splice(h,b.length):b),o?o(null,a,b,l):J.apply(a,b)})}function y(e){for(var t,n,i,r=e.length,o=C.relative[e[0].type],a=o||C.relative[" "],s=o?1:0,l=p(function(e){return e===t},a,!0),u=p(function(e){return ee(t,e)>-1},a,!0),c=[function(e,n,i){var r=!o&&(i||n!==L)||((t=n).nodeType?l(e,n,i):u(e,n,i));return t=null,r}];r>s;s++)if(n=C.relative[e[s].type])c=[p(h(c),n)];else{if(n=C.filter[e[s].type].apply(null,e[s].matches),n[F]){for(i=++s;r>i&&!C.relative[e[i].type];i++);return v(s>1&&h(c),s>1&&f(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace(se,"$1"),n,i>s&&y(e.slice(s,i)),r>i&&y(e=e.slice(i)),r>i&&f(e))}c.push(n)}return h(c)}function b(e,n){var r=n.length>0,o=e.length>0,a=function(i,a,s,l,u){var c,d,f,p=0,h="0",m=i&&[],v=[],y=L,b=i||o&&C.find.TAG("*",u),x=$+=null==y?1:Math.random()||.1,w=b.length;for(u&&(L=a===D||a||u);h!==w&&null!=(c=b[h]);h++){if(o&&c){for(d=0,a||c.ownerDocument===D||(_(c),s=!H);f=e[d++];)if(f(c,a||D,s)){l.push(c);break}u&&($=x)}r&&((c=!f&&c)&&p--,i&&m.push(c))}if(p+=h,r&&h!==p){for(d=0;f=n[d++];)f(m,v,a,s);if(i){if(p>0)for(;h--;)m[h]||v[h]||(v[h]=Q.call(l));v=g(v)}J.apply(l,v),u&&!i&&v.length>0&&p+n.length>1&&t.uniqueSort(l)}return u&&($=x,L=y),m};return r?i(a):a}var x,w,C,T,k,E,S,N,L,A,j,_,D,I,H,O,M,P,B,F="sizzle"+1*new Date,q=e.document,$=0,z=0,R=n(),W=n(),X=n(),Y=function(e,t){return e===t&&(j=!0),0},U=1<<31,V={}.hasOwnProperty,G=[],Q=G.pop,Z=G.push,J=G.push,K=G.slice,ee=function(e,t){for(var n=0,i=e.length;i>n;n++)if(e[n]===t)return n;return-1},te="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",ne="[\\x20\\t\\r\\n\\f]",ie="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",re="\\["+ne+"*("+ie+")(?:"+ne+"*([*^$|!~]?=)"+ne+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+ie+"))|)"+ne+"*\\]",oe=":("+ie+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+re+")*)|.*)\\)|)",ae=new RegExp(ne+"+","g"),se=new RegExp("^"+ne+"+|((?:^|[^\\\\])(?:\\\\.)*)"+ne+"+$","g"),le=new RegExp("^"+ne+"*,"+ne+"*"),ue=new RegExp("^"+ne+"*([>+~]|"+ne+")"+ne+"*"),ce=new RegExp("="+ne+"*([^\\]'\"]*?)"+ne+"*\\]","g"),de=new RegExp(oe),fe=new RegExp("^"+ie+"$"),pe={ID:new RegExp("^#("+ie+")"),CLASS:new RegExp("^\\.("+ie+")"),TAG:new RegExp("^("+ie+"|[*])"),ATTR:new RegExp("^"+re),PSEUDO:new RegExp("^"+oe),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ne+"*(even|odd|(([+-]|)(\\d*)n|)"+ne+"*(?:([+-]|)"+ne+"*(\\d+)|))"+ne+"*\\)|)","i"),bool:new RegExp("^(?:"+te+")$","i"),needsContext:new RegExp("^"+ne+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ne+"*((?:-\\d)?\\d*)"+ne+"*\\)|)(?=[^-]|$)","i")},he=/^(?:input|select|textarea|button)$/i,me=/^h\d$/i,ge=/^[^{]+\{\s*\[native \w/,ve=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ye=/[+~]/,be=/'|\\/g,xe=new RegExp("\\\\([\\da-f]{1,6}"+ne+"?|("+ne+")|.)","ig"),we=function(e,t,n){var i="0x"+t-65536;return i!==i||n?t:0>i?String.fromCharCode(i+65536):String.fromCharCode(i>>10|55296,1023&i|56320)},Ce=function(){_()};try{J.apply(G=K.call(q.childNodes),q.childNodes),G[q.childNodes.length].nodeType}catch(e){J={apply:G.length?function(e,t){Z.apply(e,K.call(t))}:function(e,t){for(var n=e.length,i=0;e[n++]=t[i++];);e.length=n-1}}}w=t.support={},k=t.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},_=t.setDocument=function(e){var t,n,i=e?e.ownerDocument||e:q;return i!==D&&9===i.nodeType&&i.documentElement?(D=i,I=D.documentElement,H=!k(D),(n=D.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",Ce,!1):n.attachEvent&&n.attachEvent("onunload",Ce)),w.attributes=r(function(e){return e.className="i",!e.getAttribute("className")}),w.getElementsByTagName=r(function(e){return e.appendChild(D.createComment("")),!e.getElementsByTagName("*").length}),w.getElementsByClassName=ge.test(D.getElementsByClassName),w.getById=r(function(e){return I.appendChild(e).id=F,!D.getElementsByName||!D.getElementsByName(F).length}),w.getById?(C.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&H){var n=t.getElementById(e);return n?[n]:[]}},C.filter.ID=function(e){var t=e.replace(xe,we);return function(e){return e.getAttribute("id")===t}}):(delete C.find.ID,C.filter.ID=function(e){var t=e.replace(xe,we);return function(e){var n="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}}),C.find.TAG=w.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):w.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,i=[],r=0,o=t.getElementsByTagName(e);if("*"===e){for(;n=o[r++];)1===n.nodeType&&i.push(n);return i}return o},C.find.CLASS=w.getElementsByClassName&&function(e,t){return"undefined"!=typeof t.getElementsByClassName&&H?t.getElementsByClassName(e):void 0},M=[],O=[],(w.qsa=ge.test(D.querySelectorAll))&&(r(function(e){I.appendChild(e).innerHTML=" ",e.querySelectorAll("[msallowcapture^='']").length&&O.push("[*^$]="+ne+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||O.push("\\["+ne+"*(?:value|"+te+")"),e.querySelectorAll("[id~="+F+"-]").length||O.push("~="),e.querySelectorAll(":checked").length||O.push(":checked"),e.querySelectorAll("a#"+F+"+*").length||O.push(".#.+[+~]")}),r(function(e){var t=D.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&O.push("name"+ne+"*[*^$|!~]?="),e.querySelectorAll(":enabled").length||O.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),O.push(",.*:")})),(w.matchesSelector=ge.test(P=I.matches||I.webkitMatchesSelector||I.mozMatchesSelector||I.oMatchesSelector||I.msMatchesSelector))&&r(function(e){w.disconnectedMatch=P.call(e,"div"),P.call(e,"[s!='']:x"),M.push("!=",oe)}),O=O.length&&new RegExp(O.join("|")),M=M.length&&new RegExp(M.join("|")),t=ge.test(I.compareDocumentPosition),B=t||ge.test(I.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,i=t&&t.parentNode;return e===i||!(!i||1!==i.nodeType||!(n.contains?n.contains(i):e.compareDocumentPosition&&16&e.compareDocumentPosition(i)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},Y=t?function(e,t){if(e===t)return j=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n?n:(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1,1&n||!w.sortDetached&&t.compareDocumentPosition(e)===n?e===D||e.ownerDocument===q&&B(q,e)?-1:t===D||t.ownerDocument===q&&B(q,t)?1:A?ee(A,e)-ee(A,t):0:4&n?-1:1)}:function(e,t){if(e===t)return j=!0,0;var n,i=0,r=e.parentNode,o=t.parentNode,s=[e],l=[t];if(!r||!o)return e===D?-1:t===D?1:r?-1:o?1:A?ee(A,e)-ee(A,t):0;if(r===o)return a(e,t);for(n=e;n=n.parentNode;)s.unshift(n);for(n=t;n=n.parentNode;)l.unshift(n);for(;s[i]===l[i];)i++;return i?a(s[i],l[i]):s[i]===q?-1:l[i]===q?1:0},D):D},t.matches=function(e,n){return t(e,null,null,n)},t.matchesSelector=function(e,n){if((e.ownerDocument||e)!==D&&_(e),n=n.replace(ce,"='$1']"),w.matchesSelector&&H&&!X[n+" "]&&(!M||!M.test(n))&&(!O||!O.test(n)))try{var i=P.call(e,n);if(i||w.disconnectedMatch||e.document&&11!==e.document.nodeType)return i}catch(e){}return t(n,D,null,[e]).length>0},t.contains=function(e,t){return(e.ownerDocument||e)!==D&&_(e),B(e,t)},t.attr=function(e,t){(e.ownerDocument||e)!==D&&_(e);var n=C.attrHandle[t.toLowerCase()],i=n&&V.call(C.attrHandle,t.toLowerCase())?n(e,t,!H):void 0;return void 0!==i?i:w.attributes||!H?e.getAttribute(t):(i=e.getAttributeNode(t))&&i.specified?i.value:null},t.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},t.uniqueSort=function(e){var t,n=[],i=0,r=0;if(j=!w.detectDuplicates,A=!w.sortStable&&e.slice(0),e.sort(Y),j){for(;t=e[r++];)t===e[r]&&(i=n.push(r));for(;i--;)e.splice(n[i],1)}return A=null,e},T=t.getText=function(e){var t,n="",i=0,r=e.nodeType;if(r){if(1===r||9===r||11===r){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=T(e)}else if(3===r||4===r)return e.nodeValue}else for(;t=e[i++];)n+=T(t);return n},C=t.selectors={cacheLength:50,createPseudo:i,match:pe,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(xe,we),e[3]=(e[3]||e[4]||e[5]||"").replace(xe,we),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||t.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&t.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return pe.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&de.test(n)&&(t=E(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(xe,we).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=R[e+" "];return t||(t=new RegExp("(^|"+ne+")"+e+"("+ne+"|$)"))&&R(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(e,n,i){return function(r){var o=t.attr(r,e);return null==o?"!="===n:!n||(o+="","="===n?o===i:"!="===n?o!==i:"^="===n?i&&0===o.indexOf(i):"*="===n?i&&o.indexOf(i)>-1:"$="===n?i&&o.slice(-i.length)===i:"~="===n?(" "+o.replace(ae," ")+" ").indexOf(i)>-1:"|="===n&&(o===i||o.slice(0,i.length+1)===i+"-"))}},CHILD:function(e,t,n,i,r){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;
+return 1===i&&0===r?function(e){return!!e.parentNode}:function(t,n,l){var u,c,d,f,p,h,m=o!==a?"nextSibling":"previousSibling",g=t.parentNode,v=s&&t.nodeName.toLowerCase(),y=!l&&!s,b=!1;if(g){if(o){for(;m;){for(f=t;f=f[m];)if(s?f.nodeName.toLowerCase()===v:1===f.nodeType)return!1;h=m="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?g.firstChild:g.lastChild],a&&y){for(f=g,d=f[F]||(f[F]={}),c=d[f.uniqueID]||(d[f.uniqueID]={}),u=c[e]||[],p=u[0]===$&&u[1],b=p&&u[2],f=p&&g.childNodes[p];f=++p&&f&&f[m]||(b=p=0)||h.pop();)if(1===f.nodeType&&++b&&f===t){c[e]=[$,p,b];break}}else if(y&&(f=t,d=f[F]||(f[F]={}),c=d[f.uniqueID]||(d[f.uniqueID]={}),u=c[e]||[],p=u[0]===$&&u[1],b=p),b===!1)for(;(f=++p&&f&&f[m]||(b=p=0)||h.pop())&&((s?f.nodeName.toLowerCase()!==v:1!==f.nodeType)||!++b||(y&&(d=f[F]||(f[F]={}),c=d[f.uniqueID]||(d[f.uniqueID]={}),c[e]=[$,b]),f!==t)););return b-=r,b===i||b%i===0&&b/i>=0}}},PSEUDO:function(e,n){var r,o=C.pseudos[e]||C.setFilters[e.toLowerCase()]||t.error("unsupported pseudo: "+e);return o[F]?o(n):o.length>1?(r=[e,e,"",n],C.setFilters.hasOwnProperty(e.toLowerCase())?i(function(e,t){for(var i,r=o(e,n),a=r.length;a--;)i=ee(e,r[a]),e[i]=!(t[i]=r[a])}):function(e){return o(e,0,r)}):o}},pseudos:{not:i(function(e){var t=[],n=[],r=S(e.replace(se,"$1"));return r[F]?i(function(e,t,n,i){for(var o,a=r(e,null,i,[]),s=e.length;s--;)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),t[0]=null,!n.pop()}}),has:i(function(e){return function(n){return t(e,n).length>0}}),contains:i(function(e){return e=e.replace(xe,we),function(t){return(t.textContent||t.innerText||T(t)).indexOf(e)>-1}}),lang:i(function(e){return fe.test(e||"")||t.error("unsupported lang: "+e),e=e.replace(xe,we).toLowerCase(),function(t){var n;do if(n=H?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===I},focus:function(e){return e===D.activeElement&&(!D.hasFocus||D.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!C.pseudos.empty(e)},header:function(e){return me.test(e.nodeName)},input:function(e){return he.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:u(function(){return[0]}),last:u(function(e,t){return[t-1]}),eq:u(function(e,t,n){return[0>n?n+t:n]}),even:u(function(e,t){for(var n=0;t>n;n+=2)e.push(n);return e}),odd:u(function(e,t){for(var n=1;t>n;n+=2)e.push(n);return e}),lt:u(function(e,t,n){for(var i=0>n?n+t:n;--i>=0;)e.push(i);return e}),gt:u(function(e,t,n){for(var i=0>n?n+t:n;++i2&&"ID"===(a=o[0]).type&&w.getById&&9===t.nodeType&&H&&C.relative[o[1].type]){if(t=(C.find.ID(a.matches[0].replace(xe,we),t)||[])[0],!t)return n;u&&(t=t.parentNode),e=e.slice(o.shift().value.length)}for(r=pe.needsContext.test(e)?0:o.length;r--&&(a=o[r],!C.relative[s=a.type]);)if((l=C.find[s])&&(i=l(a.matches[0].replace(xe,we),ye.test(o[0].type)&&c(t.parentNode)||t))){if(o.splice(r,1),e=i.length&&f(o),!e)return J.apply(n,i),n;break}}return(u||S(e,d))(i,t,!H,n,!t||ye.test(e)&&c(t.parentNode)||t),n},w.sortStable=F.split("").sort(Y).join("")===F,w.detectDuplicates=!!j,_(),w.sortDetached=r(function(e){return 1&e.compareDocumentPosition(D.createElement("div"))}),r(function(e){return e.innerHTML=" ","#"===e.firstChild.getAttribute("href")})||o("type|href|height|width",function(e,t,n){return n?void 0:e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),w.attributes&&r(function(e){return e.innerHTML=" ",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||o("value",function(e,t,n){return n||"input"!==e.nodeName.toLowerCase()?void 0:e.defaultValue}),r(function(e){return null==e.getAttribute("disabled")})||o(te,function(e,t,n){var i;return n?void 0:e[t]===!0?t.toLowerCase():(i=e.getAttributeNode(t))&&i.specified?i.value:null}),t}(e);pe.find=ye,pe.expr=ye.selectors,pe.expr[":"]=pe.expr.pseudos,pe.uniqueSort=pe.unique=ye.uniqueSort,pe.text=ye.getText,pe.isXMLDoc=ye.isXML,pe.contains=ye.contains;var be=function(e,t,n){for(var i=[],r=void 0!==n;(e=e[t])&&9!==e.nodeType;)if(1===e.nodeType){if(r&&pe(e).is(n))break;i.push(e)}return i},xe=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},we=pe.expr.match.needsContext,Ce=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,Te=/^.[^:#\[\.,]*$/;pe.filter=function(e,t,n){var i=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===i.nodeType?pe.find.matchesSelector(i,e)?[i]:[]:pe.find.matches(e,pe.grep(t,function(e){return 1===e.nodeType}))},pe.fn.extend({find:function(e){var t,n=[],i=this,r=i.length;if("string"!=typeof e)return this.pushStack(pe(e).filter(function(){for(t=0;r>t;t++)if(pe.contains(i[t],this))return!0}));for(t=0;r>t;t++)pe.find(e,i[t],n);return n=this.pushStack(r>1?pe.unique(n):n),n.selector=this.selector?this.selector+" "+e:e,n},filter:function(e){return this.pushStack(i(this,e||[],!1))},not:function(e){return this.pushStack(i(this,e||[],!0))},is:function(e){return!!i(this,"string"==typeof e&&we.test(e)?pe(e):e||[],!1).length}});var ke,Ee=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,Se=pe.fn.init=function(e,t,n){var i,r;if(!e)return this;if(n=n||ke,"string"==typeof e){if(i="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:Ee.exec(e),!i||!i[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(i[1]){if(t=t instanceof pe?t[0]:t,pe.merge(this,pe.parseHTML(i[1],t&&t.nodeType?t.ownerDocument||t:ie,!0)),Ce.test(i[1])&&pe.isPlainObject(t))for(i in t)pe.isFunction(this[i])?this[i](t[i]):this.attr(i,t[i]);return this}if(r=ie.getElementById(i[2]),r&&r.parentNode){if(r.id!==i[2])return ke.find(e);this.length=1,this[0]=r}return this.context=ie,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):pe.isFunction(e)?"undefined"!=typeof n.ready?n.ready(e):e(pe):(void 0!==e.selector&&(this.selector=e.selector,this.context=e.context),pe.makeArray(e,this))};Se.prototype=pe.fn,ke=pe(ie);var Ne=/^(?:parents|prev(?:Until|All))/,Le={children:!0,contents:!0,next:!0,prev:!0};pe.fn.extend({has:function(e){var t,n=pe(e,this),i=n.length;return this.filter(function(){for(t=0;i>t;t++)if(pe.contains(this,n[t]))return!0})},closest:function(e,t){for(var n,i=0,r=this.length,o=[],a=we.test(e)||"string"!=typeof e?pe(e,t||this.context):0;r>i;i++)for(n=this[i];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?a.index(n)>-1:1===n.nodeType&&pe.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(o.length>1?pe.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?pe.inArray(this[0],pe(e)):pe.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(pe.uniqueSort(pe.merge(this.get(),pe(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),pe.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return be(e,"parentNode")},parentsUntil:function(e,t,n){return be(e,"parentNode",n)},next:function(e){return r(e,"nextSibling")},prev:function(e){return r(e,"previousSibling")},nextAll:function(e){return be(e,"nextSibling")},prevAll:function(e){return be(e,"previousSibling")},nextUntil:function(e,t,n){return be(e,"nextSibling",n)},prevUntil:function(e,t,n){return be(e,"previousSibling",n)},siblings:function(e){return xe((e.parentNode||{}).firstChild,e)},children:function(e){return xe(e.firstChild)},contents:function(e){return pe.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:pe.merge([],e.childNodes)}},function(e,t){pe.fn[e]=function(n,i){var r=pe.map(this,t,n);return"Until"!==e.slice(-5)&&(i=n),i&&"string"==typeof i&&(r=pe.filter(i,r)),this.length>1&&(Le[e]||(r=pe.uniqueSort(r)),Ne.test(e)&&(r=r.reverse())),this.pushStack(r)}});var Ae=/\S+/g;pe.Callbacks=function(e){e="string"==typeof e?o(e):pe.extend({},e);var t,n,i,r,a=[],s=[],l=-1,u=function(){for(r=e.once,i=t=!0;s.length;l=-1)for(n=s.shift();++l-1;)a.splice(n,1),l>=n&&l--}),this},has:function(e){return e?pe.inArray(e,a)>-1:a.length>0},empty:function(){return a&&(a=[]),this},disable:function(){return r=s=[],a=n="",this},disabled:function(){return!a},lock:function(){return r=!0,n||c.disable(),this},locked:function(){return!!r},fireWith:function(e,n){return r||(n=n||[],n=[e,n.slice?n.slice():n],s.push(n),t||u()),this},fire:function(){return c.fireWith(this,arguments),this},fired:function(){return!!i}};return c},pe.extend({Deferred:function(e){var t=[["resolve","done",pe.Callbacks("once memory"),"resolved"],["reject","fail",pe.Callbacks("once memory"),"rejected"],["notify","progress",pe.Callbacks("memory")]],n="pending",i={state:function(){return n},always:function(){return r.done(arguments).fail(arguments),this},then:function(){var e=arguments;return pe.Deferred(function(n){pe.each(t,function(t,o){var a=pe.isFunction(e[t])&&e[t];r[o[1]](function(){var e=a&&a.apply(this,arguments);e&&pe.isFunction(e.promise)?e.promise().progress(n.notify).done(n.resolve).fail(n.reject):n[o[0]+"With"](this===i?n.promise():this,a?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?pe.extend(e,i):i}},r={};return i.pipe=i.then,pe.each(t,function(e,o){var a=o[2],s=o[3];i[o[1]]=a.add,s&&a.add(function(){n=s},t[1^e][2].disable,t[2][2].lock),r[o[0]]=function(){return r[o[0]+"With"](this===r?i:this,arguments),this},r[o[0]+"With"]=a.fireWith}),i.promise(r),e&&e.call(r,r),r},when:function(e){var t,n,i,r=0,o=re.call(arguments),a=o.length,s=1!==a||e&&pe.isFunction(e.promise)?a:0,l=1===s?e:pe.Deferred(),u=function(e,n,i){return function(r){n[e]=this,i[e]=arguments.length>1?re.call(arguments):r,i===t?l.notifyWith(n,i):--s||l.resolveWith(n,i)}};if(a>1)for(t=new Array(a),n=new Array(a),i=new Array(a);a>r;r++)o[r]&&pe.isFunction(o[r].promise)?o[r].promise().progress(u(r,n,t)).done(u(r,i,o)).fail(l.reject):--s;return s||l.resolveWith(i,o),l.promise()}});var je;pe.fn.ready=function(e){return pe.ready.promise().done(e),this},pe.extend({isReady:!1,readyWait:1,holdReady:function(e){e?pe.readyWait++:pe.ready(!0)},ready:function(e){(e===!0?--pe.readyWait:pe.isReady)||(pe.isReady=!0,e!==!0&&--pe.readyWait>0||(je.resolveWith(ie,[pe]),pe.fn.triggerHandler&&(pe(ie).triggerHandler("ready"),pe(ie).off("ready"))))}}),pe.ready.promise=function(t){if(!je)if(je=pe.Deferred(),"complete"===ie.readyState||"loading"!==ie.readyState&&!ie.documentElement.doScroll)e.setTimeout(pe.ready);else if(ie.addEventListener)ie.addEventListener("DOMContentLoaded",s),e.addEventListener("load",s);else{ie.attachEvent("onreadystatechange",s),e.attachEvent("onload",s);var n=!1;try{n=null==e.frameElement&&ie.documentElement}catch(e){}n&&n.doScroll&&!function t(){if(!pe.isReady){try{n.doScroll("left")}catch(n){return e.setTimeout(t,50)}a(),pe.ready()}}()}return je.promise(t)},pe.ready.promise();var _e;for(_e in pe(de))break;de.ownFirst="0"===_e,de.inlineBlockNeedsLayout=!1,pe(function(){var e,t,n,i;n=ie.getElementsByTagName("body")[0],n&&n.style&&(t=ie.createElement("div"),i=ie.createElement("div"),i.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",n.appendChild(i).appendChild(t),"undefined"!=typeof t.style.zoom&&(t.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",de.inlineBlockNeedsLayout=e=3===t.offsetWidth,e&&(n.style.zoom=1)),n.removeChild(i))}),function(){var e=ie.createElement("div");de.deleteExpando=!0;try{delete e.test}catch(e){de.deleteExpando=!1}e=null}();var De=function(e){var t=pe.noData[(e.nodeName+" ").toLowerCase()],n=+e.nodeType||1;return(1===n||9===n)&&(!t||t!==!0&&e.getAttribute("classid")===t)},Ie=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,He=/([A-Z])/g;pe.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(e){return e=e.nodeType?pe.cache[e[pe.expando]]:e[pe.expando],!!e&&!u(e)},data:function(e,t,n){return c(e,t,n)},removeData:function(e,t){return d(e,t)},_data:function(e,t,n){return c(e,t,n,!0)},_removeData:function(e,t){return d(e,t,!0)}}),pe.fn.extend({data:function(e,t){var n,i,r,o=this[0],a=o&&o.attributes;if(void 0===e){if(this.length&&(r=pe.data(o),1===o.nodeType&&!pe._data(o,"parsedAttrs"))){for(n=a.length;n--;)a[n]&&(i=a[n].name,0===i.indexOf("data-")&&(i=pe.camelCase(i.slice(5)),l(o,i,r[i])));pe._data(o,"parsedAttrs",!0)}return r}return"object"==typeof e?this.each(function(){pe.data(this,e)}):arguments.length>1?this.each(function(){pe.data(this,e,t)}):o?l(o,e,pe.data(o,e)):void 0},removeData:function(e){return this.each(function(){pe.removeData(this,e)})}}),pe.extend({queue:function(e,t,n){var i;return e?(t=(t||"fx")+"queue",i=pe._data(e,t),n&&(!i||pe.isArray(n)?i=pe._data(e,t,pe.makeArray(n)):i.push(n)),i||[]):void 0},dequeue:function(e,t){t=t||"fx";var n=pe.queue(e,t),i=n.length,r=n.shift(),o=pe._queueHooks(e,t),a=function(){pe.dequeue(e,t)};"inprogress"===r&&(r=n.shift(),i--),r&&("fx"===t&&n.unshift("inprogress"),delete o.stop,r.call(e,a,o)),!i&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return pe._data(e,n)||pe._data(e,n,{empty:pe.Callbacks("once memory").add(function(){pe._removeData(e,t+"queue"),pe._removeData(e,n)})})}}),pe.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.lengths;s++)t(e[s],n,a?i:i.call(e[s],s,t(e[s],n)));return r?e:u?t.call(e):l?t(e[0],n):o},qe=/^(?:checkbox|radio)$/i,$e=/<([\w:-]+)/,ze=/^$|\/(?:java|ecma)script/i,Re=/^\s+/,We="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";!function(){var e=ie.createElement("div"),t=ie.createDocumentFragment(),n=ie.createElement("input");e.innerHTML=" a ",de.leadingWhitespace=3===e.firstChild.nodeType,de.tbody=!e.getElementsByTagName("tbody").length,de.htmlSerialize=!!e.getElementsByTagName("link").length,de.html5Clone="<:nav>"!==ie.createElement("nav").cloneNode(!0).outerHTML,n.type="checkbox",n.checked=!0,t.appendChild(n),de.appendChecked=n.checked,e.innerHTML="",de.noCloneChecked=!!e.cloneNode(!0).lastChild.defaultValue,t.appendChild(e),n=ie.createElement("input"),n.setAttribute("type","radio"),n.setAttribute("checked","checked"),n.setAttribute("name","t"),e.appendChild(n),de.checkClone=e.cloneNode(!0).cloneNode(!0).lastChild.checked,de.noCloneEvent=!!e.addEventListener,e[pe.expando]=1,de.attributes=!e.getAttribute(pe.expando)}();var Xe={option:[1,""," "],legend:[1,""," "],area:[1,""," "],param:[1,""," "],thead:[1,""],tr:[2,""],col:[2,""],td:[3,""],_default:de.htmlSerialize?[0,"",""]:[1,"X","
"]};Xe.optgroup=Xe.option,Xe.tbody=Xe.tfoot=Xe.colgroup=Xe.caption=Xe.thead,Xe.th=Xe.td;var Ye=/<|?\w+;/,Ue=/-1&&(h=p.split("."),p=h.shift(),h.sort()),a=p.indexOf(":")<0&&"on"+p,t=t[pe.expando]?t:new pe.Event(p,"object"==typeof t&&t),t.isTrigger=r?2:3,t.namespace=h.join("."),t.rnamespace=t.namespace?new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=i),n=null==n?[t]:pe.makeArray(n,[t]),u=pe.event.special[p]||{},r||!u.trigger||u.trigger.apply(i,n)!==!1)){if(!r&&!u.noBubble&&!pe.isWindow(i)){for(l=u.delegateType||p,Ze.test(l+p)||(s=s.parentNode);s;s=s.parentNode)f.push(s),c=s;c===(i.ownerDocument||ie)&&f.push(c.defaultView||c.parentWindow||e)}for(d=0;(s=f[d++])&&!t.isPropagationStopped();)t.type=d>1?l:u.bindType||p,o=(pe._data(s,"events")||{})[t.type]&&pe._data(s,"handle"),o&&o.apply(s,n),o=a&&s[a],o&&o.apply&&De(s)&&(t.result=o.apply(s,n),t.result===!1&&t.preventDefault());if(t.type=p,!r&&!t.isDefaultPrevented()&&(!u._default||u._default.apply(f.pop(),n)===!1)&&De(i)&&a&&i[p]&&!pe.isWindow(i)){c=i[a],c&&(i[a]=null),pe.event.triggered=p;try{i[p]()}catch(e){}pe.event.triggered=void 0,c&&(i[a]=c)}return t.result}},dispatch:function(e){e=pe.event.fix(e);var t,n,i,r,o,a=[],s=re.call(arguments),l=(pe._data(this,"events")||{})[e.type]||[],u=pe.event.special[e.type]||{};if(s[0]=e,e.delegateTarget=this,!u.preDispatch||u.preDispatch.call(this,e)!==!1){for(a=pe.event.handlers.call(this,e,l),t=0;(r=a[t++])&&!e.isPropagationStopped();)for(e.currentTarget=r.elem,n=0;(o=r.handlers[n++])&&!e.isImmediatePropagationStopped();)e.rnamespace&&!e.rnamespace.test(o.namespace)||(e.handleObj=o,e.data=o.data,i=((pe.event.special[o.origType]||{}).handle||o.handler).apply(r.elem,s),void 0!==i&&(e.result=i)===!1&&(e.preventDefault(),e.stopPropagation()));return u.postDispatch&&u.postDispatch.call(this,e),e.result}},handlers:function(e,t){var n,i,r,o,a=[],s=t.delegateCount,l=e.target;if(s&&l.nodeType&&("click"!==e.type||isNaN(e.button)||e.button<1))for(;l!=this;l=l.parentNode||this)if(1===l.nodeType&&(l.disabled!==!0||"click"!==e.type)){for(i=[],n=0;s>n;n++)o=t[n],r=o.selector+" ",void 0===i[r]&&(i[r]=o.needsContext?pe(r,this).index(l)>-1:pe.find(r,this,null,[l]).length),i[r]&&i.push(o);i.length&&a.push({elem:l,handlers:i})}return s ]","i"),tt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,nt=/
+
+
+
+
+
+
+
+
+
+
+
+
+ Mouse over a cluster to see the bounds of its children and click a cluster to zoom to those bounds
+
+
+
{{ site.data.ui-text[site.locale].comments_title | default: "Comments" }}
+ {% assign comments = site.data.comments[page.slug] | sort %} + + {% for comment in comments %} + {% assign email = comment[1].email %} + {% assign name = comment[1].name %} + {% assign url = comment[1].url %} + {% assign date = comment[1].date %} + {% assign message = comment[1].message %} + {% include comment.html index=forloop.index email=email name=name url=url date=date message=message %} + {% endfor %} + {% endif %} +{{ site.data.ui-text[site.locale].comments_label | default: "Leave a Comment" }}
+{{ site.data.ui-text[site.locale].comment_form_info | default: "Your email address will not be published. Required fields are marked" }} *
+ + + {% endif %} +