diff --git a/.env.example b/.env.example deleted file mode 100644 index b694e90d5f8c53091db294867391e6750a401ff1..0000000000000000000000000000000000000000 --- a/.env.example +++ /dev/null @@ -1,6 +0,0 @@ -POSTGRES_DB=statussite -POSTGRES_USER=statususer -POSTGRES_PASSWORD=SomethingWeird15 - -# BRANCH TAG (DO NOT MODIFY) - diff --git a/.gitignore b/.gitignore index e5745f4304aa3936853bc504e04fd6ff9ba6a372..c55852de03810de5500ec3677d25fdd273001491 100644 --- a/.gitignore +++ b/.gitignore @@ -60,3 +60,5 @@ debian/build test/appsettings.* *lock.json + +docker-compose-*.yml diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index f67e7e82b6179d3b9c8b06bef56084f581659025..e9c7ad1bda25389ba82fa8f5689052721c46d016 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,4 +1,5 @@ stages: +- lint - build - test - release @@ -6,6 +7,16 @@ stages: before_script: - export DOTNET_TAG="$CI_BUILD_REF_NAME" +## LINT + +cspell-docs: + image: dbogatov/docker-images:cspell-latest + stage: lint + script: + - ./build.sh -f test-docs-spell-ci + tags: + - docker + ## BUILD build-docs: @@ -24,8 +35,7 @@ build-ping: image: golang:alpine stage: build script: - - apk update - - apk add bash + - apk --update add bash - ./build.sh -f build-ping-server artifacts: expire_in: 90 min @@ -54,13 +64,13 @@ build-app: unit-test-app: stage: test image: microsoft/dotnet:2.0.3-sdk + dependencies: [] script: - printf "{\"Version\":{\"GitHash\":\"%s\"}}" $CI_BUILD_REF > src/version.json - cd test - dotnet restore - dotnet build - - ./test.sh | tee tests.out - - "cat tests.out | grep 'Test Run Successful.'" + - ./test.sh | tee /dev/stderr | grep 'Test Run Successful.' tags: - docker @@ -75,8 +85,8 @@ tidy-app: - dotnet web.dll > /dev/null & - sleep 15 script: - - curl -Ls http://localhost:5555/ | tidy -e - - curl -Ls http://localhost:5555/home/metric/CpuLoad/the-source | tidy -e + - curl -Ls http://localhost | tidy -e + - curl -Ls http://localhost/home/metric/CpuLoad/the-source | tidy -e tags: - docker @@ -91,7 +101,7 @@ blc-app: - dotnet web.dll > /dev/null & - sleep 15 script: - - blc --filter-level 3 --input http://localhost:5555 -rog --exclude "*linkedin.*" --exclude "*authenticate*" + - blc --filter-level 3 --input http://localhost -rog --exclude "*linkedin.*" --exclude "*authenticate*" | tee /dev/stderr | grep 'Finished!' | tail -1 | grep '0 broken.' tags: - docker @@ -101,10 +111,10 @@ blc-docs: dependencies: - build-docs before_script: - - http-server documentation/out/ -p 8080 > /dev/null & + - http-server documentation/out/ -p 80 > /dev/null & - sleep 5 script: - - blc --filter-level 3 --input http://localhost:8080 -rog --exclude "*linkedin.*" --exclude "*doxygen.*" --exclude "*status.dbogatov.org*" + - blc --filter-level 3 --input http://localhost -rog --exclude "*linkedin.*" --exclude "*doxygen.*" --exclude "*status.dbogatov.org*" --exclude "*github.com*" --exclude "*git.dbogatov.org*" | tee /dev/stderr | grep 'Finished!' | tail -1 | grep '0 broken.' tags: - docker @@ -120,12 +130,11 @@ release-app-docs: - ./build.sh -f build-docker-images - docker login -u $DOCKER_USER -p $DOCKER_PASS - ./build.sh -f push-docker-images - - cp src/appsettings.production.yml appsettings.yml.example + - ./build.sh -f build-compose-files artifacts: paths: - docker-compose.yml - - .env.example - - appsettings.yml.example + - appsettings.production.yml tags: - shell diff --git a/.vscode/launch.json b/.vscode/launch.json index ccbddd27e87dcb1d331d9b4b6695a967d5740a24..80b084b170b642d7370d16ddd58a033e6396e7be 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -15,7 +15,7 @@ "preLaunchTask": "build-web", "justMyCode": false, "program": "${workspaceRoot}/src/web/bin/Debug/netcoreapp2.0/web.dll", - "args": [], + "args": ["5555"], "cwd": "${workspaceRoot}/src/web", "externalConsole": false, "stopAtEntry": false, diff --git a/.vscode/settings.json b/.vscode/settings.json index 3dfc77a06d0531bde811b4192a75760ebb9900c6..c34d3fb02ba428c66e7424cf91266900858a79b3 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,3 +1,30 @@ // Place your settings in this file to overwrite default and user settings. { + "cSpell.words": [ + "ASPNETCORE", + "Doxyfile", + "FQDN", + "Intelli", + "Notificator", + "Postgre", + "SMTP", + "SPAMing", + "appsettings", + "captcha", + "doxygen", + "gitlab", + "makerchip", + "mattermost", + "minified", + "mkdir", + "mkdocs", + "nginx", + "nuget", + "stylesheet", + "timestamps", + "transpiler", + "transpilers", + "typedoc", + "wwwroot" + ] } diff --git a/articles/docs/badges.md b/articles/docs/badges.md index b6f164f5d8ef7faf6e6f88f90232f0422aa15746..3e0cd3f0142999c3a1953b95edc4e6b9c0ed6083 100644 --- a/articles/docs/badges.md +++ b/articles/docs/badges.md @@ -1,3 +1,5 @@ +<!-- cSpell:ignore cpuload --> + # Badges You may put badges on your websites or in your markdown documents. diff --git a/articles/docs/configuration.md b/articles/docs/configuration.md index 2c04e40cf15bc6331d1d45240475c41e80e05f90..50dcd5ace4ac0e01314be9d1cef40b88c5f26c70 100644 --- a/articles/docs/configuration.md +++ b/articles/docs/configuration.md @@ -1,3 +1,5 @@ +<!-- cSpell:ignore SDKJF 5432 SMDFKL sdahjdjhd _678 ajsdvbja asgfdk _876 ajhsvdjh yourdomain logmessage --> + # Configuration ## Developer perspective @@ -26,9 +28,10 @@ Configuration is built in the `Startup` method and is available for [Dependency ## User perspective -It is required to supply `appsettings.yml` file when launching the application with *docker-compose*. -When [deploying with script](deployment/) it is possible to supply *example configuration* to get app up and running. -Then user is free to change the configuration and restart the app. +It is required to supply `appsettings.yml` file as a *docker secret* launching the application with `docker stack deploy`. +Please, refer to [Deployment section](/deployment/) to download example config and supply it as docker secret. +<!-- When [deploying with script](deployment/) it is possible to supply *example configuration* to get app up and running. --> +<!-- Then user is free to change the configuration and restart the app. --> ## Configuration specs @@ -49,7 +52,7 @@ Configuration spec: SecretKey: "asgfdk_876ajhsvdjh" # Secret key provided by Google GoogleAnalytics: TrackingId: "UA-XXXXXXX-X" # Google Analytics tracking number (https://analytics.google.com) - ConnectionString: "connection-strings" # Connection string to PostgreSQL database + ConnectionString: "connection-strings" # Connection string to PostgreSQL database NOT INTENDED TO BE MODIFIED Email: # Email settings Enabled: true # If false, all messages sent to email service will be logged to STDOUT instead ToEmail: "recipient@domain.com" # Email of the recipient @@ -62,7 +65,7 @@ Configuration spec: Security: "StartTls" # SMTP Security option (one of Auto, None, SslOnConnect, StartTls, StartTlsWhenAvailable) Slack: # Slack settings Enabled: true # If false, all messages sent to slack service will be logged to STDOUT instead - WebHook: "https://slack.com/webhooks/a78" # Slack webhook URL which uniquely defines chanel (https://api.slack.com/incoming-webhooks) + WebHook: "https://slack.com/webhooks/a78" # Slack web hook URL which uniquely defines chanel (https://api.slack.com/incoming-webhooks) Data: # Static data put into DB during app initialization. Rarely override this section PingSettings: # Array of servers to ping - ServerUrl: "https://google.com" # URL to ping (FQDN required) @@ -76,8 +79,8 @@ Configuration spec: - "Microsoft." # Example of such string. All messages from "Microsoft" are ignored Guard: # This section defines protection settings for some API endpoints Logging: # Protection of /api/logmessage endpoint from SPAMing - Requests: 10 # Number of requests to allow from a single source and category per timeframe - PerSeconds: 10 # Timeframe in seconds + Requests: 10 # Number of requests to allow from a single source and category per time frame + PerSeconds: 10 # Time frame in seconds ServiceManager: # Settings for daemon part of the app CacheService: # Settings for cache service of the app Enabled: true # Whether to use the service @@ -99,9 +102,9 @@ Configuration spec: Enabled: true # If true, then the gaps in data will be periodically generated Frequency: 10 # N, where once in N runs a gap is generated DiscrepancyService: # Settings for discrepancy service of the app - Enabled: ture # Whether to use the service + Enabled: true # Whether to use the service Interval: 60 # How many seconds to wait between re-runs of the service - DataTimeframe: 800 # Number of seconds of data to consider counting from the time of running the service when looking for discrepancies + DataTimeFrame: 800 # Number of seconds of data to consider counting from the time of running the service when looking for discrepancies Gaps: # Settings for type of discrepancy "Gap in data" MaxDifference: 60 # Number of seconds multiplied by 1.5 to consider as gap Load: # Settings for type of discrepancy "High load" diff --git a/articles/docs/deployment.md b/articles/docs/deployment.md index 0f2acb88a90290373128c0e7d52123789ccd9c8c..f73212faeeaf4f34ede8bbf5dbcc670772400f32 100644 --- a/articles/docs/deployment.md +++ b/articles/docs/deployment.md @@ -1,91 +1,94 @@ # Deployment -## The new way +## Deploy to swarm (preferred way) -Install status site official debian package - control tool. +Status site is designed with swarm in mind. +The preferred way to deploy the system is using `docker stack deploy` command. -* Make sure you have `docker` [installed](https://docs.docker.com/engine/installation/) and `docker-compose` [installed](https://docs.docker.com/compose/install/). -* Add `apt.dbogatov.org`'s key. Run `sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 7BAD7958`. -* Add `apt.dbogatov.org` repository. Run `sudo add-apt-repository "deb http://apt.dbogatov.org/ trusty main"`. -* Update package listings. Run `sudo apt-get update`. -* Install `status-ctl`. Run `sudo apt-get install status-ctl`. +### TL;DR + + #!bash -This will install `status-ctl` in your `/usr/bin/` directory and will create config files in `/etc/status-site/` directory. + # init swarm if necessary + docker swarm init + + # download and set configuration + curl -L -o appsettings.production.yml https://git.dbogatov.org/dbogatov/status-site/-/jobs/artifacts/master/raw/appsettings.production.yml?job=release-app-docs + docker secret create appsettings.production.yml appsettings.production.yml -* Launch the app. Run `status-ctl start`. + # download compose file + curl -L -o docker-compose.yml https://git.dbogatov.org/dbogatov/status-site/-/jobs/artifacts/master/raw/docker-compose.yml?job=release-app-docs -Great! The app is served on port 5555! + # deploy stack + docker stack deploy --compose-file docker-compose.yml status -### To update + # if you want to bind to port 80 + docker service update status_nginx --publish-add 80:80 -Update control tool the way you would update any other debian package. -`sudo apt-get update` and `sudo apt-get upgrade`. + # if you want to join existing docker network + docker service update status_nginx --network-add my-overlay -### What the tool can do + # verify your deployment + docker stack services status -Run `status-ctl help` or `man status-ctl` to view the available options and commands. -## The old way +### Prerequisites -Make sure you have [Docker](https://www.docker.com) and [Docker compose](https://docs.docker.com/compose/) installed. -Run the following command in a directory where you want your configuration files to be. +You need the following before you can deploy a stack into swarm. - #!bash - curl -Ls https://status.dbogatov.org/docs/deploy.sh | bash -s -- -e +* Your docker node has to operate in [*swarm* mode](https://docs.docker.com/engine/swarm/). +* You have to have one *secret* in your swarm - [app config](/configuration/). +* You have to have `docker-compose-yml` file which defines the stack. +* By default, the stack does not open up ports (eq. 80) because it is designed to be a part of an existing infrastructure. +You need to manually either open a port, or hook existing reverse proxy to the stack. -!!! warning - This script does not require `sudo` privileges. - Nevertheless, it is recommended that you examine the script before running it. +Here is the explanation of each of these prerequisites. -!!! tip - You may use `-b feature-branch` to deploy a specific branch. +In general, it does not hurt to convert a regular node to a swarm node (size 1 cluster). +General command is `docker swarm init`. +If you want a truly **highly available** multi-node cluster, you might want to setup a number of nodes. +Please, refer to [docker swarm documentation](https://docs.docker.com/engine/swarm/) for instructions. - #!bash - curl -Ls https://status.dbogatov.org/docs/deploy.sh | bash -s -- -b feature-branch +The stack requires one secret - [app config](/configuration/). +You may download up-to-date example config file [here](https://git.dbogatov.org/dbogatov/status-site/-/jobs/artifacts/master/raw/appsettings.production.yml?job=release-app-docs). +Please, refer to [Configuration section](/configuration/) for config explanation. +Once you have the config (eq. `appsettings.production.yml`), run this command `docker secret create appsettings.production.yml appsettings.production.yml` +!!! warning + PostgreSQL database connection string is hardwired into the application. + It may be changed, though, by manually editing `appsettings.yml` and `docker-compose.yml`. + The security relies on internal docker network created for the stack, so nobody can even access database from the outside. + See up-to-date connection string in [Configuration section](/configuration/). -!!! note - The `e` parameter in `bash -s -- -e` specifies that you want to use example configuration. - Example configuration is conservative - most of the features are disabled, but is still enough for a basic operation of the app. - If you want to change configuration, modify `appsettings.yml` and re-run the command without `-e` argument, otherwise it will override your changes to default example configuration. +`docker-compose.yml` is not intended to be modified. +Download latest version [here](https://git.dbogatov.org/dbogatov/status-site/-/jobs/artifacts/master/raw/docker-compose.yml?job=release-app-docs) -## appsettings.yml and .env +At this point, you are ready to deploy the stack! -There are 4 mandatory files that need to be in the directory alongside with `docker-compose.yml`, so that the app can start. -`appsettings.yml` is the main configuration file, see more in [Configuration](/configuration/). -`.env` file is simply a collection of environmental variables for composition. -Its content is self-explanatory, except for `DOTNET_TAG` which needs to point to the branch you want to use (*master* by default). + #!bash + docker stack deploy --compose-file docker-compose.yml status - POSTGRES_DB=statussite - POSTGRES_USER=statususer - POSTGRES_PASSWORD=SomethingWeird15 +If you want to serve the website on the node where you are deploying the stack, open up ports for **nginx** service of the stack **after** you deploy the stack. - DOTNET_TAG=master + #!bash + docker service update status_nginx --publish-add 80:80 -!!! warning - Environmental variables define database connection settings which you will use in `appsettings.yml`. - For example, for the above env variables, this would be an appropriate database connection string. +If you want to add stack to an existing docker network, run the following - #!yml hl_lines="2" - Secrets: - ConnectionString: "User ID=statususer;Password=SomethingWeird15;Host=database;Port=5432;Database=statussite;Pooling=false;CommandTimeout=300;" + #!bash + docker service update status_nginx --network-add my-overlay -## Manual deployment +You are all set! +Run `docker stack services status` to verify your deployment. -Application is packaged as a collection of docker images with the `docker-compose.yml` file, which knows how to orchestrate those images, and a couple of config files. +!!! tip + Debian package is under construction, which will automate these tasks for you. -Manual deployment procedure is as follows: +## Other deployment strategies (on you own risk) -* Download artifacts archive from [GitLab](https://git.dbogatov.org/dbogatov/status-site). -* Extract its contents. -* Create `appsettings.yml` and `.env`, or use example files (renaming $1.example to $1). -* Stop app if it is running - `docker-compose -p statussite stop`. -* Pull app images - `docker-compose -p statussite pull`. -* Start app - `docker-compose -p statussite up -d --remove-orphans`. +It is possible to run stack as a *docker composition* (using the same `docker-compose.yml` file). +You might need to modify composition file a little. -Now, the app is served on `http://localhost:5555`. +It is also possible to run composition containers manually. -!!! summary - Here are the helpful links: - - * [ASP.Core: Hosting and Deployment](https://docs.microsoft.com/en-us/aspnet/core/publishing/) +Finally, it is possible to build the app from source and serve it from the bare metal. diff --git a/articles/material/404.html b/articles/material/404.html deleted file mode 100644 index 52beb3b8b3b6747860f1e2e056443bbcb7c93405..0000000000000000000000000000000000000000 --- a/articles/material/404.html +++ /dev/null @@ -1,4 +0,0 @@ -{% extends "base.html" %} -{% block content %} - <h1>404 - Not found</h1> -{% endblock %} diff --git a/articles/material/__init__.py b/articles/material/__init__.py deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/articles/material/assets/images/favicon.ico b/articles/material/assets/images/favicon.ico deleted file mode 100644 index e85006a3ce1c6fd81faa6d5a13095519c4a6fc96..0000000000000000000000000000000000000000 Binary files a/articles/material/assets/images/favicon.ico and /dev/null differ diff --git a/articles/material/assets/images/favicon.png b/articles/material/assets/images/favicon.png deleted file mode 100644 index 23ccc2bac7294c857add8e40e27c5c4e4d8e6397..0000000000000000000000000000000000000000 Binary files a/articles/material/assets/images/favicon.png and /dev/null differ diff --git a/articles/material/assets/images/icons/bitbucket-670608a71a.svg b/articles/material/assets/images/icons/bitbucket-670608a71a.svg deleted file mode 100644 index 7d95cb22d9a7d99d872d75975b8e8fa72ef69b64..0000000000000000000000000000000000000000 --- a/articles/material/assets/images/icons/bitbucket-670608a71a.svg +++ /dev/null @@ -1 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" width="352" height="448" viewBox="0 0 352 448" id="bitbucket"><path fill="currentColor" d="M203.75 214.75q2 15.75-12.625 25.25t-27.875 1.5q-9.75-4.25-13.375-14.5t-.125-20.5 13-14.5q9-4.5 18.125-3t16 8.875 6.875 16.875zm27.75-5.25q-3.5-26.75-28.25-41T154 165.25q-15.75 7-25.125 22.125t-8.625 32.375q1 22.75 19.375 38.75t41.375 14q22.75-2 38-21t12.5-42zM291.25 74q-5-6.75-14-11.125t-14.5-5.5T245 54.25q-72.75-11.75-141.5.5-10.75 1.75-16.5 3t-13.75 5.5T60.75 74q7.5 7 19 11.375t18.375 5.5T120 93.75Q177 101 232 94q15.75-2 22.375-3t18.125-5.375T291.25 74zm14.25 258.75q-2 6.5-3.875 19.125t-3.5 21-7.125 17.5-14.5 14.125q-21.5 12-47.375 17.875t-50.5 5.5-50.375-4.625q-11.5-2-20.375-4.5T88.75 412 70.5 401.125t-13-15.375q-6.25-24-14.25-73l1.5-4 4.5-2.25q55.75 37 126.625 37t126.875-37q5.25 1.5 6 5.75t-1.25 11.25-2 9.25zM350.75 92.5q-6.5 41.75-27.75 163.75-1.25 7.5-6.75 14t-10.875 10T291.75 288q-63 31.5-152.5 22-62-6.75-98.5-34.75-3.75-3-6.375-6.625t-4.25-8.75-2.25-8.5-1.5-9.875T25 232.75q-2.25-12.5-6.625-37.5t-7-40.375T5.5 118 0 78.5Q.75 72 4.375 66.375T12.25 57t11.25-7.5T35 43.875t12-4.625q31.25-11.5 78.25-16 94.75-9.25 169 12.5Q333 47.25 348 66.25q4 5 4.125 12.75t-1.375 13.5z"/></svg> \ No newline at end of file diff --git a/articles/material/assets/images/icons/github-1da075986e.svg b/articles/material/assets/images/icons/github-1da075986e.svg deleted file mode 100644 index 3cacb2e0fc8a876b4e23de255b5c12d65f548361..0000000000000000000000000000000000000000 --- a/articles/material/assets/images/icons/github-1da075986e.svg +++ /dev/null @@ -1 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg> \ No newline at end of file diff --git a/articles/material/assets/images/icons/gitlab-5ad3f9f9e5.svg b/articles/material/assets/images/icons/gitlab-5ad3f9f9e5.svg deleted file mode 100644 index b036a9b52b32a985a86c16d0ed9a799236f3b58c..0000000000000000000000000000000000000000 --- a/articles/material/assets/images/icons/gitlab-5ad3f9f9e5.svg +++ /dev/null @@ -1 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" width="500" height="500" viewBox="0 0 500 500" id="gitlab"><path fill="currentColor" d="M93.667 473.347l90.684-279.097H2.983l90.684 279.097z" transform="translate(156.198 1.16)"/><path fill="currentColor" d="M221.333 473.345L130.649 194.25H3.557l217.776 279.095z" transform="translate(28.531 1.16)" opacity=".7"/><path fill="currentColor" d="M32 195.155L4.441 279.97a18.773 18.773 0 0 0 6.821 20.99l238.514 173.29L32 195.155z" transform="translate(.089 .256)" opacity=".5"/><path fill="currentColor" d="M2.667-84.844h127.092L75.14-252.942c-2.811-8.649-15.047-8.649-17.856 0L2.667-84.844z" transform="translate(29.422 280.256)"/><path fill="currentColor" d="M2.667 473.345L93.351 194.25h127.092L2.667 473.345z" transform="translate(247.198 1.16)" opacity=".7"/><path fill="currentColor" d="M221.334 195.155l27.559 84.815a18.772 18.772 0 0 1-6.821 20.99L3.557 474.25l217.777-279.095z" transform="translate(246.307 .256)" opacity=".5"/><path fill="currentColor" d="M130.667-84.844H3.575l54.618-168.098c2.811-8.649 15.047-8.649 17.856 0l54.618 168.098z" transform="translate(336.974 280.256)"/></svg> \ No newline at end of file diff --git a/articles/material/assets/javascripts/application-06a3e72efd.js b/articles/material/assets/javascripts/application-06a3e72efd.js deleted file mode 100644 index 7f28d0d383b1a912d1a024dd7984f695e4af6436..0000000000000000000000000000000000000000 --- a/articles/material/assets/javascripts/application-06a3e72efd.js +++ /dev/null @@ -1,3 +0,0 @@ -window.app=function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,t),i.l=!0,i.exports}var n={};return t.m=e,t.c=n,t.i=function(e){return e},t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=95)}([function(e,t,n){"use strict";var r=n(30)("wks"),i=n(22),o=n(1).Symbol,s="function"==typeof o,a=e.exports=function(e){return r[e]||(r[e]=s&&o[e]||(s?o:i)("Symbol."+e))};a.store=r},function(e,t,n){"use strict";var r=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=r)},function(e,t,n){"use strict";var r=n(11);e.exports=function(e){if(!r(e))throw TypeError(e+" is not an object!");return e}},function(e,t,n){"use strict";var r=n(12),i=n(29);e.exports=n(5)?function(e,t,n){return r.f(e,t,i(1,n))}:function(e,t,n){return e[t]=n,e}},function(e,t,n){"use strict";var r=e.exports={version:"2.4.0"};"number"==typeof __e&&(__e=r)},function(e,t,n){"use strict";e.exports=!n(25)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(e,t,n){"use strict";var r={}.hasOwnProperty;e.exports=function(e,t){return r.call(e,t)}},function(e,t,n){"use strict";e.exports={}},function(e,t,n){"use strict";var r=n(1),i=n(3),o=n(6),s=n(22)("src"),a="toString",c=Function[a],u=(""+c).split(a);n(4).inspectSource=function(e){return c.call(e)},(e.exports=function(e,t,n,a){var c="function"==typeof n;c&&(o(n,"name")||i(n,"name",t)),e[t]!==n&&(c&&(o(n,s)||i(n,s,e[t]?""+e[t]:u.join(String(t)))),e===r?e[t]=n:a?e[t]?e[t]=n:i(e,t,n):(delete e[t],i(e,t,n)))})(Function.prototype,a,function(){return"function"==typeof this&&this[s]||c.call(this)})},function(e,t,n){"use strict";var r={}.toString;e.exports=function(e){return r.call(e).slice(8,-1)}},function(e,t,n){"use strict";var r=n(14);e.exports=function(e,t,n){if(r(e),void 0===t)return e;switch(n){case 1:return function(n){return e.call(t,n)};case 2:return function(n,r){return e.call(t,n,r)};case 3:return function(n,r,i){return e.call(t,n,r,i)}}return function(){return e.apply(t,arguments)}}},function(e,t,n){"use strict";var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};e.exports=function(e){return"object"===("undefined"==typeof e?"undefined":r(e))?null!==e:"function"==typeof e}},function(e,t,n){"use strict";var r=n(2),i=n(43),o=n(63),s=Object.defineProperty;t.f=n(5)?Object.defineProperty:function(e,t,n){if(r(e),t=o(t,!0),r(n),i)try{return s(e,t,n)}catch(e){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(e[t]=n.value),e}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={createElement:function(e,t){var n=document.createElement(e);t&&Array.prototype.forEach.call(Object.keys(t),function(e){n.setAttribute(e,t[e])});for(var r=function e(t){Array.prototype.forEach.call(t,function(t){"string"==typeof t||"number"==typeof t?n.textContent+=t:Array.isArray(t)?e(t):"undefined"!=typeof t.__html?n.innerHTML+=t.__html:t instanceof Node&&n.appendChild(t)})},i=arguments.length,o=Array(i>2?i-2:0),s=2;s<i;s++)o[s-2]=arguments[s];return r(o),n}},e.exports=t.default},function(e,t,n){"use strict";e.exports=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e}},function(e,t,n){"use strict";var r=n(9),i=n(0)("toStringTag"),o="Arguments"==r(function(){return arguments}()),s=function(e,t){try{return e[t]}catch(e){}};e.exports=function(e){var t,n,a;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(n=s(t=Object(e),i))?n:o?r(t):"Object"==(a=r(t))&&"function"==typeof t.callee?"Arguments":a}},function(e,t,n){"use strict";e.exports=function(e){if(void 0==e)throw TypeError("Can't call method on "+e);return e}},function(e,t,n){"use strict";var r=n(11),i=n(1).document,o=r(i)&&r(i.createElement);e.exports=function(e){return o?i.createElement(e):{}}},function(e,t,n){"use strict";var r=n(12).f,i=n(6),o=n(0)("toStringTag");e.exports=function(e,t,n){e&&!i(e=n?e:e.prototype,o)&&r(e,o,{configurable:!0,value:t})}},function(e,t,n){"use strict";var r=n(30)("keys"),i=n(22);e.exports=function(e){return r[e]||(r[e]=i(e))}},function(e,t,n){"use strict";var r=Math.ceil,i=Math.floor;e.exports=function(e){return isNaN(e=+e)?0:(e>0?i:r)(e)}},function(e,t,n){"use strict";var r=n(45),i=n(16);e.exports=function(e){return r(i(e))}},function(e,t,n){"use strict";var r=0,i=Math.random();e.exports=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++r+i).toString(36))}},function(e,t,n){"use strict";e.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},function(e,t,n){"use strict";var r=n(1),i=n(4),o=n(3),s=n(8),a=n(10),c="prototype",u=function e(t,n,u){var l,f,h,d,p=t&e.F,m=t&e.G,v=t&e.S,y=t&e.P,g=t&e.B,w=m?r:v?r[n]||(r[n]={}):(r[n]||{})[c],b=m?i:i[n]||(i[n]={}),_=b[c]||(b[c]={});m&&(u=n);for(l in u)f=!p&&w&&void 0!==w[l],h=(f?w:u)[l],d=g&&f?a(h,r):y&&"function"==typeof h?a(Function.call,h):h,w&&s(w,l,h,t&e.U),b[l]!=h&&o(b,l,d),y&&_[l]!=h&&(_[l]=h)};r.core=i,u.F=1,u.G=2,u.S=4,u.P=8,u.B=16,u.W=32,u.U=64,u.R=128,e.exports=u},function(e,t,n){"use strict";e.exports=function(e){try{return!!e()}catch(e){return!0}}},function(e,t,n){"use strict";e.exports=n(1).document&&document.documentElement},function(e,t,n){"use strict";var r=n(28),i=n(24),o=n(8),s=n(3),a=n(6),c=n(7),u=n(48),l=n(18),f=n(54),h=n(0)("iterator"),d=!([].keys&&"next"in[].keys()),p="@@iterator",m="keys",v="values",y=function(){return this};e.exports=function(e,t,n,g,w,b,_){u(n,t,g);var x,E,k,S=function(e){if(!d&&e in O)return O[e];switch(e){case m:return function(){return new n(this,e)};case v:return function(){return new n(this,e)}}return function(){return new n(this,e)}},T=t+" Iterator",L=w==v,C=!1,O=e.prototype,P=O[h]||O[p]||w&&O[w],A=P||S(w),M=w?L?S("entries"):A:void 0,R="Array"==t?O.entries||P:P;if(R&&(k=f(R.call(new e)),k!==Object.prototype&&(l(k,T,!0),r||a(k,h)||s(k,h,y))),L&&P&&P.name!==v&&(C=!0,A=function(){return P.call(this)}),r&&!_||!d&&!C&&O[h]||s(O,h,A),c[t]=A,c[T]=y,w)if(x={values:L?A:S(v),keys:b?A:S(m),entries:M},_)for(E in x)E in O||o(O,E,x[E]);else i(i.P+i.F*(d||C),t,x);return x}},function(e,t,n){"use strict";e.exports=!1},function(e,t,n){"use strict";e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},function(e,t,n){"use strict";var r=n(1),i="__core-js_shared__",o=r[i]||(r[i]={});e.exports=function(e){return o[e]||(o[e]={})}},function(e,t,n){"use strict";var r,i,o,s=n(10),a=n(44),c=n(26),u=n(17),l=n(1),f=l.process,h=l.setImmediate,d=l.clearImmediate,p=l.MessageChannel,m=0,v={},y="onreadystatechange",g=function(){var e=+this;if(v.hasOwnProperty(e)){var t=v[e];delete v[e],t()}},w=function(e){g.call(e.data)};h&&d||(h=function(e){for(var t=[],n=1;arguments.length>n;)t.push(arguments[n++]);return v[++m]=function(){a("function"==typeof e?e:Function(e),t)},r(m),m},d=function(e){delete v[e]},"process"==n(9)(f)?r=function(e){f.nextTick(s(g,e,1))}:p?(i=new p,o=i.port2,i.port1.onmessage=w,r=s(o.postMessage,o,1)):l.addEventListener&&"function"==typeof postMessage&&!l.importScripts?(r=function(e){l.postMessage(e+"","*")},l.addEventListener("message",w,!1)):r=y in u("script")?function(e){c.appendChild(u("script"))[y]=function(){c.removeChild(this),g.call(e)}}:function(e){setTimeout(s(g,e,1),0)}),e.exports={set:h,clear:d}},function(e,t,n){"use strict";var r=n(20),i=Math.min;e.exports=function(e){return e>0?i(r(e),9007199254740991):0}},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),o=function(){function e(t,n,i){var o=this;r(this,e),this.els_=Array.prototype.slice.call("string"==typeof t?document.querySelectorAll(t):[].concat(t)),this.handler_="function"==typeof i?{update:i}:i,this.events_=[].concat(n),this.update_=function(e){return o.handler_.update(e)}}return i(e,[{key:"listen",value:function(){var e=this;this.els_.forEach(function(t){e.events_.forEach(function(n){t.addEventListener(n,e.update_,!1)})}),"function"==typeof this.handler_.setup&&this.handler_.setup()}},{key:"unlisten",value:function(){var e=this;this.els_.forEach(function(t){e.events_.forEach(function(n){t.removeEventListener(n,e.update_)})}),"function"==typeof this.handler_.reset&&this.handler_.reset()}}]),e}();t.a=o},function(e,t){(function(t){e.exports=t}).call(t,{})},function(e,t,n){"use strict";n(66),n(68),n(69),n(67),e.exports=n(4).Promise},function(e,t,n){"use strict";try{var r=new window.CustomEvent("test");if(r.preventDefault(),r.defaultPrevented!==!0)throw new Error("Could not prevent default")}catch(e){var i=function(e,t){var n,r;return t=t||{bubbles:!1,cancelable:!1,detail:void 0},n=document.createEvent("CustomEvent"),n.initCustomEvent(e,t.bubbles,t.cancelable,t.detail),r=n.preventDefault,n.preventDefault=function(){r.call(this);try{Object.defineProperty(this,"defaultPrevented",{get:function(){return!0}})}catch(e){this.defaultPrevented=!0}},n};i.prototype=window.Event.prototype,window.CustomEvent=i}},function(e,t,n){"use strict";!function(e){function t(e){if("string"!=typeof e&&(e=String(e)),/[^a-z0-9\-#$%&'*+.\^_`|~]/i.test(e))throw new TypeError("Invalid character in header field name");return e.toLowerCase()}function n(e){return"string"!=typeof e&&(e=String(e)),e}function r(e){var t={next:function(){var t=e.shift();return{done:void 0===t,value:t}}};return y.iterable&&(t[Symbol.iterator]=function(){return t}),t}function i(e){this.map={},e instanceof i?e.forEach(function(e,t){this.append(t,e)},this):e&&Object.getOwnPropertyNames(e).forEach(function(t){this.append(t,e[t])},this)}function o(e){return e.bodyUsed?Promise.reject(new TypeError("Already read")):void(e.bodyUsed=!0)}function s(e){return new Promise(function(t,n){e.onload=function(){t(e.result)},e.onerror=function(){n(e.error)}})}function a(e){var t=new FileReader,n=s(t);return t.readAsArrayBuffer(e),n}function c(e){var t=new FileReader,n=s(t);return t.readAsText(e),n}function u(e){for(var t=new Uint8Array(e),n=new Array(t.length),r=0;r<t.length;r++)n[r]=String.fromCharCode(t[r]);return n.join("")}function l(e){if(e.slice)return e.slice(0);var t=new Uint8Array(e.byteLength);return t.set(new Uint8Array(e)),t.buffer}function f(){return this.bodyUsed=!1,this._initBody=function(e){if(this._bodyInit=e,e)if("string"==typeof e)this._bodyText=e;else if(y.blob&&Blob.prototype.isPrototypeOf(e))this._bodyBlob=e;else if(y.formData&&FormData.prototype.isPrototypeOf(e))this._bodyFormData=e;else if(y.searchParams&&URLSearchParams.prototype.isPrototypeOf(e))this._bodyText=e.toString();else if(y.arrayBuffer&&y.blob&&w(e))this._bodyArrayBuffer=l(e.buffer),this._bodyInit=new Blob([this._bodyArrayBuffer]);else{if(!y.arrayBuffer||!ArrayBuffer.prototype.isPrototypeOf(e)&&!b(e))throw new Error("unsupported BodyInit type");this._bodyArrayBuffer=l(e)}else this._bodyText="";this.headers.get("content-type")||("string"==typeof e?this.headers.set("content-type","text/plain;charset=UTF-8"):this._bodyBlob&&this._bodyBlob.type?this.headers.set("content-type",this._bodyBlob.type):y.searchParams&&URLSearchParams.prototype.isPrototypeOf(e)&&this.headers.set("content-type","application/x-www-form-urlencoded;charset=UTF-8"))},y.blob&&(this.blob=function(){var e=o(this);if(e)return e;if(this._bodyBlob)return Promise.resolve(this._bodyBlob);if(this._bodyArrayBuffer)return Promise.resolve(new Blob([this._bodyArrayBuffer]));if(this._bodyFormData)throw new Error("could not read FormData body as blob");return Promise.resolve(new Blob([this._bodyText]))},this.arrayBuffer=function(){return this._bodyArrayBuffer?o(this)||Promise.resolve(this._bodyArrayBuffer):this.blob().then(a)}),this.text=function(){var e=o(this);if(e)return e;if(this._bodyBlob)return c(this._bodyBlob);if(this._bodyArrayBuffer)return Promise.resolve(u(this._bodyArrayBuffer));if(this._bodyFormData)throw new Error("could not read FormData body as text");return Promise.resolve(this._bodyText)},y.formData&&(this.formData=function(){return this.text().then(p)}),this.json=function(){return this.text().then(JSON.parse)},this}function h(e){var t=e.toUpperCase();return _.indexOf(t)>-1?t:e}function d(e,t){t=t||{};var n=t.body;if(e instanceof d){if(e.bodyUsed)throw new TypeError("Already read");this.url=e.url,this.credentials=e.credentials,t.headers||(this.headers=new i(e.headers)),this.method=e.method,this.mode=e.mode,n||null==e._bodyInit||(n=e._bodyInit,e.bodyUsed=!0)}else this.url=String(e);if(this.credentials=t.credentials||this.credentials||"omit",!t.headers&&this.headers||(this.headers=new i(t.headers)),this.method=h(t.method||this.method||"GET"),this.mode=t.mode||this.mode||null,this.referrer=null,("GET"===this.method||"HEAD"===this.method)&&n)throw new TypeError("Body not allowed for GET or HEAD requests");this._initBody(n)}function p(e){var t=new FormData;return e.trim().split("&").forEach(function(e){if(e){var n=e.split("="),r=n.shift().replace(/\+/g," "),i=n.join("=").replace(/\+/g," ");t.append(decodeURIComponent(r),decodeURIComponent(i))}}),t}function m(e){var t=new i;return e.split(/\r?\n/).forEach(function(e){var n=e.split(":"),r=n.shift().trim();if(r){var i=n.join(":").trim();t.append(r,i)}}),t}function v(e,t){t||(t={}),this.type="default",this.status="status"in t?t.status:200,this.ok=this.status>=200&&this.status<300,this.statusText="statusText"in t?t.statusText:"OK",this.headers=new i(t.headers),this.url=t.url||"",this._initBody(e)}if(!e.fetch){var y={searchParams:"URLSearchParams"in e,iterable:"Symbol"in e&&"iterator"in Symbol,blob:"FileReader"in e&&"Blob"in e&&function(){try{return new Blob,!0}catch(e){return!1}}(),formData:"FormData"in e,arrayBuffer:"ArrayBuffer"in e};if(y.arrayBuffer)var g=["[object Int8Array]","[object Uint8Array]","[object Uint8ClampedArray]","[object Int16Array]","[object Uint16Array]","[object Int32Array]","[object Uint32Array]","[object Float32Array]","[object Float64Array]"],w=function(e){return e&&DataView.prototype.isPrototypeOf(e)},b=ArrayBuffer.isView||function(e){return e&&g.indexOf(Object.prototype.toString.call(e))>-1};i.prototype.append=function(e,r){e=t(e),r=n(r);var i=this.map[e];this.map[e]=i?i+","+r:r},i.prototype.delete=function(e){delete this.map[t(e)]},i.prototype.get=function(e){return e=t(e),this.has(e)?this.map[e]:null},i.prototype.has=function(e){return this.map.hasOwnProperty(t(e))},i.prototype.set=function(e,r){this.map[t(e)]=n(r)},i.prototype.forEach=function(e,t){for(var n in this.map)this.map.hasOwnProperty(n)&&e.call(t,this.map[n],n,this)},i.prototype.keys=function(){var e=[];return this.forEach(function(t,n){e.push(n)}),r(e)},i.prototype.values=function(){var e=[];return this.forEach(function(t){e.push(t)}),r(e)},i.prototype.entries=function(){var e=[];return this.forEach(function(t,n){e.push([n,t])}),r(e)},y.iterable&&(i.prototype[Symbol.iterator]=i.prototype.entries);var _=["DELETE","GET","HEAD","OPTIONS","POST","PUT"];d.prototype.clone=function(){return new d(this,{body:this._bodyInit})},f.call(d.prototype),f.call(v.prototype),v.prototype.clone=function(){return new v(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new i(this.headers),url:this.url})},v.error=function(){var e=new v(null,{status:0,statusText:""});return e.type="error",e};var x=[301,302,303,307,308];v.redirect=function(e,t){if(x.indexOf(t)===-1)throw new RangeError("Invalid status code");return new v(null,{status:t,headers:{location:e}})},e.Headers=i,e.Request=d,e.Response=v,e.fetch=function(e,t){return new Promise(function(n,r){var i=new d(e,t),o=new XMLHttpRequest;o.onload=function(){var e={status:o.status,statusText:o.statusText,headers:m(o.getAllResponseHeaders()||"")};e.url="responseURL"in o?o.responseURL:e.headers.get("X-Request-URL");var t="response"in o?o.response:o.responseText;n(new v(t,e))},o.onerror=function(){r(new TypeError("Network request failed"))},o.ontimeout=function(){r(new TypeError("Network request failed"))},o.open(i.method,i.url,!0),"include"===i.credentials&&(o.withCredentials=!0),"responseType"in o&&y.blob&&(o.responseType="blob"),i.headers.forEach(function(e,t){o.setRequestHeader(t,e)}),o.send("undefined"==typeof i._bodyInit?null:i._bodyInit)})},e.fetch.polyfill=!0}}("undefined"!=typeof self?self:void 0)},function(e,t,n){"use strict";(function(e){function r(t){new s.a.Event.Listener(document,"DOMContentLoaded",function(){if(!(document.body instanceof HTMLElement))throw new ReferenceError;o.a.attach(document.body),Modernizr.addTest("ios",function(){return!!navigator.userAgent.match(/(iPad|iPhone|iPod)/g)});var t=document.querySelectorAll("table:not([class])");if(Array.prototype.forEach.call(t,function(t){var n=e.createElement("div",{class:"md-typeset__scrollwrap"},e.createElement("div",{class:"md-typeset__table"}));t.nextSibling?t.parentNode.insertBefore(n,t.nextSibling):t.parentNode.appendChild(n),n.children[0].appendChild(t)}),Modernizr.ios){var n=document.querySelectorAll("[data-md-scrollfix]");Array.prototype.forEach.call(n,function(e){e.addEventListener("touchstart",function(){var t=e.scrollTop;0===t?e.scrollTop=1:t+e.offsetHeight===e.scrollHeight&&(e.scrollTop=t-1)})})}}).listen(),new s.a.Event.MatchMedia("(min-width: 1220px)",new s.a.Event.Listener(window,["scroll","resize","orientationchange"],new s.a.Header.Shadow("[data-md-component=container]","[data-md-component=header]"))),document.querySelector("[data-md-component=tabs]")&&new s.a.Event.Listener(window,["scroll","resize","orientationchange"],new s.a.Tabs.Toggle("[data-md-component=tabs]")).listen(),new s.a.Event.MatchMedia("(min-width: 1220px)",new s.a.Event.Listener(window,["scroll","resize","orientationchange"],new s.a.Sidebar.Position("[data-md-component=navigation]","[data-md-component=header]"))),document.querySelector("[data-md-component=toc]")&&new s.a.Event.MatchMedia("(min-width: 960px)",new s.a.Event.Listener(window,["scroll","resize","orientationchange"],new s.a.Sidebar.Position("[data-md-component=toc]","[data-md-component=header]"))),new s.a.Event.MatchMedia("(min-width: 960px)",new s.a.Event.Listener(window,"scroll",new s.a.Nav.Blur("[data-md-component=toc] [href]")));var n=document.querySelectorAll("[data-md-component=collapsible]");Array.prototype.forEach.call(n,function(e){new s.a.Event.MatchMedia("(min-width: 1220px)",new s.a.Event.Listener(e.previousElementSibling,"click",new s.a.Nav.Collapse(e)))}),new s.a.Event.MatchMedia("(max-width: 1219px)",new s.a.Event.Listener("[data-md-component=navigation] [data-md-toggle]","change",new s.a.Nav.Scrolling("[data-md-component=navigation] nav"))),new s.a.Event.MatchMedia("(max-width: 959px)",new s.a.Event.Listener("[data-md-toggle=search]","change",new s.a.Search.Lock("[data-md-toggle=search]"))),new s.a.Event.Listener("[data-md-component=query]",["focus","keyup","change"],new s.a.Search.Result("[data-md-component=result]",function(){return fetch(t.url.base+"/mkdocs/search_index.json",{credentials:"same-origin"}).then(function(e){return e.json()}).then(function(e){return e.docs.map(function(e){return e.location=t.url.base+e.location,e})})})).listen(),new s.a.Event.MatchMedia("(max-width: 959px)",new s.a.Event.Listener("[data-md-component=navigation] [href^='#']","click",function(){var e=document.querySelector("[data-md-toggle=drawer]");if(!(e instanceof HTMLInputElement))throw new ReferenceError;e.checked&&(e.checked=!1,e.dispatchEvent(new CustomEvent("change")))})),new s.a.Event.Listener("[data-md-component=reset]","click",function(){setTimeout(function(){var e=document.querySelector("[data-md-component=query]");if(!(e instanceof HTMLInputElement))throw new ReferenceError;e.focus()},10)}).listen(),new s.a.Event.Listener("[data-md-toggle=search]","change",function(e){setTimeout(function(e){if(!(e instanceof HTMLInputElement))throw new ReferenceError;if(e.checked){var t=document.querySelector("[data-md-component=query]");if(!(t instanceof HTMLInputElement))throw new ReferenceError;t.focus()}},400,e.target)}).listen(),new s.a.Event.MatchMedia("(min-width: 960px)",new s.a.Event.Listener("[data-md-component=query]","focus",function(){var e=document.querySelector("[data-md-toggle=search]");if(!(e instanceof HTMLInputElement))throw new ReferenceError;e.checked||(e.checked=!0,e.dispatchEvent(new CustomEvent("change")))})),new s.a.Event.Listener(window,"keydown",function(e){var t=document.querySelector("[data-md-toggle=search]");if(!(t instanceof HTMLInputElement))throw new ReferenceError;var n=document.querySelector("[data-md-component=query]");if(!(n instanceof HTMLInputElement))throw new ReferenceError;if(!e.metaKey&&!e.ctrlKey)if(t.checked){if(13===e.keyCode){if(n===document.activeElement){e.preventDefault();var r=document.querySelector("[data-md-component=search] [href][data-md-state=active]");r instanceof HTMLLinkElement&&(window.location=r.getAttribute("href")),t.checked=!1,t.dispatchEvent(new CustomEvent("change")),n.blur()}}else if(27===e.keyCode)t.checked=!1,t.dispatchEvent(new CustomEvent("change")),n.blur();else if([8,37,39].indexOf(e.keyCode)!==-1)n!==document.activeElement&&n.focus();else if([9,38,40].indexOf(e.keyCode)!==-1){var i=e.shiftKey?38:40,o=9===e.keyCode?i:e.keyCode,s=Array.prototype.slice.call(document.querySelectorAll("[data-md-component=search] [href]"));if(!s.length)return;var a=s.find(function(e){if(!(e instanceof HTMLElement))throw new ReferenceError;return"active"===e.dataset.mdState});a&&(a.dataset.mdState="");var c=Math.max(0,(s.indexOf(a)+s.length+(38===o?-1:1))%s.length);if(!(s[c]instanceof HTMLElement))throw new ReferenceError;return s[c].dataset.mdState="active",s[c].focus(),e.preventDefault(),e.stopPropagation(),!1}}else 70!==e.keyCode&&83!==e.keyCode||(n.focus(),e.preventDefault())}).listen(),new s.a.Event.Listener(window,"keypress",function(){var e=document.querySelector("[data-md-toggle=search]");if(!(e instanceof HTMLInputElement))throw new ReferenceError;if(e.checked){var t=document.querySelector("[data-md-component=query]");if(!(t instanceof HTMLInputElement))throw new ReferenceError;t!==document.activeElement&&t.focus()}}).listen(),function(){var e=document.querySelector("[data-md-source]");if(!e)return Promise.resolve([]);if(!(e instanceof HTMLAnchorElement))throw new ReferenceError;switch(e.dataset.mdSource){case"github":return new s.a.Source.Adapter.GitHub(e).fetch();default:return Promise.resolve([])}}().then(function(e){var t=document.querySelectorAll("[data-md-source]");Array.prototype.forEach.call(t,function(t){new s.a.Source.Repository(t).initialize(e)})})}Object.defineProperty(t,"__esModule",{value:!0});var i=n(71),o=n.n(i),s=n(74);n.d(t,"initialize",function(){return r})}).call(t,n(13))},function(e,t,n){"use strict";var r=n(0)("unscopables"),i=Array.prototype;void 0==i[r]&&n(3)(i,r,{}),e.exports=function(e){i[r][e]=!0}},function(e,t,n){"use strict";e.exports=function(e,t,n,r){if(!(e instanceof t)||void 0!==r&&r in e)throw TypeError(n+": incorrect invocation!");return e}},function(e,t,n){"use strict";var r=n(21),i=n(32),o=n(61);e.exports=function(e){return function(t,n,s){var a,c=r(t),u=i(c.length),l=o(s,u);if(e&&n!=n){for(;u>l;)if(a=c[l++],a!=a)return!0}else for(;u>l;l++)if((e||l in c)&&c[l]===n)return e||l||0;return!e&&-1}}},function(e,t,n){"use strict";var r=n(10),i=n(47),o=n(46),s=n(2),a=n(32),c=n(64),u={},l={},f=e.exports=function(e,t,n,f,h){var d,p,m,v,y=h?function(){return e}:c(e),g=r(n,f,t?2:1),w=0;if("function"!=typeof y)throw TypeError(e+" is not iterable!");if(o(y)){for(d=a(e.length);d>w;w++)if(v=t?g(s(p=e[w])[0],p[1]):g(e[w]),v===u||v===l)return v}else for(m=y.call(e);!(p=m.next()).done;)if(v=i(m,g,p.value,t),v===u||v===l)return v};f.BREAK=u,f.RETURN=l},function(e,t,n){"use strict";e.exports=!n(5)&&!n(25)(function(){return 7!=Object.defineProperty(n(17)("div"),"a",{get:function(){return 7}}).a})},function(e,t,n){"use strict";e.exports=function(e,t,n){var r=void 0===n;switch(t.length){case 0:return r?e():e.call(n);case 1:return r?e(t[0]):e.call(n,t[0]);case 2:return r?e(t[0],t[1]):e.call(n,t[0],t[1]);case 3:return r?e(t[0],t[1],t[2]):e.call(n,t[0],t[1],t[2]);case 4:return r?e(t[0],t[1],t[2],t[3]):e.call(n,t[0],t[1],t[2],t[3])}return e.apply(n,t)}},function(e,t,n){"use strict";var r=n(9);e.exports=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==r(e)?e.split(""):Object(e)}},function(e,t,n){"use strict";var r=n(7),i=n(0)("iterator"),o=Array.prototype;e.exports=function(e){return void 0!==e&&(r.Array===e||o[i]===e)}},function(e,t,n){"use strict";var r=n(2);e.exports=function(e,t,n,i){try{return i?t(r(n)[0],n[1]):t(n)}catch(t){var o=e.return;throw void 0!==o&&r(o.call(e)),t}}},function(e,t,n){"use strict";var r=n(52),i=n(29),o=n(18),s={};n(3)(s,n(0)("iterator"),function(){return this}),e.exports=function(e,t,n){e.prototype=r(s,{next:i(1,n)}),o(e,t+" Iterator")}},function(e,t,n){"use strict";var r=n(0)("iterator"),i=!1;try{var o=[7][r]();o.return=function(){i=!0},Array.from(o,function(){throw 2})}catch(e){}e.exports=function(e,t){if(!t&&!i)return!1;var n=!1;try{var o=[7],s=o[r]();s.next=function(){return{done:n=!0}},o[r]=function(){return s},e(o)}catch(e){}return n}},function(e,t,n){"use strict";e.exports=function(e,t){return{value:t,done:!!e}}},function(e,t,n){"use strict";var r=n(1),i=n(31).set,o=r.MutationObserver||r.WebKitMutationObserver,s=r.process,a=r.Promise,c="process"==n(9)(s);e.exports=function(){var e,t,n,u=function(){var r,i;for(c&&(r=s.domain)&&r.exit();e;){i=e.fn,e=e.next;try{i()}catch(r){throw e?n():t=void 0,r}}t=void 0,r&&r.enter()};if(c)n=function(){s.nextTick(u)};else if(o){var l=!0,f=document.createTextNode("");new o(u).observe(f,{characterData:!0}),n=function(){f.data=l=!l}}else if(a&&a.resolve){var h=a.resolve();n=function(){h.then(u)}}else n=function(){i.call(r,u)};return function(r){var i={fn:r,next:void 0};t&&(t.next=i),e||(e=i,n()),t=i}}},function(e,t,n){"use strict";var r=n(2),i=n(53),o=n(23),s=n(19)("IE_PROTO"),a=function(){},c="prototype",u=function(){var e,t=n(17)("iframe"),r=o.length,i="<",s=">";for(t.style.display="none",n(26).appendChild(t),t.src="javascript:",e=t.contentWindow.document,e.open(),e.write(i+"script"+s+"document.F=Object"+i+"/script"+s),e.close(),u=e.F;r--;)delete u[c][o[r]];return u()};e.exports=Object.create||function(e,t){var n;return null!==e?(a[c]=r(e),n=new a,a[c]=null,n[s]=e):n=u(),void 0===t?n:i(n,t)}},function(e,t,n){"use strict";var r=n(12),i=n(2),o=n(56);e.exports=n(5)?Object.defineProperties:function(e,t){i(e);for(var n,s=o(t),a=s.length,c=0;a>c;)r.f(e,n=s[c++],t[n]);return e}},function(e,t,n){"use strict";var r=n(6),i=n(62),o=n(19)("IE_PROTO"),s=Object.prototype;e.exports=Object.getPrototypeOf||function(e){return e=i(e),r(e,o)?e[o]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?s:null}},function(e,t,n){"use strict";var r=n(6),i=n(21),o=n(41)(!1),s=n(19)("IE_PROTO");e.exports=function(e,t){var n,a=i(e),c=0,u=[];for(n in a)n!=s&&r(a,n)&&u.push(n);for(;t.length>c;)r(a,n=t[c++])&&(~o(u,n)||u.push(n));return u}},function(e,t,n){"use strict";var r=n(55),i=n(23);e.exports=Object.keys||function(e){return r(e,i)}},function(e,t,n){"use strict";var r=n(8);e.exports=function(e,t,n){for(var i in t)r(e,i,t[i],n);return e}},function(e,t,n){"use strict";var r=n(1),i=n(12),o=n(5),s=n(0)("species");e.exports=function(e){var t=r[e];o&&t&&!t[s]&&i.f(t,s,{configurable:!0,get:function(){return this}})}},function(e,t,n){"use strict";var r=n(2),i=n(14),o=n(0)("species");e.exports=function(e,t){var n,s=r(e).constructor;return void 0===s||void 0==(n=r(s)[o])?t:i(n)}},function(e,t,n){"use strict";var r=n(20),i=n(16);e.exports=function(e){return function(t,n){var o,s,a=String(i(t)),c=r(n),u=a.length;return c<0||c>=u?e?"":void 0:(o=a.charCodeAt(c),o<55296||o>56319||c+1===u||(s=a.charCodeAt(c+1))<56320||s>57343?e?a.charAt(c):o:e?a.slice(c,c+2):(o-55296<<10)+(s-56320)+65536)}}},function(e,t,n){"use strict";var r=n(20),i=Math.max,o=Math.min;e.exports=function(e,t){return e=r(e),e<0?i(e+t,0):o(e,t)}},function(e,t,n){"use strict";var r=n(16);e.exports=function(e){return Object(r(e))}},function(e,t,n){"use strict";var r=n(11);e.exports=function(e,t){if(!r(e))return e;var n,i;if(t&&"function"==typeof(n=e.toString)&&!r(i=n.call(e)))return i;if("function"==typeof(n=e.valueOf)&&!r(i=n.call(e)))return i;if(!t&&"function"==typeof(n=e.toString)&&!r(i=n.call(e)))return i;throw TypeError("Can't convert object to primitive value")}},function(e,t,n){"use strict";var r=n(15),i=n(0)("iterator"),o=n(7);e.exports=n(4).getIteratorMethod=function(e){if(void 0!=e)return e[i]||e["@@iterator"]||o[r(e)]}},function(e,t,n){"use strict";var r=n(39),i=n(50),o=n(7),s=n(21);e.exports=n(27)(Array,"Array",function(e,t){this._t=s(e),this._i=0,this._k=t},function(){var e=this._t,t=this._k,n=this._i++;return!e||n>=e.length?(this._t=void 0,i(1)):"keys"==t?i(0,n):"values"==t?i(0,e[n]):i(0,[n,e[n]])},"values"),o.Arguments=o.Array,r("keys"),r("values"),r("entries")},function(e,t,n){"use strict";var r=n(15),i={};i[n(0)("toStringTag")]="z",i+""!="[object z]"&&n(8)(Object.prototype,"toString",function(){return"[object "+r(this)+"]"},!0)},function(e,t,n){"use strict";var r,i,o,s=n(28),a=n(1),c=n(10),u=n(15),l=n(24),f=n(11),h=n(14),d=n(40),p=n(42),m=n(59),v=n(31).set,y=n(51)(),g="Promise",w=a.TypeError,b=a.process,_=a[g],b=a.process,x="process"==u(b),E=function(){},k=!!function(){try{var e=_.resolve(1),t=(e.constructor={})[n(0)("species")]=function(e){e(E,E)};return(x||"function"==typeof PromiseRejectionEvent)&&e.then(E)instanceof t}catch(e){}}(),S=function(e,t){return e===t||e===_&&t===o},T=function(e){var t;return!(!f(e)||"function"!=typeof(t=e.then))&&t},L=function(e){return S(_,e)?new C(e):new i(e)},C=i=function(e){var t,n;this.promise=new e(function(e,r){if(void 0!==t||void 0!==n)throw w("Bad Promise constructor");t=e,n=r}),this.resolve=h(t),this.reject=h(n)},O=function(e){try{e()}catch(e){return{error:e}}},P=function(e,t){if(!e._n){e._n=!0;var n=e._c;y(function(){for(var r=e._v,i=1==e._s,o=0,s=function(t){var n,o,s=i?t.ok:t.fail,a=t.resolve,c=t.reject,u=t.domain;try{s?(i||(2==e._h&&R(e),e._h=1),s===!0?n=r:(u&&u.enter(),n=s(r),u&&u.exit()),n===t.promise?c(w("Promise-chain cycle")):(o=T(n))?o.call(n,a,c):a(n)):c(r)}catch(e){c(e)}};n.length>o;)s(n[o++]);e._c=[],e._n=!1,t&&!e._h&&A(e)})}},A=function(e){v.call(a,function(){var t,n,r,i=e._v;if(M(e)&&(t=O(function(){x?b.emit("unhandledRejection",i,e):(n=a.onunhandledrejection)?n({promise:e,reason:i}):(r=a.console)&&r.error&&r.error("Unhandled promise rejection",i)}),e._h=x||M(e)?2:1),e._a=void 0,t)throw t.error})},M=function e(t){if(1==t._h)return!1;for(var n,r=t._a||t._c,i=0;r.length>i;)if(n=r[i++],n.fail||!e(n.promise))return!1;return!0},R=function(e){v.call(a,function(){var t;x?b.emit("rejectionHandled",e):(t=a.onrejectionhandled)&&t({promise:e,reason:e._v})})},I=function(e){var t=this;t._d||(t._d=!0,t=t._w||t,t._v=e,t._s=2,t._a||(t._a=t._c.slice()),P(t,!0))},j=function e(t){var n,r=this;if(!r._d){r._d=!0,r=r._w||r;try{if(r===t)throw w("Promise can't be resolved itself");(n=T(t))?y(function(){var i={_w:r,_d:!1};try{n.call(t,c(e,i,1),c(I,i,1))}catch(e){I.call(i,e)}}):(r._v=t,r._s=1,P(r,!1))}catch(e){I.call({_w:r,_d:!1},e)}}};k||(_=function(e){d(this,_,g,"_h"),h(e),r.call(this);try{e(c(j,this,1),c(I,this,1))}catch(e){I.call(this,e)}},r=function(e){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0, -this._h=0,this._n=!1},r.prototype=n(57)(_.prototype,{then:function(e,t){var n=L(m(this,_));return n.ok="function"!=typeof e||e,n.fail="function"==typeof t&&t,n.domain=x?b.domain:void 0,this._c.push(n),this._a&&this._a.push(n),this._s&&P(this,!1),n.promise},catch:function(e){return this.then(void 0,e)}}),C=function(){var e=new r;this.promise=e,this.resolve=c(j,e,1),this.reject=c(I,e,1)}),l(l.G+l.W+l.F*!k,{Promise:_}),n(18)(_,g),n(58)(g),o=n(4)[g],l(l.S+l.F*!k,g,{reject:function(e){var t=L(this),n=t.reject;return n(e),t.promise}}),l(l.S+l.F*(s||!k),g,{resolve:function(e){if(e instanceof _&&S(e.constructor,this))return e;var t=L(this),n=t.resolve;return n(e),t.promise}}),l(l.S+l.F*!(k&&n(49)(function(e){_.all(e).catch(E)})),g,{all:function(e){var t=this,n=L(t),r=n.resolve,i=n.reject,o=O(function(){var n=[],o=0,s=1;p(e,!1,function(e){var a=o++,c=!1;n.push(void 0),s++,t.resolve(e).then(function(e){c||(c=!0,n[a]=e,--s||r(n))},i)}),--s||r(n)});return o&&i(o.error),n.promise},race:function(e){var t=this,n=L(t),r=n.reject,i=O(function(){p(e,!1,function(e){t.resolve(e).then(n.resolve,r)})});return i&&r(i.error),n.promise}})},function(e,t,n){"use strict";var r=n(60)(!0);n(27)(String,"String",function(e){this._t=String(e),this._i=0},function(){var e,t=this._t,n=this._i;return n>=t.length?{value:void 0,done:!0}:(e=r(t,n),this._i+=e.length,{value:e,done:!1})})},function(e,t,n){"use strict";for(var r=n(65),i=n(8),o=n(1),s=n(3),a=n(7),c=n(0),u=c("iterator"),l=c("toStringTag"),f=a.Array,h=["NodeList","DOMTokenList","MediaList","StyleSheetList","CSSRuleList"],d=0;d<5;d++){var p,m=h[d],v=o[m],y=v&&v.prototype;if(y){y[u]||s(y,u,f),y[l]||s(y,l,m),a[m]=f;for(p in r)y[p]||i(y,p,r[p],!0)}}},function(e,t,n){"use strict";var r=/[|\\{}()[\]^$+*?.]/g;e.exports=function(e){if("string"!=typeof e)throw new TypeError("Expected a string");return e.replace(r,"\\$&")}},function(e,t,n){"use strict";var r,i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};!function(){function o(e,t){function n(e,t){return function(){return e.apply(t,arguments)}}var r;if(t=t||{},this.trackingClick=!1,this.trackingClickStart=0,this.targetElement=null,this.touchStartX=0,this.touchStartY=0,this.lastTouchIdentifier=0,this.touchBoundary=t.touchBoundary||10,this.layer=e,this.tapDelay=t.tapDelay||200,this.tapTimeout=t.tapTimeout||700,!o.notNeeded(e)){for(var i=["onMouse","onClick","onTouchStart","onTouchMove","onTouchEnd","onTouchCancel"],s=this,c=0,u=i.length;c<u;c++)s[i[c]]=n(s[i[c]],s);a&&(e.addEventListener("mouseover",this.onMouse,!0),e.addEventListener("mousedown",this.onMouse,!0),e.addEventListener("mouseup",this.onMouse,!0)),e.addEventListener("click",this.onClick,!0),e.addEventListener("touchstart",this.onTouchStart,!1),e.addEventListener("touchmove",this.onTouchMove,!1),e.addEventListener("touchend",this.onTouchEnd,!1),e.addEventListener("touchcancel",this.onTouchCancel,!1),Event.prototype.stopImmediatePropagation||(e.removeEventListener=function(t,n,r){var i=Node.prototype.removeEventListener;"click"===t?i.call(e,t,n.hijacked||n,r):i.call(e,t,n,r)},e.addEventListener=function(t,n,r){var i=Node.prototype.addEventListener;"click"===t?i.call(e,t,n.hijacked||(n.hijacked=function(e){e.propagationStopped||n(e)}),r):i.call(e,t,n,r)}),"function"==typeof e.onclick&&(r=e.onclick,e.addEventListener("click",function(e){r(e)},!1),e.onclick=null)}}var s=navigator.userAgent.indexOf("Windows Phone")>=0,a=navigator.userAgent.indexOf("Android")>0&&!s,c=/iP(ad|hone|od)/.test(navigator.userAgent)&&!s,u=c&&/OS 4_\d(_\d)?/.test(navigator.userAgent),l=c&&/OS [6-7]_\d/.test(navigator.userAgent),f=navigator.userAgent.indexOf("BB10")>0;o.prototype.needsClick=function(e){switch(e.nodeName.toLowerCase()){case"button":case"select":case"textarea":if(e.disabled)return!0;break;case"input":if(c&&"file"===e.type||e.disabled)return!0;break;case"label":case"iframe":case"video":return!0}return/\bneedsclick\b/.test(e.className)},o.prototype.needsFocus=function(e){switch(e.nodeName.toLowerCase()){case"textarea":return!0;case"select":return!a;case"input":switch(e.type){case"button":case"checkbox":case"file":case"image":case"radio":case"submit":return!1}return!e.disabled&&!e.readOnly;default:return/\bneedsfocus\b/.test(e.className)}},o.prototype.sendClick=function(e,t){var n,r;document.activeElement&&document.activeElement!==e&&document.activeElement.blur(),r=t.changedTouches[0],n=document.createEvent("MouseEvents"),n.initMouseEvent(this.determineEventType(e),!0,!0,window,1,r.screenX,r.screenY,r.clientX,r.clientY,!1,!1,!1,!1,0,null),n.forwardedTouchEvent=!0,e.dispatchEvent(n)},o.prototype.determineEventType=function(e){return a&&"select"===e.tagName.toLowerCase()?"mousedown":"click"},o.prototype.focus=function(e){var t;c&&e.setSelectionRange&&0!==e.type.indexOf("date")&&"time"!==e.type&&"month"!==e.type?(t=e.value.length,e.setSelectionRange(t,t)):e.focus()},o.prototype.updateScrollParent=function(e){var t,n;if(t=e.fastClickScrollParent,!t||!t.contains(e)){n=e;do{if(n.scrollHeight>n.offsetHeight){t=n,e.fastClickScrollParent=n;break}n=n.parentElement}while(n)}t&&(t.fastClickLastScrollTop=t.scrollTop)},o.prototype.getTargetElementFromEventTarget=function(e){return e.nodeType===Node.TEXT_NODE?e.parentNode:e},o.prototype.onTouchStart=function(e){var t,n,r;if(e.targetTouches.length>1)return!0;if(t=this.getTargetElementFromEventTarget(e.target),n=e.targetTouches[0],c){if(r=window.getSelection(),r.rangeCount&&!r.isCollapsed)return!0;if(!u){if(n.identifier&&n.identifier===this.lastTouchIdentifier)return e.preventDefault(),!1;this.lastTouchIdentifier=n.identifier,this.updateScrollParent(t)}}return this.trackingClick=!0,this.trackingClickStart=e.timeStamp,this.targetElement=t,this.touchStartX=n.pageX,this.touchStartY=n.pageY,e.timeStamp-this.lastClickTime<this.tapDelay&&e.preventDefault(),!0},o.prototype.touchHasMoved=function(e){var t=e.changedTouches[0],n=this.touchBoundary;return Math.abs(t.pageX-this.touchStartX)>n||Math.abs(t.pageY-this.touchStartY)>n},o.prototype.onTouchMove=function(e){return!this.trackingClick||((this.targetElement!==this.getTargetElementFromEventTarget(e.target)||this.touchHasMoved(e))&&(this.trackingClick=!1,this.targetElement=null),!0)},o.prototype.findControl=function(e){return void 0!==e.control?e.control:e.htmlFor?document.getElementById(e.htmlFor):e.querySelector("button, input:not([type=hidden]), keygen, meter, output, progress, select, textarea")},o.prototype.onTouchEnd=function(e){var t,n,r,i,o,s=this.targetElement;if(!this.trackingClick)return!0;if(e.timeStamp-this.lastClickTime<this.tapDelay)return this.cancelNextClick=!0,!0;if(e.timeStamp-this.trackingClickStart>this.tapTimeout)return!0;if(this.cancelNextClick=!1,this.lastClickTime=e.timeStamp,n=this.trackingClickStart,this.trackingClick=!1,this.trackingClickStart=0,l&&(o=e.changedTouches[0],s=document.elementFromPoint(o.pageX-window.pageXOffset,o.pageY-window.pageYOffset)||s,s.fastClickScrollParent=this.targetElement.fastClickScrollParent),r=s.tagName.toLowerCase(),"label"===r){if(t=this.findControl(s)){if(this.focus(s),a)return!1;s=t}}else if(this.needsFocus(s))return e.timeStamp-n>100||c&&window.top!==window&&"input"===r?(this.targetElement=null,!1):(this.focus(s),this.sendClick(s,e),c&&"select"===r||(this.targetElement=null,e.preventDefault()),!1);return!(!c||u||(i=s.fastClickScrollParent,!i||i.fastClickLastScrollTop===i.scrollTop))||(this.needsClick(s)||(e.preventDefault(),this.sendClick(s,e)),!1)},o.prototype.onTouchCancel=function(){this.trackingClick=!1,this.targetElement=null},o.prototype.onMouse=function(e){return!this.targetElement||(!!e.forwardedTouchEvent||(!e.cancelable||(!(!this.needsClick(this.targetElement)||this.cancelNextClick)||(e.stopImmediatePropagation?e.stopImmediatePropagation():e.propagationStopped=!0,e.stopPropagation(),e.preventDefault(),!1))))},o.prototype.onClick=function(e){var t;return this.trackingClick?(this.targetElement=null,this.trackingClick=!1,!0):"submit"===e.target.type&&0===e.detail||(t=this.onMouse(e),t||(this.targetElement=null),t)},o.prototype.destroy=function(){var e=this.layer;a&&(e.removeEventListener("mouseover",this.onMouse,!0),e.removeEventListener("mousedown",this.onMouse,!0),e.removeEventListener("mouseup",this.onMouse,!0)),e.removeEventListener("click",this.onClick,!0),e.removeEventListener("touchstart",this.onTouchStart,!1),e.removeEventListener("touchmove",this.onTouchMove,!1),e.removeEventListener("touchend",this.onTouchEnd,!1),e.removeEventListener("touchcancel",this.onTouchCancel,!1)},o.notNeeded=function(e){var t,n,r,i;if("undefined"==typeof window.ontouchstart)return!0;if(n=+(/Chrome\/([0-9]+)/.exec(navigator.userAgent)||[,0])[1]){if(!a)return!0;if(t=document.querySelector("meta[name=viewport]")){if(t.content.indexOf("user-scalable=no")!==-1)return!0;if(n>31&&document.documentElement.scrollWidth<=window.outerWidth)return!0}}if(f&&(r=navigator.userAgent.match(/Version\/([0-9]*)\.([0-9]*)/),r[1]>=10&&r[2]>=3&&(t=document.querySelector("meta[name=viewport]")))){if(t.content.indexOf("user-scalable=no")!==-1)return!0;if(document.documentElement.scrollWidth<=window.outerWidth)return!0}return"none"===e.style.msTouchAction||"manipulation"===e.style.touchAction||(i=+(/Firefox\/([0-9]+)/.exec(navigator.userAgent)||[,0])[1],!!(i>=27&&(t=document.querySelector("meta[name=viewport]"),t&&(t.content.indexOf("user-scalable=no")!==-1||document.documentElement.scrollWidth<=window.outerWidth)))||("none"===e.style.touchAction||"manipulation"===e.style.touchAction))},o.attach=function(e,t){return new o(e,t)},"object"===i(n(34))&&n(34)?(r=function(){return o}.call(t,n,t,e),!(void 0!==r&&(e.exports=r))):"undefined"!=typeof e&&e.exports?(e.exports=o.attach,e.exports.FastClick=o):window.FastClick=o}()},function(e,t,n){"use strict";var r,i,o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};!function(s){var a=!1;if(r=s,i="function"==typeof r?r.call(t,n,t,e):r,!(void 0!==i&&(e.exports=i)),a=!0,"object"===o(t)&&(e.exports=s(),a=!0),!a){var c=window.Cookies,u=window.Cookies=s();u.noConflict=function(){return window.Cookies=c,u}}}(function(){function e(){for(var e=0,t={};e<arguments.length;e++){var n=arguments[e];for(var r in n)t[r]=n[r]}return t}function t(n){function r(t,i,o){var s;if("undefined"!=typeof document){if(arguments.length>1){if(o=e({path:"/"},r.defaults,o),"number"==typeof o.expires){var a=new Date;a.setMilliseconds(a.getMilliseconds()+864e5*o.expires),o.expires=a}try{s=JSON.stringify(i),/^[\{\[]/.test(s)&&(i=s)}catch(e){}return i=n.write?n.write(i,t):encodeURIComponent(String(i)).replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g,decodeURIComponent),t=encodeURIComponent(String(t)),t=t.replace(/%(23|24|26|2B|5E|60|7C)/g,decodeURIComponent),t=t.replace(/[\(\)]/g,escape),document.cookie=[t,"=",i,o.expires?"; expires="+o.expires.toUTCString():"",o.path?"; path="+o.path:"",o.domain?"; domain="+o.domain:"",o.secure?"; secure":""].join("")}t||(s={});for(var c=document.cookie?document.cookie.split("; "):[],u=/(%[0-9A-Z]{2})+/g,l=0;l<c.length;l++){var f=c[l].split("="),h=f.slice(1).join("=");'"'===h.charAt(0)&&(h=h.slice(1,-1));try{var d=f[0].replace(u,decodeURIComponent);if(h=n.read?n.read(h,d):n(h,d)||h.replace(u,decodeURIComponent),this.json)try{h=JSON.parse(h)}catch(e){}if(t===d){s=h;break}t||(s[d]=h)}catch(e){}}return s}}return r.set=r,r.get=function(e){return r.call(r,e)},r.getJSON=function(){return r.apply({json:!0},[].slice.call(arguments))},r.defaults={},r.remove=function(t,n){r(t,"",e(n,{expires:-1}))},r.withConverter=t,r}return t(function(){})})},function(e,t,n){"use strict";var r,i;"function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};!function(){var o=function e(t){var n=new e.Builder;return n.pipeline.add(e.trimmer,e.stopWordFilter,e.stemmer),n.searchPipeline.add(e.stemmer),t.call(n,n),n.build()};o.version="2.0.2",o.utils={},o.utils.warn=function(e){return function(t){e.console&&console.warn&&console.warn(t)}}(this),o.utils.asString=function(e){return void 0===e||null===e?"":e.toString()},o.idf=function(e,t){var n=0;for(var r in e)"_index"!=r&&(n+=Object.keys(e[r]).length);return(t-n+.5)/(n+.5)},o.Token=function(e,t){this.str=e||"",this.metadata=t||{}},o.Token.prototype.toString=function(){return this.str},o.Token.prototype.update=function(e){return this.str=e(this.str,this.metadata),this},o.Token.prototype.clone=function(e){return e=e||function(e){return e},new o.Token(e(this.str,this.metadata),this.metadata)},o.tokenizer=function(e){if(null==e||void 0==e)return[];if(Array.isArray(e))return e.map(function(e){return new o.Token(o.utils.asString(e).toLowerCase())});for(var t=e.toString().trim().toLowerCase(),n=t.length,r=[],i=0,s=0;i<=n;i++){var a=t.charAt(i),c=i-s;(a.match(o.tokenizer.separator)||i==n)&&(c>0&&r.push(new o.Token(t.slice(s,i),{position:[s,c],index:r.length})),s=i+1)}return r},o.tokenizer.separator=/[\s\-]+/,o.Pipeline=function(){this._stack=[]},o.Pipeline.registeredFunctions=Object.create(null),o.Pipeline.registerFunction=function(e,t){t in this.registeredFunctions&&o.utils.warn("Overwriting existing registered function: "+t),e.label=t,o.Pipeline.registeredFunctions[e.label]=e},o.Pipeline.warnIfFunctionNotRegistered=function(e){var t=e.label&&e.label in this.registeredFunctions;t||o.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},o.Pipeline.load=function(e){var t=new o.Pipeline;return e.forEach(function(e){var n=o.Pipeline.registeredFunctions[e];if(!n)throw new Error("Cannot load unregistered function: "+e);t.add(n)}),t},o.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(e){o.Pipeline.warnIfFunctionNotRegistered(e),this._stack.push(e)},this)},o.Pipeline.prototype.after=function(e,t){o.Pipeline.warnIfFunctionNotRegistered(t);var n=this._stack.indexOf(e);if(n==-1)throw new Error("Cannot find existingFn");n+=1,this._stack.splice(n,0,t)},o.Pipeline.prototype.before=function(e,t){o.Pipeline.warnIfFunctionNotRegistered(t);var n=this._stack.indexOf(e);if(n==-1)throw new Error("Cannot find existingFn");this._stack.splice(n,0,t)},o.Pipeline.prototype.remove=function(e){var t=this._stack.indexOf(e);t!=-1&&this._stack.splice(t,1)},o.Pipeline.prototype.run=function(e){for(var t=this._stack.length,n=0;n<t;n++){var r=this._stack[n];e=e.reduce(function(t,n,i){var o=r(n,i,e);return void 0===o||""===o?t:t.concat(o)},[])}return e},o.Pipeline.prototype.runString=function(e){var t=new o.Token(e);return this.run([t]).map(function(e){return e.toString()})},o.Pipeline.prototype.reset=function(){this._stack=[]},o.Pipeline.prototype.toJSON=function(){return this._stack.map(function(e){return o.Pipeline.warnIfFunctionNotRegistered(e),e.label})},o.Vector=function(e){this._magnitude=0,this.elements=e||[]},o.Vector.prototype.insert=function(e,t){if(this._magnitude=0,0==this.elements.length)return void this.elements.push(e,t);for(var n=0,r=this.elements.length,i=r-n,o=2*Math.floor(i/2/2),s=this.elements[o];i>2;){if(s==e)throw"duplicate index";e>s&&(n=o),e<s&&(r=o),i=r-n,o=n+2*Math.floor(i/2/2),s=this.elements[o]}s>e&&this.elements.splice(o,0,e,t),s<e&&this.elements.splice(o+2,0,e,t)},o.Vector.prototype.magnitude=function(){if(this._magnitude)return this._magnitude;for(var e=0,t=this.elements.length,n=1;n<t;n+=2){var r=this.elements[n];e+=r*r}return this._magnitude=Math.sqrt(e)},o.Vector.prototype.dot=function(e){for(var t=0,n=this.elements,r=e.elements,i=n.length,o=r.length,s=0,a=0,c=0,u=0;c<i&&u<o;)s=n[c],a=r[u],s<a?c+=2:s>a?u+=2:s==a&&(t+=n[c+1]*r[u+1],c+=2,u+=2);return t},o.Vector.prototype.similarity=function(e){return this.dot(e)/(this.magnitude()*e.magnitude())},o.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),t=1,n=0;t<this.elements.length;t+=2,n++)e[n]=this.elements[t];return e},o.Vector.prototype.toJSON=function(){return this.elements},o.stemmer=function(){var e={ational:"ate",tional:"tion",enci:"ence",anci:"ance",izer:"ize",bli:"ble",alli:"al",entli:"ent",eli:"e",ousli:"ous",ization:"ize",ation:"ate",ator:"ate",alism:"al",iveness:"ive",fulness:"ful",ousness:"ous",aliti:"al",iviti:"ive",biliti:"ble",logi:"log"},t={icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:""},n="[^aeiou]",r="[aeiouy]",i=n+"[^aeiouy]*",o=r+"[aeiou]*",s="^("+i+")?"+o+i,a="^("+i+")?"+o+i+"("+o+")?$",c="^("+i+")?"+o+i+o+i,u="^("+i+")?"+r,l=new RegExp(s),f=new RegExp(c),h=new RegExp(a),d=new RegExp(u),p=/^(.+?)(ss|i)es$/,m=/^(.+?)([^s])s$/,v=/^(.+?)eed$/,y=/^(.+?)(ed|ing)$/,g=/.$/,w=/(at|bl|iz)$/,b=new RegExp("([^aeiouylsz])\\1$"),_=new RegExp("^"+i+r+"[^aeiouwxy]$"),x=/^(.+?[^aeiou])y$/,E=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,k=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,S=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,T=/^(.+?)(s|t)(ion)$/,L=/^(.+?)e$/,C=/ll$/,O=new RegExp("^"+i+r+"[^aeiouwxy]$"),P=function(n){var r,i,o,s,a,c,u;if(n.length<3)return n;if(o=n.substr(0,1),"y"==o&&(n=o.toUpperCase()+n.substr(1)),s=p,a=m,s.test(n)?n=n.replace(s,"$1$2"):a.test(n)&&(n=n.replace(a,"$1$2")),s=v,a=y,s.test(n)){var P=s.exec(n);s=l,s.test(P[1])&&(s=g,n=n.replace(s,""))}else if(a.test(n)){var P=a.exec(n);r=P[1],a=d,a.test(r)&&(n=r,a=w,c=b,u=_,a.test(n)?n+="e":c.test(n)?(s=g,n=n.replace(s,"")):u.test(n)&&(n+="e"))}if(s=x,s.test(n)){var P=s.exec(n);r=P[1],n=r+"i"}if(s=E,s.test(n)){var P=s.exec(n);r=P[1],i=P[2],s=l,s.test(r)&&(n=r+e[i])}if(s=k,s.test(n)){var P=s.exec(n);r=P[1],i=P[2],s=l,s.test(r)&&(n=r+t[i])}if(s=S,a=T,s.test(n)){var P=s.exec(n);r=P[1],s=f,s.test(r)&&(n=r)}else if(a.test(n)){var P=a.exec(n);r=P[1]+P[2],a=f,a.test(r)&&(n=r)}if(s=L,s.test(n)){var P=s.exec(n);r=P[1],s=f,a=h,c=O,(s.test(r)||a.test(r)&&!c.test(r))&&(n=r)}return s=C,a=f,s.test(n)&&a.test(n)&&(s=g,n=n.replace(s,"")),"y"==o&&(n=o.toLowerCase()+n.substr(1)),n};return function(e){return e.update(P)}}(),o.Pipeline.registerFunction(o.stemmer,"stemmer"),o.generateStopWordFilter=function(e){var t=e.reduce(function(e,t){return e[t]=t,e},{});return function(e){if(e&&t[e.toString()]!==e.toString())return e}},o.stopWordFilter=o.generateStopWordFilter(["a","able","about","across","after","all","almost","also","am","among","an","and","any","are","as","at","be","because","been","but","by","can","cannot","could","dear","did","do","does","either","else","ever","every","for","from","get","got","had","has","have","he","her","hers","him","his","how","however","i","if","in","into","is","it","its","just","least","let","like","likely","may","me","might","most","must","my","neither","no","nor","not","of","off","often","on","only","or","other","our","own","rather","said","say","says","she","should","since","so","some","than","that","the","their","them","then","there","these","they","this","tis","to","too","twas","us","wants","was","we","were","what","when","where","which","while","who","whom","why","will","with","would","yet","you","your"]),o.Pipeline.registerFunction(o.stopWordFilter,"stopWordFilter"),o.trimmer=function(e){return e.update(function(e){return e.replace(/^\W+/,"").replace(/\W+$/,"")})},o.Pipeline.registerFunction(o.trimmer,"trimmer"),o.TokenSet=function(){this.final=!1,this.edges={},this.id=o.TokenSet._nextId,o.TokenSet._nextId+=1},o.TokenSet._nextId=1,o.TokenSet.fromArray=function(e){for(var t=new o.TokenSet.Builder,n=0,r=e.length;n<r;n++)t.insert(e[n]);return t.finish(),t.root},o.TokenSet.fromClause=function(e){return"editDistance"in e?o.TokenSet.fromFuzzyString(e.term,e.editDistance):o.TokenSet.fromString(e.term)},o.TokenSet.fromFuzzyString=function(e,t){for(var n=new o.TokenSet,r=[{node:n,editsRemaining:t,str:e}];r.length;){var i=r.pop();if(i.str.length>0){var s,a=i.str.charAt(0);a in i.node.edges?s=i.node.edges[a]:(s=new o.TokenSet,i.node.edges[a]=s),1==i.str.length?s.final=!0:r.push({node:s,editsRemaining:i.editsRemaining,str:i.str.slice(1)})}if(i.editsRemaining>0&&i.str.length>1){var c,a=i.str.charAt(1);a in i.node.edges?c=i.node.edges[a]:(c=new o.TokenSet,i.node.edges[a]=c),i.str.length<=2?c.final=!0:r.push({node:c,editsRemaining:i.editsRemaining-1,str:i.str.slice(2)})}if(i.editsRemaining>0&&1==i.str.length&&(i.node.final=!0),i.editsRemaining>0&&i.str.length>=1){if("*"in i.node.edges)var u=i.node.edges["*"];else{var u=new o.TokenSet;i.node.edges["*"]=u}1==i.str.length?u.final=!0:r.push({node:u,editsRemaining:i.editsRemaining-1,str:i.str.slice(1)})}if(i.editsRemaining>0){if("*"in i.node.edges)var l=i.node.edges["*"];else{var l=new o.TokenSet;i.node.edges["*"]=l}0==i.str.length?l.final=!0:r.push({node:l,editsRemaining:i.editsRemaining-1,str:i.str})}if(i.editsRemaining>0&&i.str.length>1){var f,h=i.str.charAt(0),d=i.str.charAt(1);d in i.node.edges?f=i.node.edges[d]:(f=new o.TokenSet,i.node.edges[d]=f),1==i.str.length?f.final=!0:r.push({node:f,editsRemaining:i.editsRemaining-1,str:h+i.str.slice(2)})}}return n},o.TokenSet.fromString=function(e){for(var t=new o.TokenSet,n=t,r=!1,i=0,s=e.length;i<s;i++){var a=e[i],c=i==s-1;if("*"==a)r=!0,t.edges[a]=t,t.final=c;else{var u=new o.TokenSet;u.final=c,t.edges[a]=u,t=u,r&&(t.edges["*"]=n)}}return n},o.TokenSet.prototype.toArray=function(){for(var e=[],t=[{prefix:"",node:this}];t.length;){var n=t.pop(),r=Object.keys(n.node.edges),i=r.length;n.node.final&&e.push(n.prefix);for(var o=0;o<i;o++){var s=r[o];t.push({prefix:n.prefix.concat(s),node:n.node.edges[s]})}}return e},o.TokenSet.prototype.toString=function(){if(this._str)return this._str;for(var e=this.final?"1":"0",t=Object.keys(this.edges).sort(),n=t.length,r=0;r<n;r++){var i=t[r],o=this.edges[i];e=e+i+o.id}return e},o.TokenSet.prototype.intersect=function(e){for(var t=new o.TokenSet,n=void 0,r=[{qNode:e,output:t,node:this}];r.length;){n=r.pop();for(var i=Object.keys(n.qNode.edges),s=i.length,a=Object.keys(n.node.edges),c=a.length,u=0;u<s;u++)for(var l=i[u],f=0;f<c;f++){var h=a[f];if(h==l||"*"==l){var d=n.node.edges[h],p=n.qNode.edges[l],m=d.final&&p.final,v=void 0;h in n.output.edges?(v=n.output.edges[h],v.final=v.final||m):(v=new o.TokenSet,v.final=m,n.output.edges[h]=v),r.push({qNode:p,output:v,node:d})}}}return t},o.TokenSet.Builder=function(){this.previousWord="",this.root=new o.TokenSet,this.uncheckedNodes=[],this.minimizedNodes={}},o.TokenSet.Builder.prototype.insert=function(e){var t,n=0;if(e<this.previousWord)throw new Error("Out of order word insertion");for(var r=0;r<e.length&&r<this.previousWord.length&&e[r]==this.previousWord[r];r++)n++;this.minimize(n),t=0==this.uncheckedNodes.length?this.root:this.uncheckedNodes[this.uncheckedNodes.length-1].child;for(var r=n;r<e.length;r++){var i=new o.TokenSet,s=e[r];t.edges[s]=i,this.uncheckedNodes.push({parent:t,char:s,child:i}),t=i}t.final=!0,this.previousWord=e},o.TokenSet.Builder.prototype.finish=function(){this.minimize(0)},o.TokenSet.Builder.prototype.minimize=function(e){for(var t=this.uncheckedNodes.length-1;t>=e;t--){var n=this.uncheckedNodes[t],r=n.child.toString();r in this.minimizedNodes?n.parent.edges[n.char]=this.minimizedNodes[r]:(n.child._str=r,this.minimizedNodes[r]=n.child),this.uncheckedNodes.pop()}},o.Index=function(e){this.invertedIndex=e.invertedIndex,this.documentVectors=e.documentVectors,this.tokenSet=e.tokenSet,this.documentCount=e.documentCount,this.averageDocumentLength=e.averageDocumentLength,this.b=e.b,this.k1=e.k1,this.fields=e.fields,this.pipeline=e.pipeline},o.Index.prototype.search=function(e){return this.query(function(t){var n=new o.QueryParser(e,t);n.parse()})},o.Index.prototype.query=function(e){var t=new o.Query(this.fields),n=Object.create(null),r=new o.Vector;e.call(t,t);for(var i=0;i<t.clauses.length;i++){var s=t.clauses[i],a=null;a=s.usePipeline?this.pipeline.runString(s.term):[s.term];for(var c=0;c<a.length;c++){var u=a[c];s.term=u;for(var l=o.TokenSet.fromClause(s),f=this.tokenSet.intersect(l).toArray(),h=0;h<f.length;h++){var d=f[h],p=this.invertedIndex[d],m=p._index,v=o.idf(p,this.documentCount),y=1,g=v*((this.k1+1)*y)/(this.k1*(1-this.b+this.b*(t.clauses.length/this.averageDocumentLength))+y);r.insert(m,g*s.boost);for(var w=0;w<s.fields.length;w++)for(var b=s.fields[w],_=p[b],x=Object.keys(_),E=0;E<x.length;E++){var k,S,T=x[E];k=_[T],S=new o.MatchData(d,b,k),T in n?n[T].combine(S):n[T]=S}}}}for(var x=Object.keys(n),L=[],i=0;i<x.length;i++){var C=x[i],O=this.documentVectors[C],g=r.similarity(O);L.push({ref:C,score:g,matchData:n[C]})}return L.sort(function(e,t){return t.score-e.score})},o.Index.prototype.toJSON=function(){var e=Object.keys(this.invertedIndex).sort().map(function(e){return[e,this.invertedIndex[e]]},this),t=Object.keys(this.documentVectors).map(function(e){return[e,this.documentVectors[e].toJSON()]},this);return{version:o.version,averageDocumentLength:this.averageDocumentLength,b:this.b,k1:this.k1,fields:this.fields,documentVectors:t,invertedIndex:e,pipeline:this.pipeline.toJSON()}},o.Index.load=function(e){var t={},n={},r=e.documentVectors,i=0,s={},a=e.invertedIndex,c=new o.TokenSet.Builder,u=o.Pipeline.load(e.pipeline);e.version!=o.version&&o.utils.warn("Version mismatch when loading serialised index. Current version of lunr '"+o.version+"' does not match serialized index '"+e.version+"'");for(var l=0;l<r.length;l++,i++){var f=r[l],h=f[0],d=f[1];n[h]=new o.Vector(d)}for(var l=0;l<a.length;l++){var f=a[l],p=f[0],m=f[1];c.insert(p),s[p]=m}return c.finish(),t.b=e.b,t.k1=e.k1,t.fields=e.fields,t.averageDocumentLength=e.averageDocumentLength,t.documentCount=i,t.documentVectors=n,t.invertedIndex=s,t.tokenSet=c.root,t.pipeline=u,new o.Index(t)},o.Builder=function(){this._ref="id",this._fields=[],this.invertedIndex=Object.create(null),this.documentTermFrequencies={},this.documentLengths={},this.tokenizer=o.tokenizer,this.pipeline=new o.Pipeline,this.searchPipeline=new o.Pipeline,this.documentCount=0,this._b=.75,this._k1=1.2,this.termIndex=0,this.metadataWhitelist=[]},o.Builder.prototype.ref=function(e){this._ref=e},o.Builder.prototype.field=function(e){this._fields.push(e)},o.Builder.prototype.b=function(e){e<0?this._b=0:e>1?this._b=1:this._b=e},o.Builder.prototype.k1=function(e){this._k1=e},o.Builder.prototype.add=function(e){var t=e[this._ref],n={};this.documentCount+=1,this.documentTermFrequencies[t]=n,this.documentLengths[t]=0;for(var r=0;r<this._fields.length;r++){var i=this._fields[r],o=e[i],s=this.tokenizer(o),a=this.pipeline.run(s);this.documentLengths[t]+=a.length;for(var c=0;c<a.length;c++){var u=a[c];if(void 0==n[u]&&(n[u]=0),n[u]+=1,void 0==this.invertedIndex[u]){var l=Object.create(null);l._index=this.termIndex,this.termIndex+=1;for(var f=0;f<this._fields.length;f++)l[this._fields[f]]=Object.create(null);this.invertedIndex[u]=l}void 0==this.invertedIndex[u][i][t]&&(this.invertedIndex[u][i][t]=Object.create(null));for(var h=0;h<this.metadataWhitelist.length;h++){var d=this.metadataWhitelist[h],p=u.metadata[d];void 0==this.invertedIndex[u][i][t][d]&&(this.invertedIndex[u][i][t][d]=[]),this.invertedIndex[u][i][t][d].push(p)}}}},o.Builder.prototype.calculateAverageDocumentLengths=function(){for(var e=Object.keys(this.documentLengths),t=e.length,n=0,r=0;r<t;r++){var i=e[r];n+=this.documentLengths[i]}this.averageDocumentLength=n/t},o.Builder.prototype.createDocumentVectors=function(){for(var e={},t=Object.keys(this.documentTermFrequencies),n=t.length,r=0;r<n;r++){for(var i=t[r],s=this.documentLengths[i],a=new o.Vector,c=this.documentTermFrequencies[i],u=Object.keys(c),l=u.length,f=0;f<l;f++){var h=u[f],d=c[h],p=this.invertedIndex[h]._index,m=o.idf(this.invertedIndex[h],this.documentCount),v=m*((this._k1+1)*d)/(this._k1*(1-this._b+this._b*(s/this.averageDocumentLength))+d),y=Math.round(1e3*v)/1e3;a.insert(p,y)}e[i]=a}this.documentVectors=e},o.Builder.prototype.createTokenSet=function(){this.tokenSet=o.TokenSet.fromArray(Object.keys(this.invertedIndex).sort())},o.Builder.prototype.build=function(){return this.calculateAverageDocumentLengths(),this.createDocumentVectors(),this.createTokenSet(),new o.Index({invertedIndex:this.invertedIndex,documentVectors:this.documentVectors,tokenSet:this.tokenSet,averageDocumentLength:this.averageDocumentLength,documentCount:this.documentCount,fields:this._fields,pipeline:this.searchPipeline,b:this._b,k1:this._k1})},o.Builder.prototype.use=function(e){var t=Array.prototype.slice.call(arguments,1);t.unshift(this),e.apply(this,t)},o.MatchData=function(e,t,n){this.metadata={},this.metadata[e]={},this.metadata[e][t]=n},o.MatchData.prototype.combine=function(e){for(var t=Object.keys(e.metadata),n=0;n<t.length;n++){var r=t[n],i=Object.keys(e.metadata[r]);void 0==this.metadata[r]&&(this.metadata[r]={});for(var o=0;o<i.length;o++){var s=i[o],a=Object.keys(e.metadata[r][s]);void 0==this.metadata[r][s]&&(this.metadata[r][s]={});for(var c=0;c<a.length;c++){var u=a[c];void 0==this.metadata[r][s][u]?this.metadata[r][s][u]=e.metadata[r][s][u]:this.metadata[r][s][u]=this.metadata[r][s][u].concat(e.metadata[r][s][u])}}}},o.Query=function(e){this.clauses=[],this.allFields=e},o.Query.prototype.clause=function(e){return"fields"in e||(e.fields=this.allFields),"boost"in e||(e.boost=1),"usePipeline"in e||(e.usePipeline=!0),this.clauses.push(e),this},o.Query.prototype.term=function(e,t){var n=t||{};return n.term=e,this.clause(n),this},o.QueryParseError=function(e,t,n){this.name="QueryParseError",this.message=e,this.start=t,this.end=n},o.QueryParseError.prototype=new Error,o.QueryLexer=function(e){this.lexemes=[],this.str=e,this.length=e.length,this.pos=0,this.start=0},o.QueryLexer.prototype.run=function(){for(var e=o.QueryLexer.lexText;e;)e=e(this)},o.QueryLexer.prototype.emit=function(e){this.lexemes.push({type:e,str:this.str.slice(this.start,this.pos),start:this.start,end:this.pos}),this.start=this.pos},o.QueryLexer.prototype.next=function(){if(this.pos==this.length)return o.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},o.QueryLexer.prototype.width=function(){return this.pos-this.start},o.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},o.QueryLexer.prototype.backup=function(){this.pos-=1},o.QueryLexer.prototype.acceptDigitRun=function(){var e,t;do e=this.next(),t=e.charCodeAt(0);while(t>47&&t<58);e!=o.QueryLexer.EOS&&this.backup()},o.QueryLexer.prototype.more=function(){return this.pos<this.length},o.QueryLexer.EOS="EOS",o.QueryLexer.FIELD="FIELD",o.QueryLexer.TERM="TERM",o.QueryLexer.EDIT_DISTANCE="EDIT_DISTANCE",o.QueryLexer.BOOST="BOOST",o.QueryLexer.lexField=function(e){return e.backup(),e.emit(o.QueryLexer.FIELD),e.ignore(),o.QueryLexer.lexText},o.QueryLexer.lexTerm=function(e){if(e.width()>1&&(e.backup(),e.emit(o.QueryLexer.TERM)),e.ignore(),e.more())return o.QueryLexer.lexText},o.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(o.QueryLexer.EDIT_DISTANCE),o.QueryLexer.lexText},o.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(o.QueryLexer.BOOST),o.QueryLexer.lexText},o.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(o.QueryLexer.TERM)},o.QueryLexer.termSeparator=o.tokenizer.separator,o.QueryLexer.lexText=function(e){for(;;){var t=e.next();if(t==o.QueryLexer.EOS)return o.QueryLexer.lexEOS;if(":"==t)return o.QueryLexer.lexField;if("~"==t)return e.backup(),e.width()>0&&e.emit(o.QueryLexer.TERM),o.QueryLexer.lexEditDistance;if("^"==t)return e.backup(),e.width()>0&&e.emit(o.QueryLexer.TERM),o.QueryLexer.lexBoost;if(t.match(o.QueryLexer.termSeparator))return o.QueryLexer.lexTerm}},o.QueryParser=function(e,t){this.lexer=new o.QueryLexer(e),this.query=t,this.currentClause={},this.lexemeIdx=0},o.QueryParser.prototype.parse=function(){ -this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=o.QueryParser.parseFieldOrTerm;e;)e=e(this);return this.query},o.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},o.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},o.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},o.QueryParser.parseFieldOrTerm=function(e){var t=e.peekLexeme();if(void 0!=t)switch(t.type){case o.QueryLexer.FIELD:return o.QueryParser.parseField;case o.QueryLexer.TERM:return o.QueryParser.parseTerm;default:var n="expected either a field or a term, found "+t.type+" with value '"+t.str+"'";throw new o.QueryParseError(n,t.start,t.end)}},o.QueryParser.parseField=function(e){var t=e.consumeLexeme();if(void 0!=t){if(e.query.allFields.indexOf(t.str)==-1){var n=e.query.allFields.map(function(e){return"'"+e+"'"}).join(),r="unrecognised field '"+t.str+"', possible fields: "+n;throw new o.QueryParseError(r,t.start,t.end)}e.currentClause.fields=[t.str];var i=e.peekLexeme();if(void 0==i){var r="expecting term, found nothing";throw new o.QueryParseError(r,t.start,t.end)}switch(i.type){case o.QueryLexer.TERM:return o.QueryParser.parseTerm;default:var r="expecting a field, found '"+i.type+"'";throw new o.QueryParseError(r,i.start,i.end)}}},o.QueryParser.parseTerm=function(e){var t=e.consumeLexeme();if(void 0!=t){e.currentClause.term=t.str.toLowerCase(),t.str.indexOf("*")!=-1&&(e.currentClause.usePipeline=!1);var n=e.peekLexeme();if(void 0==n)return void e.nextClause();switch(n.type){case o.QueryLexer.TERM:return e.nextClause(),o.QueryParser.parseTerm;case o.QueryLexer.FIELD:return e.nextClause(),o.QueryParser.parseField;case o.QueryLexer.EDIT_DISTANCE:return o.QueryParser.parseEditDistance;case o.QueryLexer.BOOST:return o.QueryParser.parseBoost;default:var r="Unexpected lexeme type '"+n.type+"'";throw new o.QueryParseError(r,n.start,n.end)}}},o.QueryParser.parseEditDistance=function(e){var t=e.consumeLexeme();if(void 0!=t){var n=parseInt(t.str,10);if(isNaN(n)){var r="edit distance must be numeric";throw new o.QueryParseError(r,t.start,t.end)}e.currentClause.editDistance=n;var i=e.peekLexeme();if(void 0==i)return void e.nextClause();switch(i.type){case o.QueryLexer.TERM:return e.nextClause(),o.QueryParser.parseTerm;case o.QueryLexer.FIELD:return e.nextClause(),o.QueryParser.parseField;case o.QueryLexer.EDIT_DISTANCE:return o.QueryParser.parseEditDistance;case o.QueryLexer.BOOST:return o.QueryParser.parseBoost;default:var r="Unexpected lexeme type '"+i.type+"'";throw new o.QueryParseError(r,i.start,i.end)}}},o.QueryParser.parseBoost=function(e){var t=e.consumeLexeme();if(void 0!=t){var n=parseInt(t.str,10);if(isNaN(n)){var r="boost must be numeric";throw new o.QueryParseError(r,t.start,t.end)}e.currentClause.boost=n;var i=e.peekLexeme();if(void 0==i)return void e.nextClause();switch(i.type){case o.QueryLexer.TERM:return e.nextClause(),o.QueryParser.parseTerm;case o.QueryLexer.FIELD:return e.nextClause(),o.QueryParser.parseField;case o.QueryLexer.EDIT_DISTANCE:return o.QueryParser.parseEditDistance;case o.QueryLexer.BOOST:return o.QueryParser.parseBoost;default:var r="Unexpected lexeme type '"+i.type+"'";throw new o.QueryParseError(r,i.start,i.end)}}},function(o,s){r=s,i="function"==typeof r?r.call(t,n,t,e):r,!(void 0!==i&&(e.exports=i))}(this,function(){return o})}()},function(e,t,n){"use strict";var r=n(75),i=n(77),o=n(79),s=n(83),a=n(86),c=n(88),u=n(93);t.a={Event:r.a,Header:i.a,Nav:o.a,Search:s.a,Sidebar:a.a,Source:c.a,Tabs:u.a}},function(e,t,n){"use strict";var r=n(33),i=n(76);t.a={Listener:r.a,MatchMedia:i.a}},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var i=(n(33),function e(t,n){r(this,e),this.handler_=function(e){e.matches?n.listen():n.unlisten()};var i=window.matchMedia(t);i.addListener(this.handler_),this.handler_(i)});t.a=i},function(e,t,n){"use strict";var r=n(78);t.a={Shadow:r.a}},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),o=function(){function e(t,n){r(this,e);var i="string"==typeof t?document.querySelector(t):t;if(!(i instanceof HTMLElement&&i.parentNode instanceof HTMLElement))throw new ReferenceError;if(this.el_=i.parentNode,i="string"==typeof n?document.querySelector(n):n,!(i instanceof HTMLElement))throw new ReferenceError;this.header_=i,this.height_=0,this.active_=!1}return i(e,[{key:"setup",value:function(){for(var e=this.el_;e=e.previousElementSibling;){if(!(e instanceof HTMLElement))throw new ReferenceError;this.height_+=e.offsetHeight}this.update()}},{key:"update",value:function(){var e=window.pageYOffset>=this.height_;e!==this.active_&&(this.header_.dataset.mdState=(this.active_=e)?"shadow":"")}},{key:"reset",value:function(){this.header_.dataset.mdState="",this.height_=0,this.active_=!1}}]),e}();t.a=o},function(e,t,n){"use strict";var r=n(80),i=n(81),o=n(82);t.a={Blur:r.a,Collapse:i.a,Scrolling:o.a}},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),o=function(){function e(t){r(this,e),this.els_="string"==typeof t?document.querySelectorAll(t):t,this.index_=0,this.offset_=window.pageYOffset,this.dir_=!1,this.anchors_=[].reduce.call(this.els_,function(e,t){return e.concat(document.getElementById(t.hash.substring(1))||[])},[])}return i(e,[{key:"setup",value:function(){this.update()}},{key:"update",value:function(){var e=window.pageYOffset,t=this.offset_-e<0;if(this.dir_!==t&&(this.index_=t?this.index_=0:this.index_=this.els_.length-1),0!==this.anchors_.length){if(this.offset_<=e)for(var n=this.index_+1;n<this.els_.length&&this.anchors_[n].offsetTop-80<=e;n++)n>0&&(this.els_[n-1].dataset.mdState="blur"),this.index_=n;else for(var r=this.index_;r>=0;r--){if(!(this.anchors_[r].offsetTop-80>e)){this.index_=r;break}r>0&&(this.els_[r-1].dataset.mdState="")}this.offset_=e,this.dir_=t}}},{key:"reset",value:function(){Array.prototype.forEach.call(this.els_,function(e){e.dataset.mdState=""}),this.index_=0,this.offset_=window.pageYOffset}}]),e}();t.a=o},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),o=function(){function e(t){r(this,e);var n="string"==typeof t?document.querySelector(t):t;if(!(n instanceof HTMLElement))throw new ReferenceError;this.el_=n}return i(e,[{key:"update",value:function(){var e=this,t=this.el_.getBoundingClientRect().height;if(t)this.el_.style.maxHeight=t+"px",requestAnimationFrame(function(){e.el_.setAttribute("data-md-state","animate"),e.el_.style.maxHeight="0px"});else{this.el_.setAttribute("data-md-state","expand"),this.el_.style.maxHeight="";var n=this.el_.getBoundingClientRect().height;this.el_.removeAttribute("data-md-state"),this.el_.style.maxHeight="0px",requestAnimationFrame(function(){e.el_.setAttribute("data-md-state","animate"),e.el_.style.maxHeight=n+"px"})}var r=function e(t){var n=t.target;if(!(n instanceof HTMLElement))throw new ReferenceError;n.removeAttribute("data-md-state"),n.style.maxHeight="",n.removeEventListener("transitionend",e)};this.el_.addEventListener("transitionend",r,!1)}},{key:"reset",value:function(){this.el_.dataset.mdState="",this.el_.style.maxHeight=""}}]),e}();t.a=o},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),o=function(){function e(t){r(this,e);var n="string"==typeof t?document.querySelector(t):t;if(!(n instanceof HTMLElement))throw new ReferenceError;this.el_=n}return i(e,[{key:"setup",value:function(){this.el_.children[1].style.webkitOverflowScrolling="touch";var e=this.el_.querySelectorAll("[data-md-toggle]");Array.prototype.forEach.call(e,function(e){if(!(e instanceof HTMLInputElement))throw new ReferenceError;if(e.checked){var t=e.nextElementSibling;if(!(t instanceof HTMLElement))throw new ReferenceError;for(;"NAV"!==t.tagName&&t.nextElementSibling;)t=t.nextElementSibling;if(!(e.parentNode instanceof HTMLElement&&e.parentNode.parentNode instanceof HTMLElement))throw new ReferenceError;var n=e.parentNode.parentNode,r=t.children[t.children.length-1];n.style.webkitOverflowScrolling="",r.style.webkitOverflowScrolling="touch"}})}},{key:"update",value:function(e){var t=e.target;if(!(t instanceof HTMLElement))throw new ReferenceError;var n=t.nextElementSibling;if(!(n instanceof HTMLElement))throw new ReferenceError;for(;"NAV"!==n.tagName&&n.nextElementSibling;)n=n.nextElementSibling;if(!(t.parentNode instanceof HTMLElement&&t.parentNode.parentNode instanceof HTMLElement))throw new ReferenceError;var r=t.parentNode.parentNode,i=n.children[n.children.length-1];if(r.style.webkitOverflowScrolling="",i.style.webkitOverflowScrolling="",!t.checked){var o=function e(){n instanceof HTMLElement&&(r.style.webkitOverflowScrolling="touch",n.removeEventListener("transitionend",e))};n.addEventListener("transitionend",o,!1)}if(t.checked){var s=function e(){n instanceof HTMLElement&&(i.style.webkitOverflowScrolling="touch",n.removeEventListener("transitionend",e))};n.addEventListener("transitionend",s,!1)}}},{key:"reset",value:function(){this.el_.children[1].style.webkitOverflowScrolling="";var e=this.el_.querySelectorAll("[data-md-toggle]");Array.prototype.forEach.call(e,function(e){if(!(e instanceof HTMLInputElement))throw new ReferenceError;if(e.checked){var t=e.nextElementSibling;if(!(t instanceof HTMLElement))throw new ReferenceError;for(;"NAV"!==t.tagName&&t.nextElementSibling;)t=t.nextElementSibling;if(!(e.parentNode instanceof HTMLElement&&e.parentNode.parentNode instanceof HTMLElement))throw new ReferenceError;var n=e.parentNode.parentNode,r=t.children[t.children.length-1];n.style.webkitOverflowScrolling="",r.style.webkitOverflowScrolling=""}})}}]),e}();t.a=o},function(e,t,n){"use strict";var r=n(84),i=n(85);t.a={Lock:r.a,Result:i.a}},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),o=function(){function e(t){r(this,e);var n="string"==typeof t?document.querySelector(t):t;if(!(n instanceof HTMLInputElement))throw new ReferenceError;if(this.el_=n,!document.body)throw new ReferenceError;this.lock_=document.body}return i(e,[{key:"setup",value:function(){this.update()}},{key:"update",value:function(){var e=this;this.el_.checked?(this.offset_=window.pageYOffset,setTimeout(function(){window.scrollTo(0,0),e.el_.checked&&(e.lock_.dataset.mdState="lock")},400)):(this.lock_.dataset.mdState="",setTimeout(function(){"undefined"!=typeof e.offset_&&window.scrollTo(0,e.offset_)},100))}},{key:"reset",value:function(){"lock"===this.lock_.dataset.mdState&&window.scrollTo(0,this.offset_),this.lock_.dataset.mdState=""}}]),e}();t.a=o},function(e,t,n){"use strict";(function(e){function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var i=n(70),o=n.n(i),s=n(73),a=n.n(s),c=function(){function e(e,t){var n=[],r=!0,i=!1,o=void 0;try{for(var s,a=e[Symbol.iterator]();!(r=(s=a.next()).done)&&(n.push(s.value),!t||n.length!==t);r=!0);}catch(e){i=!0,o=e}finally{try{!r&&a.return&&a.return()}finally{if(i)throw o}}return n}return function(t,n){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return e(t,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),u=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),l=function(){function t(e,n){r(this,t);var i="string"==typeof e?document.querySelector(e):e;if(!(i instanceof HTMLElement))throw new ReferenceError;this.el_=i;var o=Array.prototype.slice.call(this.el_.children),s=c(o,2),a=s[0],u=s[1];this.data_=n,this.meta_=a,this.list_=u,this.message_={placeholder:this.meta_.textContent,none:this.meta_.dataset.mdLangResultNone,one:this.meta_.dataset.mdLangResultOne,other:this.meta_.dataset.mdLangResultOther}}return u(t,[{key:"truncate_",value:function(e,t){var n=t;if(e.length>n){for(;" "!==e[n]&&--n>0;);return e.substring(0,n)+"..."}return e}},{key:"update",value:function(t){var n=this;if("focus"!==t.type||this.index_){if("focus"===t.type||"keyup"===t.type){var r=t.target;if(!(r instanceof HTMLInputElement))throw new ReferenceError;if(!this.index_||r.value===this.value_)return;for(;this.list_.firstChild;)this.list_.removeChild(this.list_.firstChild);if(this.value_=r.value,0===this.value_.length)return void(this.meta_.textContent=this.message_.placeholder);var i=this.index_.search(this.value_).reduce(function(e,t){var r=n.docs_.get(t.ref);if(r.parent){var i=r.parent.location;e.set(i,(e.get(i)||[]).concat(t))}else{var o=r.location;e.set(o,e.get(o)||[])}return e},new Map),s=new RegExp("\\b("+o()(this.value_.trim()).replace(" ","|")+")","img"),u=function(e){return"<em>"+e+"</em>"};i.forEach(function(t,r){var i=n.docs_.get(r);n.list_.appendChild(e.createElement("li",{class:"md-search-result__item"},e.createElement("a",{href:i.location,title:i.title,class:"md-search-result__link"},e.createElement("article",{class:"md-search-result__article md-search-result__article--document"},e.createElement("h1",{class:"md-search-result__title"},{__html:i.title.replace(s,u)}),i.text.length?e.createElement("p",{class:"md-search-result__teaser"},{__html:i.text.replace(s,u)}):{})),t.map(function(t){var r=n.docs_.get(t.ref);return e.createElement("a",{href:r.location,title:r.title,class:"md-search-result__link","data-md-rel":"anchor"},e.createElement("article",{class:"md-search-result__article"},e.createElement("h1",{class:"md-search-result__title"},{__html:r.title.replace(s,u)}),r.text.length?e.createElement("p",{class:"md-search-result__teaser"},{__html:n.truncate_(r.text.replace(s,u),400)}):{}))})))});var l=this.list_.querySelectorAll("[data-md-rel=anchor]");switch(Array.prototype.forEach.call(l,function(e){e.addEventListener("click",function(t){var n=document.querySelector("[data-md-toggle=search]");if(!(n instanceof HTMLInputElement))throw new ReferenceError;n.checked&&(n.checked=!1,n.dispatchEvent(new CustomEvent("change"))),t.preventDefault(),setTimeout(function(){document.location.href=e.href},100)})}),i.size){case 0:this.meta_.textContent=this.message_.none;break;case 1:this.meta_.textContent=this.message_.one;break;default:this.meta_.textContent=this.message_.other.replace("#",i.size)}}}else{var f=function(e){n.docs_=e.reduce(function(e,t){var n=t.location.split("#"),r=c(n,2),i=r[0],o=r[1];return o&&(t.parent=e.get(i),t.parent&&!t.parent.done&&(t.parent.title=t.title,t.parent.text=t.text,t.parent.done=!0)),t.text=t.text.replace(/\n/g," ").replace(/\s+/g," ").replace(/\s+([,.:;!?])/g,function(e,t){return t}),t.parent&&t.parent.title===t.title||e.set(t.location,t),e},new Map);var t=n.docs_;n.index_=a()(function(){var e=this;this.field("title",{boost:10}),this.field("text"),this.ref("location"),t.forEach(function(t){return e.add(t)})})};setTimeout(function(){return"function"==typeof n.data_?n.data_().then(f):f(n.data_)},250)}}}]),t}();t.a=l}).call(t,n(13))},function(e,t,n){"use strict";var r=n(87);t.a={Position:r.a}},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),o=function(){function e(t,n){r(this,e);var i="string"==typeof t?document.querySelector(t):t;if(!(i instanceof HTMLElement&&i.parentNode instanceof HTMLElement))throw new ReferenceError;if(this.el_=i,this.parent_=i.parentNode,i="string"==typeof n?document.querySelector(n):n,!(i instanceof HTMLElement))throw new ReferenceError;this.header_=i,this.height_=0,this.pad_="fixed"===window.getComputedStyle(this.header_).position}return i(e,[{key:"setup",value:function(){var e=Array.prototype.reduce.call(this.parent_.children,function(e,t){return Math.max(e,t.offsetTop)},0);this.offset_=e-(this.pad_?this.header_.offsetHeight:0),this.update()}},{key:"update",value:function(e){var t=window.pageYOffset,n=window.innerHeight;e&&"resize"===e.type&&this.setup();var r={top:this.pad_?this.header_.offsetHeight:0,bottom:this.parent_.offsetTop+this.parent_.offsetHeight},i=n-r.top-Math.max(0,this.offset_-t)-Math.max(0,t+n-r.bottom);i!==this.height_&&(this.el_.style.height=(this.height_=i)+"px"),t>=this.offset_?"lock"!==this.el_.dataset.mdState&&(this.el_.dataset.mdState="lock"):"lock"===this.el_.dataset.mdState&&(this.el_.dataset.mdState="")}},{key:"reset",value:function(){this.el_.dataset.mdState="",this.el_.style.height="",this.height_=0}}]),e}();t.a=o},function(e,t,n){"use strict";var r=n(89),i=n(92);t.a={Adapter:r.a,Repository:i.a}},function(e,t,n){"use strict";var r=n(91);t.a={GitHub:r.a}},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var i=n(72),o=n.n(i),s=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),a=function(){function e(t){r(this,e);var n="string"==typeof t?document.querySelector(t):t;if(!(n instanceof HTMLAnchorElement))throw new ReferenceError;this.el_=n,this.base_=this.el_.href,this.salt_=this.hash_(this.base_)}return s(e,[{key:"fetch",value:function(){var e=this;return new Promise(function(t){var n=o.a.getJSON(e.salt_+".cache-source");"undefined"!=typeof n?t(n):e.fetch_().then(function(n){o.a.set(e.salt_+".cache-source",n,{expires:1/96}),t(n)})})}},{key:"fetch_",value:function(){throw new Error("fetch_(): Not implemented")}},{key:"format_",value:function(e){return e>1e4?(e/1e3).toFixed(0)+"k":e>1e3?(e/1e3).toFixed(1)+"k":""+e}},{key:"hash_",value:function(e){var t=0;if(0===e.length)return t;for(var n=0,r=e.length;n<r;n++)t=(t<<5)-t+e.charCodeAt(n),t|=0;return t}}]),e}();t.a=a},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function o(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var s=n(90),a=function(){function e(e,t){var n=[],r=!0,i=!1,o=void 0;try{for(var s,a=e[Symbol.iterator]();!(r=(s=a.next()).done)&&(n.push(s.value),!t||n.length!==t);r=!0);}catch(e){i=!0,o=e}finally{try{!r&&a.return&&a.return()}finally{if(i)throw o}}return n}return function(t,n){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return e(t,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),c=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),u=function(e){function t(e){r(this,t);var n=i(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e)),o=/^.+github\.com\/([^\/]+)\/?([^\/]+)?.*$/.exec(n.base_);if(o&&3===o.length){var s=a(o,3),c=s[1],u=s[2];n.base_="https://api.github.com/users/"+c+"/repos",n.name_=u}return n}return o(t,e),c(t,[{key:"fetch_",value:function(){var e=this;return fetch(this.base_).then(function(e){return e.json()}).then(function(t){if(!(t instanceof Array))throw new TypeError;if(e.name_){var n=t.find(function(t){return t.name===e.name_});return n?[e.format_(n.stargazers_count)+" Stars",e.format_(n.forks_count)+" Forks"]:[]}return[t.length+" Repositories"]})}}]),t}(s.a);t.a=u},function(e,t,n){"use strict";(function(e){function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var r=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),i=function(){function t(e){n(this,t);var r="string"==typeof e?document.querySelector(e):e;if(!(r instanceof HTMLElement))throw new ReferenceError;this.el_=r}return r(t,[{key:"initialize",value:function(t){t.length&&this.el_.children.length&&this.el_.children[this.el_.children.length-1].appendChild(e.createElement("ul",{class:"md-source__facts"},t.map(function(t){return e.createElement("li",{class:"md-source__fact"},t)}))),this.el_.dataset.mdState="done"}}]),t}();t.a=i}).call(t,n(13))},function(e,t,n){"use strict";var r=n(94);t.a={Toggle:r.a}},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),o=function(){function e(t){r(this,e);var n="string"==typeof t?document.querySelector(t):t;if(!(n instanceof Node))throw new ReferenceError;this.el_=n,this.offset_=5,this.active_=!1}return i(e,[{key:"update",value:function(){var e=window.pageYOffset>=this.offset_;e!==this.active_&&(this.el_.dataset.mdState=(this.active_=e)?"hidden":"")}},{key:"reset",value:function(){this.el_.dataset.mdState="",this.active_=!1}}]),e}();t.a=o},function(e,t,n){n(35),n(36),n(37),e.exports=n(38)}]); \ No newline at end of file diff --git a/articles/material/assets/javascripts/modernizr-1df76c4e58.js b/articles/material/assets/javascripts/modernizr-1df76c4e58.js deleted file mode 100644 index 10e055e2a29de95d04be2d97870f7b9546b92f0f..0000000000000000000000000000000000000000 --- a/articles/material/assets/javascripts/modernizr-1df76c4e58.js +++ /dev/null @@ -1 +0,0 @@ -!function(e,n,t){function r(e,n){return typeof e===n}function o(e){var n=x.className,t=C._config.classPrefix||"";if(b&&(n=n.baseVal),C._config.enableJSClass){var r=new RegExp("(^|\\s)"+t+"no-js(\\s|$)");n=n.replace(r,"$1"+t+"js$2")}C._config.enableClasses&&(n+=" "+t+e.join(" "+t),b?x.className.baseVal=n:x.className=n)}function i(e,n){if("object"==typeof e)for(var t in e)_(e,t)&&i(t,e[t]);else{var r=(e=e.toLowerCase()).split("."),s=C[r[0]];if(2==r.length&&(s=s[r[1]]),void 0!==s)return C;n="function"==typeof n?n():n,1==r.length?C[r[0]]=n:(!C[r[0]]||C[r[0]]instanceof Boolean||(C[r[0]]=new Boolean(C[r[0]])),C[r[0]][r[1]]=n),o([(n&&0!=n?"":"no-")+r.join("-")]),C._trigger(e,n)}return C}function s(e,n){return!!~(""+e).indexOf(n)}function f(){return"function"!=typeof n.createElement?n.createElement(arguments[0]):b?n.createElementNS.call(n,"http://www.w3.org/2000/svg",arguments[0]):n.createElement.apply(n,arguments)}function a(){var e=n.body;return e||((e=f(b?"svg":"body")).fake=!0),e}function l(e,t,r,o){var i,s,l,u,p="modernizr",d=f("div"),c=a();if(parseInt(r,10))for(;r--;)(l=f("div")).id=o?o[r]:p+(r+1),d.appendChild(l);return i=f("style"),i.type="text/css",i.id="s"+p,(c.fake?c:d).appendChild(i),c.appendChild(d),i.styleSheet?i.styleSheet.cssText=e:i.appendChild(n.createTextNode(e)),d.id=p,c.fake&&(c.style.background="",c.style.overflow="hidden",u=x.style.overflow,x.style.overflow="hidden",x.appendChild(c)),s=t(d,e),c.fake?(c.parentNode.removeChild(c),x.style.overflow=u,x.offsetHeight):d.parentNode.removeChild(d),!!s}function u(e){return e.replace(/([A-Z])/g,function(e,n){return"-"+n.toLowerCase()}).replace(/^ms-/,"-ms-")}function p(n,r){var o=n.length;if("CSS"in e&&"supports"in e.CSS){for(;o--;)if(e.CSS.supports(u(n[o]),r))return!0;return!1}if("CSSSupportsRule"in e){for(var i=[];o--;)i.push("("+u(n[o])+":"+r+")");return i=i.join(" or "),l("@supports ("+i+") { #modernizr { position: absolute; } }",function(e){return"absolute"==getComputedStyle(e,null).position})}return t}function d(e){return e.replace(/([a-z])-([a-z])/g,function(e,n,t){return n+t.toUpperCase()}).replace(/^-/,"")}function c(e,n,o,i){function a(){u&&(delete z.style,delete z.modElem)}if(i=!r(i,"undefined")&&i,!r(o,"undefined")){var l=p(e,o);if(!r(l,"undefined"))return l}for(var u,c,h,m,v,g=["modernizr","tspan"];!z.style;)u=!0,z.modElem=f(g.shift()),z.style=z.modElem.style;for(h=e.length,c=0;c<h;c++)if(m=e[c],v=z.style[m],s(m,"-")&&(m=d(m)),z.style[m]!==t){if(i||r(o,"undefined"))return a(),"pfx"!=n||m;try{z.style[m]=o}catch(e){}if(z.style[m]!=v)return a(),"pfx"!=n||m}return a(),!1}function h(e,n){return function(){return e.apply(n,arguments)}}function m(e,n,t){var o;for(var i in e)if(e[i]in n)return!1===t?e[i]:(o=n[e[i]],r(o,"function")?h(o,t||n):o);return!1}function v(e,n,t,o,i){var s=e.charAt(0).toUpperCase()+e.slice(1),f=(e+" "+P.join(s+" ")+s).split(" ");return r(n,"string")||r(n,"undefined")?c(f,n,o,i):(f=(e+" "+j.join(s+" ")+s).split(" "),m(f,n,t))}function g(e,n,r){return v(e,t,t,n,r)}var y=[],w={_version:"3.3.1",_config:{classPrefix:"",enableClasses:!0,enableJSClass:!0,usePrefixes:!0},_q:[],on:function(e,n){var t=this;setTimeout(function(){n(t[e])},0)},addTest:function(e,n,t){y.push({name:e,fn:n,options:t})},addAsyncTest:function(e){y.push({name:null,fn:e})}},C=function(){};C.prototype=w,C=new C;var _,S=[],x=n.documentElement,b="svg"===x.nodeName.toLowerCase();!function(){var e={}.hasOwnProperty;_=r(e,"undefined")||r(e.call,"undefined")?function(e,n){return n in e&&r(e.constructor.prototype[n],"undefined")}:function(n,t){return e.call(n,t)}}(),w._l={},w.on=function(e,n){this._l[e]||(this._l[e]=[]),this._l[e].push(n),C.hasOwnProperty(e)&&setTimeout(function(){C._trigger(e,C[e])},0)},w._trigger=function(e,n){if(this._l[e]){var t=this._l[e];setTimeout(function(){var e;for(e=0;e<t.length;e++)(0,t[e])(n)},0),delete this._l[e]}},C._q.push(function(){w.addTest=i});var P=w._config.usePrefixes?"Moz O ms Webkit".split(" "):[];w._cssomPrefixes=P;var T={elem:f("modernizr")};C._q.push(function(){delete T.elem});var z={style:T.elem.style};C._q.unshift(function(){delete z.style});var j=w._config.usePrefixes?"Moz O ms Webkit".toLowerCase().split(" "):[];w._domPrefixes=j,w.testAllProps=v,w.testAllProps=g;var k=w.testStyles=l,E="CSS"in e&&"supports"in e.CSS,N="supportsCSS"in e;C.addTest("supports",E||N),C.addTest("csstransforms3d",function(){var e=!!g("perspective","1px",!0),n=C._config.usePrefixes;if(e&&(!n||"webkitPerspective"in x.style)){var t;C.supports?t="@supports (perspective: 1px)":(t="@media (transform-3d)",n&&(t+=",(-webkit-transform-3d)")),k("#modernizr{width:0;height:0}"+(t+="{#modernizr{width:7px;height:18px;margin:0;padding:0;border:0}}"),function(n){e=7===n.offsetWidth&&18===n.offsetHeight})}return e}),function(){var e,n,t,o,i,s;for(var f in y)if(y.hasOwnProperty(f)){if(e=[],(n=y[f]).name&&(e.push(n.name.toLowerCase()),n.options&&n.options.aliases&&n.options.aliases.length))for(t=0;t<n.options.aliases.length;t++)e.push(n.options.aliases[t].toLowerCase());for(o=r(n.fn,"function")?n.fn():n.fn,i=0;i<e.length;i++)1===(s=e[i].split(".")).length?C[s[0]]=o:(!C[s[0]]||C[s[0]]instanceof Boolean||(C[s[0]]=new Boolean(C[s[0]])),C[s[0]][s[1]]=o),S.push((o?"":"no-")+s.join("-"))}}(),o(S),delete w.addTest,delete w.addAsyncTest;for(var q=0;q<C._q.length;q++)C._q[q]();e.Modernizr=C}(window,document); \ No newline at end of file diff --git a/articles/material/assets/stylesheets/application-e2807e330f.css b/articles/material/assets/stylesheets/application-e2807e330f.css deleted file mode 100644 index 174a1a5bbfaae032e5a7fcf273dbe38d7864502c..0000000000000000000000000000000000000000 --- a/articles/material/assets/stylesheets/application-e2807e330f.css +++ /dev/null @@ -1 +0,0 @@ -html{box-sizing:border-box}*,:after,:before{box-sizing:inherit}html{-webkit-text-size-adjust:none;-ms-text-size-adjust:none;text-size-adjust:none}body{margin:0}hr{overflow:visible;box-sizing:content-box}a{-webkit-text-decoration-skip:objects}a,button,input,label{-webkit-tap-highlight-color:transparent}a{color:inherit;text-decoration:none}a:active,a:hover{outline-width:0}small,sub,sup{font-size:80%}sub,sup{position:relative;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}table{border-collapse:collapse;border-spacing:0}td,th{font-weight:400;vertical-align:top}button{padding:0;background:transparent;font-size:inherit}button,input{border:0;outline:0}.admonition:before,.md-icon,.md-nav__button,.md-nav__link:after,.md-nav__title:before,.md-search-result__article--document:before,.md-source-file:before,.md-typeset .critic.comment:before,.md-typeset .footnote-backref,.md-typeset .task-list-control .task-list-indicator:before{font-family:Material Icons;font-style:normal;font-variant:normal;font-weight:400;line-height:1;text-transform:none;white-space:nowrap;speak:none;word-wrap:normal;direction:ltr}.md-content__icon,.md-footer-nav__button,.md-header-nav__button,.md-nav__button,.md-nav__title:before,.md-search-result__article--document:before{display:inline-block;margin:.4rem;padding:.8rem;font-size:2.4rem;cursor:pointer}.md-icon--arrow-back:before{content:"arrow_back"}.md-icon--arrow-forward:before{content:"arrow_forward"}.md-icon--menu:before{content:"menu"}.md-icon--search:before{content:"search"}.md-icon--home:before{content:"school"}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body,input{color:rgba(0,0,0,.87);-webkit-font-feature-settings:"kern","liga";font-feature-settings:"kern","liga";font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-weight:400}code,kbd,pre{color:rgba(0,0,0,.87);-webkit-font-feature-settings:"kern";font-feature-settings:"kern";font-family:Courier New,Courier,monospace;font-weight:400}.md-typeset{font-size:1.6rem;line-height:1.6;-webkit-print-color-adjust:exact}.md-typeset blockquote,.md-typeset ol,.md-typeset p,.md-typeset ul{margin:1em 0}.md-typeset h1{margin:0 0 4rem;color:rgba(0,0,0,.54);font-size:3.125rem;line-height:1.3}.md-typeset h1,.md-typeset h2{font-weight:300;letter-spacing:-.01em}.md-typeset h2{margin:4rem 0 1.6rem;font-size:2.5rem;line-height:1.4}.md-typeset h3{margin:3.2rem 0 1.6rem;font-size:2rem;font-weight:400;letter-spacing:-.01em;line-height:1.5}.md-typeset h2+h3{margin-top:1.6rem}.md-typeset h4{font-size:1.6rem}.md-typeset h4,.md-typeset h5,.md-typeset h6{margin:1.6rem 0;font-weight:700;letter-spacing:-.01em}.md-typeset h5,.md-typeset h6{color:rgba(0,0,0,.54);font-size:1.28rem}.md-typeset h5{text-transform:uppercase}.md-typeset hr{margin:1.5em 0;border-bottom:.1rem dotted rgba(0,0,0,.26)}.md-typeset a{color:#3f51b5;word-break:break-word}.md-typeset a,.md-typeset a:before{-webkit-transition:color .125s;transition:color .125s}.md-typeset a:active,.md-typeset a:hover{color:#536dfe}.md-typeset code,.md-typeset pre{background-color:hsla(0,0%,93%,.5);color:#37474f;font-size:85%}.md-typeset code{margin:0 .29412em;padding:.07353em 0;border-radius:.2rem;box-shadow:.29412em 0 0 hsla(0,0%,93%,.5),-.29412em 0 0 hsla(0,0%,93%,.5);word-break:break-word;-webkit-box-decoration-break:clone;box-decoration-break:clone}.md-typeset h1 code,.md-typeset h2 code,.md-typeset h3 code,.md-typeset h4 code,.md-typeset h5 code,.md-typeset h6 code{margin:0;background-color:transparent;box-shadow:none}.md-typeset a>code{margin:inherit;padding:inherit;border-radius:none;background-color:inherit;color:inherit;box-shadow:none}.md-typeset pre{margin:1em 0;padding:1rem 1.2rem;border-radius:.2rem;line-height:1.4;overflow:auto;-webkit-overflow-scrolling:touch}.md-typeset pre::-webkit-scrollbar{width:.4rem;height:.4rem}.md-typeset pre::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.26)}.md-typeset pre::-webkit-scrollbar-thumb:hover{background-color:#536dfe}.md-typeset pre>code{margin:0;background-color:transparent;font-size:inherit;box-shadow:none;-webkit-box-decoration-break:none;box-decoration-break:none}.md-typeset kbd{padding:0 .29412em;border:.1rem solid #c9c9c9;border-radius:.2rem;border-bottom-color:#bcbcbc;background-color:#fcfcfc;color:#555;font-size:85%;box-shadow:0 .1rem 0 #b0b0b0;word-break:break-word}.md-typeset mark{margin:0 .25em;padding:.0625em 0;border-radius:.2rem;background-color:rgba(255,235,59,.5);box-shadow:.25em 0 0 rgba(255,235,59,.5),-.25em 0 0 rgba(255,235,59,.5);word-break:break-word;-webkit-box-decoration-break:clone;box-decoration-break:clone}.md-typeset abbr{border-bottom:.1rem dotted rgba(0,0,0,.54);text-decoration:none;cursor:help}.md-typeset small{opacity:.75}.md-typeset sub,.md-typeset sup{margin-left:.07812em}.md-typeset blockquote{padding-left:1.2rem;border-left:.4rem solid rgba(0,0,0,.26);color:rgba(0,0,0,.54)}.md-typeset ul{list-style-type:disc}.md-typeset ol,.md-typeset ul{margin-left:.625em;padding:0}.md-typeset ol ol,.md-typeset ul ol{list-style-type:lower-alpha}.md-typeset ol ol ol,.md-typeset ul ol ol{list-style-type:lower-roman}.md-typeset ol li,.md-typeset ul li{margin-bottom:.5em;margin-left:1.25em}.md-typeset ol li blockquote,.md-typeset ol li p,.md-typeset ul li blockquote,.md-typeset ul li p{margin:.5em 0}.md-typeset ol li:last-child,.md-typeset ul li:last-child{margin-bottom:0}.md-typeset ol li ol,.md-typeset ol li ul,.md-typeset ul li ol,.md-typeset ul li ul{margin:.5em 0 .5em .625em}.md-typeset dd{margin:1em 0 1em 1.875em}.md-typeset iframe,.md-typeset img,.md-typeset svg{max-width:100%}.md-typeset table:not([class]){box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12),0 3px 1px -2px rgba(0,0,0,.2);display:inline-block;max-width:100%;border-radius:.2rem;font-size:1.28rem;overflow:auto;-webkit-overflow-scrolling:touch}.md-typeset table:not([class])+*{margin-top:1.5em}.md-typeset table:not([class]) td:not([align]),.md-typeset table:not([class]) th:not([align]){text-align:left}.md-typeset table:not([class]) th{min-width:10rem;padding:1.2rem 1.6rem;background-color:rgba(0,0,0,.54);color:#fff;vertical-align:top}.md-typeset table:not([class]) td{padding:1.2rem 1.6rem;border-top:.1rem solid rgba(0,0,0,.07);vertical-align:top}.md-typeset table:not([class]) tr:first-child td{border-top:0}.md-typeset table:not([class]) a{word-break:normal}.md-typeset__scrollwrap{margin:1em -1.6rem;overflow-x:auto;-webkit-overflow-scrolling:touch}.md-typeset .md-typeset__table{display:inline-block;margin-bottom:.5em;padding:0 1.6rem}.md-typeset .md-typeset__table table{display:table;width:100%;margin:0;overflow:hidden}html{font-size:62.5%}body,html{height:100%}body{position:relative}hr{display:block;height:.1rem;padding:0;border:0}.md-svg{display:none}.md-grid{max-width:122rem;margin-right:auto;margin-left:auto}.md-container,.md-main{overflow:auto}.md-container{display:table;width:100%;height:100%;padding-top:5.6rem;table-layout:fixed}.md-main{display:table-row;height:100%}.md-main__inner{min-height:100%;padding-top:3rem;padding-bottom:.1rem}.md-toggle{display:none}.md-overlay{position:fixed;top:0;width:0;height:0;-webkit-transition:width 0s .25s,height 0s .25s,opacity .25s;transition:width 0s .25s,height 0s .25s,opacity .25s;background-color:rgba(0,0,0,.54);opacity:0;z-index:2}.md-flex{display:table}.md-flex__cell{display:table-cell;position:relative;vertical-align:top}.md-flex__cell--shrink{width:0}.md-flex__cell--stretch{display:table;width:100%;table-layout:fixed}.md-flex__ellipsis{display:table-cell;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}@page{margin:25mm}.md-content__inner{margin:0 1.6rem 2.4rem;padding-top:2.4rem}.md-content__inner:before{display:block;height:.8rem;content:""}.md-content__inner>:last-child{margin-bottom:0}.md-content__icon{position:relative;margin:.8rem 0;padding-right:0;padding-left:0;float:right}html body .md-typeset .md-content__icon{color:rgba(0,0,0,.26)}.md-header{position:fixed;top:0;right:0;left:0;height:5.6rem;-webkit-transition:background-color .25s;transition:background-color .25s;background-color:#3f51b5;color:#fff;z-index:1;-webkit-backface-visibility:hidden;backface-visibility:hidden}.md-header,.no-js .md-header{box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12),0 3px 1px -2px rgba(0,0,0,.2)}.md-header-nav{padding:.4rem}.md-header-nav__button{position:relative;-webkit-transition:opacity .25s;transition:opacity .25s;z-index:1}.md-header-nav__button:hover{opacity:.7}.md-header-nav__button.md-logo img{display:block}.no-js .md-header-nav__button.md-icon--search{display:none}.md-header-nav__title{padding:0 2rem;font-size:1.8rem;line-height:4.8rem}.md-header-nav__parent{color:hsla(0,0%,100%,.7)}.md-header-nav__parent:after{display:inline;color:hsla(0,0%,100%,.3);content:"/"}.md-header-nav__source{display:none}.md-footer-nav{background-color:rgba(0,0,0,.87);color:#fff}.md-footer-nav__inner{padding:.4rem;overflow:auto}.md-footer-nav__link{padding-top:2.8rem;padding-bottom:.8rem;-webkit-transition:opacity .25s;transition:opacity .25s}.md-footer-nav__link:hover{opacity:.7}.md-footer-nav__link--prev{width:25%;float:left}.md-footer-nav__link--next{width:75%;float:right;text-align:right}.md-footer-nav__button{-webkit-transition:background .25s;transition:background .25s}.md-footer-nav__title{position:relative;padding:0 2rem;font-size:1.8rem;line-height:4.8rem}.md-footer-nav__direction{position:absolute;right:0;left:0;margin-top:-2rem;padding:0 2rem;color:hsla(0,0%,100%,.7);font-size:1.5rem}.md-footer-meta{background:rgba(0,0,0,.895)}.md-footer-meta__inner{margin-bottom:-.1rem;padding:.4rem;overflow:auto}html .md-footer-meta.md-typeset a{color:hsla(0,0%,100%,.7)}.md-footer-copyright{margin:0 1.2rem;padding:.8rem 0;color:hsla(0,0%,100%,.3);font-size:1.28rem}.md-footer-copyright__highlight{color:hsla(0,0%,100%,.7)}.md-footer-social{margin:0 .8rem;padding:.4rem 0 1.2rem}.md-footer-social__link{display:inline-block;width:3.2rem;height:3.2rem;border:.1rem solid hsla(0,0%,100%,.12);border-radius:100%;color:hsla(0,0%,100%,.7);font-size:1.6rem;text-align:center}.md-footer-social__link:before{line-height:1.9}.md-nav{font-size:1.4rem;line-height:1.3}.md-nav--secondary{-webkit-transition:border-left .25s;transition:border-left .25s;border-left:.4rem solid #3f51b5}.md-nav--secondary .md-nav__link--active{color:#3f51b5}.md-nav__title{display:block;padding:1.2rem 1.2rem 0;font-weight:700;text-overflow:ellipsis;overflow:hidden}.md-nav__title:before{display:none;content:"arrow_back"}.md-nav__title .md-nav__button{display:none}.md-nav__list{margin:0;padding:0;list-style:none}.md-nav__item{padding:0 1.2rem}.md-nav__item:last-child{padding-bottom:1.2rem}.md-nav__item .md-nav__item{padding-right:0}.md-nav__item .md-nav__item:last-child{padding-bottom:0}.md-nav__button img{width:100%;height:auto}.md-nav__link{display:block;margin-top:.625em;-webkit-transition:color .125s;transition:color .125s;text-overflow:ellipsis;cursor:pointer;overflow:hidden}.md-nav__item--nested>.md-nav__link:after{content:"keyboard_arrow_down"}html .md-nav__link[for=toc],html .md-nav__link[for=toc]+.md-nav__link:after,html .md-nav__link[for=toc]~.md-nav{display:none}.md-nav__link[data-md-state=blur]{color:rgba(0,0,0,.54)}.md-nav__item--active>.md-nav__link,.md-nav__link:active{color:#3f51b5}.md-nav__item--nested>.md-nav__link{color:inherit}.md-nav__link:focus,.md-nav__link:hover{color:#536dfe}.md-nav__source,.no-js .md-search{display:none}.md-search__overlay{opacity:0;z-index:1}.md-search__inner{width:100%}.md-search__form{position:relative}.md-search__input{position:relative;padding:0 4.8rem 0 7.2rem;text-overflow:ellipsis;z-index:2}.md-search__input::-webkit-input-placeholder{-webkit-transition:color .25s cubic-bezier(.1,.7,.1,1);transition:color .25s cubic-bezier(.1,.7,.1,1)}.md-search__input:-ms-input-placeholder{-webkit-transition:color .25s cubic-bezier(.1,.7,.1,1);transition:color .25s cubic-bezier(.1,.7,.1,1)}.md-search__input::placeholder{-webkit-transition:color .25s cubic-bezier(.1,.7,.1,1);transition:color .25s cubic-bezier(.1,.7,.1,1)}.md-search__input::-webkit-input-placeholder,.md-search__input~.md-search__icon{color:rgba(0,0,0,.54)}.md-search__input:-ms-input-placeholder,.md-search__input~.md-search__icon{color:rgba(0,0,0,.54)}.md-search__input::placeholder,.md-search__input~.md-search__icon{color:rgba(0,0,0,.54)}.md-search__input::-ms-clear{display:none}.md-search__icon{position:absolute;-webkit-transition:color .25s cubic-bezier(.1,.7,.1,1),opacity .25s;transition:color .25s cubic-bezier(.1,.7,.1,1),opacity .25s;font-size:2.4rem;cursor:pointer;z-index:2}.md-search__icon:hover{opacity:.7}.md-search__icon[for=search]{top:.8rem;left:1.2rem}.md-search__icon[for=search]:before{content:"search"}.md-search__icon[type=reset]{top:.8rem;right:1.2rem;-webkit-transform:scale(.125);transform:scale(.125);-webkit-transition:opacity .15s,-webkit-transform .15s cubic-bezier(.1,.7,.1,1);transition:opacity .15s,-webkit-transform .15s cubic-bezier(.1,.7,.1,1);transition:transform .15s cubic-bezier(.1,.7,.1,1),opacity .15s;transition:transform .15s cubic-bezier(.1,.7,.1,1),opacity .15s,-webkit-transform .15s cubic-bezier(.1,.7,.1,1);opacity:0}[data-md-toggle=search]:checked~.md-header .md-search__input:valid~.md-search__icon[type=reset]{-webkit-transform:scale(1);transform:scale(1);opacity:1}[data-md-toggle=search]:checked~.md-header .md-search__input:valid~.md-search__icon[type=reset]:hover{opacity:.7}.md-search__output{position:absolute;width:100%;border-radius:0 0 .2rem .2rem;overflow:hidden;z-index:1}.md-search__scrollwrap{height:100%;background:-webkit-gradient(linear,left top,left bottom,color-stop(10%,#fff),to(hsla(0,0%,100%,0))),-webkit-gradient(linear,left top,left bottom,from(rgba(0,0,0,.26)),color-stop(35%,rgba(0,0,0,.07)),color-stop(60%,transparent));background:linear-gradient(180deg,#fff 10%,hsla(0,0%,100%,0)),linear-gradient(180deg,rgba(0,0,0,.26),rgba(0,0,0,.07) 35%,transparent 60%);background-attachment:local,scroll;background-color:#fff;background-repeat:no-repeat;background-size:100% 2rem,100% 1rem;box-shadow:inset 0 .1rem 0 rgba(0,0,0,.07);overflow-y:auto;-webkit-overflow-scrolling:touch}.md-search-result{color:rgba(0,0,0,.87);word-break:break-word}.md-search-result__meta{padding:0 1.6rem;background-color:rgba(0,0,0,.07);color:rgba(0,0,0,.54);font-size:1.28rem;line-height:4rem}.md-search-result__list{margin:0;padding:0;border-top:.1rem solid rgba(0,0,0,.07);list-style:none}.md-search-result__item{box-shadow:0 -.1rem 0 rgba(0,0,0,.07)}.md-search-result__link{display:block;-webkit-transition:background .25s;transition:background .25s;outline:0;overflow:hidden}.md-search-result__link:hover,.md-search-result__link[data-md-state=active]{background-color:rgba(83,109,254,.1)}.md-search-result__link:hover .md-search-result__article:before,.md-search-result__link[data-md-state=active] .md-search-result__article:before{opacity:.7}.md-search-result__link:last-child .md-search-result__teaser{margin-bottom:1.2rem}.md-search-result__article{position:relative;padding:0 1.6rem;overflow:auto}.md-search-result__article--document:before{position:absolute;left:0;-webkit-transition:opacity .25s;transition:opacity .25s;color:rgba(0,0,0,.54);content:"find_in_page"}.md-search-result__article--document .md-search-result__title{margin:1.3rem 0;font-size:1.6rem;font-weight:400;line-height:1.4}.md-search-result__title{margin:.5em 0;font-size:1.28rem;font-weight:700;line-height:1.4}.md-search-result__teaser{display:-webkit-box;max-height:3.3rem;margin:.5em 0;color:rgba(0,0,0,.54);font-size:1.28rem;line-height:1.4;text-overflow:ellipsis;overflow:hidden;-webkit-box-orient:vertical;-webkit-line-clamp:2}.md-search-result em{font-style:normal;font-weight:700;text-decoration:underline}.md-sidebar{position:absolute;width:24.2rem;padding:2.4rem 0;overflow:hidden}.md-sidebar[data-md-state=lock]{position:fixed;top:5.6rem}.md-sidebar--secondary{display:none}.md-sidebar__scrollwrap{max-height:100%;margin:0 .4rem;overflow-y:auto;-webkit-backface-visibility:hidden;backface-visibility:hidden}.md-sidebar__scrollwrap::-webkit-scrollbar{width:.4rem;height:.4rem}.md-sidebar__scrollwrap::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.26)}.md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#536dfe}@-webkit-keyframes a{0%{height:0}to{height:1.3rem}}@keyframes a{0%{height:0}to{height:1.3rem}}@-webkit-keyframes b{0%{-webkit-transform:translateY(100%);transform:translateY(100%);opacity:0}50%{opacity:0}to{-webkit-transform:translateY(0);transform:translateY(0);opacity:1}}@keyframes b{0%{-webkit-transform:translateY(100%);transform:translateY(100%);opacity:0}50%{opacity:0}to{-webkit-transform:translateY(0);transform:translateY(0);opacity:1}}.md-source{display:block;padding-right:1.2rem;-webkit-transition:opacity .25s;transition:opacity .25s;font-size:1.3rem;line-height:1.2;white-space:nowrap}.md-source:hover{opacity:.7}.md-source:after,.md-source__icon{display:inline-block;height:4.8rem;content:"";vertical-align:middle}.md-source__icon{width:4.8rem}.md-source__icon svg{width:2.4rem;height:2.4rem;margin-top:1.2rem;margin-left:1.2rem}.md-source__icon+.md-source__repository{margin-left:-4.4rem;padding-left:4rem}.md-source__repository{display:inline-block;max-width:100%;margin-left:1.2rem;font-weight:700;text-overflow:ellipsis;overflow:hidden;vertical-align:middle}.md-source__facts{margin:0;padding:0;font-size:1.1rem;font-weight:700;list-style-type:none;opacity:.75;overflow:hidden}[data-md-state=done] .md-source__facts{-webkit-animation:a .25s ease-in;animation:a .25s ease-in}.md-source__fact{float:left}[data-md-state=done] .md-source__fact{-webkit-animation:b .4s ease-out;animation:b .4s ease-out}.md-source__fact:before{margin:0 .2rem;content:"\00B7"}.md-source__fact:first-child:before{display:none}.md-source-file{display:inline-block;margin:1em .5em 1em 0;padding-right:.5rem;border-radius:.2rem;background:rgba(0,0,0,.07);font-size:1.28rem;list-style-type:none;cursor:pointer;overflow:hidden}.md-source-file:before{display:inline-block;margin-right:.5rem;padding:.5rem;background:rgba(0,0,0,.26);color:#fff;font-size:1.6rem;content:"clear_all";vertical-align:middle}html .md-source-file{-webkit-transition:background .4s,color .4s,-webkit-box-shadow .4s cubic-bezier(.4,0,.2,1);transition:background .4s,color .4s,box-shadow .4s cubic-bezier(.4,0,.2,1)}html .md-source-file:before{-webkit-transition:inherit;transition:inherit}html body .md-typeset .md-source-file{color:rgba(0,0,0,.54)}.md-source-file:hover{box-shadow:0 0 8px rgba(0,0,0,.18),0 8px 16px rgba(0,0,0,.36)}.md-source-file:hover:before{background:#536dfe}.md-tabs{width:100%;-webkit-transition:background .25s;transition:background .25s;background:rgba(50,64,144,.9675);overflow:auto}.md-tabs__list{margin:0;margin-left:.4rem;padding:0;list-style:none;white-space:nowrap}.md-tabs__item{display:inline-block;height:4.8rem;padding-right:1.2rem;padding-left:1.2rem}.md-tabs__link{display:block;margin-top:1.6rem;-webkit-transition:color .25s,opacity .1s,-webkit-transform .4s cubic-bezier(.1,.7,.1,1);transition:color .25s,opacity .1s,-webkit-transform .4s cubic-bezier(.1,.7,.1,1);transition:color .25s,transform .4s cubic-bezier(.1,.7,.1,1),opacity .1s;transition:color .25s,transform .4s cubic-bezier(.1,.7,.1,1),opacity .1s,-webkit-transform .4s cubic-bezier(.1,.7,.1,1);color:hsla(0,0%,100%,.7);font-size:1.4rem}.md-tabs__link--active,.md-tabs__link:hover{color:#fff}.md-tabs__item:nth-child(2) .md-tabs__link{-webkit-transition-delay:.02s;transition-delay:.02s}.md-tabs__item:nth-child(3) .md-tabs__link{-webkit-transition-delay:.04s;transition-delay:.04s}.md-tabs__item:nth-child(4) .md-tabs__link{-webkit-transition-delay:.06s;transition-delay:.06s}.md-tabs__item:nth-child(5) .md-tabs__link{-webkit-transition-delay:.08s;transition-delay:.08s}.md-tabs__item:nth-child(6) .md-tabs__link{-webkit-transition-delay:.1s;transition-delay:.1s}.md-tabs__item:nth-child(7) .md-tabs__link{-webkit-transition-delay:.12s;transition-delay:.12s}.md-tabs__item:nth-child(8) .md-tabs__link{-webkit-transition-delay:.14s;transition-delay:.14s}.md-tabs__item:nth-child(9) .md-tabs__link{-webkit-transition-delay:.16s;transition-delay:.16s}.md-tabs__item:nth-child(10) .md-tabs__link{-webkit-transition-delay:.18s;transition-delay:.18s}.md-tabs__item:nth-child(11) .md-tabs__link{-webkit-transition-delay:.2s;transition-delay:.2s}.md-tabs__item:nth-child(12) .md-tabs__link{-webkit-transition-delay:.22s;transition-delay:.22s}.md-tabs__item:nth-child(13) .md-tabs__link{-webkit-transition-delay:.24s;transition-delay:.24s}.md-tabs__item:nth-child(14) .md-tabs__link{-webkit-transition-delay:.26s;transition-delay:.26s}.md-tabs__item:nth-child(15) .md-tabs__link{-webkit-transition-delay:.28s;transition-delay:.28s}.md-tabs__item:nth-child(16) .md-tabs__link{-webkit-transition-delay:.3s;transition-delay:.3s}.md-tabs[data-md-state=hidden]{background:#3f51b5;pointer-events:none}.md-tabs[data-md-state=hidden] .md-tabs__link{-webkit-transform:translateY(50%);transform:translateY(50%);-webkit-transition:color .25s,opacity .1s,-webkit-transform 0s .4s;transition:color .25s,opacity .1s,-webkit-transform 0s .4s;transition:color .25s,transform 0s .4s,opacity .1s;transition:color .25s,transform 0s .4s,opacity .1s,-webkit-transform 0s .4s;opacity:0}.admonition{position:relative;margin:1.5625em 0;padding:.8rem 1.2rem;border-left:3.2rem solid rgba(68,138,255,.4);border-radius:.2rem;background-color:rgba(68,138,255,.15);font-size:1.28rem}.admonition:before{position:absolute;left:-2.6rem;color:#fff;font-size:2rem;content:"edit";vertical-align:-.25em}.admonition :first-child{margin-top:0}.admonition :last-child{margin-bottom:0}.admonition.summary,.admonition.tldr{border-color:rgba(0,176,255,.4);background-color:rgba(0,176,255,.15)}.admonition.summary:before,.admonition.tldr:before{content:"subject"}.admonition.hint,.admonition.important,.admonition.tip{border-color:rgba(0,191,165,.4);background-color:rgba(0,191,165,.15)}.admonition.hint:before,.admonition.important:before,.admonition.tip:before{content:"whatshot"}.admonition.check,.admonition.done,.admonition.success{border-color:rgba(0,230,118,.4);background-color:rgba(0,230,118,.15)}.admonition.check:before,.admonition.done:before,.admonition.success:before{content:"done"}.admonition.attention,.admonition.caution,.admonition.warning{border-color:rgba(255,145,0,.4);background-color:rgba(255,145,0,.15)}.admonition.attention:before,.admonition.caution:before,.admonition.warning:before{content:"warning"}.admonition.fail,.admonition.failure,.admonition.missing{border-color:rgba(255,82,82,.4);background-color:rgba(255,82,82,.15)}.admonition.fail:before,.admonition.failure:before,.admonition.missing:before{content:"clear"}.admonition.danger,.admonition.error{border-color:rgba(255,23,68,.4);background-color:rgba(255,23,68,.15)}.admonition.danger:before,.admonition.error:before{content:"flash_on"}.admonition.bug{border-color:rgba(245,0,87,.4);background-color:rgba(245,0,87,.15)}.admonition.bug:before{content:"bug_report"}.admonition.cite,.admonition.quote{border-color:hsla(0,0%,62%,.4);background-color:hsla(0,0%,62%,.15)}.admonition.cite:before,.admonition.quote:before{content:"format_quote"}.admonition-title{font-weight:700}html .admonition-title{margin-bottom:0}html .admonition-title+*{margin-top:0}.codehilite .o,.codehilite .ow{color:inherit}.codehilite .ge{color:#000}.codehilite .gr{color:#a00}.codehilite .gh{color:#999}.codehilite .go{color:#888}.codehilite .gp{color:#555}.codehilite .gs{color:inherit}.codehilite .gu{color:#aaa}.codehilite .gt{color:#a00}.codehilite .gd{background-color:#fdd}.codehilite .gi{background-color:#dfd}.codehilite .k{color:#3b78e7}.codehilite .kc{color:#a71d5d}.codehilite .kd,.codehilite .kn{color:#3b78e7}.codehilite .kp{color:#a71d5d}.codehilite .kr,.codehilite .kt{color:#3e61a2}.codehilite .c,.codehilite .cm{color:#999}.codehilite .cp{color:#666}.codehilite .c1,.codehilite .ch,.codehilite .cs{color:#999}.codehilite .na,.codehilite .nb{color:#c2185b}.codehilite .bp{color:#3e61a2}.codehilite .nc{color:#c2185b}.codehilite .no{color:#3e61a2}.codehilite .nd,.codehilite .ni{color:#666}.codehilite .ne,.codehilite .nf{color:#c2185b}.codehilite .nl{color:#3b5179}.codehilite .nn{color:#ec407a}.codehilite .nt{color:#3b78e7}.codehilite .nv,.codehilite .vc,.codehilite .vg,.codehilite .vi{color:#3e61a2}.codehilite .nx{color:#ec407a}.codehilite .il,.codehilite .m,.codehilite .mf,.codehilite .mh,.codehilite .mi,.codehilite .mo{color:#e74c3c}.codehilite .s,.codehilite .sb,.codehilite .sc{color:#0d904f}.codehilite .sd{color:#999}.codehilite .s2{color:#0d904f}.codehilite .se,.codehilite .sh,.codehilite .si,.codehilite .sx{color:#183691}.codehilite .sr{color:#009926}.codehilite .s1,.codehilite .ss{color:#0d904f}.codehilite .err{color:#a61717}.codehilite .w{color:transparent}.codehilite .hll{display:block;margin:0 -1.2rem;padding:0 1.2rem;background-color:rgba(255,235,59,.5)}.md-typeset .codehilite{margin:1em 0;padding:1rem 1.2rem .8rem;border-radius:.2rem;background-color:hsla(0,0%,93%,.5);color:#37474f;line-height:1.4;overflow:auto;-webkit-overflow-scrolling:touch}.md-typeset .codehilite::-webkit-scrollbar{width:.4rem;height:.4rem}.md-typeset .codehilite::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.26)}.md-typeset .codehilite::-webkit-scrollbar-thumb:hover{background-color:#536dfe}.md-typeset .codehilite pre{display:inline-block;min-width:100%;margin:0;padding:0;background-color:transparent;overflow:visible;vertical-align:top}.md-typeset .codehilitetable{display:block;margin:1em 0;border-radius:.2em;font-size:1.6rem;overflow:hidden}.md-typeset .codehilitetable tbody,.md-typeset .codehilitetable td{display:block;padding:0}.md-typeset .codehilitetable tr{display:-webkit-box;display:-ms-flexbox;display:flex}.md-typeset .codehilitetable .codehilite,.md-typeset .codehilitetable .linenodiv{margin:0;border-radius:0}.md-typeset .codehilitetable .linenodiv{padding:1rem 1.2rem .8rem}.md-typeset .codehilitetable .linenodiv,.md-typeset .codehilitetable .linenodiv>pre{height:100%}.md-typeset .codehilitetable .linenos{background-color:rgba(0,0,0,.07);color:rgba(0,0,0,.26);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.md-typeset .codehilitetable .linenos pre{margin:0;padding:0;background-color:transparent;color:inherit;text-align:right}.md-typeset .codehilitetable .code{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow:hidden}.md-typeset>.codehilitetable{box-shadow:none}.md-typeset .footnote{color:rgba(0,0,0,.54);font-size:1.28rem}.md-typeset .footnote ol{margin-left:0}.md-typeset .footnote li{-webkit-transition:color .25s;transition:color .25s}.md-typeset .footnote li:before{display:block;height:0}.md-typeset .footnote li:target{color:rgba(0,0,0,.87)}.md-typeset .footnote li:target:before{margin-top:-9rem;padding-top:9rem;pointer-events:none}.md-typeset .footnote li :first-child{margin-top:0}.md-typeset .footnote li:hover .footnote-backref,.md-typeset .footnote li:target .footnote-backref{-webkit-transform:translateX(0);transform:translateX(0);opacity:1}.md-typeset .footnote li:hover .footnote-backref:hover,.md-typeset .footnote li:target .footnote-backref{color:#536dfe}.md-typeset .footnote-ref:before{display:inline;margin:0 .2em;border-left:.1rem solid rgba(0,0,0,.26);font-size:1.25em;content:"";vertical-align:-.5rem}.md-typeset .footnote-backref{display:inline-block;-webkit-transform:translateX(.5rem);transform:translateX(.5rem);-webkit-transition:color .25s,opacity .125s .125s,-webkit-transform .25s .125s;transition:color .25s,opacity .125s .125s,-webkit-transform .25s .125s;transition:transform .25s .125s,color .25s,opacity .125s .125s;transition:transform .25s .125s,color .25s,opacity .125s .125s,-webkit-transform .25s .125s;color:rgba(0,0,0,.26);font-size:0;opacity:0;vertical-align:text-bottom}.md-typeset .footnote-backref:before{font-size:1.6rem;content:"keyboard_return"}.md-typeset .headerlink{display:inline-block;margin-left:1rem;-webkit-transform:translateY(.5rem);transform:translateY(.5rem);-webkit-transition:color .25s,opacity .125s .25s,-webkit-transform .25s .25s;transition:color .25s,opacity .125s .25s,-webkit-transform .25s .25s;transition:transform .25s .25s,color .25s,opacity .125s .25s;transition:transform .25s .25s,color .25s,opacity .125s .25s,-webkit-transform .25s .25s;opacity:0}html body .md-typeset .headerlink{color:rgba(0,0,0,.26)}.md-typeset [id]:before{display:inline-block;content:""}.md-typeset [id]:target:before{margin-top:-9.8rem;padding-top:9.8rem}.md-typeset [id] .headerlink:focus,.md-typeset [id]:hover .headerlink,.md-typeset [id]:target .headerlink{-webkit-transform:translate(0);transform:translate(0);opacity:1}.md-typeset [id] .headerlink:focus,.md-typeset [id]:hover .headerlink:hover,.md-typeset [id]:target .headerlink{color:#536dfe}.md-typeset h1 .headerlink{display:none}.md-typeset h2[id]:before{display:block;margin-top:-.4rem;padding-top:.4rem}.md-typeset h2[id]:target:before{margin-top:-8.4rem;padding-top:8.4rem}.md-typeset h3[id]:before{display:block;margin-top:-.7rem;padding-top:.7rem}.md-typeset h3[id]:target:before{margin-top:-8.7rem;padding-top:8.7rem}.md-typeset h4[id]:before{display:block;margin-top:-.8rem;padding-top:.8rem}.md-typeset h4[id]:target:before{margin-top:-8.8rem;padding-top:8.8rem}.md-typeset h5[id]:before{display:block;margin-top:-1.1rem;padding-top:1.1rem}.md-typeset h5[id]:target:before{margin-top:-9.1rem;padding-top:9.1rem}.md-typeset h6[id]:before{display:block;margin-top:-1.1rem;padding-top:1.1rem}.md-typeset h6[id]:target:before{margin-top:-9.1rem;padding-top:9.1rem}.md-typeset .MJXc-display{margin:.75em 0;padding:.25em 0;overflow:auto;-webkit-overflow-scrolling:touch}.md-typeset .MathJax_CHTML{outline:0}.md-typeset .comment.critic,.md-typeset del.critic,.md-typeset ins.critic{margin:0 .25em;padding:.0625em 0;border-radius:.2rem;-webkit-box-decoration-break:clone;box-decoration-break:clone}.md-typeset del.critic{background-color:#fdd;box-shadow:.25em 0 0 #fdd,-.25em 0 0 #fdd}.md-typeset ins.critic{background-color:#dfd;box-shadow:.25em 0 0 #dfd,-.25em 0 0 #dfd}.md-typeset .critic.comment{background-color:hsla(0,0%,93%,.5);color:#37474f;box-shadow:.25em 0 0 hsla(0,0%,93%,.5),-.25em 0 0 hsla(0,0%,93%,.5)}.md-typeset .critic.comment:before{padding-right:.125em;color:rgba(0,0,0,.26);content:"chat";vertical-align:-.125em}.md-typeset .critic.block{display:block;margin:1em 0;padding-right:1.6rem;padding-left:1.6rem;box-shadow:none}.md-typeset .critic.block :first-child{margin-top:.5em}.md-typeset .critic.block :last-child{margin-bottom:.5em}.md-typeset .emojione{width:2rem;vertical-align:text-top}.md-typeset code.codehilite{margin:0 .29412em;padding:.07353em 0}.md-typeset .task-list-item{position:relative;list-style-type:none}.md-typeset .task-list-item [type=checkbox]{position:absolute;top:.45em;left:-2em}.md-typeset .task-list-control .task-list-indicator:before{position:absolute;top:.05em;left:-1.25em;color:rgba(0,0,0,.26);font-size:1.5em;content:"check_box_outline_blank";vertical-align:-.25em}.md-typeset .task-list-control [type=checkbox]:checked+.task-list-indicator:before{content:"check_box"}.md-typeset .task-list-control [type=checkbox]{opacity:0;z-index:-1}@media print{.md-typeset a:after{color:rgba(0,0,0,.54);content:" [" attr(href) "]"}.md-typeset code{box-shadow:none;-webkit-box-decoration-break:initial;box-decoration-break:slice}.md-content__icon,.md-footer,.md-header,.md-sidebar,.md-tabs,.md-typeset .headerlink{display:none}}@media only screen and (max-width:44.9375em){.md-typeset pre{margin:1em -1.6rem;padding:1rem 1.6rem;border-radius:0}.md-footer-nav__link--prev .md-footer-nav__title{display:none}.md-search-result__teaser{max-height:5rem;-webkit-line-clamp:3}.codehilite .hll{margin:0 -1.6rem;padding:0 1.6rem}.md-typeset>.codehilite{padding:1rem 1.6rem .8rem}.md-typeset>.codehilite,.md-typeset>.codehilitetable{margin:1em -1.6rem;border-radius:0}.md-typeset>.codehilitetable .codehilite,.md-typeset>.codehilitetable .linenodiv{padding:1rem 1.6rem}.md-typeset>p>.MJXc-display{margin:.75em -1.6rem;padding:.25em 1.6rem}}@media only screen and (min-width:100em){html{font-size:68.75%}}@media only screen and (min-width:125em){html{font-size:75%}}@media only screen and (max-width:59.9375em){body[data-md-state=lock]{overflow:hidden}.ios body[data-md-state=lock] .md-container{display:none}.md-nav--secondary{border-left:0}html .md-nav__link[for=toc]{display:block;padding-right:4.8rem}html .md-nav__link[for=toc]:after{color:inherit;content:"toc"}html .md-nav__link[for=toc]+.md-nav__link{display:none}html .md-nav__link[for=toc]~.md-nav{display:-webkit-box;display:-ms-flexbox;display:flex}.md-nav__source{display:block;padding:.4rem;background-color:rgba(50,64,144,.9675);color:#fff}.md-search__overlay{position:absolute;top:.4rem;left:.4rem;width:4rem;height:4rem;-webkit-transform-origin:center;transform-origin:center;-webkit-transition:opacity .2s .2s,-webkit-transform .3s .1s;transition:opacity .2s .2s,-webkit-transform .3s .1s;transition:transform .3s .1s,opacity .2s .2s;transition:transform .3s .1s,opacity .2s .2s,-webkit-transform .3s .1s;border-radius:2rem;background-color:#fff;overflow:hidden;pointer-events:none}[data-md-toggle=search]:checked~.md-header .md-search__overlay{-webkit-transition:opacity .1s,-webkit-transform .4s;transition:opacity .1s,-webkit-transform .4s;transition:transform .4s,opacity .1s;transition:transform .4s,opacity .1s,-webkit-transform .4s;opacity:1}.md-search__inner{position:fixed;top:0;left:100%;height:100%;-webkit-transform:translateX(5%);transform:translateX(5%);-webkit-transition:left 0s .3s,opacity .15s .15s,-webkit-transform .15s cubic-bezier(.4,0,.2,1) .15s;transition:left 0s .3s,opacity .15s .15s,-webkit-transform .15s cubic-bezier(.4,0,.2,1) .15s;transition:left 0s .3s,transform .15s cubic-bezier(.4,0,.2,1) .15s,opacity .15s .15s;transition:left 0s .3s,transform .15s cubic-bezier(.4,0,.2,1) .15s,opacity .15s .15s,-webkit-transform .15s cubic-bezier(.4,0,.2,1) .15s;opacity:0;z-index:2}[data-md-toggle=search]:checked~.md-header .md-search__inner{left:0;-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition:left 0s 0s,opacity .15s .15s,-webkit-transform .15s cubic-bezier(.1,.7,.1,1) .15s;transition:left 0s 0s,opacity .15s .15s,-webkit-transform .15s cubic-bezier(.1,.7,.1,1) .15s;transition:left 0s 0s,transform .15s cubic-bezier(.1,.7,.1,1) .15s,opacity .15s .15s;transition:left 0s 0s,transform .15s cubic-bezier(.1,.7,.1,1) .15s,opacity .15s .15s,-webkit-transform .15s cubic-bezier(.1,.7,.1,1) .15s;opacity:1}.md-search__input{width:100%;height:5.6rem;font-size:1.8rem}.md-search__icon[for=search]{top:1.6rem;left:1.6rem}.md-search__icon[for=search][for=search]:before{content:"arrow_back"}.md-search__icon[type=reset]{top:1.6rem;right:1.6rem}.md-search__output{top:5.6rem;bottom:0}.md-search-result__article--document:before{display:none}}@media only screen and (max-width:76.1875em){[data-md-toggle=drawer]:checked~.md-overlay{width:100%;height:100%;-webkit-transition:width 0s,height 0s,opacity .25s;transition:width 0s,height 0s,opacity .25s;opacity:1}.md-header-nav__button.md-icon--home,.md-header-nav__button.md-logo{display:none}.md-nav{background-color:#fff}.md-nav--primary,.md-nav--primary .md-nav{display:-webkit-box;display:-ms-flexbox;display:flex;position:absolute;top:0;right:0;left:0;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;height:100%;z-index:1}.md-nav--primary .md-nav__item,.md-nav--primary .md-nav__title{font-size:1.6rem;line-height:1.5}html .md-nav--primary .md-nav__title{position:relative;height:11.2rem;padding:6rem 1.6rem .4rem;background-color:rgba(0,0,0,.07);color:rgba(0,0,0,.54);font-weight:400;line-height:4.8rem;white-space:nowrap;cursor:pointer}html .md-nav--primary .md-nav__title:before{display:block;position:absolute;top:.4rem;left:.4rem;width:4rem;height:4rem;color:rgba(0,0,0,.54)}html .md-nav--primary .md-nav__title~.md-nav__list{background:-webkit-gradient(linear,left top,left bottom,color-stop(10%,#fff),to(hsla(0,0%,100%,0))),-webkit-gradient(linear,left top,left bottom,from(rgba(0,0,0,.26)),color-stop(35%,rgba(0,0,0,.07)),color-stop(60%,transparent));background:linear-gradient(180deg,#fff 10%,hsla(0,0%,100%,0)),linear-gradient(180deg,rgba(0,0,0,.26),rgba(0,0,0,.07) 35%,transparent 60%);background-attachment:local,scroll;background-color:#fff;background-repeat:no-repeat;background-size:100% 2rem,100% 1rem;box-shadow:inset 0 .1rem 0 rgba(0,0,0,.07)}html .md-nav--primary .md-nav__title~.md-nav__list>.md-nav__item:first-child{border-top:0}html .md-nav--primary .md-nav__title--site{position:relative;background-color:#3f51b5;color:#fff}html .md-nav--primary .md-nav__title--site .md-nav__button{display:block;position:absolute;top:.4rem;left:.4rem;width:6.4rem;height:6.4rem;font-size:4.8rem}html .md-nav--primary .md-nav__title--site:before{display:none}.md-nav--primary .md-nav__list{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow-y:auto}.md-nav--primary .md-nav__item{padding:0;border-top:.1rem solid rgba(0,0,0,.07)}.md-nav--primary .md-nav__item--nested>.md-nav__link{padding-right:4.8rem}.md-nav--primary .md-nav__item--nested>.md-nav__link:after{content:"keyboard_arrow_right"}.md-nav--primary .md-nav__link{position:relative;margin-top:0;padding:1.6rem}.md-nav--primary .md-nav__link:after{position:absolute;top:50%;right:1.2rem;margin-top:-1.2rem;color:rgba(0,0,0,.54);font-size:2.4rem}.md-nav--primary .md-nav__link:focus:after,.md-nav--primary .md-nav__link:hover:after{color:inherit}.md-nav--primary .md-nav--secondary .md-nav__link{position:static}.md-nav--primary .md-nav--secondary .md-nav{position:static;background-color:transparent}.md-nav--primary .md-nav--secondary .md-nav .md-nav__link{padding-left:2.8rem}.md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav__link{padding-left:4rem}.md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav__link{padding-left:5.2rem}.md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav .md-nav__link{padding-left:6.4rem}.md-nav__toggle~.md-nav{display:none}.csstransforms3d .md-nav__toggle~.md-nav{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transition:opacity .125s .05s,-webkit-transform .25s cubic-bezier(.8,0,.6,1);transition:opacity .125s .05s,-webkit-transform .25s cubic-bezier(.8,0,.6,1);transition:transform .25s cubic-bezier(.8,0,.6,1),opacity .125s .05s;transition:transform .25s cubic-bezier(.8,0,.6,1),opacity .125s .05s,-webkit-transform .25s cubic-bezier(.8,0,.6,1);opacity:0}.csstransforms3d .md-nav__toggle~.md-nav,.md-nav__toggle:checked~.md-nav{display:-webkit-box;display:-ms-flexbox;display:flex}.csstransforms3d .md-nav__toggle:checked~.md-nav{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition:opacity .125s .125s,-webkit-transform .25s cubic-bezier(.4,0,.2,1);transition:opacity .125s .125s,-webkit-transform .25s cubic-bezier(.4,0,.2,1);transition:transform .25s cubic-bezier(.4,0,.2,1),opacity .125s .125s;transition:transform .25s cubic-bezier(.4,0,.2,1),opacity .125s .125s,-webkit-transform .25s cubic-bezier(.4,0,.2,1);opacity:1}.md-sidebar--primary{position:fixed;top:0;left:-24.2rem;width:24.2rem;height:100%;-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition:-webkit-transform .25s cubic-bezier(.4,0,.2,1),-webkit-box-shadow .25s;transition:transform .25s cubic-bezier(.4,0,.2,1),box-shadow .25s;transition:transform .25s cubic-bezier(.4,0,.2,1),box-shadow .25s,-webkit-transform .25s cubic-bezier(.4,0,.2,1);background-color:#fff;z-index:2}.no-csstransforms3d .md-sidebar--primary{display:none}[data-md-toggle=drawer]:checked~.md-container .md-sidebar--primary{box-shadow:0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12),0 5px 5px -3px rgba(0,0,0,.4);-webkit-transform:translateX(24.2rem);transform:translateX(24.2rem)}.no-csstransforms3d [data-md-toggle=drawer]:checked~.md-container .md-sidebar--primary{display:block}.md-sidebar--primary .md-sidebar__scrollwrap{overflow:hidden;position:absolute;top:0;right:0;bottom:0;left:0;margin:0}.md-tabs{display:none}}@media only screen and (min-width:60em){.md-content{margin-right:24.2rem}.md-header-nav__button.md-icon--search{display:none}.md-header-nav__source{display:block;width:23rem;max-width:23rem;padding-right:1.2rem}.md-search{margin-right:2.8rem;padding:.4rem}.md-search__overlay{position:fixed;top:0;left:0;width:0;height:0;-webkit-transition:width 0s .25s,height 0s .25s,opacity .25s;transition:width 0s .25s,height 0s .25s,opacity .25s;background-color:rgba(0,0,0,.54);cursor:pointer}[data-md-toggle=search]:checked~.md-header .md-search__overlay{width:100%;height:100%;-webkit-transition:width 0s,height 0s,opacity .25s;transition:width 0s,height 0s,opacity .25s;opacity:1}.md-search__inner{position:relative}.md-search__form{width:23rem;float:right;-webkit-transition:width .25s cubic-bezier(.1,.7,.1,1);transition:width .25s cubic-bezier(.1,.7,.1,1);border-radius:.2rem}.md-search__input{width:100%;height:4rem;padding-left:4.8rem;-webkit-transition:background-color .25s cubic-bezier(.1,.7,.1,1),color .25s cubic-bezier(.1,.7,.1,1);transition:background-color .25s cubic-bezier(.1,.7,.1,1),color .25s cubic-bezier(.1,.7,.1,1);border-radius:.2rem;background-color:rgba(0,0,0,.26);color:#fff;font-size:1.6rem}.md-search__input+.md-search__icon,.md-search__input::-webkit-input-placeholder{color:#fff}.md-search__input+.md-search__icon,.md-search__input:-ms-input-placeholder{color:#fff}.md-search__input+.md-search__icon,.md-search__input::placeholder{color:#fff}.md-search__input:hover{background-color:hsla(0,0%,100%,.12)}[data-md-toggle=search]:checked~.md-header .md-search__input{border-radius:.2rem .2rem 0 0;background-color:#fff;color:rgba(0,0,0,.87);text-overflow:none}[data-md-toggle=search]:checked~.md-header .md-search__input+.md-search__icon,[data-md-toggle=search]:checked~.md-header .md-search__input::-webkit-input-placeholder{color:rgba(0,0,0,.54)}[data-md-toggle=search]:checked~.md-header .md-search__input+.md-search__icon,[data-md-toggle=search]:checked~.md-header .md-search__input:-ms-input-placeholder{color:rgba(0,0,0,.54)}[data-md-toggle=search]:checked~.md-header .md-search__input+.md-search__icon,[data-md-toggle=search]:checked~.md-header .md-search__input::placeholder{color:rgba(0,0,0,.54)}.md-search__output{top:4rem;-webkit-transition:opacity .4s;transition:opacity .4s;opacity:0}[data-md-toggle=search]:checked~.md-header .md-search__output{box-shadow:0 6px 10px 0 rgba(0,0,0,.14),0 1px 18px 0 rgba(0,0,0,.12),0 3px 5px -1px rgba(0,0,0,.4);opacity:1}.md-search__scrollwrap{max-height:0}[data-md-toggle=search]:checked~.md-header .md-search__scrollwrap{max-height:75vh}.md-search__scrollwrap::-webkit-scrollbar{width:.4rem;height:.4rem}.md-search__scrollwrap::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.26)}.md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#536dfe}.md-search-result__article,.md-search-result__meta{padding-left:4.8rem}.md-sidebar--secondary{display:block;margin-left:100%;-webkit-transform:translate(-100%);transform:translate(-100%)}}@media only screen and (min-width:76.25em){.md-content{margin-left:24.2rem}.md-content__inner{margin-right:2.4rem;margin-left:2.4rem}.md-header{box-shadow:none}.md-header[data-md-state=shadow]{box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12),0 3px 1px -2px rgba(0,0,0,.2)}.md-header-nav__button.md-icon--menu{display:none}.md-nav[data-md-state=animate]{-webkit-transition:max-height .25s cubic-bezier(.86,0,.07,1);transition:max-height .25s cubic-bezier(.86,0,.07,1)}.md-nav__toggle~.md-nav{max-height:0;overflow:hidden}.md-nav[data-md-state=expand],.md-nav__toggle:checked~.md-nav{max-height:100%}.md-nav__item--nested>.md-nav>.md-nav__title{display:none}.md-nav__item--nested>.md-nav__link:after{display:inline-block;-webkit-transform-origin:.45em .45em;transform-origin:.45em .45em;-webkit-transform-style:preserve-3d;transform-style:preserve-3d;vertical-align:-.125em}.js .md-nav__item--nested>.md-nav__link:after{-webkit-transition:-webkit-transform .4s;transition:-webkit-transform .4s;transition:transform .4s;transition:transform .4s,-webkit-transform .4s}.md-nav__item--nested .md-nav__toggle:checked~.md-nav__link:after{-webkit-transform:rotateX(180deg);transform:rotateX(180deg)}.md-search__scrollwrap,[data-md-toggle=search]:checked~.md-header .md-search__form{width:68.8rem}.md-sidebar--secondary{margin-left:122rem}.md-sidebar__inner{border-right:.1rem solid rgba(0,0,0,.07)}.md-tabs~.md-main .md-nav--primary>.md-nav__list>.md-nav__item--nested{font-size:0}.md-tabs--active~.md-main .md-nav--primary .md-nav__title--site{display:none}.md-tabs--active~.md-main .md-nav--primary>.md-nav__list>.md-nav__item{font-size:0}.md-tabs--active~.md-main .md-nav--primary>.md-nav__list>.md-nav__item--nested{display:none;font-size:1.4rem;overflow:auto}.md-tabs--active~.md-main .md-nav--primary>.md-nav__list>.md-nav__item--nested>.md-nav__link{margin-top:1.2rem;font-weight:700;pointer-events:none}.md-tabs--active~.md-main .md-nav--primary>.md-nav__list>.md-nav__item--nested>.md-nav__link:after{display:none}.md-tabs--active~.md-main .md-nav--primary>.md-nav__list>.md-nav__item--active{display:block}.md-tabs--active~.md-main .md-nav[data-md-level="1"]{max-height:none}.md-tabs--active~.md-main .md-nav[data-md-level="1"]>.md-nav__list>.md-nav__item{padding-left:0}}@media only screen and (max-width:29.9375em){.md-header-nav__parent{display:none}[data-md-toggle=search]:checked~.md-header .md-search__overlay{-webkit-transform:scale(45);transform:scale(45)}}@media only screen and (min-width:45em){.md-footer-nav__link{width:50%}.md-footer-copyright{max-width:75%;float:left}.md-footer-social{padding:1.2rem 0;float:right}}@media only screen and (min-width:30em) and (max-width:44.9375em){[data-md-toggle=search]:checked~.md-header .md-search__overlay{-webkit-transform:scale(60);transform:scale(60)}}@media only screen and (min-width:45em) and (max-width:59.9375em){[data-md-toggle=search]:checked~.md-header .md-search__overlay{-webkit-transform:scale(75);transform:scale(75)}}@media only screen and (min-width:60em) and (max-width:76.1875em){.md-search__scrollwrap,[data-md-toggle=search]:checked~.md-header .md-search__form{width:46.8rem}.md-search-result__teaser{max-height:5rem;-webkit-line-clamp:3}} \ No newline at end of file diff --git a/articles/material/assets/stylesheets/application-f78e5cb881.palette.css b/articles/material/assets/stylesheets/application-f78e5cb881.palette.css deleted file mode 100644 index 69bbee08520e775af2f7019e83e5d92d012915ee..0000000000000000000000000000000000000000 --- a/articles/material/assets/stylesheets/application-f78e5cb881.palette.css +++ /dev/null @@ -1 +0,0 @@ -button[data-md-color-accent],button[data-md-color-primary]{width:13rem;margin-bottom:.4rem;padding:2.4rem .8rem .4rem;-webkit-transition:background-color .25s,opacity .25s;transition:background-color .25s,opacity .25s;border-radius:.2rem;color:#fff;font-size:1.28rem;text-align:left;cursor:pointer}button[data-md-color-accent]:hover,button[data-md-color-primary]:hover{opacity:.75}button[data-md-color-primary=red]{background-color:#ef5350}[data-md-color-primary=red] .md-typeset a{color:#ef5350}[data-md-color-primary=red] .md-header{background-color:#ef5350}[data-md-color-primary=red] .md-nav__item--active>.md-nav__link,[data-md-color-primary=red] .md-nav__link:active{color:#ef5350}[data-md-color-primary=red] .md-nav__item--nested>.md-nav__link{color:inherit}button[data-md-color-primary=pink]{background-color:#e91e63}[data-md-color-primary=pink] .md-typeset a{color:#e91e63}[data-md-color-primary=pink] .md-header{background-color:#e91e63}[data-md-color-primary=pink] .md-nav__item--active>.md-nav__link,[data-md-color-primary=pink] .md-nav__link:active{color:#e91e63}[data-md-color-primary=pink] .md-nav__item--nested>.md-nav__link{color:inherit}button[data-md-color-primary=purple]{background-color:#ab47bc}[data-md-color-primary=purple] .md-typeset a{color:#ab47bc}[data-md-color-primary=purple] .md-header{background-color:#ab47bc}[data-md-color-primary=purple] .md-nav__item--active>.md-nav__link,[data-md-color-primary=purple] .md-nav__link:active{color:#ab47bc}[data-md-color-primary=purple] .md-nav__item--nested>.md-nav__link{color:inherit}button[data-md-color-primary=deep-purple]{background-color:#7e57c2}[data-md-color-primary=deep-purple] .md-typeset a{color:#7e57c2}[data-md-color-primary=deep-purple] .md-header{background-color:#7e57c2}[data-md-color-primary=deep-purple] .md-nav__item--active>.md-nav__link,[data-md-color-primary=deep-purple] .md-nav__link:active{color:#7e57c2}[data-md-color-primary=deep-purple] .md-nav__item--nested>.md-nav__link{color:inherit}button[data-md-color-primary=indigo]{background-color:#3f51b5}[data-md-color-primary=indigo] .md-typeset a{color:#3f51b5}[data-md-color-primary=indigo] .md-header{background-color:#3f51b5}[data-md-color-primary=indigo] .md-nav__item--active>.md-nav__link,[data-md-color-primary=indigo] .md-nav__link:active{color:#3f51b5}[data-md-color-primary=indigo] .md-nav__item--nested>.md-nav__link{color:inherit}button[data-md-color-primary=blue]{background-color:#2196f3}[data-md-color-primary=blue] .md-typeset a{color:#2196f3}[data-md-color-primary=blue] .md-header{background-color:#2196f3}[data-md-color-primary=blue] .md-nav__item--active>.md-nav__link,[data-md-color-primary=blue] .md-nav__link:active{color:#2196f3}[data-md-color-primary=blue] .md-nav__item--nested>.md-nav__link{color:inherit}button[data-md-color-primary=light-blue]{background-color:#03a9f4}[data-md-color-primary=light-blue] .md-typeset a{color:#03a9f4}[data-md-color-primary=light-blue] .md-header{background-color:#03a9f4}[data-md-color-primary=light-blue] .md-nav__item--active>.md-nav__link,[data-md-color-primary=light-blue] .md-nav__link:active{color:#03a9f4}[data-md-color-primary=light-blue] .md-nav__item--nested>.md-nav__link{color:inherit}button[data-md-color-primary=cyan]{background-color:#00bcd4}[data-md-color-primary=cyan] .md-typeset a{color:#00bcd4}[data-md-color-primary=cyan] .md-header{background-color:#00bcd4}[data-md-color-primary=cyan] .md-nav__item--active>.md-nav__link,[data-md-color-primary=cyan] .md-nav__link:active{color:#00bcd4}[data-md-color-primary=cyan] .md-nav__item--nested>.md-nav__link{color:inherit}button[data-md-color-primary=teal]{background-color:#009688}[data-md-color-primary=teal] .md-typeset a{color:#009688}[data-md-color-primary=teal] .md-header{background-color:#009688}[data-md-color-primary=teal] .md-nav__item--active>.md-nav__link,[data-md-color-primary=teal] .md-nav__link:active{color:#009688}[data-md-color-primary=teal] .md-nav__item--nested>.md-nav__link{color:inherit}button[data-md-color-primary=green]{background-color:#4caf50}[data-md-color-primary=green] .md-typeset a{color:#4caf50}[data-md-color-primary=green] .md-header{background-color:#4caf50}[data-md-color-primary=green] .md-nav__item--active>.md-nav__link,[data-md-color-primary=green] .md-nav__link:active{color:#4caf50}[data-md-color-primary=green] .md-nav__item--nested>.md-nav__link{color:inherit}button[data-md-color-primary=light-green]{background-color:#7cb342}[data-md-color-primary=light-green] .md-typeset a{color:#7cb342}[data-md-color-primary=light-green] .md-header{background-color:#7cb342}[data-md-color-primary=light-green] .md-nav__item--active>.md-nav__link,[data-md-color-primary=light-green] .md-nav__link:active{color:#7cb342}[data-md-color-primary=light-green] .md-nav__item--nested>.md-nav__link{color:inherit}button[data-md-color-primary=lime]{background-color:#c0ca33}[data-md-color-primary=lime] .md-typeset a{color:#c0ca33}[data-md-color-primary=lime] .md-header{background-color:#c0ca33}[data-md-color-primary=lime] .md-nav__item--active>.md-nav__link,[data-md-color-primary=lime] .md-nav__link:active{color:#c0ca33}[data-md-color-primary=lime] .md-nav__item--nested>.md-nav__link{color:inherit}button[data-md-color-primary=yellow]{background-color:#f9a825}[data-md-color-primary=yellow] .md-typeset a{color:#f9a825}[data-md-color-primary=yellow] .md-header{background-color:#f9a825}[data-md-color-primary=yellow] .md-nav__item--active>.md-nav__link,[data-md-color-primary=yellow] .md-nav__link:active{color:#f9a825}[data-md-color-primary=yellow] .md-nav__item--nested>.md-nav__link{color:inherit}button[data-md-color-primary=amber]{background-color:#ffb300}[data-md-color-primary=amber] .md-typeset a{color:#ffb300}[data-md-color-primary=amber] .md-header{background-color:#ffb300}[data-md-color-primary=amber] .md-nav__item--active>.md-nav__link,[data-md-color-primary=amber] .md-nav__link:active{color:#ffb300}[data-md-color-primary=amber] .md-nav__item--nested>.md-nav__link{color:inherit}button[data-md-color-primary=orange]{background-color:#fb8c00}[data-md-color-primary=orange] .md-typeset a{color:#fb8c00}[data-md-color-primary=orange] .md-header{background-color:#fb8c00}[data-md-color-primary=orange] .md-nav__item--active>.md-nav__link,[data-md-color-primary=orange] .md-nav__link:active{color:#fb8c00}[data-md-color-primary=orange] .md-nav__item--nested>.md-nav__link{color:inherit}button[data-md-color-primary=deep-orange]{background-color:#ff7043}[data-md-color-primary=deep-orange] .md-typeset a{color:#ff7043}[data-md-color-primary=deep-orange] .md-header{background-color:#ff7043}[data-md-color-primary=deep-orange] .md-nav__item--active>.md-nav__link,[data-md-color-primary=deep-orange] .md-nav__link:active{color:#ff7043}[data-md-color-primary=deep-orange] .md-nav__item--nested>.md-nav__link{color:inherit}button[data-md-color-primary=brown]{background-color:#795548}[data-md-color-primary=brown] .md-typeset a{color:#795548}[data-md-color-primary=brown] .md-header{background-color:#795548}[data-md-color-primary=brown] .md-nav__item--active>.md-nav__link,[data-md-color-primary=brown] .md-nav__link:active{color:#795548}[data-md-color-primary=brown] .md-nav__item--nested>.md-nav__link{color:inherit}button[data-md-color-primary=grey]{background-color:#757575}[data-md-color-primary=grey] .md-typeset a{color:#757575}[data-md-color-primary=grey] .md-header{background-color:#757575}[data-md-color-primary=grey] .md-nav__item--active>.md-nav__link,[data-md-color-primary=grey] .md-nav__link:active{color:#757575}[data-md-color-primary=grey] .md-nav__item--nested>.md-nav__link{color:inherit}button[data-md-color-primary=blue-grey]{background-color:#546e7a}[data-md-color-primary=blue-grey] .md-typeset a{color:#546e7a}[data-md-color-primary=blue-grey] .md-header{background-color:#546e7a}[data-md-color-primary=blue-grey] .md-nav__item--active>.md-nav__link,[data-md-color-primary=blue-grey] .md-nav__link:active{color:#546e7a}[data-md-color-primary=blue-grey] .md-nav__item--nested>.md-nav__link{color:inherit}button[data-md-color-accent=red]{background-color:#ff1744}[data-md-color-accent=red] .md-typeset a:active,[data-md-color-accent=red] .md-typeset a:hover{color:#ff1744}[data-md-color-accent=red] .md-typeset .codehilite::-webkit-scrollbar-thumb:hover,[data-md-color-accent=red] .md-typeset pre::-webkit-scrollbar-thumb:hover{background-color:#ff1744}[data-md-color-accent=red] .md-nav__link:hover,[data-md-color-accent=red] .md-typeset .footnote li:hover .footnote-backref:hover,[data-md-color-accent=red] .md-typeset .footnote li:target .footnote-backref,[data-md-color-accent=red] .md-typeset [id] .headerlink:focus,[data-md-color-accent=red] .md-typeset [id]:hover .headerlink:hover,[data-md-color-accent=red] .md-typeset [id]:target .headerlink{color:#ff1744}[data-md-color-accent=red] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#ff1744}[data-md-color-accent=red] .md-search-result__link:hover,[data-md-color-accent=red] .md-search-result__link[data-md-state=active]{background-color:rgba(255,23,68,.1)}[data-md-color-accent=red] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#ff1744}[data-md-color-accent=red] .md-source-file:hover:before{background-color:#ff1744}button[data-md-color-accent=pink]{background-color:#f50057}[data-md-color-accent=pink] .md-typeset a:active,[data-md-color-accent=pink] .md-typeset a:hover{color:#f50057}[data-md-color-accent=pink] .md-typeset .codehilite::-webkit-scrollbar-thumb:hover,[data-md-color-accent=pink] .md-typeset pre::-webkit-scrollbar-thumb:hover{background-color:#f50057}[data-md-color-accent=pink] .md-nav__link:hover,[data-md-color-accent=pink] .md-typeset .footnote li:hover .footnote-backref:hover,[data-md-color-accent=pink] .md-typeset .footnote li:target .footnote-backref,[data-md-color-accent=pink] .md-typeset [id] .headerlink:focus,[data-md-color-accent=pink] .md-typeset [id]:hover .headerlink:hover,[data-md-color-accent=pink] .md-typeset [id]:target .headerlink{color:#f50057}[data-md-color-accent=pink] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#f50057}[data-md-color-accent=pink] .md-search-result__link:hover,[data-md-color-accent=pink] .md-search-result__link[data-md-state=active]{background-color:rgba(245,0,87,.1)}[data-md-color-accent=pink] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#f50057}[data-md-color-accent=pink] .md-source-file:hover:before{background-color:#f50057}button[data-md-color-accent=purple]{background-color:#e040fb}[data-md-color-accent=purple] .md-typeset a:active,[data-md-color-accent=purple] .md-typeset a:hover{color:#e040fb}[data-md-color-accent=purple] .md-typeset .codehilite::-webkit-scrollbar-thumb:hover,[data-md-color-accent=purple] .md-typeset pre::-webkit-scrollbar-thumb:hover{background-color:#e040fb}[data-md-color-accent=purple] .md-nav__link:hover,[data-md-color-accent=purple] .md-typeset .footnote li:hover .footnote-backref:hover,[data-md-color-accent=purple] .md-typeset .footnote li:target .footnote-backref,[data-md-color-accent=purple] .md-typeset [id] .headerlink:focus,[data-md-color-accent=purple] .md-typeset [id]:hover .headerlink:hover,[data-md-color-accent=purple] .md-typeset [id]:target .headerlink{color:#e040fb}[data-md-color-accent=purple] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#e040fb}[data-md-color-accent=purple] .md-search-result__link:hover,[data-md-color-accent=purple] .md-search-result__link[data-md-state=active]{background-color:rgba(224,64,251,.1)}[data-md-color-accent=purple] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#e040fb}[data-md-color-accent=purple] .md-source-file:hover:before{background-color:#e040fb}button[data-md-color-accent=deep-purple]{background-color:#7c4dff}[data-md-color-accent=deep-purple] .md-typeset a:active,[data-md-color-accent=deep-purple] .md-typeset a:hover{color:#7c4dff}[data-md-color-accent=deep-purple] .md-typeset .codehilite::-webkit-scrollbar-thumb:hover,[data-md-color-accent=deep-purple] .md-typeset pre::-webkit-scrollbar-thumb:hover{background-color:#7c4dff}[data-md-color-accent=deep-purple] .md-nav__link:hover,[data-md-color-accent=deep-purple] .md-typeset .footnote li:hover .footnote-backref:hover,[data-md-color-accent=deep-purple] .md-typeset .footnote li:target .footnote-backref,[data-md-color-accent=deep-purple] .md-typeset [id] .headerlink:focus,[data-md-color-accent=deep-purple] .md-typeset [id]:hover .headerlink:hover,[data-md-color-accent=deep-purple] .md-typeset [id]:target .headerlink{color:#7c4dff}[data-md-color-accent=deep-purple] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#7c4dff}[data-md-color-accent=deep-purple] .md-search-result__link:hover,[data-md-color-accent=deep-purple] .md-search-result__link[data-md-state=active]{background-color:rgba(124,77,255,.1)}[data-md-color-accent=deep-purple] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#7c4dff}[data-md-color-accent=deep-purple] .md-source-file:hover:before{background-color:#7c4dff}button[data-md-color-accent=indigo]{background-color:#536dfe}[data-md-color-accent=indigo] .md-typeset a:active,[data-md-color-accent=indigo] .md-typeset a:hover{color:#536dfe}[data-md-color-accent=indigo] .md-typeset .codehilite::-webkit-scrollbar-thumb:hover,[data-md-color-accent=indigo] .md-typeset pre::-webkit-scrollbar-thumb:hover{background-color:#536dfe}[data-md-color-accent=indigo] .md-nav__link:hover,[data-md-color-accent=indigo] .md-typeset .footnote li:hover .footnote-backref:hover,[data-md-color-accent=indigo] .md-typeset .footnote li:target .footnote-backref,[data-md-color-accent=indigo] .md-typeset [id] .headerlink:focus,[data-md-color-accent=indigo] .md-typeset [id]:hover .headerlink:hover,[data-md-color-accent=indigo] .md-typeset [id]:target .headerlink{color:#536dfe}[data-md-color-accent=indigo] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#536dfe}[data-md-color-accent=indigo] .md-search-result__link:hover,[data-md-color-accent=indigo] .md-search-result__link[data-md-state=active]{background-color:rgba(83,109,254,.1)}[data-md-color-accent=indigo] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#536dfe}[data-md-color-accent=indigo] .md-source-file:hover:before{background-color:#536dfe}button[data-md-color-accent=blue]{background-color:#448aff}[data-md-color-accent=blue] .md-typeset a:active,[data-md-color-accent=blue] .md-typeset a:hover{color:#448aff}[data-md-color-accent=blue] .md-typeset .codehilite::-webkit-scrollbar-thumb:hover,[data-md-color-accent=blue] .md-typeset pre::-webkit-scrollbar-thumb:hover{background-color:#448aff}[data-md-color-accent=blue] .md-nav__link:hover,[data-md-color-accent=blue] .md-typeset .footnote li:hover .footnote-backref:hover,[data-md-color-accent=blue] .md-typeset .footnote li:target .footnote-backref,[data-md-color-accent=blue] .md-typeset [id] .headerlink:focus,[data-md-color-accent=blue] .md-typeset [id]:hover .headerlink:hover,[data-md-color-accent=blue] .md-typeset [id]:target .headerlink{color:#448aff}[data-md-color-accent=blue] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#448aff}[data-md-color-accent=blue] .md-search-result__link:hover,[data-md-color-accent=blue] .md-search-result__link[data-md-state=active]{background-color:rgba(68,138,255,.1)}[data-md-color-accent=blue] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#448aff}[data-md-color-accent=blue] .md-source-file:hover:before{background-color:#448aff}button[data-md-color-accent=light-blue]{background-color:#0091ea}[data-md-color-accent=light-blue] .md-typeset a:active,[data-md-color-accent=light-blue] .md-typeset a:hover{color:#0091ea}[data-md-color-accent=light-blue] .md-typeset .codehilite::-webkit-scrollbar-thumb:hover,[data-md-color-accent=light-blue] .md-typeset pre::-webkit-scrollbar-thumb:hover{background-color:#0091ea}[data-md-color-accent=light-blue] .md-nav__link:hover,[data-md-color-accent=light-blue] .md-typeset .footnote li:hover .footnote-backref:hover,[data-md-color-accent=light-blue] .md-typeset .footnote li:target .footnote-backref,[data-md-color-accent=light-blue] .md-typeset [id] .headerlink:focus,[data-md-color-accent=light-blue] .md-typeset [id]:hover .headerlink:hover,[data-md-color-accent=light-blue] .md-typeset [id]:target .headerlink{color:#0091ea}[data-md-color-accent=light-blue] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#0091ea}[data-md-color-accent=light-blue] .md-search-result__link:hover,[data-md-color-accent=light-blue] .md-search-result__link[data-md-state=active]{background-color:rgba(0,145,234,.1)}[data-md-color-accent=light-blue] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#0091ea}[data-md-color-accent=light-blue] .md-source-file:hover:before{background-color:#0091ea}button[data-md-color-accent=cyan]{background-color:#00b8d4}[data-md-color-accent=cyan] .md-typeset a:active,[data-md-color-accent=cyan] .md-typeset a:hover{color:#00b8d4}[data-md-color-accent=cyan] .md-typeset .codehilite::-webkit-scrollbar-thumb:hover,[data-md-color-accent=cyan] .md-typeset pre::-webkit-scrollbar-thumb:hover{background-color:#00b8d4}[data-md-color-accent=cyan] .md-nav__link:hover,[data-md-color-accent=cyan] .md-typeset .footnote li:hover .footnote-backref:hover,[data-md-color-accent=cyan] .md-typeset .footnote li:target .footnote-backref,[data-md-color-accent=cyan] .md-typeset [id] .headerlink:focus,[data-md-color-accent=cyan] .md-typeset [id]:hover .headerlink:hover,[data-md-color-accent=cyan] .md-typeset [id]:target .headerlink{color:#00b8d4}[data-md-color-accent=cyan] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#00b8d4}[data-md-color-accent=cyan] .md-search-result__link:hover,[data-md-color-accent=cyan] .md-search-result__link[data-md-state=active]{background-color:rgba(0,184,212,.1)}[data-md-color-accent=cyan] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#00b8d4}[data-md-color-accent=cyan] .md-source-file:hover:before{background-color:#00b8d4}button[data-md-color-accent=teal]{background-color:#00bfa5}[data-md-color-accent=teal] .md-typeset a:active,[data-md-color-accent=teal] .md-typeset a:hover{color:#00bfa5}[data-md-color-accent=teal] .md-typeset .codehilite::-webkit-scrollbar-thumb:hover,[data-md-color-accent=teal] .md-typeset pre::-webkit-scrollbar-thumb:hover{background-color:#00bfa5}[data-md-color-accent=teal] .md-nav__link:hover,[data-md-color-accent=teal] .md-typeset .footnote li:hover .footnote-backref:hover,[data-md-color-accent=teal] .md-typeset .footnote li:target .footnote-backref,[data-md-color-accent=teal] .md-typeset [id] .headerlink:focus,[data-md-color-accent=teal] .md-typeset [id]:hover .headerlink:hover,[data-md-color-accent=teal] .md-typeset [id]:target .headerlink{color:#00bfa5}[data-md-color-accent=teal] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#00bfa5}[data-md-color-accent=teal] .md-search-result__link:hover,[data-md-color-accent=teal] .md-search-result__link[data-md-state=active]{background-color:rgba(0,191,165,.1)}[data-md-color-accent=teal] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#00bfa5}[data-md-color-accent=teal] .md-source-file:hover:before{background-color:#00bfa5}button[data-md-color-accent=green]{background-color:#00c853}[data-md-color-accent=green] .md-typeset a:active,[data-md-color-accent=green] .md-typeset a:hover{color:#00c853}[data-md-color-accent=green] .md-typeset .codehilite::-webkit-scrollbar-thumb:hover,[data-md-color-accent=green] .md-typeset pre::-webkit-scrollbar-thumb:hover{background-color:#00c853}[data-md-color-accent=green] .md-nav__link:hover,[data-md-color-accent=green] .md-typeset .footnote li:hover .footnote-backref:hover,[data-md-color-accent=green] .md-typeset .footnote li:target .footnote-backref,[data-md-color-accent=green] .md-typeset [id] .headerlink:focus,[data-md-color-accent=green] .md-typeset [id]:hover .headerlink:hover,[data-md-color-accent=green] .md-typeset [id]:target .headerlink{color:#00c853}[data-md-color-accent=green] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#00c853}[data-md-color-accent=green] .md-search-result__link:hover,[data-md-color-accent=green] .md-search-result__link[data-md-state=active]{background-color:rgba(0,200,83,.1)}[data-md-color-accent=green] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#00c853}[data-md-color-accent=green] .md-source-file:hover:before{background-color:#00c853}button[data-md-color-accent=light-green]{background-color:#64dd17}[data-md-color-accent=light-green] .md-typeset a:active,[data-md-color-accent=light-green] .md-typeset a:hover{color:#64dd17}[data-md-color-accent=light-green] .md-typeset .codehilite::-webkit-scrollbar-thumb:hover,[data-md-color-accent=light-green] .md-typeset pre::-webkit-scrollbar-thumb:hover{background-color:#64dd17}[data-md-color-accent=light-green] .md-nav__link:hover,[data-md-color-accent=light-green] .md-typeset .footnote li:hover .footnote-backref:hover,[data-md-color-accent=light-green] .md-typeset .footnote li:target .footnote-backref,[data-md-color-accent=light-green] .md-typeset [id] .headerlink:focus,[data-md-color-accent=light-green] .md-typeset [id]:hover .headerlink:hover,[data-md-color-accent=light-green] .md-typeset [id]:target .headerlink{color:#64dd17}[data-md-color-accent=light-green] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#64dd17}[data-md-color-accent=light-green] .md-search-result__link:hover,[data-md-color-accent=light-green] .md-search-result__link[data-md-state=active]{background-color:rgba(100,221,23,.1)}[data-md-color-accent=light-green] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#64dd17}[data-md-color-accent=light-green] .md-source-file:hover:before{background-color:#64dd17}button[data-md-color-accent=lime]{background-color:#aeea00}[data-md-color-accent=lime] .md-typeset a:active,[data-md-color-accent=lime] .md-typeset a:hover{color:#aeea00}[data-md-color-accent=lime] .md-typeset .codehilite::-webkit-scrollbar-thumb:hover,[data-md-color-accent=lime] .md-typeset pre::-webkit-scrollbar-thumb:hover{background-color:#aeea00}[data-md-color-accent=lime] .md-nav__link:hover,[data-md-color-accent=lime] .md-typeset .footnote li:hover .footnote-backref:hover,[data-md-color-accent=lime] .md-typeset .footnote li:target .footnote-backref,[data-md-color-accent=lime] .md-typeset [id] .headerlink:focus,[data-md-color-accent=lime] .md-typeset [id]:hover .headerlink:hover,[data-md-color-accent=lime] .md-typeset [id]:target .headerlink{color:#aeea00}[data-md-color-accent=lime] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#aeea00}[data-md-color-accent=lime] .md-search-result__link:hover,[data-md-color-accent=lime] .md-search-result__link[data-md-state=active]{background-color:rgba(174,234,0,.1)}[data-md-color-accent=lime] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#aeea00}[data-md-color-accent=lime] .md-source-file:hover:before{background-color:#aeea00}button[data-md-color-accent=yellow]{background-color:#ffd600}[data-md-color-accent=yellow] .md-typeset a:active,[data-md-color-accent=yellow] .md-typeset a:hover{color:#ffd600}[data-md-color-accent=yellow] .md-typeset .codehilite::-webkit-scrollbar-thumb:hover,[data-md-color-accent=yellow] .md-typeset pre::-webkit-scrollbar-thumb:hover{background-color:#ffd600}[data-md-color-accent=yellow] .md-nav__link:hover,[data-md-color-accent=yellow] .md-typeset .footnote li:hover .footnote-backref:hover,[data-md-color-accent=yellow] .md-typeset .footnote li:target .footnote-backref,[data-md-color-accent=yellow] .md-typeset [id] .headerlink:focus,[data-md-color-accent=yellow] .md-typeset [id]:hover .headerlink:hover,[data-md-color-accent=yellow] .md-typeset [id]:target .headerlink{color:#ffd600}[data-md-color-accent=yellow] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#ffd600}[data-md-color-accent=yellow] .md-search-result__link:hover,[data-md-color-accent=yellow] .md-search-result__link[data-md-state=active]{background-color:rgba(255,214,0,.1)}[data-md-color-accent=yellow] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#ffd600}[data-md-color-accent=yellow] .md-source-file:hover:before{background-color:#ffd600}button[data-md-color-accent=amber]{background-color:#ffab00}[data-md-color-accent=amber] .md-typeset a:active,[data-md-color-accent=amber] .md-typeset a:hover{color:#ffab00}[data-md-color-accent=amber] .md-typeset .codehilite::-webkit-scrollbar-thumb:hover,[data-md-color-accent=amber] .md-typeset pre::-webkit-scrollbar-thumb:hover{background-color:#ffab00}[data-md-color-accent=amber] .md-nav__link:hover,[data-md-color-accent=amber] .md-typeset .footnote li:hover .footnote-backref:hover,[data-md-color-accent=amber] .md-typeset .footnote li:target .footnote-backref,[data-md-color-accent=amber] .md-typeset [id] .headerlink:focus,[data-md-color-accent=amber] .md-typeset [id]:hover .headerlink:hover,[data-md-color-accent=amber] .md-typeset [id]:target .headerlink{color:#ffab00}[data-md-color-accent=amber] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#ffab00}[data-md-color-accent=amber] .md-search-result__link:hover,[data-md-color-accent=amber] .md-search-result__link[data-md-state=active]{background-color:rgba(255,171,0,.1)}[data-md-color-accent=amber] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#ffab00}[data-md-color-accent=amber] .md-source-file:hover:before{background-color:#ffab00}button[data-md-color-accent=orange]{background-color:#ff9100}[data-md-color-accent=orange] .md-typeset a:active,[data-md-color-accent=orange] .md-typeset a:hover{color:#ff9100}[data-md-color-accent=orange] .md-typeset .codehilite::-webkit-scrollbar-thumb:hover,[data-md-color-accent=orange] .md-typeset pre::-webkit-scrollbar-thumb:hover{background-color:#ff9100}[data-md-color-accent=orange] .md-nav__link:hover,[data-md-color-accent=orange] .md-typeset .footnote li:hover .footnote-backref:hover,[data-md-color-accent=orange] .md-typeset .footnote li:target .footnote-backref,[data-md-color-accent=orange] .md-typeset [id] .headerlink:focus,[data-md-color-accent=orange] .md-typeset [id]:hover .headerlink:hover,[data-md-color-accent=orange] .md-typeset [id]:target .headerlink{color:#ff9100}[data-md-color-accent=orange] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#ff9100}[data-md-color-accent=orange] .md-search-result__link:hover,[data-md-color-accent=orange] .md-search-result__link[data-md-state=active]{background-color:rgba(255,145,0,.1)}[data-md-color-accent=orange] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#ff9100}[data-md-color-accent=orange] .md-source-file:hover:before{background-color:#ff9100}button[data-md-color-accent=deep-orange]{background-color:#ff6e40}[data-md-color-accent=deep-orange] .md-typeset a:active,[data-md-color-accent=deep-orange] .md-typeset a:hover{color:#ff6e40}[data-md-color-accent=deep-orange] .md-typeset .codehilite::-webkit-scrollbar-thumb:hover,[data-md-color-accent=deep-orange] .md-typeset pre::-webkit-scrollbar-thumb:hover{background-color:#ff6e40}[data-md-color-accent=deep-orange] .md-nav__link:hover,[data-md-color-accent=deep-orange] .md-typeset .footnote li:hover .footnote-backref:hover,[data-md-color-accent=deep-orange] .md-typeset .footnote li:target .footnote-backref,[data-md-color-accent=deep-orange] .md-typeset [id] .headerlink:focus,[data-md-color-accent=deep-orange] .md-typeset [id]:hover .headerlink:hover,[data-md-color-accent=deep-orange] .md-typeset [id]:target .headerlink{color:#ff6e40}[data-md-color-accent=deep-orange] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#ff6e40}[data-md-color-accent=deep-orange] .md-search-result__link:hover,[data-md-color-accent=deep-orange] .md-search-result__link[data-md-state=active]{background-color:rgba(255,110,64,.1)}[data-md-color-accent=deep-orange] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#ff6e40}[data-md-color-accent=deep-orange] .md-source-file:hover:before{background-color:#ff6e40}@media only screen and (max-width:59.9375em){[data-md-color-primary=red] .md-nav__source{background-color:rgba(190,66,64,.9675)}[data-md-color-primary=pink] .md-nav__source{background-color:rgba(185,24,79,.9675)}[data-md-color-primary=purple] .md-nav__source{background-color:rgba(136,57,150,.9675)}[data-md-color-primary=deep-purple] .md-nav__source{background-color:rgba(100,69,154,.9675)}[data-md-color-primary=indigo] .md-nav__source{background-color:rgba(50,64,144,.9675)}[data-md-color-primary=blue] .md-nav__source{background-color:rgba(26,119,193,.9675)}[data-md-color-primary=light-blue] .md-nav__source{background-color:rgba(2,134,194,.9675)}[data-md-color-primary=cyan] .md-nav__source{background-color:rgba(0,150,169,.9675)}[data-md-color-primary=teal] .md-nav__source{background-color:rgba(0,119,108,.9675)}[data-md-color-primary=green] .md-nav__source{background-color:rgba(60,139,64,.9675)}[data-md-color-primary=light-green] .md-nav__source{background-color:rgba(99,142,53,.9675)}[data-md-color-primary=lime] .md-nav__source{background-color:rgba(153,161,41,.9675)}[data-md-color-primary=yellow] .md-nav__source{background-color:rgba(198,134,29,.9675)}[data-md-color-primary=amber] .md-nav__source{background-color:rgba(203,142,0,.9675)}[data-md-color-primary=orange] .md-nav__source{background-color:rgba(200,111,0,.9675)}[data-md-color-primary=deep-orange] .md-nav__source{background-color:rgba(203,89,53,.9675)}[data-md-color-primary=brown] .md-nav__source{background-color:rgba(96,68,57,.9675)}[data-md-color-primary=grey] .md-nav__source{background-color:rgba(93,93,93,.9675)}[data-md-color-primary=blue-grey] .md-nav__source{background-color:rgba(67,88,97,.9675)}}@media only screen and (max-width:76.1875em){html [data-md-color-primary=red] .md-nav--primary .md-nav__title--site{background-color:#ef5350}html [data-md-color-primary=pink] .md-nav--primary .md-nav__title--site{background-color:#e91e63}html [data-md-color-primary=purple] .md-nav--primary .md-nav__title--site{background-color:#ab47bc}html [data-md-color-primary=deep-purple] .md-nav--primary .md-nav__title--site{background-color:#7e57c2}html [data-md-color-primary=indigo] .md-nav--primary .md-nav__title--site{background-color:#3f51b5}html [data-md-color-primary=blue] .md-nav--primary .md-nav__title--site{background-color:#2196f3}html [data-md-color-primary=light-blue] .md-nav--primary .md-nav__title--site{background-color:#03a9f4}html [data-md-color-primary=cyan] .md-nav--primary .md-nav__title--site{background-color:#00bcd4}html [data-md-color-primary=teal] .md-nav--primary .md-nav__title--site{background-color:#009688}html [data-md-color-primary=green] .md-nav--primary .md-nav__title--site{background-color:#4caf50}html [data-md-color-primary=light-green] .md-nav--primary .md-nav__title--site{background-color:#7cb342}html [data-md-color-primary=lime] .md-nav--primary .md-nav__title--site{background-color:#c0ca33}html [data-md-color-primary=yellow] .md-nav--primary .md-nav__title--site{background-color:#f9a825}html [data-md-color-primary=amber] .md-nav--primary .md-nav__title--site{background-color:#ffb300}html [data-md-color-primary=orange] .md-nav--primary .md-nav__title--site{background-color:#fb8c00}html [data-md-color-primary=deep-orange] .md-nav--primary .md-nav__title--site{background-color:#ff7043}html [data-md-color-primary=brown] .md-nav--primary .md-nav__title--site{background-color:#795548}html [data-md-color-primary=grey] .md-nav--primary .md-nav__title--site{background-color:#757575}html [data-md-color-primary=blue-grey] .md-nav--primary .md-nav__title--site{background-color:#546e7a}}@media only screen and (min-width:60em){[data-md-color-primary=red] .md-nav--secondary{border-left:.4rem solid #ef5350}[data-md-color-primary=pink] .md-nav--secondary{border-left:.4rem solid #e91e63}[data-md-color-primary=purple] .md-nav--secondary{border-left:.4rem solid #ab47bc}[data-md-color-primary=deep-purple] .md-nav--secondary{border-left:.4rem solid #7e57c2}[data-md-color-primary=indigo] .md-nav--secondary{border-left:.4rem solid #3f51b5}[data-md-color-primary=blue] .md-nav--secondary{border-left:.4rem solid #2196f3}[data-md-color-primary=light-blue] .md-nav--secondary{border-left:.4rem solid #03a9f4}[data-md-color-primary=cyan] .md-nav--secondary{border-left:.4rem solid #00bcd4}[data-md-color-primary=teal] .md-nav--secondary{border-left:.4rem solid #009688}[data-md-color-primary=green] .md-nav--secondary{border-left:.4rem solid #4caf50}[data-md-color-primary=light-green] .md-nav--secondary{border-left:.4rem solid #7cb342}[data-md-color-primary=lime] .md-nav--secondary{border-left:.4rem solid #c0ca33}[data-md-color-primary=yellow] .md-nav--secondary{border-left:.4rem solid #f9a825}[data-md-color-primary=amber] .md-nav--secondary{border-left:.4rem solid #ffb300}[data-md-color-primary=orange] .md-nav--secondary{border-left:.4rem solid #fb8c00}[data-md-color-primary=deep-orange] .md-nav--secondary{border-left:.4rem solid #ff7043}[data-md-color-primary=brown] .md-nav--secondary{border-left:.4rem solid #795548}[data-md-color-primary=grey] .md-nav--secondary{border-left:.4rem solid #757575}[data-md-color-primary=blue-grey] .md-nav--secondary{border-left:.4rem solid #546e7a}}@media only screen and (min-width:76.25em){[data-md-color-primary=red] .md-tabs{background:rgba(190,66,64,.9675)}[data-md-color-primary=red] .md-tabs[data-md-state=hidden]{background:#ef5350}[data-md-color-primary=pink] .md-tabs{background:rgba(185,24,79,.9675)}[data-md-color-primary=pink] .md-tabs[data-md-state=hidden]{background:#e91e63}[data-md-color-primary=purple] .md-tabs{background:rgba(136,57,150,.9675)}[data-md-color-primary=purple] .md-tabs[data-md-state=hidden]{background:#ab47bc}[data-md-color-primary=deep-purple] .md-tabs{background:rgba(100,69,154,.9675)}[data-md-color-primary=deep-purple] .md-tabs[data-md-state=hidden]{background:#7e57c2}[data-md-color-primary=indigo] .md-tabs{background:rgba(50,64,144,.9675)}[data-md-color-primary=indigo] .md-tabs[data-md-state=hidden]{background:#3f51b5}[data-md-color-primary=blue] .md-tabs{background:rgba(26,119,193,.9675)}[data-md-color-primary=blue] .md-tabs[data-md-state=hidden]{background:#2196f3}[data-md-color-primary=light-blue] .md-tabs{background:rgba(2,134,194,.9675)}[data-md-color-primary=light-blue] .md-tabs[data-md-state=hidden]{background:#03a9f4}[data-md-color-primary=cyan] .md-tabs{background:rgba(0,150,169,.9675)}[data-md-color-primary=cyan] .md-tabs[data-md-state=hidden]{background:#00bcd4}[data-md-color-primary=teal] .md-tabs{background:rgba(0,119,108,.9675)}[data-md-color-primary=teal] .md-tabs[data-md-state=hidden]{background:#009688}[data-md-color-primary=green] .md-tabs{background:rgba(60,139,64,.9675)}[data-md-color-primary=green] .md-tabs[data-md-state=hidden]{background:#4caf50}[data-md-color-primary=light-green] .md-tabs{background:rgba(99,142,53,.9675)}[data-md-color-primary=light-green] .md-tabs[data-md-state=hidden]{background:#7cb342}[data-md-color-primary=lime] .md-tabs{background:rgba(153,161,41,.9675)}[data-md-color-primary=lime] .md-tabs[data-md-state=hidden]{background:#c0ca33}[data-md-color-primary=yellow] .md-tabs{background:rgba(198,134,29,.9675)}[data-md-color-primary=yellow] .md-tabs[data-md-state=hidden]{background:#f9a825}[data-md-color-primary=amber] .md-tabs{background:rgba(203,142,0,.9675)}[data-md-color-primary=amber] .md-tabs[data-md-state=hidden]{background:#ffb300}[data-md-color-primary=orange] .md-tabs{background:rgba(200,111,0,.9675)}[data-md-color-primary=orange] .md-tabs[data-md-state=hidden]{background:#fb8c00}[data-md-color-primary=deep-orange] .md-tabs{background:rgba(203,89,53,.9675)}[data-md-color-primary=deep-orange] .md-tabs[data-md-state=hidden]{background:#ff7043}[data-md-color-primary=brown] .md-tabs{background:rgba(96,68,57,.9675)}[data-md-color-primary=brown] .md-tabs[data-md-state=hidden]{background:#795548}[data-md-color-primary=grey] .md-tabs{background:rgba(93,93,93,.9675)}[data-md-color-primary=grey] .md-tabs[data-md-state=hidden]{background:#757575}[data-md-color-primary=blue-grey] .md-tabs{background:rgba(67,88,97,.9675)}[data-md-color-primary=blue-grey] .md-tabs[data-md-state=hidden]{background:#546e7a}} \ No newline at end of file diff --git a/articles/material/base.html b/articles/material/base.html deleted file mode 100644 index 76f30aca63444acd4903c5353d7629001df15b54..0000000000000000000000000000000000000000 --- a/articles/material/base.html +++ /dev/null @@ -1,164 +0,0 @@ -{% import "partials/language.html" as lang %} -<!DOCTYPE html> -<html lang="{{ lang.t('language') }}" class="no-js"> - <head> - {% block site_meta %} - <meta charset="utf-8"> - <meta name="viewport" content="width=device-width,initial-scale=1"> - {% if page and page.meta.description %} - <meta name="description" content="{{ page.meta.description | first }}"> - {% elif config.site_description %} - <meta name="description" content="{{ config.site_description }}"> - {% endif %} - {% if page.canonical_url %} - <link rel="canonical" href="{{ page.canonical_url }}"> - {% endif %} - {% if page and page.meta.author %} - <meta name="author" content="{{ page.meta.author | first }}"> - {% elif config.site_author %} - <meta name="author" content="{{ config.site_author }}"> - {% endif %} - {% if config.site_favicon %} - <link rel="shortcut icon" href="{{ base_url }}/{{ config.site_favicon }}"> - {% else %} - <link rel="shortcut icon" href="{{ base_url }}/assets/images/favicon.png"> - {% endif %} - <meta name="generator" content="mkdocs-{{ mkdocs_version }}, mkdocs-material-1.6.4"> - {% endblock %} - {% block htmltitle %} - {% if page and page.meta.title %} - <title>{{ page.meta.title | first }}</title> - {% elif page and page.title and not page.is_homepage %} - <title>{{ page.title }} - {{ config.site_name }}</title> - {% else %} - <title>{{ config.site_name }}</title> - {% endif %} - {% endblock %} - {% block libs %} - <script src="{{ base_url }}/assets/javascripts/modernizr-1df76c4e58.js"></script> - {% endblock %} - {% block styles %} - <link rel="stylesheet" href="{{ base_url }}/assets/stylesheets/application-e2807e330f.css"> - {% if config.extra.palette %} - <link rel="stylesheet" href="{{ base_url }}/assets/stylesheets/application-f78e5cb881.palette.css"> - {% endif %} - {% endblock %} - {% block fonts %} - {% if config.extra.font != false and config.extra.font != "none" %} - {% set text = config.extra.get("font", {}).text | default("Roboto") %} - {% set code = config.extra.get("font", {}).code - | default("Roboto Mono") %} - {% set font = text + ':300,400,400i,700|' + code | replace(' ', '+') %} - <link rel="stylesheet" href="https://fonts.googleapis.com/css?family={{ font }}"> - <style>body,input{font-family:"{{ text }}","Helvetica Neue",Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"{{ code }}","Courier New",Courier,monospace}</style> - {% endif %} - <link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons"> - {% endblock %} - {% for path in extra_css %} - <link rel="stylesheet" href="{{ path }}"> - {% endfor %} - {% block extrahead %}{% endblock %} - </head> - {% set palette = config.extra.get("palette", {}) %} - {% set primary = palette.primary | replace(" ", "-") | lower %} - {% set accent = palette.accent | replace(" ", "-") | lower %} - {% if primary or accent %} - <body data-md-color-primary="{{ primary }}" data-md-color-accent="{{ accent }}"> - {% else %} - <body> - {% endif %} - <svg class="md-svg"> - <defs> - {% set platform = config.extra.repo_icon or config.repo_url %} - {% if "github" in platform %} - {% include "assets/images/icons/github-1da075986e.svg" %} - {% elif "gitlab" in platform %} - {% include "assets/images/icons/gitlab-5ad3f9f9e5.svg" %} - {% elif "bitbucket" in platform %} - {% include "assets/images/icons/bitbucket-670608a71a.svg" %} - {% endif %} - </defs> - </svg> - <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="drawer"> - <input class="md-toggle" data-md-toggle="search" type="checkbox" id="search"> - <label class="md-overlay" data-md-component="overlay" for="drawer"></label> - {% block header %} - {% include "partials/header.html" %} - {% endblock %} - <div class="md-container"> - {% set feature = config.extra.get("feature", {}) %} - {% if feature.tabs %} - {% include "partials/tabs.html" %} - {% endif %} - <main class="md-main"> - <div class="md-main__inner md-grid" data-md-component="container"> - {% block site_nav %} - {% if nav %} - <div class="md-sidebar md-sidebar--primary" data-md-component="navigation"> - <div class="md-sidebar__scrollwrap"> - <div class="md-sidebar__inner"> - {% include "partials/nav.html" %} - </div> - </div> - </div> - {% endif %} - {% if page.toc %} - <div class="md-sidebar md-sidebar--secondary" data-md-component="toc"> - <div class="md-sidebar__scrollwrap"> - <div class="md-sidebar__inner"> - {% include "partials/toc.html" %} - </div> - </div> - </div> - {% endif %} - {% endblock %} - <div class="md-content"> - <article class="md-content__inner md-typeset"> - {% block content %} - {% if config.edit_uri %} - <a href="{{ page.edit_url }}" title="{{ lang.t('edit.link.title') }}" class="md-icon md-content__icon">edit</a> - {% endif %} - {% if not "\x3ch1" in page.content %} - <h1>{{ page.title | default(config.site_name, true)}}</h1> - {% endif %} - {{ page.content }} - {% block source %} - {% if page.meta.source %} - <h2 id="__source">{{ lang.t('meta.source') }}</h2> - {% set path = (page.meta.path | default([""]) | first) %} - {% for file in page.meta.source %} - <a href="{{ [config.repo_url, path, file] | join('/') }}" title="{{ file }}" class="md-source-file"> - {{ file }} - </a> - {% endfor %} - {% endif %} - {% endblock %} - {% endblock %} - {% block disqus %} - {% if config.extra.disqus and not page.is_homepage %} - <h2 id="__comments">{{ lang.t('meta.comments') }}</h2> - {% include "partials/disqus.html" %} - {% endif %} - {% endblock %} - </article> - </div> - </div> - </main> - {% block footer %} - {% include "partials/footer.html" %} - {% endblock %} - </div> - {% block scripts %} - <script src="{{ base_url }}/assets/javascripts/application-06a3e72efd.js"></script> - <script>app.initialize({url:{base:"{{ base_url }}"}})</script> - {% for path in extra_javascript %} - <script src="{{ path }}"></script> - {% endfor %} - {% endblock %} - {% block analytics %} - {% if config.google_analytics %} - <script>!function(e,t,a,n,o,c,i){e.GoogleAnalyticsObject=o,e[o]=e[o]||function(){(e[o].q=e[o].q||[]).push(arguments)},e[o].l=1*new Date,c=t.createElement(a),i=t.getElementsByTagName(a)[0],c.async=1,c.src=n,i.parentNode.insertBefore(c,i)}(window,document,"script","https://www.google-analytics.com/analytics.js","ga"),ga("create","{{ config.google_analytics[0] }}","{{ config.google_analytics[1] }}"),ga("set","anonymizeIp",!0),ga("send","pageview");var links=document.getElementsByTagName("a");Array.prototype.map.call(links,function(e){e.host!=document.location.host&&e.addEventListener("click",function(){var t=e.getAttribute("data-md-action")||"follow";ga("send","event","outbound",t,e.href)})});var query=document.forms.search.query;query.addEventListener("blur",function(){if(this.value){var e=document.location.pathname;ga("send","pageview",e+"?q="+this.value)}})</script> - {% endif %} - {% endblock %} - </body> -</html> diff --git a/articles/material/main.html b/articles/material/main.html deleted file mode 100644 index 94d9808cc760156cb7ab46e326c0267f3406125e..0000000000000000000000000000000000000000 --- a/articles/material/main.html +++ /dev/null @@ -1 +0,0 @@ -{% extends "base.html" %} diff --git a/articles/material/partials/disqus.html b/articles/material/partials/disqus.html deleted file mode 100644 index 5f003ca41d9ed849d8f66186e4d8a8388e4154b4..0000000000000000000000000000000000000000 --- a/articles/material/partials/disqus.html +++ /dev/null @@ -1,14 +0,0 @@ -<div id="disqus_thread"></div> -<script> - var disqus_config = function () { - this.page.url = "{{ page.canonical_url }}"; - this.page.identifier = - "{{ page.canonical_url | replace(config.site_url, "") }}"; - }; - (function() { - var d = document, s = d.createElement("script"); - s.src = "//{{ config.extra.disqus }}.disqus.com/embed.js"; - s.setAttribute("data-timestamp", +new Date()); - (d.head || d.body).appendChild(s); - })(); -</script> diff --git a/articles/material/partials/footer.html b/articles/material/partials/footer.html deleted file mode 100644 index afadcdd62bd1a7de1217692336dd49b85d2c3d4f..0000000000000000000000000000000000000000 --- a/articles/material/partials/footer.html +++ /dev/null @@ -1,58 +0,0 @@ -{% import "partials/language.html" as lang %} -<footer class="md-footer"> - {% if page.previous_page or page.next_page %} - <div class="md-footer-nav"> - <nav class="md-footer-nav__inner md-grid"> - {% if page.previous_page %} - <a href="{{ page.previous_page.url }}" title="{{ page.previous_page.title }}" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev"> - <div class="md-flex__cell md-flex__cell--shrink"> - <i class="md-icon md-icon--arrow-back md-footer-nav__button"></i> - </div> - <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title"> - <span class="md-flex__ellipsis"> - <span class="md-footer-nav__direction"> - {{ lang.t('footer.previous') }} - </span> - {{ page.previous_page.title }} - </span> - </div> - </a> - {% endif %} - {% if page.next_page %} - <a href="{{ page.next_page.url }}" title="{{ page.next_page.title }}" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next"> - <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title"> - <span class="md-flex__ellipsis"> - <span class="md-footer-nav__direction"> - {{ lang.t('footer.next') }} - </span> - {{ page.next_page.title }} - </span> - </div> - <div class="md-flex__cell md-flex__cell--shrink"> - <i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i> - </div> - </a> - {% endif %} - </nav> - </div> - {% endif %} - <div class="md-footer-meta md-typeset"> - <div class="md-footer-meta__inner md-grid"> - <div class="md-footer-copyright"> - {% if config.copyright %} - <div class="md-footer-copyright__highlight"> - {{ config.copyright }} - </div> - {% endif %} - powered by - <a href="http://www.mkdocs.org" title="MkDocs">MkDocs</a> - and - <a href="http://squidfunk.github.io/mkdocs-material/" title="Material for MkDocs"> - Material for MkDocs</a> - </div> - {% block social %} - {% include "partials/social.html" %} - {% endblock %} - </div> - </div> -</footer> diff --git a/articles/material/partials/header.html b/articles/material/partials/header.html deleted file mode 100644 index d43b2edd0d25b7397c2f9278c46f7a2be06ae044..0000000000000000000000000000000000000000 --- a/articles/material/partials/header.html +++ /dev/null @@ -1,46 +0,0 @@ -<header class="md-header" data-md-component="header"> - <nav class="md-header-nav md-grid"> - <div class="md-flex"> - <div class="md-flex__cell md-flex__cell--shrink"> - {% if config.extra.logo %} - <a href="{{ config.site_url | default(nav.homepage.url, true) }}" title="{{ config.site_name }}" class="md-logo md-header-nav__button"> - <img src="{{ base_url }}/{{ config.extra.logo }}" width="24" height="24"> - </a> - {% else %} - <a href="{{ config.site_url | default(nav.homepage.url, true) }}" title="{{ config.site_name }}" class="md-icon md-icon--home md-header-nav__button"> - </a> - {% endif %} - </div> - <div class="md-flex__cell md-flex__cell--shrink"> - <label class="md-icon md-icon--menu md-header-nav__button" for="drawer"></label> - </div> - <div class="md-flex__cell md-flex__cell--stretch"> - <span class="md-flex__ellipsis md-header-nav__title"> - {% block site_name %} - {% if page %} - {% for parent in page.ancestors %} - <span class="md-header-nav__parent"> - {{ parent.title }} - </span> - {% endfor %} - {% endif %} - {{ page.title | default(config.site_name, true) }} - {% endblock %} - </span> - </div> - <div class="md-flex__cell md-flex__cell--shrink"> - {% block search_box %} - <label class="md-icon md-icon--search md-header-nav__button" for="search"></label> - {% include "partials/search.html" %} - {% endblock %} - </div> - <div class="md-flex__cell md-flex__cell--shrink"> - <div class="md-header-nav__source"> - {% if config.repo_url %} - {% include "partials/source.html" %} - {% endif %} - </div> - </div> - </div> - </nav> -</header> diff --git a/articles/material/partials/language.html b/articles/material/partials/language.html deleted file mode 100644 index 7045fdcd6e415922ed732f44a5cee3a4f281d079..0000000000000000000000000000000000000000 --- a/articles/material/partials/language.html +++ /dev/null @@ -1,15 +0,0 @@ -{% macro t(key) %}{{ { - "language": "en", - "edit.link.title": "Edit this page", - "footer.previous": "Previous", - "footer.next": "Next", - "meta.comments": "Comments", - "meta.source": "Source", - "search.placeholder": "Search", - "search.result.placeholder": "Type to start searching", - "search.result.none": "No matching documents", - "search.result.one": "1 matching document", - "search.result.other": "# matching documents", - "source.link.title": "Go to repository", - "toc.title": "Table of contents" -}[key] }}{% endmacro %} diff --git a/articles/material/partials/nav-item.html b/articles/material/partials/nav-item.html deleted file mode 100644 index c3e0b51ba545ee1422b560d98e75372025e5b87e..0000000000000000000000000000000000000000 --- a/articles/material/partials/nav-item.html +++ /dev/null @@ -1,54 +0,0 @@ -{% set class = "md-nav__item" %} -{% if nav_item.active %} - {% set class = "md-nav__item md-nav__item--active" %} -{% endif %} -{% if nav_item.children %} - <li class="{{ class }} md-nav__item--nested"> - {% if nav_item.active %} - <input class="md-toggle md-nav__toggle" data-md-toggle="{{ path }}" type="checkbox" id="{{ path }}" checked> - {% else %} - <input class="md-toggle md-nav__toggle" data-md-toggle="{{ path }}" type="checkbox" id="{{ path }}"> - {% endif %} - <label class="md-nav__link" for="{{ path }}"> - {{ nav_item.title }} - </label> - <nav class="md-nav" data-md-component="collapsible" data-md-level="{{ level }}"> - <label class="md-nav__title" for="{{ path }}"> - {{ nav_item.title }} - </label> - <ul class="md-nav__list" data-md-scrollfix> - {% set base = path %} - {% for nav_item in nav_item.children %} - {% set path = base + "-" + loop.index | string %} - {% set level = level + 1 %} - {% include "partials/nav-item.html" %} - {% endfor %} - </ul> - </nav> - </li> -{% elif nav_item == page %} - <li class="{{ class }}"> - {% set toc_ = page.toc %} - <input class="md-toggle md-nav__toggle" data-md-toggle="toc" type="checkbox" id="toc"> - {% if toc_ | first is defined and "\x3ch1 id=" in page.content %} - {% set toc_ = (toc_ | first).children %} - {% endif %} - {% if toc_ | first is defined %} - <label class="md-nav__link md-nav__link--active" for="toc"> - {{ nav_item.title }} - </label> - {% endif %} - <a href="{{ nav_item.url }}" title="{{ nav_item.title }}" class="md-nav__link md-nav__link--active"> - {{ nav_item.title }} - </a> - {% if toc_ | first is defined %} - {% include "partials/toc.html" %} - {% endif %} - </li> -{% else %} - <li class="{{ class }}"> - <a href="{{ nav_item.url }}" title="{{ nav_item.title }}" class="md-nav__link"> - {{ nav_item.title }} - </a> - </li> -{% endif %} diff --git a/articles/material/partials/nav.html b/articles/material/partials/nav.html deleted file mode 100644 index 651608d4fc72bf2faa776e8a2022e35e4451c564..0000000000000000000000000000000000000000 --- a/articles/material/partials/nav.html +++ /dev/null @@ -1,24 +0,0 @@ -<nav class="md-nav md-nav--primary" data-md-level="0"> - <label class="md-nav__title md-nav__title--site" for="drawer"> - {% if config.extra.logo %} - <i class="md-logo md-nav__button"> - <img src="{{ base_url }}/{{ config.extra.logo }}"> - </i> - {% else %} - <i class="md-icon md-icon--home md-nav__button"></i> - {% endif %} - {{ config.site_name }} - </label> - {% if config.repo_url %} - <div class="md-nav__source"> - {% include "partials/source.html" %} - </div> - {% endif %} - <ul class="md-nav__list" data-md-scrollfix> - {% for nav_item in nav %} - {% set path = "nav-" + loop.index | string %} - {% set level = 1 %} - {% include "partials/nav-item.html" %} - {% endfor %} - </ul> -</nav> diff --git a/articles/material/partials/search.html b/articles/material/partials/search.html deleted file mode 100644 index 39a239c1350fcb3d748a5b2edc4fd29a3e4a74a9..0000000000000000000000000000000000000000 --- a/articles/material/partials/search.html +++ /dev/null @@ -1,21 +0,0 @@ -{% import "partials/language.html" as lang %} -<div class="md-search" data-md-component="search"> - <label class="md-search__overlay" for="search"></label> - <div class="md-search__inner"> - <form class="md-search__form" name="search"> - <input type="text" class="md-search__input" name="query" required placeholder="{{ lang.t('search.placeholder') }}" accesskey="s" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query"> - <label class="md-icon md-search__icon" for="search"></label> - <button type="reset" class="md-icon md-search__icon" data-md-component="reset">close</button> - </form> - <div class="md-search__output"> - <div class="md-search__scrollwrap" data-md-scrollfix> - <div class="md-search-result" data-md-component="result"> - <div class="md-search-result__meta" data-md-lang-result-none="{{ lang.t('search.result.none') }}" data-md-lang-result-one="{{ lang.t('search.result.one') }}" data-md-lang-result-other="{{ lang.t('search.result.other') }}"> - {{ lang.t('search.result.placeholder') }} - </div> - <ol class="md-search-result__list"></ol> - </div> - </div> - </div> - </div> -</div> diff --git a/articles/material/partials/social.html b/articles/material/partials/social.html deleted file mode 100644 index cb68735adf221f7665afcecb8f1efab292030876..0000000000000000000000000000000000000000 --- a/articles/material/partials/social.html +++ /dev/null @@ -1,9 +0,0 @@ -{% if config.extra.social %} - <div class="md-footer-social"> - {% set path = "ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" %} - <link rel="stylesheet" href="https://cdnjs.cloudflare.com/{{ path }}"> - {% for social in config.extra.social %} - <a href="{{ social.link }}" class="md-footer-social__link fa fa-{{ social.type }}"></a> - {% endfor %} - </div> -{% endif %} diff --git a/articles/material/partials/source.html b/articles/material/partials/source.html deleted file mode 100644 index 221b551ab3d8a87c7fa14a3c8f63760be395f902..0000000000000000000000000000000000000000 --- a/articles/material/partials/source.html +++ /dev/null @@ -1,25 +0,0 @@ -{% import "partials/language.html" as lang %} -{% set platform = config.extra.repo_icon or config.repo_url %} -{% if "github" in platform %} - {% set repo_type = "github" %} -{% elif "gitlab" in platform %} - {% set repo_type = "gitlab" %} -{% elif "bitbucket" in platform %} - {% set repo_type = "bitbucket" %} -{% else %} - {% set repo_type = "" %} -{% endif %} -{% block repo %} - <a href="{{ config.repo_url }}" title="{{ lang.t('source.link.title') }}" class="md-source" data-md-source="{{ repo_type }}"> - {% if repo_type %} - <div class="md-source__icon"> - <svg viewBox="0 0 24 24" width="24" height="24"> - <use xlink:href="#{{ repo_type }}" width="24" height="24"></use> - </svg> - </div> - {% endif %} - <div class="md-source__repository"> - {{ config.repo_name }} - </div> - </a> -{% endblock %} diff --git a/articles/material/partials/tabs-item.html b/articles/material/partials/tabs-item.html deleted file mode 100644 index 686b5a59b926414f65e26b98fdbaf0d7c9af45d6..0000000000000000000000000000000000000000 --- a/articles/material/partials/tabs-item.html +++ /dev/null @@ -1,31 +0,0 @@ -{% if nav_item.is_homepage %} - <li class="md-tabs__item"> - {% if not page.ancestors | length and nav | selectattr("url", page.url) %} - <a href="{{ nav_item.url }}" title="{{ nav_item.title }}" class="md-tabs__link md-tabs__link--active"> - {{ nav_item.title }} - </a> - {% else %} - <a href="{{ nav_item.url }}" title="{{ nav_item.title }}" class="md-tabs__link"> - {{ nav_item.title }} - </a> - {% endif %} - </li> -{% elif nav_item.children and nav_item.children | length > 0 %} - {% set title = title | default(nav_item.title) %} - {% if (nav_item.children | first).children | length > 0 %} - {% set nav_item = nav_item.children | first %} - {% include "partials/tabs-item.html" %} - {% else %} - <li class="md-tabs__item"> - {% if nav_item.active %} - <a href="{{ (nav_item.children | first).url }}" title="{{ title }}" class="md-tabs__link md-tabs__link--active"> - {{ title }} - </a> - {% else %} - <a href="{{ (nav_item.children | first).url }}" title="{{ title }}" class="md-tabs__link"> - {{ title }} - </a> - {% endif %} - </li> - {% endif %} -{% endif %} diff --git a/articles/material/partials/tabs.html b/articles/material/partials/tabs.html deleted file mode 100644 index e040436bf1085d586364201a13cfbfdc4e6d7031..0000000000000000000000000000000000000000 --- a/articles/material/partials/tabs.html +++ /dev/null @@ -1,13 +0,0 @@ -{% set class = "md-tabs" %} -{% if page.ancestors | length > 0 %} - {% set class = "md-tabs md-tabs--active" %} -{% endif %} -<nav class="{{ class }}" data-md-component="tabs"> - <div class="md-tabs__inner md-grid"> - <ul class="md-tabs__list"> - {% for nav_item in nav %} - {% include "partials/tabs-item.html" %} - {% endfor %} - </ul> - </div> -</nav> diff --git a/articles/material/partials/toc-item.html b/articles/material/partials/toc-item.html deleted file mode 100644 index 3b4f4d76ceed626801891dbf0cf024df7882c1ee..0000000000000000000000000000000000000000 --- a/articles/material/partials/toc-item.html +++ /dev/null @@ -1,14 +0,0 @@ -<li class="md-nav__item"> - <a href="{{ toc_item.url }}" title="{{ toc_item.title }}" class="md-nav__link"> - {{ toc_item.title }} - </a> - {% if toc_item.children %} - <nav class="md-nav"> - <ul class="md-nav__list"> - {% for toc_item in toc_item.children %} - {% include "partials/toc-item.html" %} - {% endfor %} - </ul> - </nav> - {% endif %} -</li> diff --git a/articles/material/partials/toc.html b/articles/material/partials/toc.html deleted file mode 100644 index 5e70d833b68993375e4d22eea075669d43e73c19..0000000000000000000000000000000000000000 --- a/articles/material/partials/toc.html +++ /dev/null @@ -1,29 +0,0 @@ -{% import "partials/language.html" as lang %} -<nav class="md-nav md-nav--secondary"> - {% set toc_ = page.toc %} - {% if toc_ | first is defined and "\x3ch1 id=" in page.content %} - {% set toc_ = (toc_ | first).children %} - {% endif %} - {% if toc_ | first is defined %} - <label class="md-nav__title" for="toc">{{ lang.t('toc.title') }}</label> - <ul class="md-nav__list" data-md-scrollfix> - {% for toc_item in toc_ %} - {% include "partials/toc-item.html" %} - {% endfor %} - {% if page.meta.source and page.meta.source | length > 0 %} - <li class="md-nav__item"> - <a href="#__source" title="{{ lang.t('meta.source') }}" class="md-nav__link md-nav__link--active"> - {{ lang.t('meta.source') }} - </a> - </li> - {% endif %} - {% if config.extra.disqus and not page.is_homepage %} - <li class="md-nav__item"> - <a href="#__comments" title="{{ lang.t('meta.comments') }}" class="md-nav__link md-nav__link--active"> - {{ lang.t('meta.comments') }} - </a> - </li> - {% endif %} - </ul> - {% endif %} -</nav> diff --git a/articles/mkdocs.yml b/articles/mkdocs.yml index 9ce2b2a243a1aba561eaae0cac173d644afb93ad..59fb9f62b90d54b9a51288c6833208ed11eab137 100644 --- a/articles/mkdocs.yml +++ b/articles/mkdocs.yml @@ -9,9 +9,9 @@ strict: true copyright: Copyright © 2017 Dmytro Bogatov # Documentation and theme -theme: - name: 'material' - custom_dir: 'material' +theme: + name: material + favicon: 'assets/images/favicon.ico' # Options extra: @@ -26,7 +26,7 @@ extra: - type: github link: https://github.com/dbogatov - type: facebook - link: https://www.facebook.com/Dima4ka007 + link: https://www.facebook.com/dkbogatov - type: twitter link: https://twitter.com/Dima4ka007 - type: linkedin @@ -85,4 +85,3 @@ pages: - API Docs: api/docs.md - Testing: - Home: testing/index.md - \ No newline at end of file diff --git a/build.sh b/build.sh index 62d282941393837759e252adcf91fb38db9fe94a..d508775eeb92e893015aad74bfd6a12e3f6705ac 100755 --- a/build.sh +++ b/build.sh @@ -1,10 +1,35 @@ -#!/bin/bash +#!/usr/bin/env bash + set -e +shopt -s globstar # Ensure that the CWD is set to script's location cd "${0%/*}" CWD=$(pwd) +## TESTS + +test-docs-spell-ci () { + + sed -e "s/cSpell\.//g" .vscode/settings.json > .vscode/cspell.json + cspell -c .vscode/cspell.json articles/docs/**/*.md + +} + +test-docs-spell () { + + cd $CWD + + echo "Test cspell..." + + sed -e "s/cSpell\.//g" .vscode/settings.json > .vscode/cspell.json + docker run -v $(PWD):/code dbogatov/docker-images:cspell-latest /usr/bin/cspell -c /code/.vscode/cspell.json /code/articles/docs/**/*.md + rm .vscode/cspell.json + + echo "cSpell passed!" + +} + ## TASKS ### DOCUMENTATION START @@ -13,7 +38,7 @@ install-node-tools () { cd $CWD - echo "Installing node modules... Requires Yarn or MPM" + echo "Installing node modules... Requires Yarn" yarn --ignore-engines > /dev/null } @@ -157,12 +182,31 @@ move-static-files () { chmod -x documentation/out/deploy.sh } +build-compose-files () { + + cd $CWD + + if [ "$DOTNET_TAG" == "master" ]; then + echo "Not need to build for master" + return + fi + + if [ -z "$DOTNET_TAG" ]; then + DOTNET_TAG="local" + fi + + echo "Building ${DOTNET_TAG} stack..." + + composition=$(<docker-compose.yml) + echo "${composition//-master/-$DOTNET_TAG}" > docker-compose.yml +} + build-ping-server () { cd $CWD/ping echo "Building ping server..." - go build -o bin/ping main/main.go + env GOOS=linux GOARCH=amd64 go build -o bin/ping main/main.go } build-dev-client () { @@ -260,7 +304,6 @@ build-debian-package () { cp status-ctl.sh build/status-ctl/ cp ../src/appsettings.production.yml build/status-ctl/ cp ../docker-compose.yml build/status-ctl/ - cp ../.env.example build/status-ctl/.env cp -r Makefile debian/ build/status-ctl printf "\n\nDOTNET_TAG=master" >> build/status-ctl/.env diff --git a/cSpell.json b/cSpell.json index 9dca82156ec222e9b72ae08fb31816d4dc511616..04f72549bac1a3c38158d79aa92155de80dd5172 100644 --- a/cSpell.json +++ b/cSpell.json @@ -6,13 +6,37 @@ "language": "en", // words - list of words to be always considered correct "words": [ + "appsettings", + "ASPNETCORE", + "captcha", + "Doxyfile", + "doxygen", + "Expando", + "FQDN", + "getlogmessages", + "gitlab", + "Intelli", "IPing", - "statususer", + "makerchip", + "mattermost", + "minified", + "mkdir", + "mkdocs", + "nginx", + "Notificator", + "nuget", + "Postgre", + "SMTP", + "SPAMing", "statussite", - "getlogmessages", - "Xunit", - "Expando", - "transpiler" + "statususer", + "stylesheet", + "timestamps", + "transpiler", + "transpilers", + "typedoc", + "wwwroot", + "Xunit" ], // flagWords - list of words to be always considered incorrect // This is useful for offensive words and common spelling errors. diff --git a/docker-compose.yml b/docker-compose.yml index fc642b8365026284771b04797334c8946fc0c7b4..1b52ceffb8a61cbe8e3ca57c52c0e6cf6cb4720b 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,51 +1,71 @@ -version: '2' +version: "3.3" + services: + nginx: - image: dbogatov/status-site:nginx-${DOTNET_TAG} - ports: - - 5555:5555 - links: - - "web:web" - - "docs:docs" - depends_on: - - web - - docs + image: dbogatov/status-site:nginx-master + deploy: + restart_policy: + condition: on-failure + networks: + - internal + docs: - image: dbogatov/status-site:docs-${DOTNET_TAG} - ports: - - 5556:80 - restart: on-failure + image: dbogatov/status-site:docs-master + deploy: + restart_policy: + condition: on-failure + networks: + - internal + web: - image: dbogatov/status-site:web-${DOTNET_TAG} + image: dbogatov/status-site:web-master environment: - ASPNETCORE_ENVIRONMENT=Production - depends_on: - - postgres - links: - - "postgres:database" - volumes: - - ./appsettings.yml:/srv/appsettings.production.yml - restart: on-failure + deploy: + restart_policy: + condition: on-failure + networks: + - internal + secrets: + - appsettings.production.yml + ping: - image: dbogatov/status-site:ping-${DOTNET_TAG} - ports: - - 8888:8888 - restart: on-failure + image: dbogatov/status-site:ping-master + deploy: + restart_policy: + condition: on-failure + networks: + - internal + daemons: - image: dbogatov/status-site:daemons-${DOTNET_TAG} + image: dbogatov/status-site:daemons-master environment: - ASPNETCORE_ENVIRONMENT=Production - depends_on: - - postgres - links: - - "postgres:database" - - "ping:ping" - volumes: - - ./appsettings.yml:/srv/appsettings.production.yml - restart: on-failure - postgres: + deploy: + restart_policy: + condition: on-failure + networks: + - internal + secrets: + - appsettings.production.yml + + database: image: postgres:9.6.3-alpine - environment: # define connection credentials to be used in app - - POSTGRES_DB=${POSTGRES_DB} - - POSTGRES_USER=${POSTGRES_USER} - - POSTGRES_PASSWORD=${POSTGRES_PASSWORD} + deploy: + restart_policy: + condition: on-failure + environment: + POSTGRES_DB: statussite + POSTGRES_USER: statususer + POSTGRES_PASSWORD: relyOn1InternalSwarmNetwork + networks: + - internal + +networks: + internal: + driver: overlay + +secrets: + appsettings.production.yml: + external: true diff --git a/nginx/Dockerfile b/nginx/Dockerfile index dfaa383e18c9197dfe67ada3daa5fa1f8659f2de..2ec8e6c976bf17532f2be7778371db14569d15ac 100644 --- a/nginx/Dockerfile +++ b/nginx/Dockerfile @@ -1,4 +1,4 @@ -FROM nginx:latest +FROM nginx:alpine COPY web.conf /etc/nginx/conf.d/default.conf diff --git a/nginx/nginx.conf b/nginx/nginx.conf index 3b26a6769a44e1601b2374b2340f114a948b80c4..bf35731a4c1195c5e18a4e24eb5b6494b235b567 100644 --- a/nginx/nginx.conf +++ b/nginx/nginx.conf @@ -34,6 +34,8 @@ http { access_log /var/log/nginx/access.log main_ext; error_log /var/log/nginx/error.log warn; + resolver 127.0.0.11 valid=30s; + sendfile on; keepalive_timeout 65; diff --git a/nginx/web.conf b/nginx/web.conf index eeccc074441989cf4b12681070d3f39d9a66a10f..ca889785377d6668d247f257d413cee791a19cbb 100644 --- a/nginx/web.conf +++ b/nginx/web.conf @@ -1,32 +1,25 @@ server { - listen 5555; + listen 80; access_log /var/log/nginx/status-site.out.log main_ext; error_log /var/log/nginx/status-site.err.log warn; # all requests proxy to web location / { - proxy_pass http://web:5555; + proxy_pass http://web; proxy_set_header Connection keep-alive; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } - # however, log message should proxy to logging part - # location /api/LogMessage { - # proxy_pass http://logging:5555; - # proxy_set_header Connection keep-alive; - # } - # and docs requests should go to docs container location /docs { rewrite ^/docs(.*) /$1 break; - proxy_pass http://docs:80; - } - # api should be brute-force protected - # 1 request per second with up to 5 more requestrs delayed and above that dropped - location /api { - limit_req zone=one burst=5; - proxy_pass http://web:5555; - proxy_set_header Connection keep-alive; + proxy_pass http://docs; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } diff --git a/package.json b/package.json index 5d3707dfece6acdef5a8d7ad76b883b140b47ac2..94e8df22c31087f1655d18bfda9a0ecdcba4faab 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "less": "^2.7.2", "less-loader": "^2.2.3", "optimize-css-assets-webpack-plugin": "^1.3.1", - "spectacle-docs": "^0.9.12", + "spectacle-docs": "^0.9.13", "style-loader": "^0.13.1", "typedoc": "^0.5.7", "typescript": "^2.1.6", diff --git a/ping/Dockerfile b/ping/Dockerfile index dfcb2d22ce49eab1be0106fe2076a9e27807384e..c1a99a2ea8dba6e4468c037c9ed8f43e57c99720 100644 --- a/ping/Dockerfile +++ b/ping/Dockerfile @@ -11,6 +11,3 @@ COPY bin/ping /srv # Indicate the binary as our entrypoint ENTRYPOINT /srv/ping - -# Expose your port -EXPOSE 8888 diff --git a/ping/main/main.go b/ping/main/main.go index d9a441a55e3f47648836cab4247e0d5691a142e8..1f95741623d2315006386c0f43e139ff7a3b14d5 100644 --- a/ping/main/main.go +++ b/ping/main/main.go @@ -121,7 +121,7 @@ func main() { w.Write(data) }) - log.Fatal(http.ListenAndServe(":8888", nil)) + log.Fatal(http.ListenAndServe(":80", nil)) } func sendError(w *http.ResponseWriter, error error, response response) { diff --git a/src/appsettings.development.yml b/src/appsettings.development.yml index bcd985a1c958473cf8ca611b1e35701bf1fc9b3d..1beb6968a73d70ef3548052a1e0b5ab78ef14504 100755 --- a/src/appsettings.development.yml +++ b/src/appsettings.development.yml @@ -9,7 +9,7 @@ Data: - ServerUrl: "https://google.com" MaxFailures: 3 GetMethodRequired: false - PingServerUrl: http://localhost:8888 + PingServerUrl: http://localhost:80 ServiceManager: PingService: Enabled: true diff --git a/src/appsettings.production.yml b/src/appsettings.production.yml index efd02f2f1a82840a407c619addf23bd7f1b49eb4..fb9c2fc13fc56fec047bb687b6663c158df5b559 100644 --- a/src/appsettings.production.yml +++ b/src/appsettings.production.yml @@ -6,7 +6,6 @@ Secrets: Enabled: false SiteKey: "needs-to-be-set" SecretKey: "needs-to-be-set" - ConnectionString: "User ID=statususer;Password=SomethingWeird15;Host=database;Port=5432;Database=statussite;Pooling=false;CommandTimeout=300;" Email: Enabled: false Slack: diff --git a/src/appsettings.yml b/src/appsettings.yml index 79dfc322f7914b5d767bf7fe222a009b674db91b..317222dcb73e4c5e88bb6ce825fb9cf1db50ce03 100755 --- a/src/appsettings.yml +++ b/src/appsettings.yml @@ -8,7 +8,7 @@ Secrets: SecretKey: "needs-to-be-set" GoogleAnalytics: TrackingId: "none" - ConnectionString: "needs-to-be-set" + ConnectionString: "User ID=statususer;Password=relyOn1InternalSwarmNetwork;Host=database;Port=5432;Database=statussite;Pooling=false;CommandTimeout=300;" Email: Enabled: false ToEmail: "needs-to-be-set" @@ -51,7 +51,7 @@ Data: Log: "Log Messages" Ping: "Response time" Health: "System Health" - PingServerUrl: http://ping:8888 + PingServerUrl: http://ping:80 Logging: MinLogLevel: "Information" LogSeverityReported: "Error" diff --git a/src/daemons/Dockerfile b/src/daemons/Dockerfile index 9cbe34faea59a2b60d0d275541513b076e6e5c33..ae7a58391bef83efa678a48deb7090c5a9af070e 100644 --- a/src/daemons/Dockerfile +++ b/src/daemons/Dockerfile @@ -6,4 +6,9 @@ WORKDIR /srv # Copy the binary COPY bin/release/netcoreapp2.0/publish/ /srv +RUN \ + rm -f /srv/appsettings.development.yml && \ + rm -f /srv/appsettings.testing.yml && \ + rm -f /srv/appsettings.production.yml + ENTRYPOINT /bin/bash -c "dotnet daemons.dll" diff --git a/src/daemons/Program.cs b/src/daemons/Program.cs index 1eed253f184191e1b5d92d1ebc366b59536cc77a..00a8ee0a1c952b863142a925044c58519bedb339 100755 --- a/src/daemons/Program.cs +++ b/src/daemons/Program.cs @@ -40,7 +40,7 @@ namespace StatusMonitor.Daemons var builder = new ConfigurationBuilder() .AddYamlFile("appsettings.yml", optional: false) // read defaults first .AddYamlFile( - $"appsettings.{env.EnvironmentName.ToLower()}.yml", + $"{(env.IsProduction() ? "/run/secrets/" : "")}appsettings.{env.EnvironmentName.ToLower()}.yml", optional: env.IsStaging() ) // override with specific settings file .AddJsonFile("version.json", optional: true) diff --git a/src/web/Dockerfile b/src/web/Dockerfile index 3ae03e16d5c7eaff23707637f584fd1d7274a79f..88f71020d14d1067c042e65bbcfd0ae6ed5f09ce 100644 --- a/src/web/Dockerfile +++ b/src/web/Dockerfile @@ -6,7 +6,9 @@ WORKDIR /srv # Copy the binary COPY bin/release/netcoreapp2.0/publish/ /srv -# Expose the port and start the app -EXPOSE 5555 +RUN \ + rm -f /srv/appsettings.development.yml && \ + rm -f /srv/appsettings.testing.yml && \ + rm -f /srv/appsettings.production.yml ENTRYPOINT /bin/bash -c "dotnet web.dll" diff --git a/src/web/Program.cs b/src/web/Program.cs index d81d386173e0d8cbec5fae708a6529c6e9e0cf3a..cb4732faf43bb8cfa890a129123e27bd8ce4c657 100755 --- a/src/web/Program.cs +++ b/src/web/Program.cs @@ -24,7 +24,7 @@ namespace StatusMonitor.Web /// <param name="args">Arguments passed to the application through the command line. At the moment not used. </param> public static int Main(string[] args) { - int port = 5555; + int port = 80; if (args.Length != 0 && (!Int32.TryParse(args[0], out port) || port < 1024 || port > 65534)) { ColoredConsole.WriteLine("Usage: dotnet web.dll [port | number 1024-65534]", ConsoleColor.Red); @@ -46,7 +46,7 @@ namespace StatusMonitor.Web try { var host = WebHost - .CreateDefaultBuilder(args) + .CreateDefaultBuilder() .UseStartup<Startup>() .ConfigureLogging( logging => { diff --git a/src/web/Startup.cs b/src/web/Startup.cs index 09b53e4483d04c2a1f3de22ee3f594a699e41c6a..b1035ace9b28c5cec664c21268da78ba07521dc2 100755 --- a/src/web/Startup.cs +++ b/src/web/Startup.cs @@ -38,7 +38,7 @@ namespace StatusMonitor.Web var builder = new ConfigurationBuilder() .AddYamlFile("appsettings.yml", optional: false) // read defaults first .AddYamlFile( - $"appsettings.{env.EnvironmentName.ToLower()}.yml", + $"{(env.IsProduction() ? "/run/secrets/" : "")}appsettings.{env.EnvironmentName.ToLower()}.yml", optional: env.IsStaging() ) // override with specific settings file .AddJsonFile("version.json", optional: true) diff --git a/src/web/Views/ViewComponents/VersionHashViewComponent.cs b/src/web/Views/ViewComponents/VersionHashViewComponent.cs index e9670cc73bd77fe88c9149d771c2921b1cc867f1..8f16b9d83d9dcb9e50250096bb0ef35f074471f9 100644 --- a/src/web/Views/ViewComponents/VersionHashViewComponent.cs +++ b/src/web/Views/ViewComponents/VersionHashViewComponent.cs @@ -31,7 +31,7 @@ namespace StatusMonitor.Web.Views.ViewComponents { await Task.CompletedTask; - var hash = _env.IsProduction() ? _configuration["Version:GitHash"].Substring(0,8) ?? "not-set" : "dev"; + var hash = _env.IsProduction() ? (_configuration["Version:GitHash"] ?? "build-hash-not-set").Substring(0,8) : "dev"; return View((object)hash); } diff --git a/yarn.lock b/yarn.lock index 6873ccc38e54ba66638409c19137e870ea72b825..77cd00e5553979cc0d11147f6d31a3d97f44719b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -160,7 +160,7 @@ anymatch@^1.3.0: micromatch "^2.1.5" normalize-path "^2.0.0" -aproba@^1.0.3: +aproba@^1.0.3, aproba@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" @@ -361,7 +361,7 @@ block-stream@*: dependencies: inherits "~2.0.0" -bluebird@^3.1.1, bluebird@^3.4.7: +bluebird@^3.1.1, bluebird@^3.4.7, bluebird@^3.5.0: version "3.5.1" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9" @@ -507,6 +507,24 @@ builtin-status-codes@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" +cacache@^10.0.0: + version "10.0.1" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-10.0.1.tgz#3e05f6e616117d9b54665b1b20c8aeb93ea5d36f" + dependencies: + bluebird "^3.5.0" + chownr "^1.0.1" + glob "^7.1.2" + graceful-fs "^4.1.11" + lru-cache "^4.1.1" + mississippi "^1.3.0" + mkdirp "^0.5.1" + move-concurrently "^1.0.1" + promise-inflight "^1.0.1" + rimraf "^2.6.1" + ssri "^5.0.0" + unique-filename "^1.1.0" + y18n "^3.2.1" + camelcase-keys@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" @@ -615,6 +633,10 @@ chokidar@^1.7.0: optionalDependencies: fsevents "^1.0.0" +chownr@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.0.1.tgz#e2a75042a9551908bebd25b8523d5f9769d79181" + cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" @@ -763,6 +785,10 @@ commander@2.8.x: dependencies: graceful-readlink ">= 1.0.0" +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + component-emitter@^1.2.0: version "1.2.1" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" @@ -771,7 +797,7 @@ concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" -concat-stream@^1.4.1, concat-stream@^1.4.6, concat-stream@^1.4.7, concat-stream@^1.6.0: +concat-stream@^1.4.1, concat-stream@^1.4.6, concat-stream@^1.4.7, concat-stream@^1.5.0, concat-stream@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7" dependencies: @@ -828,6 +854,17 @@ cookiejar@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.1.tgz#41ad57b1b555951ec171412a81942b1e8200d34a" +copy-concurrently@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" + dependencies: + aproba "^1.1.1" + fs-write-stream-atomic "^1.0.8" + iferr "^0.1.5" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.0" + core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" @@ -1008,6 +1045,10 @@ currently-unhandled@^0.4.1: dependencies: array-find-index "^1.0.1" +cyclist@~0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-0.2.2.tgz#1b33792e11e914a2fd6d6ed6447464444e5fa640" + dashdash@^1.12.0: version "1.14.1" resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" @@ -1147,6 +1188,15 @@ duplexer@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" +duplexify@^3.1.2, duplexify@^3.4.2: + version "3.5.1" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.5.1.tgz#4e1516be68838bc90a49994f0b39a6e5960befcd" + dependencies: + end-of-stream "^1.0.0" + inherits "^2.0.1" + readable-stream "^2.0.0" + stream-shift "^1.0.0" + each-async@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/each-async/-/each-async-1.1.1.tgz#dee5229bdf0ab6ba2012a395e1b869abf8813473" @@ -1192,6 +1242,12 @@ encodeurl@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.1.tgz#79e3d58655346909fe6f0f45a5de68103b294d20" +end-of-stream@^1.0.0, end-of-stream@^1.1.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.0.tgz#7a90d833efda6cfa6eac0f4949dbb0fad3a63206" + dependencies: + once "^1.4.0" + enhanced-resolve@^3.3.0: version "3.4.1" resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz#0421e339fd71419b3da13d129b3979040230476e" @@ -1209,7 +1265,7 @@ entities@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0" -errno@^0.1.1, errno@^0.1.3: +errno@^0.1.1, errno@^0.1.3, errno@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d" dependencies: @@ -1380,6 +1436,14 @@ finalhandler@1.0.6: statuses "~1.3.1" unpipe "~1.0.0" +find-cache-dir@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-1.0.0.tgz#9288e3e9e3cc3748717d39eade17cf71fc30ee6f" + dependencies: + commondir "^1.0.1" + make-dir "^1.0.0" + pkg-dir "^2.0.0" + find-up@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" @@ -1387,6 +1451,12 @@ find-up@^1.0.0: path-exists "^2.0.0" pinkie-promise "^2.0.0" +find-up@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + dependencies: + locate-path "^2.0.0" + findup-sync@~0.1.2: version "0.1.3" resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-0.1.3.tgz#7f3e7a97b82392c653bf06589bd85190e93c3683" @@ -1398,6 +1468,13 @@ flatten@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782" +flush-write-stream@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.0.2.tgz#c81b90d8746766f1a609a46809946c45dd8ae417" + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.4" + for-in@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" @@ -1443,6 +1520,13 @@ fresh@0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" +from2@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.0" + fs-extra@^2.0.0: version "2.1.2" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-2.1.2.tgz#046c70163cef9aad46b0e4a7fa467fb22d71de35" @@ -1450,6 +1534,15 @@ fs-extra@^2.0.0: graceful-fs "^4.1.2" jsonfile "^2.1.0" +fs-write-stream-atomic@^1.0.8: + version "1.0.10" + resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" + dependencies: + graceful-fs "^4.1.2" + iferr "^0.1.5" + imurmurhash "^0.1.4" + readable-stream "1 || 2" + fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" @@ -1575,7 +1668,7 @@ glob@^6.0.4: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@~7.1.1: +glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.2, glob@~7.1.1: version "7.1.2" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" dependencies: @@ -2059,6 +2152,10 @@ ieee754@^1.1.4: version "1.1.8" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4" +iferr@^0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" + image-size@~0.5.0: version "0.5.5" resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.5.5.tgz#09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c" @@ -2529,6 +2626,13 @@ loader-utils@^1.0.2: emojis-list "^2.0.0" json5 "^0.5.0" +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + lockfile@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/lockfile/-/lockfile-1.0.3.tgz#2638fc39a0331e9cac1a04b71799931c9c50df79" @@ -2719,7 +2823,7 @@ lru-cache@2: version "2.7.3" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.7.3.tgz#6d4524e8b955f95d4f5b58851ce21dd72fb4e952" -lru-cache@^4.0.1: +lru-cache@^4.0.1, lru-cache@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.1.tgz#622e32e82488b49279114a4f9ecf45e7cd6bba55" dependencies: @@ -2902,6 +3006,21 @@ minimist@~0.0.1: version "0.0.10" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" +mississippi@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-1.3.0.tgz#d201583eb12327e3c5c1642a404a9cacf94e34f5" + dependencies: + concat-stream "^1.5.0" + duplexify "^3.4.2" + end-of-stream "^1.1.0" + flush-write-stream "^1.0.0" + from2 "^2.1.0" + parallel-transform "^1.1.0" + pump "^1.0.0" + pumpify "^1.3.3" + stream-each "^1.1.0" + through2 "^2.0.0" + "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" @@ -2918,6 +3037,17 @@ morgan@^1.6.1: on-finished "~2.3.0" on-headers "~1.0.1" +move-concurrently@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" + dependencies: + aproba "^1.1.1" + copy-concurrently "^1.0.0" + fs-write-stream-atomic "^1.0.8" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.3" + ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -3143,7 +3273,7 @@ on-headers@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz#928f5d0f470d49342651ea6794b0857c100693f7" -once@^1.3.0, once@^1.3.3: +once@^1.3.0, once@^1.3.1, once@^1.3.3, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" dependencies: @@ -3201,6 +3331,16 @@ p-finally@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" +p-limit@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.1.0.tgz#b07ff2d9a5d88bec806035895a2bab66a27988bc" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + dependencies: + p-limit "^1.1.0" + package-json@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/package-json/-/package-json-4.0.1.tgz#8869a0401253661c4c4ca3da6c2121ed555f5eed" @@ -3218,6 +3358,14 @@ pako@~1.0.5: version "1.0.6" resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.6.tgz#0101211baa70c4bca4a0f63f2206e97b7dfaf258" +parallel-transform@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.1.0.tgz#d410f065b05da23081fcd10f28854c29bda33b06" + dependencies: + cyclist "~0.2.2" + inherits "^2.0.3" + readable-stream "^2.1.5" + parse-asn1@^5.0.0: version "5.1.0" resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.0.tgz#37c4f9b7ed3ab65c74817b5f2480937fbf97c712" @@ -3257,6 +3405,10 @@ path-exists@^2.0.0: dependencies: pinkie-promise "^2.0.0" +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" @@ -3324,6 +3476,12 @@ pinkie@^2.0.0: version "2.0.4" resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" +pkg-dir@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" + dependencies: + find-up "^2.1.0" + popsicle-proxy-agent@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/popsicle-proxy-agent/-/popsicle-proxy-agent-3.0.0.tgz#b9133c55d945759ab7ee61b7711364620d3aeadc" @@ -3644,6 +3802,10 @@ promise-finally@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/promise-finally/-/promise-finally-3.0.0.tgz#ddd5d0f895432b1206ceb8da1275064d18e7aa23" +promise-inflight@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + promise@^7.1.1: version "7.3.1" resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" @@ -3672,6 +3834,21 @@ public-encrypt@^4.0.0: parse-asn1 "^5.0.0" randombytes "^2.0.1" +pump@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/pump/-/pump-1.0.3.tgz#5dfe8311c33bbf6fc18261f9f34702c47c08a954" + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pumpify@^1.3.3: + version "1.3.5" + resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.3.5.tgz#1b671c619940abcaeac0ad0e3a3c164be760993b" + dependencies: + duplexify "^3.1.2" + inherits "^2.0.1" + pump "^1.0.0" + punycode@1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" @@ -3767,16 +3944,7 @@ read-pkg@^1.0.0: normalize-package-data "^2.3.2" path-type "^1.0.0" -readable-stream@1.1: - version "1.1.13" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.13.tgz#f6eef764f514c89e2b9e23146a75ba106756d23e" - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - -readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.2.2, readable-stream@^2.2.6, readable-stream@^2.3.3: +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.2.6, readable-stream@^2.3.3: version "2.3.3" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c" dependencies: @@ -3788,6 +3956,15 @@ readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable string_decoder "~1.0.3" util-deprecate "~1.0.1" +readable-stream@1.1: + version "1.1.13" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.13.tgz#f6eef764f514c89e2b9e23146a75ba106756d23e" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + readdirp@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78" @@ -3989,7 +4166,7 @@ right-align@^0.1.1: dependencies: align-text "^0.1.1" -rimraf@2, rimraf@^2.2.1, rimraf@^2.4.4, rimraf@^2.5.1, rimraf@^2.6.1: +rimraf@2, rimraf@^2.2.1, rimraf@^2.4.4, rimraf@^2.5.1, rimraf@^2.5.4, rimraf@^2.6.1: version "2.6.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" dependencies: @@ -4006,6 +4183,12 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: hash-base "^2.0.0" inherits "^2.0.1" +run-queue@^1.0.0, run-queue@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" + dependencies: + aproba "^1.1.1" + safe-buffer@5.1.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" @@ -4212,9 +4395,9 @@ spdx-license-ids@^1.0.2: version "1.2.2" resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57" -spectacle-docs@^0.9.12: - version "0.9.12" - resolved "https://registry.yarnpkg.com/spectacle-docs/-/spectacle-docs-0.9.12.tgz#0b28f4f7c7306cf35ba018df65becaecca6c112d" +spectacle-docs@^0.9.13: + version "0.9.13" + resolved "https://registry.yarnpkg.com/spectacle-docs/-/spectacle-docs-0.9.13.tgz#48cc29de3a69d41f1dfda582b876d4d8affc085e" dependencies: bluebird "^3.4.7" cheerio "^0.19.0" @@ -4262,6 +4445,12 @@ sshpk@^1.7.0: jsbn "~0.1.0" tweetnacl "~0.14.0" +ssri@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-5.0.0.tgz#13c19390b606c821f2a10d02b351c1729b94d8cf" + dependencies: + safe-buffer "^5.1.0" + stack-chain@1.3.x, stack-chain@~1.3.1: version "1.3.7" resolved "https://registry.yarnpkg.com/stack-chain/-/stack-chain-1.3.7.tgz#d192c9ff4ea6a22c94c4dd459171e3f00cea1285" @@ -4287,6 +4476,13 @@ stream-browserify@^2.0.1: inherits "~2.0.1" readable-stream "^2.0.2" +stream-each@^1.1.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.2.tgz#8e8c463f91da8991778765873fe4d960d8f616bd" + dependencies: + end-of-stream "^1.1.0" + stream-shift "^1.0.0" + stream-http@^2.7.2: version "2.7.2" resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.7.2.tgz#40a050ec8dc3b53b33d9909415c02c0bf1abfbad" @@ -4297,6 +4493,10 @@ stream-http@^2.7.2: to-arraybuffer "^1.0.0" xtend "^4.0.0" +stream-shift@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" + strict-uri-encode@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" @@ -4491,6 +4691,13 @@ throat@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/throat/-/throat-3.2.0.tgz#50cb0670edbc40237b9e347d7e1f88e4620af836" +through2@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be" + dependencies: + readable-stream "^2.1.5" + xtend "~4.0.1" + timed-out@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" @@ -4661,7 +4868,14 @@ typings@^2.1.0: wordwrap "^1.0.0" xtend "^4.0.1" -uglify-js@^2.6, uglify-js@^2.8.27, uglify-js@^2.8.29: +uglify-es@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/uglify-es/-/uglify-es-3.2.0.tgz#fbbfb9dc465ec7e5065701b9720d0de977d0bc24" + dependencies: + commander "~2.12.1" + source-map "~0.6.1" + +uglify-js@^2.6, uglify-js@^2.8.27: version "2.8.29" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd" dependencies: @@ -4690,13 +4904,17 @@ uglify-to-browserify@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" -uglifyjs-webpack-plugin@^0.4.3: - version "0.4.6" - resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz#b951f4abb6bd617e66f63eb891498e391763e309" +uglifyjs-webpack-plugin@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.1.2.tgz#8a9abc238d01a33daaf86fa9a84c7ebc1e67b0f9" dependencies: - source-map "^0.5.6" - uglify-js "^2.8.29" + cacache "^10.0.0" + find-cache-dir "^1.0.0" + schema-utils "^0.3.0" + source-map "^0.6.1" + uglify-es "^3.2.0" webpack-sources "^1.0.1" + worker-farm "^1.4.1" uid-number@^0.0.6: version "0.0.6" @@ -4740,6 +4958,18 @@ uniqs@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" +unique-filename@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.0.tgz#d05f2fe4032560871f30e93cbe735eea201514f3" + dependencies: + unique-slug "^2.0.0" + +unique-slug@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.0.tgz#db6676e7c7cc0629878ff196097c78855ae9f4ab" + dependencies: + imurmurhash "^0.1.4" + unique-string@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a" @@ -4945,6 +5175,13 @@ wordwrap@~0.0.2: version "0.0.3" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" +worker-farm@^1.4.1: + version "1.5.2" + resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.5.2.tgz#32b312e5dc3d5d45d79ef44acc2587491cd729ae" + dependencies: + errno "^0.1.4" + xtend "^4.0.1" + wrap-ansi@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" @@ -4968,7 +5205,7 @@ xdg-basedir@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" -xtend@^4.0.0, xtend@^4.0.1: +xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"